Initial commit: Tasks.Module

This commit is contained in:
Saidamin Kattan
2026-08-07 02:17:32 +03:00
commit 46aa82d0c7
97 changed files with 7443 additions and 0 deletions
@@ -0,0 +1,77 @@
@using Tasks.Module.Models
@using Tasks.Module.Services
<MudDialog>
<DialogContent>
<MudTextField @bind-Value="_name" Label="Category Name" Required="true" Class="mb-3" />
<MudTextField @bind-Value="_description" Label="Description" Lines="2" Class="mb-3" />
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" OnClick="Submit" Disabled="string.IsNullOrWhiteSpace(_name)">
@(IsUpdate ? "Update" : "Create")
</MudButton>
</DialogActions>
</MudDialog>
@code {
[CascadingParameter]
private IMudDialogInstance? MudDialog { get; set; }
[Parameter]
public object Category { get; set; } = new();
[Parameter]
public bool IsUpdate { get; set; }
[Parameter]
public bool IsChild { get; set; }
private string _name = string.Empty;
private string? _description;
private string? _id;
protected override void OnInitialized()
{
if (IsUpdate)
{
if (Category is UpdateCategoryDto updateDto)
{
_id = updateDto.Id;
_name = updateDto.Name;
_description = updateDto.Description;
}
}
else
{
if (Category is CreateCategoryDto createDto)
{
_name = createDto.Name;
_description = createDto.Description;
}
}
}
private void Submit()
{
if (IsUpdate)
{
if (Category is UpdateCategoryDto updateDto)
{
updateDto.Name = _name;
updateDto.Description = _description;
}
}
else
{
if (Category is CreateCategoryDto createDto)
{
createDto.Name = _name;
createDto.Description = _description;
}
}
MudDialog?.Close(DialogResult.Ok(true));
}
private void Cancel() => MudDialog?.Cancel();
}
+71
View File
@@ -0,0 +1,71 @@
@using Tasks.Module.Models
<MudDialog>
<DialogContent>
<MudTextField @bind-Value="_name" Label="Tag Name" Required="true" Class="mb-3" />
<MudTextField @bind-Value="_color" Label="Color (optional)" Placeholder="#FF5733" Class="mb-3" />
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" OnClick="Submit" Disabled="string.IsNullOrWhiteSpace(_name)">
@(IsUpdate ? "Update" : "Create")
</MudButton>
</DialogActions>
</MudDialog>
@code {
[CascadingParameter]
private IMudDialogInstance? MudDialog { get; set; }
[Parameter]
public object Tag { get; set; } = new();
[Parameter]
public bool IsUpdate { get; set; }
private string _name = string.Empty;
private string? _color;
protected override void OnInitialized()
{
if (IsUpdate)
{
if (Tag is UpdateTagDto updateDto)
{
_name = updateDto.Name;
_color = updateDto.Color;
}
}
else
{
if (Tag is CreateTagDto createDto)
{
_name = createDto.Name;
_color = createDto.Color;
}
}
}
private void Submit()
{
if (IsUpdate)
{
if (Tag is UpdateTagDto updateDto)
{
updateDto.Name = _name;
updateDto.Color = _color;
}
}
else
{
if (Tag is CreateTagDto createDto)
{
createDto.Name = _name;
createDto.Color = _color;
}
}
MudDialog?.Close(DialogResult.Ok(true));
}
private void Cancel() => MudDialog?.Cancel();
}
+167
View File
@@ -0,0 +1,167 @@
@using Tasks.Module.Models
@using Tasks.Module.Services
@inject ICategoryService CategoryService
@inject ITagService TagService
<MudDialog>
<DialogContent>
@if (IsChild)
{
<MudAlert Severity="Severity.Info" Class="mb-3">
Adding sub-task to: <strong>@ParentTitle</strong>
</MudAlert>
}
<MudTextField @bind-Value="Task.Title" Label="Title" Required="true" Class="mb-3" />
<MudTextField @bind-Value="Task.Description" Label="Description" Lines="3" Class="mb-3" />
<MudSelect T="string" @bind-Value="_categoryId" Label="Category" Clearable="true" Class="mb-3">
@foreach (var cat in _flatCategories)
{
<MudSelectItem T="string" Value="cat.Id">
@if (cat.Depth > 0)
{
@for (int i = 0; i < cat.Depth; i++)
{
<text>&nbsp;&nbsp;</text>
}
<text>└ </text>
}
@cat.Name
</MudSelectItem>
}
</MudSelect>
<MudSelect T="int" @bind-Value="_priority" Label="Priority" Class="mb-3" Style="max-width: 200px;">
<MudSelectItem T="int" Value="0">Low</MudSelectItem>
<MudSelectItem T="int" Value="1">Medium</MudSelectItem>
<MudSelectItem T="int" Value="2">High</MudSelectItem>
</MudSelect>
<MudSelect T="string" @bind-Value="_selectedTagId" Label="Add Tag" Clearable="true" Class="mb-3">
@foreach (var tag in _availableTags)
{
<MudSelectItem T="string" Value="tag.Id">@tag.Name</MudSelectItem>
}
</MudSelect>
<MudButton Variant="Variant.Outlined" Color="Color.Primary" Size="Size.Small" OnClick="AddSelectedTag" Disabled="string.IsNullOrEmpty(_selectedTagId)">Add</MudButton>
@if (_selectedTagIds.Count > 0)
{
<div class="mb-3 d-flex flex-wrap gap-1">
@foreach (var tagId in _selectedTagIds)
{
var tag = _allTags.FirstOrDefault(t => t.Id == tagId);
if (tag != null)
{
<MudChip T="string" Color="Color.Primary" Size="Size.Small" OnClick="() => RemoveTag(tagId)">@tag.Name</MudChip>
}
}
</div>
}
<MudDatePicker @bind-Date="Task.DueDate" Label="Due Date" Class="mb-3" />
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" OnClick="Submit">Save</MudButton>
</DialogActions>
</MudDialog>
@code {
[Parameter]
public CreateTodoItemDto Task { get; set; } = new();
[Parameter]
public bool IsUpdate { get; set; }
[Parameter]
public bool IsChild { get; set; }
[Parameter]
public string? ParentTitle { get; set; }
[CascadingParameter]
private IMudDialogInstance? MudDialog { get; set; }
private List<FlatCategory> _flatCategories = new();
private List<TagDto> _allTags = new();
private List<TagDto> _availableTags = new();
private int _priority = 0;
private string? _selectedTagId;
private List<string> _selectedTagIds = new();
private string? _categoryId = null;
protected override async Task OnParametersSetAsync()
{
await LoadData();
}
private async Task LoadData()
{
var hierarchy = await CategoryService.GetHierarchyAsync();
_flatCategories = FlattenCategories(hierarchy);
_allTags = await TagService.GetAllAsync();
_availableTags = _allTags.ToList();
_priority = Task.Priority;
if (!string.IsNullOrEmpty(Task.CategoryId) && _flatCategories.Any(c => c.Id == Task.CategoryId))
{
_categoryId = Task.CategoryId;
}
else
{
_categoryId = null;
}
_selectedTagIds = Task.TagIds?.ToList() ?? new List<string>();
_availableTags = _allTags.Where(t => !_selectedTagIds.Contains(t.Id)).ToList();
}
private List<FlatCategory> FlattenCategories(List<CategoryDto> categories, int depth = 0)
{
var result = new List<FlatCategory>();
foreach (var cat in categories)
{
result.Add(new FlatCategory { Id = cat.Id, Name = cat.Name, Depth = depth });
if (cat.Children.Count > 0)
{
result.AddRange(FlattenCategories(cat.Children, depth + 1));
}
}
return result;
}
private void AddSelectedTag()
{
if (!string.IsNullOrEmpty(_selectedTagId) && !_selectedTagIds.Contains(_selectedTagId))
{
_selectedTagIds.Add(_selectedTagId);
_availableTags = _allTags.Where(t => !_selectedTagIds.Contains(t.Id)).ToList();
_selectedTagId = null;
StateHasChanged();
}
}
private void RemoveTag(string tagId)
{
_selectedTagIds.Remove(tagId);
_availableTags = _allTags.Where(t => !_selectedTagIds.Contains(t.Id)).ToList();
StateHasChanged();
}
private void Submit()
{
Task.Priority = _priority;
Task.CategoryId = _categoryId;
Task.TagIds = _selectedTagIds;
MudDialog?.Close(DialogResult.Ok(true));
}
private void Cancel()
{
MudDialog?.Cancel();
}
}
+102
View File
@@ -0,0 +1,102 @@
@using MudBlazor
@using Tasks.Module.Models
<MudDialog>
<DialogContent>
<MudStack Spacing="3">
<MudTextField T="string"
@bind-Value:get="_name"
@bind-Value:set="(v) => _name = v"
Label="View Name"
Required="true"
Placeholder="e.g., High Priority Tasks" />
<MudText Typo="Typo.subtitle2" Class="mt-4">Filter Criteria (optional)</MudText>
<MudText Typo="Typo.caption" Color="Color.Default">Leave empty to show all tasks</MudText>
<MudSelect T="int?" Label="Priority" @bind-Value:get="_priority" @bind-Value:set="(v) => _priority = v" Clearable="true">
<MudSelectItem T="int?" Value="null">Any Priority</MudSelectItem>
<MudSelectItem T="int?" Value="0">
<div class="flex items-center gap-2">
<span class="w-2 h-2 bg-green-500 rounded-full"></span> Low
</div>
</MudSelectItem>
<MudSelectItem T="int?" Value="1">
<div class="flex items-center gap-2">
<span class="w-2 h-2 bg-yellow-500 rounded-full"></span> Medium
</div>
</MudSelectItem>
<MudSelectItem T="int?" Value="2">
<div class="flex items-center gap-2">
<span class="w-2 h-2 bg-red-500 rounded-full"></span> High
</div>
</MudSelectItem>
</MudSelect>
<MudSelect T="bool?" Label="Status" @bind-Value:get="_isCompleted" @bind-Value:set="(v) => _isCompleted = v" Clearable="true">
<MudSelectItem T="bool?" Value="null">Any Status</MudSelectItem>
<MudSelectItem T="bool?" Value="false">
<div class="flex items-center gap-2">
<MudIcon Icon="@Icons.Material.Filled.Pending" Size="Size.Small" Color="Color.Warning" />
Pending
</div>
</MudSelectItem>
<MudSelectItem T="bool?" Value="true">
<div class="flex items-center gap-2">
<MudIcon Icon="@Icons.Material.Filled.CheckCircle" Size="Size.Small" Color="Color.Success" />
Completed
</div>
</MudSelectItem>
</MudSelect>
<MudTextField T="string"
@bind-Value:get="_containsText"
@bind-Value:set="(v) => _containsText = v"
Label="Contains Text"
Placeholder="Filter by title or description..." />
<MudStack Row="true" Spacing="2">
<MudDatePicker Label="Due Date From"
@bind-Date:get="_dueDateFrom"
@bind-Date:set="(v) => _dueDateFrom = v"
Clearable="true" />
<MudDatePicker Label="Due Date To"
@bind-Date:get="_dueDateTo"
@bind-Date:set="(v) => _dueDateTo = v"
Clearable="true" />
</MudStack>
</MudStack>
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" OnClick="Submit" Disabled="string.IsNullOrWhiteSpace(_name)">Create View</MudButton>
</DialogActions>
</MudDialog>
@code {
[CascadingParameter]
private IMudDialogInstance? MudDialog { get; set; }
private string _name = string.Empty;
private int? _priority;
private bool? _isCompleted;
private string? _containsText;
private DateTime? _dueDateFrom;
private DateTime? _dueDateTo;
private void Submit()
{
var dto = new CreateTaskViewDto
{
Name = _name,
Priority = _priority,
IsCompleted = _isCompleted,
ContainsText = string.IsNullOrWhiteSpace(_containsText) ? null : _containsText,
DueDateFrom = _dueDateFrom,
DueDateTo = _dueDateTo
};
MudDialog?.Close(DialogResult.Ok(dto));
}
private void Cancel() => MudDialog?.Cancel();
}
+38
View File
@@ -0,0 +1,38 @@
<MudDialog>
<DialogContent>
<MudTextField @bind-Value="_value" Label="@Label" Required="true" Class="mb-3" />
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" OnClick="Submit">Save</MudButton>
</DialogActions>
</MudDialog>
@code {
private string _value = string.Empty;
[Parameter] public string Title { get; set; } = string.Empty;
[Parameter] public string Label { get; set; } = string.Empty;
[Parameter] public string? Value { get; set; }
[CascadingParameter]
private IMudDialogInstance? MudDialog { get; set; }
protected override void OnInitialized()
{
_value = Value ?? string.Empty;
}
private void Submit()
{
if (MudDialog != null && !string.IsNullOrWhiteSpace(_value))
{
MudDialog.Close(DialogResult.Ok(_value));
}
}
private void Cancel()
{
MudDialog?.Cancel();
}
}
+31
View File
@@ -0,0 +1,31 @@
@inherits LayoutComponentBase
<MudThemeProvider />
<MudPopoverProvider />
<MudDialogProvider />
<MudSnackbarProvider />
<MudLayout>
<MudAppBar Elevation="1">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@(_ => DrawerToggle())" />
<MudText Typo="Typo.h5" Class="ml-3">Tasks</MudText>
<MudSpacer />
</MudAppBar>
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2" Width="320px" MiniWidth="280px">
<FolderSidebar />
</MudDrawer>
<MudMainContent>
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="my-4">
@Body
</MudContainer>
</MudMainContent>
</MudLayout>
@code {
private bool _drawerOpen = true;
private void DrawerToggle()
{
_drawerOpen = !_drawerOpen;
}
}
+239
View File
@@ -0,0 +1,239 @@
@page "/tasks/categories"
@using Tasks.Module.Models
@using Tasks.Module.Services
@using Tasks.Module.Components.Dialogs
@inject ICategoryService CategoryService
@inject IDialogService Dialog
@inject ISnackbar Snackbar
<div class="min-h-screen bg-gradient-to-br from-slate-50 to-slate-100">
<div class="max-w-4xl mx-auto py-8 px-4">
@* Header *@
<div class="mb-8">
<h1 class="text-3xl font-bold text-slate-800">Categories</h1>
<p class="text-slate-500 mt-1">Manage your task categories</p>
</div>
@* Toolbar *@
<div class="bg-white rounded-2xl shadow-md p-4 mb-4">
<div class="d-flex align-center gap-3">
<MudTextField T="string"
@bind-Value:get="searchText"
@bind-Value:set="OnSearchChanged"
Placeholder="Search categories..."
DisableUnderLine="true"
Adornment="Adornment.Start"
AdornmentIcon="@Icons.Material.Filled.Search"
Style="max-width: 300px;" />
<MudSpacer />
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Add"
OnClick="AddRootCategory">
Add Category
</MudButton>
</div>
</div>
@* Categories Tree *@
@if (isLoading)
{
<div class="flex justify-center py-12">
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
</div>
}
else if (filteredCategories.Count == 0 && string.IsNullOrEmpty(searchText))
{
<div class="bg-white rounded-2xl shadow-lg p-12 text-center">
<MudIcon Icon="@Icons.Material.Filled.FolderOpen" Size="Size.Large" Color="Color.Default" Class="mb-4" />
<h3 class="text-lg font-semibold text-slate-700">No categories yet</h3>
<p class="text-slate-500 mt-2">Click "Add Category" to create your first category</p>
</div>
}
else
{
<div class="bg-white rounded-2xl shadow-lg">
@foreach (var category in filteredCategories)
{
<CategoryTreeItem Category="category"
OnAddChild="AddChildCategory"
OnDelete="DeleteCategory"
OnUpdate="UpdateCategory"
SearchText="searchText" />
}
</div>
}
</div>
</div>
@code {
private List<CategoryDto> categories = new();
private List<CategoryDto> filteredCategories = new();
private bool isLoading = true;
private string searchText = string.Empty;
protected override async Task OnInitializedAsync()
{
await LoadCategories();
}
private async Task LoadCategories()
{
isLoading = true;
try
{
categories = await CategoryService.GetHierarchyAsync();
ApplyFilter();
}
finally
{
isLoading = false;
}
}
private void ApplyFilter()
{
if (string.IsNullOrWhiteSpace(searchText))
{
filteredCategories = categories;
}
else
{
filteredCategories = FilterTree(categories, searchText.ToLower());
}
}
private List<CategoryDto> FilterTree(List<CategoryDto> cats, string search)
{
var result = new List<CategoryDto>();
foreach (var cat in cats)
{
var filteredChildren = FilterTree(cat.Children, search);
if (cat.Name.ToLower().Contains(search) || filteredChildren.Count > 0)
{
var copy = new CategoryDto
{
Id = cat.Id,
Name = cat.Name,
Description = cat.Description,
ParentId = cat.ParentId,
CreatedAt = cat.CreatedAt,
UpdatedAt = cat.UpdatedAt,
Children = filteredChildren
};
result.Add(copy);
}
}
return result;
}
private void OnSearchChanged(string value)
{
searchText = value;
ApplyFilter();
}
private async Task AddRootCategory()
{
await AddCategory(null);
}
private async Task AddCategory(string? parentId)
{
var dto = new CreateCategoryDto { ParentId = parentId };
var parameters = new DialogParameters<CreateCategoryDialog>
{
{ x => x.Category, dto },
{ x => x.IsChild, parentId != null }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateCategoryDialog>("Add Category", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
try
{
await CategoryService.CreateAsync(dto);
await LoadCategories();
Snackbar.Add("Category created", Severity.Success);
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
}
private async Task AddChildCategory(CategoryDto parent)
{
await AddCategory(parent.Id);
}
private async Task DeleteCategory(CategoryDto category)
{
var childCount = category.Children.Count;
var (success, hasChildren, _, _) = await CategoryService.DeleteAsync(category.Id, false);
if (!success && hasChildren)
{
var confirmed = await Dialog.ShowMessageBox(
"Delete Category",
$"\"{category.Name}\" has {childCount} child category(ries). Delete all?",
yesText: "Delete All", cancelText: "Cancel");
if (confirmed == true)
{
var result = await CategoryService.DeleteAsync(category.Id, true);
if (result.success)
{
Snackbar.Add("Category deleted", Severity.Success);
await LoadCategories();
}
}
}
else if (success)
{
Snackbar.Add("Category deleted", Severity.Success);
await LoadCategories();
}
}
private async Task UpdateCategory(CategoryDto category)
{
var dto = new UpdateCategoryDto
{
Id = category.Id,
Name = category.Name,
Description = category.Description,
ParentId = category.ParentId
};
var parameters = new DialogParameters<CreateCategoryDialog>
{
{ x => x.Category, dto },
{ x => x.IsUpdate, true },
{ x => x.IsChild, category.ParentId != null }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateCategoryDialog>("Update Category", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
try
{
await CategoryService.UpdateAsync(dto);
Snackbar.Add("Category updated", Severity.Success);
await LoadCategories();
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
}
}
+113
View File
@@ -0,0 +1,113 @@
@using Tasks.Module.Models
@using Tasks.Module.Services
<MudExpansionPanel @bind-IsExpanded="_expanded" Class="category-item">
<TitleContent>
<div class="d-flex align-center justify-space-between" style="width: 100%;">
<div class="d-flex align-center">
@if (Category.Children.Count > 0)
{
<span class="expand-chevron" style="cursor: pointer; padding: 4px;"
@onclick:stopPropagation="true"
@onclick="@(() => { _expanded = !_expanded; })">
<MudIcon Icon="@(_expanded ? Icons.Material.Filled.KeyboardArrowDown : Icons.Material.Filled.KeyboardArrowRight)"
Size="Size.Small"
Class="mr-1"
Style="width: 20px; display: block;" />
</span>
}
else
{
<div style="width: 32px;"></div>
}
<MudIcon Icon="@Icons.Material.Filled.Folder" Color="Color.Default" Class="mr-2" />
<span class="task-title">@HighlightText(Category.Name)</span>
</div>
<div class="d-flex align-center gap-1">
<MudText Typo="Typo.caption" Color="Color.Secondary" Class="mr-2">
@Category.Children.Count children
</MudText>
<MudIconButton Icon="@Icons.Material.Filled.Add"
Size="Size.Small"
Title="Add sub-category"
OnClick="() => OnAddChild.InvokeAsync(Category)" />
<MudIconButton Icon="@Icons.Material.Filled.Edit"
Size="Size.Small"
Title="Edit"
OnClick="() => OnUpdate.InvokeAsync(Category)" />
<MudIconButton Icon="@Icons.Material.Filled.Delete"
Size="Size.Small"
Color="Color.Error"
Title="Delete"
OnClick="() => OnDelete.InvokeAsync(Category)" />
</div>
</div>
</TitleContent>
<ChildContent>
<div class="pl-4">
@foreach (var child in Category.Children)
{
<CategoryTreeItem Category="child"
OnAddChild="OnAddChild"
OnDelete="OnDelete"
OnUpdate="OnUpdate"
SearchText="SearchText" />
}
</div>
</ChildContent>
</MudExpansionPanel>
@code {
[Parameter]
public CategoryDto Category { get; set; } = new();
[Parameter]
public EventCallback<CategoryDto> OnAddChild { get; set; }
[Parameter]
public EventCallback<CategoryDto> OnDelete { get; set; }
[Parameter]
public EventCallback<CategoryDto> OnUpdate { get; set; }
[Parameter]
public string SearchText { get; set; } = string.Empty;
private bool _expanded = false;
private RenderFragment HighlightText(string text)
{
if (string.IsNullOrEmpty(SearchText))
{
return @<span>@text</span>;
}
var parts = text.Split(new[] { SearchText }, StringSplitOptions.None);
return@<text>
@{
for (int i = 0; i < parts.Length; i++)
{
@parts[i]
if (i < parts.Length - 1)
{
<mark class="search-highlight">@SearchText</mark>
}
}
}
</text>;
}
}
<style>
.category-item {
border-bottom: 1px solid var(--mud-palette-lines-default);
}
.category-item:last-child {
border-bottom: none;
}
.search-highlight {
background-color: yellow;
padding: 0 2px;
}
</style>
+208
View File
@@ -0,0 +1,208 @@
@page "/tasks/tags"
@using Tasks.Module.Models
@using Tasks.Module.Services
@using Tasks.Module.Components.Dialogs
@inject ITagService TagService
@inject IDialogService Dialog
@inject ISnackbar Snackbar
<div class="min-h-screen bg-gradient-to-br from-slate-50 to-slate-100">
<div class="max-w-4xl mx-auto py-8 px-4">
@* Header *@
<div class="mb-8">
<h1 class="text-3xl font-bold text-slate-800">Tags</h1>
<p class="text-slate-500 mt-1">Manage your task tags</p>
</div>
@* Toolbar *@
<div class="bg-white rounded-2xl shadow-md p-4 mb-4">
<div class="d-flex align-center gap-3">
<MudTextField T="string"
@bind-Value:get="searchText"
@bind-Value:set="OnSearchChanged"
Placeholder="Search tags..."
DisableUnderLine="true"
Adornment="Adornment.Start"
AdornmentIcon="@Icons.Material.Filled.Search"
Style="max-width: 300px;" />
<MudSpacer />
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Add"
OnClick="AddTag">
Add Tag
</MudButton>
</div>
</div>
@* Tags Grid *@
@if (isLoading)
{
<div class="flex justify-center py-12">
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
</div>
}
else if (filteredTags.Count == 0 && string.IsNullOrEmpty(searchText))
{
<div class="bg-white rounded-2xl shadow-lg p-12 text-center">
<MudIcon Icon="@Icons.Material.Filled.LocalOffer" Size="Size.Large" Color="Color.Default" Class="mb-4" />
<h3 class="text-lg font-semibold text-slate-700">No tags yet</h3>
<p class="text-slate-500 mt-2">Click "Add Tag" to create your first tag</p>
</div>
}
else if (filteredTags.Count == 0)
{
<div class="bg-white rounded-2xl shadow-lg p-12 text-center">
<MudIcon Icon="@Icons.Material.Filled.SearchOff" Size="Size.Large" Color="Color.Default" Class="mb-4" />
<h3 class="text-lg font-semibold text-slate-700">No tags found</h3>
<p class="text-slate-500 mt-2">Try a different search term</p>
</div>
}
else
{
<div class="bg-white rounded-2xl shadow-lg p-6">
<div class="d-flex flex-wrap gap-3">
@foreach (var tag in filteredTags)
{
<MudChip T="string"
Color="Color.Secondary"
Size="Size.Medium"
OnClick="() => EditTag(tag)"
OnClose="() => DeleteTag(tag)">
@(string.IsNullOrEmpty(tag.Color) ? "" : "● ")
@tag.Name
</MudChip>
}
</div>
</div>
}
</div>
</div>
@code {
private List<TagDto> tags = new();
private List<TagDto> filteredTags = new();
private bool isLoading = true;
private string searchText = string.Empty;
protected override async Task OnInitializedAsync()
{
await LoadTags();
}
private async Task LoadTags()
{
isLoading = true;
try
{
tags = await TagService.GetAllAsync();
ApplyFilter();
}
finally
{
isLoading = false;
}
}
private void ApplyFilter()
{
if (string.IsNullOrWhiteSpace(searchText))
{
filteredTags = tags;
}
else
{
filteredTags = tags.Where(t => t.Name.Contains(searchText, StringComparison.OrdinalIgnoreCase)).ToList();
}
}
private void OnSearchChanged(string value)
{
searchText = value;
ApplyFilter();
}
private async Task AddTag()
{
var dto = new CreateTagDto();
var parameters = new DialogParameters<CreateTagDialog>
{
{ x => x.Tag, dto }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTagDialog>("Add Tag", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
try
{
await TagService.CreateAsync(dto);
Snackbar.Add("Tag created", Severity.Success);
await LoadTags();
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
}
private async Task EditTag(TagDto tag)
{
var dto = new UpdateTagDto
{
Id = tag.Id,
Name = tag.Name,
Color = tag.Color
};
var parameters = new DialogParameters<CreateTagDialog>
{
{ x => x.Tag, dto },
{ x => x.IsUpdate, true }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTagDialog>("Edit Tag", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
try
{
await TagService.UpdateAsync(dto);
Snackbar.Add("Tag updated", Severity.Success);
await LoadTags();
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
}
private async Task DeleteTag(TagDto tag)
{
var confirmed = await Dialog.ShowMessageBox(
"Delete Tag",
$"Delete \"{tag.Name}\"? It will be removed from all tasks.",
yesText: "Delete", cancelText: "Cancel");
if (confirmed == true)
{
try
{
await TagService.DeleteAsync(tag.Id);
Snackbar.Add("Tag deleted", Severity.Success);
await LoadTags();
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
}
}
+263
View File
@@ -0,0 +1,263 @@
@page "/tasks/taskssheet/{tasksSheetId}"
@using Tasks.Module.Models
@using Tasks.Module.Services
@inject IFolderService FolderService
@inject ITodoService TodoService
@inject IDialogService Dialog
<div class="min-h-screen bg-gradient-to-br from-slate-50 to-slate-100">
<div class="max-w-4xl mx-auto py-8 px-4">
@* Header *@
<div class="mb-8">
<MudButton StartIcon="@Icons.Material.Filled.ArrowBack" Href="/tasks" Color="Color.Default" Class="mb-4">
Back to Tasks
</MudButton>
<h1 class="text-3xl font-bold text-slate-800">@_tasksSheetName</h1>
<p class="text-slate-500 mt-1">Manage tasks in this sheet</p>
</div>
@* Quick Add Input *@
<div class="bg-white rounded-2xl shadow-lg p-4 mb-6">
<div class="flex items-center gap-3">
<div class="flex-shrink-0 w-10 h-10 bg-indigo-100 rounded-full flex items-center justify-center">
<MudIcon Icon="@Icons.Material.Filled.Add" Color="Color.Primary" Size="Size.Small" />
</div>
<MudTextField T="string"
@bind-Value:get="quickAddTitle"
@bind-Value:set="(v) => { quickAddTitle = v; StateHasChanged(); }"
Placeholder="Add a task... (press Enter)"
DisableUnderLine="true"
Class="flex-grow"
Adornment="Adornment.None"
OnKeyDown="HandleQuickAdd" />
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
OnClick="QuickAddTask"
Class="rounded-xl">
Add
</MudButton>
<MudButton Variant="Variant.Outlined"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Add"
OnClick="OpenCreateDialog"
Class="rounded-xl">
Add Task
</MudButton>
</div>
</div>
@* Tasks List *@
@if (_loading)
{
<div class="flex justify-center py-12">
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
</div>
}
else if (!_tasksSheetFound)
{
<div class="bg-white rounded-2xl shadow-lg p-12 text-center">
<h3 class="text-lg font-semibold text-slate-700">Tasks sheet not found</h3>
<MudButton Href="/tasks" Color="Color.Primary" Class="mt-4">Go to Tasks</MudButton>
</div>
}
else
{
<div class="space-y-3">
@foreach (var task in _tasks)
{
<TaskCard Task="task"
OnToggle="ToggleTask"
OnDelete="DeleteTask"
OnUpdate="OpenUpdateDialog"
OnAddChild="OpenAddChildDialog"
CollapsedTasks="collapsedTasks"
ToggleCollapse="ToggleCollapse" />
}
</div>
}
</div>
</div>
@code {
[Parameter] public string tasksSheetId { get; set; } = string.Empty;
private string _tasksSheetName = string.Empty;
private bool _loading = true;
private bool _tasksSheetFound = false;
private CreateTodoItemDto editTask = new();
private string currentTaskId = string.Empty;
private string quickAddTitle = string.Empty;
private HashSet<string> collapsedTasks = new();
private List<TodoItemDto> _tasks = new();
private string _lastTasksSheetId = string.Empty;
protected override async Task OnInitializedAsync()
{
await LoadTasksSheet();
}
protected override async Task OnParametersSetAsync()
{
if (tasksSheetId != _lastTasksSheetId)
{
_lastTasksSheetId = tasksSheetId;
collapsedTasks.Clear();
await LoadTasksSheet();
}
}
private async Task LoadTasksSheet()
{
_loading = true;
try
{
var tasksSheet = await FolderService.GetTasksSheetByIdAsync(tasksSheetId);
if (tasksSheet != null)
{
_tasksSheetName = tasksSheet.Title;
_tasks = tasksSheet.Tasks;
_tasksSheetFound = true;
}
else
{
_tasksSheetFound = false;
}
}
finally
{
_loading = false;
}
}
private async Task HandleQuickAdd(KeyboardEventArgs e)
{
if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(quickAddTitle))
{
await QuickAddTask();
}
}
private async Task QuickAddTask()
{
if (string.IsNullOrWhiteSpace(quickAddTitle))
return;
var newTask = new CreateTodoItemDto
{
Title = quickAddTitle.Trim(),
Priority = 0,
ParentId = null
};
await FolderService.AddTaskToTasksSheetAsync(tasksSheetId, newTask);
quickAddTitle = string.Empty;
await LoadTasksSheet();
}
private void ToggleCollapse(string taskId)
{
if (collapsedTasks.Contains(taskId))
collapsedTasks.Remove(taskId);
else
collapsedTasks.Add(taskId);
}
private async Task ToggleTask(string id)
{
await FolderService.ToggleTaskInTasksSheetAsync(id);
await LoadTasksSheet();
}
private async Task DeleteTask(string id)
{
await FolderService.DeleteTaskInTasksSheetAsync(id);
await LoadTasksSheet();
}
private async Task OpenCreateDialog()
{
editTask = new CreateTodoItemDto();
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, false }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Create Task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
await FolderService.AddTaskToTasksSheetAsync(tasksSheetId, editTask);
await LoadTasksSheet();
}
}
private async Task OpenAddChildDialog(TodoItemDto parentTask)
{
editTask = new CreateTodoItemDto { ParentId = parentTask.Id };
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, false },
{ x => x.IsChild, true },
{ x => x.ParentTitle, parentTask.Title }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Add Sub-task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
await LoadTasksSheet();
}
}
private async Task OpenUpdateDialog(TodoItemDto task)
{
currentTaskId = task.Id;
editTask = new CreateTodoItemDto
{
Title = task.Title,
Description = task.Description,
Priority = task.Priority,
DueDate = task.DueDate,
ParentId = task.ParentId,
CategoryId = task.CategoryId,
TagIds = task.TagIds.ToList(),
FileId = task.FileId
};
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, true }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Update Task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
await TodoService.UpdateTodoAsync(new UpdateTodoItemDto
{
Id = currentTaskId,
Title = editTask.Title,
Description = editTask.Description,
Priority = editTask.Priority,
DueDate = editTask.DueDate,
IsCompleted = task.IsCompleted,
ParentId = editTask.ParentId,
CategoryId = editTask.CategoryId,
TagIds = editTask.TagIds,
FileId = editTask.FileId
});
await LoadTasksSheet();
}
}
}
+389
View File
@@ -0,0 +1,389 @@
@page "/tasks"
@using Tasks.Module.Models
@using Tasks.Module.Services
@using Tasks.Module.Components.Dialogs
@inject ITodoService TodoService
@inject IDialogService Dialog
@inject IViewService ViewService
<div class="min-h-screen bg-gradient-to-br from-slate-50 to-slate-100">
<div class="max-w-4xl mx-auto py-8 px-4">
@* Header *@
<div class="mb-8">
<h1 class="text-3xl font-bold text-slate-800">My Tasks</h1>
<p class="text-slate-500 mt-1">Manage your tasks and sub-tasks</p>
</div>
@* Search and Filters *@
<div class="bg-white rounded-2xl shadow-md p-4 mb-4">
<div class="flex flex-wrap items-center gap-3">
<MudTextField T="string"
@bind-Value:get="searchText"
@bind-Value:set="OnSearchChanged"
Placeholder="Search tasks..."
DisableUnderLine="true"
Adornment="Adornment.Start"
AdornmentIcon="@Icons.Material.Filled.Search"
Class="flex-grow"
Style="max-width: 400px;" />
<MudButton Variant="Variant.Text"
Color="Color.Default"
StartIcon="@(_showFilters ? Icons.Material.Filled.ExpandLess : Icons.Material.Filled.ExpandMore)"
OnClick="ToggleFilters"
Class="rounded">
@(_showFilters ? "Hide Filters" : "Show Filters")
</MudButton>
<MudButton Variant="Variant.Outlined"
Color="Color.Default"
StartIcon="@Icons.Material.Filled.Add"
OnClick="CreateView"
Class="rounded">
Add View
</MudButton>
</div>
@if (_showFilters)
{
<div class="flex flex-wrap items-center gap-3 mt-3">
<MudSelect T="int?" Label="Priority" Value="selectedPriority" ValueChanged="OnPriorityChanged" Clearable="true" Class="min-w-[140px]">
<MudSelectItem T="int?" Value="null">All</MudSelectItem>
<MudSelectItem T="int?" Value="0">
<div class="flex items-center gap-2">
<span class="w-2 h-2 bg-green-500 rounded-full"></span> Low
</div>
</MudSelectItem>
<MudSelectItem T="int?" Value="1">
<div class="flex items-center gap-2">
<span class="w-2 h-2 bg-yellow-500 rounded-full"></span> Medium
</div>
</MudSelectItem>
<MudSelectItem T="int?" Value="2">
<div class="flex items-center gap-2">
<span class="w-2 h-2 bg-red-500 rounded-full"></span> High
</div>
</MudSelectItem>
</MudSelect>
<MudSelect T="bool?" Label="Status" Value="selectedCompleted" ValueChanged="OnCompletedChanged" Clearable="true" Class="min-w-[140px]">
<MudSelectItem T="bool?" Value="null">All</MudSelectItem>
<MudSelectItem T="bool?" Value="false">
<div class="flex items-center gap-2">
<MudIcon Icon="@Icons.Material.Filled.Pending" Size="Size.Small" Color="Color.Warning" />
Pending
</div>
</MudSelectItem>
<MudSelectItem T="bool?" Value="true">
<div class="flex items-center gap-2">
<MudIcon Icon="@Icons.Material.Filled.CheckCircle" Size="Size.Small" Color="Color.Success" />
Completed
</div>
</MudSelectItem>
</MudSelect>
</div>
}
</div>
@* Quick Add Input *@
<div class="bg-white rounded-2xl shadow-lg p-4 mb-6">
<div class="flex items-center gap-3">
<div class="flex-shrink-0 w-10 h-10 bg-indigo-100 rounded-full flex items-center justify-center">
<MudIcon Icon="@Icons.Material.Filled.Add" Color="Color.Primary" Size="Size.Small" />
</div>
<MudTextField T="string"
@bind-Value:get="quickAddTitle"
@bind-Value:set="(v) => { quickAddTitle = v; StateHasChanged(); }"
Placeholder="Add a task quickly... (press Enter)"
DisableUnderLine="true"
Class="flex-grow"
Adornment="Adornment.None"
OnKeyDown="HandleQuickAdd" />
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
OnClick="QuickAddTask"
Class="rounded-xl">
Add
</MudButton>
<MudButton Variant="Variant.Outlined"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Add"
OnClick="OpenCreateDialog"
Class="rounded-xl">
Add Task
</MudButton>
</div>
</div>
@* Stats *@
@if (!isLoading && tasks.Any())
{
<div class="flex items-center gap-4 mb-4 text-sm">
<span class="text-slate-500">
@tasks.Count task@(tasks.Count != 1 ? "s" : "")
</span>
@{
var completed = tasks.Count(t => t.IsCompleted);
var pending = tasks.Count - completed;
}
@if (pending > 0)
{
<span class="px-2 py-1 bg-yellow-100 text-yellow-700 rounded-full text-xs">@pending pending</span>
}
@if (completed > 0)
{
<span class="px-2 py-1 bg-green-100 text-green-700 rounded-full text-xs">@completed completed</span>
}
</div>
}
@* Tasks List *@
@if (isLoading)
{
<div class="flex justify-center py-12">
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
</div>
}
else if (tasks.Count == 0)
{
<div class="bg-white rounded-2xl shadow-lg p-12 text-center border border-slate-100">
<div class="w-20 h-20 bg-slate-100 rounded-full flex items-center justify-center mx-auto mb-4">
<MudIcon Icon="@Icons.Material.Filled.Assignment" Size="Size.Large" Color="Color.Default" />
</div>
<h3 class="text-lg font-semibold text-slate-700">No tasks yet</h3>
<p class="text-slate-500 mt-2">Type a task above and press Enter to get started</p>
</div>
}
else
{
<div class="space-y-3">
@foreach (var task in tasks)
{
<TaskCard Task="task"
OnToggle="ToggleTask"
OnDelete="DeleteTask"
OnUpdate="OpenUpdateDialog"
OnAddChild="OpenAddChildDialog"
CollapsedTasks="collapsedTasks"
ToggleCollapse="ToggleCollapse" />
}
</div>
}
</div>
</div>
@code {
private List<TodoItemDto> tasks = new();
private List<TodoItemDto> allTasks = new();
private bool isLoading = true;
private int? selectedPriority;
private bool? selectedCompleted;
private CreateTodoItemDto editTask = new();
private string currentTaskId = string.Empty;
private string quickAddTitle = string.Empty;
private HashSet<string> collapsedTasks = new();
private string searchText = string.Empty;
private bool _showFilters = false;
private void ToggleFilters()
{
_showFilters = !_showFilters;
}
protected override async Task OnInitializedAsync()
{
await LoadTasks();
}
private async Task LoadTasks()
{
isLoading = true;
try
{
var filter = new TodoFilterDto
{
Priority = selectedPriority,
IsCompleted = selectedCompleted
};
allTasks = await TodoService.GetAllTodosAsync(filter);
ApplyFilters();
}
finally
{
isLoading = false;
}
}
private void ApplyFilters()
{
var filtered = allTasks.AsEnumerable();
if (!string.IsNullOrWhiteSpace(searchText))
{
filtered = filtered.Where(t =>
t.Title.Contains(searchText, StringComparison.OrdinalIgnoreCase) ||
(t.Description?.Contains(searchText, StringComparison.OrdinalIgnoreCase) ?? false));
}
tasks = filtered.ToList();
}
private void OnSearchChanged(string value)
{
searchText = value;
ApplyFilters();
}
private async Task HandleQuickAdd(KeyboardEventArgs e)
{
if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(quickAddTitle))
{
await QuickAddTask();
}
}
private async Task QuickAddTask()
{
if (string.IsNullOrWhiteSpace(quickAddTitle))
return;
var newTask = new CreateTodoItemDto
{
Title = quickAddTitle.Trim(),
Priority = 0
};
await TodoService.CreateTodoAsync(newTask);
quickAddTitle = string.Empty;
await LoadTasks();
}
private void ToggleCollapse(string taskId)
{
if (collapsedTasks.Contains(taskId))
collapsedTasks.Remove(taskId);
else
collapsedTasks.Add(taskId);
}
private async Task OnPriorityChanged(int? value)
{
selectedPriority = value;
await LoadTasks();
}
private async Task OnCompletedChanged(bool? value)
{
selectedCompleted = value;
await LoadTasks();
}
private async Task ToggleTask(string id)
{
await TodoService.ToggleCompleteAsync(id);
await LoadTasks();
}
private async Task DeleteTask(string id)
{
await TodoService.DeleteTodoAsync(id);
await LoadTasks();
}
private async Task OpenCreateDialog()
{
editTask = new CreateTodoItemDto();
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, false }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Create Task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
await TodoService.CreateTodoAsync(editTask);
await LoadTasks();
}
}
private async Task OpenAddChildDialog(TodoItemDto parentTask)
{
editTask = new CreateTodoItemDto { ParentId = parentTask.Id };
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, false },
{ x => x.IsChild, true },
{ x => x.ParentTitle, parentTask.Title }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Add Sub-task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
await TodoService.CreateTodoAsync(editTask);
await LoadTasks();
}
}
private async Task OpenUpdateDialog(TodoItemDto task)
{
currentTaskId = task.Id;
editTask = new CreateTodoItemDto
{
Title = task.Title,
Description = task.Description,
Priority = task.Priority,
DueDate = task.DueDate,
ParentId = task.ParentId,
CategoryId = task.CategoryId,
TagIds = task.TagIds.ToList(),
FileId = task.FileId
};
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, true }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Update Task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
await TodoService.UpdateTodoAsync(new UpdateTodoItemDto
{
Id = currentTaskId,
Title = editTask.Title,
Description = editTask.Description,
Priority = editTask.Priority,
DueDate = editTask.DueDate,
IsCompleted = task.IsCompleted,
ParentId = editTask.ParentId,
CategoryId = editTask.CategoryId,
TagIds = editTask.TagIds,
FileId = editTask.FileId
});
await LoadTasks();
}
}
private async Task CreateView()
{
var parameters = new DialogParameters<CreateViewDialog>();
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateViewDialog>("Create View", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false } && result.Data is CreateTaskViewDto createDto)
{
await ViewService.CreateViewAsync(createDto);
}
}
}
+399
View File
@@ -0,0 +1,399 @@
@page "/tasks/view/{viewId}"
@using Tasks.Module.Models
@using Tasks.Module.Services
@inject IViewService ViewService
@inject ITodoService TodoService
@inject IDialogService Dialog
@inject NavigationManager Navigation
@inject ISnackbar Snackbar
<div class="min-h-screen bg-gradient-to-br from-slate-50 to-slate-100">
<div class="max-w-4xl mx-auto py-8 px-4">
@* Header *@
<div class="mb-8">
<MudButton StartIcon="@Icons.Material.Filled.ArrowBack" Href="/tasks" Color="Color.Default" Class="mb-4">
Back to Tasks
</MudButton>
<h1 class="text-3xl font-bold text-slate-800">@_viewName</h1>
<p class="text-slate-500 mt-1">Tasks matching this view's criteria</p>
</div>
@* View Criteria Summary *@
@if (_view != null && HasCriteria(_view))
{
<div class="bg-indigo-50 rounded-2xl p-4 mb-6 border border-indigo-100">
<div class="d-flex align-center mb-2">
<MudIcon Icon="@Icons.Material.Filled.FilterList" Color="Color.Primary" Class="mr-2" />
<MudText Typo="Typo.subtitle2" Color="Color.Primary">View Criteria</MudText>
</div>
<div class="d-flex flex-wrap gap-2">
@if (_view.Priority.HasValue)
{
<MudChip Size="Size.Small" T="string" Class="@GetPriorityChipClass(_view.Priority.Value)">
Priority: @GetPriorityLabel(_view.Priority.Value)
</MudChip>
}
@if (_view.IsCompleted.HasValue)
{
<MudChip Size="Size.Small" T="string" Color="@(_view.IsCompleted.Value ? Color.Success : Color.Warning)">
Status: @(_view.IsCompleted.Value ? "Completed" : "Pending")
</MudChip>
}
@if (!string.IsNullOrWhiteSpace(_view.ContainsText))
{
<MudChip Size="Size.Small" T="string" Color="Color.Info">
Contains: "@_view.ContainsText"
</MudChip>
}
@if (_view.DueDateFrom.HasValue)
{
<MudChip Size="Size.Small" T="string" Color="Color.Default">
Due from: @_view.DueDateFrom.Value.ToString("MMM dd")
</MudChip>
}
@if (_view.DueDateTo.HasValue)
{
<MudChip Size="Size.Small" T="string" Color="Color.Default">
Due to: @_view.DueDateTo.Value.ToString("MMM dd")
</MudChip>
}
</div>
</div>
}
@* Quick Add Input - Creates task with view criteria *@
<div class="bg-white rounded-2xl shadow-lg p-4 mb-6">
@if (!string.IsNullOrWhiteSpace(_view?.ContainsText))
{
<MudAlert Severity="Severity.Info" Class="mb-3" Icon="@Icons.Material.Filled.Info">
New tasks will be checked for text: "@_view.ContainsText"
</MudAlert>
}
<div class="flex items-center gap-3">
<div class="flex-shrink-0 w-10 h-10 bg-indigo-100 rounded-full flex items-center justify-center">
<MudIcon Icon="@Icons.Material.Filled.Add" Color="Color.Primary" Size="Size.Small" />
</div>
<MudTextField T="string"
@bind-Value:get="quickAddTitle"
@bind-Value:set="(v) => { quickAddTitle = v; StateHasChanged(); }"
Placeholder="Add task with view criteria... (press Enter)"
DisableUnderLine="true"
Class="flex-grow"
Adornment="Adornment.None"
OnKeyDown="HandleQuickAdd" />
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
OnClick="QuickAddTask"
Class="rounded-xl">
Add
</MudButton>
<MudButton Variant="Variant.Outlined"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Add"
OnClick="OpenCreateDialog"
Class="rounded-xl">
Add Task
</MudButton>
</div>
</div>
@* Stats *@
@if (!isLoading && tasks.Any())
{
<div class="flex items-center gap-4 mb-4 text-sm">
<span class="text-slate-500">
@tasks.Count task@(tasks.Count != 1 ? "s" : "")
</span>
@{
var completed = tasks.Count(t => t.IsCompleted);
var pending = tasks.Count - completed;
}
@if (pending > 0)
{
<span class="px-2 py-1 bg-yellow-100 text-yellow-700 rounded-full text-xs">@pending pending</span>
}
@if (completed > 0)
{
<span class="px-2 py-1 bg-green-100 text-green-700 rounded-full text-xs">@completed completed</span>
}
</div>
}
@* Tasks List *@
@if (isLoading)
{
<div class="flex justify-center py-12">
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
</div>
}
else if (tasks.Count == 0)
{
<div class="bg-white rounded-2xl shadow-lg p-12 text-center">
<div class="w-20 h-20 bg-slate-100 rounded-full flex items-center justify-center mx-auto mb-4">
<MudIcon Icon="@Icons.Material.Filled.SearchOff" Size="Size.Large" Color="Color.Default" />
</div>
<h3 class="text-lg font-semibold text-slate-700">No tasks match this view</h3>
<p class="text-slate-500 mt-2">Add a task using the form above to create one with this view's criteria</p>
</div>
}
else
{
<div class="space-y-3">
@foreach (var task in tasks)
{
<TaskCard Task="task"
OnToggle="ToggleTask"
OnDelete="DeleteTask"
OnUpdate="OpenUpdateDialog"
OnAddChild="OpenAddChildDialog"
CollapsedTasks="collapsedTasks"
ToggleCollapse="ToggleCollapse" />
}
</div>
}
</div>
</div>
@code {
[Parameter] public string viewId { get; set; } = string.Empty;
private TaskViewDto? _view;
private string _viewName = string.Empty;
private List<TodoItemDto> tasks = new();
private bool isLoading = true;
private CreateTodoItemDto editTask = new();
private string currentTaskId = string.Empty;
private string quickAddTitle = string.Empty;
private HashSet<string> collapsedTasks = new();
protected override async Task OnInitializedAsync()
{
await LoadView();
}
private async Task LoadView()
{
isLoading = true;
try
{
_view = await ViewService.GetViewByIdAsync(viewId);
if (_view != null)
{
_viewName = _view.Name;
tasks = await ViewService.GetTasksByViewAsync(viewId);
}
}
finally
{
isLoading = false;
}
}
private bool HasCriteria(TaskViewDto view)
{
return view.Priority.HasValue ||
view.IsCompleted.HasValue ||
!string.IsNullOrWhiteSpace(view.ContainsText) ||
view.DueDateFrom.HasValue ||
view.DueDateTo.HasValue;
}
private string GetPriorityLabel(int priority)
{
return priority switch
{
2 => "High",
1 => "Medium",
_ => "Low"
};
}
private string GetPriorityChipClass(int priority)
{
return priority switch
{
2 => "bg-red-100 text-red-700",
1 => "bg-yellow-100 text-yellow-700",
_ => "bg-green-100 text-green-700"
};
}
private bool TaskMatchesTextCriteria(string title)
{
if (string.IsNullOrWhiteSpace(_view?.ContainsText))
return true;
return title.Contains(_view.ContainsText, StringComparison.OrdinalIgnoreCase);
}
private async Task HandleQuickAdd(KeyboardEventArgs e)
{
if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(quickAddTitle))
{
await QuickAddTask();
}
}
private async Task QuickAddTask()
{
if (string.IsNullOrWhiteSpace(quickAddTitle))
return;
if (!TaskMatchesTextCriteria(quickAddTitle))
{
var confirmed = await Dialog.ShowMessageBox(
"Warning",
$"This task doesn't contain '{_view?.ContainsText}'. Adding it will not show in this view. Continue?",
yesText: "Yes, add it", cancelText: "No");
if (confirmed != true)
return;
}
var newTask = new CreateTodoItemDto
{
Title = quickAddTitle.Trim(),
Priority = 0
};
await ViewService.CreateTodoWithViewCriteriaAsync(viewId, newTask);
quickAddTitle = string.Empty;
await LoadView();
}
private void ToggleCollapse(string taskId)
{
if (collapsedTasks.Contains(taskId))
collapsedTasks.Remove(taskId);
else
collapsedTasks.Add(taskId);
}
private async Task ToggleTask(string id)
{
await TodoService.ToggleCompleteAsync(id);
await LoadView();
}
private async Task DeleteTask(string id)
{
await TodoService.DeleteTodoAsync(id);
await LoadView();
}
private async Task OpenCreateDialog()
{
editTask = new CreateTodoItemDto();
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, false }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Create Task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
if (!TaskMatchesTextCriteria(editTask.Title))
{
var confirmed = await Dialog.ShowMessageBox(
"Warning",
$"This task doesn't contain '{_view?.ContainsText}'. Adding it will not show in this view. Continue?",
yesText: "Yes, add it", cancelText: "No");
if (confirmed != true)
return;
}
await ViewService.CreateTodoWithViewCriteriaAsync(viewId, editTask);
await LoadView();
}
}
private async Task OpenAddChildDialog(TodoItemDto parentTask)
{
editTask = new CreateTodoItemDto { ParentId = parentTask.Id };
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, false },
{ x => x.IsChild, true },
{ x => x.ParentTitle, parentTask.Title }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Add Sub-task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
if (!TaskMatchesTextCriteria(editTask.Title))
{
var confirmed = await Dialog.ShowMessageBox(
"Warning",
$"This task doesn't contain '{_view?.ContainsText}'. Adding it will not show in this view. Continue?",
yesText: "Yes, add it", cancelText: "No");
if (confirmed != true)
return;
}
await ViewService.CreateTodoWithViewCriteriaAsync(viewId, editTask);
await LoadView();
}
}
private async Task OpenUpdateDialog(TodoItemDto task)
{
var confirmed = await Dialog.ShowMessageBox(
"Edit Task Warning",
"Editing this task may remove it from this view if the changes don't match the view criteria. Continue?",
yesText: "Continue", cancelText: "Cancel");
if (confirmed != true)
return;
currentTaskId = task.Id;
editTask = new CreateTodoItemDto
{
Title = task.Title,
Description = task.Description,
Priority = task.Priority,
DueDate = task.DueDate,
ParentId = task.ParentId,
CategoryId = task.CategoryId,
TagIds = task.TagIds.ToList(),
FileId = task.FileId
};
var parameters = new DialogParameters<CreateTaskDialog>
{
{ x => x.Task, editTask },
{ x => x.IsUpdate, true }
};
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await Dialog.ShowAsync<CreateTaskDialog>("Update Task", parameters, options);
var result = await dialog.Result;
if (result is { Canceled: false })
{
await TodoService.UpdateTodoAsync(new UpdateTodoItemDto
{
Id = currentTaskId,
Title = editTask.Title,
Description = editTask.Description,
Priority = editTask.Priority,
DueDate = editTask.DueDate,
IsCompleted = task.IsCompleted,
ParentId = editTask.ParentId,
CategoryId = editTask.CategoryId,
TagIds = editTask.TagIds,
FileId = editTask.FileId
});
await LoadView();
}
}
}
+537
View File
@@ -0,0 +1,537 @@
@using MudBlazor
@using Tasks.Module.Models
@using Tasks.Module.Services
<MudStack Orientation="Orientation.Vertical" Spacing="0" Style="height: 100%;">
<MudStack Row="true" Justify="Justify.FlexStart" AlignItems="AlignItems.Center" Class="pa-2">
<MudText Typo="Typo.caption" Color="Color.Default" Class="ml-2">TASKS SHEETS</MudText>
<MudSpacer />
<MudStack Row="true" Spacing="1">
<MudIconButton Icon="@Icons.Material.Filled.CreateNewFolder" Size="Size.Small" Color="Color.Inherit" OnClick="@OnCreateFolder" Title="New Folder" />
<MudIconButton Icon="@Icons.Material.Filled.NoteAdd" Size="Size.Small" Color="Color.Inherit" OnClick="@OnCreateFile" Title="New Tasks Sheet" />
</MudStack>
</MudStack>
<div style="flex: 1; overflow-y: auto; min-height: 0;"
class="@(_rootDragOver ? "root-drop-zone-active" : "")"
@ondragenter="@OnRootDragEnter"
@ondragenter:preventDefault="true"
@ondragover="@OnRootDragOver"
@ondragover:preventDefault="true"
@ondragleave="@OnRootDragLeave"
@ondrop="@OnRootDrop"
@ondrop:preventDefault="true">
@if (_loading)
{
<MudProgressLinear Indeterminate="true" Class="my-2" />
}
else if (_treeItems.Any())
{
<MudStack Spacing="0" Class="pa-2">
@foreach (var item in _treeItems)
{
<FolderTreeItem Item="@item"
OnItemClick="@OnItemClick"
OnItemExpand="@OnItemExpand"
OnContextMenuWithArgs="@OnContextMenuWithArgs"
OnDragStart="@OnDragStartHandler"
OnDragEnd="@OnDragEndHandler"
OnItemDrop="@OnItemDropHandler" />
}
</MudStack>
}
else
{
<MudText Class="pa-4" Typo="Typo.body2" Color="Color.Secondary" Align="Align.Center">
No tasks sheets yet
</MudText>
}
</div>
</MudStack>
<style>
.root-drop-zone-active {
background-color: var(--mud-palette-primary-hover);
outline: 2px dashed var(--mud-palette-primary);
outline-offset: -4px;
}
</style>
@if (_contextMenuOpen)
{
<div Style="@GetContextMenuStyle()" @onclick:stopPropagation="true">
<MudPaper Elevation="4" Class="pa-2" Style="min-width: 160px;">
<MudStack Spacing="0">
<MudButton FullWidth="true" StartIcon="@Icons.Material.Filled.CreateNewFolder" OnClick="@CreateSubFolder" Disabled="@(_contextItemType != TreeItemType.Folder)">
New Subfolder
</MudButton>
<MudButton FullWidth="true" StartIcon="@Icons.Material.Filled.NoteAdd" OnClick="@CreateSubFile" Disabled="@(_contextItemType != TreeItemType.Folder)">
New Task List
</MudButton>
<MudDivider Class="my-1" />
<MudButton FullWidth="true" StartIcon="@Icons.Material.Filled.Delete" Color="Color.Error" OnClick="@DeleteSelected" Disabled="@(_contextItemId == null)">
Delete
</MudButton>
</MudStack>
</MudPaper>
</div>
<div style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 1000;" @onclick="CloseContextMenu" @oncontextmenu:preventDefault="true"></div>
}
@code {
private bool _loading = true;
private List<TreeItemDto> _treeItems = new();
private bool _contextMenuOpen = false;
private string? _contextItemId = null;
private TreeItemType _contextItemType = TreeItemType.Folder;
private double _contextMenuX = 0;
private double _contextMenuY = 0;
private bool _rootDragOver = false;
private TreeItemDto? _draggingItem = null;
private bool _isMoving = false;
private int _dragSessionId = 0;
[Inject] private IFolderService FolderService { get; set; } = null!;
[Inject] private ISnackbar Snackbar { get; set; } = null!;
[Inject] private IDialogService DialogService { get; set; } = null!;
[Inject] private NavigationManager NavigationManager { get; set; } = null!;
protected override async Task OnInitializedAsync()
{
await RefreshTree();
}
private async Task RefreshTree()
{
_loading = true;
try
{
var newTreeItems = new List<TreeItemDto>();
var rootFolders = await FolderService.GetAllRootFoldersAsync();
foreach (var folder in rootFolders)
{
var treeItem = await BuildTreeItem(folder);
newTreeItems.Add(treeItem);
}
var rootTasksSheets = await FolderService.GetRootTasksSheetsAsync();
foreach (var ts in rootTasksSheets)
{
newTreeItems.Add(new TreeItemDto
{
Id = ts.Id,
Name = ts.Title,
Type = TreeItemType.TasksSheet,
ParentId = null,
IsExpanded = false,
Children = new List<TreeItemDto>()
});
}
_treeItems = newTreeItems;
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
finally
{
_loading = false;
}
}
private async Task<TreeItemDto> BuildTreeItem(FolderDto folder)
{
var item = new TreeItemDto
{
Id = folder.Id,
Name = folder.Name,
Type = TreeItemType.Folder,
ParentId = folder.ParentId,
IsExpanded = false,
Children = new List<TreeItemDto>()
};
foreach (var child in folder.Children)
{
var childItem = await BuildTreeItem(child);
item.Children.Add(childItem);
}
try
{
var tasksSheets = await FolderService.GetTasksSheetsInFolderAsync(folder.Id);
foreach (var ts in tasksSheets)
{
item.Children.Add(new TreeItemDto
{
Id = ts.Id,
Name = ts.Title,
Type = TreeItemType.TasksSheet,
ParentId = folder.Id,
IsExpanded = false,
Children = new List<TreeItemDto>()
});
}
}
catch
{
}
return item;
}
private async Task OnItemClick(TreeItemDto item)
{
if (item.Type == TreeItemType.Folder)
{
item.IsExpanded = !item.IsExpanded;
if (item.IsExpanded && !item.Children.Any())
{
await LoadFolderChildren(item);
}
}
else if (item.Type == TreeItemType.TasksSheet)
{
NavigationManager.NavigateTo($"/tasks/taskssheet/{item.Id}");
}
}
private async Task OnItemExpand(TreeItemDto item)
{
if (item.Type != TreeItemType.Folder) return;
item.IsExpanded = !item.IsExpanded;
if (item.IsExpanded && !item.Children.Any())
{
await LoadFolderChildren(item);
}
}
private async Task LoadFolderChildren(TreeItemDto item)
{
try
{
var folder = await FolderService.GetFolderByIdAsync(item.Id);
if (folder != null)
{
item.Children.Clear();
foreach (var child in folder.Children)
{
var childItem = await BuildTreeItem(child);
item.Children.Add(childItem);
}
var tasksSheets = await FolderService.GetTasksSheetsInFolderAsync(item.Id);
foreach (var ts in tasksSheets)
{
item.Children.Add(new TreeItemDto
{
Id = ts.Id,
Name = ts.Title,
Type = TreeItemType.TasksSheet,
ParentId = item.Id,
IsExpanded = false,
Children = new List<TreeItemDto>()
});
}
}
}
catch
{
}
}
private void OnContextMenuWithArgs((TreeItemDto, MouseEventArgs) args)
{
_contextItemId = args.Item1.Id;
_contextItemType = args.Item1.Type;
_contextMenuX = args.Item2.ClientX;
_contextMenuY = args.Item2.ClientY;
_contextMenuOpen = true;
}
private void CloseContextMenu()
{
_contextMenuOpen = false;
_contextItemId = null;
}
private string GetContextMenuStyle()
{
return $"position: fixed; left: {_contextMenuX}px; top: {_contextMenuY}px; z-index: 1100;";
}
private async Task OnCreateFolder()
{
var parameters = new DialogParameters<InputDialog>
{
{ "Title", "New Folder" },
{ "Label", "Folder Name" }
};
var dialog = await DialogService.ShowAsync<InputDialog>("New Folder", parameters);
var result = await dialog.Result;
if (!result.Canceled && result.Data is string name && !string.IsNullOrWhiteSpace(name))
{
try
{
await FolderService.CreateFolderAsync(new CreateFolderDto { Name = name });
Snackbar.Add($"Created folder '{name}'", Severity.Success);
await RefreshTree();
}
catch (Exception ex)
{
Snackbar.Add($"Error creating folder: {ex.Message}", Severity.Error);
}
}
}
private async Task OnCreateFile()
{
var parameters = new DialogParameters<InputDialog>
{
{ "Title", "New Tasks Sheet" },
{ "Label", "Tasks Sheet Name" }
};
var dialog = await DialogService.ShowAsync<InputDialog>("New Tasks Sheet", parameters);
var result = await dialog.Result;
if (!result.Canceled && result.Data is string name && !string.IsNullOrWhiteSpace(name))
{
try
{
await FolderService.CreateTasksSheetAsync(new CreateTasksSheetDto { Title = name });
Snackbar.Add($"Created tasks sheet '{name}'", Severity.Success);
await RefreshTree();
}
catch (Exception ex)
{
Snackbar.Add($"Error creating tasks sheet: {ex.Message}", Severity.Error);
}
}
}
private async Task CreateSubFolder()
{
if (_contextItemId == null) return;
var parentId = _contextItemId;
CloseContextMenu();
var parameters = new DialogParameters<InputDialog>
{
{ "Title", "New Subfolder" },
{ "Label", "Folder Name" }
};
var dialog = await DialogService.ShowAsync<InputDialog>("New Subfolder", parameters);
var result = await dialog.Result;
if (!result.Canceled && result.Data is string name && !string.IsNullOrWhiteSpace(name))
{
try
{
await FolderService.CreateFolderAsync(new CreateFolderDto { Name = name, ParentId = parentId });
Snackbar.Add($"Created subfolder '{name}'", Severity.Success);
await RefreshTree();
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
}
private async Task CreateSubFile()
{
if (_contextItemId == null) return;
var parentId = _contextItemId;
CloseContextMenu();
var parameters = new DialogParameters<InputDialog>
{
{ "Title", "New Tasks Sheet" },
{ "Label", "Tasks Sheet Name" }
};
var dialog = await DialogService.ShowAsync<InputDialog>("New Tasks Sheet", parameters);
var result = await dialog.Result;
if (!result.Canceled && result.Data is string name && !string.IsNullOrWhiteSpace(name))
{
try
{
await FolderService.CreateTasksSheetAsync(new CreateTasksSheetDto { Title = name, ParentFolderId = parentId });
Snackbar.Add($"Created tasks sheet '{name}'", Severity.Success);
await RefreshTree();
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
}
private async Task DeleteSelected()
{
if (_contextItemId == null) return;
var itemId = _contextItemId;
var itemType = _contextItemType;
CloseContextMenu();
try
{
if (itemType == TreeItemType.Folder)
{
await FolderService.DeleteFolderAsync(itemId);
Snackbar.Add("Folder deleted", Severity.Success);
}
await RefreshTree();
}
catch (Exception ex)
{
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
}
}
private void OnDragStartHandler(TreeItemDto item)
{
_dragSessionId++;
_draggingItem = item;
item.IsDragSource = true;
}
private void OnDragEndHandler(TreeItemDto item)
{
_dragSessionId++;
_isMoving = false;
ClearDragState(_treeItems);
_rootDragOver = false;
_draggingItem = null;
}
private void ClearDragState(List<TreeItemDto> items)
{
foreach (var item in items)
{
item.IsDragSource = false;
item.IsDragOver = false;
if (item.Children.Any())
ClearDragState(item.Children);
}
}
private async Task OnItemDropHandler(TreeItemDto target)
{
var source = _draggingItem;
if (source == null) return;
var sessionId = _dragSessionId;
await MoveItem(source, target.Id, sessionId);
_draggingItem = null;
}
private void OnRootDragEnter()
{
if (_draggingItem != null) _rootDragOver = true;
}
private void OnRootDragOver()
{
if (_draggingItem != null) _rootDragOver = true;
}
private void OnRootDragLeave()
{
_rootDragOver = false;
}
private async Task OnRootDrop()
{
_rootDragOver = false;
var source = _draggingItem;
if (source == null) return;
var sessionId = _dragSessionId;
await MoveItem(source, null, sessionId);
_draggingItem = null;
}
private async Task MoveItem(TreeItemDto source, string? targetParentId, int sessionId)
{
if (_isMoving || sessionId != _dragSessionId) return;
_isMoving = true;
if (source.Id == targetParentId) { _isMoving = false; return; }
if (source.ParentId == targetParentId && targetParentId != null) { _isMoving = false; return; }
if (source.Type == TreeItemType.Folder && targetParentId != null)
{
if (await IsDescendantOf(source.Id, targetParentId))
{
Snackbar.Add("Cannot move a folder into one of its children.", Severity.Error);
_isMoving = false;
return;
}
}
try
{
bool success;
if (source.Type == TreeItemType.Folder)
{
success = await FolderService.MoveFolderAsync(source.Id, targetParentId);
}
else
{
success = await FolderService.MoveTasksSheetAsync(source.Id, targetParentId);
}
if (success)
{
Snackbar.Add($"Moved '{source.Name}'", Severity.Success);
await RefreshTree();
}
else
{
Snackbar.Add($"Could not move '{source.Name}' — item not found.", Severity.Warning);
}
}
catch (Exception ex)
{
Snackbar.Add($"Error moving item: {ex.Message}", Severity.Error);
}
finally
{
_isMoving = false;
}
}
private async Task<bool> IsDescendantOf(string ancestorId, string candidateId)
{
var queue = new Queue<string>();
queue.Enqueue(ancestorId);
var visited = new HashSet<string>();
while (queue.Count > 0)
{
var current = queue.Dequeue();
if (!visited.Add(current)) continue;
if (current == candidateId) return true;
var children = await FolderService.GetFolderByIdAsync(current);
if (children == null) continue;
foreach (var child in children.Children)
{
queue.Enqueue(child.Id);
}
}
return false;
}
}
+153
View File
@@ -0,0 +1,153 @@
@using MudBlazor
@using Microsoft.AspNetCore.Components.Web
@using Tasks.Module.Models
<div class="folder-item @(Item.Type == TreeItemType.Folder ? "drop-zone" : "") @(Item.IsDragOver ? "drop-zone-active" : "") @(Item.IsDragSource ? "drag-source" : "")"
draggable="true"
@onclick="@(() => OnClick(Item))"
@oncontextmenu:preventDefault="true"
@oncontextmenu="@OnContextMenuHandler"
@ondragstart="@OnDragStartLocal"
@ondragend="@OnDragEndLocal"
@ondragenter="@OnDragEnter"
@ondragenter:preventDefault="true"
@ondragover="@OnDragOver"
@ondragover:preventDefault="true"
@ondragleave="@OnDragLeave"
@ondrop="@OnDrop"
@ondrop:preventDefault="true"
style="width: 100%; cursor: pointer;">
<MudStack Row="true" Spacing="0" AlignItems="AlignItems.Center" Style="width: 100%; padding: 4px 8px; border-radius: 4px;" Class="folder-item-row">
@if (Item.Type == TreeItemType.Folder)
{
<MudIcon Icon="@(Item.IsExpanded ? Icons.Material.Filled.KeyboardArrowDown : Icons.Material.Filled.KeyboardArrowRight)"
Size="Size.Small"
Class="mr-1"
Style="width: 20px;" />
}
else
{
<div style="width: 20px;" class="mr-1"></div>
}
<MudIcon Icon="@(Item.Type == TreeItemType.Folder
? (Item.IsExpanded ? Icons.Material.Filled.FolderOpen : Icons.Material.Filled.Folder)
: Icons.Material.Filled.Description)"
Size="Size.Small"
Class="mr-2"
Color="@(Item.Type == TreeItemType.Folder ? Color.Warning : Color.Primary)"
Style="width: 20px;" />
<MudText Typo="Typo.body2" Class="flex-grow-1">
@Item.Name
</MudText>
</MudStack>
</div>
@if (Item.IsExpanded && Item.Children.Any())
{
<MudStack Spacing="0" Class="pl-4" Style="border-left: 1px solid var(--mud-palette-lines-default);">
@foreach (var child in Item.Children)
{
<FolderTreeItem Item="@child"
OnItemClick="@OnItemClick"
OnItemExpand="@OnItemExpand"
OnContextMenuWithArgs="@OnContextMenuWithArgs"
OnDragStart="@OnDragStartRecursive"
OnDragEnd="@OnDragEndRecursive"
OnItemDrop="@OnItemDropRecursive" />
}
</MudStack>
}
<style>
.folder-item:hover .folder-item-row {
background-color: var(--mud-palette-action-default-hover);
}
.folder-item.drag-source .folder-item-row {
opacity: 0.5;
}
.folder-item.drop-zone {
position: relative;
}
.folder-item.drop-zone-active > .folder-item-row {
background-color: var(--mud-palette-primary-hover);
outline: 2px dashed var(--mud-palette-primary);
outline-offset: -2px;
}
</style>
@code {
[Parameter] public TreeItemDto Item { get; set; } = null!;
[Parameter] public EventCallback<TreeItemDto> OnItemClick { get; set; }
[Parameter] public EventCallback<TreeItemDto> OnItemExpand { get; set; }
[Parameter] public EventCallback<(TreeItemDto, MouseEventArgs)> OnContextMenuWithArgs { get; set; }
[Parameter] public EventCallback<TreeItemDto> OnDragStart { get; set; }
[Parameter] public EventCallback<TreeItemDto> OnDragEnd { get; set; }
[Parameter] public EventCallback<TreeItemDto> OnItemDrop { get; set; }
private Task OnClick(TreeItemDto item)
{
return OnItemClick.InvokeAsync(item);
}
private async Task OnContextMenuHandler(MouseEventArgs args)
{
await OnContextMenuWithArgs.InvokeAsync((Item, args));
}
private async Task OnDragStartRecursive(TreeItemDto item)
{
await OnDragStart.InvokeAsync(item);
}
private async Task OnDragEndRecursive()
{
await OnDragEnd.InvokeAsync(Item);
}
private async Task OnItemDropRecursive(TreeItemDto item)
{
await OnItemDrop.InvokeAsync(item);
}
private async Task OnDragStartLocal()
{
await OnDragStart.InvokeAsync(Item);
}
private async Task OnDragEndLocal()
{
await OnDragEnd.InvokeAsync(Item);
}
private void OnDragEnter()
{
if (Item.Type == TreeItemType.Folder)
{
Item.IsDragOver = true;
}
}
private void OnDragOver(DragEventArgs args)
{
if (Item.Type == TreeItemType.Folder)
{
Item.IsDragOver = true;
}
}
private void OnDragLeave()
{
Item.IsDragOver = false;
}
private async Task OnDrop()
{
Item.IsDragOver = false;
await OnItemDrop.InvokeAsync(Item);
}
}
+261
View File
@@ -0,0 +1,261 @@
@using MudBlazor
@using Tasks.Module.Models
@using Microsoft.AspNetCore.Components.Web
<div class="task-item @(Task.IsCompleted ? "completed" : "")" style="@GetDepthStyle()" @oncontextmenu:preventDefault="true" @oncontextmenu="(e) => OnContextMenu(e)">
<div class="flex items-center gap-2 py-1">
@* Expand/Collapse Button *@
@if (Task.Children.Any())
{
<MudIconButton Icon="@(IsCollapsed ? Icons.Material.Filled.ChevronRight : Icons.Material.Filled.ExpandMore)"
Size="Size.Small"
OnClick="HandleToggleCollapse"
Class="pa-0" />
}
else
{
<div style="width: 24px;"></div>
}
@* Checkbox *@
<MudCheckBox T="bool"
Value="@Task.IsCompleted"
ValueChanged="HandleToggle"
Color="Color.Success"
Dense="true"
Class="ma-0 pa-0" />
@* Task Title *@
<MudText Typo="Typo.body2"
Class="@(Task.IsCompleted ? "strikethrough text-slate-400 flex-grow-1" : "flex-grow-1")">
@Task.Title
</MudText>
@* Priority Badge *@
<MudChip Size="Size.Small"
T="string"
Label="true"
Class="@GetPriorityClass()"
Style="height: 20px; font-size: 10px; padding: 0 6px;">
@GetPriorityLabel()
</MudChip>
@* Due Date *@
@if (Task.DueDate.HasValue)
{
<MudText Typo="Typo.caption" Color="@GetDueDateColor()" Class="@(Task.IsCompleted ? "text-slate-400" : "")">
@Task.DueDate.Value.ToString("MMM dd")
</MudText>
}
@* Sub-task count *@
@if (Task.Children.Any())
{
<MudText Typo="Typo.caption" Color="Color.Default" Class="text-slate-500">
@GetTotalChildrenCount() sub
</MudText>
}
@* Actions *@
<div class="task-actions">
<MudIconButton Icon="@Icons.Material.Filled.Add"
Size="Size.Small"
OnClick="HandleAddChild"
Title="Add sub-task"
Class="pa-0" />
<MudIconButton Icon="@Icons.Material.Filled.Delete"
Size="Size.Small"
Color="Color.Error"
OnClick="HandleDelete"
Title="Delete"
Class="pa-0" />
</div>
</div>
</div>
@* Context Menu *@
@if (_contextMenuOpen)
{
<div Style="@($"position: fixed; left: {_contextMenuX}px; top: {_contextMenuY}px; z-index: 2000;")">
<MudPaper Elevation="4" Class="pa-2" Style="min-width: 160px;">
<MudStack Spacing="0">
<MudButton FullWidth="true" StartIcon="@Icons.Material.Filled.Add" OnClick="@(() => HandleContextAction("addChild"))">
Add Sub-task
</MudButton>
<MudButton FullWidth="true" StartIcon="@Icons.Material.Filled.Edit" OnClick="@(() => HandleContextAction("edit"))">
Edit
</MudButton>
<MudDivider Class="my-1" />
<MudButton FullWidth="true" StartIcon="@Icons.Material.Filled.Delete" Color="Color.Error" OnClick="@(() => HandleContextAction("delete"))">
Delete
</MudButton>
</MudStack>
</MudPaper>
</div>
<div style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 1999;" @onclick="CloseContextMenu" @oncontextmenu:preventDefault="true"></div>
}
@* Recursive Children *@
@if (Task.Children.Any() && !IsCollapsed)
{
<div style="padding-left: 20px;">
@foreach (var child in Task.Children)
{
<TaskCard Task="child"
OnToggle="OnToggle"
OnDelete="OnDelete"
OnUpdate="OnUpdate"
OnAddChild="OnAddChild"
CollapsedTasks="CollapsedTasks"
ToggleCollapse="ToggleCollapse"
Depth="Depth + 1" />
}
</div>
}
<style>
.task-item {
padding: 2px 8px;
margin: 2px 0;
border-radius: 4px;
background-color: var(--mud-palette-background-grey, #f5f5f5);
cursor: context-menu;
}
.task-item:hover {
background-color: var(--mud-palette-action-default-hover, #e0e0e0);
}
.task-item.completed {
background-color: transparent;
opacity: 0.7;
}
.task-actions {
opacity: 0;
transition: opacity 0.2s;
}
.task-item:hover .task-actions {
opacity: 1;
}
</style>
@code {
[Parameter] public TodoItemDto Task { get; set; } = new();
[Parameter] public EventCallback<string> OnToggle { get; set; }
[Parameter] public EventCallback<string> OnDelete { get; set; }
[Parameter] public EventCallback<TodoItemDto> OnUpdate { get; set; }
[Parameter] public EventCallback<TodoItemDto> OnAddChild { get; set; }
[Parameter] public HashSet<string> CollapsedTasks { get; set; } = new();
[Parameter] public EventCallback<string> ToggleCollapse { get; set; }
[Parameter] public int Depth { get; set; } = 0;
private bool _contextMenuOpen = false;
private double _contextMenuX = 0;
private double _contextMenuY = 0;
private bool IsCollapsed => CollapsedTasks.Contains(Task.Id);
private int GetTotalChildrenCount() => CountChildren(Task);
private int CountChildren(TodoItemDto task)
{
int count = task.Children.Count;
foreach (var child in task.Children)
count += CountChildren(child);
return count;
}
private void OnContextMenu(MouseEventArgs args)
{
_contextMenuX = args.ClientX;
_contextMenuY = args.ClientY;
_contextMenuOpen = true;
}
private void CloseContextMenu()
{
_contextMenuOpen = false;
}
private async Task HandleContextAction(string action)
{
CloseContextMenu();
switch (action)
{
case "addChild":
await HandleAddChild();
break;
case "edit":
await HandleEdit();
break;
case "delete":
await HandleDelete();
break;
}
}
private async Task HandleEdit()
{
if (OnUpdate.HasDelegate)
await OnUpdate.InvokeAsync(Task);
}
private async Task HandleToggle(bool isCompleted)
{
if (OnToggle.HasDelegate)
await OnToggle.InvokeAsync(Task.Id);
}
private async Task HandleToggleCollapse()
{
if (ToggleCollapse.HasDelegate)
await ToggleCollapse.InvokeAsync(Task.Id);
}
private async Task HandleDelete()
{
if (OnDelete.HasDelegate)
await OnDelete.InvokeAsync(Task.Id);
}
private async Task HandleAddChild()
{
if (OnAddChild.HasDelegate)
await OnAddChild.InvokeAsync(Task);
}
private string GetDepthStyle() => "";
private string GetPriorityClass()
{
return Task.Priority switch
{
2 => "bg-red-100 text-red-700",
1 => "bg-yellow-100 text-yellow-700",
_ => "bg-green-100 text-green-700"
};
}
private string GetPriorityLabel()
{
return Task.Priority switch
{
2 => "H",
1 => "M",
_ => "L"
};
}
private Color GetDueDateColor()
{
if (Task.IsCompleted)
return Color.Default;
if (IsDueOverdue())
return Color.Error;
return Color.Default;
}
private bool IsDueOverdue()
{
return Task.DueDate.HasValue && Task.DueDate.Value < DateTime.Now && !Task.IsCompleted;
}
}
+51
View File
@@ -0,0 +1,51 @@
namespace Tasks.Module.Models;
public class CategoryDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string? ParentId { get; set; }
public string? UserId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public List<CategoryDto> Children { get; set; } = new();
}
public class CreateCategoryDto
{
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string? ParentId { get; set; }
}
public class UpdateCategoryDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string? ParentId { get; set; }
}
public class TagDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? Color { get; set; }
public string? UserId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
}
public class CreateTagDto
{
public string Name { get; set; } = string.Empty;
public string? Color { get; set; }
}
public class UpdateTagDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? Color { get; set; }
}
+89
View File
@@ -0,0 +1,89 @@
namespace Tasks.Module.Models;
public class FolderDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? ParentId { get; set; }
public string? UserId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public List<FolderDto> Children { get; set; } = new();
public List<FileReferenceDto> Files { get; set; } = new();
public List<TasksSheetDto> TasksSheets { get; set; } = new();
}
public class CreateFolderDto
{
public string Name { get; set; } = string.Empty;
public string? ParentId { get; set; }
}
public class UpdateFolderDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? ParentId { get; set; }
}
public class FileReferenceDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string Type { get; set; } = string.Empty;
public string? ParentId { get; set; }
public string? ContentPath { get; set; }
public string? UserId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
}
public class CreateFileReferenceDto
{
public string Name { get; set; } = string.Empty;
public string Type { get; set; } = string.Empty;
public string? ParentId { get; set; }
public string? ContentPath { get; set; }
}
public class TasksSheetDto
{
public string Id { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public string? Description { get; set; }
public string? ParentFolderId { get; set; }
public string? UserId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public string? CategoryId { get; set; }
public List<string> TagIds { get; set; } = new();
public List<TodoItemDto> Tasks { get; set; } = new();
}
public class CreateTasksSheetDto
{
public string Title { get; set; } = string.Empty;
public string? Description { get; set; }
public string? ParentFolderId { get; set; }
public string? CategoryId { get; set; }
public List<string> TagIds { get; set; } = new();
}
public class TreeItemDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public TreeItemType Type { get; set; }
public string? ParentId { get; set; }
public List<TreeItemDto> Children { get; set; } = new();
public bool IsExpanded { get; set; } = false;
public bool IsDragOver { get; set; } = false;
public bool IsDragSource { get; set; } = false;
}
public enum TreeItemType
{
Folder,
TasksSheet,
Document
}
+95
View File
@@ -0,0 +1,95 @@
namespace Tasks.Module.Models;
public class TodoItemDto
{
public string Id { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public string? Description { get; set; }
public bool IsCompleted { get; set; }
public DateTime? DueDate { get; set; }
public int Priority { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public string? UserId { get; set; }
public string? ParentId { get; set; }
public string? CategoryId { get; set; }
public List<string> TagIds { get; set; } = new();
public string? FileId { get; set; }
public List<TodoItemDto> Children { get; set; } = new();
}
public class CreateTodoItemDto
{
public string Title { get; set; } = string.Empty;
public string? Description { get; set; }
public int Priority { get; set; } = 0;
public DateTime? DueDate { get; set; }
public string? ParentId { get; set; }
public string? CategoryId { get; set; }
public List<string> TagIds { get; set; } = new();
public string? FileId { get; set; }
}
public class UpdateTodoItemDto
{
public string Id { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public string? Description { get; set; }
public bool IsCompleted { get; set; }
public int Priority { get; set; }
public DateTime? DueDate { get; set; }
public string? ParentId { get; set; }
public string? CategoryId { get; set; }
public List<string> TagIds { get; set; } = new();
public string? FileId { get; set; }
}
public class TodoFilterDto
{
public bool? IsCompleted { get; set; }
public int? Priority { get; set; }
public DateTime? DueDate { get; set; }
public string? ParentId { get; set; }
}
public class TaskViewDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public int? Priority { get; set; }
public bool? IsCompleted { get; set; }
public DateTime? DueDateFrom { get; set; }
public DateTime? DueDateTo { get; set; }
public string? ContainsText { get; set; }
public string? UserId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
}
public class CreateTaskViewDto
{
public string Name { get; set; } = string.Empty;
public int? Priority { get; set; }
public bool? IsCompleted { get; set; }
public DateTime? DueDateFrom { get; set; }
public DateTime? DueDateTo { get; set; }
public string? ContainsText { get; set; }
}
public class UpdateTaskViewDto
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public int? Priority { get; set; }
public bool? IsCompleted { get; set; }
public DateTime? DueDateFrom { get; set; }
public DateTime? DueDateTo { get; set; }
public string? ContainsText { get; set; }
}
public class FlatCategory
{
public string Id { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public int Depth { get; set; }
}
+156
View File
@@ -0,0 +1,156 @@
using System.Net.Http.Json;
using Tasks.Module.Models;
namespace Tasks.Module.Services;
public interface ICategoryService
{
Task<List<CategoryDto>> GetHierarchyAsync();
Task<List<CategoryDto>> GetFlatListAsync();
Task<List<CategoryDto>> GetRootCategoriesAsync();
Task<CategoryDto?> GetByIdAsync(string id);
Task<CategoryDto> CreateAsync(CreateCategoryDto dto);
Task<CategoryDto?> UpdateAsync(UpdateCategoryDto dto);
Task<(bool success, bool hasChildren, int childCount, int taskCount)> DeleteAsync(string id, bool cascade = false);
}
public class CategoryService : ICategoryService
{
private readonly HttpClient _httpClient;
public CategoryService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<List<CategoryDto>> GetHierarchyAsync()
{
return await _httpClient.GetFromJsonAsync<List<CategoryDto>>("/api/v1/categories/tree") ?? new List<CategoryDto>();
}
public async Task<List<CategoryDto>> GetFlatListAsync()
{
return await _httpClient.GetFromJsonAsync<List<CategoryDto>>("/api/v1/categories/flat") ?? new List<CategoryDto>();
}
public async Task<List<CategoryDto>> GetRootCategoriesAsync()
{
return await _httpClient.GetFromJsonAsync<List<CategoryDto>>("/api/v1/categories/roots") ?? new List<CategoryDto>();
}
public async Task<CategoryDto?> GetByIdAsync(string id)
{
return await _httpClient.GetFromJsonAsync<CategoryDto>($"/api/v1/categories/{id}");
}
public async Task<CategoryDto> CreateAsync(CreateCategoryDto dto)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/categories", dto);
if (!response.IsSuccessStatusCode)
{
var error = await response.Content.ReadFromJsonAsync<Dictionary<string, string>>();
throw new InvalidOperationException(error?.GetValueOrDefault("message") ?? "Failed to create category");
}
return await response.Content.ReadFromJsonAsync<CategoryDto>() ?? throw new Exception("Failed to create category");
}
public async Task<CategoryDto?> UpdateAsync(UpdateCategoryDto dto)
{
var response = await _httpClient.PutAsJsonAsync("/api/v1/categories", dto);
if (!response.IsSuccessStatusCode)
{
var error = await response.Content.ReadFromJsonAsync<Dictionary<string, string>>();
throw new InvalidOperationException(error?.GetValueOrDefault("message") ?? "Failed to update category");
}
return await response.Content.ReadFromJsonAsync<CategoryDto>();
}
public async Task<(bool success, bool hasChildren, int childCount, int taskCount)> DeleteAsync(string id, bool cascade = false)
{
var response = await _httpClient.DeleteAsync($"/api/v1/categories/{id}?cascade={cascade}");
if (response.StatusCode == System.Net.HttpStatusCode.BadRequest)
{
var data = await response.Content.ReadFromJsonAsync<Dictionary<string, object>>();
return (false, true,
data?.ContainsKey("childCount") == true ? Convert.ToInt32(data?["childCount"]) : 0,
data?.ContainsKey("taskCount") == true ? Convert.ToInt32(data?["taskCount"]) : 0);
}
return (response.IsSuccessStatusCode, false, 0, 0);
}
}
public interface ITagService
{
Task<List<TagDto>> GetAllAsync();
Task<List<TagDto>> SearchAsync(string? query = null);
Task<TagDto?> GetByIdAsync(string id);
Task<TagDto> CreateAsync(CreateTagDto dto);
Task<TagDto?> UpdateAsync(UpdateTagDto dto);
Task<bool> DeleteAsync(string id);
}
public class TagService : ITagService
{
private readonly HttpClient _httpClient;
public TagService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<List<TagDto>> GetAllAsync()
{
return await _httpClient.GetFromJsonAsync<List<TagDto>>("/api/v1/tags") ?? new List<TagDto>();
}
public async Task<List<TagDto>> SearchAsync(string? query = null)
{
var url = "/api/v1/tags/search";
if (!string.IsNullOrWhiteSpace(query))
url += $"?q={Uri.EscapeDataString(query)}";
return await _httpClient.GetFromJsonAsync<List<TagDto>>(url) ?? new List<TagDto>();
}
public async Task<TagDto?> GetByIdAsync(string id)
{
return await _httpClient.GetFromJsonAsync<TagDto>($"/api/v1/tags/{id}");
}
public async Task<TagDto> CreateAsync(CreateTagDto dto)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/tags", dto);
if (!response.IsSuccessStatusCode)
{
var error = await response.Content.ReadFromJsonAsync<Dictionary<string, string>>();
throw new InvalidOperationException(error?.GetValueOrDefault("message") ?? "Failed to create tag");
}
return await response.Content.ReadFromJsonAsync<TagDto>() ?? throw new Exception("Failed to create tag");
}
public async Task<TagDto?> UpdateAsync(UpdateTagDto dto)
{
var response = await _httpClient.PutAsJsonAsync("/api/v1/tags", dto);
if (!response.IsSuccessStatusCode)
{
var error = await response.Content.ReadFromJsonAsync<Dictionary<string, string>>();
throw new InvalidOperationException(error?.GetValueOrDefault("message") ?? "Failed to update tag");
}
return await response.Content.ReadFromJsonAsync<TagDto>();
}
public async Task<bool> DeleteAsync(string id)
{
var response = await _httpClient.DeleteAsync($"/api/v1/tags/{id}");
return response.IsSuccessStatusCode;
}
}
+152
View File
@@ -0,0 +1,152 @@
using System.Net.Http.Json;
using Microsoft.Extensions.Configuration;
using Tasks.Module.Models;
namespace Tasks.Module.Services;
public interface IFolderService
{
Task<List<FolderDto>> GetAllRootFoldersAsync();
Task<FolderDto?> GetFolderByIdAsync(string id);
Task<FolderDto> CreateFolderAsync(CreateFolderDto createDto);
Task<FolderDto?> UpdateFolderAsync(UpdateFolderDto updateDto);
Task<bool> DeleteFolderAsync(string id);
Task<bool> MoveFolderAsync(string id, string? parentId);
Task<List<FileReferenceDto>> GetFilesInFolderAsync(string folderId);
Task<FileReferenceDto> CreateFileReferenceAsync(CreateFileReferenceDto createDto);
Task<bool> DeleteFileReferenceAsync(string id);
Task<List<TasksSheetDto>> GetTasksSheetsInFolderAsync(string folderId);
Task<List<TasksSheetDto>> GetRootTasksSheetsAsync();
Task<TasksSheetDto?> GetTasksSheetByIdAsync(string id);
Task<TasksSheetDto> CreateTasksSheetAsync(CreateTasksSheetDto createDto);
Task<bool> MoveTasksSheetAsync(string id, string? parentFolderId);
Task<TodoItemDto> AddTaskToTasksSheetAsync(string tasksSheetId, CreateTodoItemDto createDto);
Task<bool> ToggleTaskInTasksSheetAsync(string taskId);
Task<bool> DeleteTaskInTasksSheetAsync(string taskId);
}
public class FolderService : IFolderService
{
private readonly HttpClient _httpClient;
public FolderService(HttpClient httpClient, IConfiguration configuration)
{
_httpClient = httpClient;
}
public async Task<List<FolderDto>> GetAllRootFoldersAsync()
{
try
{
var response = await _httpClient.GetFromJsonAsync<List<FolderDto>>("/api/v1/folders");
return response ?? new List<FolderDto>();
}
catch (Exception ex)
{
Console.WriteLine($"[FolderService] Error getting folders: {ex.Message}");
throw;
}
}
public async Task<FolderDto?> GetFolderByIdAsync(string id)
{
return await _httpClient.GetFromJsonAsync<FolderDto>($"/api/v1/folders/{id}");
}
public async Task<FolderDto> CreateFolderAsync(CreateFolderDto createDto)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/folders", createDto);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<FolderDto>() ?? throw new Exception("Failed to create folder");
}
public async Task<FolderDto?> UpdateFolderAsync(UpdateFolderDto updateDto)
{
var response = await _httpClient.PutAsJsonAsync("/api/v1/folders", updateDto);
if (!response.IsSuccessStatusCode)
return null;
return await response.Content.ReadFromJsonAsync<FolderDto>();
}
public async Task<bool> DeleteFolderAsync(string id)
{
var response = await _httpClient.DeleteAsync($"/api/v1/folders/{id}");
return response.IsSuccessStatusCode;
}
public async Task<bool> MoveFolderAsync(string id, string? parentId)
{
var response = await _httpClient.PatchAsJsonAsync($"/api/v1/folders/{id}/parent",
new { ParentId = parentId });
return response.IsSuccessStatusCode;
}
public async Task<List<FileReferenceDto>> GetFilesInFolderAsync(string folderId)
{
var response = await _httpClient.GetFromJsonAsync<List<FileReferenceDto>>($"/api/v1/files?folderId={folderId}");
return response ?? new List<FileReferenceDto>();
}
public async Task<FileReferenceDto> CreateFileReferenceAsync(CreateFileReferenceDto createDto)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/files", createDto);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<FileReferenceDto>() ?? throw new Exception("Failed to create file");
}
public async Task<bool> DeleteFileReferenceAsync(string id)
{
var response = await _httpClient.DeleteAsync($"/api/v1/files/{id}");
return response.IsSuccessStatusCode;
}
public async Task<List<TasksSheetDto>> GetTasksSheetsInFolderAsync(string folderId)
{
var response = await _httpClient.GetFromJsonAsync<List<TasksSheetDto>>($"/api/v1/taskssheets?folderId={folderId}");
return response ?? new List<TasksSheetDto>();
}
public async Task<List<TasksSheetDto>> GetRootTasksSheetsAsync()
{
var response = await _httpClient.GetFromJsonAsync<List<TasksSheetDto>>("/api/v1/taskssheets/root");
return response ?? new List<TasksSheetDto>();
}
public async Task<TasksSheetDto?> GetTasksSheetByIdAsync(string id)
{
return await _httpClient.GetFromJsonAsync<TasksSheetDto>($"/api/v1/taskssheets/{id}");
}
public async Task<TasksSheetDto> CreateTasksSheetAsync(CreateTasksSheetDto createDto)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/taskssheets", createDto);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<TasksSheetDto>() ?? throw new Exception("Failed to create tasks sheet");
}
public async Task<bool> MoveTasksSheetAsync(string id, string? parentFolderId)
{
var response = await _httpClient.PatchAsJsonAsync($"/api/v1/taskssheets/{id}/parent",
new { ParentFolderId = parentFolderId });
return response.IsSuccessStatusCode;
}
public async Task<TodoItemDto> AddTaskToTasksSheetAsync(string tasksSheetId, CreateTodoItemDto createDto)
{
var response = await _httpClient.PostAsJsonAsync($"/api/v1/taskssheets/{tasksSheetId}/tasks", createDto);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<TodoItemDto>() ?? throw new Exception("Failed to create task");
}
public async Task<bool> ToggleTaskInTasksSheetAsync(string taskId)
{
var response = await _httpClient.PatchAsync($"/api/v1/taskssheets/tasks/{taskId}/toggle", null);
return response.IsSuccessStatusCode;
}
public async Task<bool> DeleteTaskInTasksSheetAsync(string taskId)
{
var response = await _httpClient.DeleteAsync($"/api/v1/taskssheets/tasks/{taskId}");
return response.IsSuccessStatusCode;
}
}
+78
View File
@@ -0,0 +1,78 @@
using System.Net.Http.Json;
using Tasks.Module.Models;
namespace Tasks.Module.Services;
public interface ITodoService
{
Task<List<TodoItemDto>> GetAllTodosAsync(TodoFilterDto? filter = null);
Task<TodoItemDto?> GetTodoByIdAsync(string id);
Task<TodoItemDto> CreateTodoAsync(CreateTodoItemDto createDto);
Task<TodoItemDto?> UpdateTodoAsync(UpdateTodoItemDto updateDto);
Task<bool> DeleteTodoAsync(string id);
Task<TodoItemDto?> ToggleCompleteAsync(string id);
}
public class TodoService : ITodoService
{
private readonly HttpClient _httpClient;
public TodoService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<List<TodoItemDto>> GetAllTodosAsync(TodoFilterDto? filter = null)
{
var url = $"/api/v1/todos";
var queryParams = new List<string>();
if (filter?.IsCompleted != null)
queryParams.Add($"isCompleted={filter.IsCompleted}");
if (filter?.Priority != null)
queryParams.Add($"priority={filter.Priority}");
if (filter?.DueDate != null)
queryParams.Add($"dueDate={filter.DueDate:yyyy-MM-ddTHH:mm:ssZ}");
if (!string.IsNullOrEmpty(filter?.ParentId))
queryParams.Add($"parentId={filter.ParentId}");
if (queryParams.Any())
url += "?" + string.Join("&", queryParams);
return await _httpClient.GetFromJsonAsync<List<TodoItemDto>>(url) ?? new List<TodoItemDto>();
}
public async Task<TodoItemDto?> GetTodoByIdAsync(string id)
{
return await _httpClient.GetFromJsonAsync<TodoItemDto>($"/api/v1/todos/{id}");
}
public async Task<TodoItemDto> CreateTodoAsync(CreateTodoItemDto createDto)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/todos", createDto);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<TodoItemDto>() ?? throw new Exception("Failed to create todo");
}
public async Task<TodoItemDto?> UpdateTodoAsync(UpdateTodoItemDto updateDto)
{
var response = await _httpClient.PutAsJsonAsync("/api/v1/todos", updateDto);
if (!response.IsSuccessStatusCode)
return null;
return await response.Content.ReadFromJsonAsync<TodoItemDto>();
}
public async Task<bool> DeleteTodoAsync(string id)
{
var response = await _httpClient.DeleteAsync($"/api/v1/todos/{id}");
return response.IsSuccessStatusCode;
}
public async Task<TodoItemDto?> ToggleCompleteAsync(string id)
{
var response = await _httpClient.PatchAsync($"/api/v1/todos/{id}/toggle", null);
if (!response.IsSuccessStatusCode)
return null;
return await response.Content.ReadFromJsonAsync<TodoItemDto>();
}
}
+70
View File
@@ -0,0 +1,70 @@
using System.Net.Http.Json;
using Tasks.Module.Models;
namespace Tasks.Module.Services;
public interface IViewService
{
Task<List<TaskViewDto>> GetAllViewsAsync();
Task<TaskViewDto?> GetViewByIdAsync(string id);
Task<TaskViewDto> CreateViewAsync(CreateTaskViewDto createDto);
Task<TaskViewDto?> UpdateViewAsync(UpdateTaskViewDto updateDto);
Task<bool> DeleteViewAsync(string id);
Task<List<TodoItemDto>> GetTasksByViewAsync(string viewId);
Task<TodoItemDto> CreateTodoWithViewCriteriaAsync(string viewId, CreateTodoItemDto createDto);
}
public class ViewService : IViewService
{
private readonly HttpClient _httpClient;
public ViewService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<List<TaskViewDto>> GetAllViewsAsync()
{
var response = await _httpClient.GetFromJsonAsync<List<TaskViewDto>>("/api/v1/views");
return response ?? new List<TaskViewDto>();
}
public async Task<TaskViewDto?> GetViewByIdAsync(string id)
{
return await _httpClient.GetFromJsonAsync<TaskViewDto>($"/api/v1/views/{id}");
}
public async Task<TaskViewDto> CreateViewAsync(CreateTaskViewDto createDto)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/views", createDto);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<TaskViewDto>() ?? throw new Exception("Failed to create view");
}
public async Task<TaskViewDto?> UpdateViewAsync(UpdateTaskViewDto updateDto)
{
var response = await _httpClient.PutAsJsonAsync("/api/v1/views", updateDto);
if (!response.IsSuccessStatusCode)
return null;
return await response.Content.ReadFromJsonAsync<TaskViewDto>();
}
public async Task<bool> DeleteViewAsync(string id)
{
var response = await _httpClient.DeleteAsync($"/api/v1/views/{id}");
return response.IsSuccessStatusCode;
}
public async Task<List<TodoItemDto>> GetTasksByViewAsync(string viewId)
{
var response = await _httpClient.GetFromJsonAsync<List<TodoItemDto>>($"/api/v1/views/{viewId}/tasks");
return response ?? new List<TodoItemDto>();
}
public async Task<TodoItemDto> CreateTodoWithViewCriteriaAsync(string viewId, CreateTodoItemDto createDto)
{
var response = await _httpClient.PostAsJsonAsync($"/api/v1/views/{viewId}/tasks", createDto);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<TodoItemDto>() ?? throw new Exception("Failed to create task");
}
}
+24
View File
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>Tasks.Module</RootNamespace>
<AssemblyName>Tasks.Module</AssemblyName>
</PropertyGroup>
<ItemGroup>
<SupportedPlatform Include="browser" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MudBlazor" Version="8.9.0" />
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.1" />
</ItemGroup>
</Project>
+15
View File
@@ -0,0 +1,15 @@
@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 Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using MudBlazor
@using Tasks.Module
@using Tasks.Module.Components
@using Tasks.Module.Components.Pages
@using Tasks.Module.Components.Dialogs
@using Tasks.Module.Services
@using Tasks.Module.Models
@using Tasks.Module.Components.Sidebar
+479
View File
@@ -0,0 +1,479 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v10.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v10.0": {
"Tasks.RCL/1.0.0": {
"dependencies": {
"Blazored.LocalStorage": "4.5.0",
"Microsoft.AspNetCore.Components.Web": "10.0.1",
"Microsoft.Extensions.Configuration": "10.0.1",
"Microsoft.Extensions.Http": "10.0.1",
"Microsoft.Extensions.Localization": "10.0.1",
"MudBlazor": "8.9.0"
},
"runtime": {
"Tasks.RCL.dll": {}
}
},
"Blazored.LocalStorage/4.5.0": {
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "10.0.1"
},
"runtime": {
"lib/net8.0/Blazored.LocalStorage.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"Microsoft.AspNetCore.Authorization/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Metadata": "10.0.1",
"Microsoft.Extensions.Diagnostics": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Authorization.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Components/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Authorization": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Components.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Components.Forms/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Components": "10.0.1",
"Microsoft.Extensions.Validation": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Components.Forms.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Components.Web/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Components": "10.0.1",
"Microsoft.AspNetCore.Components.Forms": "10.0.1",
"Microsoft.Extensions.DependencyInjection": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1",
"Microsoft.JSInterop": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Components.Web.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Metadata/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Metadata.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Configuration/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Configuration.Binder/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.1",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.Binder.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.DependencyInjection/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.DependencyInjection.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Diagnostics/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.1",
"Microsoft.Extensions.Diagnostics.Abstractions": "10.0.1",
"Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Diagnostics.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Diagnostics.Abstractions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Http/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Diagnostics": "10.0.1",
"Microsoft.Extensions.Logging": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Http.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Localization/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Localization.Abstractions": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Localization.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Localization.Abstractions/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.Localization.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Logging/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Logging.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Options/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1",
"Microsoft.Extensions.Configuration.Binder": "10.0.1",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Primitives/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Validation/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Validation.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.JSInterop/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.JSInterop.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"MudBlazor/8.9.0": {
"dependencies": {
"Microsoft.AspNetCore.Components": "10.0.1",
"Microsoft.AspNetCore.Components.Web": "10.0.1",
"Microsoft.Extensions.Localization": "10.0.1"
},
"runtime": {
"lib/net9.0/MudBlazor.dll": {
"assemblyVersion": "8.9.0.0",
"fileVersion": "8.9.0.0"
}
}
}
}
},
"libraries": {
"Tasks.RCL/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Blazored.LocalStorage/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==",
"path": "blazored.localstorage/4.5.0",
"hashPath": "blazored.localstorage.4.5.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Authorization/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Y9QE0gH4Q4cR7ZRToFju47c1MoeqxaLHdpzOviqD2TmnGGAeDMT9AV56j2BOVm5CsJAVyI/USxLYrkk2NVinZA==",
"path": "microsoft.aspnetcore.authorization/10.0.1",
"hashPath": "microsoft.aspnetcore.authorization.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Components/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SbABcQ7soM9jC/HvPKrg/smQxsMD2gW9iHBRFtBiYTMSs5Vqh7+i47BTOe3OM3IGzly2FiOmeNHJhMYK7YFGWA==",
"path": "microsoft.aspnetcore.components/10.0.1",
"hashPath": "microsoft.aspnetcore.components.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Components.Forms/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aWUpLOz749gwMMaKe81tet+INC8nfskbauF2VO5Qr3lspj/l8S24zNLr95Bl8EwAizvBCNqwb8fPFU1dnn3WbA==",
"path": "microsoft.aspnetcore.components.forms/10.0.1",
"hashPath": "microsoft.aspnetcore.components.forms.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Components.Web/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-hX74ijqAiUfIo6WpvLWignGYp7tkrRR3KRVBErwFSAcsiHeaCxGM81fYRXd9rf+gkFUNoKvcSxYyVZc2vFJVXg==",
"path": "microsoft.aspnetcore.components.web/10.0.1",
"hashPath": "microsoft.aspnetcore.components.web.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Metadata/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6JrG03xROuR4mQIHGcT8OnaKVBoPLLbto5RicKQIUV3JIU7cZYKIWDAnk0SQcl7ziQr6R327D6QBOo+PbYnnrw==",
"path": "microsoft.aspnetcore.metadata/10.0.1",
"hashPath": "microsoft.aspnetcore.metadata.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-njoRekyMIK+smav8B6KL2YgIfUtlsRNuT7wvurpLW+m/hoRKVnoELk2YxnUnWRGScCd1rukLMxShwLqEOKowDg==",
"path": "microsoft.extensions.configuration/10.0.1",
"hashPath": "microsoft.extensions.configuration.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kPlU11hql+L9RjrN2N9/0GcRcRcZrNFlLLjadasFWeBORT6pL6OE+RYRk90GGCyVGSxTK+e1/f3dsMj5zpFFiQ==",
"path": "microsoft.extensions.configuration.abstractions/10.0.1",
"hashPath": "microsoft.extensions.configuration.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Binder/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Lp4CZIuTVXtlvkAnTq6QvMSW7+H62gX2cU2vdFxHQUxvrWTpi7LwYI3X+YAyIS0r12/p7gaosco7efIxL4yFNw==",
"path": "microsoft.extensions.configuration.binder/10.0.1",
"hashPath": "microsoft.extensions.configuration.binder.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-zerXV0GAR9LCSXoSIApbWn+Dq1/T+6vbXMHGduq1LoVQRHT0BXsGQEau0jeLUBUcsoF/NaUT8ADPu8b+eNcIyg==",
"path": "microsoft.extensions.dependencyinjection/10.0.1",
"hashPath": "microsoft.extensions.dependencyinjection.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oIy8fQxxbUsSrrOvgBqlVgOeCtDmrcynnTG+FQufcUWBrwyPfwlUkCDB2vaiBeYPyT+20u9/HeuHeBf+H4F/8g==",
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.1",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YaocqxscJLxLit0F5yq2XyB+9C7rSRfeTL7MJIl7XwaOoUO3i0EqfO2kmtjiRduYWw7yjcSINEApYZbzjau2gQ==",
"path": "microsoft.extensions.diagnostics/10.0.1",
"hashPath": "microsoft.extensions.diagnostics.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-QMoMrkNpnQym5mpfdxfxpRDuqLpsOuztguFvzH9p+Ex+do+uLFoi7UkAsBO4e9/tNR3eMFraFf2fOAi2cp3jjA==",
"path": "microsoft.extensions.diagnostics.abstractions/10.0.1",
"hashPath": "microsoft.extensions.diagnostics.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Http/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZXJup9ReE1Ot3M8jqcw1b/lnc8USxyYS3cyLsssU39u04TES9JNGviWUGIvP3K7mMU3TF7kQl2aS0SmVwegflw==",
"path": "microsoft.extensions.http/10.0.1",
"hashPath": "microsoft.extensions.http.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Localization/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yJBI3IRm9uTRu7cPc7i90/8+CuiiJJ5M4khj6iWQcYnq6VrG+H2U5GzpRLtkVCsgxc1LjtkNMEbSDatfBA+z5g==",
"path": "microsoft.extensions.localization/10.0.1",
"hashPath": "microsoft.extensions.localization.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Localization.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-TQSQWF+iZdtGNgPiu7gKUqrTEeRD/mhk7KeYiuEwmTUPbawsYfPSNzSvOOeueJ0nU1697X8HZ2vCp2ByHNHkZg==",
"path": "microsoft.extensions.localization.abstractions/10.0.1",
"hashPath": "microsoft.extensions.localization.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Logging/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9ItMpMLFZFJFqCuHLLbR3LiA4ahA8dMtYuXpXl2YamSDWZhYS9BruPprkftY0tYi2bQ0slNrixdFm+4kpz1g5w==",
"path": "microsoft.extensions.logging/10.0.1",
"hashPath": "microsoft.extensions.logging.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YkmyiPIWAXVb+lPIrM0LE5bbtLOJkCiRTFiHpkVOvhI7uTvCfoOHLEN0LcsY56GpSD7NqX3gJNpsaDe87/B3zg==",
"path": "microsoft.extensions.logging.abstractions/10.0.1",
"hashPath": "microsoft.extensions.logging.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Options/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-G6VVwywpJI4XIobetGHwg7wDOYC2L2XBYdtskxLaKF/Ynb5QBwLl7Q//wxAR2aVCLkMpoQrjSP9VoORkyddsNQ==",
"path": "microsoft.extensions.options/10.0.1",
"hashPath": "microsoft.extensions.options.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Options.ConfigurationExtensions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pL78/Im7O3WmxHzlKUsWTYchKL881udU7E26gCD3T0+/tPhWVfjPwMzfN/MRKU7aoFYcOiqcG2k1QTlH5woWow==",
"path": "microsoft.extensions.options.configurationextensions/10.0.1",
"hashPath": "microsoft.extensions.options.configurationextensions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DO8XrJkp5x4PddDuc/CH37yDBCs9BYN6ijlKyR3vMb55BP1Vwh90vOX8bNfnKxr5B2qEI3D8bvbY1fFbDveDHQ==",
"path": "microsoft.extensions.primitives/10.0.1",
"hashPath": "microsoft.extensions.primitives.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Validation/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5bcu9zWhgY8AZUN1ERNH0BQKFh10xlx4UrCh+0cDn7wB01QkrK4S6Jh45fCgEqmWJWVGqBS2g8MN0Lu/99Zgdg==",
"path": "microsoft.extensions.validation/10.0.1",
"hashPath": "microsoft.extensions.validation.10.0.1.nupkg.sha512"
},
"Microsoft.JSInterop/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pTfoYBjs7HKmTEk9cNWcSySdTKT8USjviLgmMaSs/YA0+oONufKy9hqqZ5EE4CNy9y24SDDc9lerXfV7aiVfWA==",
"path": "microsoft.jsinterop/10.0.1",
"hashPath": "microsoft.jsinterop.10.0.1.nupkg.sha512"
},
"MudBlazor/8.9.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KdjXMXiSvl6uNr+S2YDhGI1aX/TULMQejQSniMlp6QTss35NKFrJyrMAmN082HNvOObuKdnTtLpntJ7rM5Op/A==",
"path": "mudblazor/8.9.0",
"hashPath": "mudblazor.8.9.0.nupkg.sha512"
}
}
}
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Build","Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1 @@
{"ContentRoots":["/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/"],"Root":{"Children":{"_content":{"Children":{"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.js"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}}
+479
View File
@@ -0,0 +1,479 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v10.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v10.0": {
"Tasks.Module/1.0.0": {
"dependencies": {
"Blazored.LocalStorage": "4.5.0",
"Microsoft.AspNetCore.Components.Web": "10.0.1",
"Microsoft.Extensions.Configuration": "10.0.1",
"Microsoft.Extensions.Http": "10.0.1",
"Microsoft.Extensions.Localization": "10.0.1",
"MudBlazor": "8.9.0"
},
"runtime": {
"Tasks.Module.dll": {}
}
},
"Blazored.LocalStorage/4.5.0": {
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "10.0.1"
},
"runtime": {
"lib/net8.0/Blazored.LocalStorage.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"Microsoft.AspNetCore.Authorization/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Metadata": "10.0.1",
"Microsoft.Extensions.Diagnostics": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Authorization.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Components/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Authorization": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Components.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Components.Forms/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Components": "10.0.1",
"Microsoft.Extensions.Validation": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Components.Forms.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Components.Web/10.0.1": {
"dependencies": {
"Microsoft.AspNetCore.Components": "10.0.1",
"Microsoft.AspNetCore.Components.Forms": "10.0.1",
"Microsoft.Extensions.DependencyInjection": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1",
"Microsoft.JSInterop": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Components.Web.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.AspNetCore.Metadata/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Metadata.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Configuration/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Configuration.Binder/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.1",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.Binder.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.DependencyInjection/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.DependencyInjection.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Diagnostics/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.1",
"Microsoft.Extensions.Diagnostics.Abstractions": "10.0.1",
"Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Diagnostics.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Diagnostics.Abstractions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Http/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Diagnostics": "10.0.1",
"Microsoft.Extensions.Logging": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Http.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Localization/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Localization.Abstractions": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Localization.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Localization.Abstractions/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.Localization.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Logging/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Logging.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Options/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions/10.0.1": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.1",
"Microsoft.Extensions.Configuration.Binder": "10.0.1",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1",
"Microsoft.Extensions.Primitives": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Primitives/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.Extensions.Validation/10.0.1": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.1",
"Microsoft.Extensions.Options": "10.0.1"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Validation.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"Microsoft.JSInterop/10.0.1": {
"runtime": {
"lib/net10.0/Microsoft.JSInterop.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.125.57005"
}
}
},
"MudBlazor/8.9.0": {
"dependencies": {
"Microsoft.AspNetCore.Components": "10.0.1",
"Microsoft.AspNetCore.Components.Web": "10.0.1",
"Microsoft.Extensions.Localization": "10.0.1"
},
"runtime": {
"lib/net9.0/MudBlazor.dll": {
"assemblyVersion": "8.9.0.0",
"fileVersion": "8.9.0.0"
}
}
}
}
},
"libraries": {
"Tasks.Module/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Blazored.LocalStorage/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==",
"path": "blazored.localstorage/4.5.0",
"hashPath": "blazored.localstorage.4.5.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Authorization/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Y9QE0gH4Q4cR7ZRToFju47c1MoeqxaLHdpzOviqD2TmnGGAeDMT9AV56j2BOVm5CsJAVyI/USxLYrkk2NVinZA==",
"path": "microsoft.aspnetcore.authorization/10.0.1",
"hashPath": "microsoft.aspnetcore.authorization.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Components/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SbABcQ7soM9jC/HvPKrg/smQxsMD2gW9iHBRFtBiYTMSs5Vqh7+i47BTOe3OM3IGzly2FiOmeNHJhMYK7YFGWA==",
"path": "microsoft.aspnetcore.components/10.0.1",
"hashPath": "microsoft.aspnetcore.components.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Components.Forms/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aWUpLOz749gwMMaKe81tet+INC8nfskbauF2VO5Qr3lspj/l8S24zNLr95Bl8EwAizvBCNqwb8fPFU1dnn3WbA==",
"path": "microsoft.aspnetcore.components.forms/10.0.1",
"hashPath": "microsoft.aspnetcore.components.forms.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Components.Web/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-hX74ijqAiUfIo6WpvLWignGYp7tkrRR3KRVBErwFSAcsiHeaCxGM81fYRXd9rf+gkFUNoKvcSxYyVZc2vFJVXg==",
"path": "microsoft.aspnetcore.components.web/10.0.1",
"hashPath": "microsoft.aspnetcore.components.web.10.0.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Metadata/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6JrG03xROuR4mQIHGcT8OnaKVBoPLLbto5RicKQIUV3JIU7cZYKIWDAnk0SQcl7ziQr6R327D6QBOo+PbYnnrw==",
"path": "microsoft.aspnetcore.metadata/10.0.1",
"hashPath": "microsoft.aspnetcore.metadata.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-njoRekyMIK+smav8B6KL2YgIfUtlsRNuT7wvurpLW+m/hoRKVnoELk2YxnUnWRGScCd1rukLMxShwLqEOKowDg==",
"path": "microsoft.extensions.configuration/10.0.1",
"hashPath": "microsoft.extensions.configuration.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kPlU11hql+L9RjrN2N9/0GcRcRcZrNFlLLjadasFWeBORT6pL6OE+RYRk90GGCyVGSxTK+e1/f3dsMj5zpFFiQ==",
"path": "microsoft.extensions.configuration.abstractions/10.0.1",
"hashPath": "microsoft.extensions.configuration.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Binder/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Lp4CZIuTVXtlvkAnTq6QvMSW7+H62gX2cU2vdFxHQUxvrWTpi7LwYI3X+YAyIS0r12/p7gaosco7efIxL4yFNw==",
"path": "microsoft.extensions.configuration.binder/10.0.1",
"hashPath": "microsoft.extensions.configuration.binder.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-zerXV0GAR9LCSXoSIApbWn+Dq1/T+6vbXMHGduq1LoVQRHT0BXsGQEau0jeLUBUcsoF/NaUT8ADPu8b+eNcIyg==",
"path": "microsoft.extensions.dependencyinjection/10.0.1",
"hashPath": "microsoft.extensions.dependencyinjection.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oIy8fQxxbUsSrrOvgBqlVgOeCtDmrcynnTG+FQufcUWBrwyPfwlUkCDB2vaiBeYPyT+20u9/HeuHeBf+H4F/8g==",
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.1",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YaocqxscJLxLit0F5yq2XyB+9C7rSRfeTL7MJIl7XwaOoUO3i0EqfO2kmtjiRduYWw7yjcSINEApYZbzjau2gQ==",
"path": "microsoft.extensions.diagnostics/10.0.1",
"hashPath": "microsoft.extensions.diagnostics.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-QMoMrkNpnQym5mpfdxfxpRDuqLpsOuztguFvzH9p+Ex+do+uLFoi7UkAsBO4e9/tNR3eMFraFf2fOAi2cp3jjA==",
"path": "microsoft.extensions.diagnostics.abstractions/10.0.1",
"hashPath": "microsoft.extensions.diagnostics.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Http/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZXJup9ReE1Ot3M8jqcw1b/lnc8USxyYS3cyLsssU39u04TES9JNGviWUGIvP3K7mMU3TF7kQl2aS0SmVwegflw==",
"path": "microsoft.extensions.http/10.0.1",
"hashPath": "microsoft.extensions.http.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Localization/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yJBI3IRm9uTRu7cPc7i90/8+CuiiJJ5M4khj6iWQcYnq6VrG+H2U5GzpRLtkVCsgxc1LjtkNMEbSDatfBA+z5g==",
"path": "microsoft.extensions.localization/10.0.1",
"hashPath": "microsoft.extensions.localization.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Localization.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-TQSQWF+iZdtGNgPiu7gKUqrTEeRD/mhk7KeYiuEwmTUPbawsYfPSNzSvOOeueJ0nU1697X8HZ2vCp2ByHNHkZg==",
"path": "microsoft.extensions.localization.abstractions/10.0.1",
"hashPath": "microsoft.extensions.localization.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Logging/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9ItMpMLFZFJFqCuHLLbR3LiA4ahA8dMtYuXpXl2YamSDWZhYS9BruPprkftY0tYi2bQ0slNrixdFm+4kpz1g5w==",
"path": "microsoft.extensions.logging/10.0.1",
"hashPath": "microsoft.extensions.logging.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YkmyiPIWAXVb+lPIrM0LE5bbtLOJkCiRTFiHpkVOvhI7uTvCfoOHLEN0LcsY56GpSD7NqX3gJNpsaDe87/B3zg==",
"path": "microsoft.extensions.logging.abstractions/10.0.1",
"hashPath": "microsoft.extensions.logging.abstractions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Options/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-G6VVwywpJI4XIobetGHwg7wDOYC2L2XBYdtskxLaKF/Ynb5QBwLl7Q//wxAR2aVCLkMpoQrjSP9VoORkyddsNQ==",
"path": "microsoft.extensions.options/10.0.1",
"hashPath": "microsoft.extensions.options.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Options.ConfigurationExtensions/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pL78/Im7O3WmxHzlKUsWTYchKL881udU7E26gCD3T0+/tPhWVfjPwMzfN/MRKU7aoFYcOiqcG2k1QTlH5woWow==",
"path": "microsoft.extensions.options.configurationextensions/10.0.1",
"hashPath": "microsoft.extensions.options.configurationextensions.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DO8XrJkp5x4PddDuc/CH37yDBCs9BYN6ijlKyR3vMb55BP1Vwh90vOX8bNfnKxr5B2qEI3D8bvbY1fFbDveDHQ==",
"path": "microsoft.extensions.primitives/10.0.1",
"hashPath": "microsoft.extensions.primitives.10.0.1.nupkg.sha512"
},
"Microsoft.Extensions.Validation/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5bcu9zWhgY8AZUN1ERNH0BQKFh10xlx4UrCh+0cDn7wB01QkrK4S6Jh45fCgEqmWJWVGqBS2g8MN0Lu/99Zgdg==",
"path": "microsoft.extensions.validation/10.0.1",
"hashPath": "microsoft.extensions.validation.10.0.1.nupkg.sha512"
},
"Microsoft.JSInterop/10.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pTfoYBjs7HKmTEk9cNWcSySdTKT8USjviLgmMaSs/YA0+oONufKy9hqqZ5EE4CNy9y24SDDc9lerXfV7aiVfWA==",
"path": "microsoft.jsinterop/10.0.1",
"hashPath": "microsoft.jsinterop.10.0.1.nupkg.sha512"
},
"MudBlazor/8.9.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KdjXMXiSvl6uNr+S2YDhGI1aX/TULMQejQSniMlp6QTss35NKFrJyrMAmN082HNvOObuKdnTtLpntJ7rM5Op/A==",
"path": "mudblazor/8.9.0",
"hashPath": "mudblazor.8.9.0.nupkg.sha512"
}
}
}
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Build","Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1 @@
{"ContentRoots":["/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/"],"Root":{"Children":{"_content":{"Children":{"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.js"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}}
@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
+7
View File
@@ -0,0 +1,7 @@
// <auto-generated/>
namespace Microsoft.CodeAnalysis
{
internal sealed partial class EmbeddedAttribute : global::System.Attribute
{
}
}
@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Tasks.RCL")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Tasks.RCL")]
[assembly: System.Reflection.AssemblyTitleAttribute("Tasks.RCL")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -0,0 +1 @@
50bc87c35f6dfa380c824db8a180d9312e8e35c083e779f9d560d3ec0347eb23
@@ -0,0 +1,90 @@
is_global = true
build_property.MudDebugAnalyzer =
build_property.MudAllowedAttributePattern =
build_property.MudAllowedAttributeList =
build_property.TargetFramework = net10.0
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v10.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows,browser
build_property.RootNamespace = Tasks.RCL
build_property.RootNamespace = Tasks.RCL
build_property.ProjectDir = /mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 9.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = /mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL
build_property._RazorSourceGeneratorDebug =
build_property.EffectiveAnalysisLevelStyle = 10.0
build_property.EnableCodeStyleSeverity =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Dialogs/CreateCategoryDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZUNhdGVnb3J5RGlhbG9nLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Dialogs/CreateTagDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZVRhZ0RpYWxvZy5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Dialogs/CreateTaskDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZVRhc2tEaWFsb2cucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Dialogs/CreateViewDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZVZpZXdEaWFsb2cucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Dialogs/InputDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0lucHV0RGlhbG9nLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Layout/TasksLayout.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9MYXlvdXQvVGFza3NMYXlvdXQucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Pages/CategoriesPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9DYXRlZ29yaWVzUGFnZS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Pages/CategoryTreeItem.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9DYXRlZ29yeVRyZWVJdGVtLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Pages/TagsPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9UYWdzUGFnZS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Pages/TaskListPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9UYXNrTGlzdFBhZ2UucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Pages/TasksPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9UYXNrc1BhZ2UucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Pages/ViewPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9WaWV3UGFnZS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Sidebar/FolderSidebar.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9TaWRlYmFyL0ZvbGRlclNpZGViYXIucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/Sidebar/FolderTreeItem.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9TaWRlYmFyL0ZvbGRlclRyZWVJdGVtLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Components/TaskCard.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9UYXNrQ2FyZC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/_Imports.razor]
build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
@@ -0,0 +1,9 @@
// <auto-generated/>
global using Microsoft.Extensions.Validation.Embedded;
global using System;
global using System.Collections.Generic;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;
Binary file not shown.
@@ -0,0 +1 @@
e63008ba5c9c332f9b3ffd1b362c253648eea1a7a87e30ab75b4602fc04fe38b
@@ -0,0 +1,32 @@
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/bin/Debug/net10.0/Tasks.RCL.staticwebassets.runtime.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/bin/Debug/net10.0/Tasks.RCL.staticwebassets.endpoints.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/bin/Debug/net10.0/Tasks.RCL.deps.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/bin/Debug/net10.0/Tasks.RCL.dll
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/bin/Debug/net10.0/Tasks.RCL.pdb
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/EmbeddedAttribute.cs
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/ValidatableTypeAttribute.cs
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/Tasks.RCL.csproj.AssemblyReference.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/rpswa.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/Tasks.RCL.GeneratedMSBuildEditorConfig.editorconfig
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/Tasks.RCL.AssemblyInfoInputs.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/Tasks.RCL.AssemblyInfo.cs
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/Tasks.RCL.csproj.CoreCompileInputs.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/rjimswa.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/rjsmrazor.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/rjsmcshtml.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/scopedcss/bundle/Tasks.RCL.styles.css
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets.build.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets.build.json.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets.development.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets.build.endpoints.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/swae.build.ex.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets/msbuild.Tasks.RCL.Microsoft.AspNetCore.StaticWebAssets.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets/msbuild.Tasks.RCL.Microsoft.AspNetCore.StaticWebAssetEndpoints.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets/msbuild.build.Tasks.RCL.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets/msbuild.buildMultiTargeting.Tasks.RCL.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets/msbuild.buildTransitive.Tasks.RCL.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/staticwebassets.pack.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/Tasks.RCL.dll
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/refint/Tasks.RCL.dll
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/Tasks.RCL.pdb
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/Debug/net10.0/ref/Tasks.RCL.dll
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,9 @@
// <auto-generated/>
namespace Microsoft.Extensions.Validation.Embedded
{
[global::Microsoft.CodeAnalysis.EmbeddedAttribute]
[global::System.AttributeUsage(global::System.AttributeTargets.Class)]
internal sealed class ValidatableTypeAttribute : global::System.Attribute
{
}
}
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
{"GlobalPropertiesHash":"Otq7H//7uvGRdzRSVhYmwsOu/XuKwJXelR3QU1QymDA=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["O3d\u002BNzlNYG2HnVRW0vvHIKuLhI0TUzPk3vsxP4ykf6w=","SsgWqy9tjbYkup7B86b\u002Bo1rap9\u002BMcI\u002B4y5q1f4yP/wk=","4Ww1PcC36O8uTwn0UqrUfHUiI8fvFDB\u002BQ3N4z93LrEc=","PLL5a51blB9e63RkzQ7wYe1VDXo1jpww0WKS29ktFdk=","k241K\u002BQEsC8OmiwSsr83uECQtq12zAWuuhGiFHz39QU=","BcqCO1lHPo347cWJD4lOYtTahTMrtfPdqq/WfiaoEuU=","o\u002BmgJP\u002BnA/8nVNLdoKp3VwDQRcQ3RXw7E12zNV\u002BPLcU=","d/gKfiLN/9KRkyqbCHZiq0WWmvBkPm9YV5HV5EQFU34=","axHdEJydeHWI/Vqmd3k7ANedQsV5rU7Xh3YBqS90cs8=","k3ChD2h4UF056qERHJ7gjeYQtIToYMXvVQJpLvYYnR8=","jdg8\u002B/y2izp4DmqEIg5qyiaO2TFiEZjSeOrTBrkep4c=","DdCmctt0Jk\u002B6mRuUWW3tKpaV5eILf83sm6Qz\u002BJmNVMQ=","wOj6NqtB/Pv5jYfw8jZxXOCKyPKHpJnpC5byhqOVK5Y=","hIRJpGC8ttQXyrcgBVVld1K1TJXR4FTpM3CWShR40ug=","wlrN7UCr9hkxL1ckKf9gY6eWNUpgiQdSS03Y5t4eoDM=","thCvJjhf4U1EX3FRy/B\u002BOCPINA0UGTM9qzLXtwip6jM="],"CachedAssets":{},"CachedCopyCandidates":{}}
@@ -0,0 +1 @@
{"GlobalPropertiesHash":"Aerl0QrROI2X61DSgXRHLyMrjm++F76vHfoBuiT/M9I=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["O3d\u002BNzlNYG2HnVRW0vvHIKuLhI0TUzPk3vsxP4ykf6w=","SsgWqy9tjbYkup7B86b\u002Bo1rap9\u002BMcI\u002B4y5q1f4yP/wk=","4Ww1PcC36O8uTwn0UqrUfHUiI8fvFDB\u002BQ3N4z93LrEc=","PLL5a51blB9e63RkzQ7wYe1VDXo1jpww0WKS29ktFdk=","k241K\u002BQEsC8OmiwSsr83uECQtq12zAWuuhGiFHz39QU=","BcqCO1lHPo347cWJD4lOYtTahTMrtfPdqq/WfiaoEuU=","o\u002BmgJP\u002BnA/8nVNLdoKp3VwDQRcQ3RXw7E12zNV\u002BPLcU=","d/gKfiLN/9KRkyqbCHZiq0WWmvBkPm9YV5HV5EQFU34=","axHdEJydeHWI/Vqmd3k7ANedQsV5rU7Xh3YBqS90cs8=","k3ChD2h4UF056qERHJ7gjeYQtIToYMXvVQJpLvYYnR8=","jdg8\u002B/y2izp4DmqEIg5qyiaO2TFiEZjSeOrTBrkep4c=","DdCmctt0Jk\u002B6mRuUWW3tKpaV5eILf83sm6Qz\u002BJmNVMQ=","wOj6NqtB/Pv5jYfw8jZxXOCKyPKHpJnpC5byhqOVK5Y=","hIRJpGC8ttQXyrcgBVVld1K1TJXR4FTpM3CWShR40ug=","wlrN7UCr9hkxL1ckKf9gY6eWNUpgiQdSS03Y5t4eoDM=","thCvJjhf4U1EX3FRy/B\u002BOCPINA0UGTM9qzLXtwip6jM="],"CachedAssets":{},"CachedCopyCandidates":{}}
+1
View File
@@ -0,0 +1 @@
{"GlobalPropertiesHash":"OyXOKiVMlq9aFqs1Y+5GUlZuHe/dVgc+r3sBd1BRuxM=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["O3d\u002BNzlNYG2HnVRW0vvHIKuLhI0TUzPk3vsxP4ykf6w=","SsgWqy9tjbYkup7B86b\u002Bo1rap9\u002BMcI\u002B4y5q1f4yP/wk=","4Ww1PcC36O8uTwn0UqrUfHUiI8fvFDB\u002BQ3N4z93LrEc=","PLL5a51blB9e63RkzQ7wYe1VDXo1jpww0WKS29ktFdk=","k241K\u002BQEsC8OmiwSsr83uECQtq12zAWuuhGiFHz39QU=","BcqCO1lHPo347cWJD4lOYtTahTMrtfPdqq/WfiaoEuU=","o\u002BmgJP\u002BnA/8nVNLdoKp3VwDQRcQ3RXw7E12zNV\u002BPLcU=","d/gKfiLN/9KRkyqbCHZiq0WWmvBkPm9YV5HV5EQFU34=","axHdEJydeHWI/Vqmd3k7ANedQsV5rU7Xh3YBqS90cs8=","k3ChD2h4UF056qERHJ7gjeYQtIToYMXvVQJpLvYYnR8=","jdg8\u002B/y2izp4DmqEIg5qyiaO2TFiEZjSeOrTBrkep4c=","DdCmctt0Jk\u002B6mRuUWW3tKpaV5eILf83sm6Qz\u002BJmNVMQ=","wOj6NqtB/Pv5jYfw8jZxXOCKyPKHpJnpC5byhqOVK5Y=","hIRJpGC8ttQXyrcgBVVld1K1TJXR4FTpM3CWShR40ug=","wlrN7UCr9hkxL1ckKf9gY6eWNUpgiQdSS03Y5t4eoDM=","thCvJjhf4U1EX3FRy/B\u002BOCPINA0UGTM9qzLXtwip6jM="],"CachedAssets":{},"CachedCopyCandidates":{}}
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Build","Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1 @@
{"Version":1,"Hash":"zncWPRnVOZlrjfaBHH4IXKAEogu6sL2EsnDSCUGvgJA=","Source":"Tasks.RCL","BasePath":"_content/Tasks.RCL","Mode":"Default","ManifestType":"Build","ReferencedProjectsConfiguration":[],"DiscoveryPatterns":[],"Assets":[{"Identity":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","SourceId":"MudBlazor","SourceType":"Package","ContentRoot":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/","BasePath":"_content/MudBlazor","RelativePath":"MudBlazor.min.css","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":"","AssetMergeSource":"","RelatedAsset":"","AssetTraitName":"","AssetTraitValue":"","Fingerprint":"sowobu9fea","Integrity":"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","FileLength":606059,"LastWriteTime":"2025-07-01T21:24:18+00:00"},{"Identity":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","SourceId":"MudBlazor","SourceType":"Package","ContentRoot":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/","BasePath":"_content/MudBlazor","RelativePath":"MudBlazor.min.js","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":"","AssetMergeSource":"","RelatedAsset":"","AssetTraitName":"","AssetTraitValue":"","Fingerprint":"b8x8f7e52z","Integrity":"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","FileLength":73366,"LastWriteTime":"2025-07-01T21:24:18+00:00"}],"Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1 @@
zncWPRnVOZlrjfaBHH4IXKAEogu6sL2EsnDSCUGvgJA=
@@ -0,0 +1 @@
{"ContentRoots":["/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/"],"Root":{"Children":{"_content":{"Children":{"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.js"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}}
@@ -0,0 +1,4 @@
<Project>
<Import Project="Microsoft.AspNetCore.StaticWebAssetEndpoints.props" />
<Import Project="Microsoft.AspNetCore.StaticWebAssets.props" />
</Project>
@@ -0,0 +1,3 @@
<Project>
<Import Project="../build/Tasks.RCL.props" />
</Project>
@@ -0,0 +1,3 @@
<Project>
<Import Project="../buildMultiTargeting/Tasks.RCL.props" />
</Project>
@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
+7
View File
@@ -0,0 +1,7 @@
// <auto-generated/>
namespace Microsoft.CodeAnalysis
{
internal sealed partial class EmbeddedAttribute : global::System.Attribute
{
}
}
@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Tasks.Module")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Tasks.Module")]
[assembly: System.Reflection.AssemblyTitleAttribute("Tasks.Module")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -0,0 +1 @@
cc5037090c7c38b0bcd4ac026ac1fc5881ecf39e3891e3985f5fc572a81e9a66
@@ -0,0 +1,90 @@
is_global = true
build_property.MudDebugAnalyzer =
build_property.MudAllowedAttributePattern =
build_property.MudAllowedAttributeList =
build_property.TargetFramework = net10.0
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v10.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows,browser
build_property.RootNamespace = Tasks.Module
build_property.RootNamespace = Tasks.Module
build_property.ProjectDir = /mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 9.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = /mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module
build_property._RazorSourceGeneratorDebug =
build_property.EffectiveAnalysisLevelStyle = 10.0
build_property.EnableCodeStyleSeverity =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Dialogs/CreateCategoryDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZUNhdGVnb3J5RGlhbG9nLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Dialogs/CreateTagDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZVRhZ0RpYWxvZy5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Dialogs/CreateTaskDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZVRhc2tEaWFsb2cucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Dialogs/CreateViewDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0NyZWF0ZVZpZXdEaWFsb2cucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Dialogs/InputDialog.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9EaWFsb2dzL0lucHV0RGlhbG9nLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Layout/TasksLayout.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9MYXlvdXQvVGFza3NMYXlvdXQucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Pages/CategoriesPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9DYXRlZ29yaWVzUGFnZS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Pages/CategoryTreeItem.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9DYXRlZ29yeVRyZWVJdGVtLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Pages/TagsPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9UYWdzUGFnZS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Pages/TaskListPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9UYXNrTGlzdFBhZ2UucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Pages/TasksPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9UYXNrc1BhZ2UucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Pages/ViewPage.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9WaWV3UGFnZS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Sidebar/FolderSidebar.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9TaWRlYmFyL0ZvbGRlclNpZGViYXIucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/Sidebar/FolderTreeItem.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9TaWRlYmFyL0ZvbGRlclRyZWVJdGVtLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Components/TaskCard.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9UYXNrQ2FyZC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/_Imports.razor]
build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
@@ -0,0 +1,9 @@
// <auto-generated/>
global using Microsoft.Extensions.Validation.Embedded;
global using System;
global using System.Collections.Generic;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;
Binary file not shown.
@@ -0,0 +1 @@
b4c4de6ba275637e14d9de368ae7b5cc26ae3626d1dd3fd0e4c6f159927814ac
@@ -0,0 +1,32 @@
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/bin/Release/net10.0/Tasks.Module.staticwebassets.runtime.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/bin/Release/net10.0/Tasks.Module.staticwebassets.endpoints.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/bin/Release/net10.0/Tasks.Module.deps.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/bin/Release/net10.0/Tasks.Module.dll
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/bin/Release/net10.0/Tasks.Module.pdb
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/EmbeddedAttribute.cs
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/ValidatableTypeAttribute.cs
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/Tasks.Module.csproj.AssemblyReference.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/rpswa.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/Tasks.Module.GeneratedMSBuildEditorConfig.editorconfig
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/Tasks.Module.AssemblyInfoInputs.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/Tasks.Module.AssemblyInfo.cs
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/Tasks.Module.csproj.CoreCompileInputs.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/rjimswa.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/rjsmrazor.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/rjsmcshtml.dswa.cache.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/scopedcss/bundle/Tasks.Module.styles.css
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets.build.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets.build.json.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets.development.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets.build.endpoints.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/swae.build.ex.cache
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets/msbuild.Tasks.Module.Microsoft.AspNetCore.StaticWebAssets.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets/msbuild.Tasks.Module.Microsoft.AspNetCore.StaticWebAssetEndpoints.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets/msbuild.build.Tasks.Module.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets/msbuild.buildMultiTargeting.Tasks.Module.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets/msbuild.buildTransitive.Tasks.Module.props
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/staticwebassets.pack.json
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/Tasks.Module.dll
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/refint/Tasks.Module.dll
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/Tasks.Module.pdb
/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/Release/net10.0/ref/Tasks.Module.dll
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,9 @@
// <auto-generated/>
namespace Microsoft.Extensions.Validation.Embedded
{
[global::Microsoft.CodeAnalysis.EmbeddedAttribute]
[global::System.AttributeUsage(global::System.AttributeTargets.Class)]
internal sealed class ValidatableTypeAttribute : global::System.Attribute
{
}
}
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
{"GlobalPropertiesHash":"mo1tYFwiAuIp5fC3qIfK+8ImM9xrZ7MaoiXsa//f3Ck=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["/N2D/mqAqpALgwbEdFbi8S8KNpHsRFoOgZxnxHbToC4=","qWzQOvs1iJlcwK8YnY6iqPTtF1TaBtZXyg89Vpv0u/g=","wqp3AudXYcQkIpMYQc3bM1OjUO4J62Alowfpdfp5bYA=","C821XotXv2j0aim0V4w4Yiss2hbK1hiUWDxqQlz7pBs=","eo0nbkFjqTi5jJKiQZyo63fe5OhY4JaygFDqcnPt\u002BEk=","PpWp49SAxrxLkzLLBDCyBizI03y3XDDQUwZ/1M7h56U=","DHCnUIlrAomervYcANvet0oV7Ut8MX6Anz3u3eky1YA=","rqipaBjtuso8uSlBpe7yuoBZF39rFbpEZ1/cBHn\u002BdHY=","msH\u002BuGafFfBYBC8VOspbf9\u002B6uNp0tVjNlqIZyh2C2JQ=","yfirtdHhiHp2KrFsPDwlPUy9JbPgsGsPq\u002BK8ruDTM1c=","Ki8hlhOgEvS6zgqtfYqeWRcM5EOai/6uSf036N1n92o=","LGzhJIwq8zqU6BJv8GaOXkLBcTH1Qp21S2oUENjRjK8=","YgpOOlN48Od\u002B6QWlVRfTKccpoAufF6yFJ4TozBVyqJk=","rJNhE7jzlk/Wd\u002BK1uAZOMcC7WtuouPmfXelUAAm3kl8=","dNNhQG650gOxzDs3xRlLlLVvQbD5PmsxsTAiYJXVgGo=","wjcngL1m\u002BDYIkmy41eIPxsRE8wdYrKR6ECjmiSRNkW4="],"CachedAssets":{},"CachedCopyCandidates":{}}
@@ -0,0 +1 @@
{"GlobalPropertiesHash":"clKIKUUFDdQ1OhRjYLcIOwREFvIbv8NOqmAWsbwfAWE=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["/N2D/mqAqpALgwbEdFbi8S8KNpHsRFoOgZxnxHbToC4=","qWzQOvs1iJlcwK8YnY6iqPTtF1TaBtZXyg89Vpv0u/g=","wqp3AudXYcQkIpMYQc3bM1OjUO4J62Alowfpdfp5bYA=","C821XotXv2j0aim0V4w4Yiss2hbK1hiUWDxqQlz7pBs=","eo0nbkFjqTi5jJKiQZyo63fe5OhY4JaygFDqcnPt\u002BEk=","PpWp49SAxrxLkzLLBDCyBizI03y3XDDQUwZ/1M7h56U=","DHCnUIlrAomervYcANvet0oV7Ut8MX6Anz3u3eky1YA=","rqipaBjtuso8uSlBpe7yuoBZF39rFbpEZ1/cBHn\u002BdHY=","msH\u002BuGafFfBYBC8VOspbf9\u002B6uNp0tVjNlqIZyh2C2JQ=","yfirtdHhiHp2KrFsPDwlPUy9JbPgsGsPq\u002BK8ruDTM1c=","Ki8hlhOgEvS6zgqtfYqeWRcM5EOai/6uSf036N1n92o=","LGzhJIwq8zqU6BJv8GaOXkLBcTH1Qp21S2oUENjRjK8=","YgpOOlN48Od\u002B6QWlVRfTKccpoAufF6yFJ4TozBVyqJk=","rJNhE7jzlk/Wd\u002BK1uAZOMcC7WtuouPmfXelUAAm3kl8=","dNNhQG650gOxzDs3xRlLlLVvQbD5PmsxsTAiYJXVgGo=","wjcngL1m\u002BDYIkmy41eIPxsRE8wdYrKR6ECjmiSRNkW4="],"CachedAssets":{},"CachedCopyCandidates":{}}
@@ -0,0 +1 @@
{"GlobalPropertiesHash":"05Mb6XzTDSYZnyA4Nt19ruByunu2GjHaW1tLdN3EXeA=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["/N2D/mqAqpALgwbEdFbi8S8KNpHsRFoOgZxnxHbToC4=","qWzQOvs1iJlcwK8YnY6iqPTtF1TaBtZXyg89Vpv0u/g=","wqp3AudXYcQkIpMYQc3bM1OjUO4J62Alowfpdfp5bYA=","C821XotXv2j0aim0V4w4Yiss2hbK1hiUWDxqQlz7pBs=","eo0nbkFjqTi5jJKiQZyo63fe5OhY4JaygFDqcnPt\u002BEk=","PpWp49SAxrxLkzLLBDCyBizI03y3XDDQUwZ/1M7h56U=","DHCnUIlrAomervYcANvet0oV7Ut8MX6Anz3u3eky1YA=","rqipaBjtuso8uSlBpe7yuoBZF39rFbpEZ1/cBHn\u002BdHY=","msH\u002BuGafFfBYBC8VOspbf9\u002B6uNp0tVjNlqIZyh2C2JQ=","yfirtdHhiHp2KrFsPDwlPUy9JbPgsGsPq\u002BK8ruDTM1c=","Ki8hlhOgEvS6zgqtfYqeWRcM5EOai/6uSf036N1n92o=","LGzhJIwq8zqU6BJv8GaOXkLBcTH1Qp21S2oUENjRjK8=","YgpOOlN48Od\u002B6QWlVRfTKccpoAufF6yFJ4TozBVyqJk=","rJNhE7jzlk/Wd\u002BK1uAZOMcC7WtuouPmfXelUAAm3kl8=","dNNhQG650gOxzDs3xRlLlLVvQbD5PmsxsTAiYJXVgGo=","wjcngL1m\u002BDYIkmy41eIPxsRE8wdYrKR6ECjmiSRNkW4="],"CachedAssets":{},"CachedCopyCandidates":{}}
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Build","Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1 @@
{"Version":1,"Hash":"9oVC4u6HwEsd1bCwhsYyP+CQnbmMpCBnpxDTVH/a/1k=","Source":"Tasks.Module","BasePath":"_content/Tasks.Module","Mode":"Default","ManifestType":"Build","ReferencedProjectsConfiguration":[],"DiscoveryPatterns":[],"Assets":[{"Identity":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","SourceId":"MudBlazor","SourceType":"Package","ContentRoot":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/","BasePath":"_content/MudBlazor","RelativePath":"MudBlazor.min.css","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":"","AssetMergeSource":"","RelatedAsset":"","AssetTraitName":"","AssetTraitValue":"","Fingerprint":"sowobu9fea","Integrity":"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","FileLength":606059,"LastWriteTime":"2025-07-01T21:24:18+00:00"},{"Identity":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","SourceId":"MudBlazor","SourceType":"Package","ContentRoot":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/","BasePath":"_content/MudBlazor","RelativePath":"MudBlazor.min.js","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":"","AssetMergeSource":"","RelatedAsset":"","AssetTraitName":"","AssetTraitValue":"","Fingerprint":"b8x8f7e52z","Integrity":"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","FileLength":73366,"LastWriteTime":"2025-07-01T21:24:18+00:00"}],"Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1 @@
9oVC4u6HwEsd1bCwhsYyP+CQnbmMpCBnpxDTVH/a/1k=
@@ -0,0 +1 @@
{"ContentRoots":["/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/"],"Root":{"Children":{"_content":{"Children":{"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudBlazor.min.js"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}}
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Publish","Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"_content/MudBlazor/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"_content/MudBlazor/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1 @@
{"Version":1,"Hash":"x/F4OKRwY8umfFPTwpGGstxMwIbG9FFW7IfMMpGeeA4=","Source":"Tasks.Module","BasePath":"_content/Tasks.Module","Mode":"Default","ManifestType":"Publish","ReferencedProjectsConfiguration":[],"DiscoveryPatterns":[],"Assets":[{"Identity":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","SourceId":"MudBlazor","SourceType":"Package","ContentRoot":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/","BasePath":"_content/MudBlazor","RelativePath":"MudBlazor.min.css","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":"","AssetMergeSource":"","RelatedAsset":"","AssetTraitName":"","AssetTraitValue":"","Fingerprint":"sowobu9fea","Integrity":"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","FileLength":606059,"LastWriteTime":"2025-07-01T21:24:18+00:00"},{"Identity":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","SourceId":"MudBlazor","SourceType":"Package","ContentRoot":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/","BasePath":"_content/MudBlazor","RelativePath":"MudBlazor.min.js","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":"","AssetMergeSource":"","RelatedAsset":"","AssetTraitName":"","AssetTraitValue":"","Fingerprint":"b8x8f7e52z","Integrity":"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","FileLength":73366,"LastWriteTime":"2025-07-01T21:24:18+00:00"}],"Endpoints":[{"Route":"_content/MudBlazor/MudBlazor.min.b8x8f7e52z.js","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"b8x8f7e52z"},{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.js"}]},{"Route":"_content/MudBlazor/MudBlazor.min.css","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="}]},{"Route":"_content/MudBlazor/MudBlazor.min.js","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.js","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"73366"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-O2UJyVCl+4RaA/jZS/WQ4tMRIZbpXtfRhr5eVl0xLm8="}]},{"Route":"_content/MudBlazor/MudBlazor.min.sowobu9fea.css","AssetFile":"/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/MudBlazor.min.css","Selectors":[],"ResponseHeaders":[{"Name":"Accept-Ranges","Value":"bytes"},{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"606059"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM=\""},{"Name":"Last-Modified","Value":"Tue, 01 Jul 2025 21:24:18 GMT"}],"EndpointProperties":[{"Name":"fingerprint","Value":"sowobu9fea"},{"Name":"integrity","Value":"sha256-fC5+7WJvRi9RO0JSMRTe5Fw/ybv1XWp6LgTNpuRA4vM="},{"Name":"label","Value":"_content/MudBlazor/MudBlazor.min.css"}]}]}
@@ -0,0 +1,4 @@
<Project>
<Import Project="Microsoft.AspNetCore.StaticWebAssetEndpoints.props" />
<Import Project="Microsoft.AspNetCore.StaticWebAssets.props" />
</Project>
@@ -0,0 +1,3 @@
<Project>
<Import Project="../build/Tasks.Module.props" />
</Project>
@@ -0,0 +1,3 @@
<Project>
<Import Project="../buildMultiTargeting/Tasks.Module.props" />
</Project>
+367
View File
@@ -0,0 +1,367 @@
{
"format": 1,
"restore": {
"/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Tasks.Module.csproj": {}
},
"projects": {
"/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Tasks.Module.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Tasks.Module.csproj",
"projectName": "Tasks.Module",
"projectPath": "/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Tasks.Module.csproj",
"packagesPath": "/home/yla/.nuget/packages/",
"outputPath": "/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/yla/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net10.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
},
"SdkAnalysisLevel": "10.0.100"
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"dependencies": {
"Blazored.LocalStorage": {
"target": "Package",
"version": "[4.5.0, )"
},
"Microsoft.AspNetCore.Components.Web": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Configuration": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Http": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Localization": {
"target": "Package",
"version": "[10.0.1, )"
},
"MudBlazor": {
"target": "Package",
"version": "[8.9.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/10.0.102/PortableRuntimeIdentifierGraph.json",
"packagesToPrune": {
"Microsoft.CSharp": "(,4.7.32767]",
"Microsoft.VisualBasic": "(,10.4.32767]",
"Microsoft.Win32.Primitives": "(,4.3.32767]",
"Microsoft.Win32.Registry": "(,5.0.32767]",
"runtime.any.System.Collections": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.any.System.Globalization": "(,4.3.32767]",
"runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.any.System.IO": "(,4.3.32767]",
"runtime.any.System.Reflection": "(,4.3.32767]",
"runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.any.System.Runtime": "(,4.3.32767]",
"runtime.any.System.Runtime.Handles": "(,4.3.32767]",
"runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.any.System.Text.Encoding": "(,4.3.32767]",
"runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.any.System.Threading.Tasks": "(,4.3.32767]",
"runtime.any.System.Threading.Timer": "(,4.3.32767]",
"runtime.aot.System.Collections": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.aot.System.Globalization": "(,4.3.32767]",
"runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.aot.System.IO": "(,4.3.32767]",
"runtime.aot.System.Reflection": "(,4.3.32767]",
"runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.aot.System.Runtime": "(,4.3.32767]",
"runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
"runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
"runtime.aot.System.Threading.Timer": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.unix.System.Console": "(,4.3.32767]",
"runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
"runtime.unix.System.Net.Primitives": "(,4.3.32767]",
"runtime.unix.System.Net.Sockets": "(,4.3.32767]",
"runtime.unix.System.Private.Uri": "(,4.3.32767]",
"runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.win.System.Console": "(,4.3.32767]",
"runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.win.System.IO.FileSystem": "(,4.3.32767]",
"runtime.win.System.Net.Primitives": "(,4.3.32767]",
"runtime.win.System.Net.Sockets": "(,4.3.32767]",
"runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7.System.Private.Uri": "(,4.3.32767]",
"runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
"System.AppContext": "(,4.3.32767]",
"System.Buffers": "(,5.0.32767]",
"System.Collections": "(,4.3.32767]",
"System.Collections.Concurrent": "(,4.3.32767]",
"System.Collections.Immutable": "(,10.0.32767]",
"System.Collections.NonGeneric": "(,4.3.32767]",
"System.Collections.Specialized": "(,4.3.32767]",
"System.ComponentModel": "(,4.3.32767]",
"System.ComponentModel.Annotations": "(,4.3.32767]",
"System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
"System.ComponentModel.Primitives": "(,4.3.32767]",
"System.ComponentModel.TypeConverter": "(,4.3.32767]",
"System.Console": "(,4.3.32767]",
"System.Data.Common": "(,4.3.32767]",
"System.Data.DataSetExtensions": "(,4.4.32767]",
"System.Diagnostics.Contracts": "(,4.3.32767]",
"System.Diagnostics.Debug": "(,4.3.32767]",
"System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
"System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
"System.Diagnostics.Process": "(,4.3.32767]",
"System.Diagnostics.StackTrace": "(,4.3.32767]",
"System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
"System.Diagnostics.Tools": "(,4.3.32767]",
"System.Diagnostics.TraceSource": "(,4.3.32767]",
"System.Diagnostics.Tracing": "(,4.3.32767]",
"System.Drawing.Primitives": "(,4.3.32767]",
"System.Dynamic.Runtime": "(,4.3.32767]",
"System.Formats.Asn1": "(,10.0.32767]",
"System.Formats.Tar": "(,10.0.32767]",
"System.Globalization": "(,4.3.32767]",
"System.Globalization.Calendars": "(,4.3.32767]",
"System.Globalization.Extensions": "(,4.3.32767]",
"System.IO": "(,4.3.32767]",
"System.IO.Compression": "(,4.3.32767]",
"System.IO.Compression.ZipFile": "(,4.3.32767]",
"System.IO.FileSystem": "(,4.3.32767]",
"System.IO.FileSystem.AccessControl": "(,4.4.32767]",
"System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
"System.IO.FileSystem.Primitives": "(,4.3.32767]",
"System.IO.FileSystem.Watcher": "(,4.3.32767]",
"System.IO.IsolatedStorage": "(,4.3.32767]",
"System.IO.MemoryMappedFiles": "(,4.3.32767]",
"System.IO.Pipelines": "(,10.0.32767]",
"System.IO.Pipes": "(,4.3.32767]",
"System.IO.Pipes.AccessControl": "(,5.0.32767]",
"System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
"System.Linq": "(,4.3.32767]",
"System.Linq.AsyncEnumerable": "(,10.0.32767]",
"System.Linq.Expressions": "(,4.3.32767]",
"System.Linq.Parallel": "(,4.3.32767]",
"System.Linq.Queryable": "(,4.3.32767]",
"System.Memory": "(,5.0.32767]",
"System.Net.Http": "(,4.3.32767]",
"System.Net.Http.Json": "(,10.0.32767]",
"System.Net.NameResolution": "(,4.3.32767]",
"System.Net.NetworkInformation": "(,4.3.32767]",
"System.Net.Ping": "(,4.3.32767]",
"System.Net.Primitives": "(,4.3.32767]",
"System.Net.Requests": "(,4.3.32767]",
"System.Net.Security": "(,4.3.32767]",
"System.Net.ServerSentEvents": "(,10.0.32767]",
"System.Net.Sockets": "(,4.3.32767]",
"System.Net.WebHeaderCollection": "(,4.3.32767]",
"System.Net.WebSockets": "(,4.3.32767]",
"System.Net.WebSockets.Client": "(,4.3.32767]",
"System.Numerics.Vectors": "(,5.0.32767]",
"System.ObjectModel": "(,4.3.32767]",
"System.Private.DataContractSerialization": "(,4.3.32767]",
"System.Private.Uri": "(,4.3.32767]",
"System.Reflection": "(,4.3.32767]",
"System.Reflection.DispatchProxy": "(,6.0.32767]",
"System.Reflection.Emit": "(,4.7.32767]",
"System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
"System.Reflection.Emit.Lightweight": "(,4.7.32767]",
"System.Reflection.Extensions": "(,4.3.32767]",
"System.Reflection.Metadata": "(,10.0.32767]",
"System.Reflection.Primitives": "(,4.3.32767]",
"System.Reflection.TypeExtensions": "(,4.3.32767]",
"System.Resources.Reader": "(,4.3.32767]",
"System.Resources.ResourceManager": "(,4.3.32767]",
"System.Resources.Writer": "(,4.3.32767]",
"System.Runtime": "(,4.3.32767]",
"System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
"System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
"System.Runtime.Extensions": "(,4.3.32767]",
"System.Runtime.Handles": "(,4.3.32767]",
"System.Runtime.InteropServices": "(,4.3.32767]",
"System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
"System.Runtime.Loader": "(,4.3.32767]",
"System.Runtime.Numerics": "(,4.3.32767]",
"System.Runtime.Serialization.Formatters": "(,4.3.32767]",
"System.Runtime.Serialization.Json": "(,4.3.32767]",
"System.Runtime.Serialization.Primitives": "(,4.3.32767]",
"System.Runtime.Serialization.Xml": "(,4.3.32767]",
"System.Security.AccessControl": "(,6.0.32767]",
"System.Security.Claims": "(,4.3.32767]",
"System.Security.Cryptography.Algorithms": "(,4.3.32767]",
"System.Security.Cryptography.Cng": "(,5.0.32767]",
"System.Security.Cryptography.Csp": "(,4.3.32767]",
"System.Security.Cryptography.Encoding": "(,4.3.32767]",
"System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
"System.Security.Cryptography.Primitives": "(,4.3.32767]",
"System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
"System.Security.Principal": "(,4.3.32767]",
"System.Security.Principal.Windows": "(,5.0.32767]",
"System.Security.SecureString": "(,4.3.32767]",
"System.Text.Encoding": "(,4.3.32767]",
"System.Text.Encoding.CodePages": "(,10.0.32767]",
"System.Text.Encoding.Extensions": "(,4.3.32767]",
"System.Text.Encodings.Web": "(,10.0.32767]",
"System.Text.Json": "(,10.0.32767]",
"System.Text.RegularExpressions": "(,4.3.32767]",
"System.Threading": "(,4.3.32767]",
"System.Threading.AccessControl": "(,10.0.32767]",
"System.Threading.Channels": "(,10.0.32767]",
"System.Threading.Overlapped": "(,4.3.32767]",
"System.Threading.Tasks": "(,4.3.32767]",
"System.Threading.Tasks.Dataflow": "(,10.0.32767]",
"System.Threading.Tasks.Extensions": "(,5.0.32767]",
"System.Threading.Tasks.Parallel": "(,4.3.32767]",
"System.Threading.Thread": "(,4.3.32767]",
"System.Threading.ThreadPool": "(,4.3.32767]",
"System.Threading.Timer": "(,4.3.32767]",
"System.ValueTuple": "(,4.5.32767]",
"System.Xml.ReaderWriter": "(,4.3.32767]",
"System.Xml.XDocument": "(,4.3.32767]",
"System.Xml.XmlDocument": "(,4.3.32767]",
"System.Xml.XmlSerializer": "(,4.3.32767]",
"System.Xml.XPath": "(,4.3.32767]",
"System.Xml.XPath.XDocument": "(,5.0.32767]"
}
}
}
}
}
}
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/yla/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/yla/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/home/yla/.nuget/packages/" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)mudblazor/8.9.0/buildTransitive/MudBlazor.props" Condition="Exists('$(NuGetPackageRoot)mudblazor/8.9.0/buildTransitive/MudBlazor.props')" />
</ImportGroup>
</Project>
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder/10.0.1/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder/10.0.1/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers/10.0.1/buildTransitive/netstandard2.0/Microsoft.AspNetCore.Components.Analyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers/10.0.1/buildTransitive/netstandard2.0/Microsoft.AspNetCore.Components.Analyzers.targets')" />
<Import Project="$(NuGetPackageRoot)mudblazor/8.9.0/build/MudBlazor.targets" Condition="Exists('$(NuGetPackageRoot)mudblazor/8.9.0/build/MudBlazor.targets')" />
</ImportGroup>
</Project>
+367
View File
@@ -0,0 +1,367 @@
{
"format": 1,
"restore": {
"/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Tasks.RCL.csproj": {}
},
"projects": {
"/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Tasks.RCL.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Tasks.RCL.csproj",
"projectName": "Tasks.RCL",
"projectPath": "/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/Tasks.RCL.csproj",
"packagesPath": "/home/yla/.nuget/packages/",
"outputPath": "/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks/Tasks.RCL/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/yla/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net10.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
},
"SdkAnalysisLevel": "10.0.100"
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"dependencies": {
"Blazored.LocalStorage": {
"target": "Package",
"version": "[4.5.0, )"
},
"Microsoft.AspNetCore.Components.Web": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Configuration": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Http": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Localization": {
"target": "Package",
"version": "[10.0.1, )"
},
"MudBlazor": {
"target": "Package",
"version": "[8.9.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/10.0.102/PortableRuntimeIdentifierGraph.json",
"packagesToPrune": {
"Microsoft.CSharp": "(,4.7.32767]",
"Microsoft.VisualBasic": "(,10.4.32767]",
"Microsoft.Win32.Primitives": "(,4.3.32767]",
"Microsoft.Win32.Registry": "(,5.0.32767]",
"runtime.any.System.Collections": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.any.System.Globalization": "(,4.3.32767]",
"runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.any.System.IO": "(,4.3.32767]",
"runtime.any.System.Reflection": "(,4.3.32767]",
"runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.any.System.Runtime": "(,4.3.32767]",
"runtime.any.System.Runtime.Handles": "(,4.3.32767]",
"runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.any.System.Text.Encoding": "(,4.3.32767]",
"runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.any.System.Threading.Tasks": "(,4.3.32767]",
"runtime.any.System.Threading.Timer": "(,4.3.32767]",
"runtime.aot.System.Collections": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.aot.System.Globalization": "(,4.3.32767]",
"runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.aot.System.IO": "(,4.3.32767]",
"runtime.aot.System.Reflection": "(,4.3.32767]",
"runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.aot.System.Runtime": "(,4.3.32767]",
"runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
"runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
"runtime.aot.System.Threading.Timer": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.unix.System.Console": "(,4.3.32767]",
"runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
"runtime.unix.System.Net.Primitives": "(,4.3.32767]",
"runtime.unix.System.Net.Sockets": "(,4.3.32767]",
"runtime.unix.System.Private.Uri": "(,4.3.32767]",
"runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.win.System.Console": "(,4.3.32767]",
"runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.win.System.IO.FileSystem": "(,4.3.32767]",
"runtime.win.System.Net.Primitives": "(,4.3.32767]",
"runtime.win.System.Net.Sockets": "(,4.3.32767]",
"runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7.System.Private.Uri": "(,4.3.32767]",
"runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
"System.AppContext": "(,4.3.32767]",
"System.Buffers": "(,5.0.32767]",
"System.Collections": "(,4.3.32767]",
"System.Collections.Concurrent": "(,4.3.32767]",
"System.Collections.Immutable": "(,10.0.32767]",
"System.Collections.NonGeneric": "(,4.3.32767]",
"System.Collections.Specialized": "(,4.3.32767]",
"System.ComponentModel": "(,4.3.32767]",
"System.ComponentModel.Annotations": "(,4.3.32767]",
"System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
"System.ComponentModel.Primitives": "(,4.3.32767]",
"System.ComponentModel.TypeConverter": "(,4.3.32767]",
"System.Console": "(,4.3.32767]",
"System.Data.Common": "(,4.3.32767]",
"System.Data.DataSetExtensions": "(,4.4.32767]",
"System.Diagnostics.Contracts": "(,4.3.32767]",
"System.Diagnostics.Debug": "(,4.3.32767]",
"System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
"System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
"System.Diagnostics.Process": "(,4.3.32767]",
"System.Diagnostics.StackTrace": "(,4.3.32767]",
"System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
"System.Diagnostics.Tools": "(,4.3.32767]",
"System.Diagnostics.TraceSource": "(,4.3.32767]",
"System.Diagnostics.Tracing": "(,4.3.32767]",
"System.Drawing.Primitives": "(,4.3.32767]",
"System.Dynamic.Runtime": "(,4.3.32767]",
"System.Formats.Asn1": "(,10.0.32767]",
"System.Formats.Tar": "(,10.0.32767]",
"System.Globalization": "(,4.3.32767]",
"System.Globalization.Calendars": "(,4.3.32767]",
"System.Globalization.Extensions": "(,4.3.32767]",
"System.IO": "(,4.3.32767]",
"System.IO.Compression": "(,4.3.32767]",
"System.IO.Compression.ZipFile": "(,4.3.32767]",
"System.IO.FileSystem": "(,4.3.32767]",
"System.IO.FileSystem.AccessControl": "(,4.4.32767]",
"System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
"System.IO.FileSystem.Primitives": "(,4.3.32767]",
"System.IO.FileSystem.Watcher": "(,4.3.32767]",
"System.IO.IsolatedStorage": "(,4.3.32767]",
"System.IO.MemoryMappedFiles": "(,4.3.32767]",
"System.IO.Pipelines": "(,10.0.32767]",
"System.IO.Pipes": "(,4.3.32767]",
"System.IO.Pipes.AccessControl": "(,5.0.32767]",
"System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
"System.Linq": "(,4.3.32767]",
"System.Linq.AsyncEnumerable": "(,10.0.32767]",
"System.Linq.Expressions": "(,4.3.32767]",
"System.Linq.Parallel": "(,4.3.32767]",
"System.Linq.Queryable": "(,4.3.32767]",
"System.Memory": "(,5.0.32767]",
"System.Net.Http": "(,4.3.32767]",
"System.Net.Http.Json": "(,10.0.32767]",
"System.Net.NameResolution": "(,4.3.32767]",
"System.Net.NetworkInformation": "(,4.3.32767]",
"System.Net.Ping": "(,4.3.32767]",
"System.Net.Primitives": "(,4.3.32767]",
"System.Net.Requests": "(,4.3.32767]",
"System.Net.Security": "(,4.3.32767]",
"System.Net.ServerSentEvents": "(,10.0.32767]",
"System.Net.Sockets": "(,4.3.32767]",
"System.Net.WebHeaderCollection": "(,4.3.32767]",
"System.Net.WebSockets": "(,4.3.32767]",
"System.Net.WebSockets.Client": "(,4.3.32767]",
"System.Numerics.Vectors": "(,5.0.32767]",
"System.ObjectModel": "(,4.3.32767]",
"System.Private.DataContractSerialization": "(,4.3.32767]",
"System.Private.Uri": "(,4.3.32767]",
"System.Reflection": "(,4.3.32767]",
"System.Reflection.DispatchProxy": "(,6.0.32767]",
"System.Reflection.Emit": "(,4.7.32767]",
"System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
"System.Reflection.Emit.Lightweight": "(,4.7.32767]",
"System.Reflection.Extensions": "(,4.3.32767]",
"System.Reflection.Metadata": "(,10.0.32767]",
"System.Reflection.Primitives": "(,4.3.32767]",
"System.Reflection.TypeExtensions": "(,4.3.32767]",
"System.Resources.Reader": "(,4.3.32767]",
"System.Resources.ResourceManager": "(,4.3.32767]",
"System.Resources.Writer": "(,4.3.32767]",
"System.Runtime": "(,4.3.32767]",
"System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
"System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
"System.Runtime.Extensions": "(,4.3.32767]",
"System.Runtime.Handles": "(,4.3.32767]",
"System.Runtime.InteropServices": "(,4.3.32767]",
"System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
"System.Runtime.Loader": "(,4.3.32767]",
"System.Runtime.Numerics": "(,4.3.32767]",
"System.Runtime.Serialization.Formatters": "(,4.3.32767]",
"System.Runtime.Serialization.Json": "(,4.3.32767]",
"System.Runtime.Serialization.Primitives": "(,4.3.32767]",
"System.Runtime.Serialization.Xml": "(,4.3.32767]",
"System.Security.AccessControl": "(,6.0.32767]",
"System.Security.Claims": "(,4.3.32767]",
"System.Security.Cryptography.Algorithms": "(,4.3.32767]",
"System.Security.Cryptography.Cng": "(,5.0.32767]",
"System.Security.Cryptography.Csp": "(,4.3.32767]",
"System.Security.Cryptography.Encoding": "(,4.3.32767]",
"System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
"System.Security.Cryptography.Primitives": "(,4.3.32767]",
"System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
"System.Security.Principal": "(,4.3.32767]",
"System.Security.Principal.Windows": "(,5.0.32767]",
"System.Security.SecureString": "(,4.3.32767]",
"System.Text.Encoding": "(,4.3.32767]",
"System.Text.Encoding.CodePages": "(,10.0.32767]",
"System.Text.Encoding.Extensions": "(,4.3.32767]",
"System.Text.Encodings.Web": "(,10.0.32767]",
"System.Text.Json": "(,10.0.32767]",
"System.Text.RegularExpressions": "(,4.3.32767]",
"System.Threading": "(,4.3.32767]",
"System.Threading.AccessControl": "(,10.0.32767]",
"System.Threading.Channels": "(,10.0.32767]",
"System.Threading.Overlapped": "(,4.3.32767]",
"System.Threading.Tasks": "(,4.3.32767]",
"System.Threading.Tasks.Dataflow": "(,10.0.32767]",
"System.Threading.Tasks.Extensions": "(,5.0.32767]",
"System.Threading.Tasks.Parallel": "(,4.3.32767]",
"System.Threading.Thread": "(,4.3.32767]",
"System.Threading.ThreadPool": "(,4.3.32767]",
"System.Threading.Timer": "(,4.3.32767]",
"System.ValueTuple": "(,4.5.32767]",
"System.Xml.ReaderWriter": "(,4.3.32767]",
"System.Xml.XDocument": "(,4.3.32767]",
"System.Xml.XmlDocument": "(,4.3.32767]",
"System.Xml.XmlSerializer": "(,4.3.32767]",
"System.Xml.XPath": "(,4.3.32767]",
"System.Xml.XPath.XDocument": "(,5.0.32767]"
}
}
}
}
}
}
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/yla/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/yla/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/home/yla/.nuget/packages/" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)mudblazor/8.9.0/buildTransitive/MudBlazor.props" Condition="Exists('$(NuGetPackageRoot)mudblazor/8.9.0/buildTransitive/MudBlazor.props')" />
</ImportGroup>
</Project>
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder/10.0.1/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder/10.0.1/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/10.0.1/buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers/10.0.1/buildTransitive/netstandard2.0/Microsoft.AspNetCore.Components.Analyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers/10.0.1/buildTransitive/netstandard2.0/Microsoft.AspNetCore.Components.Analyzers.targets')" />
<Import Project="$(NuGetPackageRoot)mudblazor/8.9.0/build/MudBlazor.targets" Condition="Exists('$(NuGetPackageRoot)mudblazor/8.9.0/build/MudBlazor.targets')" />
</ImportGroup>
</Project>
File diff suppressed because it is too large Load Diff
+34
View File
@@ -0,0 +1,34 @@
{
"version": 2,
"dgSpecHash": "iwD9u0fdmME=",
"success": true,
"projectFilePath": "/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Modules/Tasks.Module/Tasks.Module.csproj",
"expectedPackageFiles": [
"/home/yla/.nuget/packages/blazored.localstorage/4.5.0/blazored.localstorage.4.5.0.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.aspnetcore.authorization/10.0.1/microsoft.aspnetcore.authorization.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.aspnetcore.components/10.0.1/microsoft.aspnetcore.components.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.aspnetcore.components.analyzers/10.0.1/microsoft.aspnetcore.components.analyzers.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.aspnetcore.components.forms/10.0.1/microsoft.aspnetcore.components.forms.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.aspnetcore.components.web/10.0.1/microsoft.aspnetcore.components.web.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.aspnetcore.metadata/10.0.1/microsoft.aspnetcore.metadata.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.configuration/10.0.1/microsoft.extensions.configuration.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.configuration.abstractions/10.0.1/microsoft.extensions.configuration.abstractions.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.configuration.binder/10.0.1/microsoft.extensions.configuration.binder.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.dependencyinjection/10.0.1/microsoft.extensions.dependencyinjection.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/10.0.1/microsoft.extensions.dependencyinjection.abstractions.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.diagnostics/10.0.1/microsoft.extensions.diagnostics.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.diagnostics.abstractions/10.0.1/microsoft.extensions.diagnostics.abstractions.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.http/10.0.1/microsoft.extensions.http.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.localization/10.0.1/microsoft.extensions.localization.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.localization.abstractions/10.0.1/microsoft.extensions.localization.abstractions.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.logging/10.0.1/microsoft.extensions.logging.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.logging.abstractions/10.0.1/microsoft.extensions.logging.abstractions.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.options/10.0.1/microsoft.extensions.options.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.options.configurationextensions/10.0.1/microsoft.extensions.options.configurationextensions.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.primitives/10.0.1/microsoft.extensions.primitives.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.extensions.validation/10.0.1/microsoft.extensions.validation.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/microsoft.jsinterop/10.0.1/microsoft.jsinterop.10.0.1.nupkg.sha512",
"/home/yla/.nuget/packages/mudblazor/8.9.0/mudblazor.8.9.0.nupkg.sha512"
],
"logs": []
}