Initial commit: Tasks.Module
This commit is contained in:
@@ -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();
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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> </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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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}}
|
||||
@@ -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")]
|
||||
@@ -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.
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":{}}
|
||||
@@ -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")]
|
||||
@@ -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.
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>
|
||||
@@ -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]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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
@@ -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": []
|
||||
}
|
||||
Reference in New Issue
Block a user