Add project files.

This commit is contained in:
2025-08-20 11:07:36 +03:30
parent 3863c74931
commit 1a308a4069
899 changed files with 85379 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/.idea
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
+11
View File
@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "nuget" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
+240
View File
@@ -0,0 +1,240 @@
name: Elsa Studio 3 Packages
on:
workflow_dispatch:
push:
branches:
- 'main'
- 'vnext'
- 'bug/*'
- 'enh/*'
- 'feature/*'
- 'issue/*'
- 'patch/*'
- 'rc/*'
- 'develop/*'
release:
types: [ prereleased, published ]
env:
base_version: '3.5.0'
nuget_feed_feedzio: 'https://f.feedz.io/elsa-workflows/elsa-3/nuget/index.json'
nuget_feed_nuget: 'https://api.nuget.org/v3/index.json'
npm_feed_feedzio: 'https://f.feedz.io/elsa-workflows/elsa-3/npm/'
npm_feed_npm: 'https://registry.npmjs.org/'
jobs:
build:
name: Build packages
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Extract branch name
run: |
BRANCH_NAME=${{ github.ref }} # e.g., refs/heads/main
BRANCH_NAME=${BRANCH_NAME#refs/heads/} # remove the refs/heads/ prefix
# Extract the last part after the last slash of the branch name, if any, e.g., feature/issue-123 -> issue-123 and use it as the version prefix.
PACKAGE_PREFIX=$(echo $BRANCH_NAME | rev | cut -d/ -f1 | rev | tr '_' '-')
# If the branch name is main, use the preview version. Otherwise, use the branch name as the version prefix.
if [[ "${BRANCH_NAME}" == "main" || "${BRANCH_NAME}" =~ ^rc/ || "${BRANCH_NAME}" =~ ^develop/ ]]; then
PACKAGE_PREFIX="preview"
fi
echo "Ref: ${{ github.ref }}"
echo "Branch name: ${BRANCH_NAME}"
echo "Package prefix: ${PACKAGE_PREFIX}"
echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV
echo "PACKAGE_PREFIX=${PACKAGE_PREFIX}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v3
- name: Verify commit exists in remote branch
run: |
if [[ "${{ github.ref }}" == refs/tags/* && "${{ github.event_name }}" == "release" && ("${{ github.event.action }}" == "published" || "${{ github.event.action }}" == "prereleased") ]]; then
git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/*
git branch --remote --contains | grep origin/develop/3.5.0
else
git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/*
git branch --remote --contains | grep origin/${BRANCH_NAME}
fi
- name: Set VERSION variable
run: |
if [[ "${{ github.ref }}" == refs/tags/* && "${{ github.event_name }}" == "release" && ("${{ github.event.action }}" == "published" || "${{ github.event.action }}" == "prereleased") ]]; then
TAG_NAME=${{ github.ref }} # e.g., refs/tags/3.0.0
TAG_NAME=${TAG_NAME#refs/tags/} # remove the refs/tags/ prefix
echo "VERSION=${TAG_NAME}" >> $GITHUB_ENV
else
echo "VERSION=${{env.base_version}}-${PACKAGE_PREFIX}.${{github.run_number}}" >> $GITHUB_ENV
fi
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.x
- name: Build workflow designer client assets
working-directory: ./src/modules/Elsa.Studio.Workflows.Designer/ClientLib
run: |
npm install --force
npm run build
- name: Build DOM interop client assets
working-directory: ./src/framework/Elsa.Studio.DomInterop/ClientLib
run: |
npm install --force
npm run build
- name: Build nuget packages
run: dotnet build Elsa.Studio.sln --configuration Release /p:Version=${VERSION}
- name: Test
run: dotnet test Elsa.Studio.sln --configuration Release /p:Version=${VERSION} --no-build
- name: Pack nuget packages
run: dotnet pack Elsa.Studio.sln --configuration Release /p:Version=${VERSION} /p:PackageOutputPath=$(pwd)/packages/nuget
- name: Publish Custom Elements packages # This generates client assets that we then package as an NPM package.
run: dotnet publish ./src/hosts/Elsa.Studio.Host.CustomElements --configuration Release -o ./packages/wasm /p:Version=${VERSION} -f net8.0
# Pack npm wasm package
- name: Pack elsa-studio-wasm npm package
run: |
cp ./packages/wasm/npm/package.json ./packages/wasm/wwwroot/package.json # Copy the package.json file from the NPM package to the wwwroot folder.
cd ./packages/wasm/wwwroot
npm version $VERSION --allow-same-version
npm pack
# Build npm react wrapper package
- name: Pack elsa-studio-wasm-react npm package
run: |
cd ./src/wrappers/wrappers/react-wrapper
npm version $VERSION --allow-same-version
npm run build
npm pack
# Upload nuget packages
- name: Upload nuget packages
uses: actions/upload-artifact@v4
with:
name: elsa-studio-nuget-packages
path: ./packages/nuget/*nupkg
# Upload npm wasm package
- name: Upload npm wasm package
uses: actions/upload-artifact@v4
with:
name: elsa-studio-npm-packages
path: ./packages/wasm/wwwroot/*.tgz
# Upload npm react wrapper package
- name: Upload npm react wrapper package
uses: actions/upload-artifact@v4
with:
name: elsa-studio-npm-react-packages
path: ./src/wrappers/wrappers/react-wrapper/*.tgz
publish_npm_preview_feedzio:
name: Publish npm packages to feedz.io
needs: build
runs-on: ubuntu-latest
timeout-minutes: 10
if: ${{ github.event_name == 'release' || github.event_name == 'push'}}
steps:
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18.12.1
registry-url: ${{ env.npm_feed_feedzio }}
- name: Download npm Packages
uses: actions/download-artifact@v4
with:
name: elsa-studio-npm-packages
path: elsa-studio-npm-packages
- name: Publish npm packages to feedz.io
run: |
for file in ./elsa-studio-npm-packages/*.tgz
do
npm publish "$file" --access public
done
env:
NODE_AUTH_TOKEN: ${{secrets.FEEDZ_API_KEY_BASE64}}
- name: Download npm react Packages
uses: actions/download-artifact@v4
with:
name: elsa-studio-npm-react-packages
path: elsa-studio-npm-react-packages
- name: Publish npm react packages to feedz.io
run: |
for file in ./elsa-studio-npm-react-packages/*.tgz
do
npm publish "$file" --access public
done
env:
NODE_AUTH_TOKEN: ${{secrets.FEEDZ_API_KEY_BASE64}}
publish_npm_npm:
name: Publish npm packages to npmjs.com
needs: build
runs-on: ubuntu-latest
timeout-minutes: 10
if: ${{ github.event_name == 'release' && github.event.action == 'published' }}
steps:
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18.12.1
registry-url: ${{ env.npm_feed_npm }}
- name: Download npm Packages
uses: actions/download-artifact@v4
with:
name: elsa-studio-npm-packages
path: elsa-studio-npm-packages
- run: |
for file in ./elsa-studio-npm-packages/*.tgz
do
npm publish "$file" --access public
done
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_API_KEY }}
- name: Download npm react Packages
uses: actions/download-artifact@v4
with:
name: elsa-studio-npm-react-packages
path: elsa-studio-npm-react-packages
- run: |
for file in ./elsa-studio-npm-react-packages/*.tgz
do
npm publish "$file" --access public
done
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_API_KEY }}
publish_nuget_preview_feedzio:
name: Publish nuget packages to feedz.io
needs: build
runs-on: ubuntu-latest
timeout-minutes: 10
if: ${{ github.event_name == 'release' || github.event_name == 'push'}}
steps:
- name: Download Packages
uses: actions/download-artifact@v4
with:
name: elsa-studio-nuget-packages
path: elsa-studio-nuget-packages
- name: Publish to feedz.io
run: dotnet nuget push ./elsa-studio-nuget-packages/*.nupkg -k ${{ secrets.FEEDZ_API_KEY }} -s ${{ env.nuget_feed_feedzio }} --skip-duplicate
publish_nuget_nuget:
name: Publish to nuget.org
needs: build
runs-on: ubuntu-latest
timeout-minutes: 10
if: ${{ github.event_name == 'release' && github.event.action == 'published' }}
steps:
- name: Download Packages
uses: actions/download-artifact@v4
with:
name: elsa-studio-nuget-packages
path: elsa-studio-nuget-packages
- name: Publish to nuget.org
run: dotnet nuget push ./elsa-studio-nuget-packages/*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s ${{ env.nuget_feed_nuget }} --skip-duplicate
+168
View File
@@ -0,0 +1,168 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
.DS_Store
# Release output from CustomElements - Wasm
src/hosts/Elsa.Studio.Host.CustomElements/wasm
# React public folder
samples/react/workflow-definition-editor-sample/workflow-definition-editor-app/public
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# Rider is a cross-platform .NET IDE
.idea/
# DotCover is a Code Coverage Tool
*.dotCover
# Visual Studio code coverage results
*.coverage
*.coveragexml
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
bower_components/
# SQL Server files
*.mdf
*.ldf
*.ndf
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# OpenCover UI analysis results
OpenCover/
# MSBuild Binary and Structured Log
*.binlog
# Local History for Visual Studio
.localhistory/
src/modules/**/wwwroot/
src/framework/**/wwwroot/
src/modules/Elsa.Studio.Workflows.Designer/ClientLib/package-lock.json
src/modules/Elsa.Studio.DomInterop/ClientLib/package-lock.json
src/framework/Elsa.Studio.DomInterop/ClientLib/package-lock.json
src/samples/react/workflow-definition-editor-sample/workflow-definition-editor-app/package-lock.json
src/wrappers/.npmrc
.vs
+32
View File
@@ -0,0 +1,32 @@
<Project>
<PropertyGroup>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<LangVersion>latest</LangVersion>
<Authors>Elsa Workflows Community</Authors>
<Copyright>2023</Copyright>
<PackageProjectUrl>https://github.com/elsa-workflows/elsa-studio</PackageProjectUrl>
<RepositoryUrl>https://github.com/elsa-workflows/elsa-studio</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageIcon>icon.png</PackageIcon>
<!-- For NuGet browsers that currently don't support <PackageIcon> yet -->
<PackageIconUrl>https://v3.elsaworkflows.io/nuget-icon.png</PackageIconUrl>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<AnalysisModeDocumentation>Default</AnalysisModeDocumentation>
<AnalysisLevelDocumentation>latest</AnalysisLevelDocumentation>
<!-- https://github.com/dotnet/sourcelink -->
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
</PropertyGroup>
<ItemGroup Label="Files">
<None Include="..\..\..\icon.png" Pack="true" PackagePath="\"/>
</ItemGroup>
</Project>
+62
View File
@@ -0,0 +1,62 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<PropertyGroup Label="PackageVersions">
<ElsaVersion>3.5.0</ElsaVersion>
<MicrosoftVersion>9.0.8</MicrosoftVersion>
</PropertyGroup>
<ItemGroup Label="Elsa">
<PackageVersion Include="Elsa.Api.Client" Version="$(ElsaVersion)" />
<PackageVersion Include="Elsa.Secrets.Models" Version="$(ElsaVersion)" />
</ItemGroup>
<ItemGroup>
<PackageVersion Include="Blazored.FluentValidation" Version="2.2.0" />
<PackageVersion Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageVersion Include="BlazorMonaco" Version="3.3.0" />
<PackageVersion Include="CodeBeam.MudBlazor.Extensions" Version="8.2.4" />
<PackageVersion Include="FluentValidation" Version="12.0.0" />
<PackageVersion Include="JetBrains.Annotations" Version="2025.2.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="all" />
<PackageVersion Include="Microsoft.AspNetCore.App" Version="2.2.8" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftVersion)" />
<PackageVersion Include="MudBlazor" Version="8.11.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.ResxSourceGenerator" Version="3.12.0-beta1.25218.8" />
<PackageVersion Include="MudBlazor.Translations" Version="2.5.0" />
<PackageVersion Include="Radzen.Blazor" Version="7.1.7" />
<PackageVersion Include="ShortGuid" Version="2.0.1" />
<PackageVersion Include="ThrottleDebounce" Version="2.0.1" />
<PackageVersion Include="Refit.HttpClientFactory" Version="8.0.0" />
<PackageVersion Include="Refit" Version="8.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components.CustomElements" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.18" PrivateAssets="all" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.18" />
<PackageVersion Include="Microsoft.JSInterop" Version="8.0.18" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.CustomElements" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="$(MicrosoftVersion)" PrivateAssets="all" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.JSInterop" Version="$(MicrosoftVersion)" />
</ItemGroup>
</Project>
+287
View File
@@ -0,0 +1,287 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{875A7E2E-4B7C-4AF0-A71E-3980B73AF363}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{C5E5655F-9B0D-4A93-9D0D-58216E8DE9C1}"
ProjectSection(SolutionItems) = preProject
.gitignore = .gitignore
README.md = README.md
LICENSE = LICENSE
NuGet.Config = NuGet.Config
Directory.Build.props = Directory.Build.props
Directory.Packages.props = Directory.Packages.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{B7464426-9B29-4CF9-9B9C-6941D9E99060}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{0D17508F-2117-49C0-B661-4F3118C8126C}"
ProjectSection(SolutionItems) = preProject
.github\workflows\packages.yml = .github\workflows\packages.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apps", "apps", "{2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{D66B9A40-8608-46F3-9868-625C50EACE43}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Host.Wasm", "src\hosts\Elsa.Studio.Host.Wasm\Elsa.Studio.Host.Wasm.csproj", "{B61B3A06-5AF3-4007-9D22-18A319549156}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Host.Server", "src\hosts\Elsa.Studio.Host.Server\Elsa.Studio.Host.Server.csproj", "{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "framework", "framework", "{C5288F1B-F4E5-423C-AEE8-049996613668}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Shell", "src\framework\Elsa.Studio.Shell\Elsa.Studio.Shell.csproj", "{7F1322EB-7314-47A7-9F03-7D8CB31097C8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.DomInterop", "src\framework\Elsa.Studio.DomInterop\Elsa.Studio.DomInterop.csproj", "{B15E4EAF-62C3-4D3B-B12D-4119D517728C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Shared", "src\framework\Elsa.Studio.Shared\Elsa.Studio.Shared.csproj", "{21B6A662-8DB2-452E-95E7-3E4227D1544A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "bundles", "bundles", "{6BF88129-D74E-46FA-89A4-29B9FBAEC241}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio", "src\bundles\Elsa.Studio\Elsa.Studio.csproj", "{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Host.CustomElements", "src\hosts\Elsa.Studio.Host.CustomElements\Elsa.Studio.Host.CustomElements.csproj", "{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.ActivityPortProviders", "src\modules\Elsa.Studio.ActivityPortProviders\Elsa.Studio.ActivityPortProviders.csproj", "{B831EE86-F713-4466-B91D-FA66EDCC2E30}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Core", "src\framework\Elsa.Studio.Core\Elsa.Studio.Core.csproj", "{C5D998F4-4523-49AF-9F0F-7BCDACA58790}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Core.BlazorServer", "src\framework\Elsa.Studio.Core.BlazorServer\Elsa.Studio.Core.BlazorServer.csproj", "{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Core.BlazorWasm", "src\framework\Elsa.Studio.Core.BlazorWasm\Elsa.Studio.Core.BlazorWasm.csproj", "{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Counter", "src\modules\Elsa.Studio.Counter\Elsa.Studio.Counter.csproj", "{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Dashboard", "src\modules\Elsa.Studio.Dashboard\Elsa.Studio.Dashboard.csproj", "{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Environments", "src\modules\Elsa.Studio.Environments\Elsa.Studio.Environments.csproj", "{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Login", "src\modules\Elsa.Studio.Login\Elsa.Studio.Login.csproj", "{AC76C31B-75F0-473C-8F96-DE77AFF76536}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Login.BlazorServer", "src\modules\Elsa.Studio.Login.BlazorServer\Elsa.Studio.Login.BlazorServer.csproj", "{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Login.BlazorWasm", "src\modules\Elsa.Studio.Login.BlazorWasm\Elsa.Studio.Login.BlazorWasm.csproj", "{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Secrets", "src\modules\Elsa.Studio.Secrets\Elsa.Studio.Secrets.csproj", "{00956738-21BD-4D78-B9AF-67CD0A8B6440}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Security", "src\modules\Elsa.Studio.Security\Elsa.Studio.Security.csproj", "{435D5AF5-D06C-47A6-94B0-9B31016250DC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.UIHints", "src\modules\Elsa.Studio.UIHints\Elsa.Studio.UIHints.csproj", "{C15D23AC-26CA-447D-B441-75407FD79A6A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Webhooks", "src\modules\Elsa.Studio.Webhooks\Elsa.Studio.Webhooks.csproj", "{C18714D2-7205-491D-AD2E-154876F7A77F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Workflows.Core", "src\modules\Elsa.Studio.Workflows.Core\Elsa.Studio.Workflows.Core.csproj", "{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Workflows", "src\modules\Elsa.Studio.Workflows\Elsa.Studio.Workflows.csproj", "{AF48A447-22AF-4C94-8C5D-2B47FD90484C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Workflows.Designer", "src\modules\Elsa.Studio.Workflows.Designer\Elsa.Studio.Workflows.Designer.csproj", "{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.WorkflowContexts", "src\modules\Elsa.Studio.WorkflowContexts\Elsa.Studio.WorkflowContexts.csproj", "{2C40C5CB-634B-45DA-8F65-F0D460C1CB63}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{D2254084-0C4A-42F3-A2D9-A2C9BCE1114E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp1", "samples\BlazorApp1\BlazorApp1.csproj", "{FAE56DEE-A51D-4FC7-AF42-D298BE59D8EE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{F4B408E1-5169-4FA9-B2D7-2377634C4DEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Api.Client", "..\..\elsa-core\main\src\clients\Elsa.Api.Client\Elsa.Api.Client.csproj", "{26ECE061-0F39-4945-8356-EF14E67A8F39}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Agents", "src\modules\Elsa.Studio.Agents\Elsa.Studio.Agents.csproj", "{BDAB9EEA-3083-41D8-933A-E848D346EB2E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Secrets.Models", "..\..\elsa-core\main\src\modules\Elsa.Secrets.Models\Elsa.Secrets.Models.csproj", "{C3681176-1FB1-4B63-BEC7-34DB9813E88D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Localization", "src\modules\Elsa.Studio.Localization\Elsa.Studio.Localization.csproj", "{69695115-160C-498F-A6FE-528A908391AF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Localization.BlazorServer", "src\modules\Elsa.Studio.Localization.BlazorServer\Elsa.Studio.Localization.BlazorServer.csproj", "{A37FA04C-BDEE-4790-9433-9BAE05C06B4D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Localization.BlazorWasm", "src\modules\Elsa.Studio.Localization.BlazorWasm\Elsa.Studio.Localization.BlazorWasm.csproj", "{2B7AB46C-F269-4FF5-B6B2-C73CF1C772DB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Translations", "src\framework\Elsa.Studio.Translations\Elsa.Studio.Translations.csproj", "{DEFD3B1C-BCD1-4442-BF4B-6517FF19ECBC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa", "elsa", "{7A0B2C03-0725-499E-B739-3FB41983B679}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Api.Client", "..\..\elsa-core\3.5.0\src\clients\Elsa.Api.Client\Elsa.Api.Client.csproj", "{CED02683-4B65-496B-B0B6-2EB0F1F179F9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B61B3A06-5AF3-4007-9D22-18A319549156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B61B3A06-5AF3-4007-9D22-18A319549156}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B61B3A06-5AF3-4007-9D22-18A319549156}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B61B3A06-5AF3-4007-9D22-18A319549156}.Release|Any CPU.Build.0 = Release|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Release|Any CPU.Build.0 = Release|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Release|Any CPU.Build.0 = Release|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Release|Any CPU.Build.0 = Release|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Release|Any CPU.Build.0 = Release|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Release|Any CPU.Build.0 = Release|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Release|Any CPU.Build.0 = Release|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Release|Any CPU.Build.0 = Release|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Release|Any CPU.Build.0 = Release|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Release|Any CPU.Build.0 = Release|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Release|Any CPU.Build.0 = Release|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Release|Any CPU.Build.0 = Release|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Release|Any CPU.Build.0 = Release|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Release|Any CPU.Build.0 = Release|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Release|Any CPU.Build.0 = Release|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Release|Any CPU.Build.0 = Release|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Release|Any CPU.Build.0 = Release|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Release|Any CPU.Build.0 = Release|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Release|Any CPU.Build.0 = Release|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Release|Any CPU.Build.0 = Release|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Release|Any CPU.Build.0 = Release|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Release|Any CPU.Build.0 = Release|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Release|Any CPU.Build.0 = Release|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Release|Any CPU.Build.0 = Release|Any CPU
{2C40C5CB-634B-45DA-8F65-F0D460C1CB63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2C40C5CB-634B-45DA-8F65-F0D460C1CB63}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2C40C5CB-634B-45DA-8F65-F0D460C1CB63}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2C40C5CB-634B-45DA-8F65-F0D460C1CB63}.Release|Any CPU.Build.0 = Release|Any CPU
{FAE56DEE-A51D-4FC7-AF42-D298BE59D8EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FAE56DEE-A51D-4FC7-AF42-D298BE59D8EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FAE56DEE-A51D-4FC7-AF42-D298BE59D8EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FAE56DEE-A51D-4FC7-AF42-D298BE59D8EE}.Release|Any CPU.Build.0 = Release|Any CPU
{26ECE061-0F39-4945-8356-EF14E67A8F39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26ECE061-0F39-4945-8356-EF14E67A8F39}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26ECE061-0F39-4945-8356-EF14E67A8F39}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26ECE061-0F39-4945-8356-EF14E67A8F39}.Release|Any CPU.Build.0 = Release|Any CPU
{BDAB9EEA-3083-41D8-933A-E848D346EB2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDAB9EEA-3083-41D8-933A-E848D346EB2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BDAB9EEA-3083-41D8-933A-E848D346EB2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDAB9EEA-3083-41D8-933A-E848D346EB2E}.Release|Any CPU.Build.0 = Release|Any CPU
{C3681176-1FB1-4B63-BEC7-34DB9813E88D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C3681176-1FB1-4B63-BEC7-34DB9813E88D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3681176-1FB1-4B63-BEC7-34DB9813E88D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3681176-1FB1-4B63-BEC7-34DB9813E88D}.Release|Any CPU.Build.0 = Release|Any CPU
{69695115-160C-498F-A6FE-528A908391AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69695115-160C-498F-A6FE-528A908391AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69695115-160C-498F-A6FE-528A908391AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69695115-160C-498F-A6FE-528A908391AF}.Release|Any CPU.Build.0 = Release|Any CPU
{A37FA04C-BDEE-4790-9433-9BAE05C06B4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A37FA04C-BDEE-4790-9433-9BAE05C06B4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A37FA04C-BDEE-4790-9433-9BAE05C06B4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A37FA04C-BDEE-4790-9433-9BAE05C06B4D}.Release|Any CPU.Build.0 = Release|Any CPU
{2B7AB46C-F269-4FF5-B6B2-C73CF1C772DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B7AB46C-F269-4FF5-B6B2-C73CF1C772DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B7AB46C-F269-4FF5-B6B2-C73CF1C772DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B7AB46C-F269-4FF5-B6B2-C73CF1C772DB}.Release|Any CPU.Build.0 = Release|Any CPU
{DEFD3B1C-BCD1-4442-BF4B-6517FF19ECBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DEFD3B1C-BCD1-4442-BF4B-6517FF19ECBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DEFD3B1C-BCD1-4442-BF4B-6517FF19ECBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DEFD3B1C-BCD1-4442-BF4B-6517FF19ECBC}.Release|Any CPU.Build.0 = Release|Any CPU
{CED02683-4B65-496B-B0B6-2EB0F1F179F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CED02683-4B65-496B-B0B6-2EB0F1F179F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CED02683-4B65-496B-B0B6-2EB0F1F179F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CED02683-4B65-496B-B0B6-2EB0F1F179F9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{D66B9A40-8608-46F3-9868-625C50EACE43} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{B61B3A06-5AF3-4007-9D22-18A319549156} = {2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6} = {2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}
{C5288F1B-F4E5-423C-AEE8-049996613668} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{7F1322EB-7314-47A7-9F03-7D8CB31097C8} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{B15E4EAF-62C3-4D3B-B12D-4119D517728C} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{21B6A662-8DB2-452E-95E7-3E4227D1544A} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{6BF88129-D74E-46FA-89A4-29B9FBAEC241} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D} = {6BF88129-D74E-46FA-89A4-29B9FBAEC241}
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8} = {2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}
{C5D998F4-4523-49AF-9F0F-7BCDACA58790} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{B831EE86-F713-4466-B91D-FA66EDCC2E30} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{AF48A447-22AF-4C94-8C5D-2B47FD90484C} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{AC76C31B-75F0-473C-8F96-DE77AFF76536} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{00956738-21BD-4D78-B9AF-67CD0A8B6440} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{435D5AF5-D06C-47A6-94B0-9B31016250DC} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{C15D23AC-26CA-447D-B441-75407FD79A6A} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{C18714D2-7205-491D-AD2E-154876F7A77F} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{2C40C5CB-634B-45DA-8F65-F0D460C1CB63} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{FAE56DEE-A51D-4FC7-AF42-D298BE59D8EE} = {D2254084-0C4A-42F3-A2D9-A2C9BCE1114E}
{26ECE061-0F39-4945-8356-EF14E67A8F39} = {F4B408E1-5169-4FA9-B2D7-2377634C4DEE}
{BDAB9EEA-3083-41D8-933A-E848D346EB2E} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{C3681176-1FB1-4B63-BEC7-34DB9813E88D} = {F4B408E1-5169-4FA9-B2D7-2377634C4DEE}
{69695115-160C-498F-A6FE-528A908391AF} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{A37FA04C-BDEE-4790-9433-9BAE05C06B4D} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{2B7AB46C-F269-4FF5-B6B2-C73CF1C772DB} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{DEFD3B1C-BCD1-4442-BF4B-6517FF19ECBC} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{CED02683-4B65-496B-B0B6-2EB0F1F179F9} = {7A0B2C03-0725-499E-B739-3FB41983B679}
EndGlobalSection
EndGlobal
+12
View File
@@ -0,0 +1,12 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_TYPE_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">IF_OWNER_IS_SINGLE_LINE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UI/@EntryIndexedValue">UI</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Blazored/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Browseable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Heroicons/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=radzen/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Tabler/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
+264
View File
@@ -0,0 +1,264 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{875A7E2E-4B7C-4AF0-A71E-3980B73AF363}"
ProjectSection(SolutionItems) = preProject
src\Directory.Build.props = src\Directory.Build.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{C5E5655F-9B0D-4A93-9D0D-58216E8DE9C1}"
ProjectSection(SolutionItems) = preProject
.gitignore = .gitignore
Directory.Build.props = Directory.Build.props
Directory.Packages.props = Directory.Packages.props
LICENSE = LICENSE
NuGet.Config = NuGet.Config
README.md = README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{B7464426-9B29-4CF9-9B9C-6941D9E99060}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{0D17508F-2117-49C0-B661-4F3118C8126C}"
ProjectSection(SolutionItems) = preProject
.github\workflows\packages.yml = .github\workflows\packages.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hosts", "hosts", "{2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{D66B9A40-8608-46F3-9868-625C50EACE43}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Host.Wasm", "src\hosts\Elsa.Studio.Host.Wasm\Elsa.Studio.Host.Wasm.csproj", "{B61B3A06-5AF3-4007-9D22-18A319549156}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Host.Server", "src\hosts\Elsa.Studio.Host.Server\Elsa.Studio.Host.Server.csproj", "{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "framework", "framework", "{C5288F1B-F4E5-423C-AEE8-049996613668}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Shell", "src\framework\Elsa.Studio.Shell\Elsa.Studio.Shell.csproj", "{7F1322EB-7314-47A7-9F03-7D8CB31097C8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.DomInterop", "src\framework\Elsa.Studio.DomInterop\Elsa.Studio.DomInterop.csproj", "{B15E4EAF-62C3-4D3B-B12D-4119D517728C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Shared", "src\framework\Elsa.Studio.Shared\Elsa.Studio.Shared.csproj", "{21B6A662-8DB2-452E-95E7-3E4227D1544A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "bundles", "bundles", "{6BF88129-D74E-46FA-89A4-29B9FBAEC241}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio", "src\bundles\Elsa.Studio\Elsa.Studio.csproj", "{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Host.CustomElements", "src\hosts\Elsa.Studio.Host.CustomElements\Elsa.Studio.Host.CustomElements.csproj", "{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.ActivityPortProviders", "src\modules\Elsa.Studio.ActivityPortProviders\Elsa.Studio.ActivityPortProviders.csproj", "{B831EE86-F713-4466-B91D-FA66EDCC2E30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Core", "src\framework\Elsa.Studio.Core\Elsa.Studio.Core.csproj", "{C5D998F4-4523-49AF-9F0F-7BCDACA58790}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Core.BlazorServer", "src\framework\Elsa.Studio.Core.BlazorServer\Elsa.Studio.Core.BlazorServer.csproj", "{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Core.BlazorWasm", "src\framework\Elsa.Studio.Core.BlazorWasm\Elsa.Studio.Core.BlazorWasm.csproj", "{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Counter", "src\modules\Elsa.Studio.Counter\Elsa.Studio.Counter.csproj", "{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Dashboard", "src\modules\Elsa.Studio.Dashboard\Elsa.Studio.Dashboard.csproj", "{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Environments", "src\modules\Elsa.Studio.Environments\Elsa.Studio.Environments.csproj", "{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Login", "src\modules\Elsa.Studio.Login\Elsa.Studio.Login.csproj", "{AC76C31B-75F0-473C-8F96-DE77AFF76536}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Login.BlazorServer", "src\modules\Elsa.Studio.Login.BlazorServer\Elsa.Studio.Login.BlazorServer.csproj", "{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Login.BlazorWasm", "src\modules\Elsa.Studio.Login.BlazorWasm\Elsa.Studio.Login.BlazorWasm.csproj", "{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Secrets", "src\modules\Elsa.Studio.Secrets\Elsa.Studio.Secrets.csproj", "{00956738-21BD-4D78-B9AF-67CD0A8B6440}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Security", "src\modules\Elsa.Studio.Security\Elsa.Studio.Security.csproj", "{435D5AF5-D06C-47A6-94B0-9B31016250DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.UIHints", "src\modules\Elsa.Studio.UIHints\Elsa.Studio.UIHints.csproj", "{C15D23AC-26CA-447D-B441-75407FD79A6A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Webhooks", "src\modules\Elsa.Studio.Webhooks\Elsa.Studio.Webhooks.csproj", "{C18714D2-7205-491D-AD2E-154876F7A77F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Workflows.Core", "src\modules\Elsa.Studio.Workflows.Core\Elsa.Studio.Workflows.Core.csproj", "{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Workflows", "src\modules\Elsa.Studio.Workflows\Elsa.Studio.Workflows.csproj", "{AF48A447-22AF-4C94-8C5D-2B47FD90484C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Workflows.Designer", "src\modules\Elsa.Studio.Workflows.Designer\Elsa.Studio.Workflows.Designer.csproj", "{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.WorkflowContexts", "src\modules\Elsa.Studio.WorkflowContexts\Elsa.Studio.WorkflowContexts.csproj", "{AFF99B0F-8243-449C-8AA3-4A087D3DE575}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Localization", "src\modules\Elsa.Studio.Localization\Elsa.Studio.Localization.csproj", "{F3C53AFF-EBE5-447D-AF4D-136F18761733}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Localization.BlazorServer", "src\modules\Elsa.Studio.Localization.BlazorServer\Elsa.Studio.Localization.BlazorServer.csproj", "{F5BBEF8A-D75E-442E-A2E7-EEF5F04335A5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Localization.BlazorWasm", "src\modules\Elsa.Studio.Localization.BlazorWasm\Elsa.Studio.Localization.BlazorWasm.csproj", "{DE57FD2C-3874-486A-89B1-D982726A1189}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Translations", "src\framework\Elsa.Studio.Translations\Elsa.Studio.Translations.csproj", "{76C60D97-FA22-4023-BDB3-6BC47D097E40}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Host.HostedWasm", "src\hosts\Elsa.Studio.Host.HostedWasm\Elsa.Studio.Host.HostedWasm.csproj", "{25BA3052-4F17-4D24-9AE9-01FBD75E8804}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B61B3A06-5AF3-4007-9D22-18A319549156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B61B3A06-5AF3-4007-9D22-18A319549156}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B61B3A06-5AF3-4007-9D22-18A319549156}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B61B3A06-5AF3-4007-9D22-18A319549156}.Release|Any CPU.Build.0 = Release|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6}.Release|Any CPU.Build.0 = Release|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F1322EB-7314-47A7-9F03-7D8CB31097C8}.Release|Any CPU.Build.0 = Release|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B15E4EAF-62C3-4D3B-B12D-4119D517728C}.Release|Any CPU.Build.0 = Release|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{21B6A662-8DB2-452E-95E7-3E4227D1544A}.Release|Any CPU.Build.0 = Release|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D}.Release|Any CPU.Build.0 = Release|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8}.Release|Any CPU.Build.0 = Release|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B831EE86-F713-4466-B91D-FA66EDCC2E30}.Release|Any CPU.Build.0 = Release|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C5D998F4-4523-49AF-9F0F-7BCDACA58790}.Release|Any CPU.Build.0 = Release|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48}.Release|Any CPU.Build.0 = Release|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F}.Release|Any CPU.Build.0 = Release|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165}.Release|Any CPU.Build.0 = Release|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93}.Release|Any CPU.Build.0 = Release|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD}.Release|Any CPU.Build.0 = Release|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC76C31B-75F0-473C-8F96-DE77AFF76536}.Release|Any CPU.Build.0 = Release|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F}.Release|Any CPU.Build.0 = Release|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD}.Release|Any CPU.Build.0 = Release|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00956738-21BD-4D78-B9AF-67CD0A8B6440}.Release|Any CPU.Build.0 = Release|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{435D5AF5-D06C-47A6-94B0-9B31016250DC}.Release|Any CPU.Build.0 = Release|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C15D23AC-26CA-447D-B441-75407FD79A6A}.Release|Any CPU.Build.0 = Release|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C18714D2-7205-491D-AD2E-154876F7A77F}.Release|Any CPU.Build.0 = Release|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4}.Release|Any CPU.Build.0 = Release|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AF48A447-22AF-4C94-8C5D-2B47FD90484C}.Release|Any CPU.Build.0 = Release|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E}.Release|Any CPU.Build.0 = Release|Any CPU
{AFF99B0F-8243-449C-8AA3-4A087D3DE575}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AFF99B0F-8243-449C-8AA3-4A087D3DE575}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AFF99B0F-8243-449C-8AA3-4A087D3DE575}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AFF99B0F-8243-449C-8AA3-4A087D3DE575}.Release|Any CPU.Build.0 = Release|Any CPU
{F3C53AFF-EBE5-447D-AF4D-136F18761733}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F3C53AFF-EBE5-447D-AF4D-136F18761733}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F3C53AFF-EBE5-447D-AF4D-136F18761733}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F3C53AFF-EBE5-447D-AF4D-136F18761733}.Release|Any CPU.Build.0 = Release|Any CPU
{F5BBEF8A-D75E-442E-A2E7-EEF5F04335A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5BBEF8A-D75E-442E-A2E7-EEF5F04335A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5BBEF8A-D75E-442E-A2E7-EEF5F04335A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F5BBEF8A-D75E-442E-A2E7-EEF5F04335A5}.Release|Any CPU.Build.0 = Release|Any CPU
{DE57FD2C-3874-486A-89B1-D982726A1189}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE57FD2C-3874-486A-89B1-D982726A1189}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE57FD2C-3874-486A-89B1-D982726A1189}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE57FD2C-3874-486A-89B1-D982726A1189}.Release|Any CPU.Build.0 = Release|Any CPU
{76C60D97-FA22-4023-BDB3-6BC47D097E40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{76C60D97-FA22-4023-BDB3-6BC47D097E40}.Debug|Any CPU.Build.0 = Debug|Any CPU
{76C60D97-FA22-4023-BDB3-6BC47D097E40}.Release|Any CPU.ActiveCfg = Release|Any CPU
{76C60D97-FA22-4023-BDB3-6BC47D097E40}.Release|Any CPU.Build.0 = Release|Any CPU
{25BA3052-4F17-4D24-9AE9-01FBD75E8804}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{25BA3052-4F17-4D24-9AE9-01FBD75E8804}.Debug|Any CPU.Build.0 = Debug|Any CPU
{25BA3052-4F17-4D24-9AE9-01FBD75E8804}.Release|Any CPU.ActiveCfg = Release|Any CPU
{25BA3052-4F17-4D24-9AE9-01FBD75E8804}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{D66B9A40-8608-46F3-9868-625C50EACE43} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{B61B3A06-5AF3-4007-9D22-18A319549156} = {2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}
{CE71F7A2-3AB3-4475-B7F4-CF5128D0A4F6} = {2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}
{C5288F1B-F4E5-423C-AEE8-049996613668} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{7F1322EB-7314-47A7-9F03-7D8CB31097C8} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{B15E4EAF-62C3-4D3B-B12D-4119D517728C} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{21B6A662-8DB2-452E-95E7-3E4227D1544A} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{6BF88129-D74E-46FA-89A4-29B9FBAEC241} = {875A7E2E-4B7C-4AF0-A71E-3980B73AF363}
{6029D546-A5DB-4B75-8DE4-BFB83EB2A24D} = {6BF88129-D74E-46FA-89A4-29B9FBAEC241}
{8A9DBE4A-A03F-44C9-9AB2-74AA973D72A8} = {2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}
{B831EE86-F713-4466-B91D-FA66EDCC2E30} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{C5D998F4-4523-49AF-9F0F-7BCDACA58790} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{2FC3CE4B-02D3-4808-828E-F4D84FFD1E48} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{565B61D8-C67A-449B-BAE6-BEAC95E52B8F} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{5DE5EFD1-00C0-4797-BFC3-8989ACF52165} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{5161EB5E-9301-4A43-A7CC-CDC665CD7B93} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{7A30797E-A1BF-4128-BB23-D8B00CDD59FD} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{AC76C31B-75F0-473C-8F96-DE77AFF76536} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{B5CF2E45-29A0-4101-90C3-2E6C31142F8F} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{5A3139DC-0FFB-4B44-8BF1-38F29C6133CD} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{00956738-21BD-4D78-B9AF-67CD0A8B6440} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{435D5AF5-D06C-47A6-94B0-9B31016250DC} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{C15D23AC-26CA-447D-B441-75407FD79A6A} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{C18714D2-7205-491D-AD2E-154876F7A77F} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{F85F11D4-8D22-4119-B212-2CD19DDFB0B4} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{AF48A447-22AF-4C94-8C5D-2B47FD90484C} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{E55917F6-388C-47FB-922B-ADE3D1AF5D6E} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{AFF99B0F-8243-449C-8AA3-4A087D3DE575} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{F3C53AFF-EBE5-447D-AF4D-136F18761733} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{F5BBEF8A-D75E-442E-A2E7-EEF5F04335A5} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{DE57FD2C-3874-486A-89B1-D982726A1189} = {D66B9A40-8608-46F3-9868-625C50EACE43}
{76C60D97-FA22-4023-BDB3-6BC47D097E40} = {C5288F1B-F4E5-423C-AEE8-049996613668}
{25BA3052-4F17-4D24-9AE9-01FBD75E8804} = {2AA1AEE9-017E-4F8B-B5FC-2BEA37E83514}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5B8719CC-CF87-45E1-BE1A-13842F951B28}
EndGlobalSection
EndGlobal
+13
View File
@@ -0,0 +1,13 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_LINES/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JS/@EntryIndexedValue">JS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UI/@EntryIndexedValue">UI</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Blazored/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ffffff/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Heroicons/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=localizer/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Tabler/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Elsa Workflows
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.
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="elsa3.feedz.io" value="https://f.feedz.io/elsa-workflows/elsa-3/nuget/index.json" />
<add key="webhooks-core.feedz.io" value="https://f.feedz.io/personal/webhooks-core/nuget/index.json" />
</packageSources>
</configuration>
BIN
View File
Binary file not shown.
+54
View File
@@ -0,0 +1,54 @@
# Elsa Studio
<a href="./artwork/screenshot-1.png" target="_blank">
<p align="center">
<img src="./artwork/screenshot-1.png" alt="Elsa Studio workflow designer">
</p>
</a>
[![Nuget](https://img.shields.io/nuget/v/elsa)](https://www.nuget.org/packages/Elsa.Studio.Shell/)
[![Build status](https://github.com/elsa-workflows/elsa-studio/actions/workflows/packages.yml/badge.svg?branch=main)](https://github.com/elsa-workflows/elsa-studio/actions/workflows/packages.yml)
[![Discord](https://img.shields.io/discord/814605913783795763?label=chat&logo=discord)](https://discord.gg/hhChk5H472)
[![Stack Overflow questions](https://img.shields.io/badge/stackoverflow-elsa_workflows-orange.svg)]( http://stackoverflow.com/questions/tagged/elsa-workflows )
[![Translation status](https://hosted.weblate.org/widget/elsa-studio/svg-badge.svg)](https://hosted.weblate.org/engage/elsa-studio/)
Elsa Studio is a modular, extensible application framework built with MudBlazor and is used to manage Elsa workflows and related entities.
## Prerequisites
- **.NET SDK**: Ensure you have both [.NET 8](https://dotnet.microsoft.com/download/dotnet/8.0) and [.NET 9](https://dotnet.microsoft.com/download/dotnet/9.0) SDKs installed.
- **Node.js and npm**: Install [Node.js](https://nodejs.org/) (which includes npm) for the frontend tooling.
## Setup
1. **Clone the repository**: `git clone https://github.com/elsa-workflows/elsa-studio.git`
2. **Navigate to the project directory**: `cd elsa-studio`
## Before you build
There are some assets that require `NPM` to build the assets prior to the project building. These have been configured to use an MSBUILD pre-build step and should not require any extra
steps but should you run into any issues or want to build these ahead of time, take the following steps
1. **Navigate to ClientLib folder in Elsa.Studio.DomInterop**: `cd .\src\framework\Elsa.Studio.DomInterop\ClientLib`
1. **Get `NPM` ready to run**: `npm install`
1. **Build the assets**: `npm run build`
1. **Navigate to ClientLib folder in Elsa.Studio.Workflows.Designer**: `cd .\src\modules\Elsa.Studio.Workflows.Designer\ClientLib`
1. **Get `NPM` ready to run**: `npm install`
1. **Build the assets**: `npm run build`
## Build and Run
1. **Restore .NET dependencies**: `dotnet restore Elsa.Studio.sln`
1. **Build the project**: `dotnet build Elsa.Studio.sln`
1. **For Blazor Server Host**: `dotnet run --project .\src\hosts\Elsa.Studio.Host.Server\Elsa.Studio.Host.Server.csproj `
1. **For Blazor Server WASM**: `dotnet run --project .\src\hosts\Elsa.Studio.Host.Wasm\Elsa.Studio.Host.Wasm.csproj`
Explore the [Elsa Studio GitHub repository](https://github.com/elsa-workflows/elsa-studio) for more detailed information.
## Localization
Elsa Studio is translated using [Weblate](https://hosted.weblate.org/engage/elsa-studio/)
<a href="https://hosted.weblate.org/engage/elsa-studio/">
<img src="https://hosted.weblate.org/widget/elsa-studio/multi-green.svg" alt="Translation status" />
</a>
Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

+11
View File
@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\hosts\Elsa.Studio.Host.CustomElements\Elsa.Studio.Host.CustomElements.csproj" />
</ItemGroup>
</Project>
+33
View File
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<base href="/"/>
<base href="./" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Grandstander:wght@100&display=swap" rel="stylesheet">
<link href="./_content/MudBlazor/MudBlazor.min.css" rel="stylesheet"/>
<link href="./_content/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css" rel="stylesheet"/>
<link href="./_content/Radzen.Blazor/css/material-base.css" rel="stylesheet">
<link rel="icon" type="image/png" href="favicon.png"/>
<HeadOutlet/>
</head>
<body>
<Routes/>
<script src="./_content/BlazorMonaco/jsInterop.js"></script>
<script src="./_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script>
<script src="./_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
<script src="./_content/MudBlazor/MudBlazor.min.js"></script>
<script src="./_content/CodeBeam.MudBlazor.Extensions/MudExtensions.min.js"></script>
<script src="./_content/Radzen.Blazor/Radzen.Blazor.js"></script>
<script src="_framework/blazor.web.js"></script>
</body>
</html>
@@ -0,0 +1,15 @@
@inherits LayoutComponentBase
<BackendProvider RemoteEndpoint="https://localhost:5001/elsa/api" ApiKey="48587230567A646D394B435A6277734A-4802fa49-e91e-45e8-b00f-b5492377e20b"/>
<div class="btn-group">
<a href="/workflow-definitions" class="btn btn-primary" aria-current="page">Workflow Definitions</a>
<a href="/workflow-instances" class="btn btn-primary">Workflow Instances</a>
</div>
@Body
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
@@ -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;
}
@@ -0,0 +1,20 @@
@page "/"
@rendermode InteractiveServer
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
@@ -0,0 +1,36 @@
@page "/Error"
@using System.Diagnostics
<PageTitle>Error</PageTitle>
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@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;
}
@@ -0,0 +1,67 @@
@page "/weather"
@attribute [StreamRendering]
<PageTitle>Weather</PageTitle>
<h1>Weather</h1>
<p>This component demonstrates showing data.</p>
@if (forecasts == null)
{
<p>
<em>Loading...</em>
</p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@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);
}
}
@@ -0,0 +1,28 @@
@page "/workflow-definitions/{definitionId}"
@using Elsa.Api.Client.Resources.WorkflowDefinitions.Models
@rendermode InteractiveServer
<WorkflowDefinitionEditorWrapper @ref="Editor" DefinitionId="@DefinitionId" WorkflowDefinitionVersionSelected="@WorkflowDefinitionVersionSelected"/>
<MudButton OnClick="@OnClick">Get Current Version</MudButton>
@code
{
/// <summary>
/// The ID of the workflow definition to edit.
/// </summary>
[Parameter]
public string DefinitionId { get; set; } = default!;
private WorkflowDefinitionEditorWrapper Editor { get; set; } = default!;
private Task WorkflowDefinitionVersionSelected(WorkflowDefinition arg)
{
return Task.CompletedTask;
}
private Task OnClick()
{
var selectedVersion = Editor.GetSelectedWorkflowDefinitionVersion();
return Task.CompletedTask;
}
}
@@ -0,0 +1,12 @@
@page "/workflow-definitions"
@rendermode InteractiveServer
<WorkflowDefinitionListWrapper EditWorkflowDefinition="@OnEditWorkflowDefinition" />
@code {
[Inject] NavigationManager NavigationManager { get; set; } = default!;
private void OnEditWorkflowDefinition(string definitionId)
{
NavigationManager.NavigateTo($"workflow-definitions/{definitionId}");
}
}
@@ -0,0 +1,12 @@
@page "/workflow-instances/{instanceId}"
@rendermode InteractiveServer
<WorkflowInstanceViewerWrapper InstanceId="@InstanceId"/>
@code
{
/// <summary>
/// The ID of the workflow instance to edit.
/// </summary>
[Parameter]
public string InstanceId { get; set; } = default!;
}
@@ -0,0 +1,15 @@
@page "/workflow-instances"
@rendermode InteractiveServer
<WorkflowInstanceListWrapper ViewWorkflowInstance="@OnViewWorkflowInstance"/>
@code {
[Inject] NavigationManager NavigationManager { get; set; } = default!;
private void OnViewWorkflowInstance(string instanceId)
{
NavigationManager.NavigateTo($"workflow-instances/{instanceId}");
}
}
@@ -0,0 +1,6 @@
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(Layout.MainLayout)"/>
<FocusOnNavigate RouteData="@routeData" Selector="h1"/>
</Found>
</Router>
@@ -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 BlazorApp1
@using BlazorApp1.Components
@using Elsa.Studio.Host.CustomElements.Components
@using MudBlazor
+58
View File
@@ -0,0 +1,58 @@
using BlazorApp1.Components;
using Elsa.Studio.Contracts;
using Elsa.Studio.Core.BlazorWasm.Extensions;
using Elsa.Studio.Extensions;
using Elsa.Studio.Host.CustomElements.HttpMessageHandlers;
using Elsa.Studio.Host.CustomElements.Services;
using Elsa.Studio.Models;
using Elsa.Studio.Shell.Extensions;
using Elsa.Studio.Workflows.Designer.Extensions;
using Elsa.Studio.Workflows.Extensions;
using Microsoft.Extensions.DependencyInjection.Extensions;
var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents(circuitOptions => circuitOptions.RootComponents.RegisterCustomElsaStudioElements());
// Register local services.
builder.Services.AddSingleton<BackendService>();
// Register the modules.
var backendApiConfig = new BackendApiConfig
{
ConfigureBackendOptions = options => configuration.GetSection("Backend").Bind(options),
ConfigureHttpClientBuilder = options =>
{
options.ApiKey = configuration["Backend:ApiKey"];
options.AuthenticationHandler = typeof(AuthHttpMessageHandler);
}
};
builder.Services.AddCore();
builder.Services.AddShell();
builder.Services.AddRemoteBackend(backendApiConfig);
builder.Services.Replace(ServiceDescriptor.Scoped<IRemoteBackendAccessor, ComponentRemoteBackendAccessor>());
builder.Services.AddWorkflowsModule();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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<App>()
.AddInteractiveServerRenderMode();
app.Run();
@@ -0,0 +1,38 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:22097",
"sslPort": 44321
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5046",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7231;http://localhost:5046",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
@@ -0,0 +1 @@
registry=https://f.feedz.io/elsa-workflows/elsa-3/npm/
@@ -0,0 +1,70 @@
# Getting Started with Create React App
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
The page will reload when you make changes.\
You may also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can't go back!**
If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
### Code Splitting
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
### Analyzing the Bundle Size
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
### Making a Progressive Web App
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
### Advanced Configuration
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
### Deployment
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
### `npm run build` fails to minify
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,42 @@
{
"name": "workflow-definition-editor-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@elsa-workflows/elsa-studio-wasm": "^3.0.0-preview.1",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4",
"uuid": "^9.0.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"postinstall": "npm run copy:elsa-studio-wasm",
"copy:elsa-studio-wasm": "cp -r node_modules/@elsa-workflows/elsa-studio-wasm/_content public/ && cp -r node_modules/@elsa-workflows/elsa-studio-wasm/_framework public/ && cp -r node_modules/@elsa-workflows/elsa-studio-wasm/appsettings.json public/"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
@@ -0,0 +1,12 @@
import WorkflowDefinitionEditor from "./components/WorkflowDefinitionEditor";
function App() {
return (
<div className="App">
<elsa-studio-workflow-definition-editor definition-id="c6deed7e9c4847e8af0647109781e1f3"></elsa-studio-workflow-definition-editor>
{/*<WorkflowDefinitionEditor definitionId="c6deed7e9c4847e8af0647109781e1f3"/>*/}
</div>
);
}
export default App;
@@ -0,0 +1,8 @@
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
@@ -0,0 +1,30 @@
import React from "react";
import {v4 as uuid} from "uuid";
export default class WorkflowDefinitionEditor extends React.Component {
constructor(props) {
super(props);
debugger;
if (!this.props.id)
this.id = uuid();
}
id = "";
onValueChanged = function (value) {
};
render() {
return React.createElement('elsa-studio-workflow-definition-editor', { ...this.props, id: this.id, "definition-id": this.props.definitionId });
}
componentDidMount() {
let element = document.getElementById(this.id);
element.valueChanged = (x) => {
this.props.onValueChanged(x);
};
}
}
@@ -0,0 +1,13 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
@@ -0,0 +1,17 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@@ -0,0 +1,13 @@
const reportWebVitals = onPerfEntry => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;
@@ -0,0 +1,5 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';
+14
View File
@@ -0,0 +1,14 @@
<Project>
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
<ItemGroup Label="Files">
<None Include="..\..\..\icon.png" Pack="true" PackagePath="\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" PrivateAssets="All" />
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
</ItemGroup>
</Project>
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>Elsa Studio bundle of commonly used packages.</Description>
<PackageTags>elsa studio framework bundle</PackageTags>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\framework\Elsa.Studio.Shell\Elsa.Studio.Shell.csproj"/>
<ProjectReference Include="..\..\modules\Elsa.Studio.Dashboard\Elsa.Studio.Dashboard.csproj"/>
<ProjectReference Include="..\..\modules\Elsa.Studio.Workflows\Elsa.Studio.Workflows.csproj"/>
</ItemGroup>
</Project>
+3
View File
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait />
</Weavers>
+30
View File
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
+8
View File
@@ -0,0 +1,8 @@
# Elsa.Studio
This is a bundle package that includes the following packages:
- Elsa.Studio.Backend
- Elsa.Studio.Dashboard
- Elsa.Studio.Workflows
- Elsa.Studio.Shell
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>Blazor Server impementation for certain abstractions provided by Elsa.Studio.Core.</Description>
<PackageTags>elsa studio blazor server</PackageTags>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Blazored.LocalStorage"/>
<FrameworkReference Include="Microsoft.AspNetCore.App"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Elsa.Studio.Core\Elsa.Studio.Core.csproj"/>
<ProjectReference Include="..\Elsa.Studio.Shared\Elsa.Studio.Shared.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,23 @@
using Elsa.Studio.Core.BlazorServer.HostedServices;
using Elsa.Studio.Extensions;
using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Studio.Core.BlazorServer.Extensions;
/// <summary>
/// Contains extension methods for the <see cref="IServiceCollection"/> interface.
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// Adds core services with Blazor Server implementations.
/// </summary>
public static IServiceCollection AddCore(this IServiceCollection services)
{
services.AddCoreInternal();
services.AddSharedServices();
services.AddHostedService<RunStartupTasksHostedService>();
return services;
}
}
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait />
</Weavers>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
@@ -0,0 +1,37 @@
using Elsa.Studio.Contracts;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Elsa.Studio.Core.BlazorServer.HostedServices;
/// <summary>
/// Executes all registered <see cref="IStartupTask"/> services.
/// </summary>
public class RunStartupTasksHostedService : IHostedService
{
private readonly IServiceScopeFactory _serviceScopeFactory;
/// <summary>
/// Initializes a new instance of <see cref="RunStartupTasksHostedService"/>.
/// </summary>
/// <param name="serviceScopeFactory"></param>
public RunStartupTasksHostedService(IServiceScopeFactory serviceScopeFactory)
{
_serviceScopeFactory = serviceScopeFactory;
}
/// <summary>
/// Resolves all registered <see cref="IStartupTask"/> services and executes them.
/// </summary>
public async Task StartAsync(CancellationToken cancellationToken)
{
using var scope = _serviceScopeFactory.CreateScope();
var startupTaskRunner = scope.ServiceProvider.GetRequiredService<IStartupTaskRunner>();
await startupTaskRunner.RunStartupTasksAsync(cancellationToken);
}
/// <inheritdoc />
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>Blazor WebAssembly impementation for certain abstractions provided by Elsa.Studio.Core.</Description>
<PackageTags>elsa studio blazor webassembly</PackageTags>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Blazored.LocalStorage"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Elsa.Studio.Core\Elsa.Studio.Core.csproj"/>
<ProjectReference Include="..\Elsa.Studio.Shared\Elsa.Studio.Shared.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,21 @@
using Elsa.Studio.Extensions;
using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Studio.Core.BlazorWasm.Extensions;
/// <summary>
/// Contains extension methods for the <see cref="IServiceCollection"/> interface.
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// Adds core services with WASM implementations.
/// </summary>
public static IServiceCollection AddCore(this IServiceCollection services)
{
services.AddSharedServices();
services.AddCoreInternal();
return services;
}
}
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait />
</Weavers>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
@@ -0,0 +1,12 @@
using Elsa.Studio.Contracts;
namespace Elsa.Studio.Abstractions;
/// <summary>
/// A base class for modules.
/// </summary>
public abstract class FeatureBase : IFeature
{
/// <inheritdoc />
public virtual ValueTask InitializeAsync(CancellationToken cancellationToken = default) => ValueTask.CompletedTask;
}
@@ -0,0 +1,54 @@
using Elsa.Studio.Contracts;
using Elsa.Studio.Enums;
using Elsa.Studio.Models;
using Microsoft.AspNetCore.Components;
namespace Elsa.Studio.Abstractions;
/// <summary>
/// Provides a base handler for field extensions.
/// </summary>
public abstract class FieldExtensionHandlerBase : IUIFieldExtensionHandler
{
/// <summary>
/// <inheritdoc/>
/// </summary>
public virtual int DisplayOrder { get; set; } = 1;
/// <summary>
/// <inheritdoc/>
/// </summary>
public virtual bool IncludeForAll { get; set; } = false;
/// <summary>
/// <inheritdoc/>
/// </summary>
public virtual FieldExtensionPosition Position { get; set; } = FieldExtensionPosition.Top;
/// <summary>
/// <inheritdoc/>
/// </summary>
public virtual string UIHintComponent { get; set; } = string.Empty;
/// <summary>
/// <inheritdoc/>
/// </summary>
public virtual List<string> ActivityTypes { get; set; } = [];
/// <summary>
/// <inheritdoc/>
/// </summary>
public virtual List<string> Syntaxes { get; set; } = [];
/// <summary>
/// <inheritdoc/>
/// </summary>
public virtual bool GetExtensionForInputComponent(string componentName) =>
(string.IsNullOrEmpty(UIHintComponent) && !ActivityTypes.Any() && !Syntaxes.Any() && IncludeForAll)
|| UIHintComponent.Equals(componentName, StringComparison.OrdinalIgnoreCase);
/// <summary>
/// <inheritdoc/>
/// </summary>
public abstract RenderFragment DisplayExtension(DisplayInputEditorContext context);
}
@@ -0,0 +1,18 @@
namespace Elsa.Studio.Attributes;
/// <summary>
/// Marks a class as a remote feature.
/// </summary>
public class RemoteFeatureAttribute : Attribute
{
/// <inheritdoc />
public RemoteFeatureAttribute(string name)
{
Name = name;
}
/// <summary>
/// Gets the name of the remote feature.
/// </summary>
public string Name { get; }
}
@@ -0,0 +1,15 @@
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Elsa.Studio.Contracts;
public interface IActivityTab
{
string Title { get; }
Func<IDictionary<string, object?>, RenderFragment> Render { get; }
}
@@ -0,0 +1,22 @@
using Microsoft.AspNetCore.Components;
namespace Elsa.Studio.Contracts;
public interface IAppBarService
{
/// <summary>
/// Invoked when the app bar items change.
/// </summary>
event Action AppBarItemsChanged;
/// <summary>
/// A collection of components to render in the app bar.
/// </summary>
IEnumerable<RenderFragment> AppBarItems { get; }
/// <summary>
/// Adds a component to the app bar.
/// </summary>
/// <typeparam name="T">The type of the component.</typeparam>
void AddAppBarItem<T>() where T : IComponent;
}
@@ -0,0 +1,19 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides connection details to the backend.
/// </summary>
public interface IBackendApiClientProvider
{
/// <summary>
/// Gets the URL to the backend.
/// </summary>
Uri Url { get; }
/// <summary>
/// Gets an API client from the backend connection provider.
/// </summary>
/// <typeparam name="T">The API client type.</typeparam>
/// <returns>The API client.</returns>
ValueTask<T> GetApiAsync<T>(CancellationToken cancellationToken = default) where T : class;
}
@@ -0,0 +1,10 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Represents an interface for accessing the current IServiceProvider in Blazor.
/// </summary>
public interface IBlazorServiceAccessor
{
/// Gets or sets the current IServiceProvider.
IServiceProvider Services { get; set; }
}
@@ -0,0 +1,14 @@
using Elsa.Studio.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides information about the client.
/// </summary>
public interface IClientInformationProvider
{
/// <summary>
/// Gets information about the client.
/// </summary>
ValueTask<ClientInformation> GetInfoAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,14 @@
using Elsa.Api.Client.Resources.Scripting.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides available expression descriptors.
/// </summary>
public interface IExpressionProvider
{
/// <summary>
/// Lists all expression descriptors.
/// </summary>
ValueTask<IEnumerable<ExpressionDescriptor>> ListAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,19 @@
using Elsa.Api.Client.Resources.Scripting.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides syntax services.
/// </summary>
public interface IExpressionService
{
/// <summary>
/// Lists all expression descriptors.
/// </summary>
Task<IEnumerable<ExpressionDescriptor>> ListDescriptorsAsync(CancellationToken cancellationToken = default);
/// <summary>
/// Gets a syntax provider by name.
/// </summary>
Task<ExpressionDescriptor?> GetByTypeAsync(string type, CancellationToken cancellationToken = default);
}
@@ -0,0 +1,13 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Represents a feature that can be registered with the dashboard.
/// </summary>
public interface IFeature
{
/// <summary>
/// Called by the dashboard to initialize the feature.
/// </summary>
/// <param name="cancellationToken">A cancellation token.</param>
ValueTask InitializeAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,22 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Manages features.
/// </summary>
public interface IFeatureService
{
/// <summary>
/// Event that is triggered when the features have been initialized.
/// </summary>
event Action? Initialized;
/// <summary>
/// Returns all features.
/// </summary>
IEnumerable<IFeature> GetFeatures();
/// <summary>
/// Initializes all features.
/// </summary>
Task InitializeFeaturesAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,30 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Represents a mediator that can be used to publish notifications and subscribe to notifications.
/// </summary>
public interface IMediator
{
/// <summary>
/// Subscribes to a notification.
/// </summary>
/// <param name="handler"></param>
/// <typeparam name="TNotification"></typeparam>
/// <typeparam name="THandler"></typeparam>
void Subscribe<TNotification, THandler>(THandler handler) where THandler : INotificationHandler<TNotification> where TNotification : INotification;
/// <summary>
/// Unsubscribes from a notification.
/// </summary>
void Unsubscribe<TNotification, THandler>(THandler handler) where THandler : INotificationHandler<TNotification> where TNotification : INotification;
/// <summary>
/// Unsubscribes from a notification.
/// </summary>
void Unsubscribe(INotificationHandler handler);
/// <summary>
/// Publishes a notification.
/// </summary>
Task NotifyAsync<TNotification>(TNotification notification, CancellationToken cancellationToken = default) where TNotification : INotification;
}
@@ -0,0 +1,16 @@
using Elsa.Studio.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Returns menu item groups to the dashboard.
/// </summary>
public interface IMenuGroupProvider
{
/// <summary>
/// Returns menu item groups to the dashboard.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A collection of <see cref="MenuItemGroup"/> instances.</returns>
ValueTask<IEnumerable<MenuItemGroup>> GetMenuGroupsAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,10 @@
using Elsa.Studio.Models;
namespace Elsa.Studio.Contracts;
/// Provides menu items to the dashboard.
public interface IMenuProvider
{
/// Returns a list of menu items.
ValueTask<IEnumerable<MenuItem>> GetMenuItemsAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,23 @@
using Elsa.Studio.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// A service that provides menu items and menu item groups.
/// </summary>
public interface IMenuService
{
/// <summary>
/// Returns all menu items from all menu providers.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A list of <see cref="MenuItem"/> instances.</returns>
ValueTask<IEnumerable<MenuItem>> GetMenuItemsAsync(CancellationToken cancellationToken = default);
/// <summary>
/// Returns all menu item groups from all menu group providers.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A list of <see cref="MenuItemGroup"/> instances.</returns>
ValueTask<IEnumerable<MenuItemGroup>> GetMenuItemGroupsAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,5 @@
namespace Elsa.Studio.Contracts;
public interface INotification
{
}
@@ -0,0 +1,22 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Represents a notification handler.
/// </summary>
public interface INotificationHandler
{
}
/// <summary>
/// Represents a notification handler.
/// </summary>
/// <typeparam name="T">The type of the notification.</typeparam>
public interface INotificationHandler<in T> : INotificationHandler where T : INotification
{
/// <summary>
/// Handles the given notification.
/// </summary>
/// <param name="notification">The notification to handle.</param>
/// <param name="cancellationToken">The cancellation token.</param>
Task HandleAsync(T notification, CancellationToken cancellationToken);
}
@@ -0,0 +1,14 @@
using Elsa.Studio.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides access to the current remote backend.
/// </summary>
public interface IRemoteBackendAccessor
{
/// <summary>
/// Gets or sets the current backend.
/// </summary>
RemoteBackend RemoteBackend { get; }
}
@@ -0,0 +1,22 @@
using Elsa.Api.Client.Resources.Features.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides a way to check if a feature is enabled.
/// </summary>
public interface IRemoteFeatureProvider
{
/// <summary>
/// Returns a value indicating whether the feature with the specified name is enabled.
/// </summary>
/// <param name="featureName">The name of the feature.</param>
/// <param name="cancellationToken">An optional cancellation token.</param>
/// <returns>A value indicating whether the feature with the specified name is enabled.</returns>
Task<bool> IsEnabledAsync(string featureName, CancellationToken cancellationToken = default);
/// <summary>
/// Returns a list of installed features.
/// </summary>
Task<IEnumerable<FeatureDescriptor>> ListAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,14 @@
using Elsa.Studio.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides information about the server.
/// </summary>
public interface IServerInformationProvider
{
/// <summary>
/// Gets information about the server.
/// </summary>
ValueTask<ServerInformation> GetInfoAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,13 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Represents a startup task that is invoked once during application startup.
/// </summary>
public interface IStartupTask
{
/// <summary>
/// Invoked during application startup.
/// </summary>
/// <param name="cancellationToken">A cancellation token.</param>
ValueTask ExecuteAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,12 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Runs startup tasks.
/// </summary>
public interface IStartupTaskRunner
{
/// <summary>
/// Runs startup tasks.
/// </summary>
Task RunStartupTasksAsync(CancellationToken cancellationToken = default);
}
@@ -0,0 +1,36 @@
using MudBlazor;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides theme information to the dashboard.
/// </summary>
public interface IThemeService
{
/// <summary>
/// Raised when the current theme changes.
/// </summary>
event Action CurrentThemeChanged;
/// <summary>
/// Raised when the dark mode changes.
/// </summary>
event Action IsDarkModeChanged;
/// <summary>
/// The current theme.
/// </summary>
MudTheme CurrentTheme { get; set; }
/// <summary>
/// Returns the current palette, depending on whether the dashboard is in dark mode.
/// </summary>
#pragma warning disable CS0618
Palette CurrentPalette => IsDarkMode ? CurrentTheme.PaletteDark : CurrentTheme.PaletteLight;
#pragma warning restore CS0618
/// <summary>
/// Whether the dashboard is in dark mode.
/// </summary>
public bool IsDarkMode { get; set; }
}
@@ -0,0 +1,52 @@
using Elsa.Studio.Enums;
using Elsa.Studio.Models;
using Microsoft.AspNetCore.Components;
namespace Elsa.Studio.Contracts
{
/// <summary>
/// Provides a contract for UI field extension handlers.
/// </summary>
public interface IUIFieldExtensionHandler
{
/// <summary>
/// The order in which the extensions should be displayed.
/// </summary>
int DisplayOrder { get; set; }
/// <summary>
/// If set to true and no restricting types are set, either with <c>UIHintComponent</c>, <c>ActivityTypes</c> or <c>Syntaxes</c>, this extension will be rendered for in all field types.
/// </summary>
bool IncludeForAll { get; set; }
/// <summary>
/// The position to render the extension within the field.
/// </summary>
FieldExtensionPosition Position { get; set; }
/// <summary>
/// The UIHint component this extension should be rendered for.
/// </summary>
string UIHintComponent { get; set; }
/// <summary>
/// The activities this extension should be rendered for.
/// </summary>
List<string> ActivityTypes { get; set; }
/// <summary>
/// The syntaxes this extension should be rendered for.
/// </summary>
List<string> Syntaxes { get; set; }
/// <summary>
/// Returns true if the handler extension the specified or is empty.
/// </summary>
bool GetExtensionForInputComponent(string componentName);
/// <summary>
/// Returns a <see cref="RenderFragment"/> of the added extension.
/// </summary>
RenderFragment DisplayExtension(DisplayInputEditorContext context);
}
}
@@ -0,0 +1,17 @@
using Elsa.Studio.Models;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides a service contact for resolving UI field extensions
/// </summary>
public interface IUIFieldExtensionService
{
/// <summary>
/// Try to return a list of extension handlers for a component
/// </summary>
/// <param name="componentName">The component name to get the handler for. This should be the name of the component calling this function.</param>
/// <param name="context">The display input editor context</param>
/// <returns></returns>
List<IUIFieldExtensionHandler>? TryGetHandlers(string componentName, DisplayInputEditorContext context);
}
@@ -0,0 +1,25 @@
using Elsa.Studio.Models;
using Microsoft.AspNetCore.Components;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides a contract for UI hint handlers.
/// </summary>
public interface IUIHintHandler
{
/// <summary>
/// Returns true if the handler supports the specified UI hint.
/// </summary>
bool GetSupportsUIHint(string uiHint);
/// <summary>
/// Returns the UI syntax for the handler.
/// </summary>
string UISyntax { get; }
/// <summary>
/// Returns a <see cref="RenderFragment"/> that renders the input editor.
/// </summary>
RenderFragment DisplayInputEditor(DisplayInputEditorContext context);
}
@@ -0,0 +1,7 @@
namespace Elsa.Studio.Contracts;
public interface IUIHintService
{
IUIHintHandler GetHandler(string uiHint);
//RenderFragment DisplayInputEditor(DisplayInputEditorContext context);
}
@@ -0,0 +1,14 @@
using Microsoft.AspNetCore.Components;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides the <see cref="RenderFragment"/> to display the login page.
/// </summary>
public interface IUnauthorizedComponentProvider
{
/// <summary>
/// Returns the <see cref="RenderFragment"/> to display the login page.
/// </summary>
RenderFragment GetUnauthorizedComponent();
}
@@ -0,0 +1,25 @@
using Microsoft.AspNetCore.Components;
namespace Elsa.Studio.Contracts;
/// <summary>
/// Represents a widget.
/// </summary>
public interface IWidget
{
/// <summary>
/// Gets the zone in which the widget should be rendered.
/// </summary>
string Zone { get; }
/// <summary>
/// Gets the order in which the widget should be rendered.
/// </summary>
double Order { get; }
/// <summary>
/// Gets the fragment to render.
/// </summary>
Func<IDictionary<string, object?>, RenderFragment> Render { get; }
}
@@ -0,0 +1,17 @@
namespace Elsa.Studio.Contracts;
/// <summary>
/// Provides a registry of widgets.
/// </summary>
public interface IWidgetRegistry
{
/// <summary>
/// Adds the specified widget to the registry.
/// </summary>
void Add(IWidget widget);
/// <summary>
/// Returns a list of widgets for the specified zone.
/// </summary>
IEnumerable<IWidget> List(string zone);
}
@@ -0,0 +1,36 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>Core Elsa Studio services.</Description>
<PackageTags>elsa studio core</PackageTags>
<RootNamespace>Elsa.Studio</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization"/>
<PackageReference Include="Microsoft.AspNetCore.Components.CustomElements"/>
<PackageReference Include="Microsoft.AspNetCore.Components.Web"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions"/>
<PackageReference Include="Microsoft.JSInterop"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Blazored.FluentValidation"/>
<PackageReference Include="Blazored.LocalStorage"/>
<PackageReference Include="CodeBeam.MudBlazor.Extensions"/>
<PackageReference Include="FluentValidation"/>
<PackageReference Include="MudBlazor"/>
<PackageReference Include="Radzen.Blazor"/>
<PackageReference Include="ShortGuid"/>
<PackageReference Include="ThrottleDebounce"/>
</ItemGroup>
<!-- <ItemGroup Label="Elsa">-->
<!-- <ProjectReference Include="..\..\..\..\..\elsa-core\3.5.0\src\clients\Elsa.Api.Client\Elsa.Api.Client.csproj"/>-->
<!-- </ItemGroup>-->
<ItemGroup Label="Elsa">
<PackageReference Include="Elsa.Api.Client"/>
</ItemGroup>
</Project>
@@ -0,0 +1,41 @@
namespace Elsa.Studio;
/// <summary>
/// Provides Elsa Studio icons.
/// </summary>
public static class ElsaStudioIcons
{
/// <summary>
/// Provides Tabler icons.
/// </summary>
public static class Tabler
{
public const string Pencil = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M4 20h4l10.5 -10.5a1.5 1.5 0 0 0 -4 -4l-10.5 10.5v4" /> <line x1="13.5" y1="6.5" x2="17.5" y2="10.5" /></svg>""";
public const string Text = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <line x1="4" y1="6" x2="20" y2="6" /> <line x1="4" y1="18" x2="9" y2="18" /> <path d="M4 12h13a3 3 0 0 1 0 6h-4l2 -2m0 4l-2 -2" /></svg>""";
public const string Cloud = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M7 18a4.6 4.4 0 0 1 0 -9h0a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-12" /></svg>""";
public const string SwitchDiagonal = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <polyline points="15 4 19 4 19 8" /> <line x1="14.75" y1="9.25" x2="19" y2="4" /> <line x1="5" y1="19" x2="9" y2="15" /> <polyline points="15 19 19 19 19 15" /> <line x1="5" y1="5" x2="19" y2="19" /></svg>""";
public const string CheckCircle = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <circle cx="12" cy="12" r="9" /> <path d="M9 12l2 2l4 -4" /></svg>""";
public const string CheckShield = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M9 12l2 2l4 -4" /> <path d="M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3" /></svg>""";
public const string Hexagon = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M12.971 3.54l6 3.333A2 2 0 0120 8.62v6.536a2 2 0 0 1 -1.029 1.748l-6 3.333a2 2 0 0 1 -1.942 0l-6-3.333A2 2 0 014 15.157V8.62a2 2 0 0 1 1.029 -1.748l6-3.333a2 2 0 0 1 1.942 0z" /></svg>""";
public const string GitMerge = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M12.971 3.54l6 3.333A2 2 0 0120 8.62v6.536a2 2 0 0 1 -1.029 1.748l-6 3.333a2 2 0 0 1 -1.942 0l-6-3.333A2 2 0 014 15.157V8.62a2 2 0 0 1 1.029 -1.748l6-3.333a2 2 0 0 1 1.942 0z" /></svg>""";
public const string GitFork = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <circle cx="12" cy="18" r="2" /> <circle cx="7" cy="6" r="2" /> <circle cx="17" cy="6" r="2" /> <path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /> <line x1="12" y1="12" x2="12" y2="16" /></svg>""";
public const string World = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <circle cx="12" cy="12" r="9" /> <line x1="3.6" y1="9" x2="20.4" y2="9" /> <line x1="3.6" y1="15" x2="20.4" y2="15" /> <path d="M11.5 3a17 17 0 0 0 0 18" /> <path d="M12.5 3a17 17 0 0 1 0 18" /></svg>""";
public const string RepeatOne = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M4 12v-3a3 3 0 0 1 3 -3h13m-3 -3l3 3l-3 3" /> <path d="M20 12v3a3 3 0 0 1 -3 3h-13m3 3l-3-3l3-3" /> <path d="M11 11l1 -1v4" /></svg>""";
public const string Back1 = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M9 11l-4 4l4 4m-4 -4h11a4 4 0 0 0 0 -8h-1" /></svg>""";
public const string Italic = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <circle cx="12" cy="18" r="2" /> <circle cx="7" cy="6" r="2" /> <circle cx="17" cy="6" r="2" /> <path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /> <line x1="12" y1="12" x2="12" y2="16" /></svg>""";
public const string RotateClockwise2 = """<svg width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z"/> <path d="M9 4.55a8 8 0 0 1 6 14.9m0 -4.45v5h5" /> <path d="M11 19.95a8 8 0 0 1 -5.3 -12.8" stroke-dasharray=".001 4.13" /></svg>""";
}
/// <summary>
/// Provides Heroicons.
/// </summary>
public static class Heroicons
{
public const string Question = """<svg width="24" height="24" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>""";
public const string Exclamation = """<svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/></svg>""";
public const string PencilPaper = """<svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"/></svg>""";
public const string Outgoing = """<svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"/></svg><svg class="h-8 w-8 text-red-500" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"/></svg>""";
public const string Incoming = """<svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/></svg><svg class="h-8 w-8 text-red-500" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/></svg>""";
}
}
@@ -0,0 +1,17 @@
namespace Elsa.Studio.Enums;
/// <summary>
/// Provides field extension render positions.
/// </summary>
public enum FieldExtensionPosition
{
/// <summary>
/// Positions the extension at the top of the field.
/// </summary>
Top = 0,
/// <summary>
/// Positions the extension at the bottom of the field.
/// </summary>
Bottom = 1
}
@@ -0,0 +1,39 @@
using Elsa.Studio.Contracts;
using JetBrains.Annotations;
namespace Elsa.Studio.Extensions;
/// <summary>
/// Contains extension methods for <see cref="IMediator"/>.
/// </summary>
[UsedImplicitly]
public static class MediatorExtensions
{
/// <summary>
/// Subscribes the given handler to the given notification.
/// Use this from components' Initialize methods.
/// The component itself can be the handler
/// to subscribe itself if it implements <see cref="INotificationHandler{T}"/>.
/// </summary>
public static void Subscribe<TNotification>(this IMediator mediator, INotificationHandler handler) where TNotification : INotification
{
var handlerType = handler.GetType();
var subscribeMethod = typeof(IMediator).GetMethod(nameof(IMediator.Subscribe))!;
var genericSubscribeMethod = subscribeMethod.MakeGenericMethod(typeof(TNotification), handlerType);
genericSubscribeMethod.Invoke(mediator, [handler]);
}
/// <summary>
/// Unsubscribes the given handler from the given notification.
/// Use this from components' Dispose methods.
/// The component itself can be the handler
/// to unsubscribe itself if it implements <see cref="INotificationHandler{T}"/>.
/// </summary>
public static void Unsubscribe<TNotification>(this IMediator mediator, INotificationHandler handler) where TNotification : INotification
{
var handlerType = handler.GetType();
var unsubscribeMethod = typeof(IMediator).GetMethod(nameof(IMediator.Unsubscribe))!;
var genericUnsubscribeMethod = unsubscribeMethod.MakeGenericMethod(typeof(TNotification), handlerType);
genericUnsubscribeMethod.Invoke(mediator, [handler]);
}
}
@@ -0,0 +1,33 @@
using System.Reflection;
namespace Elsa.Studio.Extensions;
/// <summary>
/// Provides extension methods for the <see cref="object"/> class.
/// </summary>
public static class ObjectExtension
{
/// <summary>
/// Converts the specified object to a dictionary.
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public static Dictionary<string, object?> ToDictionary(this object obj)
{
if (obj == null)
throw new ArgumentNullException(nameof(obj));
var dictionary = new Dictionary<string, object?>();
foreach (var property in obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
if (!property.CanRead)
continue;
var value = property.GetValue(obj);
dictionary.Add(property.Name, value);
}
return dictionary;
}
}
@@ -0,0 +1,31 @@
using ThrottleDebounce;
namespace Elsa.Studio.Extensions;
/// <summary>
/// Adds extension methods for <see cref="RateLimitedFunc{TResult}"/> and <see cref="RateLimitedFunc{T, TResult}"/>.
/// </summary>
public static class RateLimitedFuncExtensions
{
/// <summary>
/// Invokes the specified rate limited function.
/// </summary>
public static async Task InvokeAsync(this RateLimitedFunc<Task> rateLimitedFunc)
{
var task = rateLimitedFunc.Invoke();
if (task != null)
await task;
}
/// <summary>
/// Invokes the specified rate limited function.
/// </summary>
public static async Task InvokeAsync<T>(this RateLimitedFunc<T, Task> rateLimitedFunc, T arg1)
{
var task = rateLimitedFunc.Invoke(arg1);
if (task != null)
await task;
}
}
@@ -0,0 +1,28 @@
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
namespace Elsa.Studio.Extensions;
/// <summary>
/// Provides extension methods for the <see cref="RenderTreeBuilder"/> class.
/// </summary>
public static class RenderTreeBuilderExtensions
{
/// <summary>
/// Creates a component of the specified type.
/// </summary>
public static void CreateComponent<T>(this RenderTreeBuilder builder) where T : IComponent
{
var sequence = 0;
CreateComponent<T>(builder, ref sequence);
}
/// <summary>
/// Creates a component of the specified type.
/// </summary>
public static void CreateComponent<T>(this RenderTreeBuilder builder, ref int sequence) where T : IComponent
{
builder.OpenComponent<T>(sequence++);
builder.CloseComponent();
}
}
@@ -0,0 +1,90 @@
using Elsa.Api.Client.Extensions;
using Elsa.Api.Client.Options;
using Elsa.Studio.Contracts;
using Elsa.Studio.Localization;
using Elsa.Studio.Models;
using Elsa.Studio.Options;
using Elsa.Studio.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Elsa.Studio.Extensions;
/// <summary>
/// Contains extension methods for the <see cref="IServiceCollection"/> interface.
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// Adds the core services.
/// </summary>
public static IServiceCollection AddCoreInternal(this IServiceCollection services)
{
services
.AddScoped<IBlazorServiceAccessor, BlazorServiceAccessor>()
.AddScoped<IMenuService, DefaultMenuService>()
.AddScoped<IMenuGroupProvider, DefaultMenuGroupProvider>()
.AddScoped<IThemeService, DefaultThemeService>()
.AddScoped<IAppBarService, DefaultAppBarService>()
.AddScoped<IFeatureService, DefaultFeatureService>()
.AddScoped<IUIHintService, DefaultUIHintService>()
.AddScoped<IUIFieldExtensionService, DefaultUIFieldExtensionService>()
.AddScoped<IExpressionService, DefaultExpressionService>()
.AddScoped<IStartupTaskRunner, DefaultStartupTaskRunner>()
.AddScoped<IServerInformationProvider, EmptyServerInformationProvider>()
.AddScoped<IClientInformationProvider, AssemblyClientInformationProvider>()
.AddScoped<IWidgetRegistry, DefaultWidgetRegistry>()
;
// Mediator.
services.AddScoped<IMediator, DefaultMediator>();
//Localization
services.AddSingleton<ILocalizationProvider, DefaultLocalizationProvider>();
services.AddSingleton<ILocalizer, DefaultLocalizer>();
return services;
}
/// <summary>
/// Adds backend services to the service collection.
/// </summary>
public static IServiceCollection AddRemoteBackend(this IServiceCollection services, BackendApiConfig? config = null)
{
services.Configure(config?.ConfigureBackendOptions ?? (_ => { }));
services.AddDefaultApiClients(config?.ConfigureHttpClientBuilder);
services.TryAddScoped<IRemoteBackendAccessor, DefaultRemoteBackendAccessor>();
services.TryAddScoped<IBackendApiClientProvider, DefaultBackendApiClientProvider>();
return services;
}
public static IServiceCollection AddRemoteApi<TApi>(this IServiceCollection services, BackendApiConfig? config = null) where TApi : class
{
services.Configure(config?.ConfigureBackendOptions ?? (_ => { }));
services.AddApiClient<TApi>(config?.ConfigureHttpClientBuilder);
return services;
}
/// <summary>
/// Adds the specified <see cref="INotificationHandler"/>.
/// </summary>
public static IServiceCollection AddNotificationHandler<T>(this IServiceCollection services) where T: class, INotificationHandler
{
return services.AddScoped<INotificationHandler, T>();
}
/// <summary>
/// Adds the specified <see cref="IUIHintHandler"/>.
/// </summary>
public static IServiceCollection AddUIHintHandler<T>(this IServiceCollection services) where T : class, IUIHintHandler
{
return services.AddScoped<IUIHintHandler, T>();
}
/// <summary>
/// Adds the specified <see cref="IUIFieldExtensionHandler"/>.
/// </summary>
public static IServiceCollection AddUIFieldEnhancerHandler<T>(this IServiceCollection services) where T : class, IUIFieldExtensionHandler
{
return services.AddScoped<IUIFieldExtensionHandler, T>();
}
}

Some files were not shown because too many files have changed in this diff Show More