diff --git a/.gitignore b/.gitignore
index 04ce32b7..fd007ecc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,4 +35,4 @@ Oqtane.Server/wwwroot/Themes/*
!Oqtane.Server/wwwroot/Themes/Oqtane.Themes.*
!Oqtane.Server/wwwroot/Themes/Templates
Oqtane.Server/wwwroot/Themes/Templates/*
-Oqtane.Server/wwwroot/Themes/Templates/External
+!Oqtane.Server/wwwroot/Themes/Templates/External
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 00000000..223c5f9b
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,17 @@
+
+
+ net9.0
+ Debug;Release
+ 6.2.1
+ Oqtane
+ Shaun Walker
+ .NET Foundation
+ CMS and Application Framework for Blazor and .NET MAUI
+ .NET Foundation
+ https://www.oqtane.org
+ https://github.com/oqtane/oqtane.framework/blob/dev/LICENSE
+ https://github.com/oqtane/oqtane.framework/releases/tag/v6.2.1
+ https://github.com/oqtane/oqtane.framework
+ Git
+
+
\ No newline at end of file
diff --git a/Oqtane.Application/.template.config/template.json b/Oqtane.Application/.template.config/template.json
index a0191d09..ebcd1b03 100644
--- a/Oqtane.Application/.template.config/template.json
+++ b/Oqtane.Application/.template.config/template.json
@@ -7,13 +7,80 @@
"Blazor",
"Oqtane"
],
+ "name": "Oqtane Application Template",
+ "shortName": "oqtane-app",
+ "defaultName": "MyCompany.MyProject",
+ "identity": "Oqtane.Application.Template",
"tags": {
"language": "C#",
- "type": "project"
+ "type": "solution",
+ "editorTreatAs":"solution"
},
- "identity": "Oqtane.Application.Template",
- "name": "Oqtane Application Solution For Blazor",
- "shortName": "oqtane-app",
"sourceName": "Oqtane.Application",
- "preferNameDirectory": true
+ "preferNameDirectory": true,
+ "guids": [
+ "04B05448-788F-433D-92C0-FED35122D45A",
+ "AA8E58A1-CD09-4208-BF66-A8BB341FD669",
+ "18D73F73-D7BE-4388-85BA-FBD9AC96FCA2"
+ ],
+ "symbols": {
+ "Framework": {
+ "type": "parameter",
+ "description": "The target framework for the project",
+ "datatype": "choice",
+ "choices": [
+ {
+ "choice": "net9.0",
+ "description": "Target net9.0"
+ }
+ ],
+ "replaces": "net9.0",
+ "defaultValue": "net9.0"
+ },
+ "HttpPort": {
+ "type": "parameter",
+ "datatype": "integer",
+ "description": "Port number to use for the HTTP endpoint in launchSettings.json."
+ },
+ "HttpPortGenerated": {
+ "type": "generated",
+ "generator": "port"
+ },
+ "HttpPortReplacer": {
+ "type": "generated",
+ "generator": "coalesce",
+ "parameters": {
+ "sourceVariableName": "HttpPort",
+ "fallbackVariableName": "HttpPortGenerated"
+ },
+ "replaces": "44358"
+ },
+ "HttpsPort": {
+ "type": "parameter",
+ "datatype": "integer",
+ "description": "Port number to use for the HTTPS endpoint in launchSettings.json."
+ },
+ "HttpsPortGenerated": {
+ "type": "generated",
+ "generator": "port",
+ "parameters": {
+ "low": 44300,
+ "high": 44399
+ }
+ },
+ "HttpsPortReplacer": {
+ "type": "generated",
+ "generator": "coalesce",
+ "parameters": {
+ "sourceVariableName": "HttpsPort",
+ "fallbackVariableName": "HttpsPortGenerated"
+ },
+ "replaces": "44359"
+ }
+ },
+ "primaryOutputs": [
+ {
+ "path": "Oqtane.Application.sln"
+ }
+ ]
}
\ No newline at end of file
diff --git a/Oqtane.Application/Client/Modules/MyModule/Settings.razor b/Oqtane.Application/Client/Modules/MyModule/Settings.razor
index 2405a206..facaecae 100644
--- a/Oqtane.Application/Client/Modules/MyModule/Settings.razor
+++ b/Oqtane.Application/Client/Modules/MyModule/Settings.razor
@@ -13,7 +13,7 @@
@code {
- private string resourceType = "Oqtane.Application.Settings, Oqtane.Application.Client.Oqtane"; // for localization
+ private string resourceType = "Oqtane.Application.MyModule.Settings, Oqtane.Application.Client.Oqtane"; // for localization
public override string Title => "MyModdule Settings";
string _value;
diff --git a/Oqtane.Application/Client/Oqtane.Application.Client.csproj b/Oqtane.Application/Client/Oqtane.Application.Client.csproj
index 50b9b31e..c7bd2e5c 100644
--- a/Oqtane.Application/Client/Oqtane.Application.Client.csproj
+++ b/Oqtane.Application/Client/Oqtane.Application.Client.csproj
@@ -1,21 +1,30 @@
-
- net9.0
- 1.0.0
- Oqtane.Application.Client.Oqtane
- true
- Default
- false
- true
-
+
+ net9.0
+ Exe
+ 1.0.0
+ Oqtane.Application.Client.Oqtane
+ Default
+ true
+ false
+ false
+
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
diff --git a/Oqtane.Application/Oqtane.Application.Template.nuspec b/Oqtane.Application/Oqtane.Application.Template.nuspec
index 47fabbf3..47d1af9d 100644
--- a/Oqtane.Application/Oqtane.Application.Template.nuspec
+++ b/Oqtane.Application/Oqtane.Application.Template.nuspec
@@ -2,7 +2,7 @@
Oqtane.Application.Template
- 6.2.0
+ 6.2.1Oqtane Application Template For BlazorShaun Walkerfalse
diff --git a/Oqtane.Application/README.md b/Oqtane.Application/README.md
index a6880aff..0a6927de 100644
--- a/Oqtane.Application/README.md
+++ b/Oqtane.Application/README.md
@@ -5,15 +5,18 @@ This is a Visual Studio Project Template designed for Oqtane development project
```
dotnet new install Oqtane.Application.Template
dotnet new oqtane-app -o MyCompany.MyProject
+cd MyCompany.MyProject
+dotnet build
+cd Server
+dotnet run
+browse to Url
```
When using this approach you do not need to have a local copy of the oqtane.framework source code - you simply utilize Oqtane as a standard application dependency.
-The solution contains an AppHost project which must be identified as the Startup project. It is responsible for loading the development environment and launching the Oqtane framework.
-
-The solution also contains Build, Client, Server, and Shared folders which is where you you would implement your custom functionality. An example module and theme are included for reference, and you can add additional modules and themes within the same projects by following the standard Oqtane folder/namespace conventions.
+The solution also contains Client, Server, and Shared folders which is where you you would implement your custom functionality. An example module and theme are included for reference, and you can add additional modules and themes within the same projects by following the standard Oqtane folder/namespace conventions.
*Known Issues*
-- do not use the term "Oqtane" in your output name or else you will experience namespace conflicts
+- do not use the term "Oqtane" or "Module" in your output name or else you will experience namespace conflicts
diff --git a/Oqtane.Application/Server/Oqtane.Application.Server.csproj b/Oqtane.Application/Server/Oqtane.Application.Server.csproj
index 79d6749a..aaf443fa 100644
--- a/Oqtane.Application/Server/Oqtane.Application.Server.csproj
+++ b/Oqtane.Application/Server/Oqtane.Application.Server.csproj
@@ -1,18 +1,29 @@
-
- net9.0
- 1.0.0
- Oqtane.Application.Server.Oqtane
-
+
+ net9.0
+ 1.0.0
+ Oqtane.Application.Server.Oqtane
+ true
+ none
+ false
+ false
+
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
diff --git a/Oqtane.Application/Server/Properties/launchSettings.json b/Oqtane.Application/Server/Properties/launchSettings.json
index dc8793f7..f56a17f7 100644
--- a/Oqtane.Application/Server/Properties/launchSettings.json
+++ b/Oqtane.Application/Server/Properties/launchSettings.json
@@ -6,7 +6,7 @@
"dotnetRunMessages": true,
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
- "applicationUrl": "http://localhost:5000",
+ "applicationUrl": "http://localhost:44358",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
@@ -16,7 +16,7 @@
"dotnetRunMessages": true,
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
- "applicationUrl": "https://localhost:5001;http://localhost:5000",
+ "applicationUrl": "https://localhost:44359;http://localhost:44358",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
diff --git a/Oqtane.Application/Server/wwwroot/Modules/Oqtane.Modules.Admin.Login/Module.css b/Oqtane.Application/Server/wwwroot/Modules/Oqtane.Modules.Admin.Login/Module.css
deleted file mode 100644
index 086b246b..00000000
--- a/Oqtane.Application/Server/wwwroot/Modules/Oqtane.Modules.Admin.Login/Module.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Login Module Custom Styles */
-
-.Oqtane-Modules-Admin-Login {
- width: 200px;
-}
diff --git a/Oqtane.Application/Server/wwwroot/Modules/Oqtane.Modules.HtmlText/Module.css b/Oqtane.Application/Server/wwwroot/Modules/Oqtane.Modules.HtmlText/Module.css
deleted file mode 100644
index 5a93c043..00000000
--- a/Oqtane.Application/Server/wwwroot/Modules/Oqtane.Modules.HtmlText/Module.css
+++ /dev/null
@@ -1 +0,0 @@
-/* HtmlText Module Custom Styles */
\ No newline at end of file
diff --git a/Oqtane.Application/Server/wwwroot/Oqtane.Server.lib.module.js b/Oqtane.Application/Server/wwwroot/Oqtane.Server.lib.module.js
deleted file mode 100644
index 508f42a0..00000000
--- a/Oqtane.Application/Server/wwwroot/Oqtane.Server.lib.module.js
+++ /dev/null
@@ -1,90 +0,0 @@
-const pageScriptInfoBySrc = new Map();
-
-function registerPageScriptElement(src) {
- if (!src) {
- throw new Error('Must provide a non-empty value for the "src" attribute.');
- }
-
- let pageScriptInfo = pageScriptInfoBySrc.get(src);
-
- if (pageScriptInfo) {
- pageScriptInfo.referenceCount++;
- } else {
- pageScriptInfo = { referenceCount: 1, module: null };
- pageScriptInfoBySrc.set(src, pageScriptInfo);
- initializePageScriptModule(src, pageScriptInfo);
- }
-}
-
-function unregisterPageScriptElement(src) {
- if (!src) {
- return;
- }
-
- const pageScriptInfo = pageScriptInfoBySrc.get(src);
- if (!pageScriptInfo) {
- return;
- }
-
- pageScriptInfo.referenceCount--;
-}
-
-async function initializePageScriptModule(src, pageScriptInfo) {
- // If the path is relative, normalize it by by making it an absolute URL
- // with document's the base HREF.
- if (src.startsWith("./")) {
- src = new URL(src.substr(2), document.baseURI).toString();
- }
-
- const module = await import(src);
-
- if (pageScriptInfo.referenceCount <= 0) {
- // All page-script elements with the same 'src' were
- // unregistered while we were loading the module.
- return;
- }
-
- pageScriptInfo.module = module;
- module.onLoad?.();
- module.onUpdate?.();
-}
-
-function onEnhancedLoad() {
- // Start by invoking 'onDispose' on any modules that are no longer referenced.
- for (const [src, { module, referenceCount }] of pageScriptInfoBySrc) {
- if (referenceCount <= 0) {
- module?.onDispose?.();
- pageScriptInfoBySrc.delete(src);
- }
- }
-
- // Then invoke 'onUpdate' on the remaining modules.
- for (const { module } of pageScriptInfoBySrc.values()) {
- module?.onUpdate?.();
- }
-}
-
-export function afterWebStarted(blazor) {
- customElements.define('page-script', class extends HTMLElement {
- static observedAttributes = ['src'];
-
- // We use attributeChangedCallback instead of connectedCallback
- // because a page-script element might get reused between enhanced
- // navigations.
- attributeChangedCallback(name, oldValue, newValue) {
- if (name !== 'src') {
- return;
- }
-
- this.src = newValue;
- unregisterPageScriptElement(oldValue);
- registerPageScriptElement(newValue);
- }
-
- disconnectedCallback() {
- unregisterPageScriptElement(this.src);
- }
- });
-
- blazor.addEventListener('enhancedload', onEnhancedLoad);
-}
\ No newline at end of file
diff --git a/Oqtane.Application/Server/wwwroot/Themes/Oqtane.Themes.BlazorTheme/Theme.css b/Oqtane.Application/Server/wwwroot/Themes/Oqtane.Themes.BlazorTheme/Theme.css
deleted file mode 100644
index 911362c5..00000000
--- a/Oqtane.Application/Server/wwwroot/Themes/Oqtane.Themes.BlazorTheme/Theme.css
+++ /dev/null
@@ -1,290 +0,0 @@
-.table > :not(caption) > * > * {
- box-shadow: none;
-}
-
-.table .form-control {
- background-color: #ffffff !important;
- border-width: 0.5px !important;
- border-bottom-color: #ccc !important;
- color: #000 !important;
-}
-
-.table .form-select {
- background-color: #ffffff !important;
- border-width: 0.5px !important;
- border-bottom-color: #ccc !important;
- color: #000 !important;
-}
-
-.table .btn-primary {
- background-color: var(--bs-primary);
-}
-
-.table .btn-secondary {
- background-color: var(--bs-secondary);
-}
-
-.alert-dismissible .btn-close {
- z-index: 1;
-}
-
-.breadcrumbs {
- background-color: #e6e6e6;
-}
-
-.top-row {
- height: 3.5rem;
- display: flex;
- align-items: center;
-}
-
-.main {
- flex: 1;
-}
-
- .main .top-row {
- background-color: #e6e6e6;
- border-bottom: 1px solid #d6d5d5;
- }
-
-.sidebar {
- background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
-}
-
- .sidebar .top-row {
- background-color: rgba(0,0,0,0.4);
- }
-
- .sidebar .navbar-toggler .navbar-toggler-icon {
- background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
- }
-
- .sidebar .oi {
- width: 2rem;
- font-size: 1.1rem;
- vertical-align: text-top;
- top: -2px;
- }
-
-.app-menu {
- width: 100%
-}
-
-.breadcrumb {
- margin-bottom: 0;
-}
-
-.app-menu .nav-item {
- font-size: 0.9rem;
- padding-bottom: 0.5rem;
-}
-
-.app-menu .nav-item:first-of-type {
- padding-top: 1rem;
-}
-
-.app-menu .nav-item:last-of-type {
- padding-bottom: 1rem;
-}
-
-.app-menu .nav-item a {
- color: #d7d7d7;
- border-radius: 4px;
- height: 3rem;
- display: flex;
- align-items: center;
- line-height: 3rem;
- padding-left: 1rem;
-}
-
-.app-menu .nav-item a.active {
- background-color: rgba(255,255,255,0.25);
- color: white;
-}
-
-.app-menu .nav-item a:hover {
- background-color: rgba(255,255,255,0.1);
- color: white;
-}
-
-.content {
- padding-top: 1.1rem;
-}
-
-.navbar-toggler {
- background-color: rgba(255, 255, 255, 0.1);
- margin: .5rem;
-}
-
-.app-logo .navbar-brand {
- color: white;
-}
-@media (max-width: 991.98px) {
- .app-search {
- border-radius: 6px;
- }
- .app-search input{
- display: none !important;
- }
-
- .app-search input + button {
- position: initial;
- padding-top: 7px;
- padding-bottom: 7px;
- }
-
- .app-search:active, .app-search:hover {
- display: block;
- position: absolute;
- color: #fff;
- top: 0;
- min-height: 60px;
- width: 100%;
- left: 0;
- z-index: 999;
- border-radius: 0;
- background-color: #e6e6e6;
- }
-
- .app-search:active .app-form-inline, .app-search:hover .app-form-inline {
- margin: 10px auto;
- position: relative;
- display: block;
- max-width: 80%;
- }
-
- .app-search:active .app-form-inline input, .app-search:hover .app-form-inline input {
- width: 100%;
- display: block !important;
- }
- .app-search:active .app-form-inline input + button, .app-search:hover .app-form-inline input + button {
- position: absolute;
- color: rgb(42, 159, 214);
- padding-top: 6px;
- padding-bottom: 6px;
- }
-}
-@media (max-width: 767.98px) {
- .main .top-row {
- display: none;
- }
-}
-
-@media (min-width: 768px) {
- app {
- flex-direction: row;
- display: block;
- }
-
- .app-logo {
- display: block;
- margin-left: auto;
- margin-right: auto;
- }
-
- .breadcrumbs {
- position: fixed;
- left: 275px;
- top: 15px;
- z-index: 6
- }
-
- .sidebar {
- width: 250px;
- height: 100vh;
- position: sticky;
- top: 0;
- z-index: 4
- }
-
- .main .top-row {
- position: sticky;
- top: 0;
- z-index: 5
- }
-
- .main > div {
- padding-left: 2rem !important;
- padding-right: 1.5rem !important;
- }
-
- .navbar-toggler {
- display: none;
- }
-
- .sidebar .collapse {
- /* Never collapse the sidebar for wide screens */
- display: block;
- }
-
- .main > .container {
- margin-top: 30px;
- }
-}
-
-@-webkit-keyframes sk-stretchdelay {
- 0%, 40%, 100% {
- -webkit-transform: scaleY(0.4)
- }
-
- 20% {
- -webkit-transform: scaleY(1.0)
- }
-}
-
-@keyframes sk-stretchdelay {
- 0%, 40%, 100% {
- transform: scaleY(0.4);
- -webkit-transform: scaleY(0.4);
- }
-
- 20% {
- transform: scaleY(1.0);
- -webkit-transform: scaleY(1.0);
- }
-}
-
-@media (max-width: 767.98px) {
- .app-logo {
- height: 80px;
- display: flex;
- align-items: center;
- }
-
- .breadcrumbs {
- position: fixed;
- top: 150px;
- width: 100%;
- left: 0;
- z-index: 4;
- border-bottom: 1px solid #d6d5d5;
- }
-
- .sidebar {
- margin-top: 3.5rem;
- position: fixed;
- width: 100%;
- z-index: 4;
- }
-
- .main .top-row {
- z-index: 4;
- }
-
- .main > .top-row.px-4 {
- display: flex;
- position: fixed;
- left: 0;
- top: 0;
- width: 100%;
- }
-
- .ml-md-auto {
- margin-left: auto;
- }
-
- .main > .container {
- margin-top: 200px;
- }
-}
-
diff --git a/Oqtane.Application/Server/wwwroot/app_offline.bak b/Oqtane.Application/Server/wwwroot/app_offline.bak
deleted file mode 100644
index 4fcd2b88..00000000
--- a/Oqtane.Application/Server/wwwroot/app_offline.bak
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
- Upgrade Framework
-
-
-
-
-
-
-
-
Please Wait... Upgrade In Progress...
-
(this process can take a few minutes... please be patient)
-
-
-
-
-
-
- [STATUS]
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Oqtane.Application/Server/wwwroot/css/app.css b/Oqtane.Application/Server/wwwroot/css/app.css
deleted file mode 100644
index 46e749f7..00000000
--- a/Oqtane.Application/Server/wwwroot/css/app.css
+++ /dev/null
@@ -1,288 +0,0 @@
-@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
-
-html, body {
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
-}
-
-app {
- position: relative;
- display: flex;
- flex-direction: column;
-}
-
-/* Admin Modal */
-.app-admin-modal .modal {
- position: fixed; /* Stay in place */
- z-index: 9999; /* Sit on top */
- left: 0;
- top: 0;
- display: block;
- width: 100%; /* Full width */
- height: 100%; /* Full height */
- overflow: auto; /* Enable scroll if needed */
- background: rgba(0,0,0,0.3); /* Dim background */
-}
-
- .app-admin-modal .modal-dialog {
- width: 100%; /* Full width */
- height: 100%; /* Full height */
- max-width: none; /* Override default of 500px */
- }
-
- .app-admin-modal .modal-content {
- margin: 5% auto; /* 5% from the top and centered */
- width: 80%; /* Could be more or less, depending on screen size */
- }
-
-/* Action Dialog */
-.app-actiondialog{
- position: absolute;
-}
-.app-actiondialog .modal {
- position: fixed; /* Stay in place */
- z-index: 9999; /* Sit on top */
- left: 0;
- top: 0;
- display: block;
- width: 100%; /* Full width */
- height: 100%; /* Full height */
- overflow: auto; /* Enable scroll if needed */
- background: rgba(0,0,0,0.3); /* Dim background */
-}
-
-.app-actiondialog .modal-dialog {
- width: 100%; /* Full width */
- height: 100%; /* Full height */
- max-width: none; /* Override default of 500px */
-}
-
-.app-actiondialog .modal-content {
- margin: 15% auto; /* 15% from the top and centered */
- width: 40%; /* Could be more or less, depending on screen size */
-}
-
-/* Admin Pane */
-.app-pane-admin-border {
- width: 100%;
- border-width: 1px;
- border-style: dashed;
- border-color: gray;
-}
-
-.app-pane-admin-title {
- width: 100%;
- text-align: center;
- color: gray;
-}
-
-.app-moduleactions .dropdown-menu {
- z-index: 9999;
-}
-
-.app-moduleactions .dropdown-submenu {
- position: relative;
-}
-
- .app-moduleactions .dropdown-submenu > .dropdown-menu {
- top: 0;
- left: 100%;
- margin-top: 0px;
- margin-left: 0px;
- }
-
-.app-progress-indicator {
- background: rgba(0,0,0,0.2) url('../loading.gif') no-repeat 50% 50%;
- width: 100%;
- height: 100%;
- position: fixed;
- top: 0;
- left: 0;
- z-index: 9999; /* Sit on top */
-}
-
-.app-rule {
- width: 100%;
- color: gray;
- height: 1px;
- background-color: gray;
- margin: 0.5rem;
-}
-
-.app-link-unstyled, .app-link-unstyled:visited, .app-link-unstyled:hover, .app-link-unstyled:active, .app-link-unstyled:focus, .app-link-unstyled:active:hover {
- font-style: inherit;
- color: inherit;
- background-color: transparent;
- font-size: inherit;
- text-decoration: none;
- font-variant: inherit;
- font-weight: inherit;
- line-height: inherit;
- font-family: inherit;
- border-radius: inherit;
- border: inherit;
- outline: inherit;
- box-shadow: inherit;
- padding: inherit;
- vertical-align: inherit;
-}
-
-.app-alert {
- padding: 20px;
- background-color: #f44336; /* red */
- color: white;
- margin-bottom: 15px;
-}
-
-.app-moduletitle a {
- scroll-margin-top: 7rem;
-}
-
-/* Tooltips */
-.app-tooltip {
- cursor: help;
- position: relative;
-}
-
- .app-tooltip::before,
- .app-tooltip::after {
- left: 25%;
- opacity: 0;
- position: absolute;
- z-index: -100;
- }
-
- .app-tooltip:hover::before,
- .app-tooltip:focus::before,
- .app-tooltip:hover::after,
- .app-tooltip:focus::after {
- opacity: 1;
- transform: scale(1) translateY(0);
- z-index: 100;
- }
-
- .app-tooltip::before {
- border-style: solid;
- border-width: 1em 0.75em 0 0.75em;
- border-color: #3E474F transparent transparent transparent;
- bottom: 100%;
- content: "";
- margin-left: -0.5em;
- transition: all .65s cubic-bezier(.84,-0.18,.31,1.26), opacity .65s .5s;
- transform: scale(.6) translateY(-90%);
- }
-
- .app-tooltip:hover::before,
- .app-tooltip:focus::before {
- transition: all .65s cubic-bezier(.84,-0.18,.31,1.26) .2s;
- }
-
- .app-tooltip::after {
- background: #3E474F;
- border-radius: .25em;
- bottom: 140%;
- color: #EDEFF0;
- content: attr(data-tip);
- margin-left: -8.75em;
- padding: 1em;
- transition: all .65s cubic-bezier(.84,-0.18,.31,1.26) .2s;
- transform: scale(.6) translateY(50%);
- width: 17.5em;
- }
-
- .app-tooltip:hover::after,
- .app-tooltip:focus::after {
- transition: all .65s cubic-bezier(.84,-0.18,.31,1.26);
- }
-
-@media (max-width: 760px) {
- .app-tooltip::after {
- font-size: .75em;
- margin-left: -5em;
- width: 10em;
- }
-}
-
-#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;
-}
-
-/* Oqtane Control Styles */
-
-/* Pager */
-.app-pager-pointer {
- cursor: pointer;
-}
-
-.app-sort-th {
- cursor: pointer;
-}
-
-.app-fas {
- margin-left: 5px;
-}
-
-.app-form-inline {
- display: inline;
-}
-
-.app-search {
- display: inline-block;
- position: relative;
-}
-.app-search input + button {
- background: none;
- border: none;
- position: absolute;
- right: 0;
- top: 0;
-}
-.app-search input + button .oi {
- top: 0;
-}
-.app-search-noinput {
- display: inline-block;
- position: relative;
-}
-.app-search-noinput button {
- background: none;
- border: none;
- color: var(--bs-heading-color);
-}
-.app-search-noinput button:hover {
- color: var(--bs-heading-color);
-}
-
-/* Text Editor */
-.text-area-editor > textarea {
- width: 100%;
- min-height: 250px;
-}
-
-.app-logo .navbar-brand {
- padding: 5px 20px 5px 20px;
-}
-
-/* cookie consent */
-.gdpr-consent-bar .btn-show {
- bottom: -3px;
- left: 5px;
-}
-.gdpr-consent-bar .btn-hide {
- top: 0;
- right: 5px;
-}
diff --git a/Oqtane.Application/Server/wwwroot/css/open-iconic/FONT-LICENSE b/Oqtane.Application/Server/wwwroot/css/open-iconic/FONT-LICENSE
deleted file mode 100644
index a1dc03f3..00000000
--- a/Oqtane.Application/Server/wwwroot/css/open-iconic/FONT-LICENSE
+++ /dev/null
@@ -1,86 +0,0 @@
-SIL OPEN FONT LICENSE Version 1.1
-
-Copyright (c) 2014 Waybury
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/Oqtane.Application/Server/wwwroot/css/open-iconic/ICON-LICENSE b/Oqtane.Application/Server/wwwroot/css/open-iconic/ICON-LICENSE
deleted file mode 100644
index 2199f4a6..00000000
--- a/Oqtane.Application/Server/wwwroot/css/open-iconic/ICON-LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 Waybury
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file
diff --git a/Oqtane.Application/Server/wwwroot/css/open-iconic/README.md b/Oqtane.Application/Server/wwwroot/css/open-iconic/README.md
deleted file mode 100644
index 6b810e47..00000000
--- a/Oqtane.Application/Server/wwwroot/css/open-iconic/README.md
+++ /dev/null
@@ -1,114 +0,0 @@
-[Open Iconic v1.1.1](http://useiconic.com/open)
-===========
-
-### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)
-
-
-
-## What's in Open Iconic?
-
-* 223 icons designed to be legible down to 8 pixels
-* Super-light SVG files - 61.8 for the entire set
-* SVG sprite—the modern replacement for icon fonts
-* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats
-* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats
-* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.
-
-
-## Getting Started
-
-#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.
-
-### General Usage
-
-#### Using Open Iconic's SVGs
-
-We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).
-
-```
-
-```
-
-#### Using Open Iconic's SVG Sprite
-
-Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.
-
-Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `