├── .gitignore
├── .vs
├── Packt
│ ├── config
│ │ └── applicationhost.config
│ └── v16
│ │ └── .suo
├── VSWorkspaceState.json
└── slnx.sqlite
├── Chapter02
├── Demo
│ ├── Demo.sln
│ └── Demo
│ │ ├── App.razor
│ │ ├── Demo.csproj
│ │ ├── Pages
│ │ ├── Counter.razor
│ │ ├── Counter.razor.cs
│ │ ├── FetchData.razor
│ │ └── Index.razor
│ │ ├── Program.cs
│ │ ├── Shared
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ ├── NavMenu.razor.css
│ │ └── SurveyPrompt.razor
│ │ ├── _Imports.razor
│ │ ├── obj
│ │ └── HPD
│ │ │ ├── Debug
│ │ │ └── net5.0
│ │ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ │ ├── Demo.AssemblyInfo.cs
│ │ │ │ ├── Demo.AssemblyInfoInputs.cache
│ │ │ │ ├── Demo.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ ├── Demo.RazorComponent.input.cache
│ │ │ │ ├── Demo.RazorComponent.output.cache
│ │ │ │ ├── Demo.csprojAssemblyReference.cache
│ │ │ │ └── RazorDeclaration
│ │ │ │ ├── App.razor.g.cs
│ │ │ │ ├── Pages
│ │ │ │ ├── Counter.razor.g.cs
│ │ │ │ ├── FetchData.razor.g.cs
│ │ │ │ └── Index.razor.g.cs
│ │ │ │ ├── Shared
│ │ │ │ ├── MainLayout.razor.g.cs
│ │ │ │ ├── NavMenu.razor.g.cs
│ │ │ │ └── SurveyPrompt.razor.g.cs
│ │ │ │ └── _Imports.razor.g.cs
│ │ │ └── Release
│ │ │ └── net5.0
│ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ ├── Demo.AssemblyInfo.cs
│ │ │ ├── Demo.AssemblyInfoInputs.cache
│ │ │ ├── Demo.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ ├── Demo.RazorComponent.input.cache
│ │ │ ├── Demo.RazorComponent.output.cache
│ │ │ └── RazorDeclaration
│ │ │ ├── App.razor.g.cs
│ │ │ ├── Pages
│ │ │ ├── Counter.razor.g.cs
│ │ │ ├── FetchData.razor.g.cs
│ │ │ └── Index.razor.g.cs
│ │ │ ├── Shared
│ │ │ ├── MainLayout.razor.g.cs
│ │ │ ├── NavMenu.razor.g.cs
│ │ │ └── SurveyPrompt.razor.g.cs
│ │ │ └── _Imports.razor.g.cs
│ │ └── 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
│ │ └── sample-data
│ │ └── weather.json
├── Demo_02
│ ├── CatchAll.razor
│ ├── HelloWorld.razor
│ └── RoutingExample.razor
├── EmptyBlazorProject.zip
├── EmptyProject
│ ├── EmptyProject.sln
│ └── EmptyProject
│ │ ├── App.razor
│ │ ├── EmptyProject.csproj
│ │ ├── Pages
│ │ └── Index.razor
│ │ ├── Program.cs
│ │ ├── Shared
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ │ ├── _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
└── Sample
│ ├── Sample.sln
│ └── Sample
│ ├── App.razor
│ ├── Pages
│ └── Index.razor
│ ├── Program.cs
│ ├── Properties
│ └── launchSettings.json
│ ├── Sample.csproj
│ ├── Shared
│ ├── MainLayout.razor
│ ├── MainLayout.razor.css
│ ├── NavMenu.razor
│ └── NavMenu.razor.css
│ ├── _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
├── Chapter03
├── Demo_03
│ ├── Alert.razor
│ ├── Alert.razor.css
│ └── Index.razor
└── ModalDialog
│ ├── ModalDialog.sln
│ ├── ModalDialog
│ ├── App.razor
│ ├── ModalDialog.csproj
│ ├── Pages
│ │ └── Index.razor
│ ├── Program.cs
│ ├── Shared
│ │ ├── Dialog.razor
│ │ ├── Dialog.razor.css
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ ├── _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
│ └── MyComponents
│ ├── BweDialog.razor
│ ├── BweDialog.razor.css
│ ├── Component1.razor
│ ├── Component1.razor.css
│ ├── ExampleJsInterop.cs
│ ├── MyComponents.csproj
│ ├── _Imports.razor
│ └── wwwroot
│ ├── background.png
│ └── exampleJsInterop.js
├── Chapter04
├── Demo_04
│ ├── App.razor
│ ├── Demo_04.csproj
│ ├── Pages
│ │ ├── Index.razor
│ │ ├── Resize.razor
│ │ └── Window.razor
│ ├── Program.cs
│ ├── Shared
│ │ ├── Document.razor
│ │ ├── DocumentSync.razor
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ ├── _Imports.razor
│ ├── obj
│ │ └── HPD
│ │ │ ├── Debug
│ │ │ └── net5.0
│ │ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ │ ├── Demo_04.AssemblyInfo.cs
│ │ │ │ ├── Demo_04.AssemblyInfoInputs.cache
│ │ │ │ ├── Demo_04.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ ├── Demo_04.RazorComponent.input.cache
│ │ │ │ ├── Demo_04.RazorComponent.output.cache
│ │ │ │ ├── Demo_04.csprojAssemblyReference.cache
│ │ │ │ └── RazorDeclaration
│ │ │ │ ├── App.razor.g.cs
│ │ │ │ ├── Pages
│ │ │ │ ├── Index.razor.g.cs
│ │ │ │ ├── Resize.razor.g.cs
│ │ │ │ └── Window.razor.g.cs
│ │ │ │ ├── Shared
│ │ │ │ ├── Document.razor.g.cs
│ │ │ │ ├── DocumentSync.razor.g.cs
│ │ │ │ ├── MainLayout.razor.g.cs
│ │ │ │ └── NavMenu.razor.g.cs
│ │ │ │ └── _Imports.razor.g.cs
│ │ │ └── Release
│ │ │ └── net5.0
│ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ ├── Demo_04.AssemblyInfo.cs
│ │ │ ├── Demo_04.AssemblyInfoInputs.cache
│ │ │ ├── Demo_04.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ ├── Demo_04.RazorComponent.input.cache
│ │ │ ├── Demo_04.RazorComponent.output.cache
│ │ │ └── RazorDeclaration
│ │ │ ├── App.razor.g.cs
│ │ │ ├── Pages
│ │ │ ├── Index.razor.g.cs
│ │ │ ├── Resize.razor.g.cs
│ │ │ └── Window.razor.g.cs
│ │ │ ├── Shared
│ │ │ ├── Document.razor.g.cs
│ │ │ ├── DocumentSync.razor.g.cs
│ │ │ ├── MainLayout.razor.g.cs
│ │ │ └── NavMenu.razor.g.cs
│ │ │ └── _Imports.razor.g.cs
│ └── 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
│ │ └── scripts
│ │ └── bweInterop.js
└── LocalStorage
│ ├── App.razor
│ ├── LocalStorage.csproj
│ ├── Pages
│ └── Index.razor
│ ├── Program.cs
│ ├── Services
│ ├── ILocalStorageService.cs
│ └── LocalStorageService.cs
│ ├── Shared
│ ├── MainLayout.razor
│ ├── MainLayout.razor.css
│ ├── NavMenu.razor
│ └── NavMenu.razor.css
│ ├── _Imports.razor
│ ├── obj
│ └── HPD
│ │ ├── Debug
│ │ └── net5.0
│ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ ├── LocalStorage.AssemblyInfo.cs
│ │ │ ├── LocalStorage.AssemblyInfoInputs.cache
│ │ │ ├── LocalStorage.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ ├── LocalStorage.RazorComponent.input.cache
│ │ │ ├── LocalStorage.RazorComponent.output.cache
│ │ │ └── RazorDeclaration
│ │ │ ├── App.razor.g.cs
│ │ │ ├── Pages
│ │ │ └── Index.razor.g.cs
│ │ │ ├── Shared
│ │ │ ├── MainLayout.razor.g.cs
│ │ │ └── NavMenu.razor.g.cs
│ │ │ └── _Imports.razor.g.cs
│ │ └── Release
│ │ └── net5.0
│ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ ├── LocalStorage.AssemblyInfo.cs
│ │ ├── LocalStorage.AssemblyInfoInputs.cache
│ │ ├── LocalStorage.GeneratedMSBuildEditorConfig.editorconfig
│ │ ├── LocalStorage.RazorComponent.input.cache
│ │ ├── LocalStorage.RazorComponent.output.cache
│ │ └── RazorDeclaration
│ │ ├── App.razor.g.cs
│ │ ├── Pages
│ │ └── Index.razor.g.cs
│ │ ├── Shared
│ │ ├── MainLayout.razor.g.cs
│ │ └── NavMenu.razor.g.cs
│ │ └── _Imports.razor.g.cs
│ └── 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
│ └── scripts
│ └── bweInterop.js
├── Chapter05
├── .vs
│ ├── VSWorkspaceState.json
│ ├── ch05
│ │ └── v16
│ │ │ └── .suo
│ └── slnx.sqlite
├── Sun-512.png
├── WeatherForecast
│ ├── App.razor
│ ├── Models
│ │ ├── OpenWeather.cs
│ │ └── Position.cs
│ ├── Pages
│ │ └── Index.razor
│ ├── Program.cs
│ ├── Shared
│ │ ├── DailyForecast.razor
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ ├── WeatherForecast.csproj
│ ├── _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
│ │ ├── images
│ │ └── Sun-512.png
│ │ ├── index.html
│ │ ├── manifest.json
│ │ ├── offline.html
│ │ ├── scripts
│ │ └── bweInterop.js
│ │ └── service-worker.js
└── weather.json
├── Chapter06
├── ShoppingCart
│ ├── App.razor
│ ├── Models
│ │ └── Product.cs
│ ├── Pages
│ │ ├── Index.razor
│ │ └── Store.razor
│ ├── Program.cs
│ ├── Services
│ │ ├── CartService.cs
│ │ └── ICartService.cs
│ ├── Shared
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ ├── ShoppingCart.csproj
│ ├── _Imports.razor
│ ├── obj
│ │ └── HPD
│ │ │ ├── Debug
│ │ │ └── net5.0
│ │ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ │ ├── RazorDeclaration
│ │ │ │ ├── App.razor.g.cs
│ │ │ │ ├── Pages
│ │ │ │ │ ├── Index.razor.g.cs
│ │ │ │ │ └── Store.razor.g.cs
│ │ │ │ ├── Shared
│ │ │ │ │ ├── MainLayout.razor.g.cs
│ │ │ │ │ └── NavMenu.razor.g.cs
│ │ │ │ └── _Imports.razor.g.cs
│ │ │ │ ├── ShoppingCart.AssemblyInfo.cs
│ │ │ │ ├── ShoppingCart.AssemblyInfoInputs.cache
│ │ │ │ ├── ShoppingCart.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ ├── ShoppingCart.RazorComponent.input.cache
│ │ │ │ └── ShoppingCart.RazorComponent.output.cache
│ │ │ └── Release
│ │ │ └── net5.0
│ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ ├── RazorDeclaration
│ │ │ ├── App.razor.g.cs
│ │ │ ├── Pages
│ │ │ │ ├── Index.razor.g.cs
│ │ │ │ └── Store.razor.g.cs
│ │ │ ├── Shared
│ │ │ │ ├── MainLayout.razor.g.cs
│ │ │ │ └── NavMenu.razor.g.cs
│ │ │ └── _Imports.razor.g.cs
│ │ │ ├── ShoppingCart.AssemblyInfo.cs
│ │ │ ├── ShoppingCart.AssemblyInfoInputs.cache
│ │ │ ├── ShoppingCart.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ ├── ShoppingCart.RazorComponent.input.cache
│ │ │ └── ShoppingCart.RazorComponent.output.cache
│ └── 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
│ │ ├── images
│ │ ├── Charger.jpg
│ │ ├── Earbuds.jpg
│ │ ├── KeyChain.jpg
│ │ ├── TShirt.jpg
│ │ └── TravelMug.jpg
│ │ ├── index.html
│ │ └── sample-data
│ │ └── products.json
├── images
│ ├── Charger.jpg
│ ├── Earbuds.jpg
│ ├── KeyChain.jpg
│ ├── TShirt.jpg
│ └── TravelMug.jpg
└── products.json
├── Chapter07
├── Dropzone.razor.css
└── KanbanBoard
│ ├── App.razor
│ ├── KanbanBoard.csproj
│ ├── Models
│ ├── TaskItem.cs
│ └── TaskPriority.cs
│ ├── Pages
│ └── Index.razor
│ ├── Program.cs
│ ├── Shared
│ ├── Dropzone.razor
│ ├── Dropzone.razor.css
│ ├── MainLayout.razor
│ ├── MainLayout.razor.css
│ ├── NavMenu.razor
│ ├── NavMenu.razor.css
│ └── NewTask.razor
│ ├── _Imports.razor
│ ├── obj
│ └── HPD
│ │ ├── Debug
│ │ └── net5.0
│ │ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ │ ├── KanbanBoard.AssemblyInfo.cs
│ │ │ ├── KanbanBoard.AssemblyInfoInputs.cache
│ │ │ ├── KanbanBoard.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ ├── KanbanBoard.RazorComponent.input.cache
│ │ │ ├── KanbanBoard.RazorComponent.output.cache
│ │ │ └── RazorDeclaration
│ │ │ ├── App.razor.g.cs
│ │ │ ├── Pages
│ │ │ └── Index.razor.g.cs
│ │ │ ├── Shared
│ │ │ ├── Dropzone.razor.g.cs
│ │ │ ├── MainLayout.razor.g.cs
│ │ │ ├── NavMenu.razor.g.cs
│ │ │ └── NewTask.razor.g.cs
│ │ │ └── _Imports.razor.g.cs
│ │ └── Release
│ │ └── net5.0
│ │ ├── .NETCoreApp,Version=v5.0.AssemblyAttributes.cs
│ │ ├── KanbanBoard.AssemblyInfo.cs
│ │ ├── KanbanBoard.AssemblyInfoInputs.cache
│ │ ├── KanbanBoard.GeneratedMSBuildEditorConfig.editorconfig
│ │ ├── KanbanBoard.RazorComponent.input.cache
│ │ ├── KanbanBoard.RazorComponent.output.cache
│ │ └── RazorDeclaration
│ │ ├── App.razor.g.cs
│ │ ├── Pages
│ │ └── Index.razor.g.cs
│ │ ├── Shared
│ │ ├── Dropzone.razor.g.cs
│ │ ├── MainLayout.razor.g.cs
│ │ ├── NavMenu.razor.g.cs
│ │ └── NewTask.razor.g.cs
│ │ └── _Imports.razor.g.cs
│ └── 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
├── Chapter08
├── TaskManager.sln
└── TaskManager
│ ├── Client
│ ├── App.razor
│ ├── Pages
│ │ ├── Index.razor
│ │ ├── Index.razor.cs
│ │ └── Index.razor.css
│ ├── Program.cs
│ ├── Shared
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ ├── TaskManager.Client.csproj
│ ├── _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
│ ├── Controllers
│ │ └── TaskItemsController.cs
│ ├── Data
│ │ └── TaskManagerServerContext.cs
│ ├── Migrations
│ │ ├── 20210416185723_Init.Designer.cs
│ │ ├── 20210416185723_Init.cs
│ │ └── TaskManagerServerContextModelSnapshot.cs
│ ├── Pages
│ │ ├── Error.cshtml
│ │ └── Error.cshtml.cs
│ ├── Program.cs
│ ├── Properties
│ │ ├── launchSettings.json
│ │ ├── serviceDependencies.json
│ │ ├── serviceDependencies.local.json
│ │ └── serviceDependencies.local.json.user
│ ├── Startup.cs
│ ├── TaskManager.Server.csproj
│ ├── TaskManager.Server.csproj.user
│ ├── appsettings.Development.json
│ └── appsettings.json
│ └── Shared
│ ├── TaskItem.cs
│ └── TaskManager.Shared.csproj
├── Chapter09
├── ExpenseTracker.sln
└── ExpenseTracker
│ ├── Client
│ ├── App.razor
│ ├── ExpenseTracker.Client.csproj
│ ├── Pages
│ │ ├── ExpenseEdit.razor
│ │ └── Index.razor
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── Shared
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ ├── _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
│ ├── Controllers
│ │ ├── ExpenseTypesController.cs
│ │ └── ExpensesController.cs
│ ├── Data
│ │ └── ExpenseTrackerServerContext.cs
│ ├── ExpenseTracker.Server.csproj
│ ├── ExpenseTracker.Server.csproj.user
│ ├── Migrations
│ │ ├── 20210422012318_Init.Designer.cs
│ │ ├── 20210422012318_Init.cs
│ │ └── ExpenseTrackerServerContextModelSnapshot.cs
│ ├── Pages
│ │ ├── Error.cshtml
│ │ └── Error.cshtml.cs
│ ├── Program.cs
│ ├── Properties
│ │ ├── launchSettings.json
│ │ ├── serviceDependencies.json
│ │ ├── serviceDependencies.local.json
│ │ └── serviceDependencies.local.json.user
│ ├── Startup.cs
│ ├── appsettings.Development.json
│ └── appsettings.json
│ └── Shared
│ ├── Expense.cs
│ ├── ExpenseTracker.Shared.csproj
│ └── ExpenseType.cs
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # This .gitignore file was automatically created by Microsoft(R) Visual Studio.
3 | ################################################################################
4 |
5 | /ch02/EmptyProject/EmptyProject/obj/HPD
6 | /ch02/Sample/Sample/obj/HPD
7 | /ch03/ModalDialog/ModalDialog/obj/HPD
8 | /ch03/ModalDialog/MyComponents/obj/HPD
9 |
--------------------------------------------------------------------------------
/.vs/Packt/v16/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PacktPublishing/Blazor-WebAssembly-by-Example/54775c0362958979805d1118621a747d8476d29b/.vs/Packt/v16/.suo
--------------------------------------------------------------------------------
/.vs/VSWorkspaceState.json:
--------------------------------------------------------------------------------
1 | {
2 | "ExpandedNodes": [
3 | ""
4 | ],
5 | "SelectedNode": "\\.gitignore",
6 | "PreviewInSolutionExplorer": false
7 | }
--------------------------------------------------------------------------------
/.vs/slnx.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PacktPublishing/Blazor-WebAssembly-by-Example/54775c0362958979805d1118621a747d8476d29b/.vs/slnx.sqlite
--------------------------------------------------------------------------------
/Chapter02/Demo/Demo.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.30907.101
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", "Demo\Demo.csproj", "{0D58877D-BC57-4F5F-A377-3F1D20C0BD8C}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {0D58877D-BC57-4F5F-A377-3F1D20C0BD8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {0D58877D-BC57-4F5F-A377-3F1D20C0BD8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {0D58877D-BC57-4F5F-A377-3F1D20C0BD8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {0D58877D-BC57-4F5F-A377-3F1D20C0BD8C}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {3B1BCB23-B664-4D2C-BF30-AFEC0BB16EC7}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/Chapter02/Demo/Demo/App.razor:
--------------------------------------------------------------------------------
1 | Sorry, there's nothing at this address.
Current count: @currentCount
7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter02/Demo/Demo/Pages/Counter.razor.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Components; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace Demo.Pages 8 | { 9 | public partial class Counter 10 | { 11 | [Parameter] public int? Increment { get; set; } 12 | private int increment = 1; 13 | 14 | private int currentCount = 0; 15 | 16 | private void IncrementCount() 17 | { 18 | currentCount += increment; 19 | } 20 | 21 | protected override void OnParametersSet() 22 | { 23 | if (Increment.HasValue) 24 | increment = Increment.Value; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Chapter02/Demo/Demo/Pages/Index.razor: -------------------------------------------------------------------------------- 1 | @page "/" 2 | 3 |Sorry, there's nothing at this address.
8 |Sorry, there's nothing at this address.
8 |Today is @DateTime.Now.DayOfWeek.
6 |Sorry, there's nothing at this address.
8 |Sorry, there's nothing at this address.
8 |Sorry, there's nothing at this address.
8 |Sorry, there's nothing at this address.
8 |Sorry, there's nothing at this address.
8 |6 | Your one stop shop for all your tasks. 7 |
8 |Sorry, there's nothing at this address.
8 |Sorry, there's nothing at this address.
8 |Loading...
6 | } 7 | else 8 | { 9 |Sorry, there's nothing at this address.
8 |