From 8bf9e58380799ccb27a2b15b64713a4843fd1e3e Mon Sep 17 00:00:00 2001 From: guardrex <1622880+guardrex@users.noreply.github.com> Date: Tue, 5 Dec 2023 14:11:17 -0500 Subject: [PATCH 1/7] Add Blazor Web App snippet sample app --- .../BlazorSample.Client/BlazorRocksBase.cs | 9 ++ .../BlazorSample.Client.csproj | 19 +++ .../BlazorSample.Client/ComponentMetadata.cs | 6 + .../CustomFieldClassProvider.cs | 12 ++ .../CustomFieldClassProvider2.cs | 17 ++ .../CustomFieldClassProvider3.cs | 26 +++ .../BlazorSample.Client/CustomValidation.cs | 50 ++++++ .../BlazorSample.Client/DITopicClasses.cs | 15 ++ .../BlazorSample.Client/ExampleModel.cs | 8 + .../BlazorSample.Client/HelloHelper.cs | 14 ++ .../BlazorSample.Client/JsInteropClasses1.cs | 20 +++ .../BlazorSample.Client/JsInteropClasses2.cs | 20 +++ .../BlazorSample.Client/JsInteropClasses3.cs | 17 ++ .../MessageUpdateInvokeHelper.cs | 17 ++ .../BlazorSample.Client/Model.cs | 8 + .../BlazorSample.Client/NotifierService.cs | 14 ++ .../Pages/AfterRender.razor | 32 ++++ .../Pages/AttributeOrderParent1.razor | 3 + .../Pages/AttributeOrderParent2.razor | 3 + .../Pages/BackgroundWork.razor | 56 +++++++ .../BlazorSample.Client/Pages/Bind.razor | 20 +++ .../BlazorSample.Client/Pages/BindEvent.razor | 13 ++ .../Pages/BindTheory.razor | 24 +++ .../Pages/BlazorRocks.razor | 4 + .../Pages/BlazorRoute.razor | 4 + .../Pages/BuiltContent.razor | 30 ++++ .../Pages/CallDotNetExample1.razor | 17 ++ .../Pages/CallDotNetExample2.razor | 45 ++++++ .../Pages/CallDotNetExample3.razor | 45 ++++++ .../Pages/CallDotNetExample4.razor | 39 +++++ .../Pages/CallDotNetExample5.razor | 31 ++++ .../Pages/CallDotNetExample6.razor | 10 ++ .../Pages/CallDotNetExample7.razor | 10 ++ .../Pages/CallJsExample1.razor | 36 +++++ .../Pages/CallJsExample11.razor | 33 ++++ .../Pages/CallJsExample2.razor | 27 ++++ .../Pages/CallJsExample3.razor | 39 +++++ .../Pages/CallJsExample4.razor | 36 +++++ .../Pages/CallJsExample5.razor | 47 ++++++ .../Pages/CallJsExample6.razor | 44 +++++ .../Pages/CallJsExample7.razor | 9 ++ .../Pages/CallJsExample7.razor.cs | 75 +++++++++ .../Pages/CallJsExample8.razor | 50 ++++++ .../BlazorSample.Client/Pages/CatchAll.razor | 6 + .../Pages/ConditionalAttribute.razor | 15 ++ .../Pages/ControlHeadContent.razor | 22 +++ .../Pages/ControlRender.razor | 27 ++++ .../BlazorSample.Client/Pages/Counter.razor | 18 +++ .../BlazorSample.Client/Pages/Counter1.razor | 19 +++ .../BlazorSample.Client/Pages/Counter2.razor | 20 +++ .../Pages/CounterAuto.razor | 19 +++ .../Pages/CounterPartialClass.razor | 9 ++ .../Pages/CounterPartialClass.razor.cs | 11 ++ .../Pages/CounterState1.razor | 31 ++++ .../Pages/CounterState2.razor | 31 ++++ .../Pages/CounterWebAssembly.razor | 19 +++ .../Pages/CounterWithTimerDisposal1.razor | 29 ++++ .../Pages/CounterWithTimerDisposal2.razor | 30 ++++ .../Pages/CustomerList.razor | 32 ++++ .../Pages/DateBinding.razor | 16 ++ .../Pages/DecimalBinding.razor | 32 ++++ .../Pages/DoctorWhoLayout.razor | 23 +++ .../Pages/DynamicComponentExample1.razor | 38 +++++ .../Pages/DynamicComponentExample2.razor | 82 ++++++++++ .../Pages/DynamicComponentExample3.razor | 121 ++++++++++++++ .../BlazorSample.Client/Pages/Episodes.razor | 22 +++ .../Pages/EventHandlerExample1.razor | 36 +++++ .../Pages/EventHandlerExample2.razor | 25 +++ .../Pages/EventHandlerExample3.razor | 21 +++ .../Pages/EventHandlerExample4.razor | 13 ++ .../Pages/EventHandlerExample5.razor | 23 +++ .../Pages/EventHandlerExample6.razor | 17 ++ .../Pages/EventHandlerExample7.razor | 34 ++++ .../Pages/EventHandlerExample8.razor | 18 +++ .../BlazorSample.Client/Pages/Example.razor | 10 ++ .../Pages/ExpanderExample.razor | 11 ++ .../BlazorSample.Client/Pages/FetchData.razor | 26 +++ .../Pages/FileDownload1.razor | 29 ++++ .../Pages/FileDownload2.razor | 17 ++ .../Pages/FileUpload1.razor | 87 ++++++++++ .../Pages/FileUpload2.razor | 153 ++++++++++++++++++ .../Pages/FileUpload3.razor | 102 ++++++++++++ .../Pages/FormExample1.razor | 23 +++ .../Pages/FormExample2.razor | 73 +++++++++ .../Pages/FormExample3.razor | 57 +++++++ .../Pages/FormExample4.razor | 75 +++++++++ .../Pages/FormExample5.razor | 69 ++++++++ .../Pages/FormExample7.razor | 27 ++++ .../Pages/FormExample8.razor | 30 ++++ .../Pages/FormExample9.razor | 62 +++++++ .../Pages/GenericTypeExample1.razor | 9 ++ .../Pages/HeadingExample.razor | 3 + .../Pages/HelloWorld.razor | 3 + .../BlazorSample.Client/Pages/Markup.razor | 8 + .../Pages/MarkupStringExample.razor | 8 + .../BlazorSample.Client/Pages/Navigate.razor | 33 ++++ .../BlazorSample.Client/Pages/OnInit.razor | 12 ++ .../Pages/OnParamsSet.razor | 25 +++ .../Pages/ParameterParent.razor | 10 ++ .../Pages/ParameterParent2.razor | 24 +++ .../Pages/ParameterParent3.razor | 14 ++ .../BlazorSample.Client/Pages/Parent.razor | 18 +++ .../BlazorSample.Client/Pages/Parent1.razor | 19 +++ .../BlazorSample.Client/Pages/Parent2.razor | 20 +++ .../Pages/PasswordBinding.razor | 13 ++ .../Pages/PeopleExample.razor | 46 ++++++ .../BlazorSample.Client/Pages/Pets1.razor | 29 ++++ .../BlazorSample.Client/Pages/Pets2.razor | 29 ++++ .../BlazorSample.Client/Pages/Pets3.razor | 29 ++++ .../BlazorSample.Client/Pages/Pets4.razor | 29 ++++ .../Pages/PrerenderedInterop1.razor | 18 +++ .../Pages/PrerenderedInterop2.razor | 31 ++++ .../Pages/ProductDetails.razor | 51 ++++++ .../Pages/RazorTemplate.razor | 15 ++ .../Pages/ReceiveNotifications.razor | 52 ++++++ .../Pages/ReferenceParent1.razor | 11 ++ .../Pages/ReferenceParent2.razor | 25 +++ .../Pages/RenderFragmentParent.razor | 8 + .../Pages/RenderNamedTupleParent.razor | 10 ++ .../Pages/RenderTupleParent.razor | 9 ++ .../Pages/RouteParameter.razor | 13 ++ .../Pages/RouteParameter1.razor | 8 + .../Pages/RouteParameter2.razor | 13 ++ .../Pages/SetParamsAsync.razor | 27 ++++ .../Pages/ShowImage1.razor | 27 ++++ .../Pages/ShowImage2.razor | 28 ++++ .../BlazorSample.Client/Pages/Splat.razor | 26 +++ .../BlazorSample.Client/Pages/Todo.razor | 32 ++++ .../Pages/UnparsableValues.razor | 13 ++ .../BlazorSample.Client/Pages/User.razor | 8 + .../BlazorSample.Client/PanelBody.cs | 5 + .../BlazorSample.Client/Program.cs | 5 + .../Shared/AttributeOrderChild1.razor | 6 + .../Shared/AttributeOrderChild2.razor | 6 + .../Shared/BadExpander.razor | 23 +++ .../BlazorSample.Client/Shared/Child.razor | 16 ++ .../Shared/ChildBind.razor | 24 +++ .../Shared/CustomInputText.razor | 6 + .../BlazorSample.Client/Shared/Details.razor | 6 + .../Shared/DoctorWhoLayout.razor | 23 +++ .../Shared/DoctorWhoLayout2.razor | 22 +++ .../BlazorSample.Client/Shared/Expander.razor | 30 ++++ .../BlazorSample.Client/Shared/Heading.razor | 5 + .../Shared/ListGenericTypeItems1.razor | 16 ++ .../Shared/ListItem1.razor | 33 ++++ .../Shared/ListItem2.razor | 32 ++++ .../Shared/MainLayout.razor | 17 ++ .../Shared/MeasureLatency.razor | 28 ++++ .../Shared/NestedChild.razor | 26 +++ .../Shared/NestedGrandchild.razor | 23 +++ .../Shared/ParameterChild.razor | 19 +++ .../Shared/PasswordEntry.razor | 40 +++++ .../Shared/PasswordEntry2.razor | 53 ++++++ .../Shared/PetDetails.razor | 9 ++ .../Shared/ProductionsLayout.razor | 17 ++ .../Shared/ReferenceChild.razor | 9 ++ .../Shared/RenderFragmentChild.razor | 9 ++ .../Shared/RenderNamedTupleChild.razor | 15 ++ .../Shared/RenderTupleChild.razor | 15 ++ .../Shared/RocketLab.razor | 6 + .../Shared/RocketLab2.razor | 15 ++ .../Shared/RocketLabWithWindowSeat.razor | 15 ++ .../BlazorSample.Client/Shared/SpaceX.razor | 6 + .../BlazorSample.Client/Shared/SpaceX2.razor | 15 ++ .../Shared/SurveyPrompt.razor | 16 ++ .../Shared/SurveyPrompt.razor.cs | 46 ++++++ .../Shared/TableTemplate.razor | 28 ++++ .../Shared/UnitedLaunchAlliance.razor | 6 + .../Shared/UnitedLaunchAlliance2.razor | 15 ++ .../Shared/VirginGalactic.razor | 6 + .../Shared/VirginGalactic2.razor | 15 ++ .../BlazorSample.Client/Starship.cs | 24 +++ .../BlazorSample.Client/TimerService.cs | 39 +++++ .../BlazorSample.Client/TodoItem.cs | 5 + .../BlazorSample.Client/UploadResult.cs | 7 + .../BlazorSample.Client/WeatherForecast.cs | 12 ++ .../WeatherForecastService.cs | 19 +++ .../BlazorSample.Client/_Imports.razor | 10 ++ .../wwwroot/appsettings.Development.json | 8 + .../wwwroot/appsettings.json | 8 + .../wwwroot/files/quote.txt | 5 + .../wwwroot/images/image1.png | Bin 0 -> 150 bytes .../wwwroot/images/image2.png | Bin 0 -> 623 bytes .../wwwroot/images/image3.png | Bin 0 -> 798 bytes .../wwwroot/mapComponent.js | 16 ++ .../BlazorSample.Client/wwwroot/scripts.js | 3 + .../BlazorSample/BlazorSample.csproj | 14 ++ .../BlazorSample/Components/App.razor | 135 ++++++++++++++++ .../Components/Layout/MainLayout.razor | 23 +++ .../Components/Layout/MainLayout.razor.css | 96 +++++++++++ .../Components/Layout/NavMenu.razor | 38 +++++ .../Components/Layout/NavMenu.razor.css | 105 ++++++++++++ .../Components/Pages/CounterServer.razor | 19 +++ .../BlazorSample/Components/Pages/Error.razor | 36 +++++ .../BlazorSample/Components/Pages/Home.razor | 7 + .../Components/Pages/Weather.razor | 64 ++++++++ .../BlazorSample/Components/Routes.razor | 6 + .../BlazorSample/Components/_Imports.razor | 12 ++ ...ctIncorrectUsagesOfTransientDisposables.cs | 145 +++++++++++++++++ .../BlazorSample/Program.cs | 38 +++++ .../Properties/launchSettings.json | 41 +++++ .../BlazorSample/TrackingCircuitHandler.cs | 24 +++ .../BlazorSample/appsettings.Development.json | 8 + .../BlazorSample/appsettings.json | 9 ++ .../BlazorSample/wwwroot/app.css | 51 ++++++ .../wwwroot/bootstrap/bootstrap.min.css | 7 + .../wwwroot/bootstrap/bootstrap.min.css.map | 1 + .../BlazorSample/wwwroot/favicon.png | Bin 0 -> 1148 bytes 208 files changed, 5332 insertions(+) create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorRocksBase.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorSample.Client.csproj create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ComponentMetadata.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider2.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider3.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomValidation.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/DITopicClasses.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ExampleModel.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/HelloHelper.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses1.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses2.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses3.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/MessageUpdateInvokeHelper.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Model.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/NotifierService.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AfterRender.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BackgroundWork.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Bind.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindEvent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindTheory.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRocks.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRoute.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BuiltContent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample4.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample5.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample6.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample7.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample11.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample4.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample5.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample6.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample8.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CatchAll.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ConditionalAttribute.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlHeadContent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlRender.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterAuto.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWebAssembly.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CustomerList.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DateBinding.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DecimalBinding.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DoctorWhoLayout.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Episodes.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample4.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample5.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample6.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample7.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample8.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Example.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ExpanderExample.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FetchData.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample4.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample5.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample7.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample8.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample9.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/GenericTypeExample1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HeadingExample.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HelloWorld.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Markup.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/MarkupStringExample.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Navigate.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnInit.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnParamsSet.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PasswordBinding.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PeopleExample.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets3.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets4.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ProductDetails.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RazorTemplate.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReceiveNotifications.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderFragmentParent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderNamedTupleParent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderTupleParent.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/SetParamsAsync.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Splat.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Todo.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/UnparsableValues.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/User.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/PanelBody.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Program.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/BadExpander.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Child.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ChildBind.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/CustomInputText.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Details.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Expander.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Heading.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListGenericTypeItems1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem1.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MainLayout.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MeasureLatency.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedChild.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedGrandchild.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ParameterChild.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PetDetails.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ProductionsLayout.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ReferenceChild.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderFragmentChild.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderNamedTupleChild.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderTupleChild.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLabWithWindowSeat.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/TableTemplate.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic2.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Starship.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TimerService.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TodoItem.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/UploadResult.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecast.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecastService.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/_Imports.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.Development.json create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.json create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/files/quote.txt create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image1.png create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image2.png create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image3.png create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/mapComponent.js create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/scripts.js create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/BlazorSample.csproj create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/App.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor.css create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor.css create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/CounterServer.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Error.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Home.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Weather.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Routes.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/_Imports.razor create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/DetectIncorrectUsagesOfTransientDisposables.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Program.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/Properties/launchSettings.json create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/TrackingCircuitHandler.cs create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.Development.json create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.json create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/app.css create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/bootstrap/bootstrap.min.css create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/bootstrap/bootstrap.min.css.map create mode 100644 8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/favicon.png diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorRocksBase.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorRocksBase.cs new file mode 100644 index 00000000..70d7fc55 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorRocksBase.cs @@ -0,0 +1,9 @@ +using Microsoft.AspNetCore.Components; + +namespace BlazorSample.Client; + +public class BlazorRocksBase : ComponentBase +{ + public string BlazorRocksText { get; set; } = + "Blazor rocks the browser!"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorSample.Client.csproj b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorSample.Client.csproj new file mode 100644 index 00000000..d22986bc --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/BlazorSample.Client.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + enable + enable + true + Default + + + + + + + + + + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ComponentMetadata.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ComponentMetadata.cs new file mode 100644 index 00000000..0aa8c656 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ComponentMetadata.cs @@ -0,0 +1,6 @@ +public class ComponentMetadata +{ + public string? Name { get; set; } + public Dictionary Parameters { get; set; } = + new Dictionary(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider.cs new file mode 100644 index 00000000..2acb5af2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components.Forms; + +public class CustomFieldClassProvider : FieldCssClassProvider +{ + public override string GetFieldCssClass(EditContext editContext, + in FieldIdentifier fieldIdentifier) + { + var isValid = !editContext.GetValidationMessages(fieldIdentifier).Any(); + + return isValid ? "validField" : "invalidField"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider2.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider2.cs new file mode 100644 index 00000000..4fbfb63e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider2.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Components.Forms; + +public class CustomFieldClassProvider2 : FieldCssClassProvider +{ + public override string GetFieldCssClass(EditContext editContext, + in FieldIdentifier fieldIdentifier) + { + if (fieldIdentifier.FieldName == "Name") + { + var isValid = !editContext.GetValidationMessages(fieldIdentifier).Any(); + + return isValid ? "validField" : "invalidField"; + } + + return string.Empty; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider3.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider3.cs new file mode 100644 index 00000000..98ebfaa7 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomFieldClassProvider3.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Components.Forms; + +public class CustomFieldClassProvider3 : FieldCssClassProvider +{ + public override string GetFieldCssClass(EditContext editContext, + in FieldIdentifier fieldIdentifier) + { + var isValid = !editContext.GetValidationMessages(fieldIdentifier).Any(); + + if (fieldIdentifier.FieldName == "Name") + { + return isValid ? "validField" : "invalidField"; + } + else + { + if (editContext.IsModified(fieldIdentifier)) + { + return isValid ? "modified valid" : "modified invalid"; + } + else + { + return isValid ? "valid" : "invalid"; + } + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomValidation.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomValidation.cs new file mode 100644 index 00000000..1d8d0922 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/CustomValidation.cs @@ -0,0 +1,50 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; + +namespace BlazorSample.Client; + +public class CustomValidation : ComponentBase +{ + private ValidationMessageStore? messageStore; + + [CascadingParameter] + private EditContext? CurrentEditContext { get; set; } + + protected override void OnInitialized() + { + if (CurrentEditContext is null) + { + throw new InvalidOperationException( + $"{nameof(CustomValidation)} requires a cascading " + + $"parameter of type {nameof(EditContext)}. " + + $"For example, you can use {nameof(CustomValidation)} " + + $"inside an {nameof(EditForm)}."); + } + + messageStore = new(CurrentEditContext); + + CurrentEditContext.OnValidationRequested += (s, e) => + messageStore?.Clear(); + CurrentEditContext.OnFieldChanged += (s, e) => + messageStore?.Clear(e.FieldIdentifier); + } + + public void DisplayErrors(Dictionary> errors) + { + if (CurrentEditContext is not null) + { + foreach (var err in errors) + { + messageStore?.Add(CurrentEditContext.Field(err.Key), err.Value); + } + + CurrentEditContext.NotifyValidationStateChanged(); + } + } + + public void ClearErrors() + { + messageStore?.Clear(); + CurrentEditContext?.NotifyValidationStateChanged(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/DITopicClasses.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/DITopicClasses.cs new file mode 100644 index 00000000..be73d66a --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/DITopicClasses.cs @@ -0,0 +1,15 @@ +public class Setting +{ + public string? SettingName { get; set; } + public string? SettingValue { get; set; } +} + +public interface IUserService +{ + public string? Name { get; set; } +} + +public interface ISettingService +{ + public IList GetSettings(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ExampleModel.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ExampleModel.cs new file mode 100644 index 00000000..26d0d2a8 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/ExampleModel.cs @@ -0,0 +1,8 @@ +using System.ComponentModel.DataAnnotations; + +public class ExampleModel +{ + [Required] + [StringLength(10, ErrorMessage = "Name is too long.")] + public string Name { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/HelloHelper.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/HelloHelper.cs new file mode 100644 index 00000000..0b7bb9cd --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/HelloHelper.cs @@ -0,0 +1,14 @@ +using Microsoft.JSInterop; + +public class HelloHelper +{ + public HelloHelper(string? name) + { + Name = name ?? "No Name"; + } + + public string? Name { get; set; } + + [JSInvokable] + public string GetHelloMessage() => $"Hello, {Name}!"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses1.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses1.cs new file mode 100644 index 00000000..e84e5396 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses1.cs @@ -0,0 +1,20 @@ +using Microsoft.JSInterop; + +public class JsInteropClasses1 : IDisposable +{ + private readonly IJSRuntime js; + + public JsInteropClasses1(IJSRuntime js) + { + this.js = js; + } + + public async ValueTask TickerChanged(string symbol, decimal price) + { + await js.InvokeVoidAsync("displayTickerAlert1", symbol, price); + } + + public void Dispose() + { + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses2.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses2.cs new file mode 100644 index 00000000..4b6a71a7 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses2.cs @@ -0,0 +1,20 @@ +using Microsoft.JSInterop; + +public class JsInteropClasses2 : IDisposable +{ + private readonly IJSRuntime js; + + public JsInteropClasses2(IJSRuntime js) + { + this.js = js; + } + + public async ValueTask TickerChanged(string symbol, decimal price) + { + return await js.InvokeAsync("displayTickerAlert2", symbol, price); + } + + public void Dispose() + { + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses3.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses3.cs new file mode 100644 index 00000000..c40ccd26 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/JsInteropClasses3.cs @@ -0,0 +1,17 @@ +using Microsoft.JSInterop; + +public class JsInteropClasses3 +{ + private readonly IJSRuntime js; + + public JsInteropClasses3(IJSRuntime js) + { + this.js = js; + } + + public async ValueTask CallHelloHelperGetHelloMessage(string? name) + { + using var objRef = DotNetObjectReference.Create(new HelloHelper(name)); + return await js.InvokeAsync("sayHello1", objRef); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/MessageUpdateInvokeHelper.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/MessageUpdateInvokeHelper.cs new file mode 100644 index 00000000..318ac3cc --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/MessageUpdateInvokeHelper.cs @@ -0,0 +1,17 @@ +using Microsoft.JSInterop; + +public class MessageUpdateInvokeHelper +{ + private Action action; + + public MessageUpdateInvokeHelper(Action action) + { + this.action = action; + } + + [JSInvokable] + public void UpdateMessageCaller() + { + action.Invoke(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Model.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Model.cs new file mode 100644 index 00000000..166e52c7 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Model.cs @@ -0,0 +1,8 @@ +using System.ComponentModel.DataAnnotations; + +public class Model +{ + [Required] + [StringLength(10, ErrorMessage = "Name is too long.")] + public string? Name { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/NotifierService.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/NotifierService.cs new file mode 100644 index 00000000..21c7636b --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/NotifierService.cs @@ -0,0 +1,14 @@ +namespace BlazorSample.Client; + +public class NotifierService +{ + public async Task Update(string key, int value) + { + if (Notify != null) + { + await Notify.Invoke(key, value); + } + } + + public event Func? Notify; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AfterRender.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AfterRender.razor new file mode 100644 index 00000000..853c3ab2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AfterRender.razor @@ -0,0 +1,32 @@ +@page "/after-render" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + + + +@code { + private string message = "Initial assigned message."; + + protected override void OnAfterRender(bool firstRender) + { + Logger.LogInformation("OnAfterRender(1): firstRender: " + + "{FirstRender}, message: {Message}", firstRender, message); + + if (firstRender) + { + message = "Executed for the first render."; + } + else + { + message = "Executed after the first render."; + } + + Logger.LogInformation("OnAfterRender(2): firstRender: " + + "{FirstRender}, message: {Message}", firstRender, message); + } + + private void LogInformation() + { + Logger.LogInformation("LogInformation called"); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent1.razor new file mode 100644 index 00000000..83c7af9c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent1.razor @@ -0,0 +1,3 @@ +@page "/attribute-order-parent-1" + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent2.razor new file mode 100644 index 00000000..1186f03c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/AttributeOrderParent2.razor @@ -0,0 +1,3 @@ +@page "/attribute-order-parent-2" + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BackgroundWork.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BackgroundWork.razor new file mode 100644 index 00000000..675885a3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BackgroundWork.razor @@ -0,0 +1,56 @@ +@page "/background-work" +@using System.Threading +@using Microsoft.Extensions.Logging +@implements IDisposable +@inject ILogger Logger + + + + +@code { + private Resource resource = new(); + private CancellationTokenSource cts = new(); + + protected async Task LongRunningWork() + { + Logger.LogInformation("Long running work started"); + + await Task.Delay(5000, cts.Token); + + cts.Token.ThrowIfCancellationRequested(); + resource.BackgroundResourceMethod(Logger); + } + + public void Dispose() + { + Logger.LogInformation("Executing Dispose"); + cts.Cancel(); + cts.Dispose(); + resource?.Dispose(); + } + + private class Resource : IDisposable + { + private bool disposed; + + public void BackgroundResourceMethod(ILogger logger) + { + logger.LogInformation("BackgroundResourceMethod: Start method"); + + if (disposed) + { + logger.LogInformation("BackgroundResourceMethod: Disposed"); + throw new ObjectDisposedException(nameof(Resource)); + } + + // Take action on the Resource + + logger.LogInformation("BackgroundResourceMethod: Action on Resource"); + } + + public void Dispose() + { + disposed = true; + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Bind.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Bind.razor new file mode 100644 index 00000000..4dcc38ff --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Bind.razor @@ -0,0 +1,20 @@ +@page "/bind" + +

+ +

+ +

+ +

+ +
    +
  • inputValue: @inputValue
  • +
  • InputValue: @InputValue
  • +
+ +@code { + private string? inputValue; + + private string? InputValue { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindEvent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindEvent.razor new file mode 100644 index 00000000..6f034c22 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindEvent.razor @@ -0,0 +1,13 @@ +@page "/bind-event" + +

+ +

+ +

+ InputValue: @InputValue +

+ +@code { + private string? InputValue { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindTheory.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindTheory.razor new file mode 100644 index 00000000..3048ca7d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BindTheory.razor @@ -0,0 +1,24 @@ +@page "/bind-theory" + +

+ +

+ +

+ +

+ +

+ InputValue: @InputValue +

+ +@code { + private string? InputValue { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRocks.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRocks.razor new file mode 100644 index 00000000..cf43d094 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRocks.razor @@ -0,0 +1,4 @@ +@page "/blazor-rocks" +@inherits BlazorRocksBase + +

@BlazorRocksText

diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRoute.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRoute.razor new file mode 100644 index 00000000..72169ed9 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BlazorRoute.razor @@ -0,0 +1,4 @@ +@page "/blazor-route" +@page "/different-blazor-route" + +

Blazor routing

diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BuiltContent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BuiltContent.razor new file mode 100644 index 00000000..cd2835fd --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/BuiltContent.razor @@ -0,0 +1,30 @@ +@page "/built-content" + +

Build a component

+ +
+ @CustomRender +
+ + + +@code { + private RenderFragment? CustomRender { get; set; } + + private RenderFragment CreateComponent() => builder => + { + for (var i = 0; i < 3; i++) + { + builder.OpenComponent(0, typeof(PetDetails)); + builder.AddAttribute(1, "PetDetailsQuote", "Someone's best friend!"); + builder.CloseComponent(); + } + }; + + private void RenderComponent() + { + CustomRender = CreateComponent(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample1.razor new file mode 100644 index 00000000..2a6c73d4 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample1.razor @@ -0,0 +1,17 @@ +@page "/call-dotnet-example-1" + +

Call .NET Example 1

+ +

+ +

+ +@code { + [JSInvokable] + public static Task ReturnArrayAsync() + { + return Task.FromResult(new int[] { 1, 2, 3 }); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample2.razor new file mode 100644 index 00000000..13c34161 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample2.razor @@ -0,0 +1,45 @@ +@page "/call-dotnet-example-2" +@implements IDisposable +@inject IJSRuntime JS + +

Call .NET Example 2

+ +

+ +

+ +

+ +

+ +

+ @result +

+ +@code { + private string? name; + private string? result; + private DotNetObjectReference? objRef; + + protected override void OnInitialized() + { + objRef = DotNetObjectReference.Create(this); + } + + public async Task TriggerDotNetInstanceMethod() + { + result = await JS.InvokeAsync("sayHello1", objRef); + } + + [JSInvokable] + public string GetHelloMessage() => $"Hello, {name}!"; + + public void Dispose() + { + objRef?.Dispose(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample3.razor new file mode 100644 index 00000000..ca7cc68c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample3.razor @@ -0,0 +1,45 @@ +@page "/call-dotnet-example-3" +@implements IDisposable +@inject IJSRuntime JS + +

Call .NET Example 3

+ +

+ +

+ +

+ +

+ +

+ @result +

+ +@code { + private string? name; + private string? result; + private DotNetObjectReference? objRef; + + protected override void OnInitialized() + { + objRef = DotNetObjectReference.Create(this); + } + + public async Task TriggerDotNetInstanceMethod() + { + result = await JS.InvokeAsync("sayHello2", objRef, name); + } + + [JSInvokable] + public string GetHelloMessage(string passedName) => $"Hello, {passedName}!"; + + public void Dispose() + { + objRef?.Dispose(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample4.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample4.razor new file mode 100644 index 00000000..2a0c1897 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample4.razor @@ -0,0 +1,39 @@ +@page "/call-dotnet-example-4" +@inject IJSRuntime JS + +

Call .NET Example 4

+ +

+ +

+ +

+ +

+ +

+ @result +

+ +@code { + private string? name; + private string? result; + private JsInteropClasses3? jsInteropClasses; + + protected override void OnInitialized() + { + jsInteropClasses = new JsInteropClasses3(JS); + } + + private async Task TriggerDotNetInstanceMethod() + { + if (jsInteropClasses is not null) + { + result = await jsInteropClasses.CallHelloHelperGetHelloMessage(name); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample5.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample5.razor new file mode 100644 index 00000000..2fea506d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample5.razor @@ -0,0 +1,31 @@ +@page "/call-dotnet-example-5" +@inject IJSRuntime JS + +

Call .NET Example 5

+ +

+ +

+ +

+ +

+ +

+ @result +

+ +@code { + private string? name; + private string? result; + + public async Task TriggerDotNetInstanceMethod() + { + using var objRef = DotNetObjectReference.Create(new HelloHelper(name)); + result = await JS.InvokeAsync("sayHello1", objRef); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample6.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample6.razor new file mode 100644 index 00000000..b3931763 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample6.razor @@ -0,0 +1,10 @@ +@page "/call-dotnet-example-6" + +

Call .NET Example 6

+ +
    + + + + +
diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample7.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample7.razor new file mode 100644 index 00000000..9e3da101 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallDotNetExample7.razor @@ -0,0 +1,10 @@ +@page "/call-dotnet-example-7" + +

Call .NET Example 7

+ +
    + + + + +
diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample1.razor new file mode 100644 index 00000000..26ae7dca --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample1.razor @@ -0,0 +1,36 @@ +@page "/call-js-example-1" +@inject IJSRuntime JS + +

Call JS convertArray Function

+ +

+ +

+ +

+ @text +

+ +

+ Quote ©2005 Universal Pictures: + Serenity
+ David Krumholtz on IMDB +

+ +@code { + private MarkupString text; + + private uint[] quoteArray = + new uint[] + { + 60, 101, 109, 62, 67, 97, 110, 39, 116, 32, 115, 116, 111, 112, 32, + 116, 104, 101, 32, 115, 105, 103, 110, 97, 108, 44, 32, 77, 97, + 108, 46, 60, 47, 101, 109, 62, 32, 45, 32, 77, 114, 46, 32, 85, 110, + 105, 118, 101, 114, 115, 101, 10, 10, + }; + + private async Task ConvertArray() + { + text = new(await JS.InvokeAsync("convertArray", quoteArray)); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample11.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample11.razor new file mode 100644 index 00000000..47eb5842 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample11.razor @@ -0,0 +1,33 @@ +@page "/call-js-example-11" +@inject IJSRuntime JS + +

Call JS Example 11

+ +

+ +

+ +

+ @result +

+ +

+ @errorMessage +

+ +@code { + private string? errorMessage; + private string? result; + + private async Task CatchUndefinedJSFunction() + { + try + { + result = await JS.InvokeAsync("nonFunction"); + } + catch (JSException e) + { + errorMessage = $"Error Message: {e.Message}"; + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample2.razor new file mode 100644 index 00000000..853ac73d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample2.razor @@ -0,0 +1,27 @@ +@page "/call-js-example-2" +@inject IJSRuntime JS + +

Call JS Example 2

+ +

+ +

+ +@if (stockSymbol is not null) +{ +

@stockSymbol price: @price.ToString("c")

+} + +@code { + private Random r = new(); + private string? stockSymbol; + private decimal price; + + private async Task SetStock() + { + stockSymbol = + $"{(char)('A' + r.Next(0, 26))}{(char)('A' + r.Next(0, 26))}"; + price = r.Next(1, 101); + await JS.InvokeVoidAsync("displayTickerAlert1", stockSymbol, price); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample3.razor new file mode 100644 index 00000000..476c93f6 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample3.razor @@ -0,0 +1,39 @@ +@page "/call-js-example-3" +@implements IDisposable +@inject IJSRuntime JS + +

Call JS Example 3

+ +

+ +

+ +@if (stockSymbol is not null) +{ +

@stockSymbol price: @price.ToString("c")

+} + +@code { + private Random r = new(); + private string? stockSymbol; + private decimal price; + private JsInteropClasses1? jsClass; + + protected override void OnInitialized() + { + jsClass = new(JS); + } + + private async Task SetStock() + { + if (jsClass is not null) + { + stockSymbol = + $"{(char)('A' + r.Next(0, 26))}{(char)('A' + r.Next(0, 26))}"; + price = r.Next(1, 101); + await jsClass.TickerChanged(stockSymbol, price); + } + } + + public void Dispose() => jsClass?.Dispose(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample4.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample4.razor new file mode 100644 index 00000000..1a88e144 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample4.razor @@ -0,0 +1,36 @@ +@page "/call-js-example-4" +@inject IJSRuntime JS + +

Call JS Example 4

+ +

+ +

+ +@if (stockSymbol is not null) +{ +

@stockSymbol price: @price.ToString("c")

+} + +@if (result is not null) +{ +

@result

+} + +@code { + private Random r = new(); + private string? stockSymbol; + private decimal price; + private string? result; + + private async Task SetStock() + { + stockSymbol = + $"{(char)('A' + r.Next(0, 26))}{(char)('A' + r.Next(0, 26))}"; + price = r.Next(1, 101); + var interopResult = + await JS.InvokeAsync("displayTickerAlert2", stockSymbol, price); + result = $"Result of TickerChanged call for {stockSymbol} at " + + $"{price.ToString("c")}: {interopResult}"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample5.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample5.razor new file mode 100644 index 00000000..38a7c630 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample5.razor @@ -0,0 +1,47 @@ +@page "/call-js-example-5" +@implements IDisposable +@inject IJSRuntime JS + +

Call JS Example 5

+ +

+ +

+ +@if (stockSymbol is not null) +{ +

@stockSymbol price: @price.ToString("c")

+} + +@if (result is not null) +{ +

@result

+} + +@code { + private Random r = new(); + private string? stockSymbol; + private decimal price; + private JsInteropClasses2? jsClass; + private string? result; + + protected override void OnInitialized() + { + jsClass = new(JS); + } + + private async Task SetStock() + { + if (jsClass is not null) + { + stockSymbol = + $"{(char)('A' + r.Next(0, 26))}{(char)('A' + r.Next(0, 26))}"; + price = r.Next(1, 101); + var interopResult = await jsClass.TickerChanged(stockSymbol, price); + result = $"Result of TickerChanged call for {stockSymbol} at " + + $"{price.ToString("c")}: {interopResult}"; + } + } + + public void Dispose() => jsClass?.Dispose(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample6.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample6.razor new file mode 100644 index 00000000..91e416ef --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample6.razor @@ -0,0 +1,44 @@ +@page "/call-js-example-6" +@implements IAsyncDisposable +@inject IJSRuntime JS + +

Call JS Example 6

+ +

+ +

+ +

+ @result +

+ +@code { + private IJSObjectReference? module; + private string? result; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + module = await JS.InvokeAsync("import", + "./scripts.js"); + } + } + + private async Task TriggerPrompt() + { + result = await Prompt("Provide some text"); + } + + public async ValueTask Prompt(string message) => + module is not null ? + await module.InvokeAsync("showPrompt", message) : null; + + async ValueTask IAsyncDisposable.DisposeAsync() + { + if (module is not null) + { + await module.DisposeAsync(); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor new file mode 100644 index 00000000..b277243a --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor @@ -0,0 +1,9 @@ +@page "/call-js-example-7" + +

Call JS Example 7

+ +

Hello, world!

+ +Welcome to your new app. + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor.cs new file mode 100644 index 00000000..9f4df907 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample7.razor.cs @@ -0,0 +1,75 @@ +using Microsoft.AspNetCore.Components; + +namespace BlazorSample.Client.Pages; + +public partial class CallJsExample7 : + ComponentBase, IObservable, IDisposable +{ + private bool disposing; + private IList> subscriptions = + new List>(); + private ElementReference title; + + protected override void OnAfterRender(bool firstRender) + { + base.OnAfterRender(firstRender); + + foreach (var subscription in subscriptions) + { + try + { + subscription.OnNext(title); + } + catch (Exception) + { + throw; + } + } + } + + public void Dispose() + { + disposing = true; + + foreach (var subscription in subscriptions) + { + try + { + subscription.OnCompleted(); + } + catch (Exception) + { + } + } + + subscriptions.Clear(); + + // The following prevents derived types that introduce a + // finalizer from needing to re-implement IDisposable. + GC.SuppressFinalize(this); + } + + public IDisposable Subscribe(IObserver observer) + { + if (disposing) + { + throw new InvalidOperationException("Parent being disposed"); + } + + subscriptions.Add(observer); + + return new Subscription(observer, this); + } + + private class Subscription(IObserver observer, + CallJsExample7 self) : IDisposable + { + public IObserver Observer { get; } = observer; + public CallJsExample7 Self { get; } = self; + + public void Dispose() + { + Self.subscriptions.Remove(Observer); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample8.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample8.razor new file mode 100644 index 00000000..ffdfce46 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CallJsExample8.razor @@ -0,0 +1,50 @@ +@page "/call-js-example-8" +@implements IAsyncDisposable +@inject IJSRuntime JS + +

Call JS Example 8

+ +
+ + + + +@code +{ + private ElementReference mapElement; + private IJSObjectReference? mapModule; + private IJSObjectReference? mapInstance; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + mapModule = await JS.InvokeAsync( + "import", "./mapComponent.js"); + mapInstance = await mapModule.InvokeAsync( + "addMapToElement", mapElement); + } + } + + private async Task ShowAsync(double latitude, double longitude) + { + if (mapModule is not null && mapInstance is not null) + { + await mapModule.InvokeVoidAsync("setMapCenter", mapInstance, + latitude, longitude).AsTask(); + } + } + + async ValueTask IAsyncDisposable.DisposeAsync() + { + if (mapInstance is not null) + { + await mapInstance.DisposeAsync(); + } + + if (mapModule is not null) + { + await mapModule.DisposeAsync(); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CatchAll.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CatchAll.razor new file mode 100644 index 00000000..9be1da51 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CatchAll.razor @@ -0,0 +1,6 @@ +@page "/catch-all/{*pageRoute}" + +@code { + [Parameter] + public string? PageRoute { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ConditionalAttribute.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ConditionalAttribute.razor new file mode 100644 index 00000000..bf33c89f --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ConditionalAttribute.razor @@ -0,0 +1,15 @@ +@page "/conditional-attribute" + + + + + +@code { + [Parameter] + public bool IsCompleted { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlHeadContent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlHeadContent.razor new file mode 100644 index 00000000..9f690a15 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlHeadContent.razor @@ -0,0 +1,22 @@ +@page "/control-head-content" + +

Control <head> content

+ +

+ Title: @title +

+ +

+ Description: @description +

+ +@title + + + + + +@code { + private string description = "Description set by component"; + private string title = "Title set by component"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlRender.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlRender.razor new file mode 100644 index 00000000..790f8402 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ControlRender.razor @@ -0,0 +1,27 @@ +@page "/control-render" + + + +

Current count: @currentCount

+ +

+ +

+ +@code { + private int currentCount = 0; + private bool shouldRender = true; + + protected override bool ShouldRender() + { + return shouldRender; + } + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter.razor new file mode 100644 index 00000000..ef23cb31 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter.razor @@ -0,0 +1,18 @@ +@page "/counter" + +Counter + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter1.razor new file mode 100644 index 00000000..547675e9 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter1.razor @@ -0,0 +1,19 @@ +@page "/counter-1" +@inject ILogger Logger + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + Logger.LogWarning("Someone has clicked me!"); + + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter2.razor new file mode 100644 index 00000000..5cad485c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Counter2.razor @@ -0,0 +1,20 @@ +@page "/counter-2" +@inject ILoggerFactory LoggerFactory + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + var logger = LoggerFactory.CreateLogger(); + logger.LogWarning("Someone has clicked me!"); + + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterAuto.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterAuto.razor new file mode 100644 index 00000000..c8604615 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterAuto.razor @@ -0,0 +1,19 @@ +@page "/counter-auto" +@rendermode InteractiveAuto + +Counter (Auto) + +

Counter (Auto)

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor new file mode 100644 index 00000000..6c25d9dc --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor @@ -0,0 +1,9 @@ +@page "/counter-partial-class" + +Counter + +

Counter

+ +

Current count: @currentCount

+ + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor.cs new file mode 100644 index 00000000..8a7a2d63 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterPartialClass.razor.cs @@ -0,0 +1,11 @@ +namespace BlazorSample.Client.Pages; + +public partial class CounterPartialClass +{ + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState1.razor new file mode 100644 index 00000000..66adeea4 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState1.razor @@ -0,0 +1,31 @@ +@page "/counter-state-1" + +

+ Current count: @currentCount +

+ +

+ +

+ +@code { + private int currentCount = 0; + + private async Task IncrementCount() + { + currentCount++; + // Renders here automatically + + await Task.Delay(1000); + currentCount++; + StateHasChanged(); + + await Task.Delay(1000); + currentCount++; + StateHasChanged(); + + await Task.Delay(1000); + currentCount++; + // Renders here automatically + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState2.razor new file mode 100644 index 00000000..3e65e8f0 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterState2.razor @@ -0,0 +1,31 @@ +@page "/counter-state-2" +@using System.Timers +@implements IDisposable + +

Counter with Timer disposal

+ +

+ Current count: @currentCount +

+ +@code { + private int currentCount = 0; + private Timer timer = new(1000); + + protected override void OnInitialized() + { + timer.Elapsed += (sender, eventArgs) => OnTimerCallback(); + timer.Start(); + } + + private void OnTimerCallback() + { + _ = InvokeAsync(() => + { + currentCount++; + StateHasChanged(); + }); + } + + public void Dispose() => timer.Dispose(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWebAssembly.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWebAssembly.razor new file mode 100644 index 00000000..2ea16f07 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWebAssembly.razor @@ -0,0 +1,19 @@ +@page "/counter-webassembly" +@rendermode InteractiveWebAssembly + +Counter (WebAssembly) + +

Counter (WebAssembly)

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal1.razor new file mode 100644 index 00000000..99932bf2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal1.razor @@ -0,0 +1,29 @@ +@page "/counter-with-timer-disposal-1" +@using System.Timers +@implements IDisposable + +

Counter with Timer disposal

+ +

Current count: @currentCount

+ +@code { + private int currentCount = 0; + private Timer timer = new(1000); + + protected override void OnInitialized() + { + timer.Elapsed += (sender, eventArgs) => OnTimerCallback(); + timer.Start(); + } + + private void OnTimerCallback() + { + _ = InvokeAsync(() => + { + currentCount++; + StateHasChanged(); + }); + } + + public void Dispose() => timer.Dispose(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal2.razor new file mode 100644 index 00000000..35957a0d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CounterWithTimerDisposal2.razor @@ -0,0 +1,30 @@ +@page "/counter-with-timer-disposal-2" +@using System.Timers +@implements IDisposable + +

Counter with Timer disposal

+ +

Current count: @currentCount

+ +@code { + private int currentCount = 0; + private Timer? timer; + + protected override void OnInitialized() + { + timer = new Timer(1000); + timer.Elapsed += (sender, eventArgs) => OnTimerCallback(); + timer.Start(); + } + + private void OnTimerCallback() + { + _ = InvokeAsync(() => + { + currentCount++; + StateHasChanged(); + }); + } + + public void Dispose() => timer?.Dispose(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CustomerList.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CustomerList.razor new file mode 100644 index 00000000..b93cb608 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/CustomerList.razor @@ -0,0 +1,32 @@ +@page "/customer-list" +@inject IDataAccess DataRepository + +@if (customers != null) +{ +
    + @foreach (var customer in customers) + { +
  • @customer.FirstName @customer.LastName
  • + } +
+} + +@code { + private IReadOnlyList? customers; + + protected override async Task OnInitializedAsync() + { + customers = await DataRepository.GetAllCustomersAsync(); + } + + private class Customer + { + public string? FirstName { get; set; } + public string? LastName { get; set; } + } + + private interface IDataAccess + { + public Task> GetAllCustomersAsync(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DateBinding.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DateBinding.razor new file mode 100644 index 00000000..0141e944 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DateBinding.razor @@ -0,0 +1,16 @@ +@page "/date-binding" + +

+ +

+ +

+ startDate: @startDate +

+ +@code { + private DateTime startDate = new(2020, 1, 1); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DecimalBinding.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DecimalBinding.razor new file mode 100644 index 00000000..398b13da --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DecimalBinding.razor @@ -0,0 +1,32 @@ +@page "/decimal-binding" +@using System.Globalization + +

+ +

+ +

+ decimalValue: @decimalValue +

+ +@code { + private decimal decimalValue = 1.1M; + private NumberStyles style = + NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign; + private CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); + + private string DecimalValue + { + get => decimalValue.ToString("0.000", culture); + set + { + if (Decimal.TryParse(value, style, culture, out var number)) + { + decimalValue = Math.Round(number, 3); + } + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DoctorWhoLayout.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DoctorWhoLayout.razor new file mode 100644 index 00000000..dac99327 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DoctorWhoLayout.razor @@ -0,0 +1,23 @@ +@inherits LayoutComponentBase + +
+

Doctor Who™ Episode Database

+
+ + + +@Body + +
+ @TrademarkMessage +
+ +@code { + public string TrademarkMessage { get; set; } = + "Doctor Who is a registered trademark of the BBC. " + + "https://www.doctorwho.tv/"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample1.razor new file mode 100644 index 00000000..f3ca1f14 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample1.razor @@ -0,0 +1,38 @@ +@page "/dynamiccomponent-example-1" + +

DynamicComponent Component Example 1

+ +

+ +

+ +@if (selectedType is not null) +{ +
+ +
+} + +@code { + private Type? selectedType; + + private void OnDropdownChange(ChangeEventArgs e) + { + /* + IMPORTANT! + Change "BlazorSample.Shared.dynamiccomponent" to match + your shared component's namespace in the Type.GetType() argument. + */ + selectedType = e.Value?.ToString()?.Length > 0 ? + Type.GetType($"BlazorSample.Shared.dynamiccomponent.{e.Value}") : null; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample2.razor new file mode 100644 index 00000000..f0d51aeb --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample2.razor @@ -0,0 +1,82 @@ +@page "/dynamiccomponent-example-2" + +

DynamicComponent Component Example 2

+ +

+ +

+ +

+ +

+ +@if (selectedType is not null) +{ +
+ +
+} + +@code { + private Dictionary components = + new() + { + { + "RocketLabWithWindowSeat", + new ComponentMetadata + { + Name = "Rocket Lab with Window Seat", + Parameters = new() { { "WindowSeat", false } } + } + }, + { + "VirginGalactic", + new ComponentMetadata { Name = "Virgin Galactic" } + }, + { + "UnitedLaunchAlliance", + new ComponentMetadata { Name = "ULA" } + }, + { + "SpaceX", + new ComponentMetadata { Name = "SpaceX" } + } + }; + private Type? selectedType; + private bool windowSeat; + + private bool WindowSeat + { + get { return windowSeat; } + set + { + windowSeat = value; + components[nameof(RocketLabWithWindowSeat)].Parameters["WindowSeat"] = + windowSeat; + } + } + + private void OnDropdownChange(ChangeEventArgs e) + { + /* + IMPORTANT! + Change "BlazorSample.Shared.dynamiccomponent" to match + your shared component's namespace in the Type.GetType() argument. + */ + selectedType = e.Value?.ToString()?.Length > 0 ? + Type.GetType($"BlazorSample.Shared.dynamiccomponent.{e.Value}") : null; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample3.razor new file mode 100644 index 00000000..bea0d9e8 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/DynamicComponentExample3.razor @@ -0,0 +1,121 @@ +@page "/dynamiccomponent-example-3" + +

DynamicComponent Component Example 3

+ +

+ +

+ +@if (selectedType is not null) +{ +
+ +
+} + +

+ @message +

+ +@code { + private Type? selectedType; + private string? message; + + private Dictionary Components + { + get + { + return new Dictionary() + { + { + "RocketLab2", + new ComponentMetadata + { + Name = "Rocket Lab", + Parameters = + new() + { + { + "OnClickCallback", + EventCallback.Factory.Create( + this, ShowDTMessage) + } + } + } + }, + { + "VirginGalactic2", + new ComponentMetadata + { + Name = "Virgin Galactic", + Parameters = + new() + { + { + "OnClickCallback", + EventCallback.Factory.Create( + this, ShowDTMessage) + } + } + } + }, + { + "UnitedLaunchAlliance2", + new ComponentMetadata + { + Name = "ULA", + Parameters = + new() + { + { + "OnClickCallback", + EventCallback.Factory.Create( + this, ShowDTMessage) + } + } + } + }, + { + "SpaceX2", + new ComponentMetadata + { + Name = "SpaceX", + Parameters = + new() + { + { + "OnClickCallback", + EventCallback.Factory.Create( + this, ShowDTMessage) + } + } + } + } + }; + } + } + + private void OnDropdownChange(ChangeEventArgs e) + { + /* + IMPORTANT! + Change "BlazorSample.Shared.dynamiccomponent" to match + your shared component's namespace in the Type.GetType() argument. + */ + selectedType = e.Value?.ToString()?.Length > 0 ? + Type.GetType($"BlazorSample.Shared.dynamiccomponent.{e.Value}") : null; + } + + private void ShowDTMessage(MouseEventArgs e) => + message = $"The current DT is: {DateTime.Now}."; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Episodes.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Episodes.razor new file mode 100644 index 00000000..f641c0af --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Episodes.razor @@ -0,0 +1,22 @@ +@page "/episodes" +@layout DoctorWhoLayout + +

Episodes

+ + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample1.razor new file mode 100644 index 00000000..cfde77dc --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample1.razor @@ -0,0 +1,36 @@ +@page "/event-handler-example-1" + +

@currentHeading

+ +

+ + +

+ +

+ +

+ +@code { + private string currentHeading = "Initial heading"; + private string? newHeading; + private string checkedMessage = "Not changed yet"; + + private void UpdateHeading() + { + currentHeading = $"{newHeading}!!!"; + } + + private void CheckChanged() + { + checkedMessage = $"Last changed at {DateTime.Now}"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample2.razor new file mode 100644 index 00000000..e373f3b6 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample2.razor @@ -0,0 +1,25 @@ +@page "/event-handler-example-2" + +

@currentHeading

+ +

+ + +

+ +@code { + private string currentHeading = "Initial heading"; + private string? newHeading; + + private async Task UpdateHeading() + { + await Task.Delay(2000); + + currentHeading = $"{newHeading}!!!"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample3.razor new file mode 100644 index 00000000..cf95be9d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample3.razor @@ -0,0 +1,21 @@ +@page "/event-handler-example-3" + +@for (var i = 0; i < 4; i++) +{ +

+ +

+} + +

@mousePointerMessage

+ +@code { + private string? mousePointerMessage; + + private void ReportPointerLocation(MouseEventArgs e) + { + mousePointerMessage = $"Mouse coordinates: {e.ScreenX}:{e.ScreenY}"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample4.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample4.razor new file mode 100644 index 00000000..8f934b88 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample4.razor @@ -0,0 +1,13 @@ +@page "/event-handler-example-4" + +

@heading

+ +

+ +

+ +@code { + private string heading = "Initial heading"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample5.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample5.razor new file mode 100644 index 00000000..14271339 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample5.razor @@ -0,0 +1,23 @@ +@page "/event-handler-example-5" + +

@heading

+ +@for (var i = 1; i < 4; i++) +{ + var buttonNumber = i; + +

+ +

+} + +@code { + private string heading = "Select a button to learn its position"; + + private void UpdateHeading(MouseEventArgs e, int buttonNumber) + { + heading = $"Selected #{buttonNumber} at {e.ClientX}:{e.ClientY}"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample6.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample6.razor new file mode 100644 index 00000000..f3ebbf3a --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample6.razor @@ -0,0 +1,17 @@ +@page "/event-handler-example-6" + +

+ +

+ +@code { + private int count = 0; + + private void KeyHandler(KeyboardEventArgs e) + { + if (e.Key == "+") + { + count++; + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample7.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample7.razor new file mode 100644 index 00000000..9acdee11 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample7.razor @@ -0,0 +1,34 @@ +@page "/event-handler-example-7" + + + +
+

Parent div

+ +
+ Child div that doesn't stop propagation when selected. +
+ +
+ Child div that stops propagation when selected. +
+
+ +

+ @message +

+ +@code { + private bool stopPropagation = false; + private string? message; + + private void OnSelectParentDiv() => + message = $"The parent div was selected. {DateTime.Now}"; + + private void OnSelectChildDiv() => + message = $"A child div was selected. {DateTime.Now}"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample8.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample8.razor new file mode 100644 index 00000000..5cdd12a3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/EventHandlerExample8.razor @@ -0,0 +1,18 @@ +@page "/event-handler-example-8" + +

+ +

+ + + +@code { + private ElementReference exampleInput; + + private async Task ChangeFocus() + { + await exampleInput.FocusAsync(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Example.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Example.razor new file mode 100644 index 00000000..0aba2f92 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Example.razor @@ -0,0 +1,10 @@ +@page "/example/{param?}" + +

+ Param: @Param +

+ +@code { + [Parameter] + public string? Param { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ExpanderExample.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ExpanderExample.razor new file mode 100644 index 00000000..fb22231e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ExpanderExample.razor @@ -0,0 +1,11 @@ +@page "/expander-example" + + + Expander 1 content + + + + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FetchData.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FetchData.razor new file mode 100644 index 00000000..7ec4d0ca --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FetchData.razor @@ -0,0 +1,26 @@ +@page "/fetchdata" +@inject WeatherForecastService ForecastService + +

Weather forecast

+ +

This component demonstrates fetching data from a service.

+ +@if (forecasts == null) +{ +

Loading...

+} +else +{ + + +
+} + +@code { + private WeatherForecast[]? forecasts; + + protected override async Task OnInitializedAsync() + { + forecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now)); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload1.razor new file mode 100644 index 00000000..62ab8b97 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload1.razor @@ -0,0 +1,29 @@ +@page "/file-download-1" +@using System.IO +@inject IJSRuntime JS + +

File Download Example

+ + + +@code { + private Stream GetFileStream() + { + var randomBinaryData = new byte[50 * 1024]; + var fileStream = new MemoryStream(randomBinaryData); + + return fileStream; + } + + private async Task DownloadFileFromStream() + { + var fileStream = GetFileStream(); + var fileName = "log.bin"; + + using var streamRef = new DotNetStreamReference(stream: fileStream); + + await JS.InvokeVoidAsync("downloadFileFromStream", fileName, streamRef); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload2.razor new file mode 100644 index 00000000..2f8608b4 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileDownload2.razor @@ -0,0 +1,17 @@ +@page "/file-download-2" +@inject IJSRuntime JS + +

File Download Example 2

+ + + +@code { + private async Task DownloadFileFromURL() + { + var fileName = "quote.txt"; + var fileURL = "https://localhost:5001/files/quote.txt"; + await JS.InvokeVoidAsync("triggerFileDownload", fileName, fileURL); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload1.razor new file mode 100644 index 00000000..d962dcda --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload1.razor @@ -0,0 +1,87 @@ +@page "/file-upload-1" +@using System +@using System.IO +@using Microsoft.AspNetCore.Hosting +@using Microsoft.Extensions.Logging +@inject ILogger Logger +@inject IWebHostEnvironment Environment + +

Upload Files

+ +

+ +

+ +

+ +

+ +

+ +

+ +@if (isLoading) +{ +

Uploading...

+} +else +{ +
    + @foreach (var file in loadedFiles) + { +
  • +
      +
    • Name: @file.Name
    • +
    • Last modified: @file.LastModified.ToString()
    • +
    • Size (bytes): @file.Size
    • +
    • Content type: @file.ContentType
    • +
    +
  • + } +
+} + +@code { + private List loadedFiles = new(); + private long maxFileSize = 1024 * 15; + private int maxAllowedFiles = 3; + private bool isLoading; + + private async Task LoadFiles(InputFileChangeEventArgs e) + { + isLoading = true; + loadedFiles.Clear(); + + foreach (var file in e.GetMultipleFiles(maxAllowedFiles)) + { + try + { + loadedFiles.Add(file); + + var trustedFileNameForFileStorage = Path.GetRandomFileName(); + var path = Path.Combine(Environment.ContentRootPath, + Environment.EnvironmentName, "unsafe_uploads", + trustedFileNameForFileStorage); + + await using FileStream fs = new(path, FileMode.Create); + await file.OpenReadStream(maxFileSize).CopyToAsync(fs); + } + catch (Exception ex) + { + Logger.LogError("File: {Filename} Error: {Error}", + file.Name, ex.Message); + } + } + + isLoading = false; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload2.razor new file mode 100644 index 00000000..964aff72 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload2.razor @@ -0,0 +1,153 @@ +@page "/file-upload-2" +@using System.Linq +@using System.Net.Http.Headers +@using System.Text.Json +@using Microsoft.Extensions.Logging +@inject IHttpClientFactory ClientFactory +@inject ILogger Logger + +

Upload Files

+ +

+ +

+ +@if (files.Count > 0) +{ +
+
+
    + @foreach (var file in files) + { +
  • + File: @file.Name +
    + @if (FileUpload(uploadResults, file.Name, Logger, + out var result)) + { + + Stored File Name: @result.StoredFileName + + } + else + { + + There was an error uploading the file + (Error: @result.ErrorCode). + + } +
  • + } +
+
+
+} + +@code { + private List files = new(); + private List uploadResults = new(); + private int maxAllowedFiles = 3; + private bool shouldRender; + + protected override bool ShouldRender() => shouldRender; + + private async Task OnInputFileChange(InputFileChangeEventArgs e) + { + shouldRender = false; + long maxFileSize = 1024 * 15; + var upload = false; + + using var content = new MultipartFormDataContent(); + + foreach (var file in e.GetMultipleFiles(maxAllowedFiles)) + { + if (uploadResults.SingleOrDefault( + f => f.FileName == file.Name) is null) + { + try + { + files.Add(new() { Name = file.Name }); + + var fileContent = + new StreamContent(file.OpenReadStream(maxFileSize)); + + fileContent.Headers.ContentType = + new MediaTypeHeaderValue(file.ContentType); + + content.Add( + content: fileContent, + name: "\"files\"", + fileName: file.Name); + + upload = true; + } + catch (Exception ex) + { + Logger.LogInformation( + "{FileName} not uploaded (Err: 6): {Message}", + file.Name, ex.Message); + + uploadResults.Add( + new() + { + FileName = file.Name, + ErrorCode = 6, + Uploaded = false + }); + } + } + } + + if (upload) + { + var client = ClientFactory.CreateClient(); + + var response = + await client.PostAsync("https://localhost:5001/Filesave", + content); + + if (response.IsSuccessStatusCode) + { + var options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + }; + + using var responseStream = + await response.Content.ReadAsStreamAsync(); + + var newUploadResults = await JsonSerializer + .DeserializeAsync>(responseStream, options); + + if (newUploadResults is not null) + { + uploadResults = uploadResults.Concat(newUploadResults).ToList(); + } + } + } + + shouldRender = true; + } + + private static bool FileUpload(IList uploadResults, + string? fileName, ILogger logger, out UploadResult result) + { + result = uploadResults.SingleOrDefault(f => f.FileName == fileName) ?? new(); + + if (!result.Uploaded) + { + logger.LogInformation("{FileName} not uploaded (Err: 5)", fileName); + result.ErrorCode = 5; + } + + return result.Uploaded; + } + + private class File + { + public string? Name { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload3.razor new file mode 100644 index 00000000..b94d106e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FileUpload3.razor @@ -0,0 +1,102 @@ +@page "/file-upload-3" +@using System +@using System.IO +@using Microsoft.AspNetCore.Hosting +@using Microsoft.Extensions.Logging +@inject ILogger Logger +@inject IWebHostEnvironment Environment + +

Upload Files

+ +

+ +

+ +

+ +

+ +

+ +

+ +@if (isLoading) +{ +

Progress: @string.Format("{0:P0}", progressPercent)

+} +else +{ +
    + @foreach (var file in loadedFiles) + { +
  • +
      +
    • Name: @file.Name
    • +
    • Last modified: @file.LastModified.ToString()
    • +
    • Size (bytes): @file.Size
    • +
    • Content type: @file.ContentType
    • +
    +
  • + } +
+} + +@code { + private List loadedFiles = new(); + private long maxFileSize = 1024 * 15; + private int maxAllowedFiles = 3; + private bool isLoading; + private decimal progressPercent; + + private async Task LoadFiles(InputFileChangeEventArgs e) + { + isLoading = true; + loadedFiles.Clear(); + progressPercent = 0; + + foreach (var file in e.GetMultipleFiles(maxAllowedFiles)) + { + try + { + var trustedFileName = Path.GetRandomFileName(); + var path = Path.Combine(Environment.ContentRootPath, + Environment.EnvironmentName, "unsafe_uploads", trustedFileName); + + await using FileStream writeStream = new(path, FileMode.Create); + using var readStream = file.OpenReadStream(maxFileSize); + var bytesRead = 0; + var totalRead = 0; + var buffer = new byte[1024 * 10]; + + while ((bytesRead = await readStream.ReadAsync(buffer)) != 0) + { + totalRead += bytesRead; + + await writeStream.WriteAsync(buffer, 0, bytesRead); + + progressPercent = Decimal.Divide(totalRead, file.Size); + + StateHasChanged(); + } + + loadedFiles.Add(file); + } + catch (Exception ex) + { + Logger.LogError("File: {FileName} Error: {Error}", + file.Name, ex.Message); + } + } + + isLoading = false; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample1.razor new file mode 100644 index 00000000..3ff14dce --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample1.razor @@ -0,0 +1,23 @@ +@page "/form-example-1" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + + + + + + + + + + +@code { + private Model model = new(); + + private void HandleValidSubmit() + { + Logger.LogInformation("HandleValidSubmit called"); + + // Process the valid form + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample2.razor new file mode 100644 index 00000000..48072799 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample2.razor @@ -0,0 +1,73 @@ +@page "/form-example-2" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + +

Starfleet Starship Database

+ +

New Ship Entry Form

+ + + + + +

+ +

+

+ +

+

+ +

+

+ +

+

+ +

+

+ +

+ + + +

+ Star Trek, + ©1966-2019 CBS Studios, Inc. and + Paramount Pictures +

+
+ +@code { + private Starship starship = new() { ProductionDate = DateTime.UtcNow }; + + private void HandleValidSubmit() + { + Logger.LogInformation("HandleValidSubmit called"); + + // Process the valid form + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample3.razor new file mode 100644 index 00000000..eeef6bea --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample3.razor @@ -0,0 +1,57 @@ +@page "/form-example-3" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + + + + + +

+ +

+ + + +

+ Star Trek, + ©1966-2019 CBS Studios, Inc. and + Paramount Pictures +

+
+ +@code { + private Starship starship = + new() + { + Identifier = "NCC-1701", + Classification = "Exploration", + MaximumAccommodation = 150, + IsValidatedDesign = true, + ProductionDate = new DateTime(2245, 4, 11) + }; + private EditContext? editContext; + + protected override void OnInitialized() + { + editContext = new(starship); + } + + private async Task HandleSubmit() + { + if (editContext != null && editContext.Validate()) + { + Logger.LogInformation("HandleSubmit called: Form is valid"); + + // Process the valid form + // await ... + await Task.CompletedTask; + } + else + { + Logger.LogInformation("HandleSubmit called: Form is INVALID"); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample4.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample4.razor new file mode 100644 index 00000000..80d03879 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample4.razor @@ -0,0 +1,75 @@ +@page "/form-example-4" +@using Microsoft.Extensions.Logging +@implements IDisposable +@inject ILogger Logger + +

Ship Holodecks

+ + + + + + + + + + +

+ Star Trek, + ©1966-2019 CBS Studios, Inc. and + Paramount Pictures +

+
+ +@code { + private EditContext? editContext; + private Holodeck holodeck = new(); + private ValidationMessageStore? messageStore; + + protected override void OnInitialized() + { + editContext = new(holodeck); + editContext.OnValidationRequested += HandleValidationRequested; + messageStore = new(editContext); + } + + private void HandleValidationRequested(object? sender, + ValidationRequestedEventArgs args) + { + messageStore?.Clear(); + + // Custom validation logic + if (!holodeck.Options) + { + messageStore?.Add(() => holodeck.Options, "Select at least one."); + } + } + + private void HandleValidSubmit() + { + Logger.LogInformation("HandleValidSubmit called: Processing the form"); + + // Process the form + } + + public class Holodeck + { + public bool Type1 { get; set; } + public bool Type2 { get; set; } + public bool Options => Type1 || Type2; + } + + public void Dispose() + { + if (editContext is not null) + { + editContext.OnValidationRequested -= HandleValidationRequested; + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample5.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample5.razor new file mode 100644 index 00000000..e0137b48 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample5.razor @@ -0,0 +1,69 @@ +@page "/form-example-5" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + +

Starfleet Starship Database

+ +

New Ship Entry Form

+ + + + + +

+ +

+

+ +

+ + + +

+ Star Trek, + ©1966-2019 CBS Studios, Inc. and + Paramount Pictures +

+
+ +@code { + private CustomValidation? customValidation; + private Starship starship = new() { ProductionDate = DateTime.UtcNow }; + + private void HandleValidSubmit() + { + customValidation?.ClearErrors(); + + var errors = new Dictionary>(); + + if (starship.Classification == "Defense" && + string.IsNullOrEmpty(starship.Description)) + { + errors.Add(nameof(starship.Description), + new() { "For a 'Defense' ship classification, " + + "'Description' is required." }); + } + + if (errors.Any()) + { + customValidation?.DisplayErrors(errors); + } + else + { + Logger.LogInformation("HandleValidSubmit called: Processing the form"); + + // Process the valid form + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample7.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample7.razor new file mode 100644 index 00000000..cea5891d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample7.razor @@ -0,0 +1,27 @@ +@page "/form-example-7" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + + + + + + + + + + +

+ CurrentValue: @model.Name +

+ +@code { + private Model model = new(); + + private void HandleValidSubmit() + { + Logger.LogInformation("HandleValidSubmit called"); + + // Process the valid form + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample8.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample8.razor new file mode 100644 index 00000000..6324e3e0 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample8.razor @@ -0,0 +1,30 @@ +@page "/form-example-8" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + + + + + + + + + + +@code { + private Model model = new(); + private EditContext? editContext; + + protected override void OnInitialized() + { + editContext = new(model); + editContext.SetFieldCssClassProvider(new CustomFieldClassProvider()); + } + + private void HandleValidSubmit() + { + Logger.LogInformation("HandleValidSubmit called"); + + // Process the valid form + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample9.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample9.razor new file mode 100644 index 00000000..6414c04c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/FormExample9.razor @@ -0,0 +1,62 @@ +@page "/form-example-9" +@using Microsoft.Extensions.Logging +@implements IDisposable +@inject ILogger Logger + + + + + +

+ +

+ + +
+ +@code { + private Starship starship = + new() + { + Identifier = "NCC-1701", + Classification = "Exploration", + MaximumAccommodation = 150, + IsValidatedDesign = true, + ProductionDate = new DateTime(2245, 4, 11) + }; + private bool formInvalid = false; + private EditContext? editContext; + + protected override void OnInitialized() + { + editContext = new(starship); + editContext.OnFieldChanged += HandleFieldChanged; + } + + private void HandleFieldChanged(object? sender, FieldChangedEventArgs e) + { + if (editContext is not null) + { + formInvalid = !editContext.Validate(); + StateHasChanged(); + } + } + + private void HandleValidSubmit() + { + Logger.LogInformation("HandleValidSubmit called"); + + // Process the valid form + } + + public void Dispose() + { + if (editContext is not null) + { + editContext.OnFieldChanged -= HandleFieldChanged; + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/GenericTypeExample1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/GenericTypeExample1.razor new file mode 100644 index 00000000..12feef11 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/GenericTypeExample1.razor @@ -0,0 +1,9 @@ +@page "/generic-type-example-1" + +

Generic Type Example 1

+ + + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HeadingExample.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HeadingExample.razor new file mode 100644 index 00000000..5f5f9a0b --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HeadingExample.razor @@ -0,0 +1,3 @@ +@page "/heading-example" + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HelloWorld.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HelloWorld.razor new file mode 100644 index 00000000..fb386d17 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/HelloWorld.razor @@ -0,0 +1,3 @@ +@page "/hello-world" + +

Hello World!

diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Markup.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Markup.razor new file mode 100644 index 00000000..876603df --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Markup.razor @@ -0,0 +1,8 @@ +@page "/markup" + +

@headingText

+ +@code { + private string headingFontStyle = "italic"; + private string headingText = "Put on your new Blazor!"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/MarkupStringExample.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/MarkupStringExample.razor new file mode 100644 index 00000000..216b593b --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/MarkupStringExample.razor @@ -0,0 +1,8 @@ +@page "/markup-string-example" + +@((MarkupString)myMarkup) + +@code { + private string myMarkup = + "

This is a dangerous markup string.

"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Navigate.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Navigate.razor new file mode 100644 index 00000000..9d4b5997 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Navigate.razor @@ -0,0 +1,33 @@ +@page "/navigate" +@using Microsoft.Extensions.Logging +@implements IDisposable +@inject ILogger Logger +@inject NavigationManager Navigation + +

Navigate in component code example

+ + + +@code { + private void NavigateToCounterComponent() + { + Navigation.NavigateTo("counter"); + } + + protected override void OnInitialized() + { + Navigation.LocationChanged += HandleLocationChanged; + } + + private void HandleLocationChanged(object? sender, LocationChangedEventArgs e) + { + Logger.LogInformation("URL of new location: {Location}", e.Location); + } + + public void Dispose() + { + Navigation.LocationChanged -= HandleLocationChanged; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnInit.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnInit.razor new file mode 100644 index 00000000..581de8c3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnInit.razor @@ -0,0 +1,12 @@ +@page "/on-init" + +

@message

+ +@code { + private string? message; + + protected override void OnInitialized() + { + message = $"Initialized at {DateTime.Now}"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnParamsSet.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnParamsSet.razor new file mode 100644 index 00000000..bf14a3d3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/OnParamsSet.razor @@ -0,0 +1,25 @@ +@page "/on-params-set" +@page "/on-params-set/{StartDate:datetime}" + +

@message

+ +@code { + private string? message; + + [Parameter] + public DateTime StartDate { get; set; } + + protected override void OnParametersSet() + { + if (StartDate == default) + { + StartDate = DateTime.Now; + + message = $"No start date in URL. Default value applied (StartDate: {StartDate})."; + } + else + { + message = $"The start date in the URL was used (StartDate: {StartDate})."; + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent.razor new file mode 100644 index 00000000..d748721f --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent.razor @@ -0,0 +1,10 @@ +@page "/parameter-parent" + +

Child component (without attribute values)

+ + + +

Child component (with attribute values)

+ + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent2.razor new file mode 100644 index 00000000..83d719df --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent2.razor @@ -0,0 +1,24 @@ +@page "/parameter-parent-2" + + + + + + + + + +@code { + private string title = "From Parent field"; + private PanelData panelData = new(); + + private string GetTitle() + { + return "From Parent method"; + } + + private class PanelData + { + public string Title { get; set; } = "From Parent object"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent3.razor new file mode 100644 index 00000000..53e6a5db --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ParameterParent3.razor @@ -0,0 +1,14 @@ +@page "/parameter-parent-3" + + + +@code { + private PanelData panelData = new(); + + private string GetTitle() => $"Set by {panelData.Title}"; + + private class PanelData + { + public string Title { get; set; } = "Parent"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent.razor new file mode 100644 index 00000000..3de34ce3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent.razor @@ -0,0 +1,18 @@ +@page "/parent" + +

Parent-child example

+ + + Content of the child component is supplied by the parent component. + + +

@message

+ +@code { + private string? message; + + private void ShowMessage(MouseEventArgs e) + { + message = $"Blaze a new trail with Blazor! ({e.ScreenX}:{e.ScreenY})"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent1.razor new file mode 100644 index 00000000..e293010e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent1.razor @@ -0,0 +1,19 @@ +@page "/parent-1" + +

Parent Component

+ +

Parent year: @year

+ + + + + +@code { + private Random r = new(); + private int year = 1979; + + private void UpdateYear() + { + year = r.Next(1950, 2021); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent2.razor new file mode 100644 index 00000000..94f056c2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Parent2.razor @@ -0,0 +1,20 @@ +@page "/parent-2" + +

Parent Component

+ +

Parent Message: @parentMessage

+ +

+ +

+ + + +@code { + private string parentMessage = "Initial value set in Parent"; + + private void ChangeValue() + { + parentMessage = $"Set in Parent {DateTime.Now}"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PasswordBinding.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PasswordBinding.razor new file mode 100644 index 00000000..88a0f69b --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PasswordBinding.razor @@ -0,0 +1,13 @@ +@page "/password-binding" + +

Password Binding

+ + + +

+ password: @password +

+ +@code { + private string password = "Not set"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PeopleExample.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PeopleExample.razor new file mode 100644 index 00000000..5ec13183 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PeopleExample.razor @@ -0,0 +1,46 @@ +@page "/people-example" +@using System.Timers +@implements IDisposable + +@foreach (var person in people) +{ +
+} + +@code { + private Timer timer = new Timer(3000); + + public List people = + new() + { + { new Person { Data = "Person 1" } }, + { new Person { Data = "Person 2" } }, + { new Person { Data = "Person 3" } } + }; + + protected override void OnInitialized() + { + timer.Elapsed += (sender, eventArgs) => OnTimerCallback(); + timer.Start(); + } + + private void OnTimerCallback() + { + _ = InvokeAsync(() => + { + people.Insert(0, + new Person + { + Data = $"INSERTED {DateTime.Now.ToString("hh:mm:ss tt")}" + }); + StateHasChanged(); + }); + } + + public void Dispose() => timer.Dispose(); + + public class Person + { + public string? Data { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets1.razor new file mode 100644 index 00000000..8db776c5 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets1.razor @@ -0,0 +1,29 @@ +@page "/pets1" + +

Pets

+ + + + ID + Name + + + @pet.PetId + @pet.Name + + + +@code { + private List pets = new() + { + new Pet { PetId = 2, Name = "Mr. Bigglesworth" }, + new Pet { PetId = 4, Name = "Salem Saberhagen" }, + new Pet { PetId = 7, Name = "K-9" } + }; + + private class Pet + { + public int PetId { get; set; } + public string? Name { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets2.razor new file mode 100644 index 00000000..27fdc6dd --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets2.razor @@ -0,0 +1,29 @@ +@page "/pets2" + +

Pets

+ + + + ID + Name + + + @pet.PetId + @pet.Name + + + +@code { + private List pets = new() + { + new Pet { PetId = 2, Name = "Mr. Bigglesworth" }, + new Pet { PetId = 4, Name = "Salem Saberhagen" }, + new Pet { PetId = 7, Name = "K-9" } + }; + + private class Pet + { + public int PetId { get; set; } + public string? Name { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets3.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets3.razor new file mode 100644 index 00000000..3de57c1f --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets3.razor @@ -0,0 +1,29 @@ +@page "/pets3" + +

Pets

+ + + + ID + Name + + + @context.PetId + @context.Name + + + +@code { + private List pets = new() + { + new Pet { PetId = 2, Name = "Mr. Bigglesworth" }, + new Pet { PetId = 4, Name = "Salem Saberhagen" }, + new Pet { PetId = 7, Name = "K-9" } + }; + + private class Pet + { + public int PetId { get; set; } + public string? Name { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets4.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets4.razor new file mode 100644 index 00000000..f797e4fa --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Pets4.razor @@ -0,0 +1,29 @@ +@page "/pets4" + +

Pets

+ + + + ID + Name + + + @context.PetId + @context.Name + + + +@code { + private List pets = new() + { + new Pet { PetId = 2, Name = "Mr. Bigglesworth" }, + new Pet { PetId = 4, Name = "Salem Saberhagen" }, + new Pet { PetId = 7, Name = "K-9" } + }; + + private class Pet + { + public int PetId { get; set; } + public string? Name { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop1.razor new file mode 100644 index 00000000..7dbb10ca --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop1.razor @@ -0,0 +1,18 @@ +@page "/prerendered-interop-1" +@using Microsoft.JSInterop +@inject IJSRuntime JS + +
Text during render
+ +@code { + private ElementReference divElement; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await JS.InvokeVoidAsync( + "setElementText1", divElement, "Text after render"); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop2.razor new file mode 100644 index 00000000..66a9f664 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/PrerenderedInterop2.razor @@ -0,0 +1,31 @@ +@page "/prerendered-interop-2" +@using Microsoft.AspNetCore.Components +@using Microsoft.JSInterop +@inject IJSRuntime JS + +

+ Get value via JS interop call: + @(infoFromJs ?? "No value yet") +

+ +

+ Set value via JS interop call: +

+ +
+ +@code { + private string? infoFromJs; + private ElementReference divElement; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && infoFromJs == null) + { + infoFromJs = await JS.InvokeAsync( + "setElementText2", divElement, "Hello from interop call!"); + + StateHasChanged(); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ProductDetails.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ProductDetails.razor new file mode 100644 index 00000000..148b9a5b --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ProductDetails.razor @@ -0,0 +1,51 @@ +@page "/product-details/{ProductId:int}" +@using Microsoft.Extensions.Logging +@inject ILogger Logger +@inject IProductRepository ProductRepository + +@if (details != null) +{ +

@details.ProductName

+

@details.Description

+} +else if (loadFailed) +{ +

Sorry, we could not load this product due to an error.

+} +else +{ +

Loading...

+} + +@code { + private ProductDetail? details; + private bool loadFailed; + + [Parameter] + public int ProductId { get; set; } + + protected override async Task OnParametersSetAsync() + { + try + { + loadFailed = false; + details = await ProductRepository.GetProductByIdAsync(ProductId); + } + catch (Exception ex) + { + loadFailed = true; + Logger.LogWarning(ex, "Failed to load product {ProductId}", ProductId); + } + } + + public class ProductDetail + { + public string? ProductName { get; set; } + public string? Description { get; set; } + } + + public interface IProductRepository + { + public Task GetProductByIdAsync(int id); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RazorTemplate.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RazorTemplate.razor new file mode 100644 index 00000000..92972538 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RazorTemplate.razor @@ -0,0 +1,15 @@ +@page "/razor-template" + +@timeTemplate + +@petTemplate(new Pet { Name = "Nutty Rex" }) + +@code { + private RenderFragment timeTemplate = @

The time is @DateTime.Now.

; + private RenderFragment petTemplate = (pet) => @

Pet: @pet.Name

; + + private class Pet + { + public string? Name { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReceiveNotifications.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReceiveNotifications.razor new file mode 100644 index 00000000..8c782237 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReceiveNotifications.razor @@ -0,0 +1,52 @@ +@page "/receive-notifications" +@implements IDisposable +@inject NotifierService Notifier +@inject TimerService Timer + +

Receive Notifications

+ +

Timer Service

+ + + +

Notifications

+ +

+ Status: + @if (lastNotification.key is not null) + { + @lastNotification.key = @lastNotification.value + } + else + { + Awaiting first notification + } +

+ +@code { + private (string key, int value) lastNotification; + + protected override void OnInitialized() + { + Notifier.Notify += OnNotify; + } + + public async Task OnNotify(string key, int value) + { + await InvokeAsync(() => + { + lastNotification = (key, value); + StateHasChanged(); + }); + } + + private async Task StartTimer() + { + await Timer.Start(); + } + + public void Dispose() + { + Notifier.Notify -= OnNotify; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent1.razor new file mode 100644 index 00000000..d2bdf138 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent1.razor @@ -0,0 +1,11 @@ +@page "/reference-parent-1" + + + + + +@code { + private ReferenceChild? childComponent; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent2.razor new file mode 100644 index 00000000..ab3ae005 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ReferenceParent2.razor @@ -0,0 +1,25 @@ +@page "/reference-parent-2" + + + + + +@code { + private ReferenceChild? childComponent; + private Action? callChildMethod; + + protected override void OnAfterRender(bool firstRender) + { + if (firstRender) + { + callChildMethod = CallChildMethod; + } + } + + private void CallChildMethod() + { + childComponent?.ChildMethod(5); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderFragmentParent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderFragmentParent.razor new file mode 100644 index 00000000..ab6cf8c7 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderFragmentParent.razor @@ -0,0 +1,8 @@ +@page "/render-fragment-parent" + +

Render child content

+ + + Content of the child component is supplied + by the parent component. + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderNamedTupleParent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderNamedTupleParent.razor new file mode 100644 index 00000000..6567772f --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderNamedTupleParent.razor @@ -0,0 +1,10 @@ +@page "/render-named-tuple-parent" + +

Render Named Tuple Parent

+ + + +@code { + private (int TheInteger, string TheString, bool TheBoolean) data = + new(999, "I aim to misbehave.", true); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderTupleParent.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderTupleParent.razor new file mode 100644 index 00000000..81ec54d3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RenderTupleParent.razor @@ -0,0 +1,9 @@ +@page "/render-tuple-parent" + +

Render Tuple Parent

+ + + +@code { + private (int, string, bool) data = new(999, "I aim to misbehave.", true); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter.razor new file mode 100644 index 00000000..72e7bd26 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter.razor @@ -0,0 +1,13 @@ +@page "/route-parameter/{text?}" + +

Blazor is @Text!

+ +@code { + [Parameter] + public string? Text { get; set; } + + protected override void OnInitialized() + { + Text = Text ?? "fantastic"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter1.razor new file mode 100644 index 00000000..aff688f0 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter1.razor @@ -0,0 +1,8 @@ +@page "/route-parameter-1/{text}" + +

Blazor is @Text!

+ +@code { + [Parameter] + public string? Text { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter2.razor new file mode 100644 index 00000000..b219982d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/RouteParameter2.razor @@ -0,0 +1,13 @@ +@page "/route-parameter-2/{text?}" + +

Blazor is @Text!

+ +@code { + [Parameter] + public string? Text { get; set; } + + protected override void OnInitialized() + { + Text = Text ?? "fantastic"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/SetParamsAsync.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/SetParamsAsync.razor new file mode 100644 index 00000000..e0cf6db4 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/SetParamsAsync.razor @@ -0,0 +1,27 @@ +@page "/set-params-async/{Param?}" + +

@message

+ +@code { + private string message = "Not set"; + + [Parameter] + public string? Param { get; set; } + + public override async Task SetParametersAsync(ParameterView parameters) + { + if (parameters.TryGetValue(nameof(Param), out var value)) + { + if (value is null) + { + message = "The value of 'Param' is null."; + } + else + { + message = $"The value of 'Param' is {value}."; + } + } + + await base.SetParametersAsync(parameters); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage1.razor new file mode 100644 index 00000000..70375aea --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage1.razor @@ -0,0 +1,27 @@ +@page "/show-image-1" + +

Dynamic Image Source Example

+ +@if (imageSource is not null) +{ +

+ +

+} + +@for (var i = 1; i <= 3; i++) +{ + var imageId = i; + +} + +@code { + private string? imageSource; + + private void ShowImage(int id) + { + imageSource = $"images/image{id}.png"; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage2.razor new file mode 100644 index 00000000..d4e498be --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/ShowImage2.razor @@ -0,0 +1,28 @@ +@page "/show-image-2" +@inject HttpClient Http +@inject IJSRuntime JS + +

Stream Image Data Example

+ +

+ +

+ + + +@code { + private async Task GetImageStreamAsync() + { + return await Http.GetStreamAsync( + "https://avatars.githubusercontent.com/u/9141961"); + } + + private async Task SetImageAsync() + { + var imageStream = await GetImageStreamAsync(); + var dotnetImageStream = new DotNetStreamReference(imageStream); + await JS.InvokeVoidAsync("setImage", "image", dotnetImageStream); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Splat.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Splat.razor new file mode 100644 index 00000000..43ca730e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Splat.razor @@ -0,0 +1,26 @@ +@page "/splat" + + + + + +@code { + private string maxlength = "10"; + private string placeholder = "Input placeholder text"; + private string required = "required"; + private string size = "50"; + + private Dictionary InputAttributes { get; set; } = + new() + { + { "maxlength", "10" }, + { "placeholder", "Input placeholder text" }, + { "required", "required" }, + { "size", "50" } + }; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Todo.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Todo.razor new file mode 100644 index 00000000..1c2b2670 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/Todo.razor @@ -0,0 +1,32 @@ +@page "/todo" + +Todo + +

Todo (@todos.Count(todo => !todo.IsDone))

+ +
    + @foreach (var todo in todos) + { +
  • + + +
  • + } +
+ + + + +@code { + private List todos = new(); + private string? newTodo; + + private void AddTodo() + { + if (!string.IsNullOrWhiteSpace(newTodo)) + { + todos.Add(new TodoItem { Title = newTodo }); + newTodo = string.Empty; + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/UnparsableValues.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/UnparsableValues.razor new file mode 100644 index 00000000..577ea1c8 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/UnparsableValues.razor @@ -0,0 +1,13 @@ +@page "/unparseable-values" + +

+ +

+ +

+ inputValue: @inputValue +

+ +@code { + private int inputValue = 123; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/User.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/User.razor new file mode 100644 index 00000000..05aeea03 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Pages/User.razor @@ -0,0 +1,8 @@ +@page "/user/{Id:int}" + +

User Id: @Id

+ +@code { + [Parameter] + public int Id { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/PanelBody.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/PanelBody.cs new file mode 100644 index 00000000..fb5a245e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/PanelBody.cs @@ -0,0 +1,5 @@ +public class PanelBody +{ + public string? Text { get; set; } + public string? Style { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Program.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Program.cs new file mode 100644 index 00000000..519269f2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Program.cs @@ -0,0 +1,5 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); + +await builder.Build().RunAsync(); diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild1.razor new file mode 100644 index 00000000..eeff3c70 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild1.razor @@ -0,0 +1,6 @@ +
+ +@code { + [Parameter(CaptureUnmatchedValues = true)] + public IDictionary? AdditionalAttributes { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild2.razor new file mode 100644 index 00000000..34f9fbb5 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/AttributeOrderChild2.razor @@ -0,0 +1,6 @@ +
+ +@code { + [Parameter(CaptureUnmatchedValues = true)] + public IDictionary? AdditionalAttributes { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/BadExpander.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/BadExpander.razor new file mode 100644 index 00000000..0cb399b5 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/BadExpander.razor @@ -0,0 +1,23 @@ +
+
+

Toggle (Expanded = @Expanded)

+ + @if (Expanded) + { +

@ChildContent

+ } +
+
+ +@code { + [Parameter] + public bool Expanded { get; set; } + + [Parameter] + public RenderFragment? ChildContent { get; set; } + + private void Toggle() + { + Expanded = !Expanded; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Child.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Child.razor new file mode 100644 index 00000000..a95608a6 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Child.razor @@ -0,0 +1,16 @@ +

+ +

+ +@code { + [Parameter] + public string? Title { get; set; } + + [Parameter] + public RenderFragment? ChildContent { get; set; } + + [Parameter] + public EventCallback OnClickCallback { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ChildBind.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ChildBind.razor new file mode 100644 index 00000000..882de0d2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ChildBind.razor @@ -0,0 +1,24 @@ +
+
+

ChildBind Component

+

+ Child Year: @Year +

+ +
+
+ +@code { + private Random r = new(); + + [Parameter] + public int Year { get; set; } + + [Parameter] + public EventCallback YearChanged { get; set; } + + private async Task UpdateYearFromChild() + { + await YearChanged.InvokeAsync(r.Next(1950, 2021)); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/CustomInputText.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/CustomInputText.razor new file mode 100644 index 00000000..06081de6 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/CustomInputText.razor @@ -0,0 +1,6 @@ +@inherits InputText + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Details.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Details.razor new file mode 100644 index 00000000..17d9a4d9 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Details.razor @@ -0,0 +1,6 @@ + + +@code { + [Parameter] + public string? Data { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout.razor new file mode 100644 index 00000000..dac99327 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout.razor @@ -0,0 +1,23 @@ +@inherits LayoutComponentBase + +
+

Doctor Who™ Episode Database

+
+ + + +@Body + +
+ @TrademarkMessage +
+ +@code { + public string TrademarkMessage { get; set; } = + "Doctor Who is a registered trademark of the BBC. " + + "https://www.doctorwho.tv/"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout2.razor new file mode 100644 index 00000000..96b13042 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/DoctorWhoLayout2.razor @@ -0,0 +1,22 @@ +@inherits LayoutComponentBase +@layout ProductionsLayout + +

Doctor Who™ Episode Database

+ + + +@Body + +
+ @TrademarkMessage +
+ +@code { + public string TrademarkMessage { get; set; } = + "Doctor Who is a registered trademark of the BBC. " + + "https://www.doctorwho.tv/"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Expander.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Expander.razor new file mode 100644 index 00000000..b1509b1d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Expander.razor @@ -0,0 +1,30 @@ +
+
+

Toggle (expanded = @expanded)

+ + @if (expanded) + { +

@ChildContent

+ } +
+
+ +@code { + private bool expanded; + + [Parameter] + public bool Expanded { get; set; } + + [Parameter] + public RenderFragment? ChildContent { get; set; } + + protected override void OnInitialized() + { + expanded = Expanded; + } + + private void Toggle() + { + expanded = !expanded; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Heading.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Heading.razor new file mode 100644 index 00000000..273ff67a --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/Heading.razor @@ -0,0 +1,5 @@ +

Heading Example

+ +@code { + private string headingFontStyle = "italic"; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListGenericTypeItems1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListGenericTypeItems1.razor new file mode 100644 index 00000000..c5c59169 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListGenericTypeItems1.razor @@ -0,0 +1,16 @@ +@typeparam TExample + +@if (ExampleList is not null) +{ +
    + @foreach (var item in ExampleList) + { +
  • @item
  • + } +
+} + +@code { + [Parameter] + public IEnumerable? ExampleList{ get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem1.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem1.razor new file mode 100644 index 00000000..a4d9143f --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem1.razor @@ -0,0 +1,33 @@ +@inject IJSRuntime JS + +
  • + @message + +
  • + +@code { + private string message = "Select one of these list item buttons."; + private string display = "inline-block"; + private MessageUpdateInvokeHelper? messageUpdateInvokeHelper; + + protected override void OnInitialized() + { + messageUpdateInvokeHelper = new MessageUpdateInvokeHelper(UpdateMessage); + } + + protected async Task InteropCall() + { + if (messageUpdateInvokeHelper is not null) + { + await JS.InvokeVoidAsync("updateMessageCaller", + DotNetObjectReference.Create(messageUpdateInvokeHelper)); + } + } + + private void UpdateMessage() + { + message = "UpdateMessage Called!"; + display = "none"; + StateHasChanged(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem2.razor new file mode 100644 index 00000000..221f3b4b --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ListItem2.razor @@ -0,0 +1,32 @@ +@inject IJSRuntime JS + +
  • + @message + Not Updated Yet! +
  • + +@code { + private DotNetObjectReference? objRef; + private ElementReference elementRef; + private string display = "inline-block"; + private string message = "Select one of these list items."; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + objRef = DotNetObjectReference.Create(this); + await JS.InvokeVoidAsync("assignDotNetHelper", elementRef, objRef); + } + } + + [JSInvokable] + public void UpdateMessage() + { + message = "UpdateMessage Called!"; + display = "none"; + StateHasChanged(); + } + + public void Dispose() => objRef?.Dispose(); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MainLayout.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MainLayout.razor new file mode 100644 index 00000000..11499b27 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MainLayout.razor @@ -0,0 +1,17 @@ +@inherits LayoutComponentBase + +
    + + +
    +
    + About +
    + +
    + @Body +
    +
    +
    diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MeasureLatency.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MeasureLatency.razor new file mode 100644 index 00000000..d21c5538 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/MeasureLatency.razor @@ -0,0 +1,28 @@ +@inject IJSRuntime JS + +

    Measure Latency

    + +@if (latency is null) +{ + Calculating... +} +else +{ + @(latency.Value.TotalMilliseconds)ms +} + +@code { + private DateTime startTime; + private TimeSpan? latency; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + startTime = DateTime.UtcNow; + var _ = await JS.InvokeAsync("toString"); + latency = DateTime.UtcNow - startTime; + StateHasChanged(); + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedChild.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedChild.razor new file mode 100644 index 00000000..7ed64535 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedChild.razor @@ -0,0 +1,26 @@ +
    +

    Child Component

    + +

    Child Message: @ChildMessage

    + +

    + +

    + + +
    + +@code { + [Parameter] + public string? ChildMessage { get; set; } + + [Parameter] + public EventCallback ChildMessageChanged { get; set; } + + private async Task ChangeValue() + { + await ChildMessageChanged.InvokeAsync( + $"Set in Child {DateTime.Now}"); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedGrandchild.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedGrandchild.razor new file mode 100644 index 00000000..f4bde608 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/NestedGrandchild.razor @@ -0,0 +1,23 @@ +
    +

    Grandchild Component

    + +

    Grandchild Message: @GrandchildMessage

    + +

    + +

    +
    + +@code { + [Parameter] + public string? GrandchildMessage { get; set; } + + [Parameter] + public EventCallback GrandchildMessageChanged { get; set; } + + private async Task ChangeValue() + { + await GrandchildMessageChanged.InvokeAsync( + $"Set in Grandchild {DateTime.Now}"); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ParameterChild.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ParameterChild.razor new file mode 100644 index 00000000..c3aa47ad --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ParameterChild.razor @@ -0,0 +1,19 @@ +
    +
    @Title
    +
    + @Body.Text +
    +
    + +@code { + [Parameter] + public string Title { get; set; } = "Set By Child"; + + [Parameter] + public PanelBody Body { get; set; } = + new() + { + Text = "Set by child.", + Style = "normal" + }; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry.razor new file mode 100644 index 00000000..89c81512 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry.razor @@ -0,0 +1,40 @@ +
    +
    +

    Password Component

    +

    + +

    + +
    +
    + +@code { + private bool showPassword; + private string? password; + + [Parameter] + public string? Password { get; set; } + + [Parameter] + public EventCallback PasswordChanged { get; set; } + + private async Task OnPasswordChanged(ChangeEventArgs e) + { + password = e?.Value?.ToString(); + + await PasswordChanged.InvokeAsync(password); + } + + private void ToggleShowPassword() + { + showPassword = !showPassword; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry2.razor new file mode 100644 index 00000000..a14580e2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PasswordEntry2.razor @@ -0,0 +1,53 @@ +
    +
    +

    Password Component

    +

    + + @validationMessage +

    + +
    +
    + +@code { + private bool showPassword; + private string? password; + private string? validationMessage; + + [Parameter] + public string? Password { get; set; } + + [Parameter] + public EventCallback PasswordChanged { get; set; } + + private Task OnPasswordChanged(ChangeEventArgs e) + { + password = e?.Value?.ToString(); + + if (password != null && password.Contains(' ')) + { + validationMessage = "Spaces not allowed!"; + + return Task.CompletedTask; + } + else + { + validationMessage = string.Empty; + + return PasswordChanged.InvokeAsync(password); + } + } + + private void ToggleShowPassword() + { + showPassword = !showPassword; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PetDetails.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PetDetails.razor new file mode 100644 index 00000000..603b3e0c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/PetDetails.razor @@ -0,0 +1,9 @@ +

    Pet Details

    + +

    @PetDetailsQuote

    + +@code +{ + [Parameter] + public string? PetDetailsQuote { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ProductionsLayout.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ProductionsLayout.razor new file mode 100644 index 00000000..3ae22cf0 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ProductionsLayout.razor @@ -0,0 +1,17 @@ +@inherits LayoutComponentBase + +
    +

    Productions

    +
    + + + +@Body + +
    + Footer of Productions Layout +
    diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ReferenceChild.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ReferenceChild.razor new file mode 100644 index 00000000..cca6cae3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/ReferenceChild.razor @@ -0,0 +1,9 @@ +@using Microsoft.Extensions.Logging +@inject ILogger Logger + +@code { + public void ChildMethod(int value) + { + Logger.LogInformation("Received {Value} in ChildMethod", value); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderFragmentChild.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderFragmentChild.razor new file mode 100644 index 00000000..639e8267 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderFragmentChild.razor @@ -0,0 +1,9 @@ +
    +
    Child content
    +
    @ChildContent
    +
    + +@code { + [Parameter] + public RenderFragment? ChildContent { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderNamedTupleChild.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderNamedTupleChild.razor new file mode 100644 index 00000000..f3e777ba --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderNamedTupleChild.razor @@ -0,0 +1,15 @@ +
    +
    Tuple Card
    +
    +
      +
    • Integer: @Data?.TheInteger
    • +
    • String: @Data?.TheString
    • +
    • Boolean: @Data?.TheBoolean
    • +
    +
    +
    + +@code { + [Parameter] + public (int TheInteger, string TheString, bool TheBoolean)? Data { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderTupleChild.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderTupleChild.razor new file mode 100644 index 00000000..bc9fdec7 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RenderTupleChild.razor @@ -0,0 +1,15 @@ +
    +
    Tuple Card
    +
    +
      +
    • Integer: @Data?.Item1
    • +
    • String: @Data?.Item2
    • +
    • Boolean: @Data?.Item3
    • +
    +
    +
    + +@code { + [Parameter] + public (int, string, bool)? Data { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab.razor new file mode 100644 index 00000000..5b65edc0 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab.razor @@ -0,0 +1,6 @@ +

    Rocket Lab®

    + +

    + Rocket Lab is a registered trademark of + Rocket Lab USA Inc. +

    diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab2.razor new file mode 100644 index 00000000..3f844d0c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLab2.razor @@ -0,0 +1,15 @@ +

    Rocket Lab®

    + +

    + Rocket Lab is a registered trademark of + Rocket Lab USA Inc. +

    + + + +@code { + [Parameter] + public EventCallback OnClickCallback { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLabWithWindowSeat.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLabWithWindowSeat.razor new file mode 100644 index 00000000..9ebbd3b2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/RocketLabWithWindowSeat.razor @@ -0,0 +1,15 @@ +

    Rocket Lab®

    + +

    + User selected a window seat: @WindowSeat +

    + +

    + Rocket Lab is a trademark of + Rocket Lab USA Inc. +

    + +@code { + [Parameter] + public bool WindowSeat { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX.razor new file mode 100644 index 00000000..f9fe1fa0 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX.razor @@ -0,0 +1,6 @@ +

    SpaceX®

    + +

    + SpaceX is a registered trademark of + Space Exploration Technologies Corp. +

    diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX2.razor new file mode 100644 index 00000000..f76e8339 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SpaceX2.razor @@ -0,0 +1,15 @@ +

    SpaceX®

    + +

    + SpaceX is a registered trademark of + Space Exploration Technologies Corp. +

    + + + +@code { + [Parameter] + public EventCallback OnClickCallback { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor new file mode 100644 index 00000000..985ae43e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor @@ -0,0 +1,16 @@ +
    + + @Title + + + Please take our + brief survey + + and tell us what you think. +
    + +@code { + // Demonstrates how a parent component can supply parameters + [Parameter] + public string? Title { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor.cs new file mode 100644 index 00000000..ba85fb08 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/SurveyPrompt.razor.cs @@ -0,0 +1,46 @@ +using System; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; +namespace BlazorSample.Shared; + +public partial class SurveyPrompt : + ComponentBase, IObserver, IDisposable +{ + private IDisposable? subscription = null; + + [Parameter] + public IObservable? Parent { get; set; } + + [Inject] + public IJSRuntime? JS {get; set;} + + protected override void OnParametersSet() + { + base.OnParametersSet(); + + subscription?.Dispose(); + subscription = + Parent is not null ? Parent.Subscribe(this) : null; + } + + public void OnCompleted() + { + subscription = null; + } + + public void OnError(Exception error) + { + subscription = null; + } + + public void OnNext(ElementReference value) + { + JS.InvokeAsync( + "setElementClass", new object[] { value, "red" }); + } + + public void Dispose() + { + subscription?.Dispose(); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/TableTemplate.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/TableTemplate.razor new file mode 100644 index 00000000..ec9f6696 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/TableTemplate.razor @@ -0,0 +1,28 @@ +@typeparam TItem +@using System.Diagnostics.CodeAnalysis + + + + @TableHeader + + + @foreach (var item in Items) + { + if (RowTemplate is not null) + { + @RowTemplate(item) + } + } + +
    + +@code { + [Parameter] + public RenderFragment? TableHeader { get; set; } + + [Parameter] + public RenderFragment? RowTemplate { get; set; } + + [Parameter, AllowNull] + public IReadOnlyList Items { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance.razor new file mode 100644 index 00000000..217fbc11 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance.razor @@ -0,0 +1,6 @@ +

    United Launch Alliance®

    + +

    + United Launch Alliance and ULA are registered trademarks of + United Launch Alliance, LLC. +

    diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance2.razor new file mode 100644 index 00000000..c592c457 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/UnitedLaunchAlliance2.razor @@ -0,0 +1,15 @@ +

    United Launch Alliance®

    + +

    + United Launch Alliance and ULA are registered trademarks of + United Launch Alliance, LLC. +

    + + + +@code { + [Parameter] + public EventCallback OnClickCallback { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic.razor new file mode 100644 index 00000000..c12d5b34 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic.razor @@ -0,0 +1,6 @@ +

    Virgin Galactic®

    + +

    + Virgin Galactic is a registered trademark of + Galactic Enterprises, LLC. +

    diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic2.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic2.razor new file mode 100644 index 00000000..fb114664 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Shared/VirginGalactic2.razor @@ -0,0 +1,15 @@ +

    Virgin Galactic®

    + +

    + Virgin Galactic is a registered trademark of + Galactic Enterprises, LLC. +

    + + + +@code { + [Parameter] + public EventCallback OnClickCallback { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Starship.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Starship.cs new file mode 100644 index 00000000..ecef59c6 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/Starship.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations; + +public class Starship +{ + [Required] + [StringLength(16, ErrorMessage = "Identifier too long (16 character limit).")] + public string? Identifier { get; set; } + + public string? Description { get; set; } + + [Required] + public string? Classification { get; set; } + + [Range(1, 100000, ErrorMessage = "Accommodation invalid (1-100000).")] + public int MaximumAccommodation { get; set; } + + [Required] + [Range(typeof(bool), "true", "true", + ErrorMessage = "This form disallows unapproved ships.")] + public bool IsValidatedDesign { get; set; } + + [Required] + public DateTime ProductionDate { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TimerService.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TimerService.cs new file mode 100644 index 00000000..fd564e49 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TimerService.cs @@ -0,0 +1,39 @@ +namespace BlazorSample.Client; + +public class TimerService(NotifierService notifier, + ILogger logger) : IDisposable +{ + private int elapsedCount; + private readonly static TimeSpan heartbeatTickRate = TimeSpan.FromSeconds(5); + private readonly ILogger logger = logger; + private readonly NotifierService notifier = notifier; + private PeriodicTimer? timer; + + public async Task Start() + { + if (timer is null) + { + timer = new(heartbeatTickRate); + logger.LogInformation("Started"); + + using (timer) + { + while (await timer.WaitForNextTickAsync()) + { + elapsedCount += 1; + await notifier.Update("elapsedCount", elapsedCount); + logger.LogInformation("ElapsedCount {Count}", elapsedCount); + } + } + } + } + + public void Dispose() + { + timer?.Dispose(); + + // The following prevents derived types that introduce a + // finalizer from needing to re-implement IDisposable. + GC.SuppressFinalize(this); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TodoItem.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TodoItem.cs new file mode 100644 index 00000000..e9dbfbe2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/TodoItem.cs @@ -0,0 +1,5 @@ +public class TodoItem +{ + public string? Title { get; set; } + public bool IsDone { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/UploadResult.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/UploadResult.cs new file mode 100644 index 00000000..441f5020 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/UploadResult.cs @@ -0,0 +1,7 @@ +public class UploadResult +{ + public bool Uploaded { get; set; } + public string? FileName { get; set; } + public string? StoredFileName { get; set; } + public int ErrorCode { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecast.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecast.cs new file mode 100644 index 00000000..168c3efb --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecast.cs @@ -0,0 +1,12 @@ +namespace BlazorSample.Client; + +public class WeatherForecast +{ + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecastService.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecastService.cs new file mode 100644 index 00000000..e63536c2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/WeatherForecastService.cs @@ -0,0 +1,19 @@ +namespace BlazorSample.Client; + +public class WeatherForecastService +{ + private static readonly string[] Summaries = + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + public Task GetForecastAsync(DateOnly startDate) + { + return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }).ToArray()); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/_Imports.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/_Imports.razor new file mode 100644 index 00000000..7ad57886 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/_Imports.razor @@ -0,0 +1,10 @@ +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using BlazorSample.Client +@using BlazorSample.Client.Shared diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.Development.json b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.json b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/files/quote.txt b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/files/quote.txt new file mode 100644 index 00000000..22e3eea5 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/files/quote.txt @@ -0,0 +1,5 @@ +When victory is ours, we'll wipe every trace of the Thals and their city from the face of this land. We will avenge the deaths of all Kaleds who've fallen in the cause of right and justice and build a peace which will be a monument to their sacrifice. Our battle cry will be "Total extermination of the Thals!" + +- General Ravon (Guy Siner, http://guysiner.com/) + Dr. Who: Genesis of the Daleks (https://www.bbc.co.uk/programmes/p00pq2gc) + ©1975 BBC (https://www.bbc.co.uk/) diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image1.png b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..ecb76e5965abec0411858a846288d788011daade GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-u0VRmj2VXyAO8RUzh&l4 z7a-r&)5S5w!aw;(KbwTxE(T^P1#gC{XBveXcD0Ex9t(AN(4caFWs#H{>k4fKp3iJc vSe&OZ90`bcGEteKGiO6#z;s21iA)UjGymG!cf5KEG?2m5)z4*}Q$iB}OW!X} literal 0 HcmV?d00001 diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image2.png b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..16d6ae6b723bd9b6df473fc4e805ce15eb6da8de GIT binary patch literal 623 zcmV-#0+9WQP)f41lR%1}fNr2xhPX4QOBk5|F?G6tKZM_{u;P1|A&u>)o#toK_=z40N?0*(lQr>0gYG;l9 zSoIwGUs)*cq`@%RetR&b27|UZAnASyp?PK2$22Y1rx<=n04Bu_z{~wC`0=s1jZRY?0002ov JPDHLkV1j(&8_@s& literal 0 HcmV?d00001 diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image3.png b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/images/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c7e374acfa6da7705f9f4820c5ff484b03e044 GIT binary patch literal 798 zcmV+(1L6FMP)%O#JSn}j6f308AX z$@NgqwGG&J1bpiiBh$l_{}v#cgMiOr;uio>Q-VHJ$4>yJ9_Pxq?0IxX@d{zK0O9>m z%+^LDUf_TOSc)0iJ4Y=Bpm)bF0QI`3VE|c-M>Bpwyy=k;Kt4~;q`7d&c~jXTSAcTf z=O5I^#g1^YVxXr30_pu{xA*q`!HAfMC#&~?^>KIr?8Da!;Uqw)Qd0R{b}nWF+XI9* zzC6W7#K8t$O-$t*8ajYVG$K^3o{@9bIG6ADPD@rUs{m#pJ)8*5AM;rD)4Tw2Egz}? zHg)&7+h!Uc0KJwS2a4YhrTvDPfCebY0lC^4Gr$r7VIdkyKp#v7nDl3<_|$U0Xw(hh z=eN-PU80A_UjS-00IX(2p0G3FovMsfbebfK8&7y^*a<3cFRU~c0MpP~?Z z)q49gT$OV?XinpBnQbXTjSv$L43=@M(S|lfWGXB0e>(`(sGK|5F5L&@h-<}^>nv_b zuQmXo2#VP&hg<+`6O`h$jr-Us>0C?cs<8M{O)LZW_?Uw9Zb` zTAN-2yaNb*Yb*AIP2tlBlUeueoo@uxz|~OOdpUAeE`8DJ#{uI>z6YrQ9WSZp^N>XY zq`=_$WymVjd}go#;6Piwg$B(q$pw(Wlsq(OcB5_!qBtN~Lq^>;Y&T5!oX0``Eko1!olda_#$v#q;m0?>{Wx czgz!*04T>kuVs~vqyPW_07*qoM6N<$f?b(t0ssI2 literal 0 HcmV?d00001 diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/mapComponent.js b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/mapComponent.js new file mode 100644 index 00000000..11b50cb3 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/mapComponent.js @@ -0,0 +1,16 @@ +import 'https://api.mapbox.com/mapbox-gl-js/v1.12.0/mapbox-gl.js'; + +mapboxgl.accessToken = 'pk.eyJ1IjoiZ3VhcmRyZXgiLCJhIjoiY2tvZnBkZmlqMGtyZTJ3bnJvdjJ0bWNhNiJ9.zvSwQMBflS5EjgC3dp4cyg'; + +export function addMapToElement(element) { + return new mapboxgl.Map({ + container: element, + style: 'mapbox://styles/mapbox/streets-v11', + center: [-74.5, 40], + zoom: 9 + }); +} + +export function setMapCenter(map, latitude, longitude) { + map.setCenter([longitude, latitude]); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/scripts.js b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/scripts.js new file mode 100644 index 00000000..b1a1f2e0 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample.Client/wwwroot/scripts.js @@ -0,0 +1,3 @@ +export function showPrompt(message) { + return prompt(message, 'Type anything here'); +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/BlazorSample.csproj b/8.0/BlazorSample_BlazorWebApp/BlazorSample/BlazorSample.csproj new file mode 100644 index 00000000..8883b212 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/BlazorSample.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/App.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/App.razor new file mode 100644 index 00000000..ebaa0f15 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/App.razor @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor new file mode 100644 index 00000000..5a24bb13 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor @@ -0,0 +1,23 @@ +@inherits LayoutComponentBase + +
    + + +
    +
    + About +
    + +
    + @Body +
    +
    +
    + +
    + An unhandled error has occurred. + Reload + 🗙 +
    diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor.css b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor.css new file mode 100644 index 00000000..038baf17 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/MainLayout.razor.css @@ -0,0 +1,96 @@ +.page { + position: relative; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +.sidebar { + background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); +} + +.top-row { + background-color: #f7f7f7; + border-bottom: 1px solid #d6d5d5; + justify-content: flex-end; + height: 3.5rem; + display: flex; + align-items: center; +} + + .top-row ::deep a, .top-row ::deep .btn-link { + white-space: nowrap; + margin-left: 1.5rem; + text-decoration: none; + } + + .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { + text-decoration: underline; + } + + .top-row ::deep a:first-child { + overflow: hidden; + text-overflow: ellipsis; + } + +@media (max-width: 640.98px) { + .top-row { + justify-content: space-between; + } + + .top-row ::deep a, .top-row ::deep .btn-link { + margin-left: 0; + } +} + +@media (min-width: 641px) { + .page { + flex-direction: row; + } + + .sidebar { + width: 250px; + height: 100vh; + position: sticky; + top: 0; + } + + .top-row { + position: sticky; + top: 0; + z-index: 1; + } + + .top-row.auth ::deep a:first-child { + flex: 1; + text-align: right; + width: 0; + } + + .top-row, article { + padding-left: 2rem !important; + padding-right: 1.5rem !important; + } +} + +#blazor-error-ui { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + + #blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; + } diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor new file mode 100644 index 00000000..8b769f9d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor @@ -0,0 +1,38 @@ + + + + + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor.css b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor.css new file mode 100644 index 00000000..4e15395e --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Layout/NavMenu.razor.css @@ -0,0 +1,105 @@ +.navbar-toggler { + appearance: none; + cursor: pointer; + width: 3.5rem; + height: 2.5rem; + color: white; + position: absolute; + top: 0.5rem; + right: 1rem; + border: 1px solid rgba(255, 255, 255, 0.1); + background: 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") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); +} + +.navbar-toggler:checked { + background-color: rgba(255, 255, 255, 0.5); +} + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.bi { + display: inline-block; + position: relative; + width: 1.25rem; + height: 1.25rem; + margin-right: 0.75rem; + top: -1px; + background-size: cover; +} + +.bi-house-door-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); +} + +.bi-plus-square-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); +} + +.bi-list-nested-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep .nav-link { + color: #d7d7d7; + background: none; + border: none; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + width: 100%; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.37); + color: white; +} + +.nav-item ::deep .nav-link:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +.nav-scrollable { + display: none; +} + +.navbar-toggler:checked ~ .nav-scrollable { + display: block; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .nav-scrollable { + /* Never collapse the sidebar for wide screens */ + display: block; + + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/CounterServer.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/CounterServer.razor new file mode 100644 index 00000000..d92b3b2c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/CounterServer.razor @@ -0,0 +1,19 @@ +@page "/counter-server" +@rendermode InteractiveServer + +Counter (Server) + +

    Counter (Server)

    + +

    Current count: @currentCount

    + + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Error.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Error.razor new file mode 100644 index 00000000..576cc2d2 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Error.razor @@ -0,0 +1,36 @@ +@page "/Error" +@using System.Diagnostics + +Error + +

    Error.

    +

    An error occurred while processing your request.

    + +@if (ShowRequestId) +{ +

    + Request ID: @RequestId +

    +} + +

    Development Mode

    +

    + Swapping to Development environment will display more 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. +

    + +@code{ + [CascadingParameter] + private HttpContext? HttpContext { get; set; } + + private string? RequestId { get; set; } + private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + protected override void OnInitialized() => + RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Home.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Home.razor new file mode 100644 index 00000000..9001e0bd --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Home.razor @@ -0,0 +1,7 @@ +@page "/" + +Home + +

    Hello, world!

    + +Welcome to your new app. diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Weather.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Weather.razor new file mode 100644 index 00000000..43a1ecbe --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Pages/Weather.razor @@ -0,0 +1,64 @@ +@page "/weather" +@attribute [StreamRendering] + +Weather + +

    Weather

    + +

    This component demonstrates showing data.

    + +@if (forecasts == null) +{ +

    Loading...

    +} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
    DateTemp. (C)Temp. (F)Summary
    @forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
    +} + +@code { + private WeatherForecast[]? forecasts; + + protected override async Task OnInitializedAsync() + { + // Simulate asynchronous loading to demonstrate streaming rendering + await Task.Delay(500); + + var startDate = DateOnly.FromDateTime(DateTime.Now); + var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; + forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = summaries[Random.Shared.Next(summaries.Length)] + }).ToArray(); + } + + private class WeatherForecast + { + public DateOnly Date { get; set; } + public int TemperatureC { get; set; } + public string? Summary { get; set; } + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Routes.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Routes.razor new file mode 100644 index 00000000..37710301 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/_Imports.razor b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/_Imports.razor new file mode 100644 index 00000000..0e66dab9 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Components/_Imports.razor @@ -0,0 +1,12 @@ +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using BlazorSample +@using BlazorSample.Client +@using BlazorSample.Components +@using BlazorSample.Components.Layout diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/DetectIncorrectUsagesOfTransientDisposables.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample/DetectIncorrectUsagesOfTransientDisposables.cs new file mode 100644 index 00000000..dc7de273 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/DetectIncorrectUsagesOfTransientDisposables.cs @@ -0,0 +1,145 @@ +using Microsoft.AspNetCore.Components.Server.Circuits; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace Microsoft.Extensions.DependencyInjection +{ + using BlazorServerTransientDisposable; + + public static class WebHostBuilderTransientDisposableExtensions + { + public static WebApplicationBuilder DetectIncorrectUsageOfTransients( + this WebApplicationBuilder builder) + { + builder.Host + .UseServiceProviderFactory( + new DetectIncorrectUsageOfTransientDisposablesServiceFactory()) + .ConfigureServices( + s => s.TryAddEnumerable(ServiceDescriptor.Scoped())); + + return builder; + } + } +} + +namespace BlazorServerTransientDisposable +{ + internal class ThrowOnTransientDisposableHandler : CircuitHandler + { + public ThrowOnTransientDisposableHandler( + ThrowOnTransientDisposable throwOnTransientDisposable) + { + throwOnTransientDisposable.ShouldThrow = true; + } + } + + public class DetectIncorrectUsageOfTransientDisposablesServiceFactory + : IServiceProviderFactory + { + public IServiceCollection CreateBuilder(IServiceCollection services) => + services; + + public IServiceProvider CreateServiceProvider( + IServiceCollection containerBuilder) + { + var collection = new ServiceCollection(); + + foreach (var descriptor in containerBuilder) + { + if (descriptor.Lifetime == ServiceLifetime.Transient && + descriptor.ImplementationType != null && + typeof(IDisposable).IsAssignableFrom( + descriptor.ImplementationType)) + { + collection.Add(CreatePatchedDescriptor(descriptor)); + } + else if (descriptor.Lifetime == ServiceLifetime.Transient && + descriptor.ImplementationFactory != null) + { + collection.Add(CreatePatchedFactoryDescriptor(descriptor)); + } + else + { + collection.Add(descriptor); + } + } + + collection.AddScoped(); + + return collection.BuildServiceProvider(); + } + + private ServiceDescriptor CreatePatchedFactoryDescriptor( + ServiceDescriptor original) + { + var newDescriptor = new ServiceDescriptor( + original.ServiceType, + (sp) => + { + var originalFactory = original.ImplementationFactory; + + if (originalFactory is null) + { + throw new InvalidOperationException( + "originalFactory is null."); + } + + var originalResult = originalFactory(sp); + + var throwOnTransientDisposable = + sp.GetRequiredService(); + if (throwOnTransientDisposable.ShouldThrow && + originalResult is IDisposable d) + { + throw new InvalidOperationException("Trying to resolve " + + $"transient disposable service {d.GetType().Name} in " + + "the wrong scope. Use an 'OwningComponentBase' " + + "component base class for the service 'T' you are " + + "trying to resolve."); + } + + return originalResult; + }, + original.Lifetime); + + return newDescriptor; + } + + private ServiceDescriptor CreatePatchedDescriptor( + ServiceDescriptor original) + { + var newDescriptor = new ServiceDescriptor( + original.ServiceType, + (sp) => { + var throwOnTransientDisposable = + sp.GetRequiredService(); + if (throwOnTransientDisposable.ShouldThrow) + { + throw new InvalidOperationException("Trying to resolve " + + "transient disposable service " + + $"{original.ImplementationType?.Name} in the wrong " + + "scope. Use an 'OwningComponentBase' component " + + "base class for the service 'T' you are trying to " + + "resolve."); + } + + if (original.ImplementationType is null) + { + throw new InvalidOperationException( + "ImplementationType is null."); + } + + return ActivatorUtilities.CreateInstance(sp, + original.ImplementationType); + }, + ServiceLifetime.Transient); + + return newDescriptor; + } + } + + internal class ThrowOnTransientDisposable + { + public bool ShouldThrow { get; set; } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Program.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Program.cs new file mode 100644 index 00000000..8cacb02d --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Program.cs @@ -0,0 +1,38 @@ +using BlazorSample.Client; +using BlazorSample.Components; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddRazorComponents() + .AddInteractiveServerComponents() + .AddInteractiveWebAssemblyComponents(); + +builder.Services.AddSingleton(); +builder.Services.AddScoped(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseWebAssemblyDebugging(); +} +else +{ + app.UseExceptionHandler("/Error", createScopeForErrors: true); + // 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.UseAntiforgery(); + +app.MapRazorComponents() + .AddInteractiveServerRenderMode() + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(BlazorSample.Client._Imports).Assembly); + +app.Run(); diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/Properties/launchSettings.json b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Properties/launchSettings.json new file mode 100644 index 00000000..cf63780b --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:61181", + "sslPort": 44311 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5131", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7077;http://localhost:5131", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } + } diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/TrackingCircuitHandler.cs b/8.0/BlazorSample_BlazorWebApp/BlazorSample/TrackingCircuitHandler.cs new file mode 100644 index 00000000..16a198d5 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/TrackingCircuitHandler.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Components.Server.Circuits; + +public class TrackingCircuitHandler : CircuitHandler +{ + private HashSet circuits = new(); + + public override Task OnConnectionUpAsync(Circuit circuit, + CancellationToken cancellationToken) + { + circuits.Add(circuit); + + return Task.CompletedTask; + } + + public override Task OnConnectionDownAsync(Circuit circuit, + CancellationToken cancellationToken) + { + circuits.Remove(circuit); + + return Task.CompletedTask; + } + + public int ConnectedCircuits => circuits.Count; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.Development.json b/8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.json b/8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.json new file mode 100644 index 00000000..10f68b8c --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/app.css b/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/app.css new file mode 100644 index 00000000..2bd9b789 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/app.css @@ -0,0 +1,51 @@ +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +a, .btn-link { + color: #006bb7; +} + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { + box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; +} + +.content { + padding-top: 1.1rem; +} + +h1:focus { + outline: none; +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid #e50000; +} + +.validation-message { + color: #e50000; +} + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + + .blazor-error-boundary::after { + content: "An error has occurred." + } + +.darker-border-checkbox.form-check-input { + border-color: #929292; +} diff --git a/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/bootstrap/bootstrap.min.css b/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/bootstrap/bootstrap.min.css new file mode 100644 index 00000000..02ae65b5 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/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/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/bootstrap/bootstrap.min.css.map b/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/bootstrap/bootstrap.min.css.map new file mode 100644 index 00000000..afcd9e33 --- /dev/null +++ b/8.0/BlazorSample_BlazorWebApp/BlazorSample/wwwroot/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-`