├── .dockerignore ├── .github └── funding.yml ├── .gitignore ├── Dockerfile ├── DotNetify.Blazor.sln ├── README.md ├── Source ├── ClientConfiguration.cs ├── DotNetify.Blazor.csproj ├── ElementEventArgs.cs ├── ExceptionEventArgs.cs ├── IStylesheet.cs ├── IVMProxy.cs ├── IVMState.cs ├── JSCallback.cs ├── JSInterop.cs ├── LICENSE.md ├── Properties │ └── dotnetify.png ├── ServiceExtensions.cs ├── StyleSheet.razor ├── StylesheetLoader.cs ├── TypeProxy.cs ├── VMConnectOptions.cs ├── VMContext.razor ├── VMProxy.cs ├── bundleconfig.json └── wwwroot │ ├── dotnetify-blazor.js │ ├── dotnetify-blazor.min.js │ └── dotnetify.png ├── Templates ├── Basic.sln └── Basic │ ├── Client │ ├── App.razor │ ├── Basic.Client.csproj │ ├── Pages │ │ ├── Counter.razor │ │ ├── FetchData.razor │ │ ├── HelloWorld.razor │ │ └── Index.razor │ ├── Program.cs │ ├── Shared │ │ ├── MainLayout.razor │ │ ├── NavMenu.razor │ │ └── SurveyPrompt.razor │ ├── _Imports.razor │ └── wwwroot │ │ ├── css │ │ ├── app.css │ │ ├── bootstrap │ │ │ ├── bootstrap.min.css │ │ │ └── bootstrap.min.css.map │ │ └── open-iconic │ │ │ ├── FONT-LICENSE │ │ │ ├── ICON-LICENSE │ │ │ ├── README.md │ │ │ └── font │ │ │ ├── css │ │ │ └── open-iconic-bootstrap.min.css │ │ │ └── fonts │ │ │ ├── open-iconic.eot │ │ │ ├── open-iconic.otf │ │ │ ├── open-iconic.svg │ │ │ ├── open-iconic.ttf │ │ │ └── open-iconic.woff │ │ ├── favicon.ico │ │ └── index.html │ ├── Server │ ├── Basic.Server.csproj │ ├── Program.cs │ ├── Services │ │ └── WeatherForecastService.cs │ ├── Startup.cs │ ├── ViewModels │ │ ├── Counter.cs │ │ ├── FetchData.cs │ │ └── HelloWorld.cs │ ├── appsettings.Development.json │ └── appsettings.json │ └── Shared │ ├── Basic.Shared.csproj │ ├── ICounterState.cs │ ├── IFetchDataState.cs │ ├── IHelloWorldState.cs │ ├── Person.cs │ └── WeatherForecast.cs ├── UnitTests ├── TypeProxyTest.cs └── UnitTests.csproj ├── Website ├── Website.Client │ ├── App.razor │ ├── Pages │ │ ├── 1_Overview │ │ │ ├── AWSIntegration.razor │ │ │ ├── Basics.razor │ │ │ ├── DataFlow.razor │ │ │ ├── GetStarted.razor │ │ │ ├── Index.razor │ │ │ ├── Reactive.razor │ │ │ ├── RealtimePostgres.razor │ │ │ ├── Scaleout.razor │ │ │ └── Snippets │ │ │ │ ├── Details.razor │ │ │ │ ├── Master.razor │ │ │ │ ├── MasterDetails.razor │ │ │ │ ├── RealtimePush.razor │ │ │ │ └── ServerUpdate.razor │ │ ├── 2_Examples │ │ │ ├── ChatRoom.razor │ │ │ ├── Chatroom.razor.scss │ │ │ ├── CompositeView │ │ │ │ ├── CompositeView.razor │ │ │ │ ├── CompositeView.razor.scss │ │ │ │ ├── MovieDetails.razor │ │ │ │ ├── MovieFilter.razor │ │ │ │ └── MovieTable.razor │ │ │ ├── ControlTypes.razor │ │ │ ├── ControlTypes.razor.scss │ │ │ ├── Dashboard │ │ │ │ ├── ActivitiesCard.razor │ │ │ │ ├── ActivitiesCard.razor.scss │ │ │ │ ├── Dashboard.razor │ │ │ │ ├── InfoCard.razor │ │ │ │ └── InfoCard.razor.scss │ │ │ ├── Form │ │ │ │ ├── AddressForm.razor │ │ │ │ ├── Form.razor │ │ │ │ ├── FormTabs.razor │ │ │ │ ├── NewFormDialog.razor │ │ │ │ ├── PersonForm.razor │ │ │ │ └── PhoneForm.razor │ │ │ ├── HelloWorld.razor │ │ │ ├── HelloWorld.razor.scss │ │ │ ├── SecurePage │ │ │ │ ├── AdminSecurePage.razor │ │ │ │ ├── Login.razor │ │ │ │ ├── Login.razor.scss │ │ │ │ └── SecurePage.razor │ │ │ ├── SimpleList.razor │ │ │ └── SimpleList.razor.scss │ │ ├── 3_APIReferences │ │ │ ├── CRUD.razor │ │ │ ├── DI.razor │ │ │ ├── DotNetClient.razor │ │ │ ├── Filter.razor │ │ │ ├── Middleware.razor │ │ │ ├── Multicast.razor │ │ │ ├── ScopedCss.razor │ │ │ ├── Security.razor │ │ │ └── WebApiMode.razor │ │ ├── 4_Premium │ │ │ ├── DotNetifyLoadTester.razor │ │ │ ├── DotNetifyObserver.razor │ │ │ ├── DotNetifyResiliencyAddon.razor │ │ │ └── DotNetifyTesting.razor │ │ └── _Imports.razor │ ├── Program.cs │ ├── Properties │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Shared │ │ ├── ArticleLayout.razor │ │ ├── ArticleLayout.razor.scss │ │ ├── ExampleLayout.razor │ │ ├── Expander.razor │ │ ├── Expander.razor.scss │ │ ├── GithubLink.razor │ │ ├── GithubLink.razor.scss │ │ ├── MainLayout.razor │ │ ├── MainLayout.razor.scss │ │ ├── MenuLinks.razor │ │ ├── MenuLinks.razor.scss │ │ ├── SelectFramework.razor │ │ ├── SelectFramework.razor.scss │ │ ├── TwitterLink.razor │ │ └── TwitterLink.razor.scss │ ├── Website.Client.csproj │ ├── _Imports.razor │ └── wwwroot │ │ ├── app.js │ │ ├── assets │ │ ├── AWSIntegration.svg │ │ ├── ScopedVMPattern.svg │ │ ├── SiloedVMPattern.svg │ │ └── SingleVMPattern.svg │ │ ├── css │ │ ├── app.css │ │ ├── bootstrap │ │ │ ├── bootstrap.min.css │ │ │ └── bootstrap.min.css.map │ │ └── prism.css │ │ ├── dotnetify-elements.bundle.js │ │ ├── dotnetify-react.min.js │ │ ├── favicon.ico │ │ └── index.html └── Website.Server │ ├── AuthServer.cs │ ├── Docs │ ├── CRUD.md │ ├── DI.md │ ├── DotNetClient.md │ ├── Examples │ │ ├── ChatRoom.md │ │ ├── CompositeView.md │ │ ├── ControlTypes.md │ │ ├── Dashboard.md │ │ ├── Form.md │ │ ├── HelloWorld.md │ │ ├── SecurePage.md │ │ └── SimpleList.md │ ├── Filter.md │ ├── Middleware.md │ ├── Multicast.md │ ├── Overview │ │ ├── AWSIntegration.md │ │ ├── Basics.md │ │ ├── DataFlow.md │ │ ├── GetStarted.md │ │ ├── Overview.md │ │ ├── Reactive.md │ │ ├── RealtimePostgres.md │ │ └── Scaleout.md │ ├── Premium │ │ ├── DotNetifyLoadTester.md │ │ ├── DotNetifyObserver.md │ │ ├── DotNetifyResiliencyAddon.md │ │ └── DotNetifyTesting.md │ ├── ScopedCss.md │ ├── Security.md │ └── WebApiMode.md │ ├── ExamplePipelines │ ├── ExtractAccessTokenMiddleware.cs │ └── SetAccessTokenFilter.cs │ ├── Program.cs │ ├── Properties │ ├── PublishProfiles │ │ └── FTPProfile.pubxml │ └── launchSettings.json │ ├── Services │ ├── AFITop100.json │ ├── EmployeeRepository.cs │ ├── MockLiveDataService.cs │ ├── MovieService.cs │ ├── WebStoreService.cs │ └── webstore.json │ ├── Startup.cs │ ├── ViewModels │ ├── Docs.cs │ ├── Examples │ │ ├── ChatRoom.cs │ │ ├── CompositeView │ │ │ ├── CompositeView.cs │ │ │ ├── FilterableMovieTableVM.cs │ │ │ ├── MovieDetailsVM.cs │ │ │ ├── MovieFilterVM.cs │ │ │ └── MovieTableVM.cs │ │ ├── ControlTypes.cs │ │ ├── HelloWorld.cs │ │ ├── LiveChart.cs │ │ ├── MasterDetails.cs │ │ ├── Overview.cs │ │ ├── SecurePage.cs │ │ └── SimpleList.cs │ ├── ExamplesWithElements │ │ ├── Dashboard.cs │ │ └── Form │ │ │ ├── AddressForm.cs │ │ │ ├── CustomerForm.cs │ │ │ ├── CustomerFormData.cs │ │ │ ├── NewCustomerForm.cs │ │ │ ├── PersonForm.cs │ │ │ ├── PhoneForm.cs │ │ │ └── Services │ │ │ ├── Customer.cs │ │ │ └── CustomerRepository.cs │ └── MainNav.cs │ ├── Website.Server.csproj │ ├── appsettings.json │ └── pulse-ui │ ├── index.html │ ├── section.html │ ├── section_template.html │ └── style.css └── deploy.bat /.github/funding.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [dsuryd] 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build 2 | LABEL stage=build 3 | WORKDIR /src 4 | COPY ./Source ./Source 5 | COPY ./Website ./Website 6 | 7 | RUN dotnet publish ./Website/Website.Server/Website.Server.csproj -c Release -o /app 8 | 9 | FROM mcr.microsoft.com/dotnet/aspnet:6.0 10 | WORKDIR /app 11 | COPY --from=build /app . 12 | ARG aspnetenv=Production 13 | 14 | ENV ASPNETCORE_ENVIRONMENT ${aspnetenv} 15 | CMD ASPNETCORE_URLS=http://*:$PORT dotnet Website.Server.dll 16 | -------------------------------------------------------------------------------- /DotNetify.Blazor.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.0.31903.59 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetify.Blazor", "Source\DotNetify.Blazor.csproj", "{CDF41D3D-4540-4C0B-810E-0B6AAEB7C7E2}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Website.Client", "Website\Website.Client\Website.Client.csproj", "{FA792C80-6B46-4FF0-9152-517A58F9E6E6}" 9 | EndProject 10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Website.Server", "Website\Website.Server\Website.Server.csproj", "{0EE42035-815F-4A38-84B9-76C10FB35245}" 11 | EndProject 12 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "UnitTests\UnitTests.csproj", "{62C2DA59-FBE5-453B-ACB9-8FC907A6FE91}" 13 | EndProject 14 | Global 15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 16 | Debug|Any CPU = Debug|Any CPU 17 | Release|Any CPU = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {CDF41D3D-4540-4C0B-810E-0B6AAEB7C7E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {CDF41D3D-4540-4C0B-810E-0B6AAEB7C7E2}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {CDF41D3D-4540-4C0B-810E-0B6AAEB7C7E2}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {CDF41D3D-4540-4C0B-810E-0B6AAEB7C7E2}.Release|Any CPU.Build.0 = Release|Any CPU 24 | {FA792C80-6B46-4FF0-9152-517A58F9E6E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 25 | {FA792C80-6B46-4FF0-9152-517A58F9E6E6}.Debug|Any CPU.Build.0 = Debug|Any CPU 26 | {FA792C80-6B46-4FF0-9152-517A58F9E6E6}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {FA792C80-6B46-4FF0-9152-517A58F9E6E6}.Release|Any CPU.Build.0 = Release|Any CPU 28 | {0EE42035-815F-4A38-84B9-76C10FB35245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {0EE42035-815F-4A38-84B9-76C10FB35245}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {0EE42035-815F-4A38-84B9-76C10FB35245}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {0EE42035-815F-4A38-84B9-76C10FB35245}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {62C2DA59-FBE5-453B-ACB9-8FC907A6FE91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {62C2DA59-FBE5-453B-ACB9-8FC907A6FE91}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {62C2DA59-FBE5-453B-ACB9-8FC907A6FE91}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {62C2DA59-FBE5-453B-ACB9-8FC907A6FE91}.Release|Any CPU.Build.0 = Release|Any CPU 36 | EndGlobalSection 37 | GlobalSection(SolutionProperties) = preSolution 38 | HideSolutionNode = FALSE 39 | EndGlobalSection 40 | GlobalSection(ExtensibilityGlobals) = postSolution 41 | SolutionGuid = {370057FB-033F-4D2E-A912-5CA47F7696A2} 42 | EndGlobalSection 43 | EndGlobal 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |