diff --git a/.gitignore b/.gitignore index 8e7e590f..8eee6dc6 100644 --- a/.gitignore +++ b/.gitignore @@ -400,6 +400,7 @@ FodyWeavers.xsd .idea/ ix/.g/** +.g/ .apax/ /src/apax/stc-generic-x64 diff --git a/cake/Program.cs b/cake/Program.cs index 2f92b44b..547ccc51 100644 --- a/cake/Program.cs +++ b/cake/Program.cs @@ -111,15 +111,20 @@ public override void Run(BuildContext context) { context.DotNetBuild(Path.Combine(context.RootDir, "ix.compiler\\src\\ixc\\Ix.ixc.csproj"), context.DotNetBuildSettings); - context.DotNetRunSettings.WorkingDirectory = Path.Combine(context.RootDir, "ix.blazor\\tests\\sandbox\\ax-blazor-example\\"); - - context.DotNetRun(Path.Combine(context.RootDir, "ix.compiler\\src\\ixc\\Ix.ixc.csproj"), context.DotNetRunSettings); + var axprojects = new List() + { + Path.Combine(context.RootDir, "ix.blazor\\tests\\sandbox\\ax-blazor-example\\"), + Path.Combine(context.RootDir, "sanbox\\integration\\ix-integration-plc\\"), + Path.Combine(context.RootDir, "ix.examples\\hello.world.console\\hello.world.console.plc"), + Path.Combine(context.RootDir, "ix.connectors\\tests\\ax-test-project\\") + }; - context.DotNetRunSettings.WorkingDirectory = Path.Combine(context.RootDir, "sanbox\\integration\\ix-integration-plc\\"); - context.DotNetRun(Path.Combine(context.RootDir, "ix.compiler\\src\\ixc\\Ix.ixc.csproj"), context.DotNetRunSettings); - context.DotNetRunSettings.WorkingDirectory = Path.Combine(context.RootDir, "ix.examples\\hello.world.console\\hello.world.console.plc"); - context.DotNetRun(Path.Combine(context.RootDir, "ix.compiler\\src\\ixc\\Ix.ixc.csproj"), context.DotNetRunSettings); + foreach (var axproject in axprojects) + { + context.DotNetRunSettings.WorkingDirectory = Path.Combine(context.RootDir, axproject); + context.DotNetRun(Path.Combine(context.RootDir, "ix.compiler\\src\\ixc\\Ix.ixc.csproj"), context.DotNetRunSettings); + } context.DotNetBuild(Path.Combine(context.RootDir, "ix.sln"), context.DotNetBuildSettings); @@ -155,13 +160,15 @@ public override void Run(BuildContext context) } else { - var workingDirectory = Path.GetFullPath(Path.Combine(context.WorkDirName, - "..//..//src//ix.connectors//tests//ax-test-project//")); - - var targetIp = Environment.GetEnvironmentVariable("AXTARGET"); - var targetPlatform = Environment.GetEnvironmentVariable("AXTARGETPLATFORMINPUT"); - - UploadTestPlc(context, workingDirectory, targetIp, targetPlatform); + UploadTestPlc(context, + Path.GetFullPath(Path.Combine(context.WorkDirName, "..//..//src//ix.connectors//tests//ax-test-project//")), + Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET"), + Environment.GetEnvironmentVariable("AXTARGETPLATFORMINPUT")); + + UploadTestPlc(context, + Path.GetFullPath(Path.Combine(context.WorkDirName, "..//..//src//tests.integrations//integrated//src//ax")), + Environment.GetEnvironmentVariable("AXTARGET"), + Environment.GetEnvironmentVariable("AXTARGETPLATFORMINPUT")); RunTestsFromFilteredSolution(context, Path.Combine(context.RootDir, "ix-L3-tests.slnf")); } diff --git a/src/ix-L3-tests.slnf b/src/ix-L3-tests.slnf index 7c1e4e38..05c6015c 100644 --- a/src/ix-L3-tests.slnf +++ b/src/ix-L3-tests.slnf @@ -27,15 +27,19 @@ "ix.examples\\hello.world.console\\hello.world.console.plc\\ix\\hello.world.console.plc.csproj", "ix.examples\\hello.world.console\\hello.world.console\\hello.world.console.csproj", "ix.templates\\working\\ix.templates.csproj", + "ix.templates\\working\\templates\\ixblazor\\ixblazor.app\\ixblazor.hmi.csproj", "ix.templates\\working\\templates\\ixblazor\\ixblazor.twin\\ixblazor.csproj", - "ix.templates\\working\\templates\\ixblazor\\ixblazor\\ixblazor.app.csproj", "ix.templates\\working\\templates\\ixconsole\\ixconsole.twin\\ixconsole.csproj", "ix.templates\\working\\templates\\ixconsole\\ixconsole\\ixconsole.app.csproj", "ix.templates\\working\\templates\\ixtwin\\ixtwin.csproj", "ix.tools\\src\\ix.nuget.update\\ix.nuget.update.csproj", "ix.tools\\tests\\ix.nuget.update.Tests\\ix.nuget.update.Tests.csproj", "sanbox\\integration\\ix-integration-blazor\\ix-integration-blazor.csproj", - "sanbox\\integration\\ix-integration-plc\\ix\\ix-integration-plc.csproj" + "sanbox\\integration\\ix-integration-library\\ix-integration-library.csproj", + "sanbox\\integration\\ix-integration-plc\\ix\\ix-integration-plc.csproj", + "tests.integrations\\integrated\\src\\integrated.app\\integrated.hmi.csproj", + "tests.integrations\\integrated\\src\\integrated.twin\\integrated.csproj", + "tests.integrations\\integrated\\tests\\integrated.tests\\integrated.tests.csproj" ] } } \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/CU00x.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/CU00x.g.cs deleted file mode 100644 index aa09bf8a..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/CU00x.g.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class CU00x : CUBase -{ - public OnlinerString _cuName { get; } - - public CU00x(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - _cuName = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "_cuName", "_cuName"); - } -} - -public partial class CUBase : Ix.Connector.ITwinObject -{ - public OnlinerString _baseName { get; } - - public CUBase(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - _baseName = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "_baseName", "_baseName"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/GroupBox_other.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/GroupBox_other.g.cs deleted file mode 100644 index 4145a439..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/GroupBox_other.g.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class GroupBox_other : Ix.Connector.ITwinObject -{ - public OnlinerInt B1 { get; } - - [Container(Layout.Stack)] - public OnlinerInt B2 { get; } - - [Container(Layout.Stack)] - public OnlinerString Piston_A1 { get; } - - public OnlinerString Piston_A2 { get; } - - public OnlinerString Piston_A3 { get; } - - public OnlinerString Piston_A4 { get; } - - [Container(Layout.Tabs)] - public OnlinerInt Piston_A21 { get; } - - public OnlinerInt Piston_A22 { get; } - - public OnlinerInt Piston_A23 { get; } - - public OnlinerInt Piston_A24 { get; } - - [Container(Layout.UniformGrid)] - public OnlinerReal Piston_A31 { get; } - - public OnlinerReal Piston_A32 { get; } - - public OnlinerReal Piston_A33 { get; } - - public OnlinerReal Piston_A34 { get; } - - public OnlinerBool Piston_A41 { get; } - - public OnlinerBool Piston_A42 { get; } - - public OnlinerBool Piston_A43 { get; } - - public OnlinerBool Piston_A44 { get; } - - public TestStructOneGroupWithLayout Servo_S1 { get; } - - [Container(Layout.Stack)] - public OnlinerString Servo_S2 { get; } - - public GroupBox_other(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - B1 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "B1", "B1"); - B1.AttributeName = "B1"; - B2 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "B2", "B2"); - B2.AttributeName = "B2"; - Piston_A1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A1", "Piston_A1"); - Piston_A1.AttributeName = "A1"; - Piston_A2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A2", "Piston_A2"); - Piston_A2.AttributeName = "A2"; - Piston_A3 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A3", "Piston_A3"); - Piston_A3.AttributeName = "A3"; - Piston_A4 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A4", "Piston_A4"); - Piston_A4.AttributeName = "A4"; - Piston_A21 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "Piston_A21", "Piston_A21"); - Piston_A22 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A5", "Piston_A22"); - Piston_A22.AttributeName = "A5"; - Piston_A23 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A6", "Piston_A23"); - Piston_A23.AttributeName = "A6"; - Piston_A24 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A7", "Piston_A24"); - Piston_A24.AttributeName = "A7"; - Piston_A31 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Piston_A31", "Piston_A31"); - Piston_A32 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A8", "Piston_A32"); - Piston_A32.AttributeName = "A8"; - Piston_A33 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A9", "Piston_A33"); - Piston_A33.AttributeName = "A9"; - Piston_A34 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A10", "Piston_A34"); - Piston_A34.AttributeName = "A10"; - Piston_A41 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "Piston_A41", "Piston_A41"); - Piston_A42 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A11", "Piston_A42"); - Piston_A42.AttributeName = "A11"; - Piston_A43 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A12", "Piston_A43"); - Piston_A43.AttributeName = "A12"; - Piston_A44 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A13", "Piston_A44"); - Piston_A44.AttributeName = "A13"; - Servo_S1 = new TestStructOneGroupWithLayout(this, "Servo S1", "Servo_S1"); - Servo_S1.AttributeName = "Servo S1"; - Servo_S2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ABB S2", "Servo_S2"); - Servo_S2.AttributeName = "ABB S2"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/MAIN.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/MAIN.g.cs deleted file mode 100644 index 4a3fae59..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/MAIN.g.cs +++ /dev/null @@ -1,148 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class MAIN : Ix.Connector.ITwinObject -{ - public OnlinerString Hello_World { get; } - - public OnlinerInt cislo { get; } - - public OnlinerBool boolValue { get; } - - public OnlinerLReal Position { get; } - - public stTest instanceOfstTest { get; } - - public stTest2 instanceOfstTest2 { get; } - - public stTest3 instanceOfstTest3 { get; } - - public stBlazor instanceOfstBlazor { get; } - - public stTest[] arr1 { get; } - - public OnlinerInt[] arr2 { get; } - - public OnlinerDate dateVar { get; } - - public stComplex instanceOfstComplex { get; } - - public stTestPrimitive instanceOfstPrimitive { get; } - - public stMultipleLayouts instanceOfstMultipleLayouts { get; } - - public stLayouts instanceOfstMultipleLayouts2 { get; } - - public IxComponent instanceOfIxComponent { get; } - - public GroupBox_other groupBox_test { get; } - - public CU00x cu00 { get; } - - public CUBase cuBase { get; } - - public MAIN(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Hello_World = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#Hello#> <#World#>", "Hello_World"); - Hello_World.AttributeName = "<#Hello#> <#World#>"; - cislo = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "cislo", "cislo"); - cislo.AttributeName = "cislo"; - boolValue = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "bool_val", "boolValue"); - boolValue.AttributeName = "bool_val"; - Position = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "Position", "Position"); - Position.AttributeName = "Position"; - instanceOfstTest = new stTest(this, "Struct", "instanceOfstTest"); - instanceOfstTest.AttributeName = "Struct"; - instanceOfstTest2 = new stTest2(this, "Struct2", "instanceOfstTest2"); - instanceOfstTest2.AttributeName = "Struct2"; - instanceOfstTest3 = new stTest3(this, "instanceOfStTest3", "instanceOfstTest3"); - instanceOfstTest3.AttributeName = "instanceOfStTest3"; - instanceOfstBlazor = new stBlazor(this, "BlazorStruct", "instanceOfstBlazor"); - instanceOfstBlazor.AttributeName = "BlazorStruct"; - arr1 = new stTest[3]; - Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(arr1, this, "arr1", "arr1", (p, rt, st) => new stTest(p, rt, st)); - arr2 = new OnlinerInt[6]; - Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(arr2, this, "arr2", "arr2", (p, rt, st) => new OnlinerInt(p, rt, st)); - dateVar = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "dateVar", "dateVar"); - instanceOfstComplex = new stComplex(this, "instanceOfComplex", "instanceOfstComplex"); - instanceOfstComplex.AttributeName = "instanceOfComplex"; - instanceOfstPrimitive = new stTestPrimitive(this, "instanceOfStPrimitive", "instanceOfstPrimitive"); - instanceOfstPrimitive.AttributeName = "instanceOfStPrimitive"; - instanceOfstMultipleLayouts = new stMultipleLayouts(this, "instanceOfstMultipleLayouts", "instanceOfstMultipleLayouts"); - instanceOfstMultipleLayouts2 = new stLayouts(this, "instanceOfstMultipleLayouts2", "instanceOfstMultipleLayouts2"); - instanceOfIxComponent = new IxComponent(this, "instanceOfIxComponent", "instanceOfIxComponent"); - instanceOfIxComponent.AttributeName = "instanceOfIxComponent"; - groupBox_test = new GroupBox_other(this, "groupBox_test", "groupBox_test"); - cu00 = new CU00x(this, "cu00", "cu00"); - cuBase = new CUBase(this, "cuBase", "cuBase"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TcoVortexObject.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TcoVortexObject.g.cs deleted file mode 100644 index e4616642..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TcoVortexObject.g.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TcoIxObject : Ix.Connector.ITwinObject -{ - public OnlinerBool ix_bool { get; } - - public OnlinerInt ix_int { get; } - - public OnlinerString ix_string { get; } - - public TcoIxObject(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - ix_bool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "ix_bool", "ix_bool"); - ix_int = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "ix_int", "ix_int"); - ix_string = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ix_string", "ix_string"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestEmpty.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestEmpty.g.cs deleted file mode 100644 index 815e1a5e..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestEmpty.g.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestEmpty : Ix.Connector.ITwinObject -{ - public TestEmpty(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestLayoutOverwriting.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestLayoutOverwriting.g.cs deleted file mode 100644 index 43e3c975..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestLayoutOverwriting.g.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -[Container(Layout.UniformGrid)] -public partial class TestLayoutOverwriting : Ix.Connector.ITwinObject -{ - public OnlinerBool ix_bool { get; } - - public OnlinerInt ix_int { get; } - - public OnlinerString ix_string { get; } - - [Container(Layout.Wrap)] - public TestSimple simple { get; } - - [Container(Layout.Wrap)] - public prgWeatherStations weather { get; } - - public TestLayoutOverwriting(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - ix_bool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "ix_bool", "ix_bool"); - ix_int = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "ix_int", "ix_int"); - ix_string = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ix_string", "ix_string"); - simple = new TestSimple(this, "simple", "simple"); - weather = new prgWeatherStations(this, "weather", "weather"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestMixed.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestMixed.g.cs deleted file mode 100644 index 606f4c5d..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestMixed.g.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestMixed : Ix.Connector.ITwinObject -{ - [Container(Layout.Wrap)] - public OnlinerInt e { get; } - - public OnlinerString r44 { get; } - - public OnlinerString k21 { get; } - - public TestMixed(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - e = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "e", "e"); - r44 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "r44", "r44"); - k21 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "k21", "k21"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestMultipleLayouts.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestMultipleLayouts.g.cs deleted file mode 100644 index 8b64172c..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestMultipleLayouts.g.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestMultipleLayouts : Ix.Connector.ITwinObject -{ - public OnlinerInt B1 { get; } - - [Container(Layout.Stack)] - public OnlinerInt B2 { get; } - - [Container(Layout.Stack)] - public OnlinerString Piston_A1 { get; } - - public OnlinerString Piston_A2 { get; } - - public OnlinerString Piston_A3 { get; } - - public OnlinerString Piston_A4 { get; } - - [Container(Layout.Tabs)] - public OnlinerInt Piston_A21 { get; } - - public OnlinerInt Piston_A22 { get; } - - public OnlinerInt Piston_A23 { get; } - - public OnlinerInt Piston_A24 { get; } - - [Container(Layout.UniformGrid)] - public OnlinerReal Piston_A31 { get; } - - public OnlinerReal Piston_A32 { get; } - - public OnlinerReal Piston_A33 { get; } - - public OnlinerReal Piston_A34 { get; } - - public OnlinerBool Piston_A41 { get; } - - public OnlinerBool Piston_A42 { get; } - - public OnlinerBool Piston_A43 { get; } - - public OnlinerBool Piston_A44 { get; } - - [Container(Layout.Stack)] - public OnlinerString Servo_S1 { get; } - - [Container(Layout.Stack)] - public OnlinerString Servo_S2 { get; } - - public TestMultipleLayouts(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - B1 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "B1", "B1"); - B1.AttributeName = "B1"; - B2 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "B2", "B2"); - B2.AttributeName = "B2"; - Piston_A1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A1", "Piston_A1"); - Piston_A1.AttributeName = "A1"; - Piston_A2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A2", "Piston_A2"); - Piston_A2.AttributeName = "A2"; - Piston_A3 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A3", "Piston_A3"); - Piston_A3.AttributeName = "A3"; - Piston_A4 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A4", "Piston_A4"); - Piston_A4.AttributeName = "A4"; - Piston_A21 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "Piston_A21", "Piston_A21"); - Piston_A22 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A5", "Piston_A22"); - Piston_A22.AttributeName = "A5"; - Piston_A23 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A6", "Piston_A23"); - Piston_A23.AttributeName = "A6"; - Piston_A24 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A7", "Piston_A24"); - Piston_A24.AttributeName = "A7"; - Piston_A31 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Piston_A31", "Piston_A31"); - Piston_A32 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A8", "Piston_A32"); - Piston_A32.AttributeName = "A8"; - Piston_A33 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A9", "Piston_A33"); - Piston_A33.AttributeName = "A9"; - Piston_A34 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A10", "Piston_A34"); - Piston_A34.AttributeName = "A10"; - Piston_A41 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "Piston_A41", "Piston_A41"); - Piston_A42 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A11", "Piston_A42"); - Piston_A42.AttributeName = "A11"; - Piston_A43 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A12", "Piston_A43"); - Piston_A43.AttributeName = "A12"; - Piston_A44 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A13", "Piston_A44"); - Piston_A44.AttributeName = "A13"; - Servo_S1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Servo S1", "Servo_S1"); - Servo_S1.AttributeName = "Servo S1"; - Servo_S2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ABB S2", "Servo_S2"); - Servo_S2.AttributeName = "ABB S2"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestSimple.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestSimple.g.cs deleted file mode 100644 index 2755d027..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestSimple.g.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestSimple : Ix.Connector.ITwinObject -{ - public OnlinerString Piston_A1 { get; } - - public OnlinerString Piston_A2 { get; } - - public OnlinerString Piston_A3 { get; } - - public OnlinerString Piston_A4 { get; } - - public TestSimple(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Piston_A1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A1", "Piston_A1"); - Piston_A1.AttributeName = "A1"; - Piston_A2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A2", "Piston_A2"); - Piston_A2.AttributeName = "A2"; - Piston_A3 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A3", "Piston_A3"); - Piston_A3.AttributeName = "A3"; - Piston_A4 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A4", "Piston_A4"); - Piston_A4.AttributeName = "A4"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestSimpleNested.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestSimpleNested.g.cs deleted file mode 100644 index d93768a2..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestSimpleNested.g.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestSimpleNested : Ix.Connector.ITwinObject -{ - [Container(Layout.Tabs)] - public stTestNested str { get; } - - public TestSimpleNested(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - str = new stTestNested(this, "str", "str"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStruct.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStruct.g.cs deleted file mode 100644 index 32cb202c..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStruct.g.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestStruct : Ix.Connector.ITwinObject -{ - public OnlinerInt e { get; } - - public OnlinerString r44 { get; } - - public OnlinerString k21 { get; } - - public stExample example { get; } - - public TestStruct(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - e = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "e", "e"); - r44 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "r44", "r44"); - k21 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "k21", "k21"); - example = new stExample(this, "example", "example"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructMultipleGroups.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructMultipleGroups.g.cs deleted file mode 100644 index 291135a0..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructMultipleGroups.g.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestStructMultipleGroups : Ix.Connector.ITwinObject -{ - public OnlinerInt e { get; } - - [Container(Layout.Stack)] - public OnlinerString r44 { get; } - - public OnlinerString k21 { get; } - - public TestStructMultipleGroups(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - e = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "e", "e"); - r44 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "r44", "r44"); - k21 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "k21", "k21"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructOneGroupWithLayout.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructOneGroupWithLayout.g.cs deleted file mode 100644 index 5f4ebb54..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructOneGroupWithLayout.g.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestStructOneGroupWithLayout : Ix.Connector.ITwinObject -{ - [Container(Layout.Wrap)] - public OnlinerInt e { get; } - - public OnlinerString r44 { get; } - - public OnlinerString k21 { get; } - - public TestStructOneGroupWithLayout(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - e = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "e", "e"); - r44 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "r44", "r44"); - k21 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "k21", "k21"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructWithMainLayout.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructWithMainLayout.g.cs deleted file mode 100644 index 99e09790..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestStructWithMainLayout.g.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestStructWithMainLayout : Ix.Connector.ITwinObject -{ - public OnlinerInt e { get; } - - public OnlinerString r44 { get; } - - public OnlinerString k21 { get; } - - public TestStructWithMainLayout(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - e = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "e", "e"); - r44 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "r44", "r44"); - k21 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "k21", "k21"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestWithoutLayouts.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestWithoutLayouts.g.cs deleted file mode 100644 index 268f4b33..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/TestWithoutLayouts.g.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class TestWithoutLayouts : Ix.Connector.ITwinObject -{ - public OnlinerBool ix_bool { get; } - - public OnlinerInt ix_int { get; } - - public OnlinerString ix_string { get; } - - public TestWithoutLayouts(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - ix_bool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "ix_bool", "ix_bool"); - ix_int = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "ix_int", "ix_int"); - ix_string = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ix_string", "ix_string"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/fbWorldWeatherWatch.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/fbWorldWeatherWatch.g.cs deleted file mode 100644 index 1e835f55..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/fbWorldWeatherWatch.g.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class fbWorldWeatherWatch : Ix.Connector.ITwinObject -{ - [Container(Layout.Stack)] - public structWeatherStation NorthPole { get; } - - [Container(Layout.Stack)] - public structWeatherStation SouthPole { get; } - - [Container(Layout.Stack)] - public structWeatherStation Verl { get; } - - [Container(Layout.Stack)] - public structWeatherStation Kriva { get; } - - public fbWorldWeatherWatch(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - NorthPole = new structWeatherStation(this, "North pole station", "NorthPole"); - NorthPole.AttributeName = "North pole station"; - SouthPole = new structWeatherStation(this, "South pole station", "SouthPole"); - SouthPole.AttributeName = "South pole station"; - Verl = new structWeatherStation(this, "Verl, Germany", "Verl"); - Verl.AttributeName = "Verl, Germany"; - Kriva = new structWeatherStation(this, "Kriva, Slovakia", "Kriva"); - Kriva.AttributeName = "Kriva, Slovakia"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/prgWeatherStations.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/prgWeatherStations.g.cs deleted file mode 100644 index 00a11123..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/prgWeatherStations.g.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -[Container(Layout.Stack)] -public partial class prgWeatherStations : Ix.Connector.ITwinObject -{ - [Container(Layout.Tabs)] - public fbWorldWeatherWatch _weatherStations { get; } - - [Container(Layout.Stack)] - [Group(GroupLayout.GroupBox)] - public OnlinerString PlcCommentOnCurrentWeather { get; } - - public prgWeatherStations(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - _weatherStations = new fbWorldWeatherWatch(this, "Weather Cyclic", "_weatherStations"); - _weatherStations.AttributeName = "Weather Cyclic"; - PlcCommentOnCurrentWeather = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "What plc says", "PlcCommentOnCurrentWeather"); - PlcCommentOnCurrentWeather.AttributeName = "What plc says"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stBlazor.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stBlazor.g.cs deleted file mode 100644 index 5003610f..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stBlazor.g.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stBlazor : Ix.Connector.ITwinObject -{ - public OnlinerInt testInteger { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(stTestEnum))] - public OnlinerInt testEnum { get; } - - public OnlinerString testString { get; } - - public OnlinerReal testReal { get; } - - [RenderIgnore("Display")] - public OnlinerLReal testLReal { get; } - - public OnlinerBool testBool { get; } - - [RenderIgnore()] - public stComplex complexInstance { get; } - - public stTest3 testInstance { get; } - - public stTest3 testInstance2 { get; } - - public stTest testInstance3 { get; } - - public stBlazor(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "testInteger"); - testInteger.AttributeName = "<#Integer From PLC#>"; - testEnum = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "testEnum", "testEnum"); - testEnum.AttributeName = "testEnum"; - testEnum.AttributeName = "testEnum"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#String From PLC#>", "testString"); - testString.AttributeName = "<#String From PLC#>"; - testReal = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "testReal", "testReal"); - testLReal = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "testLReal", "testLReal"); - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "testBool", "testBool"); - complexInstance = new stComplex(this, "Complex", "complexInstance"); - complexInstance.AttributeName = "Complex"; - testInstance = new stTest3(this, "testInstance1", "testInstance"); - testInstance.AttributeName = "testInstance1"; - testInstance2 = new stTest3(this, "testInstance2", "testInstance2"); - testInstance2.AttributeName = "testInstance2"; - testInstance3 = new stTest(this, "testInstance3", "testInstance3"); - testInstance3.AttributeName = "testInstance3"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stComplex.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stComplex.g.cs deleted file mode 100644 index f4f6700d..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stComplex.g.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stComplex : Ix.Connector.ITwinObject -{ - public OnlinerInt stComplexInteger { get; } - - public OnlinerString stComplexString { get; } - - public stComplex(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - stComplexInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "stComplexInteger"); - stComplexInteger.AttributeName = "<#Integer From PLC#>"; - stComplexString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#String From PLC#>", "stComplexString"); - stComplexString.AttributeName = "<#String From PLC#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stComplexUnknown.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stComplexUnknown.g.cs deleted file mode 100644 index e8c6430e..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stComplexUnknown.g.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stComplexUnknown : Ix.Connector.ITwinObject -{ - public OnlinerString stComplexUnknownString { get; } - - public OnlinerBool testBool { get; } - - public OnlinerInt stComplexUnknowInteger { get; } - - public OnlinerDate TestDate { get; } - - public stComplexUnknown(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - stComplexUnknownString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#String unknown From PLC#>", "stComplexUnknownString"); - stComplexUnknownString.AttributeName = "<#String unknown From PLC#>"; - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "<#BOOL unknown From PLC#>", "testBool"); - testBool.AttributeName = "<#BOOL unknown From PLC#>"; - stComplexUnknowInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer unknown From PLC#>", "stComplexUnknowInteger"); - stComplexUnknowInteger.AttributeName = "<#Integer unknown From PLC#>"; - TestDate = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "<#DATE unknown From PLC#>", "TestDate"); - TestDate.AttributeName = "<#DATE unknown From PLC#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stExample.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stExample.g.cs deleted file mode 100644 index afb30f53..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stExample.g.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stExample : Ix.Connector.ITwinObject -{ - [Container(Layout.Tabs)] - [Group(GroupLayout.GroupBox)] - public OnlinerInt testInteger { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(stTestEnum))] - public OnlinerInt testEnum { get; } - - public OnlinerString testString { get; } - - public OnlinerBool testBool { get; } - - public stExample(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "Group name", "testInteger"); - testInteger.AttributeName = "Group name"; - testEnum = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "testEnum", "testEnum"); - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "testString", "testString"); - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "testBool", "testBool"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stLayouts.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stLayouts.g.cs deleted file mode 100644 index 9f37427a..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stLayouts.g.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stLayouts : Ix.Connector.ITwinObject -{ - public stLayouts(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stMultipleLayouts.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stMultipleLayouts.g.cs deleted file mode 100644 index a1dc51ab..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stMultipleLayouts.g.cs +++ /dev/null @@ -1,187 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stMultipleLayouts : Ix.Connector.ITwinObject -{ - [Container(Layout.Tabs)] - public TestStructOneGroupWithLayout Servo_S5 { get; } - - [Container(Layout.Tabs)] - public TestStruct Servo_S6 { get; } - - [Container(Layout.Tabs)] - public TestStructMultipleGroups Servo_S7 { get; } - - [Container(Layout.Tabs)] - public TestStructWithMainLayout Servo_S8 { get; } - - [Container(Layout.Stack)] - public OnlinerString Piston_A1 { get; } - - public OnlinerString Piston_A2 { get; } - - public OnlinerString Piston_A3 { get; } - - public OnlinerString Piston_A4 { get; } - - [Container(Layout.Wrap)] - public OnlinerInt Piston_A21 { get; } - - public OnlinerInt Piston_A22 { get; } - - public OnlinerInt Piston_A23 { get; } - - public OnlinerInt Piston_A24 { get; } - - [Container(Layout.Tabs)] - public OnlinerReal Piston_A31 { get; } - - public OnlinerReal Piston_A32 { get; } - - public OnlinerReal Piston_A33 { get; } - - public OnlinerReal Piston_A34 { get; } - - [Container(Layout.UniformGrid)] - public OnlinerBool Piston_A41 { get; } - - public OnlinerBool Piston_A42 { get; } - - public OnlinerBool Piston_A43 { get; } - - public OnlinerBool Piston_A44 { get; } - - [Container(Layout.Stack)] - public OnlinerString Servo_S1 { get; } - - [Container(Layout.Stack)] - public OnlinerString Servo_S2 { get; } - - [Container(Layout.Tabs)] - public IxComponent component { get; } - - public stTest3 Servo_S3 { get; } - - public stTest3 Servo_S4 { get; } - - public stMultipleLayouts(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Servo_S5 = new TestStructOneGroupWithLayout(this, "With One Group Layout", "Servo_S5"); - Servo_S5.AttributeName = "With One Group Layout"; - Servo_S6 = new TestStruct(this, "Without Group Layout", "Servo_S6"); - Servo_S6.AttributeName = "Without Group Layout"; - Servo_S7 = new TestStructMultipleGroups(this, "With Multiple Groups", "Servo_S7"); - Servo_S7.AttributeName = "With Multiple Groups "; - Servo_S8 = new TestStructWithMainLayout(this, "TestStruct With Main Layout", "Servo_S8"); - Servo_S8.AttributeName = "TestStruct With Main Layout "; - Piston_A1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A1", "Piston_A1"); - Piston_A1.AttributeName = "A1"; - Piston_A2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A2", "Piston_A2"); - Piston_A2.AttributeName = "A2"; - Piston_A3 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A3", "Piston_A3"); - Piston_A3.AttributeName = "A3"; - Piston_A4 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A4", "Piston_A4"); - Piston_A4.AttributeName = "A4"; - Piston_A21 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A5", "Piston_A21"); - Piston_A21.AttributeName = "A5"; - Piston_A22 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A6", "Piston_A22"); - Piston_A22.AttributeName = "A6"; - Piston_A23 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A7", "Piston_A23"); - Piston_A23.AttributeName = "A7"; - Piston_A24 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A8", "Piston_A24"); - Piston_A24.AttributeName = "A8"; - Piston_A31 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Piston_A31", "Piston_A31"); - Piston_A32 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A8", "Piston_A32"); - Piston_A32.AttributeName = "A8"; - Piston_A33 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A9", "Piston_A33"); - Piston_A33.AttributeName = "A9"; - Piston_A34 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A10", "Piston_A34"); - Piston_A34.AttributeName = "A10"; - Piston_A41 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "Piston_A41", "Piston_A41"); - Piston_A42 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A11", "Piston_A42"); - Piston_A42.AttributeName = "A11"; - Piston_A43 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A12", "Piston_A43"); - Piston_A43.AttributeName = "A12"; - Piston_A44 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A13", "Piston_A44"); - Piston_A44.AttributeName = "A13"; - Servo_S1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Servo S1", "Servo_S1"); - Servo_S1.AttributeName = "Servo S1"; - Servo_S2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ABB S2", "Servo_S2"); - Servo_S2.AttributeName = "ABB S2"; - component = new IxComponent(this, "My ix component", "component"); - component.AttributeName = "My ix component"; - Servo_S3 = new stTest3(this, "Servo S3", "Servo_S3"); - Servo_S3.AttributeName = "Servo S3"; - Servo_S4 = new stTest3(this, "Servo S4", "Servo_S4"); - Servo_S4.AttributeName = "Servo S4"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stSimplePrimitive.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stSimplePrimitive.g.cs deleted file mode 100644 index b9ea7215..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stSimplePrimitive.g.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stSimplePrimitive : Ix.Connector.ITwinObject -{ - public OnlinerInt testInteger { get; } - - public OnlinerString testString { get; } - - public stSimplePrimitive(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Test Integer#>", "testInteger"); - testInteger.AttributeName = "<#Test Integer#>"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#Test String#>", "testString"); - testString.AttributeName = "<#Test String#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest.g.cs deleted file mode 100644 index bf88a3ab..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest.g.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTest : Ix.Connector.ITwinObject -{ - public OnlinerInt p1 { get; } - - public OnlinerInt p2 { get; } - - public stTest3 stTest3Struct { get; } - - public OnlinerDate DateVar2 { get; } - - public stComplex complexInstanceNested { get; } - - public stTest(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - p1 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "p1", "p1"); - p2 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "p2", "p2"); - stTest3Struct = new stTest3(this, "stTest3Struct", "stTest3Struct"); - DateVar2 = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "DateVar2", "DateVar2"); - complexInstanceNested = new stComplex(this, "complexInstanceNested", "complexInstanceNested"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest2.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest2.g.cs deleted file mode 100644 index 41a41a31..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest2.g.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTest2 : Ix.Connector.ITwinObject -{ - public stTest2(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest3.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest3.g.cs deleted file mode 100644 index 43b18392..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTest3.g.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTest3 : Ix.Connector.ITwinObject -{ - public OnlinerBool ix_bool { get; } - - public OnlinerInt ix_int { get; } - - public OnlinerString ix_string { get; } - - public stTest3(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - ix_bool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "ix_bool", "ix_bool"); - ix_int = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "ix_int", "ix_int"); - ix_string = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ix_string", "ix_string"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestComplex.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestComplex.g.cs deleted file mode 100644 index 095e5b6f..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestComplex.g.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTestComplex : Ix.Connector.ITwinObject -{ - public OnlinerInt testInteger { get; } - - public stComplex testComplexInstance { get; } - - public OnlinerString testString { get; } - - [Container(Layout.Stack)] - public stComplexUnknown testComplexUnknownInstance { get; } - - public stTestComplex(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "testInteger"); - testInteger.AttributeName = "<#Integer From PLC#>"; - testComplexInstance = new stComplex(this, "<#Complex Instance#>", "testComplexInstance"); - testComplexInstance.AttributeName = "<#Complex Instance#>"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#String From PLC#>", "testString"); - testString.AttributeName = "<#String From PLC#>"; - testComplexUnknownInstance = new stComplexUnknown(this, "<#Complex Instance#>", "testComplexUnknownInstance"); - testComplexUnknownInstance.AttributeName = "<#Complex Instance#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestLayouts.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestLayouts.g.cs deleted file mode 100644 index 9b006977..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestLayouts.g.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTestLayouts : Ix.Connector.ITwinObject -{ - [Container(Layout.Stack)] - public stSimplePrimitive test_stack { get; } - - [Container(Layout.Wrap)] - public stSimplePrimitive test_wrap { get; } - - [Container(Layout.Tabs)] - public stSimplePrimitive test_tabs { get; } - - [Container(Layout.UniformGrid)] - public stSimplePrimitive test_uniform { get; } - - [Container(Layout.Stack)] - [Group(GroupLayout.GroupBox)] - public stSimplePrimitive test_groupbox_stack { get; } - - [Container(Layout.Stack)] - [Group(GroupLayout.Border)] - public stSimplePrimitive test_border_stack { get; } - - [Container(Layout.Wrap)] - [Group(GroupLayout.GroupBox)] - public stSimplePrimitive test_groupbox_wrap { get; } - - [Container(Layout.Wrap)] - [Group(GroupLayout.Border)] - public stSimplePrimitive test_border_wrap { get; } - - [Container(Layout.Tabs)] - [Group(GroupLayout.GroupBox)] - public stSimplePrimitive test_groupbox_tabs { get; } - - [Container(Layout.Tabs)] - [Group(GroupLayout.Border)] - public stSimplePrimitive test_border_tabs { get; } - - [Container(Layout.UniformGrid)] - [Group(GroupLayout.GroupBox)] - public stSimplePrimitive test_groupbox_uniformGrid { get; } - - [Container(Layout.UniformGrid)] - [Group(GroupLayout.Border)] - public stSimplePrimitive test_border_uniformGrid { get; } - - public stTestLayouts(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - test_stack = new stSimplePrimitive(this, "test_stack", "test_stack"); - test_wrap = new stSimplePrimitive(this, "test_wrap", "test_wrap"); - test_tabs = new stSimplePrimitive(this, "test_tabs", "test_tabs"); - test_uniform = new stSimplePrimitive(this, "test_uniform", "test_uniform"); - test_groupbox_stack = new stSimplePrimitive(this, "test_groupbox_stack", "test_groupbox_stack"); - test_border_stack = new stSimplePrimitive(this, "test_border_stack", "test_border_stack"); - test_groupbox_wrap = new stSimplePrimitive(this, "test_groupbox_wrap", "test_groupbox_wrap"); - test_border_wrap = new stSimplePrimitive(this, "test_border_wrap", "test_border_wrap"); - test_groupbox_tabs = new stSimplePrimitive(this, "test_groupbox_tabs", "test_groupbox_tabs"); - test_border_tabs = new stSimplePrimitive(this, "test_border_tabs", "test_border_tabs"); - test_groupbox_uniformGrid = new stSimplePrimitive(this, "test_groupbox_uniformGrid", "test_groupbox_uniformGrid"); - test_border_uniformGrid = new stSimplePrimitive(this, "test_border_uniformGrid", "test_border_uniformGrid"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestMultipleNested.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestMultipleNested.g.cs deleted file mode 100644 index 47263faf..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestMultipleNested.g.cs +++ /dev/null @@ -1,187 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTestMultipleNested : Ix.Connector.ITwinObject -{ - [Container(Layout.Tabs)] - public TestStructOneGroupWithLayout Servo_S5 { get; } - - [Container(Layout.Tabs)] - public TestStruct Servo_S6 { get; } - - [Container(Layout.Tabs)] - public TestStructMultipleGroups Servo_S7 { get; } - - [Container(Layout.Tabs)] - public TestStructWithMainLayout Servo_S8 { get; } - - [Container(Layout.Stack)] - public OnlinerString Piston_A1 { get; } - - public OnlinerString Piston_A2 { get; } - - public OnlinerString Piston_A3 { get; } - - public OnlinerString Piston_A4 { get; } - - [Container(Layout.Wrap)] - public OnlinerInt Piston_A21 { get; } - - public OnlinerInt Piston_A22 { get; } - - public OnlinerInt Piston_A23 { get; } - - public OnlinerInt Piston_A24 { get; } - - [Container(Layout.Tabs)] - public OnlinerReal Piston_A31 { get; } - - public OnlinerReal Piston_A32 { get; } - - public OnlinerReal Piston_A33 { get; } - - public OnlinerReal Piston_A34 { get; } - - [Container(Layout.UniformGrid)] - public OnlinerBool Piston_A41 { get; } - - public OnlinerBool Piston_A42 { get; } - - public OnlinerBool Piston_A43 { get; } - - public OnlinerBool Piston_A44 { get; } - - [Container(Layout.Stack)] - public OnlinerString Servo_S1 { get; } - - [Container(Layout.Stack)] - public OnlinerString Servo_S2 { get; } - - [Container(Layout.Tabs)] - public IxComponent component { get; } - - public OnlinerString Servo_S3 { get; } - - public OnlinerString Servo_S4 { get; } - - public stTestMultipleNested(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Servo_S5 = new TestStructOneGroupWithLayout(this, "With One Group Layout", "Servo_S5"); - Servo_S5.AttributeName = "With One Group Layout"; - Servo_S6 = new TestStruct(this, "Without Group Layout", "Servo_S6"); - Servo_S6.AttributeName = "Without Group Layout"; - Servo_S7 = new TestStructMultipleGroups(this, "With Multiple Groups", "Servo_S7"); - Servo_S7.AttributeName = "With Multiple Groups "; - Servo_S8 = new TestStructWithMainLayout(this, "TestStruct With Main Layout", "Servo_S8"); - Servo_S8.AttributeName = "TestStruct With Main Layout "; - Piston_A1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A1", "Piston_A1"); - Piston_A1.AttributeName = "A1"; - Piston_A2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A2", "Piston_A2"); - Piston_A2.AttributeName = "A2"; - Piston_A3 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A3", "Piston_A3"); - Piston_A3.AttributeName = "A3"; - Piston_A4 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "A4", "Piston_A4"); - Piston_A4.AttributeName = "A4"; - Piston_A21 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A5", "Piston_A21"); - Piston_A21.AttributeName = "A5"; - Piston_A22 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A6", "Piston_A22"); - Piston_A22.AttributeName = "A6"; - Piston_A23 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A7", "Piston_A23"); - Piston_A23.AttributeName = "A7"; - Piston_A24 = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "A8", "Piston_A24"); - Piston_A24.AttributeName = "A8"; - Piston_A31 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Piston_A31", "Piston_A31"); - Piston_A32 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A8", "Piston_A32"); - Piston_A32.AttributeName = "A8"; - Piston_A33 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A9", "Piston_A33"); - Piston_A33.AttributeName = "A9"; - Piston_A34 = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "A10", "Piston_A34"); - Piston_A34.AttributeName = "A10"; - Piston_A41 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "Piston_A41", "Piston_A41"); - Piston_A42 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A11", "Piston_A42"); - Piston_A42.AttributeName = "A11"; - Piston_A43 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A12", "Piston_A43"); - Piston_A43.AttributeName = "A12"; - Piston_A44 = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "A13", "Piston_A44"); - Piston_A44.AttributeName = "A13"; - Servo_S1 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Servo S1", "Servo_S1"); - Servo_S1.AttributeName = "Servo S1"; - Servo_S2 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "ABB S2", "Servo_S2"); - Servo_S2.AttributeName = "ABB S2"; - component = new IxComponent(this, "My ix component", "component"); - component.AttributeName = "My ix component"; - Servo_S3 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Servo S3", "Servo_S3"); - Servo_S3.AttributeName = "Servo S3"; - Servo_S4 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Servo S4", "Servo_S4"); - Servo_S4.AttributeName = "Servo S4"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestNested.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestNested.g.cs deleted file mode 100644 index 84380f15..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestNested.g.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTestNested : Ix.Connector.ITwinObject -{ - [Container(Layout.Wrap)] - public OnlinerInt e { get; } - - public OnlinerString r44 { get; } - - public OnlinerString k21 { get; } - - public stTestNested(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - e = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "e", "e"); - r44 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "r44", "r44"); - k21 = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "k21", "k21"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestPrimitive.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestPrimitive.g.cs deleted file mode 100644 index 6cc4f928..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestPrimitive.g.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTestPrimitive : Ix.Connector.ITwinObject -{ - public OnlinerInt testInteger { get; } - - public OnlinerInt testUInteger { get; } - - public OnlinerString testString { get; } - - public OnlinerWord testWord { get; } - - public OnlinerByte testByte { get; } - - public OnlinerReal testReal { get; } - - public OnlinerLReal testLReal { get; } - - public OnlinerBool testBool { get; } - - public OnlinerDate TestDate { get; } - - public OnlinerDateTime TestDateTime { get; } - - public OnlinerTimeOfDay TestTimeOfDay { get; } - - public stTestPrimitive(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "testInteger"); - testInteger.AttributeName = "<#Integer From PLC#>"; - testUInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#UInteger From PLC#>", "testUInteger"); - testUInteger.AttributeName = "<#UInteger From PLC#>"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#STRING From PLC#>", "testString"); - testString.AttributeName = "<#STRING From PLC#>"; - testWord = @Connector.ConnectorAdapter.AdapterFactory.CreateWORD(this, "<#WORD From PLC#>", "testWord"); - testWord.AttributeName = "<#WORD From PLC#>"; - testByte = @Connector.ConnectorAdapter.AdapterFactory.CreateBYTE(this, "<#BYTE From PLC#>", "testByte"); - testByte.AttributeName = "<#BYTE From PLC#>"; - testReal = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "<#REAL From PLC#>", "testReal"); - testReal.AttributeName = "<#REAL From PLC#>"; - testLReal = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "<#LREAL From PLC#>", "testLReal"); - testLReal.AttributeName = "<#LREAL From PLC#>"; - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "<#BOOL From PLC#>", "testBool"); - testBool.AttributeName = "<#BOOL From PLC#>"; - TestDate = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "<#DATE From PLC#>", "TestDate"); - TestDate.AttributeName = "<#DATE From PLC#>"; - TestDateTime = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "<#DATE_AND_TIME From PLC#>", "TestDateTime"); - TestDateTime.AttributeName = "<#DATE_AND_TIME From PLC#>"; - TestTimeOfDay = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME_OF_DAY(this, "<#TIME_OF_DAY From PLC#>", "TestTimeOfDay"); - TestTimeOfDay.AttributeName = "<#TIME_OF_DAY From PLC#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestRenderIgnore.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestRenderIgnore.g.cs deleted file mode 100644 index a84c2b33..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/stTestRenderIgnore.g.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class stTestRenderIgnore : Ix.Connector.ITwinObject -{ - [RenderIgnore()] - public OnlinerInt testInteger { get; } - - public OnlinerInt testUInteger { get; } - - public OnlinerString testString { get; } - - public OnlinerWord testWord { get; } - - public OnlinerByte testByte { get; } - - public OnlinerReal testReal { get; } - - public OnlinerLReal testLReal { get; } - - [RenderIgnore("Display", "ShadowDisplay")] - public OnlinerBool testBool { get; } - - [RenderIgnore("Control", "ShadowControl")] - public OnlinerDate TestDate { get; } - - public OnlinerDateTime TestDateTime { get; } - - public stTestRenderIgnore(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "testInteger"); - testInteger.AttributeName = "<#Integer From PLC#>"; - testUInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#UInteger From PLC#>", "testUInteger"); - testUInteger.AttributeName = "<#UInteger From PLC#>"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#STRING From PLC#>", "testString"); - testString.AttributeName = "<#STRING From PLC#>"; - testWord = @Connector.ConnectorAdapter.AdapterFactory.CreateWORD(this, "<#WORD From PLC#>", "testWord"); - testWord.AttributeName = "<#WORD From PLC#>"; - testByte = @Connector.ConnectorAdapter.AdapterFactory.CreateBYTE(this, "<#BYTE From PLC#>", "testByte"); - testByte.AttributeName = "<#BYTE From PLC#>"; - testReal = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "<#REAL From PLC#>", "testReal"); - testReal.AttributeName = "<#REAL From PLC#>"; - testLReal = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "<#LREAL From PLC#>", "testLReal"); - testLReal.AttributeName = "<#LREAL From PLC#>"; - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "<#BOOL From PLC#>", "testBool"); - testBool.AttributeName = "<#BOOL From PLC#>"; - TestDate = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "<#DATE From PLC#>", "TestDate"); - TestDate.AttributeName = "<#DATE From PLC#>"; - TestDateTime = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "<#DATE_AND_TIME From PLC#>", "TestDateTime"); - TestDateTime.AttributeName = "<#DATE_AND_TIME From PLC#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/structWeatherStation.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/structWeatherStation.g.cs deleted file mode 100644 index 380ffa48..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/structWeatherStation.g.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class structWeatherStation : Ix.Connector.ITwinObject -{ - public OnlinerString StationICAO { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(enumStationStatus))] - public OnlinerInt StationStatus { get; } - - [RenderIgnore()] - public OnlinerReal DewPoint { get; } - - public OnlinerReal Pressure { get; } - - public OnlinerReal Temp { get; } - - public OnlinerReal Visibility { get; } - - public OnlinerUInt WindHeading { get; } - - public OnlinerReal WindSpeed { get; } - - public OnlinerDate TestDate { get; } - - public OnlinerDateTime TestDateTime { get; } - - public OnlinerTimeOfDay TestTimeOfDay { get; } - - public structWeatherStation(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - StationICAO = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Station name (ICAO)", "StationICAO"); - StationICAO.AttributeName = "Station name (ICAO)"; - StationStatus = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "Station status", "StationStatus"); - StationStatus.AttributeName = "Station status"; - StationStatus.AttributeName = "Station status"; - DewPoint = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Dew Point", "DewPoint"); - DewPoint.AttributeName = "Dew Point"; - DewPoint.AttributeUnits = "°C"; - Pressure = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Pressure", "Pressure"); - Pressure.AttributeName = "Pressure"; - Pressure.AttributeUnits = "Torr"; - Temp = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Temperature", "Temp"); - Temp.AttributeName = "Temperature"; - Temp.AttributeUnits = "°C"; - Visibility = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Visibility", "Visibility"); - Visibility.AttributeName = "Visibility"; - Visibility.AttributeUnits = "km"; - WindHeading = @Connector.ConnectorAdapter.AdapterFactory.CreateUINT(this, "Wind heading", "WindHeading"); - WindHeading.AttributeName = "Wind heading"; - WindHeading.AttributeUnits = "Azimuth"; - WindSpeed = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Wind speed", "WindSpeed"); - WindSpeed.AttributeName = "Wind speed"; - WindSpeed.AttributeUnits = "m/s"; - TestDate = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "TestDate", "TestDate"); - TestDateTime = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "TestDateTime", "TestDateTime"); - TestTimeOfDay = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME_OF_DAY(this, "TestTimeOfDay", "TestTimeOfDay"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/testingProgram.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/testingProgram.g.cs deleted file mode 100644 index a5f44863..00000000 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/Onliners/testingProgram.g.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class testingProgram : Ix.Connector.ITwinObject -{ - [Container(Layout.Wrap)] - public stTestPrimitive testPrimitive { get; } - - public stTestComplex testComplex { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(stTestEnum))] - public OnlinerInt testEnum { get; } - - [Container(Layout.UniformGrid)] - public stTestRenderIgnore testRenderIgnore { get; } - - public TestEmpty testEmpty { get; } - - public TestLayoutOverwriting testLayoutOverwrite { get; } - - public TestMixed testMixed { get; } - - public TestMultipleLayouts testMultipleLayouts { get; } - - public TestSimple testSimple { get; } - - public TestWithoutLayouts testWithoutLayouts { get; } - - public TestSimpleNested testSimpleNested { get; } - - [Container(Layout.Tabs)] - public stTestMultipleNested testMultipleNested { get; } - - public stTestLayouts testLayouts { get; } - - public testingProgram(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testPrimitive = new stTestPrimitive(this, "instanceOfStPrimitive", "testPrimitive"); - testPrimitive.AttributeName = "instanceOfStPrimitive"; - testComplex = new stTestComplex(this, "instanceOfStPrimitive", "testComplex"); - testComplex.AttributeName = "instanceOfStPrimitive"; - testEnum = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "instanceOfStEnum", "testEnum"); - testEnum.AttributeName = "instanceOfStEnum"; - testEnum.AttributeName = "instanceOfStEnum"; - testRenderIgnore = new stTestRenderIgnore(this, "testRenderIgnore", "testRenderIgnore"); - testEmpty = new TestEmpty(this, "testEmpty", "testEmpty"); - testLayoutOverwrite = new TestLayoutOverwriting(this, "testLayoutOverwrite", "testLayoutOverwrite"); - testMixed = new TestMixed(this, "testMixed", "testMixed"); - testMultipleLayouts = new TestMultipleLayouts(this, "testMultipleLayouts", "testMultipleLayouts"); - testSimple = new TestSimple(this, "testSimple", "testSimple"); - testWithoutLayouts = new TestWithoutLayouts(this, "testWithoutLayouts", "testWithoutLayouts"); - testSimpleNested = new TestSimpleNested(this, "testSimpleNested", "testSimpleNested"); - testMultipleNested = new stTestMultipleNested(this, "testMultipleNested", "testMultipleNested"); - testLayouts = new stTestLayouts(this, "testLayouts", "testLayouts"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/MAIN.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/MAIN.g.cs index 7316161b..d43bae21 100644 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/MAIN.g.cs +++ b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/MAIN.g.cs @@ -15,10 +15,8 @@ public partial class MAIN public stTest2 instanceOfstTest2 { get; set; } = new stTest2(); public stTest3 instanceOfstTest3 { get; set; } = new stTest3(); public stBlazor instanceOfstBlazor { get; set; } = new stBlazor(); - public stTest[] arr1 { get; set; } - - public Int16[] arr2 { get; set; } - + public stTest[] arr1 { get; set; } = new stTest[3]; + public Int16[] arr2 { get; set; } = new Int16[6]; public DateOnly dateVar { get; set; } = default(DateOnly); public stComplex instanceOfstComplex { get; set; } = new stComplex(); public stTestPrimitive instanceOfstPrimitive { get; set; } = new stTestPrimitive(); diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/stTestPrimitive.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/stTestPrimitive.g.cs index 7e843199..c3d9573c 100644 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/stTestPrimitive.g.cs +++ b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/stTestPrimitive.g.cs @@ -21,6 +21,6 @@ public partial class stTestPrimitive public DateOnly TestDate { get; set; } = default(DateOnly); public DateTime TestDateTime { get; set; } = default(DateTime); - public TimeOnly TestTimeOfDay { get; set; } = default(TimeOnly); + public TimeSpan TestTimeOfDay { get; set; } = default(TimeSpan); } } \ No newline at end of file diff --git a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/structWeatherStation.g.cs b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/structWeatherStation.g.cs index 2ae97d9c..8511faf8 100644 --- a/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/structWeatherStation.g.cs +++ b/src/ix.blazor/tests/sandbox/ax-blazor-example/ix/.g/POCO/structWeatherStation.g.cs @@ -21,6 +21,6 @@ public partial class structWeatherStation public DateOnly TestDate { get; set; } = default(DateOnly); public DateTime TestDateTime { get; set; } = default(DateTime); - public TimeOnly TestTimeOfDay { get; set; } = default(TimeOnly); + public TimeSpan TestTimeOfDay { get; set; } = default(TimeSpan); } } \ No newline at end of file diff --git a/src/ix.compiler/src/IX.Compiler/Core/SemanticsHelpers.cs b/src/ix.compiler/src/IX.Compiler/Core/SemanticsHelpers.cs index bc022b3c..dc2ec27a 100644 --- a/src/ix.compiler/src/IX.Compiler/Core/SemanticsHelpers.cs +++ b/src/ix.compiler/src/IX.Compiler/Core/SemanticsHelpers.cs @@ -25,6 +25,7 @@ public static class SemanticsHelpers public static bool IsMemberEligibleForTranspile(this IFieldDeclaration field, Compilation compilation) { return field.AccessModifier == AccessModifier.Public + && !(field.Type is IReferenceTypeDeclaration) && (field.Type is IScalarTypeDeclaration || field.Type is IStringTypeDeclaration || @@ -40,6 +41,7 @@ public static bool IsMemberEligibleForTranspile(this IFieldDeclaration field, Co public static bool IsMemberEligibleForTranspile(this IVariableDeclaration variable, Compilation compilation) { return variable.IsInGlobalMemory + && !(variable.Type is IReferenceTypeDeclaration) && (variable.Type is IScalarTypeDeclaration || variable.Type is IStringTypeDeclaration || diff --git a/src/ix.compiler/src/IX.Compiler/Ix.Compiler.csproj b/src/ix.compiler/src/IX.Compiler/Ix.Compiler.csproj index 816920df..a9e9f526 100644 --- a/src/ix.compiler/src/IX.Compiler/Ix.Compiler.csproj +++ b/src/ix.compiler/src/IX.Compiler/Ix.Compiler.csproj @@ -50,7 +50,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Helpers/Plain/IecToClrConverter.cs b/src/ix.compiler/src/IX.Cs.Compiler/Helpers/Plain/IecToClrConverter.cs index 80fdcf61..606ce55e 100644 --- a/src/ix.compiler/src/IX.Cs.Compiler/Helpers/Plain/IecToClrConverter.cs +++ b/src/ix.compiler/src/IX.Cs.Compiler/Helpers/Plain/IecToClrConverter.cs @@ -47,8 +47,8 @@ internal static class IecToClrConverter { "DATE_TIME", typeof(DateTime) }, { "TIME", typeof(TimeSpan) }, { "LTIME", typeof(TimeSpan) }, - { "TIME_OF_DAY", typeof(TimeOnly) }, - { "LTIME_OF_DAY", typeof(TimeOnly) }, + { "TIME_OF_DAY", typeof(TimeSpan) }, + { "LTIME_OF_DAY", typeof(TimeSpan) }, { "TOD", typeof(TimeSpan) } }; diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerConstructorBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerConstructorBuilder.cs index 2cf78c56..038f1e9b 100644 --- a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerConstructorBuilder.cs +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerConstructorBuilder.cs @@ -219,8 +219,26 @@ protected void AddToSource(string token, string separator = " ") "this, " + $"\"{field.GetAttributeNameValue(field.Name)}\", " + $"\"{field.Name}\", " + - "(p, rt, st) => new"); - type.ElementTypeAccess.Type.Accept(visitor, this); + "(p, rt, st) => "); + + switch (type.ElementTypeAccess.Type) + { + + case IClassDeclaration classDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + case IEnumTypeDeclaration enumTypeDeclaration: + case INamedValueTypeDeclaration namedValueTypeDeclaration: + AddToSource("new"); + type.ElementTypeAccess.Type.Accept(visitor, this); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + AddToSource($"@Connector.ConnectorAdapter.AdapterFactory.Create{IecToAdapterExtensions.ToAdapterType(scalarTypeDeclaration)}"); + break; + case IStringTypeDeclaration stringTypeDeclaration: + AddToSource($"@Connector.ConnectorAdapter.AdapterFactory.Create{IecToAdapterExtensions.ToAdapterType(stringTypeDeclaration)}"); + break; + } + AddToSource("(p, rt, st));"); } diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerOnlineToPlainBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerOnlineToPlainBuilder.cs new file mode 100644 index 00000000..58f5649d --- /dev/null +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerOnlineToPlainBuilder.cs @@ -0,0 +1,152 @@ +// Ix.Compiler.Cs +// Copyright (c) 2023 Peter Kurhajec (PTKu), MTS, and Contributors. All Rights Reserved. +// Contributors: https://github.com/ix-ax/ix/graphs/contributors +// See the LICENSE file in the repository root for more information. +// https://github.com/ix-ax/ix/blob/master/LICENSE +// Third party licenses: https://github.com/ix-ax/ix/blob/master/notices.md + +using System.Text; +using AX.ST.Semantic; +using AX.ST.Semantic.Model; +using AX.ST.Semantic.Model.Declarations; +using AX.ST.Semantic.Model.Declarations.Types; +using AX.ST.Semantic.Pragmas; +using Ix.Compiler.Core; +using IX.Compiler.Core; +using Ix.Compiler.Cs.Helpers; +using Ix.Compiler.Cs.Helpers.Onliners; +using Ix.Compiler.Cs.Helpers.Plain; +using Ix.Connector; + +namespace Ix.Compiler.Cs.Onliner; + +internal class CsOnlinerPlainerOnlineToPlainBuilder : ICombinedThreeVisitor +{ + private readonly StringBuilder _memberDeclarations = new(); + + protected CsOnlinerPlainerOnlineToPlainBuilder(Compilation compilation) + { + Compilation = compilation; + } + + private Compilation Compilation { get; } + + public string Output => _memberDeclarations.ToString().FormatCode(); + + + public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor) + { + if (fieldDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(fieldDeclaration.Type, fieldDeclaration); + } + } + + public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaration, IxNodeVisitor visitor) + { + // + } + + public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor) + { + if (variableDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(variableDeclaration.Type, variableDeclaration); + } + } + + internal void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration declaration) + { + switch (typeDeclaration) + { + case IInterfaceDeclaration interfaceDeclaration: + case IClassDeclaration classDeclaration: + //case IAnonymousTypeDeclaration anonymousTypeDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + AddToSource($" plain.{declaration.Name} = await {declaration.Name}.{MethodName}();"); + break; + case IArrayTypeDeclaration arrayTypeDeclaration: + switch (arrayTypeDeclaration.ElementTypeAccess.Type) + { + case IClassDeclaration classDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + //plain.ArrayOfDrives = ArrayOfDrives.Select(async p => await p.OnlineToPlainAsync()).Select(p => p.Result).ToArray(); + AddToSource($"plain.{declaration.Name} = {declaration.Name}.Select(async p => await p.{MethodName}()).Select(p => p.Result).ToArray();"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + //plain.ArrayOfBytes = ArrayOfBytes.Select(p => p.LastValue).ToArray(); + + AddToSource($"plain.{declaration.Name} = {declaration.Name}.Select(p => p.LastValue).ToArray();"); + //AddToSource( + // $"Ix.Connector.BuilderHelpers.Arrays.CopyOnlineToPlain<{IecToOnlinerConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)},{IecToClrConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)}>({declaration.Name}, plain.{declaration.Name});"); + break; + } + break; + case IReferenceTypeDeclaration referenceTypeDeclaration: + break; + case IEnumTypeDeclaration enumTypeDeclaration: + AddToSource($" plain.{declaration.Name} = ({declaration.Type.FullyQualifiedName}){declaration.Name}.LastValue;"); + break; + case INamedValueTypeDeclaration namedValueTypeDeclaration: + AddToSource($" plain.{declaration.Name} = {declaration.Name}.LastValue;"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + AddToSource($" plain.{declaration.Name} = {declaration.Name}.LastValue;"); + break; + } + } + + public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor) + { + // + } + + + protected void AddToSource(string token, string separator = " ") + { + _memberDeclarations.Append($"{token}{separator}"); + } + + public void AddTypeConstructionParameters(string parametersString) + { + AddToSource(parametersString); + } + + protected static readonly string MethodName = TwinObjectExtensions.OnlineToPlainMethodName; + + public static CsOnlinerPlainerOnlineToPlainBuilder Create(IxNodeVisitor visitor, IStructuredTypeDeclaration semantics, + Compilation compilation) + { + var builder = new CsOnlinerPlainerOnlineToPlainBuilder(compilation); + builder.AddToSource($"public async Task {MethodName}(){{\n"); + builder.AddToSource($"Pocos.{semantics.FullyQualifiedName} plain = new Pocos.{semantics.FullyQualifiedName}();"); + builder.AddToSource("await this.ReadAsync();"); + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } + + public static CsOnlinerPlainerOnlineToPlainBuilder Create(IxNodeVisitor visitor, IClassDeclaration semantics, + Compilation compilation, bool isExtended) + { + var builder = new CsOnlinerPlainerOnlineToPlainBuilder(compilation); + builder.AddToSource($"public async Task {MethodName}(){{\n"); + builder.AddToSource($"Pocos.{semantics.FullyQualifiedName} plain = new Pocos.{semantics.FullyQualifiedName}();"); + builder.AddToSource("await this.ReadAsync();"); + + if (isExtended) + { + builder.AddToSource($"await base.{MethodName}(plain);"); + } + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } +} \ No newline at end of file diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerOnlineToPlainProtectedBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerOnlineToPlainProtectedBuilder.cs new file mode 100644 index 00000000..c657ee3a --- /dev/null +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerOnlineToPlainProtectedBuilder.cs @@ -0,0 +1,61 @@ +// Ix.Compiler.Cs +// Copyright (c) 2023 Peter Kurhajec (PTKu), MTS, and Contributors. All Rights Reserved. +// Contributors: https://github.com/ix-ax/ix/graphs/contributors +// See the LICENSE file in the repository root for more information. +// https://github.com/ix-ax/ix/blob/master/LICENSE +// Third party licenses: https://github.com/ix-ax/ix/blob/master/notices.md + +using System.Text; +using AX.ST.Semantic; +using AX.ST.Semantic.Model; +using AX.ST.Semantic.Model.Declarations; +using AX.ST.Semantic.Model.Declarations.Types; +using AX.ST.Semantic.Pragmas; +using Ix.Compiler.Core; +using IX.Compiler.Core; +using Ix.Compiler.Cs.Helpers; +using Ix.Compiler.Cs.Helpers.Onliners; +using Ix.Compiler.Cs.Helpers.Plain; +using Ix.Connector; + +namespace Ix.Compiler.Cs.Onliner; + +internal class CsOnlinerPlainerOnlineToPlainProtectedBuilder : CsOnlinerPlainerOnlineToPlainBuilder +{ + private readonly StringBuilder _memberDeclarations = new(); + + protected CsOnlinerPlainerOnlineToPlainProtectedBuilder(Compilation compilation) : base(compilation) + { + + } + + public static CsOnlinerPlainerOnlineToPlainProtectedBuilder Create(IxNodeVisitor visitor, IStructuredTypeDeclaration semantics, + Compilation compilation) + { + var builder = new CsOnlinerPlainerOnlineToPlainProtectedBuilder(compilation); + builder.AddToSource($"protected async Task {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } + + public static CsOnlinerPlainerOnlineToPlainProtectedBuilder Create(IxNodeVisitor visitor, IClassDeclaration semantics, + Compilation compilation, bool isExtended) + { + var builder = new CsOnlinerPlainerOnlineToPlainProtectedBuilder(compilation); + builder.AddToSource($"protected async Task {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + + if (isExtended) + { + builder.AddToSource($"await base.{MethodName}(plain);"); + } + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } +} \ No newline at end of file diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToOnlineBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToOnlineBuilder.cs new file mode 100644 index 00000000..f3466028 --- /dev/null +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToOnlineBuilder.cs @@ -0,0 +1,157 @@ +// Ix.Compiler.Cs +// Copyright (c) 2023 Peter Kurhajec (PTKu), MTS, and Contributors. All Rights Reserved. +// Contributors: https://github.com/ix-ax/ix/graphs/contributors +// See the LICENSE file in the repository root for more information. +// https://github.com/ix-ax/ix/blob/master/LICENSE +// Third party licenses: https://github.com/ix-ax/ix/blob/master/notices.md + +using System.Text; +using AX.ST.Semantic; +using AX.ST.Semantic.Model; +using AX.ST.Semantic.Model.Declarations; +using AX.ST.Semantic.Model.Declarations.Types; +using AX.ST.Semantic.Pragmas; +using Ix.Compiler.Core; +using IX.Compiler.Core; +using Ix.Compiler.Cs.Helpers; +using Ix.Compiler.Cs.Helpers.Onliners; +using AX.ST.Syntax.Tree; +using Ix.Compiler.Cs.Helpers.Plain; +using Ix.Connector; + +namespace Ix.Compiler.Cs.Onliner; + +internal class CsOnlinerPlainerPlainToOnlineBuilder : ICombinedThreeVisitor +{ + private readonly StringBuilder _memberDeclarations = new(); + + protected CsOnlinerPlainerPlainToOnlineBuilder(Compilation compilation) + { + Compilation = compilation; + } + + private Compilation Compilation { get; } + + public string Output => _memberDeclarations.ToString().FormatCode(); + + + public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor) + { + if (fieldDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(fieldDeclaration.Type, fieldDeclaration); + } + } + + public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaration, IxNodeVisitor visitor) + { + // + } + + public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor) + { + if (variableDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(variableDeclaration.Type, variableDeclaration); + } + } + + private void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration declaration) + { + switch (typeDeclaration) + { + case IInterfaceDeclaration interfaceDeclaration: + case IClassDeclaration classDeclaration: + //case IAnonymousTypeDeclaration anonymousTypeDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + AddToSource($" await this.{declaration.Name}.{MethodName}(plain.{declaration.Name});"); + break; + case IArrayTypeDeclaration arrayTypeDeclaration: + + + switch (arrayTypeDeclaration.ElementTypeAccess.Type) + { + case IClassDeclaration classDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + //ArrayOfBytes.Select(p => p.Cyclic = plain.ArrayOfBytes[index++]).ToArray(); + //AddToSource($"Ix.Connector.BuilderHelpers.Arrays.CopyPlainToOnline(plain.{declaration.Name}, {declaration.Name});"); + AddToSource($"var _{declaration.Name}_i_FE8484DAB3 = 0;"); + AddToSource($"{declaration.Name}.Select(p => p.{MethodName}(plain.{declaration.Name}[_{declaration.Name}_i_FE8484DAB3++])).ToArray();"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + //ArrayOfDrives.Select(p => p.PlainToOnlineAsync(plain.ArrayOfDrives[index++])).ToArray(); + AddToSource($"var _{declaration.Name}_i_FE8484DAB3 = 0;"); + AddToSource($"{declaration.Name}.Select(p => p.Cyclic = plain.{declaration.Name}[_{declaration.Name}_i_FE8484DAB3++]).ToArray();"); + //AddToSource($"Ix.Connector.BuilderHelpers.Arrays.CopyPlainToOnline<{IecToClrConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)}, {IecToOnlinerConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)}>(plain.{declaration.Name}, {declaration.Name});"); + break; + } + break; + break; + case IReferenceTypeDeclaration referenceTypeDeclaration: + break; + case IEnumTypeDeclaration enumTypeDeclaration: + AddToSource($" {declaration.Name}.Cyclic = (short)plain.{declaration.Name};"); + break; + case INamedValueTypeDeclaration namedValueTypeDeclaration: + AddToSource($" {declaration.Name}.Cyclic = plain.{declaration.Name};"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + AddToSource($" {declaration.Name}.Cyclic = plain.{declaration.Name};"); + break; + } + } + + public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor) + { + // + } + + + protected void AddToSource(string token, string separator = " ") + { + _memberDeclarations.Append($"{token}{separator}"); + } + + public void AddTypeConstructionParameters(string parametersString) + { + AddToSource(parametersString); + } + + private static readonly string MethodName = TwinObjectExtensions.PlainToOnlineMethodName; + + public static CsOnlinerPlainerPlainToOnlineBuilder Create(IxNodeVisitor visitor, IStructuredTypeDeclaration semantics, + Compilation compilation) + { + var builder = new CsOnlinerPlainerPlainToOnlineBuilder(compilation); + builder.AddToSource($"public async Task> {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + + builder.AddToSource("return await this.WriteAsync();"); + + builder.AddToSource($"}}"); + return builder; + } + + public static CsOnlinerPlainerPlainToOnlineBuilder Create(IxNodeVisitor visitor, IClassDeclaration semantics, + Compilation compilation, bool isExtended) + { + var builder = new CsOnlinerPlainerPlainToOnlineBuilder(compilation); + builder.AddToSource($"public async Task> {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + + if (isExtended) + { + builder.AddToSource($"await base.{MethodName}(plain);"); + } + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + + builder.AddToSource("return await this.WriteAsync();"); + + builder.AddToSource($"}}"); + return builder; + } +} \ No newline at end of file diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToShadowBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToShadowBuilder.cs new file mode 100644 index 00000000..3ae0eb1a --- /dev/null +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToShadowBuilder.cs @@ -0,0 +1,148 @@ +using AX.ST.Semantic.Model.Declarations.Types; +using AX.ST.Semantic.Model.Declarations; +using Ix.Compiler.Cs.Helpers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AX.ST.Semantic; +using Ix.Compiler.Core; +using IX.Compiler.Core; +using Ix.Connector; + +namespace Ix.Compiler.Cs.Onliner +{ + internal class CsOnlinerPlainerPlainToShadowBuilder : ICombinedThreeVisitor + { + private readonly StringBuilder _memberDeclarations = new(); + + protected CsOnlinerPlainerPlainToShadowBuilder(Compilation compilation) + { + Compilation = compilation; + } + + private Compilation Compilation { get; } + + public string Output => _memberDeclarations.ToString().FormatCode(); + + + public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor) + { + if (fieldDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(fieldDeclaration.Type, fieldDeclaration); + } + } + + public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaration, IxNodeVisitor visitor) + { + // + } + + public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor) + { + if (variableDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(variableDeclaration.Type, variableDeclaration); + } + } + + private void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration declaration) + { + switch (typeDeclaration) + { + case IInterfaceDeclaration interfaceDeclaration: + case IClassDeclaration classDeclaration: + //case IAnonymousTypeDeclaration anonymousTypeDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + AddToSource($" await this.{declaration.Name}.{MethodName}(plain.{declaration.Name});"); + break; + case IArrayTypeDeclaration arrayTypeDeclaration: + + + switch (arrayTypeDeclaration.ElementTypeAccess.Type) + { + case IClassDeclaration classDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + //ArrayOfBytes.Select(p => p.Cyclic = plain.ArrayOfBytes[index++]).ToArray(); + //AddToSource($"Ix.Connector.BuilderHelpers.Arrays.CopyPlainToOnline(plain.{declaration.Name}, {declaration.Name});"); + AddToSource($"var _{declaration.Name}_i_FE8484DAB3 = 0;"); + AddToSource($"{declaration.Name}.Select(p => p.{MethodName}(plain.{declaration.Name}[_{declaration.Name}_i_FE8484DAB3++])).ToArray();"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + //ArrayOfDrives.Select(p => p.PlainToOnlineAsync(plain.ArrayOfDrives[index++])).ToArray(); + AddToSource($"var _{declaration.Name}_i_FE8484DAB3 = 0;"); + AddToSource($"{declaration.Name}.Select(p => p.Shadow = plain.{declaration.Name}[_{declaration.Name}_i_FE8484DAB3++]).ToArray();"); + //AddToSource($"Ix.Connector.BuilderHelpers.Arrays.CopyPlainToOnline<{IecToClrConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)}, {IecToOnlinerConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)}>(plain.{declaration.Name}, {declaration.Name});"); + break; + } + break; + break; + case IReferenceTypeDeclaration referenceTypeDeclaration: + break; + case IEnumTypeDeclaration enumTypeDeclaration: + AddToSource($" {declaration.Name}.Shadow = (short)plain.{declaration.Name};"); + break; + case INamedValueTypeDeclaration namedValueTypeDeclaration: + AddToSource($" {declaration.Name}.Shadow = plain.{declaration.Name};"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + AddToSource($" {declaration.Name}.Shadow = plain.{declaration.Name};"); + break; + } + } + + public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor) + { + // + } + + + protected void AddToSource(string token, string separator = " ") + { + _memberDeclarations.Append($"{token}{separator}"); + } + + public void AddTypeConstructionParameters(string parametersString) + { + AddToSource(parametersString); + } + + private static readonly string MethodName = TwinObjectExtensions.PlainToShadowMethodName; + + public static CsOnlinerPlainerPlainToShadowBuilder Create(IxNodeVisitor visitor, IStructuredTypeDeclaration semantics, + Compilation compilation) + { + var builder = new CsOnlinerPlainerPlainToShadowBuilder(compilation); + builder.AddToSource($"public async Task> {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + + builder.AddToSource("return this.RetrievePrimitives();"); + builder.AddToSource($"}}"); + return builder; + } + + public static CsOnlinerPlainerPlainToShadowBuilder Create(IxNodeVisitor visitor, IClassDeclaration semantics, + Compilation compilation, bool isExtended) + { + var builder = new CsOnlinerPlainerPlainToShadowBuilder(compilation); + builder.AddToSource($"public async Task> {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + + if (isExtended) + { + builder.AddToSource($"await base.{MethodName}(plain);"); + } + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource("return this.RetrievePrimitives();"); + + builder.AddToSource($"}}"); + return builder; + } + } +} diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerShadowToPlainBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerShadowToPlainBuilder.cs new file mode 100644 index 00000000..ae185e6f --- /dev/null +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerShadowToPlainBuilder.cs @@ -0,0 +1,144 @@ +using AX.ST.Semantic; +using AX.ST.Semantic.Model.Declarations; +using AX.ST.Semantic.Model.Declarations.Types; +using Ix.Compiler.Core; +using Ix.Compiler.Cs.Helpers; +using Ix.Connector; +using IX.Compiler.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ix.Compiler.Cs.Onliner +{ + internal class CsOnlinerPlainerShadowToPlainBuilder : ICombinedThreeVisitor + { + private readonly StringBuilder _memberDeclarations = new(); + + protected CsOnlinerPlainerShadowToPlainBuilder(Compilation compilation) + { + Compilation = compilation; + } + + private Compilation Compilation { get; } + + public string Output => _memberDeclarations.ToString().FormatCode(); + + + public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor) + { + if (fieldDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(fieldDeclaration.Type, fieldDeclaration); + } + } + + public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaration, IxNodeVisitor visitor) + { + // + } + + public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor) + { + if (variableDeclaration.IsMemberEligibleForTranspile(Compilation)) + { + CreateAssignment(variableDeclaration.Type, variableDeclaration); + } + } + + internal void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration declaration) + { + switch (typeDeclaration) + { + case IInterfaceDeclaration interfaceDeclaration: + case IClassDeclaration classDeclaration: + //case IAnonymousTypeDeclaration anonymousTypeDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + AddToSource($" plain.{declaration.Name} = await {declaration.Name}.{MethodName}();"); + break; + case IArrayTypeDeclaration arrayTypeDeclaration: + switch (arrayTypeDeclaration.ElementTypeAccess.Type) + { + case IClassDeclaration classDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + //plain.ArrayOfDrives = ArrayOfDrives.Select(async p => await p.OnlineToPlainAsync()).Select(p => p.Result).ToArray(); + AddToSource($"plain.{declaration.Name} = {declaration.Name}.Select(async p => await p.{MethodName}()).Select(p => p.Result).ToArray();"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + //plain.ArrayOfBytes = ArrayOfBytes.Select(p => p.LastValue).ToArray(); + + AddToSource($"plain.{declaration.Name} = {declaration.Name}.Select(p => p.Shadow).ToArray();"); + //AddToSource( + // $"Ix.Connector.BuilderHelpers.Arrays.CopyOnlineToPlain<{IecToOnlinerConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)},{IecToClrConverter.TransformType(arrayTypeDeclaration.ElementTypeAccess.Type)}>({declaration.Name}, plain.{declaration.Name});"); + break; + } + break; + case IReferenceTypeDeclaration referenceTypeDeclaration: + break; + case IEnumTypeDeclaration enumTypeDeclaration: + AddToSource($" plain.{declaration.Name} = ({declaration.Type.FullyQualifiedName}){declaration.Name}.Shadow;"); + break; + case INamedValueTypeDeclaration namedValueTypeDeclaration: + AddToSource($" plain.{declaration.Name} = {declaration.Name}.Shadow;"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + AddToSource($" plain.{declaration.Name} = {declaration.Name}.Shadow;"); + break; + } + } + + public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor) + { + // + } + + + protected void AddToSource(string token, string separator = " ") + { + _memberDeclarations.Append($"{token}{separator}"); + } + + public void AddTypeConstructionParameters(string parametersString) + { + AddToSource(parametersString); + } + + protected static readonly string MethodName = TwinObjectExtensions.ShadowToPlainMethodName; + + public static CsOnlinerPlainerShadowToPlainBuilder Create(IxNodeVisitor visitor, IStructuredTypeDeclaration semantics, + Compilation compilation) + { + var builder = new CsOnlinerPlainerShadowToPlainBuilder(compilation); + builder.AddToSource($"public async Task {MethodName}(){{\n"); + builder.AddToSource($"Pocos.{semantics.FullyQualifiedName} plain = new Pocos.{semantics.FullyQualifiedName}();"); + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } + + public static CsOnlinerPlainerShadowToPlainBuilder Create(IxNodeVisitor visitor, IClassDeclaration semantics, + Compilation compilation, bool isExtended) + { + var builder = new CsOnlinerPlainerShadowToPlainBuilder(compilation); + builder.AddToSource($"public async Task {MethodName}(){{\n"); + builder.AddToSource($"Pocos.{semantics.FullyQualifiedName} plain = new Pocos.{semantics.FullyQualifiedName}();"); + + if (isExtended) + { + builder.AddToSource($"await base.{MethodName}(plain);"); + } + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } + } +} diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerShadowToPlainProtectedBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerShadowToPlainProtectedBuilder.cs new file mode 100644 index 00000000..a83e4ec7 --- /dev/null +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerPlainerShadowToPlainProtectedBuilder.cs @@ -0,0 +1,52 @@ +using AX.ST.Semantic; +using AX.ST.Semantic.Model.Declarations.Types; +using AX.ST.Semantic.Model.Declarations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using IX.Compiler.Core; + +namespace Ix.Compiler.Cs.Onliner +{ + internal class CsOnlinerPlainerShadowToPlainProtectedBuilder : CsOnlinerPlainerShadowToPlainBuilder + { + private readonly StringBuilder _memberDeclarations = new(); + + protected CsOnlinerPlainerShadowToPlainProtectedBuilder(Compilation compilation) : base(compilation) + { + + } + + public static CsOnlinerPlainerShadowToPlainProtectedBuilder Create(IxNodeVisitor visitor, IStructuredTypeDeclaration semantics, + Compilation compilation) + { + var builder = new CsOnlinerPlainerShadowToPlainProtectedBuilder(compilation); + builder.AddToSource($"protected async Task {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } + + public static CsOnlinerPlainerShadowToPlainProtectedBuilder Create(IxNodeVisitor visitor, IClassDeclaration semantics, + Compilation compilation, bool isExtended) + { + var builder = new CsOnlinerPlainerShadowToPlainProtectedBuilder(compilation); + builder.AddToSource($"protected async Task {MethodName}(Pocos.{semantics.FullyQualifiedName} plain){{\n"); + + + if (isExtended) + { + builder.AddToSource($"await base.{MethodName}(plain);"); + } + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource($"return plain;"); + builder.AddToSource($"}}"); + return builder; + } + } +} diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs index 61fd5eb9..282d629e 100644 --- a/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs +++ b/src/ix.compiler/src/IX.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs @@ -85,6 +85,14 @@ public void CreateFile(IFileSyntax fileSyntax, IxNodeVisitor visitor) AddToSource(CsOnlinerConstructorBuilder.Create(visitor, classDeclaration, Compilation, isExtended).Output); + AddToSource(CsOnlinerPlainerOnlineToPlainBuilder.Create(visitor, classDeclaration, Compilation, isExtended).Output); + AddToSource(CsOnlinerPlainerOnlineToPlainProtectedBuilder.Create(visitor, classDeclaration, Compilation, isExtended).Output); + AddToSource(CsOnlinerPlainerPlainToOnlineBuilder.Create(visitor, classDeclaration, Compilation, isExtended).Output); + + AddToSource(CsOnlinerPlainerShadowToPlainBuilder.Create(visitor, classDeclaration, Compilation, isExtended).Output); + AddToSource(CsOnlinerPlainerShadowToPlainProtectedBuilder.Create(visitor, classDeclaration, Compilation, isExtended).Output); + AddToSource(CsOnlinerPlainerPlainToShadowBuilder.Create(visitor, classDeclaration, Compilation, isExtended).Output); + if (!isExtended) CreateITwinObjectImplementation(); AddToSource("}"); @@ -203,6 +211,11 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio AddToSource(CsOnlinerConstructorBuilder.Create(visitor, structuredTypeDeclaration, Compilation).Output); + AddToSource(CsOnlinerPlainerOnlineToPlainBuilder.Create(visitor, structuredTypeDeclaration, Compilation).Output); + AddToSource(CsOnlinerPlainerOnlineToPlainProtectedBuilder.Create(visitor, structuredTypeDeclaration, Compilation).Output); + AddToSource(CsOnlinerPlainerPlainToOnlineBuilder.Create(visitor, structuredTypeDeclaration, Compilation).Output); + + CreateITwinObjectImplementation(); AddToSource("}"); diff --git a/src/ix.compiler/src/IX.Cs.Compiler/Plain/CsPlainSourceBuilder.cs b/src/ix.compiler/src/IX.Cs.Compiler/Plain/CsPlainSourceBuilder.cs index 13ff875b..8f27a58d 100644 --- a/src/ix.compiler/src/IX.Cs.Compiler/Plain/CsPlainSourceBuilder.cs +++ b/src/ix.compiler/src/IX.Cs.Compiler/Plain/CsPlainSourceBuilder.cs @@ -103,6 +103,13 @@ public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVis fieldDeclaration.Type.Accept(visitor, this); AddToSource("();"); break; + case IArrayTypeDeclaration arrayType: + AddToSource($"= new"); + arrayType.ElementTypeAccess.Type.Accept(visitor, this); + AddToSource($"["); + AddToSource(string.Join(",", arrayType.Dimensions.Select(p => p.CountOfElements))); + AddToSource($"];"); + break; } } } diff --git a/src/ix.compiler/src/ixc/Properties/launchSettings.json b/src/ix.compiler/src/ixc/Properties/launchSettings.json index 66df3f27..0d478af7 100644 --- a/src/ix.compiler/src/ixc/Properties/launchSettings.json +++ b/src/ix.compiler/src/ixc/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "ixc": { "commandName": "Project", - "workingDirectory": "c:\\W\\Develop\\gh\\ix-ax\\ix\\ix\\src\\ix.connectors\\tests\\ax-test-project\\" + "workingDirectory": "c:\\W\\Develop\\gh\\ix-ax\\ix\\src\\tests.integrations\\integrated\\src\\ax\\" } } } \ No newline at end of file diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs index 318a3515..b8783886 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs @@ -19,13 +19,62 @@ public array_declaration_class(Ix.Connector.ITwinObject parent, string readableT this.@Parent = parent; HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); primitive = new OnlinerInt[100]; - Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(primitive, this, "primitive", "primitive", (p, rt, st) => new OnlinerInt(p, rt, st)); + Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(primitive, this, "primitive", "primitive", (p, rt, st) => @Connector.ConnectorAdapter.AdapterFactory.CreateINT(p, rt, st)); complex = new ArrayDeclarationSimpleNamespace.some_complex_type[100]; Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(complex, this, "complex", "complex", (p, rt, st) => new ArrayDeclarationSimpleNamespace.some_complex_type(p, rt, st)); parent.AddChild(this); parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class plain = new Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class(); + await this.ReadAsync(); + plain.primitive = primitive.Select(p => p.LastValue).ToArray(); + plain.complex = complex.Select(async p => await p.OnlineToPlainAsync()).Select(p => p.Result).ToArray(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class plain) + { + plain.primitive = primitive.Select(p => p.LastValue).ToArray(); + plain.complex = complex.Select(async p => await p.OnlineToPlainAsync()).Select(p => p.Result).ToArray(); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class plain) + { + var _primitive_i_FE8484DAB3 = 0; + primitive.Select(p => p.Cyclic = plain.primitive[_primitive_i_FE8484DAB3++]).ToArray(); + var _complex_i_FE8484DAB3 = 0; + complex.Select(p => p.PlainToOnlineAsync(plain.complex[_complex_i_FE8484DAB3++])).ToArray(); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class plain = new Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class(); + plain.primitive = primitive.Select(p => p.Shadow).ToArray(); + plain.complex = complex.Select(async p => await p.ShadowToPlainAsync()).Select(p => p.Result).ToArray(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class plain) + { + plain.primitive = primitive.Select(p => p.Shadow).ToArray(); + plain.complex = complex.Select(async p => await p.ShadowToPlainAsync()).Select(p => p.Result).ToArray(); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class plain) + { + var _primitive_i_FE8484DAB3 = 0; + primitive.Select(p => p.Shadow = plain.primitive[_primitive_i_FE8484DAB3++]).ToArray(); + var _complex_i_FE8484DAB3 = 0; + complex.Select(p => p.PlainToShadowAsync(plain.complex[_complex_i_FE8484DAB3++])).ToArray(); + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -100,6 +149,39 @@ public some_complex_type(Ix.Connector.ITwinObject parent, string readableTail, s parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ArrayDeclarationSimpleNamespace.some_complex_type plain = new Pocos.ArrayDeclarationSimpleNamespace.some_complex_type(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ArrayDeclarationSimpleNamespace.some_complex_type plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ArrayDeclarationSimpleNamespace.some_complex_type plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ArrayDeclarationSimpleNamespace.some_complex_type plain = new Pocos.ArrayDeclarationSimpleNamespace.some_complex_type(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ArrayDeclarationSimpleNamespace.some_complex_type plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ArrayDeclarationSimpleNamespace.some_complex_type plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs index 64b3efd7..7fa577ed 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs @@ -82,6 +82,171 @@ public class_all_primitives(Ix.Connector.ITwinObject parent, string readableTail parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.class_all_primitives plain = new Pocos.class_all_primitives(); + await this.ReadAsync(); + plain.myBOOL = myBOOL.LastValue; + plain.myBYTE = myBYTE.LastValue; + plain.myWORD = myWORD.LastValue; + plain.myDWORD = myDWORD.LastValue; + plain.myLWORD = myLWORD.LastValue; + plain.mySINT = mySINT.LastValue; + plain.myINT = myINT.LastValue; + plain.myDINT = myDINT.LastValue; + plain.myLINT = myLINT.LastValue; + plain.myUSINT = myUSINT.LastValue; + plain.myUINT = myUINT.LastValue; + plain.myUDINT = myUDINT.LastValue; + plain.myULINT = myULINT.LastValue; + plain.myREAL = myREAL.LastValue; + plain.myLREAL = myLREAL.LastValue; + plain.myTIME = myTIME.LastValue; + plain.myLTIME = myLTIME.LastValue; + plain.myDATE = myDATE.LastValue; + plain.myTIME_OF_DAY = myTIME_OF_DAY.LastValue; + plain.myDATE_AND_TIME = myDATE_AND_TIME.LastValue; + plain.mySTRING = mySTRING.LastValue; + plain.myWSTRING = myWSTRING.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.class_all_primitives plain) + { + plain.myBOOL = myBOOL.LastValue; + plain.myBYTE = myBYTE.LastValue; + plain.myWORD = myWORD.LastValue; + plain.myDWORD = myDWORD.LastValue; + plain.myLWORD = myLWORD.LastValue; + plain.mySINT = mySINT.LastValue; + plain.myINT = myINT.LastValue; + plain.myDINT = myDINT.LastValue; + plain.myLINT = myLINT.LastValue; + plain.myUSINT = myUSINT.LastValue; + plain.myUINT = myUINT.LastValue; + plain.myUDINT = myUDINT.LastValue; + plain.myULINT = myULINT.LastValue; + plain.myREAL = myREAL.LastValue; + plain.myLREAL = myLREAL.LastValue; + plain.myTIME = myTIME.LastValue; + plain.myLTIME = myLTIME.LastValue; + plain.myDATE = myDATE.LastValue; + plain.myTIME_OF_DAY = myTIME_OF_DAY.LastValue; + plain.myDATE_AND_TIME = myDATE_AND_TIME.LastValue; + plain.mySTRING = mySTRING.LastValue; + plain.myWSTRING = myWSTRING.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.class_all_primitives plain) + { + myBOOL.Cyclic = plain.myBOOL; + myBYTE.Cyclic = plain.myBYTE; + myWORD.Cyclic = plain.myWORD; + myDWORD.Cyclic = plain.myDWORD; + myLWORD.Cyclic = plain.myLWORD; + mySINT.Cyclic = plain.mySINT; + myINT.Cyclic = plain.myINT; + myDINT.Cyclic = plain.myDINT; + myLINT.Cyclic = plain.myLINT; + myUSINT.Cyclic = plain.myUSINT; + myUINT.Cyclic = plain.myUINT; + myUDINT.Cyclic = plain.myUDINT; + myULINT.Cyclic = plain.myULINT; + myREAL.Cyclic = plain.myREAL; + myLREAL.Cyclic = plain.myLREAL; + myTIME.Cyclic = plain.myTIME; + myLTIME.Cyclic = plain.myLTIME; + myDATE.Cyclic = plain.myDATE; + myTIME_OF_DAY.Cyclic = plain.myTIME_OF_DAY; + myDATE_AND_TIME.Cyclic = plain.myDATE_AND_TIME; + mySTRING.Cyclic = plain.mySTRING; + myWSTRING.Cyclic = plain.myWSTRING; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.class_all_primitives plain = new Pocos.class_all_primitives(); + plain.myBOOL = myBOOL.Shadow; + plain.myBYTE = myBYTE.Shadow; + plain.myWORD = myWORD.Shadow; + plain.myDWORD = myDWORD.Shadow; + plain.myLWORD = myLWORD.Shadow; + plain.mySINT = mySINT.Shadow; + plain.myINT = myINT.Shadow; + plain.myDINT = myDINT.Shadow; + plain.myLINT = myLINT.Shadow; + plain.myUSINT = myUSINT.Shadow; + plain.myUINT = myUINT.Shadow; + plain.myUDINT = myUDINT.Shadow; + plain.myULINT = myULINT.Shadow; + plain.myREAL = myREAL.Shadow; + plain.myLREAL = myLREAL.Shadow; + plain.myTIME = myTIME.Shadow; + plain.myLTIME = myLTIME.Shadow; + plain.myDATE = myDATE.Shadow; + plain.myTIME_OF_DAY = myTIME_OF_DAY.Shadow; + plain.myDATE_AND_TIME = myDATE_AND_TIME.Shadow; + plain.mySTRING = mySTRING.Shadow; + plain.myWSTRING = myWSTRING.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.class_all_primitives plain) + { + plain.myBOOL = myBOOL.Shadow; + plain.myBYTE = myBYTE.Shadow; + plain.myWORD = myWORD.Shadow; + plain.myDWORD = myDWORD.Shadow; + plain.myLWORD = myLWORD.Shadow; + plain.mySINT = mySINT.Shadow; + plain.myINT = myINT.Shadow; + plain.myDINT = myDINT.Shadow; + plain.myLINT = myLINT.Shadow; + plain.myUSINT = myUSINT.Shadow; + plain.myUINT = myUINT.Shadow; + plain.myUDINT = myUDINT.Shadow; + plain.myULINT = myULINT.Shadow; + plain.myREAL = myREAL.Shadow; + plain.myLREAL = myLREAL.Shadow; + plain.myTIME = myTIME.Shadow; + plain.myLTIME = myLTIME.Shadow; + plain.myDATE = myDATE.Shadow; + plain.myTIME_OF_DAY = myTIME_OF_DAY.Shadow; + plain.myDATE_AND_TIME = myDATE_AND_TIME.Shadow; + plain.mySTRING = mySTRING.Shadow; + plain.myWSTRING = myWSTRING.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.class_all_primitives plain) + { + myBOOL.Shadow = plain.myBOOL; + myBYTE.Shadow = plain.myBYTE; + myWORD.Shadow = plain.myWORD; + myDWORD.Shadow = plain.myDWORD; + myLWORD.Shadow = plain.myLWORD; + mySINT.Shadow = plain.mySINT; + myINT.Shadow = plain.myINT; + myDINT.Shadow = plain.myDINT; + myLINT.Shadow = plain.myLINT; + myUSINT.Shadow = plain.myUSINT; + myUINT.Shadow = plain.myUINT; + myUDINT.Shadow = plain.myUDINT; + myULINT.Shadow = plain.myULINT; + myREAL.Shadow = plain.myREAL; + myLREAL.Shadow = plain.myLREAL; + myTIME.Shadow = plain.myTIME; + myLTIME.Shadow = plain.myLTIME; + myDATE.Shadow = plain.myDATE; + myTIME_OF_DAY.Shadow = plain.myTIME_OF_DAY; + myDATE_AND_TIME.Shadow = plain.myDATE_AND_TIME; + mySTRING.Shadow = plain.mySTRING; + myWSTRING.Shadow = plain.myWSTRING; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs index 0ab45072..58be291b 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs @@ -11,6 +11,45 @@ public State1Transition(Ix.Connector.ITwinObject parent, string readableTail, st { Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); } + + public async Task OnlineToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.State1Transition plain = new Pocos.Simatic.Ax.StateFramework.State1Transition(); + await this.ReadAsync(); + await base.OnlineToPlainAsync(plain); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Simatic.Ax.StateFramework.State1Transition plain) + { + await base.OnlineToPlainAsync(plain); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Simatic.Ax.StateFramework.State1Transition plain) + { + await base.PlainToOnlineAsync(plain); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.State1Transition plain = new Pocos.Simatic.Ax.StateFramework.State1Transition(); + await base.ShadowToPlainAsync(plain); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.Simatic.Ax.StateFramework.State1Transition plain) + { + await base.ShadowToPlainAsync(plain); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.Simatic.Ax.StateFramework.State1Transition plain) + { + await base.PlainToShadowAsync(plain); + return this.RetrievePrimitives(); + } } } @@ -35,6 +74,51 @@ public AbstractState(Ix.Connector.ITwinObject parent, string readableTail, strin parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.AbstractState plain = new Pocos.Simatic.Ax.StateFramework.AbstractState(); + await this.ReadAsync(); + plain.StateID = StateID.LastValue; + plain.StateName = StateName.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Simatic.Ax.StateFramework.AbstractState plain) + { + plain.StateID = StateID.LastValue; + plain.StateName = StateName.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Simatic.Ax.StateFramework.AbstractState plain) + { + StateID.Cyclic = plain.StateID; + StateName.Cyclic = plain.StateName; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.AbstractState plain = new Pocos.Simatic.Ax.StateFramework.AbstractState(); + plain.StateID = StateID.Shadow; + plain.StateName = StateName.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.Simatic.Ax.StateFramework.AbstractState plain) + { + plain.StateID = StateID.Shadow; + plain.StateName = StateName.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.Simatic.Ax.StateFramework.AbstractState plain) + { + StateID.Shadow = plain.StateID; + StateName.Shadow = plain.StateName; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs index f231a3ed..81333bbb 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs @@ -9,6 +9,45 @@ public Extended(Ix.Connector.ITwinObject parent, string readableTail, string sym { Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); } + + public async Task OnlineToPlainAsync() + { + Pocos.Extended plain = new Pocos.Extended(); + await this.ReadAsync(); + await base.OnlineToPlainAsync(plain); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Extended plain) + { + await base.OnlineToPlainAsync(plain); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Extended plain) + { + await base.PlainToOnlineAsync(plain); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.Extended plain = new Pocos.Extended(); + await base.ShadowToPlainAsync(plain); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.Extended plain) + { + await base.ShadowToPlainAsync(plain); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.Extended plain) + { + await base.PlainToShadowAsync(plain); + return this.RetrievePrimitives(); + } } public partial class Extendee : Ix.Connector.ITwinObject @@ -24,6 +63,39 @@ public Extendee(Ix.Connector.ITwinObject parent, string readableTail, string sym parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.Extendee plain = new Pocos.Extendee(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Extendee plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Extendee plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.Extendee plain = new Pocos.Extendee(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.Extendee plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.Extendee plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs index 5e7a1278..498ae886 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs @@ -9,6 +9,45 @@ public ExtendsAndImplements(Ix.Connector.ITwinObject parent, string readableTail { Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); } + + public async Task OnlineToPlainAsync() + { + Pocos.ExtendsAndImplements plain = new Pocos.ExtendsAndImplements(); + await this.ReadAsync(); + await base.OnlineToPlainAsync(plain); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ExtendsAndImplements plain) + { + await base.OnlineToPlainAsync(plain); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ExtendsAndImplements plain) + { + await base.PlainToOnlineAsync(plain); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ExtendsAndImplements plain = new Pocos.ExtendsAndImplements(); + await base.ShadowToPlainAsync(plain); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ExtendsAndImplements plain) + { + await base.ShadowToPlainAsync(plain); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ExtendsAndImplements plain) + { + await base.PlainToShadowAsync(plain); + return this.RetrievePrimitives(); + } } public partial class ExtendeeExtendsAndImplements : Ix.Connector.ITwinObject @@ -24,6 +63,39 @@ public ExtendeeExtendsAndImplements(Ix.Connector.ITwinObject parent, string read parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ExtendeeExtendsAndImplements plain = new Pocos.ExtendeeExtendsAndImplements(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ExtendeeExtendsAndImplements plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ExtendeeExtendsAndImplements plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ExtendeeExtendsAndImplements plain = new Pocos.ExtendeeExtendsAndImplements(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ExtendeeExtendsAndImplements plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ExtendeeExtendsAndImplements plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs index ddc115f3..161fc7aa 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs @@ -16,6 +16,39 @@ public _NULL_CONTEXT(Ix.Connector.ITwinObject parent, string readableTail, strin parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos._NULL_CONTEXT plain = new Pocos._NULL_CONTEXT(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos._NULL_CONTEXT plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos._NULL_CONTEXT plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos._NULL_CONTEXT plain = new Pocos._NULL_CONTEXT(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos._NULL_CONTEXT plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos._NULL_CONTEXT plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs index c4e62908..42095fec 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs @@ -16,6 +16,39 @@ public _NULL_CONTEXT_MULTIPLE(Ix.Connector.ITwinObject parent, string readableTa parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos._NULL_CONTEXT_MULTIPLE plain = new Pocos._NULL_CONTEXT_MULTIPLE(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos._NULL_CONTEXT_MULTIPLE plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos._NULL_CONTEXT_MULTIPLE plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos._NULL_CONTEXT_MULTIPLE plain = new Pocos._NULL_CONTEXT_MULTIPLE(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos._NULL_CONTEXT_MULTIPLE plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos._NULL_CONTEXT_MULTIPLE plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs index 348013ca..e80edd57 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs @@ -16,6 +16,39 @@ public ClassWithComplexTypes(Ix.Connector.ITwinObject parent, string readableTai parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithComplexTypes plain = new Pocos.ClassWithComplexTypes(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithComplexTypes plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithComplexTypes plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithComplexTypes plain = new Pocos.ClassWithComplexTypes(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithComplexTypes plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithComplexTypes plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs index 27704e09..a8cde282 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs @@ -16,6 +16,39 @@ public NoAccessModifierClass(Ix.Connector.ITwinObject parent, string readableTai parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.NoAccessModifierClass plain = new Pocos.NoAccessModifierClass(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.NoAccessModifierClass plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.NoAccessModifierClass plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.NoAccessModifierClass plain = new Pocos.NoAccessModifierClass(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.NoAccessModifierClass plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.NoAccessModifierClass plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs index 8ba25956..4f8d49f6 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs @@ -21,6 +21,45 @@ public ClassWithComplexTypes(Ix.Connector.ITwinObject parent, string readableTai parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes plain = new Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes(); + await this.ReadAsync(); + plain.myComplexType = await myComplexType.OnlineToPlainAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes plain) + { + plain.myComplexType = await myComplexType.OnlineToPlainAsync(); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes plain) + { + await this.myComplexType.PlainToOnlineAsync(plain.myComplexType); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes plain = new Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes(); + plain.myComplexType = await myComplexType.ShadowToPlainAsync(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes plain) + { + plain.myComplexType = await myComplexType.ShadowToPlainAsync(); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes plain) + { + await this.myComplexType.PlainToShadowAsync(plain.myComplexType); + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -95,6 +134,39 @@ public ComplexType1(Ix.Connector.ITwinObject parent, string readableTail, string parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithComplexTypesNamespace.ComplexType1 plain = new Pocos.ClassWithComplexTypesNamespace.ComplexType1(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithComplexTypesNamespace.ComplexType1 plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithComplexTypesNamespace.ComplexType1 plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithComplexTypesNamespace.ComplexType1 plain = new Pocos.ClassWithComplexTypesNamespace.ComplexType1(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithComplexTypesNamespace.ComplexType1 plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithComplexTypesNamespace.ComplexType1 plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs index cbce761a..a80753f7 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs @@ -21,6 +21,45 @@ public ClassWithNonTraspilableMembers(Ix.Connector.ITwinObject parent, string re parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers plain = new Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers(); + await this.ReadAsync(); + plain.myComplexType = await myComplexType.OnlineToPlainAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers plain) + { + plain.myComplexType = await myComplexType.OnlineToPlainAsync(); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers plain) + { + await this.myComplexType.PlainToOnlineAsync(plain.myComplexType); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers plain = new Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers(); + plain.myComplexType = await myComplexType.ShadowToPlainAsync(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers plain) + { + plain.myComplexType = await myComplexType.ShadowToPlainAsync(); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers plain) + { + await this.myComplexType.PlainToShadowAsync(plain.myComplexType); + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -95,6 +134,39 @@ public ComplexType1(Ix.Connector.ITwinObject parent, string readableTail, string parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 plain = new Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 plain = new Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs index f38b6e51..99c555ee 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs @@ -23,6 +23,45 @@ public ClassWithPragmas(Ix.Connector.ITwinObject parent, string readableTail, st parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithPragmasNamespace.ClassWithPragmas plain = new Pocos.ClassWithPragmasNamespace.ClassWithPragmas(); + await this.ReadAsync(); + plain.myComplexType = await myComplexType.OnlineToPlainAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithPragmasNamespace.ClassWithPragmas plain) + { + plain.myComplexType = await myComplexType.OnlineToPlainAsync(); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithPragmasNamespace.ClassWithPragmas plain) + { + await this.myComplexType.PlainToOnlineAsync(plain.myComplexType); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithPragmasNamespace.ClassWithPragmas plain = new Pocos.ClassWithPragmasNamespace.ClassWithPragmas(); + plain.myComplexType = await myComplexType.ShadowToPlainAsync(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithPragmasNamespace.ClassWithPragmas plain) + { + plain.myComplexType = await myComplexType.ShadowToPlainAsync(); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithPragmasNamespace.ClassWithPragmas plain) + { + await this.myComplexType.PlainToShadowAsync(plain.myComplexType); + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -97,6 +136,39 @@ public ComplexType1(Ix.Connector.ITwinObject parent, string readableTail, string parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithPragmasNamespace.ComplexType1 plain = new Pocos.ClassWithPragmasNamespace.ComplexType1(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithPragmasNamespace.ComplexType1 plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithPragmasNamespace.ComplexType1 plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithPragmasNamespace.ComplexType1 plain = new Pocos.ClassWithPragmasNamespace.ComplexType1(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithPragmasNamespace.ComplexType1 plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithPragmasNamespace.ComplexType1 plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs index 1c8fc478..6e95d4b2 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs @@ -99,6 +99,201 @@ public ClassWithPrimitiveTypes(Ix.Connector.ITwinObject parent, string readableT parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes plain = new Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes(); + await this.ReadAsync(); + plain.myBOOL = myBOOL.LastValue; + plain.myBYTE = myBYTE.LastValue; + plain.myWORD = myWORD.LastValue; + plain.myDWORD = myDWORD.LastValue; + plain.myLWORD = myLWORD.LastValue; + plain.mySINT = mySINT.LastValue; + plain.myINT = myINT.LastValue; + plain.myDINT = myDINT.LastValue; + plain.myLINT = myLINT.LastValue; + plain.myUSINT = myUSINT.LastValue; + plain.myUINT = myUINT.LastValue; + plain.myUDINT = myUDINT.LastValue; + plain.myULINT = myULINT.LastValue; + plain.myREAL = myREAL.LastValue; + plain.myLREAL = myLREAL.LastValue; + plain.myTIME = myTIME.LastValue; + plain.myLTIME = myLTIME.LastValue; + plain.myDATE = myDATE.LastValue; + plain.myLDATE = myLDATE.LastValue; + plain.myTIME_OF_DAY = myTIME_OF_DAY.LastValue; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.LastValue; + plain.myDATE_AND_TIME = myDATE_AND_TIME.LastValue; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.LastValue; + plain.myCHAR = myCHAR.LastValue; + plain.myWCHAR = myWCHAR.LastValue; + plain.mySTRING = mySTRING.LastValue; + plain.myWSTRING = myWSTRING.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes plain) + { + plain.myBOOL = myBOOL.LastValue; + plain.myBYTE = myBYTE.LastValue; + plain.myWORD = myWORD.LastValue; + plain.myDWORD = myDWORD.LastValue; + plain.myLWORD = myLWORD.LastValue; + plain.mySINT = mySINT.LastValue; + plain.myINT = myINT.LastValue; + plain.myDINT = myDINT.LastValue; + plain.myLINT = myLINT.LastValue; + plain.myUSINT = myUSINT.LastValue; + plain.myUINT = myUINT.LastValue; + plain.myUDINT = myUDINT.LastValue; + plain.myULINT = myULINT.LastValue; + plain.myREAL = myREAL.LastValue; + plain.myLREAL = myLREAL.LastValue; + plain.myTIME = myTIME.LastValue; + plain.myLTIME = myLTIME.LastValue; + plain.myDATE = myDATE.LastValue; + plain.myLDATE = myLDATE.LastValue; + plain.myTIME_OF_DAY = myTIME_OF_DAY.LastValue; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.LastValue; + plain.myDATE_AND_TIME = myDATE_AND_TIME.LastValue; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.LastValue; + plain.myCHAR = myCHAR.LastValue; + plain.myWCHAR = myWCHAR.LastValue; + plain.mySTRING = mySTRING.LastValue; + plain.myWSTRING = myWSTRING.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes plain) + { + myBOOL.Cyclic = plain.myBOOL; + myBYTE.Cyclic = plain.myBYTE; + myWORD.Cyclic = plain.myWORD; + myDWORD.Cyclic = plain.myDWORD; + myLWORD.Cyclic = plain.myLWORD; + mySINT.Cyclic = plain.mySINT; + myINT.Cyclic = plain.myINT; + myDINT.Cyclic = plain.myDINT; + myLINT.Cyclic = plain.myLINT; + myUSINT.Cyclic = plain.myUSINT; + myUINT.Cyclic = plain.myUINT; + myUDINT.Cyclic = plain.myUDINT; + myULINT.Cyclic = plain.myULINT; + myREAL.Cyclic = plain.myREAL; + myLREAL.Cyclic = plain.myLREAL; + myTIME.Cyclic = plain.myTIME; + myLTIME.Cyclic = plain.myLTIME; + myDATE.Cyclic = plain.myDATE; + myLDATE.Cyclic = plain.myLDATE; + myTIME_OF_DAY.Cyclic = plain.myTIME_OF_DAY; + myLTIME_OF_DAY.Cyclic = plain.myLTIME_OF_DAY; + myDATE_AND_TIME.Cyclic = plain.myDATE_AND_TIME; + myLDATE_AND_TIME.Cyclic = plain.myLDATE_AND_TIME; + myCHAR.Cyclic = plain.myCHAR; + myWCHAR.Cyclic = plain.myWCHAR; + mySTRING.Cyclic = plain.mySTRING; + myWSTRING.Cyclic = plain.myWSTRING; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes plain = new Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes(); + plain.myBOOL = myBOOL.Shadow; + plain.myBYTE = myBYTE.Shadow; + plain.myWORD = myWORD.Shadow; + plain.myDWORD = myDWORD.Shadow; + plain.myLWORD = myLWORD.Shadow; + plain.mySINT = mySINT.Shadow; + plain.myINT = myINT.Shadow; + plain.myDINT = myDINT.Shadow; + plain.myLINT = myLINT.Shadow; + plain.myUSINT = myUSINT.Shadow; + plain.myUINT = myUINT.Shadow; + plain.myUDINT = myUDINT.Shadow; + plain.myULINT = myULINT.Shadow; + plain.myREAL = myREAL.Shadow; + plain.myLREAL = myLREAL.Shadow; + plain.myTIME = myTIME.Shadow; + plain.myLTIME = myLTIME.Shadow; + plain.myDATE = myDATE.Shadow; + plain.myLDATE = myLDATE.Shadow; + plain.myTIME_OF_DAY = myTIME_OF_DAY.Shadow; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.Shadow; + plain.myDATE_AND_TIME = myDATE_AND_TIME.Shadow; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.Shadow; + plain.myCHAR = myCHAR.Shadow; + plain.myWCHAR = myWCHAR.Shadow; + plain.mySTRING = mySTRING.Shadow; + plain.myWSTRING = myWSTRING.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes plain) + { + plain.myBOOL = myBOOL.Shadow; + plain.myBYTE = myBYTE.Shadow; + plain.myWORD = myWORD.Shadow; + plain.myDWORD = myDWORD.Shadow; + plain.myLWORD = myLWORD.Shadow; + plain.mySINT = mySINT.Shadow; + plain.myINT = myINT.Shadow; + plain.myDINT = myDINT.Shadow; + plain.myLINT = myLINT.Shadow; + plain.myUSINT = myUSINT.Shadow; + plain.myUINT = myUINT.Shadow; + plain.myUDINT = myUDINT.Shadow; + plain.myULINT = myULINT.Shadow; + plain.myREAL = myREAL.Shadow; + plain.myLREAL = myLREAL.Shadow; + plain.myTIME = myTIME.Shadow; + plain.myLTIME = myLTIME.Shadow; + plain.myDATE = myDATE.Shadow; + plain.myLDATE = myLDATE.Shadow; + plain.myTIME_OF_DAY = myTIME_OF_DAY.Shadow; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.Shadow; + plain.myDATE_AND_TIME = myDATE_AND_TIME.Shadow; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.Shadow; + plain.myCHAR = myCHAR.Shadow; + plain.myWCHAR = myWCHAR.Shadow; + plain.mySTRING = mySTRING.Shadow; + plain.myWSTRING = myWSTRING.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes plain) + { + myBOOL.Shadow = plain.myBOOL; + myBYTE.Shadow = plain.myBYTE; + myWORD.Shadow = plain.myWORD; + myDWORD.Shadow = plain.myDWORD; + myLWORD.Shadow = plain.myLWORD; + mySINT.Shadow = plain.mySINT; + myINT.Shadow = plain.myINT; + myDINT.Shadow = plain.myDINT; + myLINT.Shadow = plain.myLINT; + myUSINT.Shadow = plain.myUSINT; + myUINT.Shadow = plain.myUINT; + myUDINT.Shadow = plain.myUDINT; + myULINT.Shadow = plain.myULINT; + myREAL.Shadow = plain.myREAL; + myLREAL.Shadow = plain.myLREAL; + myTIME.Shadow = plain.myTIME; + myLTIME.Shadow = plain.myLTIME; + myDATE.Shadow = plain.myDATE; + myLDATE.Shadow = plain.myLDATE; + myTIME_OF_DAY.Shadow = plain.myTIME_OF_DAY; + myLTIME_OF_DAY.Shadow = plain.myLTIME_OF_DAY; + myDATE_AND_TIME.Shadow = plain.myDATE_AND_TIME; + myLDATE_AND_TIME.Shadow = plain.myLDATE_AND_TIME; + myCHAR.Shadow = plain.myCHAR; + myWCHAR.Shadow = plain.myWCHAR; + mySTRING.Shadow = plain.mySTRING; + myWSTRING.Shadow = plain.myWSTRING; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs index 5c2f14fe..80b54589 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs @@ -19,6 +19,39 @@ public ClassWithUsingDirectives(Ix.Connector.ITwinObject parent, string readable parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ClassWithUsingDirectives plain = new Pocos.ClassWithUsingDirectives(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ClassWithUsingDirectives plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ClassWithUsingDirectives plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ClassWithUsingDirectives plain = new Pocos.ClassWithUsingDirectives(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ClassWithUsingDirectives plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ClassWithUsingDirectives plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs index 0c0414e5..05b1a553 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs @@ -252,6 +252,201 @@ public ComplexForConfig(Ix.Connector.ITwinObject parent, string readableTail, st parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.ComplexForConfig plain = new Pocos.ComplexForConfig(); + await this.ReadAsync(); + plain.myBOOL = myBOOL.LastValue; + plain.myBYTE = myBYTE.LastValue; + plain.myWORD = myWORD.LastValue; + plain.myDWORD = myDWORD.LastValue; + plain.myLWORD = myLWORD.LastValue; + plain.mySINT = mySINT.LastValue; + plain.myINT = myINT.LastValue; + plain.myDINT = myDINT.LastValue; + plain.myLINT = myLINT.LastValue; + plain.myUSINT = myUSINT.LastValue; + plain.myUINT = myUINT.LastValue; + plain.myUDINT = myUDINT.LastValue; + plain.myULINT = myULINT.LastValue; + plain.myREAL = myREAL.LastValue; + plain.myLREAL = myLREAL.LastValue; + plain.myTIME = myTIME.LastValue; + plain.myLTIME = myLTIME.LastValue; + plain.myDATE = myDATE.LastValue; + plain.myLDATE = myLDATE.LastValue; + plain.myTIME_OF_DAY = myTIME_OF_DAY.LastValue; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.LastValue; + plain.myDATE_AND_TIME = myDATE_AND_TIME.LastValue; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.LastValue; + plain.myCHAR = myCHAR.LastValue; + plain.myWCHAR = myWCHAR.LastValue; + plain.mySTRING = mySTRING.LastValue; + plain.myWSTRING = myWSTRING.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.ComplexForConfig plain) + { + plain.myBOOL = myBOOL.LastValue; + plain.myBYTE = myBYTE.LastValue; + plain.myWORD = myWORD.LastValue; + plain.myDWORD = myDWORD.LastValue; + plain.myLWORD = myLWORD.LastValue; + plain.mySINT = mySINT.LastValue; + plain.myINT = myINT.LastValue; + plain.myDINT = myDINT.LastValue; + plain.myLINT = myLINT.LastValue; + plain.myUSINT = myUSINT.LastValue; + plain.myUINT = myUINT.LastValue; + plain.myUDINT = myUDINT.LastValue; + plain.myULINT = myULINT.LastValue; + plain.myREAL = myREAL.LastValue; + plain.myLREAL = myLREAL.LastValue; + plain.myTIME = myTIME.LastValue; + plain.myLTIME = myLTIME.LastValue; + plain.myDATE = myDATE.LastValue; + plain.myLDATE = myLDATE.LastValue; + plain.myTIME_OF_DAY = myTIME_OF_DAY.LastValue; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.LastValue; + plain.myDATE_AND_TIME = myDATE_AND_TIME.LastValue; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.LastValue; + plain.myCHAR = myCHAR.LastValue; + plain.myWCHAR = myWCHAR.LastValue; + plain.mySTRING = mySTRING.LastValue; + plain.myWSTRING = myWSTRING.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.ComplexForConfig plain) + { + myBOOL.Cyclic = plain.myBOOL; + myBYTE.Cyclic = plain.myBYTE; + myWORD.Cyclic = plain.myWORD; + myDWORD.Cyclic = plain.myDWORD; + myLWORD.Cyclic = plain.myLWORD; + mySINT.Cyclic = plain.mySINT; + myINT.Cyclic = plain.myINT; + myDINT.Cyclic = plain.myDINT; + myLINT.Cyclic = plain.myLINT; + myUSINT.Cyclic = plain.myUSINT; + myUINT.Cyclic = plain.myUINT; + myUDINT.Cyclic = plain.myUDINT; + myULINT.Cyclic = plain.myULINT; + myREAL.Cyclic = plain.myREAL; + myLREAL.Cyclic = plain.myLREAL; + myTIME.Cyclic = plain.myTIME; + myLTIME.Cyclic = plain.myLTIME; + myDATE.Cyclic = plain.myDATE; + myLDATE.Cyclic = plain.myLDATE; + myTIME_OF_DAY.Cyclic = plain.myTIME_OF_DAY; + myLTIME_OF_DAY.Cyclic = plain.myLTIME_OF_DAY; + myDATE_AND_TIME.Cyclic = plain.myDATE_AND_TIME; + myLDATE_AND_TIME.Cyclic = plain.myLDATE_AND_TIME; + myCHAR.Cyclic = plain.myCHAR; + myWCHAR.Cyclic = plain.myWCHAR; + mySTRING.Cyclic = plain.mySTRING; + myWSTRING.Cyclic = plain.myWSTRING; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.ComplexForConfig plain = new Pocos.ComplexForConfig(); + plain.myBOOL = myBOOL.Shadow; + plain.myBYTE = myBYTE.Shadow; + plain.myWORD = myWORD.Shadow; + plain.myDWORD = myDWORD.Shadow; + plain.myLWORD = myLWORD.Shadow; + plain.mySINT = mySINT.Shadow; + plain.myINT = myINT.Shadow; + plain.myDINT = myDINT.Shadow; + plain.myLINT = myLINT.Shadow; + plain.myUSINT = myUSINT.Shadow; + plain.myUINT = myUINT.Shadow; + plain.myUDINT = myUDINT.Shadow; + plain.myULINT = myULINT.Shadow; + plain.myREAL = myREAL.Shadow; + plain.myLREAL = myLREAL.Shadow; + plain.myTIME = myTIME.Shadow; + plain.myLTIME = myLTIME.Shadow; + plain.myDATE = myDATE.Shadow; + plain.myLDATE = myLDATE.Shadow; + plain.myTIME_OF_DAY = myTIME_OF_DAY.Shadow; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.Shadow; + plain.myDATE_AND_TIME = myDATE_AND_TIME.Shadow; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.Shadow; + plain.myCHAR = myCHAR.Shadow; + plain.myWCHAR = myWCHAR.Shadow; + plain.mySTRING = mySTRING.Shadow; + plain.myWSTRING = myWSTRING.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.ComplexForConfig plain) + { + plain.myBOOL = myBOOL.Shadow; + plain.myBYTE = myBYTE.Shadow; + plain.myWORD = myWORD.Shadow; + plain.myDWORD = myDWORD.Shadow; + plain.myLWORD = myLWORD.Shadow; + plain.mySINT = mySINT.Shadow; + plain.myINT = myINT.Shadow; + plain.myDINT = myDINT.Shadow; + plain.myLINT = myLINT.Shadow; + plain.myUSINT = myUSINT.Shadow; + plain.myUINT = myUINT.Shadow; + plain.myUDINT = myUDINT.Shadow; + plain.myULINT = myULINT.Shadow; + plain.myREAL = myREAL.Shadow; + plain.myLREAL = myLREAL.Shadow; + plain.myTIME = myTIME.Shadow; + plain.myLTIME = myLTIME.Shadow; + plain.myDATE = myDATE.Shadow; + plain.myLDATE = myLDATE.Shadow; + plain.myTIME_OF_DAY = myTIME_OF_DAY.Shadow; + plain.myLTIME_OF_DAY = myLTIME_OF_DAY.Shadow; + plain.myDATE_AND_TIME = myDATE_AND_TIME.Shadow; + plain.myLDATE_AND_TIME = myLDATE_AND_TIME.Shadow; + plain.myCHAR = myCHAR.Shadow; + plain.myWCHAR = myWCHAR.Shadow; + plain.mySTRING = mySTRING.Shadow; + plain.myWSTRING = myWSTRING.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.ComplexForConfig plain) + { + myBOOL.Shadow = plain.myBOOL; + myBYTE.Shadow = plain.myBYTE; + myWORD.Shadow = plain.myWORD; + myDWORD.Shadow = plain.myDWORD; + myLWORD.Shadow = plain.myLWORD; + mySINT.Shadow = plain.mySINT; + myINT.Shadow = plain.myINT; + myDINT.Shadow = plain.myDINT; + myLINT.Shadow = plain.myLINT; + myUSINT.Shadow = plain.myUSINT; + myUINT.Shadow = plain.myUINT; + myUDINT.Shadow = plain.myUDINT; + myULINT.Shadow = plain.myULINT; + myREAL.Shadow = plain.myREAL; + myLREAL.Shadow = plain.myLREAL; + myTIME.Shadow = plain.myTIME; + myLTIME.Shadow = plain.myLTIME; + myDATE.Shadow = plain.myDATE; + myLDATE.Shadow = plain.myLDATE; + myTIME_OF_DAY.Shadow = plain.myTIME_OF_DAY; + myLTIME_OF_DAY.Shadow = plain.myLTIME_OF_DAY; + myDATE_AND_TIME.Shadow = plain.myDATE_AND_TIME; + myLDATE_AND_TIME.Shadow = plain.myLDATE_AND_TIME; + myCHAR.Shadow = plain.myCHAR; + myWCHAR.Shadow = plain.myWCHAR; + mySTRING.Shadow = plain.mySTRING; + myWSTRING.Shadow = plain.myWSTRING; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs index 2720e6fc..d07941a9 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs @@ -34,6 +34,63 @@ public MembersWithMakeReadOnce(Ix.Connector.ITwinObject parent, string readableT parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.makereadonce.MembersWithMakeReadOnce plain = new Pocos.makereadonce.MembersWithMakeReadOnce(); + await this.ReadAsync(); + plain.makeReadOnceMember = makeReadOnceMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + plain.makeReadComplexMember = await makeReadComplexMember.OnlineToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.OnlineToPlainAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.makereadonce.MembersWithMakeReadOnce plain) + { + plain.makeReadOnceMember = makeReadOnceMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + plain.makeReadComplexMember = await makeReadComplexMember.OnlineToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.OnlineToPlainAsync(); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.makereadonce.MembersWithMakeReadOnce plain) + { + makeReadOnceMember.Cyclic = plain.makeReadOnceMember; + someOtherMember.Cyclic = plain.someOtherMember; + await this.makeReadComplexMember.PlainToOnlineAsync(plain.makeReadComplexMember); + await this.someotherComplexMember.PlainToOnlineAsync(plain.someotherComplexMember); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.makereadonce.MembersWithMakeReadOnce plain = new Pocos.makereadonce.MembersWithMakeReadOnce(); + plain.makeReadOnceMember = makeReadOnceMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + plain.makeReadComplexMember = await makeReadComplexMember.ShadowToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.ShadowToPlainAsync(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.makereadonce.MembersWithMakeReadOnce plain) + { + plain.makeReadOnceMember = makeReadOnceMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + plain.makeReadComplexMember = await makeReadComplexMember.ShadowToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.ShadowToPlainAsync(); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.makereadonce.MembersWithMakeReadOnce plain) + { + makeReadOnceMember.Shadow = plain.makeReadOnceMember; + someOtherMember.Shadow = plain.someOtherMember; + await this.makeReadComplexMember.PlainToShadowAsync(plain.makeReadComplexMember); + await this.someotherComplexMember.PlainToShadowAsync(plain.someotherComplexMember); + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -114,6 +171,51 @@ public ComplexMember(Ix.Connector.ITwinObject parent, string readableTail, strin parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.makereadonce.ComplexMember plain = new Pocos.makereadonce.ComplexMember(); + await this.ReadAsync(); + plain.someMember = someMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.makereadonce.ComplexMember plain) + { + plain.someMember = someMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.makereadonce.ComplexMember plain) + { + someMember.Cyclic = plain.someMember; + someOtherMember.Cyclic = plain.someOtherMember; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.makereadonce.ComplexMember plain = new Pocos.makereadonce.ComplexMember(); + plain.someMember = someMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.makereadonce.ComplexMember plain) + { + plain.someMember = someMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.makereadonce.ComplexMember plain) + { + someMember.Shadow = plain.someMember; + someOtherMember.Shadow = plain.someOtherMember; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs index e0b169fc..56d532ad 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs @@ -34,6 +34,63 @@ public MembersWithMakeReadOnly(Ix.Connector.ITwinObject parent, string readableT parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.makereadonly.MembersWithMakeReadOnly plain = new Pocos.makereadonly.MembersWithMakeReadOnly(); + await this.ReadAsync(); + plain.makeReadOnceMember = makeReadOnceMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + plain.makeReadComplexMember = await makeReadComplexMember.OnlineToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.OnlineToPlainAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.makereadonly.MembersWithMakeReadOnly plain) + { + plain.makeReadOnceMember = makeReadOnceMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + plain.makeReadComplexMember = await makeReadComplexMember.OnlineToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.OnlineToPlainAsync(); + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.makereadonly.MembersWithMakeReadOnly plain) + { + makeReadOnceMember.Cyclic = plain.makeReadOnceMember; + someOtherMember.Cyclic = plain.someOtherMember; + await this.makeReadComplexMember.PlainToOnlineAsync(plain.makeReadComplexMember); + await this.someotherComplexMember.PlainToOnlineAsync(plain.someotherComplexMember); + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.makereadonly.MembersWithMakeReadOnly plain = new Pocos.makereadonly.MembersWithMakeReadOnly(); + plain.makeReadOnceMember = makeReadOnceMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + plain.makeReadComplexMember = await makeReadComplexMember.ShadowToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.ShadowToPlainAsync(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.makereadonly.MembersWithMakeReadOnly plain) + { + plain.makeReadOnceMember = makeReadOnceMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + plain.makeReadComplexMember = await makeReadComplexMember.ShadowToPlainAsync(); + plain.someotherComplexMember = await someotherComplexMember.ShadowToPlainAsync(); + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.makereadonly.MembersWithMakeReadOnly plain) + { + makeReadOnceMember.Shadow = plain.makeReadOnceMember; + someOtherMember.Shadow = plain.someOtherMember; + await this.makeReadComplexMember.PlainToShadowAsync(plain.makeReadComplexMember); + await this.someotherComplexMember.PlainToShadowAsync(plain.someotherComplexMember); + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -114,6 +171,51 @@ public ComplexMember(Ix.Connector.ITwinObject parent, string readableTail, strin parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.makereadonly.ComplexMember plain = new Pocos.makereadonly.ComplexMember(); + await this.ReadAsync(); + plain.someMember = someMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.makereadonly.ComplexMember plain) + { + plain.someMember = someMember.LastValue; + plain.someOtherMember = someOtherMember.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.makereadonly.ComplexMember plain) + { + someMember.Cyclic = plain.someMember; + someOtherMember.Cyclic = plain.someOtherMember; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.makereadonly.ComplexMember plain = new Pocos.makereadonly.ComplexMember(); + plain.someMember = someMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.makereadonly.ComplexMember plain) + { + plain.someMember = someMember.Shadow; + plain.someOtherMember = someOtherMember.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.makereadonly.ComplexMember plain) + { + someMember.Shadow = plain.someMember; + someOtherMember.Shadow = plain.someOtherMember; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs index b06d39d0..036efae5 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs @@ -7,10 +7,6 @@ namespace RefToSimple { public partial class ref_to_simple : Ix.Connector.ITwinObject { - public OnlinerInt a { get; } - - public RefToSimple.referenced b { get; } - public ref_to_simple(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) { Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); @@ -22,6 +18,39 @@ public ref_to_simple(Ix.Connector.ITwinObject parent, string readableTail, strin parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.RefToSimple.ref_to_simple plain = new Pocos.RefToSimple.ref_to_simple(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.RefToSimple.ref_to_simple plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.RefToSimple.ref_to_simple plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.RefToSimple.ref_to_simple plain = new Pocos.RefToSimple.ref_to_simple(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.RefToSimple.ref_to_simple plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.RefToSimple.ref_to_simple plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -99,6 +128,45 @@ public referenced(Ix.Connector.ITwinObject parent, string readableTail, string s parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.RefToSimple.referenced plain = new Pocos.RefToSimple.referenced(); + await this.ReadAsync(); + plain.b = b.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.RefToSimple.referenced plain) + { + plain.b = b.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.RefToSimple.referenced plain) + { + b.Cyclic = plain.b; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.RefToSimple.referenced plain = new Pocos.RefToSimple.referenced(); + plain.b = b.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.RefToSimple.referenced plain) + { + plain.b = b.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.RefToSimple.referenced plain) + { + b.Shadow = plain.b; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs index d7b7c0b4..c8fd5f0a 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs @@ -16,6 +16,39 @@ public simple_class(Ix.Connector.ITwinObject parent, string readableTail, string parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.simple_class plain = new Pocos.simple_class(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.simple_class plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.simple_class plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.simple_class plain = new Pocos.simple_class(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.simple_class plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.simple_class plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs index 1e117ced..a56949dc 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs @@ -18,6 +18,39 @@ public simple_empty_class_within_namespace(Ix.Connector.ITwinObject parent, stri parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.sampleNamespace.simple_empty_class_within_namespace plain = new Pocos.sampleNamespace.simple_empty_class_within_namespace(); + await this.ReadAsync(); + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.sampleNamespace.simple_empty_class_within_namespace plain) + { + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.sampleNamespace.simple_empty_class_within_namespace plain) + { + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.sampleNamespace.simple_empty_class_within_namespace plain = new Pocos.sampleNamespace.simple_empty_class_within_namespace(); + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.sampleNamespace.simple_empty_class_within_namespace plain) + { + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.sampleNamespace.simple_empty_class_within_namespace plain) + { + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs index f20b7446..16a0ddeb 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs @@ -19,6 +19,26 @@ public Motor(Ix.Connector.ITwinObject parent, string readableTail, string symbol parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.Motor plain = new Pocos.Motor(); + await this.ReadAsync(); + plain.isRunning = isRunning.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Motor plain) + { + plain.isRunning = isRunning.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Motor plain) + { + isRunning.Cyclic = plain.isRunning; + return await this.WriteAsync(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -98,6 +118,29 @@ public Vehicle(Ix.Connector.ITwinObject parent, string readableTail, string symb parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.Vehicle plain = new Pocos.Vehicle(); + await this.ReadAsync(); + plain.m = await m.OnlineToPlainAsync(); + plain.displacement = displacement.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Vehicle plain) + { + plain.m = await m.OnlineToPlainAsync(); + plain.displacement = displacement.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Vehicle plain) + { + await this.m.PlainToOnlineAsync(plain.m); + displacement.Cyclic = plain.displacement; + return await this.WriteAsync(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs index 513f8a18..3ca46a41 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs @@ -29,6 +29,45 @@ public using_type_named_values(Ix.Connector.ITwinObject parent, string readableT parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.NamedValuesNamespace.using_type_named_values plain = new Pocos.NamedValuesNamespace.using_type_named_values(); + await this.ReadAsync(); + plain.LColors = LColors.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.NamedValuesNamespace.using_type_named_values plain) + { + plain.LColors = LColors.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.NamedValuesNamespace.using_type_named_values plain) + { + LColors.Cyclic = plain.LColors; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.NamedValuesNamespace.using_type_named_values plain = new Pocos.NamedValuesNamespace.using_type_named_values(); + plain.LColors = LColors.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.NamedValuesNamespace.using_type_named_values plain) + { + plain.LColors = LColors.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.NamedValuesNamespace.using_type_named_values plain) + { + LColors.Shadow = plain.LColors; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs index c8fa0074..6046e82d 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs @@ -31,6 +31,45 @@ public using_type_named_values(Ix.Connector.ITwinObject parent, string readableT parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.using_type_named_values plain = new Pocos.Simatic.Ax.StateFramework.using_type_named_values(); + await this.ReadAsync(); + plain.LColors = LColors.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Simatic.Ax.StateFramework.using_type_named_values plain) + { + plain.LColors = LColors.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Simatic.Ax.StateFramework.using_type_named_values plain) + { + LColors.Cyclic = plain.LColors; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.using_type_named_values plain = new Pocos.Simatic.Ax.StateFramework.using_type_named_values(); + plain.LColors = LColors.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.Simatic.Ax.StateFramework.using_type_named_values plain) + { + plain.LColors = LColors.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.Simatic.Ax.StateFramework.using_type_named_values plain) + { + LColors.Shadow = plain.LColors; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs index 18e91fdc..1674e5c2 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs @@ -24,8 +24,6 @@ public enum Condition public partial class CompareGuardLint : Ix.Connector.ITwinObject, IGuard { - public OnlinerLInt Value { get; } - public OnlinerLInt CompareToValue { get; } [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(Simatic.Ax.StateFramework.Condition))] @@ -44,6 +42,51 @@ public CompareGuardLint(Ix.Connector.ITwinObject parent, string readableTail, st parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.CompareGuardLint plain = new Pocos.Simatic.Ax.StateFramework.CompareGuardLint(); + await this.ReadAsync(); + plain.CompareToValue = CompareToValue.LastValue; + plain.Condition = (Simatic.Ax.StateFramework.Condition)Condition.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.Simatic.Ax.StateFramework.CompareGuardLint plain) + { + plain.CompareToValue = CompareToValue.LastValue; + plain.Condition = (Simatic.Ax.StateFramework.Condition)Condition.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.Simatic.Ax.StateFramework.CompareGuardLint plain) + { + CompareToValue.Cyclic = plain.CompareToValue; + Condition.Cyclic = (short)plain.Condition; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.Simatic.Ax.StateFramework.CompareGuardLint plain = new Pocos.Simatic.Ax.StateFramework.CompareGuardLint(); + plain.CompareToValue = CompareToValue.Shadow; + plain.Condition = (Simatic.Ax.StateFramework.Condition)Condition.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.Simatic.Ax.StateFramework.CompareGuardLint plain) + { + plain.CompareToValue = CompareToValue.Shadow; + plain.Condition = (Simatic.Ax.StateFramework.Condition)Condition.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.Simatic.Ax.StateFramework.CompareGuardLint plain) + { + CompareToValue.Shadow = plain.CompareToValue; + Condition.Shadow = (short)plain.Condition; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs index 3458c55b..8a2dee6f 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs @@ -22,6 +22,26 @@ public Motor(Ix.Connector.ITwinObject parent, string readableTail, string symbol parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.TypeWithNameAttributes.Motor plain = new Pocos.TypeWithNameAttributes.Motor(); + await this.ReadAsync(); + plain.isRunning = isRunning.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.TypeWithNameAttributes.Motor plain) + { + plain.isRunning = isRunning.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.TypeWithNameAttributes.Motor plain) + { + isRunning.Cyclic = plain.isRunning; + return await this.WriteAsync(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -101,6 +121,29 @@ public Vehicle(Ix.Connector.ITwinObject parent, string readableTail, string symb parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.TypeWithNameAttributes.Vehicle plain = new Pocos.TypeWithNameAttributes.Vehicle(); + await this.ReadAsync(); + plain.m = await m.OnlineToPlainAsync(); + plain.displacement = displacement.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.TypeWithNameAttributes.Vehicle plain) + { + plain.m = await m.OnlineToPlainAsync(); + plain.displacement = displacement.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.TypeWithNameAttributes.Vehicle plain) + { + await this.m.PlainToOnlineAsync(plain.m); + displacement.Cyclic = plain.displacement; + return await this.WriteAsync(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { @@ -180,6 +223,45 @@ public NoAccessModifierClass(Ix.Connector.ITwinObject parent, string readableTai parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.TypeWithNameAttributes.NoAccessModifierClass plain = new Pocos.TypeWithNameAttributes.NoAccessModifierClass(); + await this.ReadAsync(); + plain.SomeClassVariable = SomeClassVariable.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.TypeWithNameAttributes.NoAccessModifierClass plain) + { + plain.SomeClassVariable = SomeClassVariable.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.TypeWithNameAttributes.NoAccessModifierClass plain) + { + SomeClassVariable.Cyclic = plain.SomeClassVariable; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.TypeWithNameAttributes.NoAccessModifierClass plain = new Pocos.TypeWithNameAttributes.NoAccessModifierClass(); + plain.SomeClassVariable = SomeClassVariable.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.TypeWithNameAttributes.NoAccessModifierClass plain) + { + plain.SomeClassVariable = SomeClassVariable.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.TypeWithNameAttributes.NoAccessModifierClass plain) + { + SomeClassVariable.Shadow = plain.SomeClassVariable; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs index 30df7a3b..aba2f4df 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs @@ -25,6 +25,45 @@ public SomeAddedProperties(Ix.Connector.ITwinObject parent, string readableTail, parent.AddKid(this); } + public async Task OnlineToPlainAsync() + { + Pocos.TypesWithPropertyAttributes.SomeAddedProperties plain = new Pocos.TypesWithPropertyAttributes.SomeAddedProperties(); + await this.ReadAsync(); + plain.Counter = Counter.LastValue; + return plain; + } + + protected async Task OnlineToPlainAsync(Pocos.TypesWithPropertyAttributes.SomeAddedProperties plain) + { + plain.Counter = Counter.LastValue; + return plain; + } + + public async Task> PlainToOnlineAsync(Pocos.TypesWithPropertyAttributes.SomeAddedProperties plain) + { + Counter.Cyclic = plain.Counter; + return await this.WriteAsync(); + } + + public async Task ShadowToPlainAsync() + { + Pocos.TypesWithPropertyAttributes.SomeAddedProperties plain = new Pocos.TypesWithPropertyAttributes.SomeAddedProperties(); + plain.Counter = Counter.Shadow; + return plain; + } + + protected async Task ShadowToPlainAsync(Pocos.TypesWithPropertyAttributes.SomeAddedProperties plain) + { + plain.Counter = Counter.Shadow; + return plain; + } + + public async Task> PlainToShadowAsync(Pocos.TypesWithPropertyAttributes.SomeAddedProperties plain) + { + Counter.Shadow = plain.Counter; + return this.RetrievePrimitives(); + } + private IList Children { get; } = new List(); public IEnumerable GetChildren() { diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/array_declaration.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/array_declaration.g.cs index e18c6e62..7660a2b5 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/array_declaration.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/array_declaration.g.cs @@ -6,9 +6,8 @@ namespace ArrayDeclarationSimpleNamespace { public partial class array_declaration_class { - public Int16[] primitive { get; set; } - - public ArrayDeclarationSimpleNamespace.some_complex_type[] complex { get; set; } + public Int16[] primitive { get; set; } = new Int16[100]; + public ArrayDeclarationSimpleNamespace.some_complex_type[] complex { get; set; } = new ArrayDeclarationSimpleNamespace.some_complex_type[100]; } public partial class some_complex_type diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_all_primitives.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_all_primitives.g.cs index 1412b7e4..95c2ad71 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_all_primitives.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_all_primitives.g.cs @@ -37,7 +37,7 @@ public partial class class_all_primitives public TimeSpan myTIME { get; set; } = default(TimeSpan); public TimeSpan myLTIME { get; set; } = default(TimeSpan); public DateOnly myDATE { get; set; } = default(DateOnly); - public TimeOnly myTIME_OF_DAY { get; set; } = default(TimeOnly); + public TimeSpan myTIME_OF_DAY { get; set; } = default(TimeSpan); public DateTime myDATE_AND_TIME { get; set; } = default(DateTime); public string mySTRING { get; set; } = string.Empty; public string myWSTRING { get; set; } = string.Empty; diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_with_primitive_members.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_with_primitive_members.g.cs index fb94143c..302dc053 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_with_primitive_members.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/class_with_primitive_members.g.cs @@ -40,8 +40,8 @@ public partial class ClassWithPrimitiveTypes public TimeSpan myLTIME { get; set; } = default(TimeSpan); public DateOnly myDATE { get; set; } = default(DateOnly); public DateOnly myLDATE { get; set; } = default(DateOnly); - public TimeOnly myTIME_OF_DAY { get; set; } = default(TimeOnly); - public TimeOnly myLTIME_OF_DAY { get; set; } = default(TimeOnly); + public TimeSpan myTIME_OF_DAY { get; set; } = default(TimeSpan); + public TimeSpan myLTIME_OF_DAY { get; set; } = default(TimeSpan); public DateTime myDATE_AND_TIME { get; set; } = default(DateTime); public DateTime myLDATE_AND_TIME { get; set; } = default(DateTime); public Char myCHAR { get; set; } diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/configuration.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/configuration.g.cs index 1f8c7bdb..bbaef53f 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/configuration.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/configuration.g.cs @@ -39,8 +39,8 @@ public partial class units public TimeSpan myLTIME { get; set; } = default(TimeSpan); public DateOnly myDATE { get; set; } = default(DateOnly); public DateOnly myLDATE { get; set; } = default(DateOnly); - public TimeOnly myTIME_OF_DAY { get; set; } = default(TimeOnly); - public TimeOnly myLTIME_OF_DAY { get; set; } = default(TimeOnly); + public TimeSpan myTIME_OF_DAY { get; set; } = default(TimeSpan); + public TimeSpan myLTIME_OF_DAY { get; set; } = default(TimeSpan); public DateTime myDATE_AND_TIME { get; set; } = default(DateTime); public DateTime myLDATE_AND_TIME { get; set; } = default(DateTime); public Char myCHAR { get; set; } @@ -91,8 +91,8 @@ public partial class ComplexForConfig public TimeSpan myLTIME { get; set; } = default(TimeSpan); public DateOnly myDATE { get; set; } = default(DateOnly); public DateOnly myLDATE { get; set; } = default(DateOnly); - public TimeOnly myTIME_OF_DAY { get; set; } = default(TimeOnly); - public TimeOnly myLTIME_OF_DAY { get; set; } = default(TimeOnly); + public TimeSpan myTIME_OF_DAY { get; set; } = default(TimeSpan); + public TimeSpan myLTIME_OF_DAY { get; set; } = default(TimeSpan); public DateTime myDATE_AND_TIME { get; set; } = default(DateTime); public DateTime myLDATE_AND_TIME { get; set; } = default(DateTime); public Char myCHAR { get; set; } diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/ref_to_simple.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/ref_to_simple.g.cs index 507470a3..58bb79eb 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/ref_to_simple.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/ref_to_simple.g.cs @@ -6,8 +6,6 @@ namespace RefToSimple { public partial class ref_to_simple { - public Int16 a { get; set; } = new Int16(); - public RefToSimple.referenced b { get; set; } = new RefToSimple.referenced(); } public partial class referenced diff --git a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/type_with_enum.g.cs b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/type_with_enum.g.cs index bc1db5f2..2e9d12df 100644 --- a/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/type_with_enum.g.cs +++ b/src/ix.compiler/tests/Ix.Compiler.CsTests/samples/units/expected/.g/POCO/type_with_enum.g.cs @@ -13,7 +13,6 @@ namespace Simatic.Ax.StateFramework { public partial class CompareGuardLint : IGuard { - public Int64 Value { get; set; } = new Int64(); public Int64 CompareToValue { get; set; } public units.Simatic.Ax.StateFramework.Condition Condition { get; set; } diff --git a/src/ix.compiler/tests/integration/actual/lib1/ix/.g/Onliners/library.g.cs b/src/ix.compiler/tests/integration/actual/lib1/ix/.g/Onliners/library.g.cs deleted file mode 100644 index b8c8928a..00000000 --- a/src/ix.compiler/tests/integration/actual/lib1/ix/.g/Onliners/library.g.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace lib1 -{ - public partial class MyClass : Ix.Connector.ITwinObject - { - public OnlinerString MyString { get; } - - public OnlinerInt MyInt { get; } - - public MyClass(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - MyString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "MyString", "MyString"); - MyInt = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "MyInt", "MyInt"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } -} \ No newline at end of file diff --git a/src/ix.compiler/tests/integration/actual/lib2/ix/.g/Onliners/library.g.cs b/src/ix.compiler/tests/integration/actual/lib2/ix/.g/Onliners/library.g.cs deleted file mode 100644 index 45872579..00000000 --- a/src/ix.compiler/tests/integration/actual/lib2/ix/.g/Onliners/library.g.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace lib2 -{ - public partial class MyClass : Ix.Connector.ITwinObject - { - public OnlinerString MyString { get; } - - public OnlinerInt MyInt { get; } - - public MyClass(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - MyString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "MyString", "MyString"); - MyInt = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "MyInt", "MyInt"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } -} \ No newline at end of file diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDate.cs b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDate.cs index 66c39156..96d882df 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDate.cs +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDate.cs @@ -39,21 +39,31 @@ public WebApiDate() ApiPlcWriteRequest IWebApiPrimitive.PlcWriteRequestData => WebApiConnector.CreateWriteRequest(Symbol, GetFromDate(CyclicToWrite), _webApiConnector.DBName); + /// public void Read(string value) { - DateOnly dt; - if (DateOnly.TryParse(value, out dt)) - UpdateRead(dt); + UpdateRead(GetFromBinary(value)); } /// public override async Task GetAsync() { - var dt = await _webApiConnector.ReadAsync(this) / 100; - return DateOnly.FromDateTime(DateTime.FromBinary(dt).AddYears(1969)); + var dt = await _webApiConnector.ReadAsync(this); + return GetFromBinary(dt); + } + + private DateOnly GetFromBinary(string value) + { + var val = long.Parse(value); + return GetFromBinary(val); } + private DateOnly GetFromBinary(long value) + { + var val = value / 100; + return DateOnly.FromDateTime(DateTime.FromBinary(val).AddYears(1969)); + } private string GetFromDate(DateOnly date) { diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDateTime.cs b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDateTime.cs index ddf29138..a031ea9a 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDateTime.cs +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiDateTime.cs @@ -42,18 +42,26 @@ public WebApiDateTime() /// public void Read(string value) { - DateTime dt; - if (DateTime.TryParse(value, out dt)) - UpdateRead(dt); + UpdateRead(GetFromBinary(value)); } /// public override async Task GetAsync() { - var dt = await _webApiConnector.ReadAsync(this) / 100; - return DateTime.FromBinary(dt).AddYears(1969); + var dt = await _webApiConnector.ReadAsync(this); + return GetFromBinary(dt); + } + + private DateTime GetFromBinary(string val) + { + return GetFromBinary(long.Parse(val)); } + private DateTime GetFromBinary(long val) + { + var dt = val / 100; + return DateTime.FromBinary(dt).AddYears(1969); + } private string GetFromDate(DateTime dateTime) { diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDate.cs b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDate.cs index a7c2d79f..13c0a725 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDate.cs +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDate.cs @@ -6,6 +6,7 @@ // Third party licenses: https://github.com/ix-ax/ix/blob/master/notices.md using Ix.Connector.ValueTypes; +using Newtonsoft.Json.Linq; namespace Ix.Connector.S71500.WebApi; @@ -39,21 +40,31 @@ public WebApiLDate() ApiPlcWriteRequest IWebApiPrimitive.PlcWriteRequestData => WebApiConnector.CreateWriteRequest(Symbol, GetFromDate(CyclicToWrite), _webApiConnector.DBName); - public void Read(string result) + public void Read(string value) { - DateOnly dt; - if (DateOnly.TryParse(result, out dt)) - UpdateRead(dt); + UpdateRead(GetFromBinary(value)); } /// public override async Task GetAsync() { - var dt = await _webApiConnector.ReadAsync(this) / 100; - return DateOnly.FromDateTime(DateTime.FromBinary(dt).AddYears(1969)); + var dt = await _webApiConnector.ReadAsync(this); + return GetFromBinary(dt); } + private DateOnly GetFromBinary(string value) + { + var val = long.Parse(value); + return GetFromBinary(val); + } + + private DateOnly GetFromBinary(long value) + { + var val = value / 100; + return DateOnly.FromDateTime(DateTime.FromBinary(val).AddYears(1969)); + } + private string GetFromDate(DateOnly date) { if (date <= MinValue) diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDateTime.cs b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDateTime.cs index 39c34e45..7cc25734 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDateTime.cs +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLDateTime.cs @@ -42,15 +42,24 @@ public WebApiLDateTime() /// public void Read(string value) { - DateTime dt; - if (DateTime.TryParse(value, out dt)) - UpdateRead(dt); + UpdateRead(GetFromBinary(value)); } /// public override async Task GetAsync() { - var dt = await _webApiConnector.ReadAsync(this) / 100; + var dt = await _webApiConnector.ReadAsync(this); + return GetFromBinary(dt); + } + + private DateTime GetFromBinary(string val) + { + return GetFromBinary(long.Parse(val)); + } + + private DateTime GetFromBinary(long val) + { + var dt = val / 100; return DateTime.FromBinary(dt).AddYears(1969); } diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLTime.cs b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLTime.cs index 6d32da49..7c0acf17 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLTime.cs +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiLTime.cs @@ -44,7 +44,7 @@ public WebApiLTime() /// public void Read(string value) { - UpdateRead(TimeSpan.FromMilliseconds(long.Parse(value) / 1000000)); + UpdateRead(TimeSpan.FromTicks(long.Parse(value))); } /// diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiWString.cs b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiWString.cs index a03924e2..7292af94 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiWString.cs +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/BuiltInWrappers/WebApiWString.cs @@ -37,7 +37,7 @@ public WebApiWString() /// ApiPlcWriteRequest IWebApiPrimitive.PlcWriteRequestData => - WebApiConnector.CreateWriteRequest(Symbol, CyclicToWrite, _webApiConnector.DBName); + WebApiConnector.CreateWriteRequest(Symbol, CyclicToWrite ?? string.Empty, _webApiConnector.DBName); /// public void Read(string value) diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/Ix.Connector.S71500.WebAPI.csproj b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/Ix.Connector.S71500.WebAPI.csproj index 9abbe5a1..db036e24 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/Ix.Connector.S71500.WebAPI.csproj +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/Ix.Connector.S71500.WebAPI.csproj @@ -55,7 +55,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/WebApiConnector.cs b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/WebApiConnector.cs index f8d8a369..90b0ada6 100644 --- a/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/WebApiConnector.cs +++ b/src/ix.connectors/src/Ix.Connector.S71500.WebAPI/WebApiConnector.cs @@ -11,6 +11,7 @@ using System.Security.Cryptography.X509Certificates; using System.Text; using Newtonsoft.Json; +using Siemens.Simatic.S7.Webserver.API.Exceptions; using Siemens.Simatic.S7.Webserver.API.Models.Responses; using Siemens.Simatic.S7.Webserver.API.Services; using Siemens.Simatic.S7.Webserver.API.Services.IdGenerator; @@ -119,13 +120,26 @@ public override Connector BuildAndStart() } internal void HandleCommFailure(Exception exception, string description, IEnumerable primitives, - ApiBulkResponse response) + ApiBulkResponse response, IEnumerable originalRequest) { - foreach (var primitive in primitives) - primitive.AccessStatus.Update(RwCycleCount, $"{description}: '{exception.Message}'"); + string firstFailedItemParams = string.Empty; foreach (var errorResponse in response.ErrorResponses) - Logger.Error($"{errorResponse.Error.Message} [{errorResponse.Error.Code}]"); + { + var failedItem = originalRequest.FirstOrDefault(p => p.Id ==errorResponse.Id); + var failedItemParams = string.Join(";", failedItem.Params.Select(p => $"{p.Key} : {p.Value}")); + if(string.IsNullOrEmpty(firstFailedItemParams)) + { + firstFailedItemParams = failedItemParams; + } + + Logger.Error($"{failedItemParams} : {errorResponse.Error.Message} [{errorResponse.Error.Code}]"); + } + + foreach (var primitive in primitives) + { + primitive?.AccessStatus.Update(RwCycleCount, $"{description}: '{exception.Message}' [{firstFailedItemParams}] "); + } switch (ExceptionBehaviour) { @@ -163,13 +177,14 @@ public override async Task ReadBatchAsync(IEnumerable? primitive if (primitives == null) return; var responseData = new ApiBulkResponse(); + var twinPrimitives = primitives as ITwinPrimitive[] ?? primitives.ToArray(); + if (!twinPrimitives.Any()) return; + var webApiPrimitives = twinPrimitives.Cast().ToArray(); + var request = webApiPrimitives.Select(p => p.PlcReadRequestData).ToList(); + try { - var twinPrimitives = primitives as ITwinPrimitive[] ?? primitives.ToArray(); - if (!twinPrimitives.Any()) return; - var webApiPrimitives = twinPrimitives.Cast().ToArray(); - responseData = await RequestHandler.ApiBulkAsync(webApiPrimitives.Select(p => p.PlcReadRequestData)); - + responseData = await RequestHandler.ApiBulkAsync(request); var position = 0; webApiPrimitives.ToList() .ForEach(p => @@ -178,9 +193,13 @@ public override async Task ReadBatchAsync(IEnumerable? primitive p.AccessStatus.Update(RwCycleCount); }); } + catch (ApiBulkRequestException apiException) + { + HandleCommFailure(apiException, "Batch read failed.", primitives, apiException.BulkResponse, request); + } catch (Exception e) { - HandleCommFailure(e, "Batch read failed.", primitives, responseData); + HandleCommFailure(e, "Batch read failed.", primitives, responseData, request); } } @@ -189,17 +208,23 @@ public override async Task WriteBatchAsync(IEnumerable? primitiv { if (primitives == null) return; var responseData = new ApiBulkResponse(); + var twinPrimitives = primitives as ITwinPrimitive[] ?? primitives.ToArray(); + if (!twinPrimitives.Any()) return; + var webApiPrimitives = twinPrimitives.Cast().ToArray(); + var request = webApiPrimitives.Select(p => p.PlcWriteRequestData).ToList(); try { - var twinPrimitives = primitives as ITwinPrimitive[] ?? primitives.ToArray(); - if (!twinPrimitives.Any()) return; - var webApiPrimitives = twinPrimitives.Cast().ToArray(); - responseData = await RequestHandler.ApiBulkAsync(webApiPrimitives.Select(p => p.PlcWriteRequestData)); + + responseData = await RequestHandler.ApiBulkAsync(request); + } + catch (ApiBulkRequestException apiException) + { + HandleCommFailure(apiException, "Batch write failed.", primitives, apiException.BulkResponse, request); } catch (Exception e) { - HandleCommFailure(e, "Batch write failed.", primitives, responseData); + HandleCommFailure(e, "Batch write failed.", primitives, responseData, request); } } @@ -209,6 +234,13 @@ public override async void ReloadConnector() await Task.Run(() => true); } + internal void ClearPeriodicReadSet() + { + base.ClearPeriodicReadSet(); + var hitCount = RwCycleCount; + Task.Delay(300).Wait(); //TODO: we have to address this differently... preventing concurrency... + } + internal async Task<(T result, ApiResultResponse response)> ReadAsync(string symbol) { diff --git a/src/ix.connectors/src/Ix.Connector/BuilderHelpers/Arrays.cs b/src/ix.connectors/src/Ix.Connector/BuilderHelpers/Arrays.cs index 6941bbdd..3df59497 100644 --- a/src/ix.connectors/src/Ix.Connector/BuilderHelpers/Arrays.cs +++ b/src/ix.connectors/src/Ix.Connector/BuilderHelpers/Arrays.cs @@ -21,11 +21,6 @@ namespace Ix.Connector.BuilderHelpers; /// public static class Arrays { - private static T CreateJaggedArray(params int[] lengths) - { - return (T)InitializeJaggedArray(typeof(T).GetElementType(), 0, lengths); - } - private static object InitializeJaggedArray(Type type, int index, int[] lengths) { var array = Array.CreateInstance(type, lengths[index]); @@ -46,104 +41,25 @@ private static object InitializeJaggedArray(Type type, int index, int[] lengths) /// Parent object. /// Human readable tail. /// Symbol tail. - /// Intializes + /// Intializes // [Obsolete("Internal use only")] [EditorBrowsable(EditorBrowsableState.Never)] public static void InstantiateArray(Array array, ITwinObject parent, string readableTail, string symbolTail, - Func intializer) + Func initializer) { foreach (var element in GetIndices(array)) { var indiceAsString = GetIndicesAsString(element); - var a = intializer(parent, + var a = initializer(parent, $"{readableTail}{indiceAsString}", $"{symbolTail}{indiceAsString}"); array.SetValue(a, element); } } - /// - /// Instantiates an array. - /// - /// Array - /// Intializer - // [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void InstantiateArray(Array array, - Func intializer) - { - foreach (var element in GetIndices(array)) array.SetValue(intializer(), element); - } - - /// - /// Copies shadows of an array of primitive type into onliners. [Internal use only] - /// - /// Array type - /// Array to have the values copied. - //[Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyShadowToCyclicPrimitive(Array arr) where T : OnlinerBase - { - foreach (T element in arr) element.SetCyclicValue(element.GetShadowValue()); - } - - /// - /// Copies shadows of an array of a complex type into onliners. [Internal use only] - /// - /// Array to have the values copied. - //[Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyShadowToCyclicComplex(Array arr) - { - var methodInfo = arr.GetMethodForNonPublicTypes("LazyShadowToOnline"); - - if (methodInfo == null) - foreach (var element in arr) - ((dynamic)element).LazyShadowToOnline(); - else - foreach (var element in arr) - methodInfo.Invoke(element, new object[] { }); - } - - - /// - /// Copies onliners of an array of a primitive type into shadows. [Internal use only] - /// - /// Array type - /// Array to have the values copied. - [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyCyclicToShadowPrimitive(Array arr) where T : OnlinerBase - { - foreach (var index in GetIndices(arr)) - { - var element = arr.GetValue(index) as T; - element.SetShadowValue(element.GetCyclicValue()); - } - } - - /// - /// Copies onliners of an array of a complex type into shadows. [Internal use only] - /// - /// Array type - /// Array to have the values copied. - [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyCyclicToShadowComplex(Array arr) where T : ITwinObject - { - var methodInfo = arr.GetMethodForNonPublicTypes("LazyOnlineToShadow"); - - if (methodInfo == null) - foreach (var element in arr) - ((dynamic)element).LazyOnlineToShadow(); - else - foreach (var element in arr) - methodInfo.Invoke(element, new object[] { }); - } - /// /// Gets index of an array as string.[Internal use only] /// @@ -166,33 +82,6 @@ public static string GetIndicesAsString(int[] index) return ind; } - /// - /// Get indices of an array as an array of string.[Internal use only] - /// - /// Array index. - /// Array of string representation of index. - //[Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static string[] GetIndicesAsString(Array array) - { - var indices = new List(); - foreach (var index in GetIndices(array)) - { - var ind = string.Empty; - - foreach (var a in index) - { - var b = a == -1 ? 0 : a; - ind = string.IsNullOrEmpty(ind) ? $"[{b}" : $"{ind},{b}"; - } - - ind = $"{ind}]"; - - indices.Add(ind); - } - - return indices.ToArray(); - } /// /// Creates list of indicies of give array. @@ -236,8 +125,8 @@ public static int[][] GetIndices(Array array) } for (var ari = 0; ari < arrays.Length; ari++) - for (var rnk = 0; rnk < arrays[ari].Length; rnk++) - arrays[ari][rnk] = arrays[ari][rnk] == -1 ? 0 : arrays[ari][rnk]; + for (var rnk = 0; rnk < arrays[ari].Length; rnk++) + arrays[ari][rnk] = arrays[ari][rnk] == -1 ? 0 : arrays[ari][rnk]; return arrays; } @@ -261,181 +150,4 @@ private static int[][] EmptyDimensions(Array array) var arrays = emptyDimensions.Select(a => a.ToArray()).ToArray(); return arrays; } - - /// - /// Copies plainers of an array into onliners. [Internal use only] - /// - /// Source array. - /// Destination array. - // [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyPlainToOnline(Array plainSource, Array onlineTarget) - { - var sourceEnumerable = plainSource.Cast

(); - var targetEnumerable = onlineTarget.Cast(); - - var enumerable = targetEnumerable as O[] ?? targetEnumerable.ToArray(); - var ps = sourceEnumerable as P[] ?? sourceEnumerable.ToArray(); - switch (enumerable.ElementAtOrDefault(0)) - { - case ITwinPrimitive t: - for (var i = 0; i < ps.Length; i++) - ((dynamic)enumerable.ElementAt(i)).Cyclic = ps.ElementAt(i); - break; - case ITwinObject t: - - var methodInfo = plainSource.GetMethodForNonPublicTypes("CopyPlainToCyclic"); - - for (var i = 0; i < ps.Length; i++) - if (methodInfo == null) - ((dynamic)ps.ElementAt(i)).CopyPlainToCyclic(enumerable.ElementAt(i)); - else - methodInfo.Invoke(ps.ElementAt(i), - new object[] { enumerable.ElementAt(i) }); - break; - } - } - - private static MethodInfo GetMethodForNonPublicTypes(this Array array, string methodName) - { - var firstElement = array.Cast().FirstOrDefault(); - - if (firstElement != null && !firstElement.GetType().IsPublic) - return firstElement.GetType().GetMethods().FirstOrDefault(p => p.Name == methodName); - - return null; - } - - /// - /// Copies plainers of an array into shadows. [Internal use only] - /// - /// Source array. - /// Destination array. - // [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyPlainToShadow(Array plainSource, Array onlineTarget) - { - var sourceEnumerable = plainSource.Cast

(); - var targetEnumerable = onlineTarget.Cast(); - - var enumerable = targetEnumerable as O[] ?? targetEnumerable.ToArray(); - var ps = sourceEnumerable as P[] ?? sourceEnumerable.ToArray(); - switch (enumerable.ElementAtOrDefault(0)) - { - case ITwinPrimitive t: - for (var i = 0; i < ps.Length; i++) - ((dynamic)enumerable.ElementAt(i)).Shadow = ps.ElementAt(i); - break; - case ITwinObject t: - - var methodInfo = plainSource.GetMethodForNonPublicTypes("CopyPlainToShadow"); - - for (var i = 0; i < ps.Length; i++) - if (methodInfo == null) - ((dynamic)ps.ElementAt(i)).CopyPlainToShadow(enumerable.ElementAt(i)); - else - methodInfo.Invoke(ps.ElementAt(i), - new object[] { enumerable.ElementAt(i) }); - break; - } - } - - ///

- /// Copies onliners of an array into plainers. [Internal use only] - /// - /// Source array. - /// Destination array. - // [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyOnlineToPlain(Array onlineSource, Array plainTarget) - { - var sourceEnumerable = onlineSource.Cast(); - var targetEnumerable = plainTarget.Cast

(); - - var enumerable = sourceEnumerable as O[] ?? sourceEnumerable.ToArray(); - switch (enumerable.ElementAtOrDefault(0)) - { - case ITwinPrimitive t: - - foreach (var index in GetIndices(onlineSource)) - plainTarget.SetValue(((dynamic)onlineSource.GetValue(index)).LastValue, index); - - break; - case ITwinObject t: - - var methodInfo = plainTarget.GetMethodForNonPublicTypes("CopyCyclicToPlain"); - - for (var i = 0; i < enumerable.Count(); i++) - { - var targetEnumerable1 = targetEnumerable as P[] ?? targetEnumerable.ToArray(); - var ps = targetEnumerable as P[] ?? targetEnumerable1.ToArray(); - if (methodInfo == null) - ((dynamic)ps.ElementAt(i)).CopyCyclicToPlain(enumerable.ElementAt(i)); - else - methodInfo.Invoke(ps.ElementAt(i), - new object[] { enumerable.ElementAt(i) }); - } - - break; - } - } - - ///

- /// Copies shadows of an array into plainers. [Internal use only] - /// - /// Source array. - /// Destination array. - // [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CopyShadowToPlain(Array onlineSource, Array plainTarget) - { - var sourceEnumerable = onlineSource.Cast(); - var targetEnumerable = plainTarget.Cast

().ToArray(); - - var enumerable = sourceEnumerable as O[] ?? sourceEnumerable.ToArray(); - switch (enumerable.ElementAtOrDefault(0)) - { - case ITwinPrimitive t: - - foreach (var indice in GetIndices(onlineSource)) - plainTarget.SetValue(((dynamic)onlineSource.GetValue(indice)).Shadow, indice); - break; - case ITwinObject t: - - var methodInfo = plainTarget.GetMethodForNonPublicTypes("CopyShadowToPlain"); - - for (var i = 0; i < enumerable.Count(); i++) - if (methodInfo == null) - ((dynamic)targetEnumerable.ElementAt(i)).CopyShadowToPlain(enumerable.ElementAt(i)); - else - methodInfo.Invoke(targetEnumerable.ElementAt(i), - new object[] { enumerable.ElementAt(i) }); - break; - } - } - - ///

- /// Creates an array of plainer type. [Internal use only] - /// - /// - /// - // [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void CreatePlainerType

(Array array) where P : new() - { - foreach (var indice in GetIndices(array)) array.SetValue(new P(), indice); - } - - - ///

- /// Instantites an array of plainer type. [Internal use only] - /// - /// - /// - // [Obsolete("Internal use only")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static void InstantiatePlainerType

(Array array) where P : new() - { - foreach (var indice in GetIndices(array)) array.SetValue(new P(), indice); - } } \ No newline at end of file diff --git a/src/ix.connectors/src/Ix.Connector/Connector/Connector.cs b/src/ix.connectors/src/Ix.Connector/Connector/Connector.cs index 98a82c73..04cfd090 100644 --- a/src/ix.connectors/src/Ix.Connector/Connector/Connector.cs +++ b/src/ix.connectors/src/Ix.Connector/Connector/Connector.cs @@ -372,4 +372,9 @@ private void ClearPeriodicWriteSet() { NextCycleWriteSet.Clear(); } + + protected void ClearPeriodicReadSet() + { + PeriodicReadSet.Clear(); + } } \ No newline at end of file diff --git a/src/ix.connectors/src/Ix.Connector/ITwinPrimitive.cs b/src/ix.connectors/src/Ix.Connector/ITwinPrimitive.cs index d6c72962..32d5cdc9 100644 --- a/src/ix.connectors/src/Ix.Connector/ITwinPrimitive.cs +++ b/src/ix.connectors/src/Ix.Connector/ITwinPrimitive.cs @@ -80,4 +80,7 @@ public interface ITwinPrimitive : ITwinElement /// Subscribes this item for periodic reading. /// void SubscribeForPeriodicReading(); + + void FromOnlineToShadow(); + void FromShadowToOnline(); } \ No newline at end of file diff --git a/src/ix.connectors/src/Ix.Connector/Ix.Connector.csproj b/src/ix.connectors/src/Ix.Connector/Ix.Connector.csproj index a395930c..f76c7945 100644 --- a/src/ix.connectors/src/Ix.Connector/Ix.Connector.csproj +++ b/src/ix.connectors/src/Ix.Connector/Ix.Connector.csproj @@ -51,7 +51,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/ix.connectors/src/Ix.Connector/TwinObjectExtensions.cs b/src/ix.connectors/src/Ix.Connector/TwinObjectExtensions.cs index 48a2bf20..51a2d4b1 100644 --- a/src/ix.connectors/src/Ix.Connector/TwinObjectExtensions.cs +++ b/src/ix.connectors/src/Ix.Connector/TwinObjectExtensions.cs @@ -18,6 +18,15 @@ namespace Ix.Connector; /// public static class TwinObjectExtensions { + + public static readonly string OnlineToPlainMethodName = "OnlineToPlainAsync"; + + public static readonly string PlainToOnlineMethodName = "PlainToOnlineAsync"; + + public static readonly string ShadowToPlainMethodName = "ShadowToPlainAsync"; + + public static readonly string PlainToShadowMethodName = "PlainToShadowAsync"; + ///

/// Makes readonly for this application. /// @@ -231,4 +240,24 @@ public static void UnSubscribeEditValueChange(this ITwinObject obj) var valueTags = obj.RetrievePrimitives(); foreach (var tag in valueTags) tag.EditValueChange = null; } + + /// + /// Copies the data from Online primitive items (PLC) of an to shadow value holders. + /// + /// Twin object to copy. + public static async Task OnlineToShadowAsync(this ITwinObject obj) + { + await obj.ReadAsync(); + obj.RetrievePrimitives().ToList().ForEach(p => p.FromOnlineToShadow()); + } + + /// + /// Copies the data from Shadow value holder to online primitive items (PLC) of an . + /// + /// Twin object to copy. + public static async Task ShadowToOnlineAsync(this ITwinObject obj) + { + obj.RetrievePrimitives().ToList().ForEach(p => p.FromShadowToOnline()); + await obj.WriteAsync(); + } } \ No newline at end of file diff --git a/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase.cs b/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase.cs index 164b074c..f68df468 100644 --- a/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase.cs +++ b/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase.cs @@ -290,4 +290,12 @@ protected void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } + + public abstract void FromOnlineToShadow(); + public abstract void FromShadowToOnline(); + + public void AddToPeriodicQueue() + { + this.Parent?.GetConnector()?.AddToPeriodicReadSet(this); + } } \ No newline at end of file diff --git a/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase`1.cs b/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase`1.cs index 1aed9837..4b277213 100644 --- a/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase`1.cs +++ b/src/ix.connectors/src/Ix.Connector/ValueTypes/Onlines/OnlinerBase`1.cs @@ -396,7 +396,10 @@ public T AttributeMinimum /// Updated value. protected void UpdateRead(T val) { - CwCycle = Parent.GetConnector().RwCycleCount; + if (Parent != null && Parent.GetConnector() != null) + { + CwCycle = Parent.GetConnector().RwCycleCount; + } if (_cyclic == null) { @@ -565,4 +568,14 @@ public Assembly GetDeclaringAssembly() { return Assembly.GetAssembly(Parent.GetType()); } + + public override void FromOnlineToShadow() + { + this.Shadow = this.LastValue; + } + + public override void FromShadowToOnline() + { + this.Cyclic = this.Shadow; + } } \ No newline at end of file diff --git a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Exploratory.cs b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Exploratory.cs index 17262ef6..a9d377dd 100644 --- a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Exploratory.cs +++ b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Exploratory.cs @@ -23,7 +23,7 @@ public class Exploratory { private readonly ITestOutputHelper output; - private static string TargetIp { get; } = Environment.GetEnvironmentVariable("AXTARGET") ?? "10.10.101.1"; + private static string TargetIp { get; } = Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET") ?? "10.10.101.1"; public Exploratory(ITestOutputHelper output) { diff --git a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Ix.Connector.S71500.WebAPITests.csproj b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Ix.Connector.S71500.WebAPITests.csproj index 816fa649..3366ea25 100644 --- a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Ix.Connector.S71500.WebAPITests.csproj +++ b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/Ix.Connector.S71500.WebAPITests.csproj @@ -17,7 +17,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/ConnectorAdapterTests.cs b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/ConnectorAdapterTests.cs index 823d511b..b9605549 100644 --- a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/ConnectorAdapterTests.cs +++ b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/ConnectorAdapterTests.cs @@ -23,7 +23,7 @@ public void should_create_new_instance_of_adapter_with_webapi_factory() [Fact] public void should_create_new_instance_of_adapter_with_webapi_factory_via_extension_method() { - var adapter = ConnectorAdapterBuilder.Build().CreateWebApi(Environment.GetEnvironmentVariable("AXTARGET"), + var adapter = ConnectorAdapterBuilder.Build().CreateWebApi(Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET"), "Everyone", string.Empty, true); @@ -35,7 +35,7 @@ public void should_create_new_instance_of_adapter_with_webapi_factory_via_extens public void should_create_new_instance_of_adapter_with_webapi_factory_via_extension_method_2() { var adapter = ConnectorAdapterBuilder.Build() - .CreateWebApi(Environment.GetEnvironmentVariable("AXTARGET"), + .CreateWebApi(Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET"), "Everyone", string.Empty, ((message, certificate2, arg3, arg4) => true)); diff --git a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorTests.cs b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorTests.cs index 457b4cc2..306ccfe6 100644 --- a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorTests.cs +++ b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorTests.cs @@ -22,7 +22,7 @@ namespace Ix.Connector.S71500.WebAPITests public class WebApiConnectorTests { - private static string TargetIp { get; } = Environment.GetEnvironmentVariable("AXTARGET") ?? "10.10.101.1"; + private static string TargetIp { get; } = Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET") ?? "10.10.101.1"; private readonly ITestOutputHelper output; @@ -1809,7 +1809,7 @@ public async Task should_report_failure_when_unable_to_bulk_read_items() Assert.Equal(true, myBYTE.AccessStatus.Failure); output.WriteLine(myBYTE.AccessStatus.FailureReason); - Assert.Equal("Batch read failed.: 'During Bulk request for 3 there have been 1 Errors:\r\nFor details: Check the Property BulkResponse'", myBYTE.AccessStatus.FailureReason); + Assert.Equal("Batch read failed.: 'During Bulk request for 3 there have been 1 Errors:\r\nFor details: Check the Property BulkResponse' [var : \"TGlobalVariablesDB\".myBYTE_o] ", myBYTE.AccessStatus.FailureReason); } [Fact] @@ -1832,7 +1832,7 @@ public async Task should_report_failure_when_unable_to_bulk_write_items() Assert.Equal(true, myBYTE.AccessStatus.Failure); output.WriteLine(myBYTE.AccessStatus.FailureReason); - Assert.Equal("Batch write failed.: 'During Bulk request for 3 there have been 1 Errors:\r\nFor details: Check the Property BulkResponse'", myBYTE.AccessStatus.FailureReason); + Assert.Equal("Batch write failed.: 'During Bulk request for 3 there have been 1 Errors:\r\nFor details: Check the Property BulkResponse' [var : \"TGlobalVariablesDB\".myBYTE_o;value : 0] ", myBYTE.AccessStatus.FailureReason); } diff --git a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiPrimitiveTests.cs b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiPrimitiveTests.cs index 52ddff4c..0dfb012e 100644 --- a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiPrimitiveTests.cs +++ b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/WebApiConnector/WebApiPrimitiveTests.cs @@ -20,7 +20,7 @@ namespace Ix.Connector.S71500.WebAPITests.Primitives public static class TestConnector { - private static string TargetIp { get; } = Environment.GetEnvironmentVariable("AXTARGET") ?? "10.10.101.1"; + private static string TargetIp { get; } = Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET") ?? "10.10.101.1"; public static WebApiConnector TestApiConnector { get; } = new WebApiConnector(TargetIp, "Everybody", "", true).BuildAndStart() as WebApiConnector; } @@ -61,6 +61,7 @@ public void should_create_new_instance_of_webapiprimitive() [Fact] public virtual async void should_synchron_write_max_value() { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); await webApiPrimitive!.SetAsync(Max); Assert.Equal(Max, await webApiPrimitive.GetAsync()); Assert.True(await maxMatches.GetAsync()); @@ -69,6 +70,7 @@ public virtual async void should_synchron_write_max_value() [Fact] public virtual async void should_synchron_write_mid_value() { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); await webApiPrimitive!.SetAsync(Mid); Assert.Equal(Mid, await webApiPrimitive.GetAsync()); } @@ -76,6 +78,7 @@ public virtual async void should_synchron_write_mid_value() [Fact] public virtual async void should_synchron_write_min_value() { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); await webApiPrimitive!.SetAsync(Min); Assert.Equal(Min, await webApiPrimitive.GetAsync()); Assert.True(await minMatches.GetAsync()); @@ -84,8 +87,10 @@ public virtual async void should_synchron_write_min_value() [Fact] public virtual async void should_write_cyclic_max_value() { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); await webApiPrimitive.SetAsync(Min); webApiPrimitive!.Cyclic = Max; + webApiPrimitive!.AddToPeriodicQueue(); await Task.Delay(WaitTimeForCyclicOperations); Assert.Equal(Max, await webApiPrimitive.GetAsync()); Assert.Equal(Max, webApiPrimitive.Cyclic); @@ -95,23 +100,47 @@ public virtual async void should_write_cyclic_max_value() [Fact] public virtual async void should_write_cyclic_mid_value() { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); await webApiPrimitive.SetAsync(Max); webApiPrimitive!.Cyclic = Mid; + webApiPrimitive!.AddToPeriodicQueue(); await Task.Delay(WaitTimeForCyclicOperations); Assert.Equal(Mid, webApiPrimitive.Cyclic); Assert.Equal(Mid, await webApiPrimitive.GetAsync()); } - [Fact] public virtual async void should_write_cyclic_min_value() { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); await webApiPrimitive.SetAsync(Max); webApiPrimitive!.Cyclic = Min; + webApiPrimitive!.AddToPeriodicQueue(); await Task.Delay(WaitTimeForCyclicOperations); Assert.Equal(Min, await webApiPrimitive.GetAsync()); Assert.Equal(Min, webApiPrimitive.Cyclic); Assert.True(await minMatches.GetAsync()); } + + [Fact] + public virtual async void use_batch_rw_connector() + { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); + webApiPrimitive.Cyclic = Min; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal(Min, webApiPrimitive.LastValue); + + webApiPrimitive.Cyclic = Mid; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal(Mid, webApiPrimitive.LastValue); + + webApiPrimitive.Cyclic = Max; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal(Max, webApiPrimitive.LastValue); + + } } public class WebApiBoolTests : WebApiPrimitiveTests @@ -231,6 +260,28 @@ public override async void should_write_cyclic_min_value() await Task.Delay(WaitTimeForCyclicOperations); Assert.Equal((int)(Min * d), (int)(await webApiPrimitive.GetAsync() * d)); } + + [Fact] + public override async void use_batch_rw_connector() + { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); + System.Threading.Thread.Sleep(250); + webApiPrimitive.Cyclic = Min; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal((int)(Min * d), (int)webApiPrimitive.LastValue); + + webApiPrimitive.Cyclic = Mid; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal((int)(Mid * d), (int)webApiPrimitive.LastValue); + + webApiPrimitive.Cyclic = Max; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal((int)(Max * d), (int)webApiPrimitive.LastValue); + + } } public class WebApiLTimeTests : WebApiPrimitiveTests @@ -302,6 +353,28 @@ public override async void should_write_cyclic_min_value() await Task.Delay(WaitTimeForCyclicOperations); Assert.Equal((int)(Min * d), (int)(await webApiPrimitive.GetAsync() * d)); } + + [Fact] + public override async void use_batch_rw_connector() + { + TestConnector.TestApiConnector.ClearPeriodicReadSet(); + System.Threading.Thread.Sleep(250); + webApiPrimitive.Cyclic = Min; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal((int)(Min * d), (int)webApiPrimitive.LastValue); + + webApiPrimitive.Cyclic = Mid; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal((int)(Mid * d), (int)webApiPrimitive.LastValue); + + webApiPrimitive.Cyclic = Max; + await TestConnector.TestApiConnector.WriteBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + await TestConnector.TestApiConnector.ReadBatchAsync(new ITwinPrimitive[] { webApiPrimitive }); + Assert.Equal((int)(Max * d), (int)webApiPrimitive.LastValue); + + } } public class WebApiSIntTests : WebApiPrimitiveTests diff --git a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_56.cs b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_56.cs index 842a0acd..1a95710c 100644 --- a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_56.cs +++ b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_56.cs @@ -47,7 +47,7 @@ public async Task reproduction() public async Task run_on_twin_connector() { var twin = new ax_test_projectTwinController(ConnectorAdapterBuilder.Build() - .CreateWebApi(Environment.GetEnvironmentVariable("AXTARGET"), "Everybody", "", true)); + .CreateWebApi(Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET"), "Everybody", "", true)); var primitives = twin.GH_PKTu_ix_56_SecondInheritance.RetrievePrimitives().Select(p => p.Symbol).ToList(); diff --git a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_59_68.cs b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_59_68.cs index 69f102f7..ea0b31c1 100644 --- a/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_59_68.cs +++ b/src/ix.connectors/tests/Ix.Connector.Sax.WebAPITests/issues/GH_PTKu_ix_59_68.cs @@ -33,7 +33,7 @@ public GH_PTKu_ix_59(ITestOutputHelper output) protected static WebApiConnector Connector { get; } = TestConnector.TestApiConnector as WebApiConnector; - private string targetIP = System.Environment.GetEnvironmentVariable("AXTARGET"); + private string targetIP = System.Environment.GetEnvironmentVariable("AX_WEBAPI_TARGET"); [Fact] public async Task write_read_char() diff --git a/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/TwinObjectExtensionsTests.cs b/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/TwinObjectExtensionsTests.cs index fde2c17d..d3bf1357 100644 --- a/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/TwinObjectExtensionsTests.cs +++ b/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/TwinObjectExtensionsTests.cs @@ -321,5 +321,55 @@ public static void CannotCallMakeReadOnceWithNullStructure() { Assert.Throws(() => default(ITwinObject).MakeReadOnce()); } + + [Fact] + public static async Task CanCallOnlineToShadowAsync() + { + // Arrange + var connector = new DummyConnector(); + var obj = Substitute.For(); + var onlinerb = new OnlinerByte(); + obj.GetValueTags().Returns(new[] { onlinerb }); + obj.GetConnector().Returns(connector); + onlinerb.Cyclic = 155; + + + // Act + await obj.OnlineToShadowAsync(); + + // Assert + Assert.Equal(155, onlinerb.Shadow); + } + + [Fact] + public static async Task CannotCallOnlineToShadowAsyncWithNullObj() + { + await Assert.ThrowsAsync(() => default(ITwinObject).OnlineToShadowAsync()); + } + + [Fact] + public static async Task CanCallShadowToOnlineAsync() + { + // Arrange + var connector = new DummyConnector(); + var obj = Substitute.For(); + var onlinerb = new OnlinerByte(); + obj.GetValueTags().Returns(new[] { onlinerb }); + obj.GetConnector().Returns(connector); + onlinerb.Shadow = 180; + + + // Act + await obj.ShadowToOnlineAsync(); + + // Assert + Assert.Equal(180, onlinerb.Cyclic); + } + + [Fact] + public static async Task CannotCallShadowToOnlineAsyncWithNullObj() + { + await Assert.ThrowsAsync(() => default(ITwinObject).ShadowToOnlineAsync()); + } } } \ No newline at end of file diff --git a/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/ValueTypes/Onlines/OnlinerBaseTests.cs b/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/ValueTypes/Onlines/OnlinerBaseTests.cs index 441f58f2..44ba78e2 100644 --- a/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/ValueTypes/Onlines/OnlinerBaseTests.cs +++ b/src/ix.connectors/tests/Ix.ConnectorTests/Ix.ConnectorTests/ValueTypes/Onlines/OnlinerBaseTests.cs @@ -46,6 +46,15 @@ public void PublicNotifyPropertyChanged(string propertyName) public string PublicSymbolTail { get => base.SymbolTail; set => base.SymbolTail = value; } public ITwinObject PublicParent { get => base.Parent; set => base.Parent = value; } + public override void FromOnlineToShadow() + { + + } + + public override void FromShadowToOnline() + { + + } } private TestOnlinerBase _testClass; diff --git a/src/ix.connectors/tests/ax-test-project/go.ps1 b/src/ix.connectors/tests/ax-test-project/go.ps1 index 7992151d..6347cbcb 100644 --- a/src/ix.connectors/tests/ax-test-project/go.ps1 +++ b/src/ix.connectors/tests/ax-test-project/go.ps1 @@ -1,4 +1,4 @@ -$targetIP = [Environment]::GetEnvironmentVariable('AXTARGET') +$targetIP = [Environment]::GetEnvironmentVariable('AX_WEBAPI_TARGET') $targetInput = [Environment]::GetEnvironmentVariable('AXTARGETPLATFORMINPUT') $targetIP $targetInput diff --git a/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/full_of_primitives.g.cs b/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/full_of_primitives.g.cs deleted file mode 100644 index 37d83a59..00000000 --- a/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/full_of_primitives.g.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class full_of_primitives : Ix.Connector.ITwinObject -{ - public OnlinerBool myBOOL { get; } - - public OnlinerByte myBYTE { get; } - - public OnlinerWord myWORD { get; } - - public OnlinerDWord myDWORD { get; } - - public OnlinerLWord myLWORD { get; } - - public OnlinerSInt mySINT { get; } - - public OnlinerInt myINT { get; } - - public OnlinerDInt myDINT { get; } - - public OnlinerLInt myLINT { get; } - - public OnlinerUSInt myUSINT { get; } - - public OnlinerUInt myUINT { get; } - - public OnlinerUDInt myUDINT { get; } - - public OnlinerULInt myULINT { get; } - - public OnlinerReal myREAL { get; } - - public OnlinerLReal myLREAL { get; } - - public OnlinerTime myTIME { get; } - - public OnlinerLTime myLTIME { get; } - - public OnlinerDate myDATE { get; } - - public OnlinerDate myLDATE { get; } - - public OnlinerTimeOfDay myTIME_OF_DAY { get; } - - public OnlinerLTimeOfDay myLTIME_OF_DAY { get; } - - public OnlinerDateTime myDATE_AND_TIME { get; } - - public OnlinerLDateTime myLDATE_AND_TIME { get; } - - public OnlinerChar myCHAR { get; } - - public OnlinerWChar myWCHAR { get; } - - public OnlinerString mySTRING { get; } - - public OnlinerWString myWSTRING { get; } - - public full_of_primitives(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - myBOOL = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myBOOL", "myBOOL"); - myBYTE = @Connector.ConnectorAdapter.AdapterFactory.CreateBYTE(this, "myBYTE", "myBYTE"); - myWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateWORD(this, "myWORD", "myWORD"); - myDWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateDWORD(this, "myDWORD", "myDWORD"); - myLWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateLWORD(this, "myLWORD", "myLWORD"); - mySINT = @Connector.ConnectorAdapter.AdapterFactory.CreateSINT(this, "mySINT", "mySINT"); - myINT = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "myINT", "myINT"); - myDINT = @Connector.ConnectorAdapter.AdapterFactory.CreateDINT(this, "myDINT", "myDINT"); - myLINT = @Connector.ConnectorAdapter.AdapterFactory.CreateLINT(this, "myLINT", "myLINT"); - myUSINT = @Connector.ConnectorAdapter.AdapterFactory.CreateUSINT(this, "myUSINT", "myUSINT"); - myUINT = @Connector.ConnectorAdapter.AdapterFactory.CreateUINT(this, "myUINT", "myUINT"); - myUDINT = @Connector.ConnectorAdapter.AdapterFactory.CreateUDINT(this, "myUDINT", "myUDINT"); - myULINT = @Connector.ConnectorAdapter.AdapterFactory.CreateULINT(this, "myULINT", "myULINT"); - myREAL = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "myREAL", "myREAL"); - myLREAL = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "myLREAL", "myLREAL"); - myTIME = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME(this, "myTIME", "myTIME"); - myLTIME = @Connector.ConnectorAdapter.AdapterFactory.CreateLTIME(this, "myLTIME", "myLTIME"); - myDATE = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "myDATE", "myDATE"); - myLDATE = @Connector.ConnectorAdapter.AdapterFactory.CreateLDATE(this, "myLDATE", "myLDATE"); - myTIME_OF_DAY = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME_OF_DAY(this, "myTIME_OF_DAY", "myTIME_OF_DAY"); - myLTIME_OF_DAY = @Connector.ConnectorAdapter.AdapterFactory.CreateLTIME_OF_DAY(this, "myLTIME_OF_DAY", "myLTIME_OF_DAY"); - myDATE_AND_TIME = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "myDATE_AND_TIME", "myDATE_AND_TIME"); - myLDATE_AND_TIME = @Connector.ConnectorAdapter.AdapterFactory.CreateLDATE_AND_TIME(this, "myLDATE_AND_TIME", "myLDATE_AND_TIME"); - myCHAR = @Connector.ConnectorAdapter.AdapterFactory.CreateCHAR(this, "myCHAR", "myCHAR"); - myWCHAR = @Connector.ConnectorAdapter.AdapterFactory.CreateWCHAR(this, "myWCHAR", "myWCHAR"); - mySTRING = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "mySTRING", "mySTRING"); - myWSTRING = @Connector.ConnectorAdapter.AdapterFactory.CreateWSTRING(this, "myWSTRING", "myWSTRING"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/full_of_primitives_match.g.cs b/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/full_of_primitives_match.g.cs deleted file mode 100644 index 4881b234..00000000 --- a/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/full_of_primitives_match.g.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class full_of_primitives_match : Ix.Connector.ITwinObject -{ - public OnlinerBool myBOOL { get; } - - public OnlinerBool myBYTE { get; } - - public OnlinerBool myWORD { get; } - - public OnlinerBool myDWORD { get; } - - public OnlinerBool myLWORD { get; } - - public OnlinerBool mySINT { get; } - - public OnlinerBool myINT { get; } - - public OnlinerBool myDINT { get; } - - public OnlinerBool myLINT { get; } - - public OnlinerBool myUSINT { get; } - - public OnlinerBool myUINT { get; } - - public OnlinerBool myUDINT { get; } - - public OnlinerBool myULINT { get; } - - public OnlinerBool myREAL { get; } - - public OnlinerBool myLREAL { get; } - - public OnlinerBool myTIME { get; } - - public OnlinerBool myLTIME { get; } - - public OnlinerBool myDATE { get; } - - public OnlinerBool myLDATE { get; } - - public OnlinerBool myTIME_OF_DAY { get; } - - public OnlinerBool myLTIME_OF_DAY { get; } - - public OnlinerBool myDATE_AND_TIME { get; } - - public OnlinerBool myLDATE_AND_TIME { get; } - - public OnlinerBool myCHAR { get; } - - public OnlinerBool myWCHAR { get; } - - public OnlinerBool mySTRING { get; } - - public OnlinerBool myWSTRING { get; } - - public full_of_primitives_match(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - myBOOL = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myBOOL", "myBOOL"); - myBYTE = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myBYTE", "myBYTE"); - myWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myWORD", "myWORD"); - myDWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myDWORD", "myDWORD"); - myLWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myLWORD", "myLWORD"); - mySINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "mySINT", "mySINT"); - myINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myINT", "myINT"); - myDINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myDINT", "myDINT"); - myLINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myLINT", "myLINT"); - myUSINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myUSINT", "myUSINT"); - myUINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myUINT", "myUINT"); - myUDINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myUDINT", "myUDINT"); - myULINT = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myULINT", "myULINT"); - myREAL = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myREAL", "myREAL"); - myLREAL = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myLREAL", "myLREAL"); - myTIME = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myTIME", "myTIME"); - myLTIME = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myLTIME", "myLTIME"); - myDATE = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myDATE", "myDATE"); - myLDATE = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myLDATE", "myLDATE"); - myTIME_OF_DAY = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myTIME_OF_DAY", "myTIME_OF_DAY"); - myLTIME_OF_DAY = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myLTIME_OF_DAY", "myLTIME_OF_DAY"); - myDATE_AND_TIME = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myDATE_AND_TIME", "myDATE_AND_TIME"); - myLDATE_AND_TIME = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myLDATE_AND_TIME", "myLDATE_AND_TIME"); - myCHAR = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myCHAR", "myCHAR"); - myWCHAR = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myWCHAR", "myWCHAR"); - mySTRING = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "mySTRING", "mySTRING"); - myWSTRING = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myWSTRING", "myWSTRING"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/issues/GH-PKTu-ix_56.g.cs b/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/issues/GH-PKTu-ix_56.g.cs deleted file mode 100644 index b8344e5c..00000000 --- a/src/ix.connectors/tests/ax-test-project/ix/.g/Onliners/issues/GH-PKTu-ix_56.g.cs +++ /dev/null @@ -1,289 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace GH.PKTu.ix_56 -{ - public partial class ComplexMember : Ix.Connector.ITwinObject - { - public OnlinerInt Counter { get; } - - public ComplexMember(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Counter = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "Counter", "Counter"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } - - public partial class Base : Ix.Connector.ITwinObject - { - public OnlinerString baseMember { get; } - - public GH.PKTu.ix_56.ComplexMember baseComplexMember { get; } - - public GH.PKTu.ix_56.DavidBase BaseDavid { get; } - - public Base(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - baseMember = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "baseMember", "baseMember"); - baseComplexMember = new GH.PKTu.ix_56.ComplexMember(this, "baseComplexMember", "baseComplexMember"); - BaseDavid = new GH.PKTu.ix_56.DavidBase(this, "BaseDavid", "BaseDavid"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } - - public partial class FirstInheritance : Base - { - public OnlinerString FirstInheritanceMember { get; } - - public GH.PKTu.ix_56.ComplexMember FirstInheritanceComplexMember { get; } - - public GH.PKTu.ix_56.DavidBase FirstDavid { get; } - - public FirstInheritance(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - FirstInheritanceMember = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "FirstInheritanceMember", "FirstInheritanceMember"); - FirstInheritanceComplexMember = new GH.PKTu.ix_56.ComplexMember(this, "FirstInheritanceComplexMember", "FirstInheritanceComplexMember"); - FirstDavid = new GH.PKTu.ix_56.DavidBase(this, "FirstDavid", "FirstDavid"); - } - } - - public partial class SecondInheritance : FirstInheritance - { - public OnlinerString SecondInheritanceMember { get; } - - public GH.PKTu.ix_56.ComplexMember SecondInheritanceComplexMember { get; } - - public GH.PKTu.ix_56.DavidBase SecodnDavid { get; } - - public SecondInheritance(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - SecondInheritanceMember = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "SecondInheritanceMember", "SecondInheritanceMember"); - SecondInheritanceComplexMember = new GH.PKTu.ix_56.ComplexMember(this, "SecondInheritanceComplexMember", "SecondInheritanceComplexMember"); - SecodnDavid = new GH.PKTu.ix_56.DavidBase(this, "SecodnDavid", "SecodnDavid"); - } - } - - public partial class PedroBase : Ix.Connector.ITwinObject - { - public OnlinerString p { get; } - - public PedroBase(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - p = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "p", "p"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } - - public partial class DavidBase : PedroBase - { - public OnlinerString d { get; } - - public DavidBase(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - d = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "d", "d"); - } - } -} \ No newline at end of file diff --git a/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/configuration.g.cs b/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/configuration.g.cs index b4bb8833..bdd81877 100644 --- a/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/configuration.g.cs +++ b/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/configuration.g.cs @@ -42,8 +42,8 @@ public partial class ax_test_project public TimeSpan myLTIME { get; set; } = default(TimeSpan); public DateOnly myDATE { get; set; } = default(DateOnly); public DateOnly myLDATE { get; set; } = default(DateOnly); - public TimeOnly myTIME_OF_DAY { get; set; } = default(TimeOnly); - public TimeOnly myLTIME_OF_DAY { get; set; } = default(TimeOnly); + public TimeSpan myTIME_OF_DAY { get; set; } = default(TimeSpan); + public TimeSpan myLTIME_OF_DAY { get; set; } = default(TimeSpan); public DateTime myDATE_AND_TIME { get; set; } = default(DateTime); public DateTime myLDATE_AND_TIME { get; set; } = default(DateTime); public Char myCHAR { get; set; } diff --git a/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/full_of_primitives.g.cs b/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/full_of_primitives.g.cs index 19a420cb..ec8f044d 100644 --- a/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/full_of_primitives.g.cs +++ b/src/ix.connectors/tests/ax-test-project/ix/.g/POCO/full_of_primitives.g.cs @@ -38,8 +38,8 @@ public partial class full_of_primitives public TimeSpan myLTIME { get; set; } = default(TimeSpan); public DateOnly myDATE { get; set; } = default(DateOnly); public DateOnly myLDATE { get; set; } = default(DateOnly); - public TimeOnly myTIME_OF_DAY { get; set; } = default(TimeOnly); - public TimeOnly myLTIME_OF_DAY { get; set; } = default(TimeOnly); + public TimeSpan myTIME_OF_DAY { get; set; } = default(TimeSpan); + public TimeSpan myLTIME_OF_DAY { get; set; } = default(TimeSpan); public DateTime myDATE_AND_TIME { get; set; } = default(DateTime); public DateTime myLDATE_AND_TIME { get; set; } = default(DateTime); public Char myCHAR { get; set; } diff --git a/src/ix.sln b/src/ix.sln index 7ab54faa..0d0196d7 100644 --- a/src/ix.sln +++ b/src/ix.sln @@ -130,6 +130,22 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ix-integration-library", "s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ixblazor.hmi", "ix.templates\working\templates\ixblazor\ixblazor.app\ixblazor.hmi.csproj", "{1235FD19-AAC2-40A0-AE08-6D77A5E40B54}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ixblazor (2)", "ixblazor (2)", "{76982E07-8EDC-4D4C-9977-DF3EB581C4C7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests.integrations", "tests.integrations", "{506307E9-9C46-450C-A09A-1FCC29E97646}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integrated", "integrated", "{2DE7EDD9-A5A0-44C3-8CBB-994B6BEF30AF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C3155176-0F14-4189-8EB2-F5648604364F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{EF64D1E4-2334-4824-B6EB-25C6818C480E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "integrated", "tests.integrations\integrated\src\integrated.twin\integrated.csproj", "{B596D5CC-6CD3-4EC4-AE50-827D277B2C30}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "integrated.hmi", "tests.integrations\integrated\src\integrated.app\integrated.hmi.csproj", "{5F49C3EC-6097-4FC4-B71A-212AE048DA5D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "integrated.tests", "tests.integrations\integrated\tests\integrated.tests\integrated.tests.csproj", "{783937D2-322E-47F7-9B22-FCDCBF4091A4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -532,6 +548,42 @@ Global {1235FD19-AAC2-40A0-AE08-6D77A5E40B54}.Release|x64.Build.0 = Release|Any CPU {1235FD19-AAC2-40A0-AE08-6D77A5E40B54}.Release|x86.ActiveCfg = Release|Any CPU {1235FD19-AAC2-40A0-AE08-6D77A5E40B54}.Release|x86.Build.0 = Release|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Debug|x64.ActiveCfg = Debug|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Debug|x64.Build.0 = Debug|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Debug|x86.ActiveCfg = Debug|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Debug|x86.Build.0 = Debug|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Release|Any CPU.Build.0 = Release|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Release|x64.ActiveCfg = Release|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Release|x64.Build.0 = Release|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Release|x86.ActiveCfg = Release|Any CPU + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30}.Release|x86.Build.0 = Release|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Debug|x64.ActiveCfg = Debug|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Debug|x64.Build.0 = Debug|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Debug|x86.ActiveCfg = Debug|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Debug|x86.Build.0 = Debug|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Release|Any CPU.Build.0 = Release|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Release|x64.ActiveCfg = Release|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Release|x64.Build.0 = Release|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Release|x86.ActiveCfg = Release|Any CPU + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D}.Release|x86.Build.0 = Release|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Debug|x64.ActiveCfg = Debug|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Debug|x64.Build.0 = Debug|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Debug|x86.ActiveCfg = Debug|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Debug|x86.Build.0 = Debug|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Release|Any CPU.Build.0 = Release|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Release|x64.ActiveCfg = Release|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Release|x64.Build.0 = Release|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Release|x86.ActiveCfg = Release|Any CPU + {783937D2-322E-47F7-9B22-FCDCBF4091A4}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -591,6 +643,13 @@ Global {0B5A5A88-C5D1-428A-9FAA-D11A5210E0BF} = {618AA558-E14A-4152-90D2-DF718974B9A1} {EB9F8B25-DA74-441F-9A0D-450B005DD418} = {F30D5DD0-F259-49E0-AB1B-84DD8766A37A} {1235FD19-AAC2-40A0-AE08-6D77A5E40B54} = {618AA558-E14A-4152-90D2-DF718974B9A1} + {76982E07-8EDC-4D4C-9977-DF3EB581C4C7} = {A53DC85B-CBBA-4C1D-B5C3-5BBB52A6AB85} + {2DE7EDD9-A5A0-44C3-8CBB-994B6BEF30AF} = {506307E9-9C46-450C-A09A-1FCC29E97646} + {C3155176-0F14-4189-8EB2-F5648604364F} = {2DE7EDD9-A5A0-44C3-8CBB-994B6BEF30AF} + {EF64D1E4-2334-4824-B6EB-25C6818C480E} = {2DE7EDD9-A5A0-44C3-8CBB-994B6BEF30AF} + {B596D5CC-6CD3-4EC4-AE50-827D277B2C30} = {C3155176-0F14-4189-8EB2-F5648604364F} + {5F49C3EC-6097-4FC4-B71A-212AE048DA5D} = {C3155176-0F14-4189-8EB2-F5648604364F} + {783937D2-322E-47F7-9B22-FCDCBF4091A4} = {EF64D1E4-2334-4824-B6EB-25C6818C480E} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {99D50E81-8A37-4BB9-A435-C2C98430D600} diff --git a/src/sanbox/integration/ix-integration-blazor/Pages/RenderingExamples.razor b/src/sanbox/integration/ix-integration-blazor/Pages/RenderingExamples.razor index 9b7eef69..9ea559fa 100644 --- a/src/sanbox/integration/ix-integration-blazor/Pages/RenderingExamples.razor +++ b/src/sanbox/integration/ix-integration-blazor/Pages/RenderingExamples.razor @@ -8,7 +8,18 @@ - +
+
+
+ +
+
+ @* *@ +
+
+

Grouplayouts

GroupBox

diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/all_primitives.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/all_primitives.g.cs deleted file mode 100644 index aa07793b..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/all_primitives.g.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class all_primitives : Ix.Connector.ITwinObject -{ - public OnlinerBool myBOOL { get; } - - public OnlinerByte myBYTE { get; } - - public OnlinerWord myWORD { get; } - - public OnlinerDWord myDWORD { get; } - - public OnlinerLWord myLWORD { get; } - - public OnlinerSInt mySINT { get; } - - public OnlinerInt myINT { get; } - - public OnlinerDInt myDINT { get; } - - public OnlinerLInt myLINT { get; } - - public OnlinerUSInt myUSINT { get; } - - public OnlinerUInt myUINT { get; } - - public OnlinerUDInt myUDINT { get; } - - public OnlinerULInt myULINT { get; } - - public OnlinerReal myREAL { get; } - - public OnlinerLReal myLREAL { get; } - - public OnlinerTime myTIME { get; } - - public OnlinerLTime myLTIME { get; } - - public OnlinerDate myDATE { get; } - - public OnlinerTimeOfDay myTIME_OF_DAY { get; } - - public OnlinerDateTime myDATE_AND_TIME { get; } - - public OnlinerString mySTRING { get; } - - public OnlinerWString myWSTRING { get; } - - public all_primitives(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - myBOOL = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "myBOOL", "myBOOL"); - myBYTE = @Connector.ConnectorAdapter.AdapterFactory.CreateBYTE(this, "myBYTE", "myBYTE"); - myWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateWORD(this, "myWORD", "myWORD"); - myDWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateDWORD(this, "myDWORD", "myDWORD"); - myLWORD = @Connector.ConnectorAdapter.AdapterFactory.CreateLWORD(this, "myLWORD", "myLWORD"); - mySINT = @Connector.ConnectorAdapter.AdapterFactory.CreateSINT(this, "mySINT", "mySINT"); - myINT = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "myINT", "myINT"); - myDINT = @Connector.ConnectorAdapter.AdapterFactory.CreateDINT(this, "myDINT", "myDINT"); - myLINT = @Connector.ConnectorAdapter.AdapterFactory.CreateLINT(this, "myLINT", "myLINT"); - myUSINT = @Connector.ConnectorAdapter.AdapterFactory.CreateUSINT(this, "myUSINT", "myUSINT"); - myUINT = @Connector.ConnectorAdapter.AdapterFactory.CreateUINT(this, "myUINT", "myUINT"); - myUDINT = @Connector.ConnectorAdapter.AdapterFactory.CreateUDINT(this, "myUDINT", "myUDINT"); - myULINT = @Connector.ConnectorAdapter.AdapterFactory.CreateULINT(this, "myULINT", "myULINT"); - myREAL = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "myREAL", "myREAL"); - myLREAL = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "myLREAL", "myLREAL"); - myTIME = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME(this, "myTIME", "myTIME"); - myLTIME = @Connector.ConnectorAdapter.AdapterFactory.CreateLTIME(this, "myLTIME", "myLTIME"); - myDATE = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "myDATE", "myDATE"); - myTIME_OF_DAY = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME_OF_DAY(this, "myTIME_OF_DAY", "myTIME_OF_DAY"); - myDATE_AND_TIME = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "myDATE_AND_TIME", "myDATE_AND_TIME"); - mySTRING = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "mySTRING", "mySTRING"); - myWSTRING = @Connector.ConnectorAdapter.AdapterFactory.CreateWSTRING(this, "myWSTRING", "myWSTRING"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/example.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/example.g.cs deleted file mode 100644 index 44e54559..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/example.g.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class example : Ix.Connector.ITwinObject -{ - [Container(Layout.Stack)] - public test_primitive primitives_stack { get; } - - [Container(Layout.Wrap)] - public test_primitive primitives_wrap { get; } - - [Container(Layout.Tabs)] - public test_primitive primitives_tabs { get; } - - [Container(Layout.UniformGrid)] - public test_primitive primitives_uniform { get; } - - [Container(Layout.Stack)] - [Group(GroupLayout.GroupBox)] - public test_primitive test_groupbox { get; } - - [Container(Layout.Stack)] - [Group(GroupLayout.Border)] - public test_primitive test_border { get; } - - [Container(Layout.Tabs)] - [Group(GroupLayout.GroupBox)] - public groupbox testgroupbox { get; } - - public border testborder { get; } - - public ixcomponent ixcomponent_instance { get; } - - public MySecondNamespace.ixcomponent ixcomponent_instance2 { get; } - - public ThirdNamespace.ixcomponent ixcomponent_instance3 { get; } - - public example(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - primitives_stack = new test_primitive(this, "primitives_stack", "primitives_stack"); - primitives_wrap = new test_primitive(this, "primitives_wrap", "primitives_wrap"); - primitives_tabs = new test_primitive(this, "primitives_tabs", "primitives_tabs"); - primitives_uniform = new test_primitive(this, "primitives_uniform", "primitives_uniform"); - test_groupbox = new test_primitive(this, "test_groupbox", "test_groupbox"); - test_border = new test_primitive(this, "test_border", "test_border"); - testgroupbox = new groupbox(this, "testgroupbox", "testgroupbox"); - testborder = new border(this, "testborder", "testborder"); - ixcomponent_instance = new ixcomponent(this, "ixcomponent_instance", "ixcomponent_instance"); - ixcomponent_instance2 = new MySecondNamespace.ixcomponent(this, "ixcomponent_instance2", "ixcomponent_instance2"); - ixcomponent_instance3 = new ThirdNamespace.ixcomponent(this, "ixcomponent_instance3", "ixcomponent_instance3"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/geolocation.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/geolocation.g.cs deleted file mode 100644 index aef64dee..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/geolocation.g.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -[Container(Layout.Stack)] -[Group(GroupLayout.GroupBox)] -public partial class GeoLocation : Ix.Connector.ITwinObject -{ - public OnlinerReal Latitude { get; } - - public OnlinerReal Longitude { get; } - - public OnlinerReal Altitude { get; } - - public OnlinerString Description { get; } - - public OnlinerString LongDescription { get; } - - public GeoLocation(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - AttributeName = "Location"; - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Latitude = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Latitude [°]", "Latitude"); - Latitude.AttributeName = "Latitude [°]"; - Latitude.AttributeMinimum = -90.0f; - Latitude.AttributeMaximum = 90.0f; - Longitude = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Logitude [°]", "Longitude"); - Longitude.AttributeName = "Logitude [°]"; - Longitude.AttributeMinimum = 0.0f; - Longitude.AttributeMaximum = 180.0f; - Altitude = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Altitude [m]", "Altitude"); - Altitude.AttributeName = "Altitude [m]"; - Description = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Short descriptor", "Description"); - Description.AttributeName = "Short descriptor"; - LongDescription = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Long descriptor", "LongDescription"); - LongDescription.AttributeName = "Long descriptor"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/ixcomponent.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/ixcomponent.g.cs deleted file mode 100644 index 317478c4..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/ixcomponent.g.cs +++ /dev/null @@ -1,268 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -public partial class ixcomponent : Ix.Connector.ITwinObject -{ - public OnlinerInt my_int { get; } - - public OnlinerString my_string { get; } - - public OnlinerBool my_bool { get; } - - public ixcomponent(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - my_int = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "My integer", "my_int"); - my_int.AttributeName = "My integer"; - my_string = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "My string", "my_string"); - my_string.AttributeName = "My string"; - my_bool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "My bool", "my_bool"); - my_bool.AttributeName = "My bool"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} - -namespace MySecondNamespace -{ - public partial class ixcomponent : Ix.Connector.ITwinObject - { - public OnlinerInt my_int { get; } - - public OnlinerString my_string { get; } - - public OnlinerBool my_bool { get; } - - public ixcomponent(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - my_int = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "My integer", "my_int"); - my_int.AttributeName = "My integer"; - my_string = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "My string", "my_string"); - my_string.AttributeName = "My string"; - my_bool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "My bool", "my_bool"); - my_bool.AttributeName = "My bool"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } -} - -namespace ThirdNamespace -{ - public partial class ixcomponent : Ix.Connector.ITwinObject - { - public OnlinerInt my_int { get; } - - public OnlinerString my_string { get; } - - public OnlinerBool my_bool { get; } - - public ixcomponent(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - my_int = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "My integer", "my_int"); - my_int.AttributeName = "My integer"; - my_string = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "My string", "my_string"); - my_string.AttributeName = "My string"; - my_bool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "My bool", "my_bool"); - my_bool.AttributeName = "My bool"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/measurement.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/measurement.g.cs deleted file mode 100644 index 73cb330e..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/measurement.g.cs +++ /dev/null @@ -1,207 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace MeasurementExample -{ - [Container(Layout.Wrap)] - [Group(GroupLayout.GroupBox)] - public partial class Measurement : Ix.Connector.ITwinObject - { - public OnlinerReal Min { get; } - - [ReadOnly()] - public OnlinerReal Acquired { get; } - - public OnlinerReal Max { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(MeasurementExample.Result))] - public OnlinerInt Result { get; } - - public Measurement(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Min = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Minimum", "Min"); - Min.AttributeName = "Minimum"; - Acquired = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Measured", "Acquired"); - Acquired.AttributeName = "Measured"; - Acquired.MakeReadOnly(); - Max = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Maximum", "Max"); - Max.AttributeName = "Maximum"; - Result = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "Measurement Result", "Result"); - Result.AttributeName = "Measurement Result"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } - - public enum Result : Int16 - { - None = 0, - Passed = 10, - Failed = 20 - } - - public partial class Measurements : Ix.Connector.ITwinObject - { - [Container(Layout.Stack)] - [Group(GroupLayout.GroupBox)] - public MeasurementExample.Measurement measurement_stack { get; } - - [Container(Layout.Wrap)] - [Group(GroupLayout.GroupBox)] - public MeasurementExample.Measurement measurement_wrap { get; } - - [Container(Layout.UniformGrid)] - [Group(GroupLayout.GroupBox)] - public MeasurementExample.Measurement measurement_grid { get; } - - [Container(Layout.Tabs)] - [Group(GroupLayout.GroupBox)] - public MeasurementExample.Measurement measurement_tabs { get; } - - public Measurements(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - measurement_stack = new MeasurementExample.Measurement(this, "Stack panel", "measurement_stack"); - measurement_stack.AttributeName = "Stack panel"; - measurement_wrap = new MeasurementExample.Measurement(this, "Wrap panel", "measurement_wrap"); - measurement_wrap.AttributeName = "Wrap panel"; - measurement_grid = new MeasurementExample.Measurement(this, "Grid", "measurement_grid"); - measurement_grid.AttributeName = "Grid"; - measurement_tabs = new MeasurementExample.Measurement(this, "Tabs", "measurement_tabs"); - measurement_tabs.AttributeName = "Tabs"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/monster.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/monster.g.cs deleted file mode 100644 index 00687ba6..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/monster.g.cs +++ /dev/null @@ -1,190 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace MonsterData -{ - public partial class MonsterBase : Ix.Connector.ITwinObject - { - public OnlinerByte[] ArrayOfBytes { get; } - - public MonsterData.DriveBase[] ArrayOfDrives { get; } - - public ixcomponent[] ArrayOfIxComponent { get; } - - public MonsterBase(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - ArrayOfBytes = new OnlinerByte[4]; - Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(ArrayOfBytes, this, "ArrayOfBytes", "ArrayOfBytes", (p, rt, st) => new OnlinerByte(p, rt, st)); - ArrayOfDrives = new MonsterData.DriveBase[4]; - Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(ArrayOfDrives, this, "ArrayOfDrives", "ArrayOfDrives", (p, rt, st) => new MonsterData.DriveBase(p, rt, st)); - ArrayOfIxComponent = new ixcomponent[4]; - Ix.Connector.BuilderHelpers.Arrays.InstantiateArray(ArrayOfIxComponent, this, "ArrayOfIxComponent", "ArrayOfIxComponent", (p, rt, st) => new ixcomponent(p, rt, st)); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } - - public partial class Monster : MonsterBase - { - public MonsterData.DriveBase DriveA { get; } - - public Monster(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - DriveA = new MonsterData.DriveBase(this, "DriveA", "DriveA"); - } - } - - public partial class DriveBase : Ix.Connector.ITwinObject - { - public OnlinerLReal Position { get; } - - public OnlinerLReal Velo { get; } - - public OnlinerLReal Acc { get; } - - public OnlinerLReal Dcc { get; } - - public DriveBase(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Position = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "Position", "Position"); - Velo = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "Velo", "Velo"); - Acc = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "Acc", "Acc"); - Dcc = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "Dcc", "Dcc"); - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } - } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/stacked/weather.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/stacked/weather.g.cs deleted file mode 100644 index d967bb6d..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/stacked/weather.g.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace Layouts.Stacked -{ - [Container(Layout.Stack)] - [Group(GroupLayout.GroupBox)] - public partial class weather : weatherBase - { - public weather(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - } - } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/tabbed/weather.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/tabbed/weather.g.cs deleted file mode 100644 index cf2cf102..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/tabbed/weather.g.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace Layouts.Tabbed -{ - [Container(Layout.Tabs)] - [Group(GroupLayout.GroupBox)] - public partial class weather : weatherBase - { - public weather(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - } - } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/border.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/border.g.cs deleted file mode 100644 index 7e01aa1d..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/border.g.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -[Container(Layout.Stack)] -[Group(GroupLayout.Border)] -public partial class border : Ix.Connector.ITwinObject -{ - public OnlinerInt testInteger { get; } - - public OnlinerInt testUInteger { get; } - - public OnlinerString testString { get; } - - public OnlinerWord testWord { get; } - - public OnlinerByte testByte { get; } - - public OnlinerReal testReal { get; } - - public OnlinerLReal testLReal { get; } - - public OnlinerBool testBool { get; } - - public OnlinerDate TestDate { get; } - - public OnlinerDateTime TestDateTime { get; } - - public OnlinerTimeOfDay TestTimeOfDay { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(enumStationStatus))] - public OnlinerInt Status { get; } - - public border(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "testInteger"); - testInteger.AttributeName = "<#Integer From PLC#>"; - testUInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#UInteger From PLC#>", "testUInteger"); - testUInteger.AttributeName = "<#UInteger From PLC#>"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#STRING From PLC#>", "testString"); - testString.AttributeName = "<#STRING From PLC#>"; - testWord = @Connector.ConnectorAdapter.AdapterFactory.CreateWORD(this, "<#WORD From PLC#>", "testWord"); - testWord.AttributeName = "<#WORD From PLC#>"; - testByte = @Connector.ConnectorAdapter.AdapterFactory.CreateBYTE(this, "<#BYTE From PLC#>", "testByte"); - testByte.AttributeName = "<#BYTE From PLC#>"; - testReal = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "<#REAL From PLC#>", "testReal"); - testReal.AttributeName = "<#REAL From PLC#>"; - testLReal = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "<#LREAL From PLC#>", "testLReal"); - testLReal.AttributeName = "<#LREAL From PLC#>"; - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "<#BOOL From PLC#>", "testBool"); - testBool.AttributeName = "<#BOOL From PLC#>"; - TestDate = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "<#DATE From PLC#>", "TestDate"); - TestDate.AttributeName = "<#DATE From PLC#>"; - TestDateTime = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "<#DATE_AND_TIME From PLC#>", "TestDateTime"); - TestDateTime.AttributeName = "<#DATE_AND_TIME From PLC#>"; - TestTimeOfDay = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME_OF_DAY(this, "<#TIME_OF_DAY From PLC#>", "TestTimeOfDay"); - TestTimeOfDay.AttributeName = "<#TIME_OF_DAY From PLC#>"; - Status = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#ENUM Station status#>", "Status"); - Status.AttributeName = "<#ENUM Station status#>"; - Status.AttributeName = "<#ENUM Station status#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/groupbox.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/groupbox.g.cs deleted file mode 100644 index 3176f0c9..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/groupbox.g.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -[Container(Layout.Stack)] -[Group(GroupLayout.GroupBox)] -public partial class groupbox : Ix.Connector.ITwinObject -{ - public OnlinerInt testInteger { get; } - - public OnlinerInt testUInteger { get; } - - public OnlinerString testString { get; } - - public OnlinerWord testWord { get; } - - public OnlinerByte testByte { get; } - - public OnlinerReal testReal { get; } - - public OnlinerLReal testLReal { get; } - - public OnlinerBool testBool { get; } - - public OnlinerDate TestDate { get; } - - public OnlinerDateTime TestDateTime { get; } - - public OnlinerTimeOfDay TestTimeOfDay { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(enumStationStatus))] - public OnlinerInt Status { get; } - - public groupbox(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "testInteger"); - testInteger.AttributeName = "<#Integer From PLC#>"; - testUInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#UInteger From PLC#>", "testUInteger"); - testUInteger.AttributeName = "<#UInteger From PLC#>"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#STRING From PLC#>", "testString"); - testString.AttributeName = "<#STRING From PLC#>"; - testWord = @Connector.ConnectorAdapter.AdapterFactory.CreateWORD(this, "<#WORD From PLC#>", "testWord"); - testWord.AttributeName = "<#WORD From PLC#>"; - testByte = @Connector.ConnectorAdapter.AdapterFactory.CreateBYTE(this, "<#BYTE From PLC#>", "testByte"); - testByte.AttributeName = "<#BYTE From PLC#>"; - testReal = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "<#REAL From PLC#>", "testReal"); - testReal.AttributeName = "<#REAL From PLC#>"; - testLReal = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "<#LREAL From PLC#>", "testLReal"); - testLReal.AttributeName = "<#LREAL From PLC#>"; - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "<#BOOL From PLC#>", "testBool"); - testBool.AttributeName = "<#BOOL From PLC#>"; - TestDate = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "<#DATE From PLC#>", "TestDate"); - TestDate.AttributeName = "<#DATE From PLC#>"; - TestDateTime = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "<#DATE_AND_TIME From PLC#>", "TestDateTime"); - TestDateTime.AttributeName = "<#DATE_AND_TIME From PLC#>"; - TestTimeOfDay = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME_OF_DAY(this, "<#TIME_OF_DAY From PLC#>", "TestTimeOfDay"); - TestTimeOfDay.AttributeName = "<#TIME_OF_DAY From PLC#>"; - Status = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#ENUM Station status#>", "Status"); - Status.AttributeName = "<#ENUM Station status#>"; - Status.AttributeName = "<#ENUM Station status#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/test_primitive.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/test_primitive.g.cs deleted file mode 100644 index 087d5000..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/test/test_primitive.g.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -[Container(Layout.Wrap)] -public partial class test_primitive : Ix.Connector.ITwinObject -{ - public OnlinerInt testInteger { get; } - - public OnlinerInt testUInteger { get; } - - public OnlinerString testString { get; } - - public OnlinerWord testWord { get; } - - public OnlinerByte testByte { get; } - - public OnlinerReal testReal { get; } - - public OnlinerLReal testLReal { get; } - - public OnlinerBool testBool { get; } - - public OnlinerDate TestDate { get; } - - public OnlinerDateTime TestDateTime { get; } - - public OnlinerTimeOfDay TestTimeOfDay { get; } - - [Ix.Connector.EnumeratorDiscriminatorAttribute(typeof(enumStationStatus))] - public OnlinerInt Status { get; } - - public test_primitive(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - testInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#Integer From PLC#>", "testInteger"); - testInteger.AttributeName = "<#Integer From PLC#>"; - testUInteger = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#UInteger From PLC#>", "testUInteger"); - testUInteger.AttributeName = "<#UInteger From PLC#>"; - testString = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "<#STRING From PLC#>", "testString"); - testString.AttributeName = "<#STRING From PLC#>"; - testWord = @Connector.ConnectorAdapter.AdapterFactory.CreateWORD(this, "<#WORD From PLC#>", "testWord"); - testWord.AttributeName = "<#WORD From PLC#>"; - testByte = @Connector.ConnectorAdapter.AdapterFactory.CreateBYTE(this, "<#BYTE From PLC#>", "testByte"); - testByte.AttributeName = "<#BYTE From PLC#>"; - testReal = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "<#REAL From PLC#>", "testReal"); - testReal.AttributeName = "<#REAL From PLC#>"; - testLReal = @Connector.ConnectorAdapter.AdapterFactory.CreateLREAL(this, "<#LREAL From PLC#>", "testLReal"); - testLReal.AttributeName = "<#LREAL From PLC#>"; - testBool = @Connector.ConnectorAdapter.AdapterFactory.CreateBOOL(this, "<#BOOL From PLC#>", "testBool"); - testBool.AttributeName = "<#BOOL From PLC#>"; - TestDate = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE(this, "<#DATE From PLC#>", "TestDate"); - TestDate.AttributeName = "<#DATE From PLC#>"; - TestDateTime = @Connector.ConnectorAdapter.AdapterFactory.CreateDATE_AND_TIME(this, "<#DATE_AND_TIME From PLC#>", "TestDateTime"); - TestDateTime.AttributeName = "<#DATE_AND_TIME From PLC#>"; - TestTimeOfDay = @Connector.ConnectorAdapter.AdapterFactory.CreateTIME_OF_DAY(this, "<#TIME_OF_DAY From PLC#>", "TestTimeOfDay"); - TestTimeOfDay.AttributeName = "<#TIME_OF_DAY From PLC#>"; - Status = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "<#ENUM Station status#>", "Status"); - Status.AttributeName = "<#ENUM Station status#>"; - Status.AttributeName = "<#ENUM Station status#>"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/weatherBase.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/weatherBase.g.cs deleted file mode 100644 index 0edceeb1..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/weatherBase.g.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -[Container(Layout.Stack)] -[Group(GroupLayout.GroupBox)] -public partial class weatherBase : Ix.Connector.ITwinObject -{ - public OnlinerReal Latitude { get; } - - public OnlinerReal Longitude { get; } - - public OnlinerReal Altitude { get; } - - public OnlinerString Description { get; } - - [ReadOnly()] - public OnlinerString LongDescription { get; } - - [ReadOnce()] - public OnlinerInt StartCounter { get; } - - [RenderIgnore()] - public OnlinerString RenderIgnoreAllToghether { get; } - - [RenderIgnore("Control")] - public OnlinerString RenderIgnoreWhenControl { get; } - - [RenderIgnore("Display")] - public OnlinerString RenderIgnoreWhenDisplay { get; } - - [RenderIgnore("Control", "ShadowControl")] - public OnlinerString RenderIgnoreWhenControlAndShadow { get; } - - [RenderIgnore("Display", "ShadowDisplay")] - public OnlinerString RenderIgnoreWhenDisplayAndShadow { get; } - - public weatherBase(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - this.@SymbolTail = symbolTail; - this.@Connector = parent.GetConnector(); - this.@Parent = parent; - HumanReadable = Ix.Connector.Connector.CreateHumanReadable(parent.HumanReadable, readableTail); - Latitude = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Latitude", "Latitude"); - Longitude = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Longitude", "Longitude"); - Altitude = @Connector.ConnectorAdapter.AdapterFactory.CreateREAL(this, "Altitude", "Altitude"); - Description = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "Description", "Description"); - LongDescription = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "LongDescription", "LongDescription"); - LongDescription.MakeReadOnly(); - StartCounter = @Connector.ConnectorAdapter.AdapterFactory.CreateINT(this, "this has [ReadOnce()] attribute will be readon only once...", "StartCounter"); - StartCounter.AttributeName = "this has [ReadOnce()] attribute will be readon only once..."; - StartCounter.MakeReadOnce(); - RenderIgnoreAllToghether = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "[RenderIgnore()] must not be displayed!", "RenderIgnoreAllToghether"); - RenderIgnoreAllToghether.AttributeName = "[RenderIgnore()] must not be displayed!"; - RenderIgnoreWhenControl = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "[RenderIgnore(''Control'')]", "RenderIgnoreWhenControl"); - RenderIgnoreWhenControl.AttributeName = "[RenderIgnore(''Control'')]"; - RenderIgnoreWhenDisplay = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "[RenderIgnore(''Display'')]", "RenderIgnoreWhenDisplay"); - RenderIgnoreWhenDisplay.AttributeName = "[RenderIgnore(''Display'')]"; - RenderIgnoreWhenControlAndShadow = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "[RenderIgnore(''Control'', ''ShadowControl'')]", "RenderIgnoreWhenControlAndShadow"); - RenderIgnoreWhenControlAndShadow.AttributeName = "[RenderIgnore(''Control'', ''ShadowControl'')]"; - RenderIgnoreWhenDisplayAndShadow = @Connector.ConnectorAdapter.AdapterFactory.CreateSTRING(this, "[RenderIgnore(''Display'', ''ShadowDisplay'')]", "RenderIgnoreWhenDisplayAndShadow"); - RenderIgnoreWhenDisplayAndShadow.AttributeName = "[RenderIgnore(''Display'', ''ShadowDisplay'')]"; - parent.AddChild(this); - parent.AddKid(this); - } - - private IList Children { get; } = new List(); - public IEnumerable GetChildren() - { - return Children; - } - - private IList Kids { get; } = new List(); - public IEnumerable GetKids() - { - return Kids; - } - - private IList ValueTags { get; } = new List(); - public IEnumerable GetValueTags() - { - return ValueTags; - } - - public void AddValueTag(Ix.Connector.ITwinPrimitive valueTag) - { - ValueTags.Add(valueTag); - } - - public void AddKid(Ix.Connector.ITwinElement kid) - { - Kids.Add(kid); - } - - public void AddChild(Ix.Connector.ITwinObject twinObject) - { - Children.Add(twinObject); - } - - protected Ix.Connector.Connector @Connector { get; } - - public Ix.Connector.Connector GetConnector() - { - return this.@Connector; - } - - public string GetSymbolTail() - { - return this.SymbolTail; - } - - public Ix.Connector.ITwinObject GetParent() - { - return this.@Parent; - } - - public string Symbol { get; protected set; } - - public System.String AttributeName { get; set; } - - public string HumanReadable { get; set; } - - protected System.String @SymbolTail { get; set; } - - protected Ix.Connector.ITwinObject @Parent { get; set; } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/wrapped/weather.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/wrapped/weather.g.cs deleted file mode 100644 index e87a158e..00000000 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/Onliners/wrapped/weather.g.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using Ix.Connector; -using Ix.Connector.ValueTypes; -using System.Collections.Generic; - -namespace Layouts.Wrapped -{ - [Container(Layout.Wrap)] - [Group(GroupLayout.GroupBox)] - public partial class weather : weatherBase - { - public weather(Ix.Connector.ITwinObject parent, string readableTail, string symbolTail) : base(parent, readableTail, symbolTail + ".$base") - { - Symbol = Ix.Connector.Connector.CreateSymbol(parent.Symbol, symbolTail); - } - } -} \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/all_primitives.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/all_primitives.g.cs index 6f835db2..7455a53b 100644 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/all_primitives.g.cs +++ b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/all_primitives.g.cs @@ -37,7 +37,7 @@ public partial class all_primitives public TimeSpan myTIME { get; set; } = default(TimeSpan); public TimeSpan myLTIME { get; set; } = default(TimeSpan); public DateOnly myDATE { get; set; } = default(DateOnly); - public TimeOnly myTIME_OF_DAY { get; set; } = default(TimeOnly); + public TimeSpan myTIME_OF_DAY { get; set; } = default(TimeSpan); public DateTime myDATE_AND_TIME { get; set; } = default(DateTime); public string mySTRING { get; set; } = string.Empty; public string myWSTRING { get; set; } = string.Empty; diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/monster.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/monster.g.cs index 11288dcf..326b5909 100644 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/monster.g.cs +++ b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/monster.g.cs @@ -6,11 +6,9 @@ namespace MonsterData { public partial class MonsterBase { - public Byte[] ArrayOfBytes { get; set; } - - public MonsterData.DriveBase[] ArrayOfDrives { get; set; } - - public ixcomponent[] ArrayOfIxComponent { get; set; } + public Byte[] ArrayOfBytes { get; set; } = new Byte[4]; + public MonsterData.DriveBase[] ArrayOfDrives { get; set; } = new MonsterData.DriveBase[4]; + public ixcomponent[] ArrayOfIxComponent { get; set; } = new ixcomponent[4]; } public partial class Monster : MonsterBase diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/border.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/border.g.cs index 9070c31e..c09e889c 100644 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/border.g.cs +++ b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/border.g.cs @@ -21,7 +21,7 @@ public partial class border public DateOnly TestDate { get; set; } = default(DateOnly); public DateTime TestDateTime { get; set; } = default(DateTime); - public TimeOnly TestTimeOfDay { get; set; } = default(TimeOnly); + public TimeSpan TestTimeOfDay { get; set; } = default(TimeSpan); public enumStationStatus Status { get; set; } } } \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/groupbox.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/groupbox.g.cs index 8d5d4b43..96eaf37d 100644 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/groupbox.g.cs +++ b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/groupbox.g.cs @@ -21,7 +21,7 @@ public partial class groupbox public DateOnly TestDate { get; set; } = default(DateOnly); public DateTime TestDateTime { get; set; } = default(DateTime); - public TimeOnly TestTimeOfDay { get; set; } = default(TimeOnly); + public TimeSpan TestTimeOfDay { get; set; } = default(TimeSpan); public enumStationStatus Status { get; set; } } } \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/test_primitive.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/test_primitive.g.cs index 18ef663d..db13ea11 100644 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/test_primitive.g.cs +++ b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/test/test_primitive.g.cs @@ -21,7 +21,7 @@ public partial class test_primitive public DateOnly TestDate { get; set; } = default(DateOnly); public DateTime TestDateTime { get; set; } = default(DateTime); - public TimeOnly TestTimeOfDay { get; set; } = default(TimeOnly); + public TimeSpan TestTimeOfDay { get; set; } = default(TimeSpan); public enumStationStatus Status { get; set; } } } \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/weather.g.cs b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/weather.g.cs index 566c0c5b..03a57afb 100644 --- a/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/weather.g.cs +++ b/src/sanbox/integration/ix-integration-plc/ix/.g/POCO/weather.g.cs @@ -17,6 +17,6 @@ public partial class weather public partial class weathers { - public weatherBase[] i { get; set; } + public weatherBase[] i { get; set; } = new weatherBase[51]; } } \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/monitor.mon b/src/sanbox/integration/ix-integration-plc/monitor.mon index 4dbf6a82..0e41d1cc 100644 --- a/src/sanbox/integration/ix-integration-plc/monitor.mon +++ b/src/sanbox/integration/ix-integration-plc/monitor.mon @@ -1,2 +1,2 @@ -weather_stacked -weather \ No newline at end of file +test_example.ixcomponent_instance +test_example.refIxComponent \ No newline at end of file diff --git a/src/sanbox/integration/ix-integration-plc/src/configuration.st b/src/sanbox/integration/ix-integration-plc/src/configuration.st index cab8c47c..ef7d0d1e 100644 --- a/src/sanbox/integration/ix-integration-plc/src/configuration.st +++ b/src/sanbox/integration/ix-integration-plc/src/configuration.st @@ -1,6 +1,6 @@ USING MonsterData; CONFIGURATION MyConfiguration - TASK Main(Interval := T#1ms, Priority := 1); + TASK Main(Interval := T#10ms, Priority := 1); PROGRAM P1 WITH Main: MyProgram; VAR_GLOBAL diff --git a/src/sanbox/integration/ix-integration-plc/src/example.st b/src/sanbox/integration/ix-integration-plc/src/example.st index d3b85c62..cc8313d4 100644 --- a/src/sanbox/integration/ix-integration-plc/src/example.st +++ b/src/sanbox/integration/ix-integration-plc/src/example.st @@ -25,5 +25,12 @@ CLASS example ixcomponent_instance: ixcomponent; ixcomponent_instance2: MySecondNamespace.ixcomponent; ixcomponent_instance3: ThirdNamespace.ixcomponent; - END_VAR + + refIxComponent : REF_TO ixcomponent; + END_VAR + + METHOD PUBLIC ReferenceToComponent : Int + refIxComponent^ := ixcomponent_instance; + END_METHOD + END_CLASS diff --git a/src/sanbox/integration/ix-integration-plc/src/program.st b/src/sanbox/integration/ix-integration-plc/src/program.st index 9f18d9d2..62800e3d 100644 --- a/src/sanbox/integration/ix-integration-plc/src/program.st +++ b/src/sanbox/integration/ix-integration-plc/src/program.st @@ -5,6 +5,7 @@ PROGRAM MyProgram weather_wrapped : Layouts.Wrapped.weather; weather_tabbed : Layouts.Tabbed.weather; weather_readOnce : Layouts.Stacked.weather; + test_example: example; END_VAR VAR @@ -25,5 +26,6 @@ PROGRAM MyProgram weather_tabbed.StartCounter := all_primitives.myINT; weather_readOnce.StartCounter := all_primitives.myINT; + test_example.ReferenceToComponent(); END_PROGRAM diff --git a/src/tests.integrations/integrated/src/ax/.gitignore b/src/tests.integrations/integrated/src/ax/.gitignore new file mode 100644 index 00000000..23254e61 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/.gitignore @@ -0,0 +1,9 @@ +.apax +.env +.vscode +bin + +obj +testresult + + diff --git a/src/tests.integrations/integrated/src/ax/apax-lock.json b/src/tests.integrations/integrated/src/ax/apax-lock.json new file mode 100644 index 00000000..ae1c09dd --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/apax-lock.json @@ -0,0 +1,394 @@ +{ + "@ax/apax-build": { + "version": "0.5.0", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/apax-build/-/apax-build-0.5.0.tgz", + "integrity": "sha512-6p9iZQfpmngx38r4p6XaVVPeEQzTt3UJcywsRSeVBnES6tx1pTVLM20K0RczqRYZmXbyNpz9effPxpvj5L/jKA==", + "dependencies": { + "@ax/third-party-licenses-apax-build": "0.5.0" + } + }, + "@ax/axunit": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit/-/axunit-3.0.4.tgz", + "integrity": "sha512-IZQmxF+zdUbpe5gLWl59XMecoNXnLoc31lzEUNdS3FdXz6sQ8K1Kbt2QCy6dtkdDzUJmk2ualIdqiEah2z0irA==", + "dependencies": { + "@ax/axunit-docs": "3.0.4", + "@ax/axunit-library": "3.0.4", + "@ax/axunit-llvm-runner-gen": "3.0.4", + "@ax/axunit-runner-llvm": "3.0.4", + "@ax/axunit-runner-mc7plus": "3.0.4", + "@ax/build-native": "10.1.1", + "@ax/target-axunit": "3.0.4" + } + }, + "@ax/axunit-docs": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-docs/-/axunit-docs-3.0.4.tgz", + "integrity": "sha512-OJs1QMe0HLcUDG51YqMgTT8MySG5/zPUuHYDwxtoww2dTPm+vTSb6q1xNqDla0f/I44L6NlgIQdIa1HkbFb19A==" + }, + "@ax/axunit-library": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-library/-/axunit-library-3.0.4.tgz", + "integrity": "sha512-uth9hMlmtJZRmbXnmK36liH9W/VKvgxc17wKwRlWm6r00ZFg7bLtMm6Px9nw6WOjP7NfNY6g3l75oEXw7RjT2w==" + }, + "@ax/axunit-llvm-runner-gen": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-llvm-runner-gen/-/axunit-llvm-runner-gen-3.0.4.tgz", + "integrity": "sha512-qS464W4wDa6MLx23VDzOlZ29yAznnZDcpOjOP6pQQh58xU9Br4FdKKIfwTIEwAuGbloBuqLAwJ454fMZ6HqA7w==" + }, + "@ax/axunit-runner-llvm": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-llvm/-/axunit-runner-llvm-3.0.4.tgz", + "integrity": "sha512-peY1mXoZHzqKoKXoi7nKFNaiBcU8gNAFSG+RvktGIgfVms6VoFpB/94p+8iWwKx17VV28b6scgpTzqs7DUn2iQ==", + "dependencies": { + "@ax/axunit-runner-llvm-linux-x64": "3.0.4", + "@ax/axunit-runner-llvm-win-x64": "3.0.4" + } + }, + "@ax/axunit-runner-llvm-linux-x64": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-llvm-linux-x64/-/axunit-runner-llvm-linux-x64-3.0.4.tgz", + "integrity": "sha512-u0y4g9B1evdlanEhWmlv86icHQKLZeeLcVObZMNU/vtIaFpIxYFRzbrgCa7tp8QVXIt87Yqr/vHK79hI7YcL4Q==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] + }, + "@ax/axunit-runner-llvm-win-x64": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-llvm-win-x64/-/axunit-runner-llvm-win-x64-3.0.4.tgz", + "integrity": "sha512-ahAkzPXl7iNk4xz1w6uGAknbtqZjjYpcaMJiUCDOLg3gtqtuMnlrZ1fNPBq8WoZkajLTAx4NEzDYhIb5h1/IyQ==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/axunit-runner-mc7plus": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-mc7plus/-/axunit-runner-mc7plus-3.0.4.tgz", + "integrity": "sha512-gACvi9nSKfdcZmFtZ7CO5nOW/AEB5JNSqOP+VN2tPMTIuzV+2LRDwThTcnkqnK8zz2Hon8LcumYrA9oqnFHD/w==", + "dependencies": { + "@ax/axunit-runner-mc7plus-win-x64": "3.0.4" + } + }, + "@ax/axunit-runner-mc7plus-win-x64": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-mc7plus-win-x64/-/axunit-runner-mc7plus-win-x64-3.0.4.tgz", + "integrity": "sha512-DFw9qx9MQLmiWEdLn5vrqePAuOL8z1sHh5pn98V5sclVWZWyNl7pKEF3AEpddQnQuCK127/OV8HQ8/myelezyg==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/build-native": { + "version": "10.1.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native/-/build-native-10.1.1.tgz", + "integrity": "sha512-C1Pwo0dMa21gV1CbqT9umaurHPY4otd8dvlx7zVOlXfEmbgACort5u3K7TeWMNSLdsuBvfkivxrZNWsOkHTtAQ==", + "dependencies": { + "@ax/build-native-linux": "10.1.1", + "@ax/build-native-winx64": "10.1.1", + "@ax/third-party-licenses-build-native": "10.1.1" + } + }, + "@ax/build-native-linux": { + "version": "10.1.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-linux/-/build-native-linux-10.1.1.tgz", + "integrity": "sha512-dNNWZGLl8+CtHvojcU+7c3bLFKehkzulrpDdmxzRGq2cb1GwokoNPUBRqB0yQtbW0pTJkXvUAuI9qf8T48PTew==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/third-party-licenses-build-native": "10.1.1" + } + }, + "@ax/build-native-winx64": { + "version": "10.1.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-winx64/-/build-native-winx64-10.1.1.tgz", + "integrity": "sha512-kZnFeTxt+GoVeo+IXTqlGMRLt5iwwtSdpXpyPdyM5DAOAafU2pyBrl7ZkR8SOtwbTG7eXxGrHo5w/rMmhHLZkA==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/third-party-licenses-build-native": "10.1.1" + } + }, + "@ax/mod": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod/-/mod-0.18.1.tgz", + "integrity": "sha512-cNma7brtKzOZINEHNd/zOPuYrTn5XRScCbaiWfolJyHYAnGdfKiW+JDzfpJZYbWZaO3a8ajj/2kK0+nI/gijeA==", + "dependencies": { + "@ax/mod-linux-x64": "0.18.1", + "@ax/mod-win-x64": "0.18.1" + } + }, + "@ax/mod-linux-x64": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-linux-x64/-/mod-linux-x64-0.18.1.tgz", + "integrity": "sha512-/756Kd9z2WHScRty97KpcHuHGllI4iM+E79TtKjEryI7nRcp0bVDZ9CDWdr+uecacl9xe5o9CelLJOoOPWpphw==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] + }, + "@ax/mod-win-x64": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-win-x64/-/mod-win-x64-0.18.1.tgz", + "integrity": "sha512-H2dv+aLK/kxrJbOCoq0Qsb91YhIEver53FXcB3X4KjD+skzWqCBk4Xo327IUUv29TAqX+k+fZ2WC/HbtVxkDLw==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/mon": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon/-/mon-0.18.1.tgz", + "integrity": "sha512-kvuLbaAAOCLH+8eZVIJUnJ0uCo0SorsY++1wqfIo/LMuN0bsIeNaK3mmsNoWqzttn2PTfOOjP+AbAQscpgdsCw==", + "dependencies": { + "@ax/mon-linux-x64": "0.18.1", + "@ax/mon-win-x64": "0.18.1" + } + }, + "@ax/mon-linux-x64": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-linux-x64/-/mon-linux-x64-0.18.1.tgz", + "integrity": "sha512-wdXeWa9t5mI3YEX60t9G01Mj3tKQ7ILK2buPnpfyJm2K5rCXgBPEtRGWIiJwG5xXWCDcPrWQZ/OFGdT8a9PHRQ==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] + }, + "@ax/mon-win-x64": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-win-x64/-/mon-win-x64-0.18.1.tgz", + "integrity": "sha512-pHVXpJLWTUVF1xk8j6WiUOym/fbSPp2XLdURadg3hTvs16w/CqVvMIPiKqQXET7/wFHY1GuS8BdIBcOYzfGEGQ==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/sdb": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb/-/sdb-0.18.1.tgz", + "integrity": "sha512-+RWa7f+ECaY0HilsNQkPoLsAtk2A1HH+JNdXyJerqcQngayeUTaqEBUY3oWihjhHHFz8n/LFvSoENmCPDzFEQg==", + "dependencies": { + "@ax/sdb-linux-x64": "0.18.1", + "@ax/sdb-win-x64": "0.18.1" + } + }, + "@ax/sdb-linux-x64": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-linux-x64/-/sdb-linux-x64-0.18.1.tgz", + "integrity": "sha512-bqrmoRO4QktpMqGr3Ht0mwM9h359CDxUDFY374YWMO4DXB+/ukDRti8ZZTaxZoYXtsKAEurwsLo9KAGKPkT+rg==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] + }, + "@ax/sdb-win-x64": { + "version": "0.18.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-win-x64/-/sdb-win-x64-0.18.1.tgz", + "integrity": "sha512-P+1hP8R0Ix3q/HV1gZFW8fPQhEXPVRSI9G5Tp2jRp/EFublpLPLkY1v87mQpeOp6+2WAn0g6CkA32lF6YGBfZQ==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/sdk": { + "version": "3.0.8", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdk/-/sdk-3.0.8.tgz", + "integrity": "sha512-KXqkjIPnOceu9DJjjIXYhDx/FLNcsgpFmsGLtoz2N5fgOxEFZdIuLk0C1Mpdlylks8KG53t1XMKjplXQ6mjBPQ==", + "dependencies": { + "@ax/axunit": "3.0.4", + "@ax/mod": "0.18.1", + "@ax/mon": "0.18.1", + "@ax/sdb": "0.18.1", + "@ax/sld": "0.13.3", + "@ax/st": "3.0.8", + "@ax/target-llvm": "4.2.19", + "@ax/target-mc7plus": "4.2.19" + } + }, + "@ax/sld": { + "version": "0.13.3", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld/-/sld-0.13.3.tgz", + "integrity": "sha512-yWSdJfsPrB2bK/66aHb/ZG+jNRlZBdn2NQGOaziBCrJjp18Y6S30YyfVyFDnEDR9uUKODvhNthsRzULxtmGMhw==", + "dependencies": { + "@ax/sld-linux-x64": "0.13.3", + "@ax/sld-win-x64": "0.13.3" + } + }, + "@ax/sld-linux-x64": { + "version": "0.13.3", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld-linux-x64/-/sld-linux-x64-0.13.3.tgz", + "integrity": "sha512-igNwjZoLD65CFxc/JivLnYdi5UgV5L+L3xprWqUEPaR+/FUwdPLSYeef0rcSwhE0A91FqYp9gWJeASdveoGwFQ==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] + }, + "@ax/sld-win-x64": { + "version": "0.13.3", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld-win-x64/-/sld-win-x64-0.13.3.tgz", + "integrity": "sha512-Bx/qbIIsZ8oL6drTwDfBjY0qxu4tci/r/+KZ+O+tQUhstA7dlGC6MQYxNo/7mx1SJ9u91wbTa+R5HUV6lxT5jw==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/st": { + "version": "3.0.8", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st/-/st-3.0.8.tgz", + "integrity": "sha512-XKix8Gv11Jckm4KPTI2+xT08Oa3C+EMPsafaURyuWN+xGKPFORGlAFwwsoEel6fPmnOzl1Mns79RL4g4o64Ujg==", + "dependencies": { + "@ax/apax-build": "0.5.0", + "@ax/stc": "4.2.19" + } + }, + "@ax/st-docs": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-docs/-/st-docs-4.2.19.tgz", + "integrity": "sha512-cq97rFqA5GNZBY6cRe1DdeK7wFcd2iprpqXSsCUBl6q4DdjQJ2N8X7iefE1tShqo0mhppDXw13NAdLwPoOW+jg==" + }, + "@ax/stc": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc/-/stc-4.2.19.tgz", + "integrity": "sha512-4FnHt1v+Py3gUC8EMcpUyM7jSrSLGqIkWd8HNYR6pnR306tfUAmHbVgHaJMONvy36UNFr2MtVeF7eTExRPyPcg==", + "dependencies": { + "@ax/stc-linux-x64": "4.2.19", + "@ax/stc-win-x64": "4.2.19" + } + }, + "@ax/stc-linux-x64": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-linux-x64/-/stc-linux-x64-4.2.19.tgz", + "integrity": "sha512-YhropZVFunzsSvdbHjMRrEoO0REHrfszyglBibM2GDUkveVZcgs2FhUaqz5a2tdFrs3eTMxwQpVTTEi6iL07KQ==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "4.2.19" + } + }, + "@ax/stc-win-x64": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-win-x64/-/stc-win-x64-4.2.19.tgz", + "integrity": "sha512-ZrWaXdTqzQV0OD9PWmShCHnXhVL9MUK5HDLok4CuxWJhkpKHentuDqOgcUrYnQaPh1L8muHAsbRjTIR9FDg1xw==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "4.2.19" + } + }, + "@ax/target-axunit": { + "version": "3.0.4", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-axunit/-/target-axunit-3.0.4.tgz", + "integrity": "sha512-BtiD4hwPqQOfJhAZRHb3cb+D4llu3UGuXgV+orI6dpE3QkZ3/vIkXuUDO4HS44q1dTd9kKhZ7fGMyMFfUounXw==" + }, + "@ax/target-llvm": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm/-/target-llvm-4.2.19.tgz", + "integrity": "sha512-GRn9UO0KX6BHm0W/7XBksHlWSiP1EP63L1OwgydgmlM/7DgCZu4icNGsgLcpR8CynbqkyJv9vraDgpEwJACJYg==", + "dependencies": { + "@ax/target-llvm-linux-x64": "4.2.19", + "@ax/target-llvm-win-x64": "4.2.19" + } + }, + "@ax/target-llvm-linux-x64": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-linux-x64/-/target-llvm-linux-x64-4.2.19.tgz", + "integrity": "sha512-1Bckp7uV3LY7E+TuI677GSOUOaFAU5DRpduIgnlxjW2SUR2rrUqSoBUA34wiC3vS866lkk8w9B7MMNIIGTwERg==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] + }, + "@ax/target-llvm-win-x64": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-win-x64/-/target-llvm-win-x64-4.2.19.tgz", + "integrity": "sha512-0D1DbembzBKhiAlszV4t58NYUM2ojHFx2rEU+OkvZZ7xmGFuqCg4A/NODXK1haHktxjuitdC67u4JgRWCdwTDA==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/target-mc7plus": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus/-/target-mc7plus-4.2.19.tgz", + "integrity": "sha512-NINzj044PCJAlkcVCOKv8IsISqvIcLLqEeyeXF3fg7LQGSTE3x7bjb7lwhW2XfKASzdc3v3KRDWTYev7Rop5iA==", + "dependencies": { + "@ax/target-mc7plus-linux-x64": "4.2.19", + "@ax/target-mc7plus-win-x64": "4.2.19" + } + }, + "@ax/target-mc7plus-linux-x64": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-linux-x64/-/target-mc7plus-linux-x64-4.2.19.tgz", + "integrity": "sha512-YQYJ+Wjsj1fTgtfNsSYLE1Lu+eP3Hw7Vxm2XTGvBb3CIFzgGi/rHMZDwth9quB/h89nbjv16i6uIGSxDh1vo4g==", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] + }, + "@ax/target-mc7plus-win-x64": { + "version": "4.2.19", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-win-x64/-/target-mc7plus-win-x64-4.2.19.tgz", + "integrity": "sha512-4I/HBegyUcvyfrUUd/D8SgPaXwbDfBBA5NUtt4YwSGlExohJ/lSV/2NCkoPd1q1n7MQssFOzUjXBGVZK5JPgzg==", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] + }, + "@ax/third-party-licenses-apax-build": { + "version": "0.5.0", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/third-party-licenses-apax-build/-/third-party-licenses-apax-build-0.5.0.tgz", + "integrity": "sha512-9okNwDaHttbFwcP1Ln/mFN8ARYL1g+ShCtcMm4OE/BYN98nzoTZBEaUdsdbhju4sL4bD6qDBPVvj9o/cwPIL7Q==" + }, + "@ax/third-party-licenses-build-native": { + "version": "10.1.1", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/third-party-licenses-build-native/-/third-party-licenses-build-native-10.1.1.tgz", + "integrity": "sha512-Da+AT0KujH3K9bKf4K4rqPA3Z+a/WDkw9p6328AlrSqgBIUFyUZzOM3eVOwhhjKCnmNAVSmtSp0r7crDFGICTw==" + } +} diff --git a/src/tests.integrations/integrated/src/ax/apax.yml b/src/tests.integrations/integrated/src/ax/apax.yml new file mode 100644 index 00000000..41676eb7 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/apax.yml @@ -0,0 +1,23 @@ +name: "integrated" +version: 0.0.0 +type: app +targets: + - "1500" + - axunit-llvm + - plcsim +devDependencies: + "@ax/sdk": 3.0.8 +variables: + APAX_BUILD_ARGS: [ -d ] +scripts: + ixc: + - dotnet run --project ..\\..\\..\\..\\ix.compiler\\src\\ixc\\Ix.ixc.csproj --framework net7.0 + postbuild: dotnet run --project ..\\..\\..\\..\\ix.compiler\\src\\ixc\\Ix.ixc.csproj --framework net7.0 + download : + - apax install + - apax build + # Here you will need to set the argumen -t to your plc OP and -i to platfrom you are dowloading to + # --default-server-interface is a must if you are using WebAPI + - apax sld --accept-security-disclaimer -t $AXTARGET -i $AXTARGETPLATFORMINPUT -r --default-server-interface + + diff --git a/src/tests.integrations/integrated/src/ax/ix.config.json b/src/tests.integrations/integrated/src/ax/ix.config.json new file mode 100644 index 00000000..4f385272 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/ix.config.json @@ -0,0 +1 @@ +{"OutputProjectFolder":"..\\integrated.twin"} \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/ax/src/configuration.st b/src/tests.integrations/integrated/src/ax/src/configuration.st new file mode 100644 index 00000000..21c81ee4 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/src/configuration.st @@ -0,0 +1,47 @@ +USING RealMonsterData; +CONFIGURATION MyConfiguration + TASK Main(Interval := T#10ms, Priority := 1); + PROGRAM P1 WITH Main: MyProgram; + + VAR_GLOBAL + Monster : MonsterData.Monster; + OnlineToPlain_should_copy_entire_structure : MonsterData.Monster; + PlainToOnline_should_copy_entire_structure : MonsterData.Monster; + OnlineToShadowAsync_should_copy_entire_structure : MonsterData.Monster; + ShadowToOnlineAsync_should_copy_entire_structure : MonsterData.Monster; + + ShadowToPlainAsync_should_copy_entire_structure : MonsterData.Monster; + PlainToShadowAsync_should_copy_entire_structure : MonsterData.Monster; + Pokus : Pokus; + + RealMonster : RealMonsterData.RealMonster; + OnlineToShadow_should_copy : RealMonsterData.RealMonster; + ShadowToOnline_should_copy : RealMonsterData.RealMonster; + OnlineToPlain_should_copy: RealMonsterData.RealMonster; + PlainToOnline_should_copy: RealMonsterData.RealMonster; + + p_online_shadow: all_primitives; + p_shadow_online: all_primitives; + + p_online_plain: all_primitives; + p_plain_online: all_primitives; + + p_shadow_plain: all_primitives; + p_plain_shadow: all_primitives; + END_VAR +END_CONFIGURATION + +CLASS Pokus + VAR PUBLIC + Nested : Nested; + END_VAR + +END_CLASS + +CLASS Nested + VAR PUBLIC + SomeString : STRING; + SomeInt : INT; + SomeByte : BYTE; + END_VAR +END_CLASS diff --git a/src/tests.integrations/integrated/src/ax/src/dataswapping/all_primitives.st b/src/tests.integrations/integrated/src/ax/src/dataswapping/all_primitives.st new file mode 100644 index 00000000..2f377a85 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/src/dataswapping/all_primitives.st @@ -0,0 +1,33 @@ +CLASS all_primitives + VAR PUBLIC + myBOOL : BOOL ; + myBYTE : BYTE ; + myWORD : WORD ; + myDWORD : DWORD ; + myLWORD : LWORD ; + mySINT : SINT ; + myINT : INT ; + myDINT : DINT ; + myLINT : LINT ; + myUSINT : USINT ; + myUINT : UINT ; + myUDINT : UDINT ; + myULINT : ULINT ; + myREAL : REAL ; + myLREAL : LREAL ; + myTIME : TIME ; + myLTIME : LTIME ; + myDATE : DATE ; + // myLDATE : LDATE ; + myTIME_OF_DAY : TIME_OF_DAY ; + // myLTIME_OF_DAY : LTIME_OF_DAY ; + myDATE_AND_TIME : DATE_AND_TIME ; + // myLDATE_AND_TIME : LDATE_AND_TIME; + // myCHAR : CHAR ; + // myWCHAR : WCHAR ; + mySTRING : STRING ; + myWSTRING : WSTRING ; + myEnum : myEnum; + END_VAR + +END_CLASS \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/ax/src/dataswapping/moster.st b/src/tests.integrations/integrated/src/ax/src/dataswapping/moster.st new file mode 100644 index 00000000..767f8c66 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/src/dataswapping/moster.st @@ -0,0 +1,24 @@ +NAMESPACE MonsterData + CLASS MonsterBase + VAR PUBLIC + Description : STRING; + Id : ULINT; + ArrayOfBytes : ARRAY[0..3] OF BYTE; + ArrayOfDrives : ARRAY[0..3] OF DriveBase; + END_VAR + END_CLASS + CLASS Monster EXTENDS MonsterBase + VAR PUBLIC + DriveA : DriveBase; + END_VAR + END_CLASS + + CLASS DriveBase + VAR PUBLIC + Position : LREAL; + Velo : LREAL; + Acc : LREAL; + Dcc : LREAL; + END_VAR + END_CLASS +END_NAMESPACE \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/ax/src/dataswapping/myEnum.st b/src/tests.integrations/integrated/src/ax/src/dataswapping/myEnum.st new file mode 100644 index 00000000..c935ac75 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/src/dataswapping/myEnum.st @@ -0,0 +1,7 @@ +TYPE myEnum : + ( + Unknown, + Available, + UnAvailable + ); + END_TYPE \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/ax/src/dataswapping/realmonster.st b/src/tests.integrations/integrated/src/ax/src/dataswapping/realmonster.st new file mode 100644 index 00000000..39853034 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/src/dataswapping/realmonster.st @@ -0,0 +1,59 @@ +NAMESPACE RealMonsterData + CLASS RealMonsterBase + VAR PUBLIC + Description : STRING; + Id : ULINT; + TestDate : DATE; + TestDateTime: DATE_AND_TIME; + TestTimeSpan: TIME_OF_DAY; + ArrayOfBytes : ARRAY[0..3] OF BYTE; + ArrayOfDrives : ARRAY[0..3] OF DriveBaseNested; + END_VAR + END_CLASS + + CLASS RealMonster EXTENDS RealMonsterBase + VAR PUBLIC + DriveA : DriveBaseNested; + END_VAR + END_CLASS + + CLASS DriveBaseNested + VAR PUBLIC + Position : LREAL; + Velo : LREAL; + Acc : LREAL; + Dcc : LREAL; + NestedLevelOne : NestedLevelOne; + END_VAR + END_CLASS + + CLASS NestedLevelOne + VAR PUBLIC + Position : LREAL; + Velo : LREAL; + Acc : LREAL; + Dcc : LREAL; + NestedLevelTwo: NestedLevelTwo; + END_VAR + END_CLASS + + CLASS NestedLevelTwo + VAR PUBLIC + Position : LREAL; + Velo : LREAL; + Acc : LREAL; + Dcc : LREAL; + NestedLevelThree: NestedLevelThree; + END_VAR + END_CLASS + + CLASS NestedLevelThree + VAR PUBLIC + Position : LREAL; + Velo : LREAL; + Acc : LREAL; + Dcc : LREAL; + END_VAR + END_CLASS + +END_NAMESPACE \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/ax/src/program.st b/src/tests.integrations/integrated/src/ax/src/program.st new file mode 100644 index 00000000..391a40c1 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/src/program.st @@ -0,0 +1,6 @@ +PROGRAM MyProgram + VAR_EXTERNAL + + END_VAR + ; +END_PROGRAM diff --git a/src/tests.integrations/integrated/src/ax/test/test.st b/src/tests.integrations/integrated/src/ax/test/test.st new file mode 100644 index 00000000..82bb243b --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/test/test.st @@ -0,0 +1,13 @@ +USING AxUnit; + +NAMESPACE MyTest + + {TestFixture} + CLASS MyTestFixture + {Test} + METHOD PUBLIC MyTestMethod + Assert.Equal(actual := TRUE, expected := TRUE); + END_METHOD + END_CLASS + +END_NAMESPACE diff --git a/src/tests.integrations/integrated/src/integrated.app/App.razor b/src/tests.integrations/integrated/src/integrated.app/App.razor new file mode 100644 index 00000000..7431d6a1 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/App.razor @@ -0,0 +1,14 @@ + + + + + + + + Not found + +

Sorry, there's nothing at this address.

+
+
+
+
diff --git a/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/Pages/Account/LogOut.cshtml b/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/Pages/Account/LogOut.cshtml new file mode 100644 index 00000000..21b7fe27 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/Pages/Account/LogOut.cshtml @@ -0,0 +1,15 @@ +@page +@using Microsoft.AspNetCore.Identity +@attribute [IgnoreAntiforgeryToken] +@inject SignInManager SignInManager +@functions { + public async Task OnPost() + { + if (SignInManager.IsSignedIn(User)) + { + await SignInManager.SignOutAsync(); + } + + return Redirect("~/"); + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/Pages/Shared/_LoginPartial.cshtml b/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/Pages/Shared/_LoginPartial.cshtml new file mode 100644 index 00000000..eda27e90 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/Pages/Shared/_LoginPartial.cshtml @@ -0,0 +1,27 @@ +@using Microsoft.AspNetCore.Identity +@inject SignInManager SignInManager +@inject UserManager UserManager +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers + + diff --git a/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/RevalidatingIdentityAuthenticationStateProvider.cs b/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/RevalidatingIdentityAuthenticationStateProvider.cs new file mode 100644 index 00000000..cfcccfad --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Areas/Identity/RevalidatingIdentityAuthenticationStateProvider.cs @@ -0,0 +1,70 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Server; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Options; +using System.Security.Claims; + +namespace ix_draft_blazor.Areas.Identity +{ + public class RevalidatingIdentityAuthenticationStateProvider + : RevalidatingServerAuthenticationStateProvider where TUser : class + { + private readonly IServiceScopeFactory _scopeFactory; + private readonly IdentityOptions _options; + + public RevalidatingIdentityAuthenticationStateProvider( + ILoggerFactory loggerFactory, + IServiceScopeFactory scopeFactory, + IOptions optionsAccessor) + : base(loggerFactory) + { + _scopeFactory = scopeFactory; + _options = optionsAccessor.Value; + } + + protected override TimeSpan RevalidationInterval => TimeSpan.FromMinutes(30); + + protected override async Task ValidateAuthenticationStateAsync( + AuthenticationState authenticationState, CancellationToken cancellationToken) + { + // Get the user manager from a new scope to ensure it fetches fresh data + var scope = _scopeFactory.CreateScope(); + try + { + var userManager = scope.ServiceProvider.GetRequiredService>(); + return await ValidateSecurityStampAsync(userManager, authenticationState.User); + } + finally + { + if (scope is IAsyncDisposable asyncDisposable) + { + await asyncDisposable.DisposeAsync(); + } + else + { + scope.Dispose(); + } + } + } + + private async Task ValidateSecurityStampAsync(UserManager userManager, ClaimsPrincipal principal) + { + var user = await userManager.GetUserAsync(principal); + if (user == null) + { + return false; + } + else if (!userManager.SupportsUserSecurityStamp) + { + return true; + } + else + { + var principalStamp = principal.FindFirstValue(_options.ClaimsIdentity.SecurityStampClaimType); + var userStamp = await userManager.GetSecurityStampAsync(user); + return principalStamp == userStamp; + } + } + } +} \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Data/ApplicationDbContext.cs b/src/tests.integrations/integrated/src/integrated.app/Data/ApplicationDbContext.cs new file mode 100644 index 00000000..036f08ef --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Data/ApplicationDbContext.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Identity.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; + +namespace ix_draft_blazor.Data +{ + public class ApplicationDbContext : IdentityDbContext + { + public ApplicationDbContext(DbContextOptions options) + : base(options) + { + } + } +} \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs b/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs new file mode 100644 index 00000000..a8d41c87 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs @@ -0,0 +1,277 @@ +// +using ix_draft_blazor.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using System; + +namespace ix_draft_blazor.Data.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("00000000000000_CreateIdentitySchema")] + partial class CreateIdentitySchema + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/00000000000000_CreateIdentitySchema.cs b/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/00000000000000_CreateIdentitySchema.cs new file mode 100644 index 00000000..a85c5092 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/00000000000000_CreateIdentitySchema.cs @@ -0,0 +1,220 @@ +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using System; + +namespace ix_draft_blazor.Data.Migrations +{ + public partial class CreateIdentitySchema : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AspNetRoles", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 256, nullable: true), + NormalizedName = table.Column(maxLength: 256, nullable: true), + ConcurrencyStamp = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetUsers", + columns: table => new + { + Id = table.Column(nullable: false), + UserName = table.Column(maxLength: 256, nullable: true), + NormalizedUserName = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: true), + NormalizedEmail = table.Column(maxLength: 256, nullable: true), + EmailConfirmed = table.Column(nullable: false), + PasswordHash = table.Column(nullable: true), + SecurityStamp = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + PhoneNumber = table.Column(nullable: true), + PhoneNumberConfirmed = table.Column(nullable: false), + TwoFactorEnabled = table.Column(nullable: false), + LockoutEnd = table.Column(nullable: true), + LockoutEnabled = table.Column(nullable: false), + AccessFailedCount = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetRoleClaims", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + RoleId = table.Column(nullable: false), + ClaimType = table.Column(nullable: true), + ClaimValue = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserClaims", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: false), + ClaimType = table.Column(nullable: true), + ClaimValue = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetUserClaims_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserLogins", + columns: table => new + { + LoginProvider = table.Column(maxLength: 128, nullable: false), + ProviderKey = table.Column(maxLength: 128, nullable: false), + ProviderDisplayName = table.Column(nullable: true), + UserId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); + table.ForeignKey( + name: "FK_AspNetUserLogins_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserRoles", + columns: table => new + { + UserId = table.Column(nullable: false), + RoleId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserTokens", + columns: table => new + { + UserId = table.Column(nullable: false), + LoginProvider = table.Column(maxLength: 128, nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + Value = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AspNetUserTokens_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AspNetRoleClaims_RoleId", + table: "AspNetRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "RoleNameIndex", + table: "AspNetRoles", + column: "NormalizedName", + unique: true, + filter: "[NormalizedName] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserClaims_UserId", + table: "AspNetUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserLogins_UserId", + table: "AspNetUserLogins", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserRoles_RoleId", + table: "AspNetUserRoles", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "EmailIndex", + table: "AspNetUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "UserNameIndex", + table: "AspNetUsers", + column: "NormalizedUserName", + unique: true, + filter: "[NormalizedUserName] IS NOT NULL"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AspNetRoleClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserLogins"); + + migrationBuilder.DropTable( + name: "AspNetUserRoles"); + + migrationBuilder.DropTable( + name: "AspNetUserTokens"); + + migrationBuilder.DropTable( + name: "AspNetRoles"); + + migrationBuilder.DropTable( + name: "AspNetUsers"); + } + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/ApplicationDbContextModelSnapshot.cs new file mode 100644 index 00000000..ffda8561 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Data/Migrations/ApplicationDbContextModelSnapshot.cs @@ -0,0 +1,275 @@ +// +using ix_draft_blazor.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using System; + +namespace ix_draft_blazor.Data.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + partial class ApplicationDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/Error.cshtml b/src/tests.integrations/integrated/src/integrated.app/Pages/Error.cshtml new file mode 100644 index 00000000..faf3b2e0 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/Error.cshtml @@ -0,0 +1,42 @@ +@page +@model ix_draft_blazor.Pages.ErrorModel + + + + + + + + Error + + + + + +
+
+

Error.

+

An error occurred while processing your request.

+ + @if (Model.ShowRequestId) + { +

+ Request ID: @Model.RequestId +

+ } + +

Development Mode

+

+ Swapping to the Development environment displays detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+
+
+ + + diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/Error.cshtml.cs b/src/tests.integrations/integrated/src/integrated.app/Pages/Error.cshtml.cs new file mode 100644 index 00000000..ecb24298 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/Error.cshtml.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using System.Diagnostics; + +namespace ix_draft_blazor.Pages +{ + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + [IgnoreAntiforgeryToken] + public class ErrorModel : PageModel + { + public string? RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + private readonly ILogger _logger; + + public ErrorModel(ILogger logger) + { + _logger = logger; + } + + public void OnGet() + { + RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; + } + } +} \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/Index.razor b/src/tests.integrations/integrated/src/integrated.app/Pages/Index.razor new file mode 100644 index 00000000..f72eccec --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/Index.razor @@ -0,0 +1,25 @@ +@page "/" + +Index + +

Hi!

+

+ For more information see: +

+

+ Simatic AX +

+

+ IX web site and documentation +

+ +

+ IX source repository +

+ +

+ Build Blazor +

+

+ Bootstrap +

\ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/Index.razor.css b/src/tests.integrations/integrated/src/integrated.app/Pages/Index.razor.css new file mode 100644 index 00000000..191bc0a8 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/Index.razor.css @@ -0,0 +1,16 @@ +.oi { + width: 2rem; + font-size: 1.1rem; + vertical-align: text-top; +} + +.oi-chevron-top { + transform: rotate(0deg); + transition: transform .2s linear; + transform-origin: 25.3% 62%; +} + .oi-chevron-top.open { + transform: rotate(180deg); + transition: transform .2s linear; + transform-origin: 25.3% 62%; + } \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/OnlineShadow/OnlineShadow.razor b/src/tests.integrations/integrated/src/integrated.app/Pages/OnlineShadow/OnlineShadow.razor new file mode 100644 index 00000000..10221e8f --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/OnlineShadow/OnlineShadow.razor @@ -0,0 +1,37 @@ +@page "/swapping/onlineshadow" + +

OnlineShadow

+ + + + + +
+
+
+

Shadow Control

+ +
+ +
+

Online Control

+ +
+ +
+ +
+ + + +@code { + private async Task OnlineToShadow() + { + await Entry.Plc.RealMonster.OnlineToShadowAsync(); + + } + private async Task ShadowToOnline() + { + await Entry.Plc.RealMonster.ShadowToOnlineAsync(); + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/UI/AutoUI.razor b/src/tests.integrations/integrated/src/integrated.app/Pages/UI/AutoUI.razor new file mode 100644 index 00000000..0b424137 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/UI/AutoUI.razor @@ -0,0 +1,10 @@ +@page "/ui/autoui" +

AutoUI

+ +
+ +
+ +@code { + +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/UI/ManualUI.razor b/src/tests.integrations/integrated/src/integrated.app/Pages/UI/ManualUI.razor new file mode 100644 index 00000000..3c4bec95 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/UI/ManualUI.razor @@ -0,0 +1,8 @@ +@page "/ui/manualui" +@inherits RenderableComponentBase + +

Control

+ +
+ +
\ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Pages/_Host.cshtml b/src/tests.integrations/integrated/src/integrated.app/Pages/_Host.cshtml new file mode 100644 index 00000000..31e589bc --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Pages/_Host.cshtml @@ -0,0 +1,39 @@ +@page "/" +@using integrated.hmi +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Mvc.TagHelpers +@namespace ix_draft_blazor.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers + + + + + + + + + + + + + + + + + + +
+ + An error has occurred. This application may no longer respond until reloaded. + + + An unhandled exception has occurred. See browser dev tools for details. + + Reload + 🗙 +
+ + + + + diff --git a/src/tests.integrations/integrated/src/integrated.app/Program.cs b/src/tests.integrations/integrated/src/integrated.app/Program.cs new file mode 100644 index 00000000..a698407d --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Program.cs @@ -0,0 +1,58 @@ +using Ix.Presentation.Blazor.Services; +using ix_draft_blazor.Areas.Identity; +using ix_draft_blazor.Data; +using integrated; +using Ix.Connector; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI; +using Microsoft.EntityFrameworkCore; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found."); +builder.Services.AddDbContext(options => + options.UseSqlServer(connectionString)); +builder.Services.AddDatabaseDeveloperPageExceptionFilter(); +builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) + .AddEntityFrameworkStores(); +builder.Services.AddRazorPages(); +builder.Services.AddServerSideBlazor(); +builder.Services.AddScoped>(); + +builder.Services.AddIxBlazorServices(); + +Entry.Plc.Connector.ExceptionBehaviour = CommExceptionBehaviour.Ignore; + +Entry.Plc.Connector.BuildAndStart().ReadWriteCycleDelay = 100; + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseMigrationsEndPoint(); +} +else +{ + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.UseHttpsRedirection(); + +app.UseStaticFiles(); + +app.UseRouting(); + +app.UseAuthorization(); + +app.MapControllers(); +app.MapBlazorHub(); +app.MapFallbackToPage("/_Host"); + +app.Run(); diff --git a/src/tests.integrations/integrated/src/integrated.app/Properties/launchSettings.json b/src/tests.integrations/integrated/src/integrated.app/Properties/launchSettings.json new file mode 100644 index 00000000..b459edb2 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Properties/launchSettings.json @@ -0,0 +1,37 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:48829", + "sslPort": 44305 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5262", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7292;http://localhost:5262", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Properties/serviceDependencies.json b/src/tests.integrations/integrated/src/integrated.app/Properties/serviceDependencies.json new file mode 100644 index 00000000..d8177e07 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Properties/serviceDependencies.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "mssql1": { + "type": "mssql", + "connectionId": "ConnectionStrings:DefaultConnection" + } + } +} \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Properties/serviceDependencies.local.json b/src/tests.integrations/integrated/src/integrated.app/Properties/serviceDependencies.local.json new file mode 100644 index 00000000..299aa9aa --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Properties/serviceDependencies.local.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "mssql1": { + "type": "mssql.local", + "connectionId": "ConnectionStrings:DefaultConnection" + } + } +} \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/IAmHereIndicator.razor b/src/tests.integrations/integrated/src/integrated.app/Shared/IAmHereIndicator.razor new file mode 100644 index 00000000..303e3221 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/IAmHereIndicator.razor @@ -0,0 +1,32 @@ +
+ +
+ +@code { + [Inject] + private NavigationManager? MyNavigationManager { get; set; } + + public string[] uri { get; set; } + + private string partialLink { get; set; } + + protected override void OnInitialized() + { + uri = MyNavigationManager.ToBaseRelativePath(MyNavigationManager.Uri).Split('/'); + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/LoginDisplay.razor b/src/tests.integrations/integrated/src/integrated.app/Shared/LoginDisplay.razor new file mode 100644 index 00000000..0b456633 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/LoginDisplay.razor @@ -0,0 +1,22 @@ + + + + + + Log in + + \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/MainLayout.razor b/src/tests.integrations/integrated/src/integrated.app/Shared/MainLayout.razor new file mode 100644 index 00000000..26a0b417 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/MainLayout.razor @@ -0,0 +1,13 @@ +@inherits LayoutComponentBase + +ix-draft-blazor + +
+
+ +
+ @Body +
+
+ +
\ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/MainLayout.razor.css b/src/tests.integrations/integrated/src/integrated.app/Shared/MainLayout.razor.css new file mode 100644 index 00000000..47e52915 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/MainLayout.razor.css @@ -0,0 +1,15 @@ +.page { + position: relative; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +@media (min-width: 641px) { + .page { + flex-direction: row; + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/ExpandableMenuItem.razor b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/ExpandableMenuItem.razor new file mode 100644 index 00000000..3e4f95cb --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/ExpandableMenuItem.razor @@ -0,0 +1,84 @@ +
+ + + +
+ + @ChildContent + +
+
+ +@code { + [Inject] + private NavigationManager? MyNavigationManager { get; set; } + + [Parameter] + public RenderFragment? ChildContent { get; set; } + + [Parameter] + public string? Name { get; set; } = null; + [Parameter] + public string? Link { get; set; } = null; + [Parameter] + public string? Icon { get; set; } = null; + + private bool _isCollapsed = true; + + private string? _dashedName { get; set; } + + [CascadingParameter] + protected ExpandableMenuItem? parent { get; set; } + + protected override void OnInitialized() + { + _dashedName = Name?.Replace(' ', '-').ToLower(); + + var relativePath = MyNavigationManager!.ToBaseRelativePath(MyNavigationManager.Uri); + + if (relativePath.Contains(GetLink())) + { + _isCollapsed = false; + } + } + + public string GetLink() + { + if (Link != null) + return Link; + + if (parent != null) + { + return $"{parent.GetLink()}/{_dashedName}"; + } + return $"{_dashedName}"; + } + + private void Collapse() + { + _isCollapsed = !_isCollapsed; + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/ExpandableMenuItem.razor.css b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/ExpandableMenuItem.razor.css new file mode 100644 index 00000000..43ed5faa --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/ExpandableMenuItem.razor.css @@ -0,0 +1,50 @@ +.oi { + width: 2rem; + font-size: 1.1rem; + vertical-align: text-top; +} + +.nav-item { + padding: 0; + font-size: 0.9rem; +} + + .nav-item:first-of-type, + .nav-item:last-of-type { + padding: 0; + } + + .nav-item ::deep a { + color: #000000; + display: flex; + align-items: center; + border-radius: 20px; + margin: 0.5rem; + line-height: 2rem; + text-transform: uppercase; + padding: 0.5rem 0.5rem; + cursor: pointer; + user-select: none; + overflow: hidden; + } + + .nav-item ::deep a.active { + background-color: rgba(13, 110, 253, 1); + color: #000000; + } + + .nav-item ::deep a:hover { + background-color: rgba(13, 110, 253, 0.6); + color: #000000; + } + +.oi-chevron-top { + transform: rotate(0deg); + transition: transform .2s linear; + transform-origin: 25.3% 62%; +} + .oi-chevron-top.open { + transform: rotate(180deg); + transition: transform .2s linear; + transform-origin: 25.3% 62%; + } \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/MenuItem.razor b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/MenuItem.razor new file mode 100644 index 00000000..0401120e --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/MenuItem.razor @@ -0,0 +1,42 @@ + +@code { + [Parameter] + public string? Name { get; set; } = null; + [Parameter] + public string? Link { get; set; } = null; + [Parameter] + public string? Icon { get; set; } = null; + + private string? _dashedName { get; set; } + + [CascadingParameter] + protected ExpandableMenuItem? parent { get; set; } + + protected override void OnInitialized() + { + _dashedName = Name?.Replace(' ', '-').ToLower(); + + base.OnInitialized(); + } + + public string GetLink() + { + if (Link != null) + return Link; + + if (parent != null) + { + return $"{parent.GetLink()}/{_dashedName}"; + } + return $"{_dashedName}"; + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/MenuItem.razor.css b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/MenuItem.razor.css new file mode 100644 index 00000000..f2766ee6 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/Menu/MenuItem.razor.css @@ -0,0 +1,39 @@ +.oi { + width: 2rem; + font-size: 1.1rem; + vertical-align: text-top; +} + +.nav-item { + padding: 0; + font-size: 0.9rem; +} + + .nav-item:first-of-type, + .nav-item:last-of-type { + padding: 0; + } + + .nav-item ::deep a { + color: #000000; + display: flex; + align-items: center; + border-radius: 20px; + margin: 0.5rem; + line-height: 2rem; + text-transform: uppercase; + padding: 0.5rem 0.5rem; + cursor: pointer; + user-select: none; + overflow: hidden; + } + + .nav-item ::deep a.active { + background-color: rgba(13, 110, 253, 1); + color: #000000; + } + + .nav-item ::deep a:hover { + background-color: rgba(13, 110, 253, 0.6); + color: #000000; + } diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/NavMenu.razor b/src/tests.integrations/integrated/src/integrated.app/Shared/NavMenu.razor new file mode 100644 index 00000000..86804647 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/NavMenu.razor @@ -0,0 +1,29 @@ + + +@code { + private bool collapseNavMenu = true; + + private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; + + private void ToggleNavMenu() + { + collapseNavMenu = !collapseNavMenu; + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/NavMenu.razor.css b/src/tests.integrations/integrated/src/integrated.app/Shared/NavMenu.razor.css new file mode 100644 index 00000000..775077f1 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/NavMenu.razor.css @@ -0,0 +1,31 @@ +.nav-menu { + border-left: 1px solid rgba(13, 110, 253, 1); +} + +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +@media (min-width: 641px) { + .nav-menu { + width: 250px; + height: 100vh; + position: sticky; + top: 0; + } + + .navbar-toggler { + display: none; + } + + .collapse { + /* Never collapse the sidebar for wide screens */ + display: block; + } + + .nav-scrollable { + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/TopRow.razor b/src/tests.integrations/integrated/src/integrated.app/Shared/TopRow.razor new file mode 100644 index 00000000..7e4de66f --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/TopRow.razor @@ -0,0 +1,12 @@ +
+ + + + +
+ +
+
+ +
+
\ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/Shared/TopRow.razor.css b/src/tests.integrations/integrated/src/integrated.app/Shared/TopRow.razor.css new file mode 100644 index 00000000..60e5cb50 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/Shared/TopRow.razor.css @@ -0,0 +1,7 @@ +.top-row { + background-color: #f7f7f7; + border-bottom: 1px solid #d6d5d5; + height: 3.5rem; + display: flex; + align-items: center; +} diff --git a/src/tests.integrations/integrated/src/integrated.app/_Imports.razor b/src/tests.integrations/integrated/src/integrated.app/_Imports.razor new file mode 100644 index 00000000..21978e45 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/_Imports.razor @@ -0,0 +1,13 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using integrated.hmi +@using integrated.hmi.Shared +@using integrated.hmi.Shared.Menu +@using Ix.Presentation.Blazor.Controls.RenderableContent +@using Ix.Connector; \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/appsettings.Development.json b/src/tests.integrations/integrated/src/integrated.app/appsettings.Development.json new file mode 100644 index 00000000..770d3e93 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/tests.integrations/integrated/src/integrated.app/appsettings.json b/src/tests.integrations/integrated/src/integrated.app/appsettings.json new file mode 100644 index 00000000..a9105198 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/appsettings.json @@ -0,0 +1,12 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-integrated.hmi-ee3150da-5237-49bc-b265-f512331ded6c;Trusted_Connection=True;MultipleActiveResultSets=true" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/src/tests.integrations/integrated/src/integrated.app/integrated.hmi.csproj b/src/tests.integrations/integrated/src/integrated.app/integrated.hmi.csproj new file mode 100644 index 00000000..d925876d --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/integrated.hmi.csproj @@ -0,0 +1,36 @@ + + + + net7.0 + enable + enable + aspnet-integrated-hmi-ee3150da-5237-49bc-b265-f512331ded6c + integrated.hmi + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests.integrations/integrated/src/integrated.app/wwwroot/banner_wider.png b/src/tests.integrations/integrated/src/integrated.app/wwwroot/banner_wider.png new file mode 100644 index 00000000..ad81506c Binary files /dev/null and b/src/tests.integrations/integrated/src/integrated.app/wwwroot/banner_wider.png differ diff --git a/src/tests.integrations/integrated/src/integrated.app/wwwroot/css/bootstrap/bootstrap.min.css b/src/tests.integrations/integrated/src/integrated.app/wwwroot/css/bootstrap/bootstrap.min.css new file mode 100644 index 00000000..02ae65b5 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/wwwroot/css/bootstrap/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-rgb:33,37,41;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/integrated.app/wwwroot/css/bootstrap/bootstrap.min.css.map b/src/tests.integrations/integrated/src/integrated.app/wwwroot/css/bootstrap/bootstrap.min.css.map new file mode 100644 index 00000000..afcd9e33 --- /dev/null +++ b/src/tests.integrations/integrated/src/integrated.app/wwwroot/css/bootstrap/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-rgb: #{to-rgb($body-color)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}-root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`