Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b024dbc169 | |||
| f6c9319823 | |||
| bcbddb1f01 | |||
| 23627b72f0 | |||
| ff5077463c | |||
| e974832da4 | |||
| 36711de6f4 | |||
| a46e2c11a6 | |||
| e3e9b5e846 | |||
| cdfe9c6f26 | |||
| a3d105d302 | |||
| d60ba0d3d9 | |||
| 625f46a092 | |||
| a9a92da27f | |||
| 40c3531c77 | |||
| 80d6e2ea09 | |||
| 23abdd6d55 | |||
| fb476f3475 | |||
| 819e9d7230 | |||
| 2c3fda3550 | |||
| 63093a31a8 | |||
| 149c672451 | |||
| f36ef4e623 | |||
| 623a730355 | |||
| a9c8dfe24a | |||
| ed47a77b73 | |||
| 1d9ad26b98 | |||
| 86ad77116d | |||
| 7505d4fad0 | |||
| 2ebf211cd4 |
@@ -2,18 +2,17 @@
|
|||||||
@inject CategoryAPIConsumer CategoryService
|
@inject CategoryAPIConsumer CategoryService
|
||||||
|
|
||||||
<div class="relative w-full">
|
<div class="relative w-full">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="select select-bordered w-full flex items-center justify-between h-auto py-3 bg-base-100 hover:bg-base-200 transition-colors"
|
class="select select-bordered w-full flex items-center justify-between h-auto py-3 bg-base-100 hover:bg-base-200 transition-colors"
|
||||||
@onclick="ToggleDropdown">
|
@onclick="ToggleDropdown">
|
||||||
<span class="truncate">@(SelectedCategory?.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty) ??
|
<span class="truncate">@(SelectedCategory?.Translations?.FirstOrDefault()?.Info?.Name ?? Placeholder)</span>
|
||||||
Placeholder)</span>
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 opacity-50 shrink-0" viewBox="0 0 20 20"
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 opacity-50 shrink-0" viewBox="0 0 20 20"
|
|
||||||
fill="currentColor">
|
fill="currentColor">
|
||||||
<path fill-rule="evenodd"
|
<path fill-rule="evenodd"
|
||||||
d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
|
d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
|
||||||
clip-rule="evenodd" />
|
clip-rule="evenodd" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@if (_isOpen)
|
@if (_isOpen)
|
||||||
{
|
{
|
||||||
@@ -26,8 +25,8 @@
|
|||||||
<div class="flex flex-wrap items-center gap-1 mb-4 bg-base-200/50 p-2 rounded-xl">
|
<div class="flex flex-wrap items-center gap-1 mb-4 bg-base-200/50 p-2 rounded-xl">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn btn-ghost btn-xs normal-case @(_activeLevel == 0 ? "text-primary font-bold bg-primary/10" : "text-base-content/60")"
|
class="btn btn-ghost btn-xs normal-case @(_activeLevel == 0 ? "text-primary font-bold bg-primary/10" : "text-base-content/60")"
|
||||||
@onclick="() => SetLevel(0)">
|
@onclick="SelectRoot">
|
||||||
Root
|
Root (All)
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@for (int i = 0; i < _path.Count; i++)
|
@for (int i = 0; i < _path.Count; i++)
|
||||||
@@ -44,7 +43,7 @@
|
|||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn btn-ghost btn-xs normal-case @(_activeLevel == index + 1 ? "text-primary font-bold bg-primary/10" : "text-base-content/60")"
|
class="btn btn-ghost btn-xs normal-case @(_activeLevel == index + 1 ? "text-primary font-bold bg-primary/10" : "text-base-content/60")"
|
||||||
@onclick="() => SetLevel(index + 1)">
|
@onclick="() => SetLevel(index + 1)">
|
||||||
@step.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)
|
@step.Translations?.FirstOrDefault()?.Info?.Name
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -88,8 +87,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<span
|
<span
|
||||||
class="font-medium @(cat.Id == Value ? "text-primary font-bold" : "text-base-content")">@cat.Translations?.FirstOrDefault()?.Info?.Name
|
class="font-medium @(cat.Id == Value ? "text-primary font-bold" : "text-base-content")">@(cat.Translations?.FirstOrDefault()?.Info?.Name ?? "")</span>
|
||||||
?? string.Empty)</span>
|
|
||||||
@if (cat.Id == Value)
|
@if (cat.Id == Value)
|
||||||
{
|
{
|
||||||
<span class="text-[10px] text-primary uppercase font-bold tracking-wider">Selected</span>
|
<span class="text-[10px] text-primary uppercase font-bold tracking-wider">Selected</span>
|
||||||
@@ -118,10 +116,7 @@
|
|||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<div class="mt-4 pt-4 border-t border-base-200 flex justify-between items-center text-xs text-gray-400">
|
<div class="mt-4 pt-4 border-t border-base-200 flex justify-between items-center text-xs text-gray-400">
|
||||||
<span>Total: @(_tree.Count) roots</span>
|
<span>Total: @(_tree.Count) roots</span>
|
||||||
<div class="flex gap-2">
|
<button type="button" class="btn btn-primary btn-xs" @onclick="ToggleDropdown">Done</button>
|
||||||
<button type="button" class="btn btn-ghost btn-xs text-error" @onclick="ClearSelection">Clear</button>
|
|
||||||
<button type="button" class="btn btn-primary btn-xs" @onclick="ToggleDropdown">Done</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -260,6 +255,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task SelectRoot()
|
||||||
|
{
|
||||||
|
SetLevel(0);
|
||||||
|
await ClearSelection();
|
||||||
|
}
|
||||||
|
|
||||||
private async Task SelectValue(CategoryVM category)
|
private async Task SelectValue(CategoryVM category)
|
||||||
{
|
{
|
||||||
Value = category.Id;
|
Value = category.Id;
|
||||||
|
|||||||
@@ -0,0 +1,157 @@
|
|||||||
|
@page "/about"
|
||||||
|
@using Common
|
||||||
|
|
||||||
|
<!-- Hero Section -->
|
||||||
|
<div class="relative w-full h-80 rounded-b-2xl overflow-hidden shadow-2xl mb-12 mt-32 md:mt-36">
|
||||||
|
<div class="absolute inset-0 bg-cover bg-center"
|
||||||
|
style="background-image: url(https://img.daisyui.com/images/stock/photo-1522071820081-009f0129c71c.webp);">
|
||||||
|
</div>
|
||||||
|
<div class="absolute inset-0 bg-black/50 backdrop-blur-[2px]"></div>
|
||||||
|
<div class="relative z-10 h-full flex flex-col justify-center items-center text-center text-white py-16 px-6">
|
||||||
|
<h1 class="text-5xl md:text-7xl font-extrabold mb-4 tracking-tight">About MassTech</h1>
|
||||||
|
<p class="text-lg md:text-xl text-gray-200 max-w-2xl">Your trusted destination for premium products and curated bundles.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- About Content -->
|
||||||
|
<div class="max-w-7xl mx-auto px-6 lg:px-12 pb-20 space-y-24">
|
||||||
|
|
||||||
|
<!-- Mission Section -->
|
||||||
|
<section class="grid grid-cols-1 lg:grid-cols-2 gap-10 items-center">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-3xl font-black text-white mb-4 tracking-tight">Our Mission</h2>
|
||||||
|
<p class="text-base leading-relaxed mb-3" style="color: #cbd5e1 !important;">
|
||||||
|
At MassTech, we believe that finding the right product shouldn't be a chore. Our mission is to connect discerning shoppers with carefully curated, top-quality goods from trusted brands worldwide.
|
||||||
|
</p>
|
||||||
|
<p class="text-base leading-relaxed mb-3" style="color: #cbd5e1 !important;">
|
||||||
|
Whether you're looking for cutting-edge electronics, timeless fashion pieces, or unique bundles that offer exceptional value, MassTech brings together quality, convenience, and great pricing in one seamless experience.
|
||||||
|
</p>
|
||||||
|
<p class="text-base leading-relaxed" style="color: #cbd5e1 !important;">
|
||||||
|
Every item in our marketplace is vetted by our team to ensure it meets our high standards. We're not just another online store — we're your partner in finding products that truly elevate your everyday life.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="bg-orange-500/10 rounded-3xl p-6 border border-orange-500/20">
|
||||||
|
<div class="grid grid-cols-2 gap-4 text-center">
|
||||||
|
<div class="p-2">
|
||||||
|
<div class="text-4xl font-black text-primary mb-1">10K+</div>
|
||||||
|
<p class="text-white/70 text-xs font-semibold uppercase tracking-wider">Products</p>
|
||||||
|
</div>
|
||||||
|
<div class="p-2">
|
||||||
|
<div class="text-4xl font-black text-primary mb-1">500+</div>
|
||||||
|
<p class="text-white/70 text-xs font-semibold uppercase tracking-wider">Brands</p>
|
||||||
|
</div>
|
||||||
|
<div class="p-2">
|
||||||
|
<div class="text-4xl font-black text-primary mb-1">50K+</div>
|
||||||
|
<p class="text-white/70 text-xs font-semibold uppercase tracking-wider">Customers</p>
|
||||||
|
</div>
|
||||||
|
<div class="p-2">
|
||||||
|
<div class="text-4xl font-black text-primary mb-1">99%</div>
|
||||||
|
<p class="text-white/70 text-xs font-semibold uppercase tracking-wider">Satisfaction</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Values Section -->
|
||||||
|
<section>
|
||||||
|
<div class="text-center mb-8">
|
||||||
|
<h2 class="text-3xl font-black text-white mb-3 tracking-tight">What We Stand For</h2>
|
||||||
|
<p class="text-base max-w-2xl mx-auto" style="color: #cbd5e1 !important;">Our core values guide every decision we make, from the products we sell to the way we serve our community.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-5 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-10 h-10 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Quality First</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">We never compromise on quality. Every product undergoes rigorous evaluation before earning a place in our marketplace.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-5 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-10 h-10 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Customer First</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">Your satisfaction drives everything we do. From browsing to delivery, we're here to make your experience exceptional.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-5 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-10 h-10 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Innovation</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">We constantly evolve our platform with the latest technology to give you a faster, smarter shopping experience.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-5 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-10 h-10 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Global Reach</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">With worldwide shipping and multilingual support, we bring great products to your doorstep, anywhere.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-5 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-10 h-10 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Best Value</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">Competitive pricing, exclusive bundles, and seasonal deals ensure you always get the most for your money.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-5 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-10 h-10 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9-9-3m-9 9a9 9 0 019-9" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Worldwide Shipping</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">Fast, reliable shipping to over 100 countries. Track your order every step of the way.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Story Section -->
|
||||||
|
<section class="bg-base-100/30 backdrop-blur-sm rounded-3xl p-8">
|
||||||
|
<h2 class="text-3xl font-black text-white mb-4 tracking-tight text-center">Our Story</h2>
|
||||||
|
<div class="max-w-3xl mx-auto space-y-3 text-base leading-relaxed text-center" style="color: #cbd5e1 !important;">
|
||||||
|
<p>
|
||||||
|
MassTech was founded with a simple idea: shopping for premium products should be inspiring, not overwhelming. We noticed that the modern marketplace had become cluttered with low-quality goods, misleading descriptions, and inflated prices.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
We set out to change that. Starting with a small team of passionate curators and engineers, we built a platform that prioritizes quality over quantity. Every product on MassTech is hand-selected by our team of experts who understand what makes a product worth buying.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Today, we're proud to serve thousands of customers across the globe, offering them access to the world's best products in one trusted place. But we're just getting started. As we grow, our commitment to quality, value, and customer service remains unchanged.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- CTA Section -->
|
||||||
|
<section class="text-center">
|
||||||
|
<h2 class="text-2xl font-black text-white mb-3">Ready to Experience the Difference?</h2>
|
||||||
|
<p class="text-base mb-6 max-w-2xl mx-auto" style="color: #cbd5e1 !important;">Discover our curated collection of premium products and find your next favorite item.</p>
|
||||||
|
<div class="flex flex-wrap gap-3 justify-center">
|
||||||
|
<a href="/shop" class="btn bg-orange-600 hover:bg-orange-700 text-white border-orange-600 btn-md shadow-lg shadow-orange-500/20">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" />
|
||||||
|
</svg>
|
||||||
|
Start Shopping
|
||||||
|
</a>
|
||||||
|
<a href="/contact" class="btn bg-orange-600/10 hover:bg-orange-600/20 text-orange-400 border-orange-600/30 btn-md">
|
||||||
|
Get in Touch
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
@@ -3,18 +3,19 @@
|
|||||||
<div class="category-tree-node mb-2">
|
<div class="category-tree-node mb-2">
|
||||||
<!-- Category Card -->
|
<!-- Category Card -->
|
||||||
<div
|
<div
|
||||||
class="flex items-center gap-3 bg-base-100 hover:bg-base-200 border border-base-300 rounded-xl p-2 transition-all shadow-sm group flex-shrink-0 w-80">
|
class="flex items-center gap-3 rounded-xl p-2 transition-all shadow-sm group flex-shrink-0 w-80"
|
||||||
|
style="background-color: rgba(30, 41, 59, 0.8) !important; border: 1px solid rgba(251, 146, 60, 0.2) !important;">
|
||||||
<!-- Square Image -->
|
<!-- Square Image -->
|
||||||
<div class="w-10 h-10 rounded-lg bg-base-300 flex-shrink-0 overflow-hidden shadow-inner">
|
<div class="w-10 h-10 rounded-lg flex-shrink-0 overflow-hidden shadow-inner" style="background-color: #475569 !important;">
|
||||||
@if (Category.Photos?.Any() == true)
|
@if (Category.Photos?.Any() == true)
|
||||||
{
|
{
|
||||||
<img src="@Category.Photos[0]" alt="@Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)" class="w-full h-full object-cover" />
|
<img src="@Category.Photos[0]" alt="@(Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)" class="w-full h-full object-cover" />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<div class="flex items-center justify-center h-full opacity-20">
|
<div class="flex items-center justify-center h-full opacity-40">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24"
|
||||||
stroke="currentColor">
|
stroke="currentColor" style="color: #94a3b8 !important;">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" />
|
d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" />
|
||||||
</svg>
|
</svg>
|
||||||
@@ -25,10 +26,10 @@
|
|||||||
<!-- Name and Badge -->
|
<!-- Name and Badge -->
|
||||||
<div class="flex-grow flex items-center justify-between">
|
<div class="flex-grow flex items-center justify-between">
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<span class="font-bold text-sm text-base-content tracking-tight">@Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</span>
|
<span class="font-bold text-sm tracking-tight" style="color: #ffffff !important;">@(Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</span>
|
||||||
@if (Category.IsBundle)
|
@if (Category.IsBundle)
|
||||||
{
|
{
|
||||||
<span class="text-[9px] uppercase font-black text-primary tracking-widest leading-none">Bundle</span>
|
<span class="text-[9px] uppercase font-black tracking-widest leading-none" style="color: #fb923c !important;">Bundle</span>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -58,7 +59,7 @@
|
|||||||
<button type="button" @onclick="ToggleExpand"
|
<button type="button" @onclick="ToggleExpand"
|
||||||
class="btn btn-ghost btn-xs btn-circle transition-transform duration-300 @(_expanded ? "rotate-90" : "")">
|
class="btn btn-ghost btn-xs btn-circle transition-transform duration-300 @(_expanded ? "rotate-90" : "")">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24"
|
||||||
stroke="currentColor">
|
stroke="currentColor" style="color: #fb923c !important;">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
@@ -74,7 +75,7 @@
|
|||||||
<!-- Recursive Children -->
|
<!-- Recursive Children -->
|
||||||
@if (_expanded && Category.ChildCategories?.Any() == true)
|
@if (_expanded && Category.ChildCategories?.Any() == true)
|
||||||
{
|
{
|
||||||
<div class="ml-10 mt-2 border-l-2 border-base-300 pl-4 animate-in slide-in-from-left-2 duration-200">
|
<div class="ml-10 mt-2 pl-4 animate-in slide-in-from-left-2 duration-200" style="border-left: 2px solid rgba(251, 146, 60, 0.3) !important;">
|
||||||
@foreach (var child in Category.ChildCategories)
|
@foreach (var child in Category.ChildCategories)
|
||||||
{
|
{
|
||||||
<CategoryTreeItem Category="child" OnEdit="OnEdit" IsAdmin="IsAdmin" />
|
<CategoryTreeItem Category="child" OnEdit="OnEdit" IsAdmin="IsAdmin" />
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
<div class="badge badge-primary badge-sm">@(_languages[_activeLang])</div>
|
<div class="badge badge-primary badge-sm">@(_languages[_activeLang])</div>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<MultiLangInput @bind="_names" ActiveCulture="@_activeLang" HideTabs="true"
|
<MultiLangInput Value="_names" ValueChanged="OnNamesChanged" ActiveCulture="@_activeLang" HideTabs="true"
|
||||||
Placeholder="Enter category name in the selected language..." />
|
Placeholder="Enter category name in the selected language..." />
|
||||||
<ValidationMessage For="@(() => _names)" class="text-error text-sm mt-1" />
|
<ValidationMessage For="@(() => _names)" class="text-error text-sm mt-1" />
|
||||||
</div>
|
</div>
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
Description
|
Description
|
||||||
<div class="badge badge-secondary badge-sm">@(_languages[_activeLang])</div>
|
<div class="badge badge-secondary badge-sm">@(_languages[_activeLang])</div>
|
||||||
</h4>
|
</h4>
|
||||||
<MultiLangInput @bind="_descriptions" ActiveCulture="@_activeLang"
|
<MultiLangInput Value="_descriptions" ValueChanged="OnDescriptionsChanged" ActiveCulture="@_activeLang"
|
||||||
HideTabs="true" IsTextArea="true"
|
HideTabs="true" IsTextArea="true"
|
||||||
Placeholder="Summarize what this category contains..." />
|
Placeholder="Summarize what this category contains..." />
|
||||||
<ValidationMessage For="@(() => _descriptions)" class="text-error text-sm mt-1" />
|
<ValidationMessage For="@(() => _descriptions)" class="text-error text-sm mt-1" />
|
||||||
@@ -231,7 +231,7 @@
|
|||||||
{
|
{
|
||||||
category = await categoryAPIConsumer.GetCategory(Id);
|
category = await categoryAPIConsumer.GetCategory(Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Map from Translations to local dictionaries
|
// Map from Translations to local dictionaries
|
||||||
foreach(var t in category.Translations ?? new())
|
foreach(var t in category.Translations ?? new())
|
||||||
{
|
{
|
||||||
@@ -254,6 +254,9 @@
|
|||||||
_editContext = new EditContext(category);
|
_editContext = new EditContext(category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnNamesChanged(Dictionary<string, string> val) => _names = val;
|
||||||
|
private void OnDescriptionsChanged(Dictionary<string, string> val) => _descriptions = val;
|
||||||
|
|
||||||
void SyncTranslations()
|
void SyncTranslations()
|
||||||
{
|
{
|
||||||
category.Translations = _languages.Keys.Select(lang => new CategoryTranslationVM
|
category.Translations = _languages.Keys.Select(lang => new CategoryTranslationVM
|
||||||
|
|||||||
@@ -129,8 +129,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="font-medium text-primary">@category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</td>
|
<td class="font-medium text-primary">@(category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</td>
|
||||||
<td class="hidden md:table-cell max-w-xs truncate">@category.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)</td>
|
<td class="hidden md:table-cell max-w-xs truncate">@(category.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)</td>
|
||||||
<td>
|
<td>
|
||||||
@if (category.IsBundle)
|
@if (category.IsBundle)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,159 @@
|
|||||||
|
@page "/contact"
|
||||||
|
@using Common
|
||||||
|
|
||||||
|
<!-- Hero Section -->
|
||||||
|
<div class="relative w-full h-80 rounded-b-2xl overflow-hidden shadow-2xl mb-12 mt-32 md:mt-36">
|
||||||
|
<div class="absolute inset-0 bg-cover bg-center"
|
||||||
|
style="background-image: url(https://img.daisyui.com/images/stock/photo-1534536281715-e28d76689b25.webp);">
|
||||||
|
</div>
|
||||||
|
<div class="absolute inset-0 bg-black/50 backdrop-blur-[2px]"></div>
|
||||||
|
<div class="relative z-10 h-full flex flex-col justify-center items-center text-center text-white py-16 px-6">
|
||||||
|
<h1 class="text-5xl md:text-7xl font-extrabold mb-4 tracking-tight">Get in Touch</h1>
|
||||||
|
<p class="text-lg md:text-xl text-gray-200 max-w-2xl">We'd love to hear from you. Reach out and we'll respond as soon as possible.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contact Content -->
|
||||||
|
<div class="max-w-7xl mx-auto px-6 lg:px-12 pb-20">
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-10 mb-20">
|
||||||
|
|
||||||
|
<!-- Contact Info Cards -->
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-8 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-14 h-14 rounded-xl bg-orange-500/20 flex items-center justify-center mb-6">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-lg font-bold text-white mb-2">Email Us</h3>
|
||||||
|
<p class="text-white/70 text-sm mb-3">For general inquiries and support</p>
|
||||||
|
<a href="mailto:support@masstech.com" class="text-primary hover:text-orange-400 font-semibold">support@masstech.com</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-8 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-14 h-14 rounded-xl bg-orange-500/20 flex items-center justify-center mb-6">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-lg font-bold text-white mb-2">Call Us</h3>
|
||||||
|
<p class="text-white/70 text-sm mb-3">Mon-Fri from 9am to 6pm</p>
|
||||||
|
<a href="tel:+1234567890" class="text-primary hover:text-orange-400 font-semibold">+1 (234) 567-890</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm rounded-2xl p-8 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-14 h-14 rounded-xl bg-orange-500/20 flex items-center justify-center mb-6">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-lg font-bold text-white mb-2">Visit Us</h3>
|
||||||
|
<p class="text-white/70 text-sm mb-3">Our headquarters</p>
|
||||||
|
<p class="text-white font-semibold">123 Innovation Drive<br>Tech District, CA 94025</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contact Form -->
|
||||||
|
<div class="grid grid-cols-1 lg:grid-cols-5 gap-10">
|
||||||
|
|
||||||
|
<!-- Form -->
|
||||||
|
<div class="lg:col-span-3 bg-base-100/50 backdrop-blur-sm rounded-2xl p-10 border border-orange-500/10">
|
||||||
|
<h2 class="text-2xl font-black text-white mb-8">Send Us a Message</h2>
|
||||||
|
|
||||||
|
<EditForm Model="contactForm" OnValidSubmit="HandleSubmit" class="space-y-8">
|
||||||
|
<FluentValidationValidator />
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-white mb-2">First Name</label>
|
||||||
|
<InputText @bind-Value="contactForm.FirstName" placeholder="John"
|
||||||
|
class="w-full px-4 py-3 rounded-lg border border-white/10 bg-base-100/50 text-white placeholder-white/40 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-white mb-2">Last Name</label>
|
||||||
|
<InputText @bind-Value="contactForm.LastName" placeholder="Doe"
|
||||||
|
class="w-full px-4 py-3 rounded-lg border border-white/10 bg-base-100/50 text-white placeholder-white/40 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-white mb-2">Email Address</label>
|
||||||
|
<InputText @bind-Value="contactForm.Email" type="email" placeholder="john@example.com"
|
||||||
|
class="w-full px-4 py-3 rounded-lg border border-white/10 bg-base-100/50 text-white placeholder-white/40 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-white mb-2">Subject</label>
|
||||||
|
<InputSelect @bind-Value="contactForm.Subject"
|
||||||
|
class="w-full px-4 py-3 rounded-lg border border-white/10 bg-base-100/50 text-white focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all">
|
||||||
|
<option value="">Choose a topic</option>
|
||||||
|
<option value="general">General Inquiry</option>
|
||||||
|
<option value="support">Customer Support</option>
|
||||||
|
<option value="partnership">Partnership / Business</option>
|
||||||
|
<option value="feedback">Feedback</option>
|
||||||
|
<option value="other">Other</option>
|
||||||
|
</InputSelect>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-white mb-2">Your Message</label>
|
||||||
|
<textarea @bind="contactForm.Message" rows="6" placeholder="Tell us what's on your mind..."
|
||||||
|
class="w-full px-4 py-3 rounded-lg border border-white/10 bg-base-100/50 text-white placeholder-white/40 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all resize-none"></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit"
|
||||||
|
class="btn bg-orange-600 hover:bg-orange-700 text-white border-orange-600 btn-lg w-full shadow-xl shadow-orange-500/20">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8" />
|
||||||
|
</svg>
|
||||||
|
Send Message
|
||||||
|
</button>
|
||||||
|
</EditForm>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- FAQ Section -->
|
||||||
|
<div class="lg:col-span-2 space-y-4">
|
||||||
|
<h2 class="text-2xl font-black text-white mb-4">Quick Answers</h2>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm border border-orange-500/10 rounded-2xl p-5">
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">How fast is shipping?</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">Standard shipping takes 3-7 business days. Express shipping (1-3 days) is also available at checkout for most locations.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm border border-orange-500/10 rounded-2xl p-5">
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">What's your return policy?</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">We offer a 30-day money-back guarantee on all unopened items. If you're not satisfied, reach out and we'll make it right.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm border border-orange-500/10 rounded-2xl p-5">
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Do you ship internationally?</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">Yes! We ship to over 100 countries. International shipping rates and delivery times are calculated at checkout.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-base-100/50 backdrop-blur-sm border border-orange-500/10 rounded-2xl p-5">
|
||||||
|
<h3 class="text-base font-bold text-white mb-2">Can I track my order?</h3>
|
||||||
|
<p class="text-white/70 text-sm leading-relaxed">Absolutely. Once your order ships, you'll receive a tracking number via email so you can monitor your package in real time.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private ContactFormModel contactForm = new();
|
||||||
|
|
||||||
|
private async Task HandleSubmit()
|
||||||
|
{
|
||||||
|
// In a real app, this would send the message to a backend service
|
||||||
|
await Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContactFormModel
|
||||||
|
{
|
||||||
|
public string FirstName { get; set; } = "";
|
||||||
|
public string LastName { get; set; } = "";
|
||||||
|
public string Email { get; set; } = "";
|
||||||
|
public string Subject { get; set; } = "";
|
||||||
|
public string Message { get; set; } = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
+12
-10
@@ -24,8 +24,7 @@
|
|||||||
<BundleComp Bundle="bundle"></BundleComp>
|
<BundleComp Bundle="bundle"></BundleComp>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex flex-row w-full mx-auto mb-16">
|
||||||
<div class="flex flex-row w-full mx-auto ">
|
|
||||||
<a href="/shop?IsBundle=true" class="btn btn-primary mx-auto">@Loc["See_More"]</a>
|
<a href="/shop?IsBundle=true" class="btn btn-primary mx-auto">@Loc["See_More"]</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -46,16 +45,18 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-row w-full mx-auto ">
|
<div class="flex flex-row w-full mx-auto mb-16">
|
||||||
<a href="/shop/categories" class="btn btn-primary mx-auto">@Loc["See_More"]</a>
|
<a href="/categories" class="btn btn-primary mx-auto">@Loc["See_More"]</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section class="flex flex-col gap-1">
|
|
||||||
<h2 class="text-center text-5xl text-white ">@Loc["Our_Products"]</h2>
|
<section class="flex flex-col gap-1 pb-16">
|
||||||
|
<h1 class="font-semibold text-center capitalize dark:text-white text-white text-6xl">@Loc["Our_Products"]
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 justify-between gap-8 flex-wrap p-7 md:p-14 lg:p-20">
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 justify-between gap-8 flex-wrap p-7 md:p-14 lg:p-20">
|
||||||
@foreach (var product in RandomProducts.Take(3))
|
@foreach (var product in RandomProducts.Take(3))
|
||||||
@@ -64,8 +65,8 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-row w-full text-center ">
|
<div class="flex flex-row w-full text-center mb-8">
|
||||||
<a href="/shop" class="btn btn-primary mx-auto">@Loc["See_More"]</a>
|
<a href="/shop?IsBundle=false" class="btn btn-primary mx-auto">@Loc["See_More"]</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
@@ -104,13 +105,14 @@
|
|||||||
(Loc["Amazing_Deals"], "https://img.daisyui.com/images/stock/photo-1601004890684-d8cbf643f5f2.webp")
|
(Loc["Amazing_Deals"], "https://img.daisyui.com/images/stock/photo-1601004890684-d8cbf643f5f2.webp")
|
||||||
};
|
};
|
||||||
|
|
||||||
RandomProducts = (await productService.FetchProduct(new ProductFilter { Random = true }, new Pagination()
|
// Fetch machines only (no production lines)
|
||||||
|
RandomProducts = (await productService.FetchProduct(new ProductFilter { IsBundle = false, Random = true }, new Pagination()
|
||||||
{
|
{
|
||||||
PageSize = 3,
|
PageSize = 3,
|
||||||
CurrentPage = 1
|
CurrentPage = 1
|
||||||
})).Item1;
|
})).Item1;
|
||||||
|
|
||||||
// Fetch real bundles
|
// Fetch production lines (bundles)
|
||||||
var bundleResult = (await productService.FetchProduct(new ProductFilter { IsBundle = true, Random = true }, new
|
var bundleResult = (await productService.FetchProduct(new ProductFilter { IsBundle = true, Random = true }, new
|
||||||
Pagination
|
Pagination
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
@page "/404"
|
||||||
|
@page "/*"
|
||||||
|
@using Common
|
||||||
|
|
||||||
|
<!-- Hero Section -->
|
||||||
|
<div class="relative w-full h-80 rounded-2xl overflow-hidden shadow-2xl mb-12 mt-32 md:mt-36">
|
||||||
|
<div class="absolute inset-0 bg-cover bg-center"
|
||||||
|
style="background-image: url(https://img.daisyui.com/images/stock/photo-1505740420928-5e560c06d30e.webp);">
|
||||||
|
</div>
|
||||||
|
<div class="absolute inset-0 bg-black/50 backdrop-blur-[2px]"></div>
|
||||||
|
<div class="relative z-10 h-full flex flex-col justify-center items-center text-center text-white py-16 px-6">
|
||||||
|
<h1 class="text-7xl md:text-9xl font-black mb-4 tracking-tight">404</h1>
|
||||||
|
<p class="text-lg md:text-xl text-gray-200 max-w-2xl">Page Not Found</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Content -->
|
||||||
|
<div class="max-w-4xl mx-auto px-4 pb-20 text-center">
|
||||||
|
|
||||||
|
<!-- Icon -->
|
||||||
|
<div class="flex justify-center mb-8">
|
||||||
|
<div class="relative">
|
||||||
|
<div class="w-32 h-32 rounded-full bg-orange-500/10 border-2 border-orange-500/30 flex items-center justify-center animate-pulse">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-16 w-16 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.172 16.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="absolute -top-2 -right-2 w-8 h-8 rounded-full bg-orange-500 flex items-center justify-center text-white font-bold shadow-lg shadow-orange-500/50">
|
||||||
|
!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Message -->
|
||||||
|
<h2 class="text-4xl font-black text-white mb-4">Oops! We Can't Find That Page</h2>
|
||||||
|
<p class="text-xl text-white/70 mb-12 max-w-2xl mx-auto leading-relaxed">
|
||||||
|
The page you're looking for might have been moved, deleted, or doesn't exist. Don't worry — let's get you back on track.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- Search Box -->
|
||||||
|
<div class="max-w-xl mx-auto mb-12">
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<input type="text" placeholder="Search products..."
|
||||||
|
class="flex-1 px-6 py-4 rounded-2xl border border-white/10 bg-base-100/50 text-white placeholder-white/40 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all" />
|
||||||
|
<button class="btn bg-orange-600 hover:bg-orange-700 text-white border-orange-600 btn-lg shadow-xl shadow-orange-500/20">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Quick Links -->
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-12">
|
||||||
|
<a href="/" class="group bg-base-100/50 backdrop-blur-sm rounded-2xl p-6 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-12 h-12 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4 mx-auto group-hover:scale-110 transition-transform">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-lg font-bold text-white mb-2">Home</h3>
|
||||||
|
<p class="text-white/60 text-sm">Go back to the home page</p>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/shop" class="group bg-base-100/50 backdrop-blur-sm rounded-2xl p-6 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-12 h-12 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4 mx-auto group-hover:scale-110 transition-transform">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-lg font-bold text-white mb-2">Shop</h3>
|
||||||
|
<p class="text-white/60 text-sm">Browse all our products</p>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/contact" class="group bg-base-100/50 backdrop-blur-sm rounded-2xl p-6 border border-orange-500/10 hover:border-orange-500/30 transition-all">
|
||||||
|
<div class="w-12 h-12 rounded-xl bg-orange-500/20 flex items-center justify-center mb-4 mx-auto group-hover:scale-110 transition-transform">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3 class="text-lg font-bold text-white mb-2">Contact</h3>
|
||||||
|
<p class="text-white/60 text-sm">Get in touch with us</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Primary CTA -->
|
||||||
|
<div class="flex flex-wrap gap-4 justify-center">
|
||||||
|
<a href="/" class="btn bg-orange-600 hover:bg-orange-700 text-white border-orange-600 btn-lg shadow-xl shadow-orange-500/20">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
|
||||||
|
</svg>
|
||||||
|
Back to Home
|
||||||
|
</a>
|
||||||
|
<a href="/about" class="btn bg-orange-600/10 hover:bg-orange-600/20 text-orange-300 border-orange-600/30 btn-lg">
|
||||||
|
Learn About Us
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Fun Stats -->
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mt-16 pt-12 border-t border-orange-500/10">
|
||||||
|
<div>
|
||||||
|
<div class="text-5xl font-black text-primary mb-2">10K+</div>
|
||||||
|
<p class="text-white/70 text-sm font-semibold uppercase tracking-wider">Products Available</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="text-5xl font-black text-primary mb-2">24/7</div>
|
||||||
|
<p class="text-white/70 text-sm font-semibold uppercase tracking-wider">Support Available</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="text-5xl font-black text-primary mb-2">99%</div>
|
||||||
|
<p class="text-white/70 text-sm font-semibold uppercase tracking-wider">Customer Satisfaction</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
<div class="badge badge-primary badge-sm">@(_languages[_activeLang])</div>
|
<div class="badge badge-primary badge-sm">@(_languages[_activeLang])</div>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<MultiLangInput @bind="_names" ActiveCulture="@_activeLang" HideTabs="true"
|
<MultiLangInput Value="_names" ValueChanged="OnNamesChanged" ActiveCulture="@_activeLang" HideTabs="true"
|
||||||
Placeholder="Enter product name in the selected language..." />
|
Placeholder="Enter product name in the selected language..." />
|
||||||
<ValidationMessage For="@(() => _names)" class="text-error text-sm mt-1" />
|
<ValidationMessage For="@(() => _names)" class="text-error text-sm mt-1" />
|
||||||
</div>
|
</div>
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
Description
|
Description
|
||||||
<div class="badge badge-secondary badge-sm">@(_languages[_activeLang])</div>
|
<div class="badge badge-secondary badge-sm">@(_languages[_activeLang])</div>
|
||||||
</h4>
|
</h4>
|
||||||
<MultiLangInput @bind="_descriptions" ActiveCulture="@_activeLang" HideTabs="true"
|
<MultiLangInput Value="_descriptions" ValueChanged="OnDescriptionsChanged" ActiveCulture="@_activeLang" HideTabs="true"
|
||||||
IsTextArea="true" Placeholder="Write a compelling product description..." />
|
IsTextArea="true" Placeholder="Write a compelling product description..." />
|
||||||
<ValidationMessage For="@(() => _descriptions)" class="text-error text-sm mt-1" />
|
<ValidationMessage For="@(() => _descriptions)" class="text-error text-sm mt-1" />
|
||||||
</div>
|
</div>
|
||||||
@@ -257,7 +257,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<span
|
<span
|
||||||
class="font-bold text-sm leading-tight">@item.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</span>
|
class="font-bold text-sm leading-tight">@(item.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</span>
|
||||||
<span
|
<span
|
||||||
class="text-xs font-bold text-primary">@item.Price?.ToString("C")</span>
|
class="text-xs font-bold text-primary">@item.Price?.ToString("C")</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -325,7 +325,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<span
|
<span
|
||||||
class="text-sm font-bold leading-none mb-1">@res.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</span>
|
class="text-sm font-bold leading-none mb-1">@(res.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</span>
|
||||||
<span class="text-xs opacity-50">@res.Price?.ToString("C")</span>
|
<span class="text-xs opacity-50">@res.Price?.ToString("C")</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
_technicalDetails[t.Language] = t.Info.TechnicalDetails?.ToList() ?? new();
|
_technicalDetails[t.Language] = t.Info.TechnicalDetails?.ToList() ?? new();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure supported cultures exist in dictionaries
|
// Ensure all supported languages exist in dictionaries (for new products)
|
||||||
foreach (var lang in _languages.Keys)
|
foreach (var lang in _languages.Keys)
|
||||||
{
|
{
|
||||||
if (!_names.ContainsKey(lang)) _names[lang] = "";
|
if (!_names.ContainsKey(lang)) _names[lang] = "";
|
||||||
@@ -422,6 +422,9 @@
|
|||||||
_editContext = new EditContext(product);
|
_editContext = new EditContext(product);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnNamesChanged(Dictionary<string, string> val) => _names = val;
|
||||||
|
private void OnDescriptionsChanged(Dictionary<string, string> val) => _descriptions = val;
|
||||||
|
|
||||||
void SyncTranslations()
|
void SyncTranslations()
|
||||||
{
|
{
|
||||||
product.Translations = _languages.Keys.Select(lang => new ProductTranslationVM
|
product.Translations = _languages.Keys.Select(lang => new ProductTranslationVM
|
||||||
@@ -510,14 +513,11 @@
|
|||||||
|
|
||||||
async Task OnSubmit()
|
async Task OnSubmit()
|
||||||
{
|
{
|
||||||
Console.WriteLine("OnSubmit started");
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (mediaComponent != null)
|
if (mediaComponent != null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Starting ProcessUploadsAsync");
|
|
||||||
var uploadResult = await mediaComponent.ProcessUploadsAsync();
|
var uploadResult = await mediaComponent.ProcessUploadsAsync();
|
||||||
Console.WriteLine("ProcessUploadsAsync finished successfully");
|
|
||||||
product.Photos = uploadResult.FinalUrls.ToArray();
|
product.Photos = uploadResult.FinalUrls.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -525,21 +525,18 @@
|
|||||||
|
|
||||||
if (string.IsNullOrEmpty(Id))
|
if (string.IsNullOrEmpty(Id))
|
||||||
{
|
{
|
||||||
Console.WriteLine("Creating product...");
|
|
||||||
await productAPIConsumer.CreateProduct(product);
|
await productAPIConsumer.CreateProduct(product);
|
||||||
Snackbar.Add("Product added successfully!", Severity.Success);
|
Snackbar.Add("Product added successfully!", Severity.Success);
|
||||||
ResetForm();
|
ResetForm();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("Updating product...");
|
|
||||||
await productAPIConsumer.UpdateProduct(product);
|
await productAPIConsumer.UpdateProduct(product);
|
||||||
Snackbar.Add("Product updated successfully!", Severity.Success);
|
Snackbar.Add("Product updated successfully!", Severity.Success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Caught exception in OnSubmit: {ex.Message}");
|
|
||||||
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
|
Snackbar.Add($"Error: {ex.Message}", Severity.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,9 +87,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="font-medium text-primary">@product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</td>
|
<td class="font-medium text-primary">@(product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</td>
|
||||||
<td>@product.Price?.ToString("C")</td>
|
<td>@product.Price?.ToString("C")</td>
|
||||||
<td class="hidden md:table-cell max-w-xs truncate">@product.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)</td>
|
<td class="hidden md:table-cell max-w-xs truncate">@(product.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)</td>
|
||||||
<td class="text-right flex justify-end gap-2">
|
<td class="text-right flex justify-end gap-2">
|
||||||
<a class="btn btn-ghost btn-xs btn-primary" href="@($"/manage-product/{product.Id}")">
|
<a class="btn btn-ghost btn-xs btn-primary" href="@($"/manage-product/{product.Id}")">
|
||||||
Edit
|
Edit
|
||||||
|
|||||||
@@ -1,17 +1,46 @@
|
|||||||
|
@using System.Globalization
|
||||||
|
|
||||||
|
<a href="/product/@Bundle.Id" class="block group">
|
||||||
<div class="flex items-end overflow-hidden bg-cover rounded-lg h-96"
|
<div class="relative flex items-end overflow-hidden bg-cover rounded-lg h-96 transition-transform duration-500 group-hover:scale-105"
|
||||||
style="background-image:url('@(Bundle.Photos?.Any() == true ? Bundle.Photos[0] : "https://via.placeholder.com/400x300?text=No+Image")')">
|
style="background-image:url('@(Bundle.Photos?.Any() == true ? Bundle.Photos[0] : "https://via.placeholder.com/400x300?text=No+Image")')">
|
||||||
<div class="w-full px-8 py-4 overflow-hidden rounded-b-lg backdrop-blur-sm bg-white/60 dark:bg-gray-800/60">
|
<div class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent"></div>
|
||||||
<h2 class="mt-4 text-xl font-semibold text-gray-800 capitalize dark:text-white">@Bundle.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h2>
|
<div class="relative w-full px-8 py-4">
|
||||||
<p class="mt-2 text-lg tracking-wider text-blue-500 uppercase dark:text-blue-400 ">@Bundle.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)</p>
|
<h2 class="mt-4 text-xl font-bold text-white capitalize drop-shadow-lg">@(GetTranslation(Bundle)?.Info?.Name ?? string.Empty)</h2>
|
||||||
|
<p class="mt-2 text-sm text-slate-200 normal-case tracking-normal drop-shadow-lg">@(GetTranslation(Bundle)?.Info?.Description ?? string.Empty)</p>
|
||||||
|
<div class="mt-3 flex items-center gap-2">
|
||||||
|
<span class="px-3 py-1 rounded-full text-xs font-bold uppercase tracking-wider transition-colors text-slate-200 group-hover:text-white" style="background-color: rgba(255, 255, 255, 0.1); backdrop-filter: blur(4px);">
|
||||||
|
@Loc["View_Details"]
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</a>
|
||||||
@code {
|
|
||||||
|
|
||||||
|
@code {
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public ProductVM Bundle { get; set; }
|
public ProductVM Bundle { get; set; }
|
||||||
|
|
||||||
|
private ProductTranslationVM? GetTranslation(ProductVM? product)
|
||||||
|
{
|
||||||
|
if (product?.Translations == null || !product.Translations.Any())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var currentLang = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName ?? "en";
|
||||||
|
|
||||||
|
var translation = product.Translations.FirstOrDefault(t =>
|
||||||
|
string.Equals(t.Language, currentLang, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
if (translation == null)
|
||||||
|
{
|
||||||
|
translation = product.Translations.FirstOrDefault(t =>
|
||||||
|
string.Equals(t.Language, "en", StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (translation == null)
|
||||||
|
{
|
||||||
|
translation = product.Translations.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,13 +4,13 @@
|
|||||||
|
|
||||||
<button @onclick="NavTo"
|
<button @onclick="NavTo"
|
||||||
class="relative grid h-[35rem] max-w-lg flex-col items-end justify-center overflow-hidden rounded-lg bg-white">
|
class="relative grid h-[35rem] max-w-lg flex-col items-end justify-center overflow-hidden rounded-lg bg-white">
|
||||||
<div style="background-image: url('@Category.Photos[0]');"
|
<div style="background-image: url('@(Category.Photos != null && Category.Photos.Length > 0 ? Category.Photos[0] : "https://via.placeholder.com/600x400?text=No+Image")');"
|
||||||
class="absolute inset-0 m-0 h-full w-full overflow-hidden rounded-none bg-transparent bg-cover bg-center">
|
class="absolute inset-0 m-0 h-full w-full overflow-hidden rounded-none bg-transparent bg-cover bg-center">
|
||||||
<div class="to-bg-black-10 absolute inset-0 h-full w-full bg-gradient-to-t from-black/80 via-black/50"></div>
|
<div class="to-bg-black-10 absolute inset-0 h-full w-full bg-gradient-to-t from-black/80 via-black/50"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative text-center p-6 px-6 py-14 md:px-12">
|
<div class="relative text-center p-6 px-6 py-14 md:px-12">
|
||||||
<h2 class="mb-6 text-3xl font-medium text-white">
|
<h2 class="mb-6 text-3xl font-medium text-white">
|
||||||
@Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)
|
@(Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<div class="w-80 h-20">
|
<div class="w-80 h-20">
|
||||||
<div class="flex flex-col md:flex-row flex-wrap md:flex-nowrap bg-white shadow-md rounded-2xl p-2">
|
<div class="flex flex-col md:flex-row flex-wrap md:flex-nowrap bg-white shadow-md rounded-2xl p-2">
|
||||||
<img src="@Category.Photos[0]" alt="Just a flower" class=" w-20 object-cover mx-auto h-20 rounded-xl">
|
<img src="@(Category.Photos != null && Category.Photos.Length > 0 ? Category.Photos[0] : "https://via.placeholder.com/80x80?text=No+Image")" alt="Just a flower" class=" w-20 object-cover mx-auto h-20 rounded-xl">
|
||||||
<div class="flex flex-col justify-center w-full px-2 py-1">
|
<div class="flex flex-col justify-center w-full px-2 py-1">
|
||||||
<div class="flex justify-between items-center ">
|
<div class="flex justify-between items-center ">
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<h2 class="text-xs md:text-sm font-medium">@Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h2>
|
<h2 class="text-xs md:text-sm font-medium">@(Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h2>
|
||||||
</div>
|
</div>
|
||||||
@* <svg xmlns="http://www.w3.org/2000/svg"
|
@* <svg xmlns="http://www.w3.org/2000/svg"
|
||||||
class="h-0 w-0 md:w-5 md:h-5 @favoriteClass cursor-pointer" fill="none"
|
class="h-0 w-0 md:w-5 md:h-5 @favoriteClass cursor-pointer" fill="none"
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="flex items-end overflow-hidden bg-cover rounded-lg h-96"
|
<div class="flex items-end overflow-hidden bg-cover rounded-lg h-96"
|
||||||
style="background-image:url('@Category.Photos[0]')">
|
style="background-image:url('@(Category.Photos != null && Category.Photos.Length > 0 ? Category.Photos[0] : "https://via.placeholder.com/400x300?text=No+Image")')">
|
||||||
<div class="w-full px-8 py-4 overflow-hidden rounded-b-lg backdrop-blur-sm bg-white/60 dark:bg-gray-800/60">
|
<div class="w-full px-8 py-4 overflow-hidden rounded-b-lg backdrop-blur-sm bg-white/60 dark:bg-gray-800/60">
|
||||||
<h2 class="mt-4 text-xl font-semibold text-gray-800 capitalize dark:text-white">@Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h2>
|
<h2 class="mt-4 text-xl font-semibold text-gray-800 capitalize dark:text-white">@(Category.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h2>
|
||||||
<p class="mt-2 text-lg tracking-wider text-blue-500 uppercase dark:text-blue-400 ">@Loc["Ui_kit"]</p>
|
<p class="mt-2 text-lg tracking-wider text-orange-500 uppercase dark:text-orange-400 ">@Loc["Ui_kit"]</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,11 @@
|
|||||||
<div class="flex flex-col md:flex-row flex-wrap md:flex-nowrap bg-white shadow-md rounded-2xl p-2">
|
<div class="flex flex-col md:flex-row flex-wrap md:flex-nowrap bg-white shadow-md rounded-2xl p-2">
|
||||||
<img
|
<img
|
||||||
src="@(ProductModel.Photos?.Any() == true ? ProductModel.Photos[0] : "https://via.placeholder.com/400x300?text=No+Image")"
|
src="@(ProductModel.Photos?.Any() == true ? ProductModel.Photos[0] : "https://via.placeholder.com/400x300?text=No+Image")"
|
||||||
alt="@ProductModel.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)" class="w-20 object-cover mx-auto h-20 rounded-xl">
|
alt="@(ProductModel.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)" class="w-20 object-cover mx-auto h-20 rounded-xl">
|
||||||
<div class="flex flex-col justify-center w-full px-2 py-1">
|
<div class="flex flex-col justify-center w-full px-2 py-1">
|
||||||
<div class="flex justify-between items-center ">
|
<div class="flex justify-between items-center ">
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<h2 class="text-xs md:text-sm font-medium">@ProductModel.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h2>
|
<h2 class="text-xs md:text-sm font-medium">@(ProductModel.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h2>
|
||||||
</div>
|
</div>
|
||||||
<svg @onclick="ToggleFavorite" xmlns="http://www.w3.org/2000/svg"
|
<svg @onclick="ToggleFavorite" xmlns="http://www.w3.org/2000/svg"
|
||||||
class="h-0 w-0 md:w-5 md:h-5 @favoriteClass cursor-pointer" fill="none" viewBox="0 0 24 24"
|
class="h-0 w-0 md:w-5 md:h-5 @favoriteClass cursor-pointer" fill="none" viewBox="0 0 24 24"
|
||||||
|
|||||||
@@ -14,12 +14,12 @@
|
|||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3"
|
||||||
d="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" />
|
d="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" />
|
||||||
</svg>
|
</svg>
|
||||||
Bundle
|
@Loc["Bundle"]
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="absolute bottom-3 left-3 px-2 py-1 rounded-lg backdrop-blur-md bg-black/40 border border-white/10">
|
<div class="absolute bottom-3 left-3 px-2 py-1 rounded-lg backdrop-blur-md bg-black/40 border border-white/10">
|
||||||
<span class="text-[9px] font-bold text-white/90 uppercase tracking-tighter">Value Pack</span>
|
<span class="text-[9px] font-bold text-white/90 uppercase tracking-tighter">@Loc["Bundle_Deal"]</span>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -36,11 +36,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3 class="text-xl font-bold text-gray-800 dark:text-neutral-300 group-hover:text-primary transition-colors">
|
<h3 class="text-xl font-bold text-gray-800 dark:text-neutral-300 group-hover:text-primary transition-colors">
|
||||||
@Product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)
|
@(Product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<p class="mt-3 text-sm text-gray-500 dark:text-neutral-500 line-clamp-2 leading-relaxed">
|
<p class="mt-3 text-sm text-gray-500 dark:text-neutral-500 line-clamp-2 leading-relaxed">
|
||||||
@Product.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)
|
@(Product.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="mt-4 flex items-center gap-2">
|
<div class="mt-4 flex items-center gap-2">
|
||||||
@@ -60,8 +60,8 @@
|
|||||||
@Loc["View"]
|
@Loc["View"]
|
||||||
</a>
|
</a>
|
||||||
<a class="w-full py-3 px-4 inline-flex justify-center items-center gap-x-2 text-sm font-bold bg-transparent text-gray-800 hover:bg-white dark:text-white dark:hover:bg-neutral-800 transition-all rounded-ee-xl"
|
<a class="w-full py-3 px-4 inline-flex justify-center items-center gap-x-2 text-sm font-bold bg-transparent text-gray-800 hover:bg-white dark:text-white dark:hover:bg-neutral-800 transition-all rounded-ee-xl"
|
||||||
href="#">
|
href="/contact">
|
||||||
@Loc["Contact_Us"]
|
@Loc["Add_to_Cart"]
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
{
|
{
|
||||||
<img src="@Product.Photos[0]"
|
<img src="@Product.Photos[0]"
|
||||||
class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110"
|
class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110"
|
||||||
alt="@Product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)" />
|
alt="@(Product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)" />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -55,11 +55,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3 class="text-xl font-bold text-base-content mb-2 line-clamp-1 group-hover:text-primary transition-colors">
|
<h3 class="text-xl font-bold text-base-content mb-2 line-clamp-1 group-hover:text-primary transition-colors">
|
||||||
@Product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)
|
@(GetTranslation(Product)?.Info?.Name ?? string.Empty)
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<p class="text-sm text-base-content opacity-60 line-clamp-2 mb-4">
|
<p class="text-sm text-base-content opacity-60 line-clamp-2 mb-4">
|
||||||
@Product.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)
|
@(GetTranslation(Product)?.Info?.Description ?? string.Empty)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@* Price Section *@
|
@* Price Section *@
|
||||||
@@ -97,4 +97,28 @@
|
|||||||
var discount = Product.Discount ?? 0;
|
var discount = Product.Discount ?? 0;
|
||||||
return Math.Round(Product.Price.Value * (1 - discount / 100.0), 2);
|
return Math.Round(Product.Price.Value * (1 - discount / 100.0), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ProductTranslationVM? GetTranslation(ProductVM? product)
|
||||||
|
{
|
||||||
|
if (product?.Translations == null || !product.Translations.Any())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var currentLang = System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName ?? "en";
|
||||||
|
|
||||||
|
var translation = product.Translations.FirstOrDefault(t =>
|
||||||
|
string.Equals(t.Language, currentLang, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
if (translation == null)
|
||||||
|
{
|
||||||
|
translation = product.Translations.FirstOrDefault(t =>
|
||||||
|
string.Equals(t.Language, "en", StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (translation == null)
|
||||||
|
{
|
||||||
|
translation = product.Translations.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,29 @@
|
|||||||
@page "/product/{Id:guid}"
|
@page "/product/{Id:guid}"
|
||||||
|
@using System.Globalization
|
||||||
|
@using Microsoft.Extensions.Localization
|
||||||
|
@using Common
|
||||||
@inject ProductAPIConsumer ProductService
|
@inject ProductAPIConsumer ProductService
|
||||||
|
@inject IStringLocalizer<SharedRes> Loc
|
||||||
|
|
||||||
<div class="container mx-auto px-4 py-8 md:py-16">
|
<div class="flex flex-col gap-8 pb-20">
|
||||||
|
<!-- Hero Banner - overlaps with nav menu -->
|
||||||
|
<div class="relative w-full h-80 overflow-hidden shadow-2xl -mt-16 md:-mt-20">
|
||||||
|
<div class="absolute inset-0 bg-cover bg-center"
|
||||||
|
style="background-image: url(https://img.daisyui.com/images/stock/photo-1507358522600-9f71e620c44e.webp);">
|
||||||
|
</div>
|
||||||
|
<div class="absolute inset-0 bg-black/50 backdrop-blur-[2px]"></div>
|
||||||
|
<div class="relative z-10 h-full flex flex-col justify-center items-center text-center text-white py-16 px-6">
|
||||||
|
<h1 class="text-4xl md:text-6xl font-extrabold mb-4 tracking-tight">@(GetTranslation(_product)?.Info?.Name ?? Loc["Product_Details"])</h1>
|
||||||
|
<p class="text-lg md:text-xl max-w-2xl" style="color: #cbd5e1 !important;">@Loc["Product_Banner_Subtitle"]</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container mx-auto px-4">
|
||||||
@if (_loading)
|
@if (_loading)
|
||||||
{
|
{
|
||||||
<div class="flex flex-col items-center justify-center min-h-[50vh] gap-4">
|
<div class="flex flex-col items-center justify-center min-h-[50vh] gap-4">
|
||||||
<div class="loading loading-spinner loading-lg text-primary"></div>
|
<div class="loading loading-spinner loading-lg text-primary"></div>
|
||||||
<p class="text-gray-500 animate-pulse">@Loc["Loading_Product"]...</p>
|
<p class="animate-pulse" style="color: #94a3b8 !important;">@Loc["Loading_Product"]...</p>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
else if (_product == null)
|
else if (_product == null)
|
||||||
@@ -19,8 +36,8 @@
|
|||||||
d="M9.172 9.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
d="M9.172 9.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="text-2xl font-bold text-gray-800">@Loc["Product_Not_Found"]</h2>
|
<h2 class="text-2xl font-bold text-white">@Loc["Product_Not_Found"]</h2>
|
||||||
<a href="/shop" class="btn btn-primary">@Loc["Back_to_Shop"]</a>
|
<a href="/shop" class="btn bg-orange-600 hover:bg-orange-700 text-white border-orange-600">@Loc["Back_to_Shop"]</a>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -42,16 +59,16 @@
|
|||||||
@_product.CategoryName
|
@_product.CategoryName
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
<h1 class="text-4xl md:text-5xl font-black text-gray-900 leading-tight mb-4">
|
<h1 class="text-4xl md:text-5xl font-black text-white leading-tight mb-4">
|
||||||
@(_product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)</h1>
|
@(GetTranslation(_product)?.Info?.Name ?? string.Empty)</h1>
|
||||||
|
|
||||||
<div class="flex items-center gap-4">
|
<div class="flex items-center gap-4">
|
||||||
<span class="text-3xl font-bold text-primary">
|
<span class="text-3xl font-bold text-primary">
|
||||||
@(_product.Price * (1 - _product.Discount / 100)) $
|
@FormatPrice(_product.Price * (1 - _product.Discount / 100)) $
|
||||||
</span>
|
</span>
|
||||||
@if (_product.Discount > 0)
|
@if (_product.Discount > 0)
|
||||||
{
|
{
|
||||||
<span class="text-xl text-gray-400 line-through">@_product.Price $</span>
|
<span class="text-xl line-through" style="color: #94a3b8 !important;">@FormatPrice(_product.Price) $</span>
|
||||||
<span class="bg-green-500 text-white text-xs font-bold px-2 py-1 rounded">
|
<span class="bg-green-500 text-white text-xs font-bold px-2 py-1 rounded">
|
||||||
-@_product.Discount%
|
-@_product.Discount%
|
||||||
</span>
|
</span>
|
||||||
@@ -60,11 +77,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tabs tabs-bordered mb-4">
|
<div class="tabs tabs-bordered mb-4">
|
||||||
<button class="tab tab-lg @(_activeTab == "description" ? "tab-active font-bold text-primary" : "")"
|
<button class="tab tab-lg text-white/70 hover:text-white @(_activeTab == "description" ? "tab-active font-bold text-primary !text-primary" : "")"
|
||||||
@onclick='() => _activeTab = "description"'>
|
@onclick='() => _activeTab = "description"'>
|
||||||
@Loc["Description"]
|
@Loc["Description"]
|
||||||
</button>
|
</button>
|
||||||
<button class="tab tab-lg @(_activeTab == "technical" ? "tab-active font-bold text-primary" : "")"
|
<button class="tab tab-lg text-white/70 hover:text-white @(_activeTab == "technical" ? "tab-active font-bold text-primary !text-primary" : "")"
|
||||||
@onclick='() => _activeTab = "technical"'>
|
@onclick='() => _activeTab = "technical"'>
|
||||||
@Loc["Technical_Details"]
|
@Loc["Technical_Details"]
|
||||||
</button>
|
</button>
|
||||||
@@ -73,15 +90,15 @@
|
|||||||
<div class="min-h-[200px]">
|
<div class="min-h-[200px]">
|
||||||
@if (_activeTab == "description")
|
@if (_activeTab == "description")
|
||||||
{
|
{
|
||||||
<div class="prose prose-lg text-gray-600 max-w-none animate-in fade-in duration-300">
|
<div class="prose prose-lg max-w-none animate-in fade-in duration-300" style="color: #cbd5e1 !important;">
|
||||||
<p>@(_product.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)</p>
|
<p>@(GetTranslation(_product)?.Info?.Description ?? string.Empty)</p>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
else if (_activeTab == "technical")
|
else if (_activeTab == "technical")
|
||||||
{
|
{
|
||||||
<!-- Technical Details -->
|
<!-- Technical Details -->
|
||||||
@if (_product.Translations?.FirstOrDefault()?.Info?.TechnicalDetails != null &&
|
@if (GetTranslation(_product)?.Info?.TechnicalDetails != null &&
|
||||||
_product.Translations?.FirstOrDefault()?.Info?.TechnicalDetails?.Any() == true)
|
GetTranslation(_product)?.Info?.TechnicalDetails?.Any() == true)
|
||||||
{
|
{
|
||||||
<div class="bg-gray-50 rounded-2xl p-6 md:p-8 animate-in fade-in duration-300">
|
<div class="bg-gray-50 rounded-2xl p-6 md:p-8 animate-in fade-in duration-300">
|
||||||
<h3 class="text-xl font-bold mb-6 flex items-center gap-2">
|
<h3 class="text-xl font-bold mb-6 flex items-center gap-2">
|
||||||
@@ -93,11 +110,11 @@
|
|||||||
@Loc["Technical_Specifications"]
|
@Loc["Technical_Specifications"]
|
||||||
</h3>
|
</h3>
|
||||||
<dl class="grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-4">
|
<dl class="grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-4">
|
||||||
@foreach (var detail in _product.Translations?.FirstOrDefault()?.Info?.TechnicalDetails ?? new())
|
@foreach (var detail in GetTranslation(_product)?.Info?.TechnicalDetails ?? new())
|
||||||
{
|
{
|
||||||
<div class="flex flex-col border-b border-gray-200 pb-2">
|
<div class="flex flex-col border-b border-gray-200 pb-2">
|
||||||
<dt class="text-sm font-semibold text-gray-500">@detail.Key</dt>
|
<dt class="text-sm font-semibold" style="color: #94a3b8 !important;">@detail.Key</dt>
|
||||||
<dd class="text-base text-gray-900 font-medium">@detail.Value</dd>
|
<dd class="text-base text-white font-medium">@detail.Value</dd>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</dl>
|
</dl>
|
||||||
@@ -105,21 +122,21 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<p class="text-gray-500 italic">@Loc["No_Technical_Details_Available"]</p>
|
<p class="italic" style="color: #94a3b8 !important;">@Loc["No_Technical_Details_Available"]</p>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="pt-6 flex flex-wrap gap-4">
|
<div class="pt-6 flex flex-wrap gap-4">
|
||||||
<button class="btn btn-primary btn-lg flex-1 md:flex-none md:min-w-[200px] shadow-xl shadow-primary/20">
|
<a href="/contact" class="btn bg-orange-600 hover:bg-orange-700 text-white border-orange-600 btn-lg flex-1 md:flex-none md:min-w-[200px] shadow-xl shadow-orange-500/20">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24"
|
||||||
stroke="currentColor">
|
stroke="currentColor">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" />
|
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||||
</svg>
|
</svg>
|
||||||
@Loc["Add_to_Cart"]
|
@Loc["Add_to_Cart"]
|
||||||
</button>
|
</a>
|
||||||
<button class="btn btn-outline btn-lg">
|
<button class="btn bg-orange-600/10 hover:bg-orange-600/20 text-orange-400 border-orange-600/30 btn-lg">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24"
|
||||||
stroke="currentColor">
|
stroke="currentColor">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
@@ -136,7 +153,7 @@
|
|||||||
<div class="mt-20 pt-16 border-t border-gray-100 animate-in slide-in-from-bottom-10 duration-700">
|
<div class="mt-20 pt-16 border-t border-gray-100 animate-in slide-in-from-bottom-10 duration-700">
|
||||||
<div class="flex flex-col gap-10">
|
<div class="flex flex-col gap-10">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<h2 class="text-3xl font-black text-gray-900 tracking-tight flex items-center gap-3">
|
<h2 class="text-3xl font-black text-white tracking-tight flex items-center gap-3">
|
||||||
<div class="p-2 bg-primary/10 rounded-xl text-primary">
|
<div class="p-2 bg-primary/10 rounded-xl text-primary">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24"
|
||||||
stroke="currentColor">
|
stroke="currentColor">
|
||||||
@@ -164,7 +181,7 @@
|
|||||||
{
|
{
|
||||||
<img src="@child.Photos[0]"
|
<img src="@child.Photos[0]"
|
||||||
class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-700"
|
class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-700"
|
||||||
alt="@(child.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)" />
|
alt="@(GetTranslation(child)?.Info?.Name ?? string.Empty)" />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -181,14 +198,14 @@
|
|||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<h4
|
<h4
|
||||||
class="font-bold text-lg text-gray-900 group-hover:text-primary transition-colors truncate">
|
class="font-bold text-lg text-gray-900 group-hover:text-primary transition-colors truncate">
|
||||||
@(child.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)
|
@(GetTranslation(child)?.Info?.Name ?? string.Empty)
|
||||||
</h4>
|
</h4>
|
||||||
<p class="text-sm text-gray-500 line-clamp-2 leading-relaxed mt-2">
|
<p class="text-sm text-gray-600 group-hover:text-gray-700 line-clamp-2 leading-relaxed mt-2 transition-colors">
|
||||||
@(child.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)</p>
|
@(GetTranslation(child)?.Info?.Description ?? string.Empty)</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="/product/@child.Id"
|
<a href="/product/@child.Id"
|
||||||
class="btn btn-primary btn-sm rounded-xl w-full gap-2 shadow-lg shadow-primary/10">
|
class="btn bg-orange-600 hover:bg-orange-700 text-white border-orange-600 btn-sm rounded-xl w-full gap-2 shadow-lg shadow-orange-500/10">
|
||||||
@Loc["View_Details"]
|
@Loc["View_Details"]
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24"
|
||||||
stroke="currentColor">
|
stroke="currentColor">
|
||||||
@@ -204,6 +221,7 @@
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
@@ -213,6 +231,48 @@
|
|||||||
private bool _loading = true;
|
private bool _loading = true;
|
||||||
private string _activeTab = "description";
|
private string _activeTab = "description";
|
||||||
|
|
||||||
|
private string FormatPrice(double? price)
|
||||||
|
{
|
||||||
|
if (!price.HasValue) return "0.00";
|
||||||
|
return price.Value.ToString("F2");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the translation for the current UI culture.
|
||||||
|
/// Falls back to English, then to the first available translation.
|
||||||
|
/// </summary>
|
||||||
|
private ProductTranslationVM? GetTranslation(ProductVM? product)
|
||||||
|
{
|
||||||
|
if (product?.Translations == null || !product.Translations.Any())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var currentLang = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName ?? "en";
|
||||||
|
|
||||||
|
// Try current culture first
|
||||||
|
var translation = product.Translations.FirstOrDefault(t =>
|
||||||
|
string.Equals(t.Language, currentLang, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
// Fall back to English
|
||||||
|
if (translation == null)
|
||||||
|
{
|
||||||
|
translation = product.Translations.FirstOrDefault(t =>
|
||||||
|
string.Equals(t.Language, "en", StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fall back to first available
|
||||||
|
if (translation == null)
|
||||||
|
{
|
||||||
|
translation = product.Translations.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the translation for a child product.
|
||||||
|
/// </summary>
|
||||||
|
private ProductTranslationVM? GetTranslation(ProductVM product, ProductVM child) => GetTranslation(child);
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
protected override async Task OnParametersSetAsync()
|
||||||
{
|
{
|
||||||
_loading = true;
|
_loading = true;
|
||||||
|
|||||||
@@ -7,31 +7,30 @@
|
|||||||
|
|
||||||
<div class="flex flex-col gap-8 pb-20">
|
<div class="flex flex-col gap-8 pb-20">
|
||||||
<!-- Hero Section -->
|
<!-- Hero Section -->
|
||||||
<div class="relative w-full h-80 rounded-2xl overflow-hidden shadow-2xl">
|
<div class="relative w-full h-80 rounded-b-2xl overflow-hidden shadow-2xl">
|
||||||
<div class="absolute inset-0 bg-cover bg-center"
|
<div class="absolute inset-0 bg-cover bg-center"
|
||||||
style="background-image: url(https://img.daisyui.com/images/stock/photo-1507358522600-9f71e620c44e.webp);">
|
style="background-image: url(https://img.daisyui.com/images/stock/photo-1507358522600-9f71e620c44e.webp);">
|
||||||
</div>
|
</div>
|
||||||
<div class="absolute inset-0 bg-black/50 backdrop-blur-[2px]"></div>
|
<div class="absolute inset-0 bg-black/50 backdrop-blur-[2px]"></div>
|
||||||
<div class="relative z-10 h-full flex flex-col justify-center items-center text-center text-white p-6">
|
<div class="relative z-10 h-full flex flex-col justify-center items-center text-center text-white py-12 px-6">
|
||||||
<h1 class="text-4xl md:text-6xl font-extrabold mb-4 tracking-tight">Discover Premium Quality</h1>
|
<h1 class="text-4xl md:text-6xl font-extrabold mb-4 tracking-tight">@Loc["Welcome_to_Our_Shop"]</h1>
|
||||||
<p class="text-lg md:text-xl text-gray-200 max-w-2xl">Explore our curated collection of top-tier products
|
<p class="text-lg md:text-xl text-gray-200 max-w-2xl">@Loc["Best_Quality_Products"]</p>
|
||||||
and exclusive bundles designed to elevate your lifestyle.</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Filter Section -->
|
<!-- Filter Section -->
|
||||||
<EditForm Model="productFilter" OnValidSubmit="() => OnSearchProduct(1)"
|
<EditForm Model="productFilter" OnValidSubmit="() => OnSearchProduct(1)"
|
||||||
class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6 border border-gray-100 dark:border-gray-700">
|
class="bg-white dark:bg-gray-800 rounded-b-xl shadow-lg p-6 border border-gray-100 dark:border-gray-700 -mt-8">
|
||||||
|
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-4 gap-6 items-end">
|
<div class="grid grid-cols-1 lg:grid-cols-4 gap-6 items-end">
|
||||||
<!-- Search -->
|
<!-- Search -->
|
||||||
<div class="lg:col-span-1">
|
<div class="lg:col-span-1">
|
||||||
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">Search</label>
|
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">@Loc["Search"]</label>
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<InputText @bind-Value="productFilter.Name" placeholder="Search products..."
|
<InputText @bind-Value="productFilter.Name" placeholder="@Loc["Search_Products"]"
|
||||||
class="w-full pl-4 pr-10 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white" />
|
class="w-full pl-4 pr-10 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-orange-500 focus:border-orange-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white" />
|
||||||
<button type="submit"
|
<button type="submit"
|
||||||
class="absolute right-2 top-1/2 -translate-y-1/2 p-2 text-gray-400 hover:text-blue-500">
|
class="absolute right-2 top-1/2 -translate-y-1/2 p-2 text-gray-400 hover:text-orange-500">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24"
|
||||||
stroke="currentColor">
|
stroke="currentColor">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
@@ -43,41 +42,40 @@
|
|||||||
|
|
||||||
<!-- Category -->
|
<!-- Category -->
|
||||||
<div class="lg:col-span-1">
|
<div class="lg:col-span-1">
|
||||||
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">Category</label>
|
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">@Loc["Category"]</label>
|
||||||
<CategoryTreeSelect @bind-Value="productFilter.CategoryId" ShowBundles="false"
|
<CategoryTreeSelect @bind-Value="productFilter.CategoryId" ShowBundles="false"
|
||||||
Placeholder="All Categories" />
|
Placeholder="@Loc["All_Categories"]" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Type -->
|
<!-- Type -->
|
||||||
<div class="lg:col-span-1">
|
<div class="lg:col-span-1">
|
||||||
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">Type</label>
|
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">@Loc["Type"]</label>
|
||||||
<InputSelect @bind-Value="productFilter.IsBundle"
|
<InputSelect @bind-Value="productFilter.IsBundle"
|
||||||
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-orange-500 focus:border-orange-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||||
<option value="">All Types</option>
|
<option value="true">@Loc["Bundles_Only"]</option>
|
||||||
<option value="true">Bundles Only</option>
|
<option value="false">@Loc["Products_Only"]</option>
|
||||||
<option value="false">Products Only</option>
|
|
||||||
</InputSelect>
|
</InputSelect>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Price -->
|
<!-- Price -->
|
||||||
<div class="lg:col-span-1">
|
<div class="lg:col-span-1">
|
||||||
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">Max Price</label>
|
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">@Loc["Max_Price"]</label>
|
||||||
<InputNumber @bind-Value="productFilter.Price" placeholder="Max Price"
|
<InputNumber @bind-Value="productFilter.Price" placeholder="@Loc["Max_Price"]"
|
||||||
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white" />
|
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-orange-500 focus:border-orange-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Discount -->
|
<!-- Discount -->
|
||||||
<div class="lg:col-span-1">
|
<div class="lg:col-span-1">
|
||||||
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">Min Discount %</label>
|
<label class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">@Loc["Min_Discount"] %</label>
|
||||||
<InputNumber @bind-Value="productFilter.Discount" placeholder="Min Discount"
|
<InputNumber @bind-Value="productFilter.Discount" placeholder="@Loc["Min_Discount"]"
|
||||||
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white" />
|
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-orange-500 focus:border-orange-500 outline-none transition-all dark:bg-gray-700 dark:border-gray-600 dark:text-white" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Action -->
|
<!-- Action -->
|
||||||
<div class="lg:col-span-1">
|
<div class="lg:col-span-1">
|
||||||
<button type="submit"
|
<button type="submit"
|
||||||
class="w-full py-3 bg-blue-600 hover:bg-blue-700 text-white font-semibold rounded-lg shadow-md transition-colors duration-200">
|
class="w-full py-3 bg-orange-600 hover:bg-orange-700 text-white font-semibold rounded-lg shadow-md transition-colors duration-200">
|
||||||
Apply Filters
|
@Loc["Apply_Filters"]
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -88,7 +86,14 @@
|
|||||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 w-full h-full gap-5 p-5 md:p-12 lg:p-20">
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 w-full h-full gap-5 p-5 md:p-12 lg:p-20">
|
||||||
@foreach (var product in products)
|
@foreach (var product in products)
|
||||||
{
|
{
|
||||||
<ProductComp4 Product="product" />
|
@if (product.IsBundle)
|
||||||
|
{
|
||||||
|
<BundleComp Bundle="product" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<ProductComp4 Product="product" />
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -130,6 +135,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
// Redirect to add IsBundle=true parameter if not present
|
||||||
|
if (!IsBundle.HasValue)
|
||||||
|
{
|
||||||
|
var uri = nav.GetUriWithQueryParameter("IsBundle", true);
|
||||||
|
nav.NavigateTo(uri, forceLoad: false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected async override Task OnInitializedAsync()
|
protected async override Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(CategoryId))
|
if (string.IsNullOrEmpty(CategoryId))
|
||||||
|
|||||||
@@ -1,65 +1,94 @@
|
|||||||
@page "/shop/categories"
|
@page "/categories"
|
||||||
@inject CategoryAPIConsumer categoryService
|
@using Commerce.Contracts.DTOs
|
||||||
|
@inject CategoryAPIConsumer categoryAPIConsumer
|
||||||
|
|
||||||
|
<!-- Hero Section -->
|
||||||
<div class="hero h-1/3"
|
<div class="relative w-full h-80 rounded-b-2xl overflow-hidden shadow-2xl mb-12 mt-32 md:mt-36">
|
||||||
style="background-image: url(https://img.daisyui.com/images/stock/photo-1507358522600-9f71e620c44e.webp);">
|
<div class="absolute inset-0 bg-cover bg-center"
|
||||||
<div class="hero-overlay bg-opacity-60"></div>
|
style="background-image: url(https://img.daisyui.com/images/stock/photo-1507358522600-9f71e620c44e.webp);">
|
||||||
<div class="hero-content text-white text-center pt-20">
|
</div>
|
||||||
<div class="max-w-md">
|
<div class="absolute inset-0 bg-black/50 backdrop-blur-[2px]"></div>
|
||||||
<h1 class="mb-5 text-5xl font-bold ">@Loc["Our_Categories"]</h1>
|
<div class="relative z-10 h-full flex flex-col justify-center items-center text-center text-white py-16 px-6">
|
||||||
<p class="mb-5">@Loc["Provident_cupiditate_voluptatem"]</p>
|
<h1 class="text-5xl md:text-7xl font-extrabold mb-4 tracking-tight">@Loc["Our_Categories"]</h1>
|
||||||
<button class="btn btn-primary">@Loc["Get_Started"]</button>
|
<p class="text-lg md:text-xl text-gray-200 max-w-2xl">@Loc["Provident_cupiditate_voluptatem"]</p>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Categories Tree View -->
|
||||||
|
<div class="max-w-full mx-auto px-4 pb-20">
|
||||||
<div class="max-w-7xl mx-auto p-10">
|
|
||||||
@if (_loading)
|
@if (_loading)
|
||||||
{
|
{
|
||||||
<div class="flex flex-col items-center justify-center py-20 gap-4">
|
<div class="flex flex-col items-center justify-center py-20 gap-4">
|
||||||
<span class="loading loading-infinity loading-lg text-primary"></span>
|
<span class="loading loading-infinity loading-lg text-primary"></span>
|
||||||
<span class="text-sm font-bold opacity-50">Loading Categories...</span>
|
<span class="text-sm font-bold opacity-50">@Loc["Loading_Categories"]</span>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
else if (categories == null || !categories.Any())
|
else if (_categoryTree == null || !_categoryTree.Any())
|
||||||
{
|
{
|
||||||
<div class="flex flex-col items-center justify-center py-20 opacity-40 italic">
|
<div class="flex flex-col items-center justify-center py-20 gap-3">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-16 w-16 mb-4" fill="none" viewBox="0 0 24 24"
|
@if (!string.IsNullOrEmpty(_errorMessage))
|
||||||
stroke="currentColor">
|
{
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
<div class="alert alert-warning max-w-2xl"
|
||||||
d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
|
style="background-color: rgba(251, 146, 60, 0.1); border: 1px solid rgba(251, 146, 60, 0.3);">
|
||||||
</svg>
|
<svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none"
|
||||||
<span>No categories found.</span>
|
viewBox="0 0 24 24" style="color: #fb923c;">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
|
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
|
||||||
|
</svg>
|
||||||
|
<div>
|
||||||
|
<h3 class="font-bold" style="color: #fb923c;">Unable to load categories</h3>
|
||||||
|
<div class="text-sm" style="color: #cbd5e1;">@_errorMessage</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-16 w-16 mb-4 opacity-40" fill="none" viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
|
d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
|
||||||
|
</svg>
|
||||||
|
<span class="opacity-40 italic">@Loc["No_Categories_Found"]</span>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<div class="overflow-x-auto pb-4 custom-scrollbar">
|
<!-- Horizontal scroll for deep nesting + Vertical scroll for tall trees -->
|
||||||
<div class="inline-block min-w-max space-y-4">
|
<div class="overflow-x-auto overflow-y-auto pb-4 custom-scrollbar max-h-[70vh]">
|
||||||
@foreach (var category in categories)
|
<div class="inline-block min-w-max space-y-4 px-4">
|
||||||
|
@foreach (var root in _categoryTree)
|
||||||
{
|
{
|
||||||
<CategoryTreeItem Category="category" IsAdmin="false" />
|
<CategoryTreeItem Category="root" OnEdit="NavigateToShop" IsAdmin="false" />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
List<CategoryVM> categories = new List<CategoryVM>();
|
|
||||||
bool _loading = false;
|
bool _loading = false;
|
||||||
|
List<CategoryVM> _categoryTree = new();
|
||||||
|
string _errorMessage = "";
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await LoadTree();
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task LoadTree()
|
||||||
{
|
{
|
||||||
_loading = true;
|
_loading = true;
|
||||||
|
_errorMessage = "";
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
categories = await categoryService.FetchCategoryTree();
|
_categoryTree = await categoryAPIConsumer.FetchCategoryTree();
|
||||||
|
Console.WriteLine($"[Categories] Loaded {_categoryTree.Count} root categories");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"[Categories] Error loading tree: {ex.Message}");
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -67,4 +96,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NavigateToShop(CategoryVM category)
|
||||||
|
{
|
||||||
|
// Navigation is handled by the CategoryTreeItem via the Visit button
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -22,9 +22,9 @@
|
|||||||
<!-- Search Bar -->
|
<!-- Search Bar -->
|
||||||
<div class="flex items-center space-x-4">
|
<div class="flex items-center space-x-4">
|
||||||
<InputText @bind-Value="productFilter.Name" type="text" placeholder="Search..."
|
<InputText @bind-Value="productFilter.Name" type="text" placeholder="Search..."
|
||||||
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" />
|
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-orange-500" />
|
||||||
<button type="submit"
|
<button type="submit"
|
||||||
class="px-6 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-500">@Loc["Search"]</button>
|
class="px-6 py-2 bg-orange-500 text-white rounded-lg hover:bg-orange-600 focus:outline-none focus:ring-2 focus:ring-orange-500">@Loc["Search"]</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Filters -->
|
<!-- Filters -->
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<label class="block text-sm font-medium text-gray-700">@Loc["Category"]</label>
|
<label class="block text-sm font-medium text-gray-700">@Loc["Category"]</label>
|
||||||
<InputSelect @bind-Value="productFilter.CategoryId"
|
<InputSelect @bind-Value="productFilter.CategoryId"
|
||||||
class="mt-1 block w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
|
class="mt-1 block w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-orange-500">
|
||||||
<option value="">@Loc["All_Categories"]</option>
|
<option value="">@Loc["All_Categories"]</option>
|
||||||
|
|
||||||
@foreach (var item in categories.Where(x => x.IsBundle == false).ToList())
|
@foreach (var item in categories.Where(x => x.IsBundle == false).ToList())
|
||||||
|
|||||||
@@ -17,13 +17,13 @@
|
|||||||
<div class="relative">
|
<div class="relative">
|
||||||
@if (IsTextArea)
|
@if (IsTextArea)
|
||||||
{
|
{
|
||||||
<textarea @bind="CurrentValue" @bind:event="oninput" class="textarea textarea-bordered w-full h-24"
|
<textarea value="@CurrentValue" @oninput="OnInput" class="textarea textarea-bordered w-full h-24"
|
||||||
placeholder="@Placeholder"></textarea>
|
placeholder="@(Placeholder)"></textarea>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<input type="text" @bind="CurrentValue" @bind:event="oninput" class="input input-bordered w-full"
|
<input type="text" value="@CurrentValue" @oninput="OnInput" class="input input-bordered w-full"
|
||||||
placeholder="@Placeholder" />
|
placeholder="@(Placeholder)" />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -57,7 +57,6 @@
|
|||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(ActiveCulture))
|
if (string.IsNullOrEmpty(ActiveCulture))
|
||||||
{
|
{
|
||||||
// Default to current culture if supported, otherwise en
|
|
||||||
var current = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
|
var current = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
|
||||||
if (SupportedCultures.ContainsKey(current))
|
if (SupportedCultures.ContainsKey(current))
|
||||||
{
|
{
|
||||||
@@ -66,15 +65,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string CurrentValue
|
private string CurrentValue => Value != null && Value.TryGetValue(ActiveCulture, out var v) ? v : "";
|
||||||
|
|
||||||
|
private void OnInput(ChangeEventArgs e)
|
||||||
{
|
{
|
||||||
get => Value != null && Value.TryGetValue(ActiveCulture, out var v) ? v : "";
|
var value = e.Value?.ToString() ?? "";
|
||||||
set
|
if (Value == null) Value = new();
|
||||||
{
|
Value[ActiveCulture] = value;
|
||||||
if (Value == null) Value = new();
|
ValueChanged.InvokeAsync(Value);
|
||||||
Value[ActiveCulture] = value;
|
|
||||||
ValueChanged.InvokeAsync(Value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SelectCulture(string culture)
|
private async Task SelectCulture(string culture)
|
||||||
|
|||||||
@@ -26,10 +26,10 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="../../../../../../Backend/SharedLogic/Generic/Generic.CL/Generic.CL.csproj" />
|
<ProjectReference Include="../../../../../../Backend/SharedLogic/Generic/Generic.CL.csproj" />
|
||||||
<ProjectReference Include="../../../../Layouts/LayoutLib.Layout/LayoutLib.Layout.csproj" />
|
<ProjectReference Include="../../../../Layouts/LayoutLib.Layout/LayoutLib.Layout.csproj" />
|
||||||
<ProjectReference Include="../../../../Generic/Common.RCL/Common.RCL.csproj" />
|
<ProjectReference Include="../../../../Generic/Common.RCL/Common.RCL.csproj" />
|
||||||
<ProjectReference Include="../../../../Generic/Carousel.RCL/Carousel.RCL.csproj" />
|
<ProjectReference Include="../../../../Generic/Carousel.RCL/Carousel.csproj" />
|
||||||
<ProjectReference Include="../../../../Generic/Media.RCL/Media.RCL.csproj" />
|
<ProjectReference Include="../../../../Generic/Media.RCL/Media.RCL.csproj" />
|
||||||
<ProjectReference Include="../../../../Generic/ImageViewer.RCL/ImageViewer.RCL.csproj" />
|
<ProjectReference Include="../../../../Generic/ImageViewer.RCL/ImageViewer.RCL.csproj" />
|
||||||
<ProjectReference Include="../../../../../../Backend/APIs/ERP/Commerce/ECommerce/ECommerce.Contracts/ECommerce.Contracts.csproj" />
|
<ProjectReference Include="../../../../../../Backend/APIs/ERP/Commerce/ECommerce/ECommerce.Contracts/ECommerce.Contracts.csproj" />
|
||||||
|
|||||||
@@ -14,5 +14,8 @@
|
|||||||
@inject IStringLocalizer<ECommerce.Module.SharedRes> Loc
|
@inject IStringLocalizer<ECommerce.Module.SharedRes> Loc
|
||||||
@using Microsoft.JSInterop
|
@using Microsoft.JSInterop
|
||||||
@using Common
|
@using Common
|
||||||
|
@using Common.RCL.Common
|
||||||
@using Generic.ImageViewer
|
@using Generic.ImageViewer
|
||||||
@using LayoutLib
|
@using LayoutLib
|
||||||
|
@using ECommerce.Module.Components.Shared
|
||||||
|
@using ECommerce.Module.Components.Pages.Shop.Components
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/Common.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/Common.RCL/obj/Debug/net10.0/scopedcss/bundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/Common.RCL/obj/Debug/net10.0/compressed/"],"Root":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"background.png"},"Patterns":null},"Common.RCL.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"Common.RCL.styles.css"},"Patterns":null},"Common.RCL.styles.css.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"fy9rjyaakk-{0}-dph6jvottp-dph6jvottp.gz"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"fiwgk79u47-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"css":{"Children":{"carousal.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/carousal.js"},"Patterns":null},"carousal.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"32onbuj1wh-{0}-vnhftjewbd-vnhftjewbd.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/obj/Debug/net10.0/scopedcss/bundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/obj/Debug/net10.0/compressed/"],"Root":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"background.png"},"Patterns":null},"Common.RCL.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"Common.RCL.styles.css"},"Patterns":null},"Common.RCL.styles.css.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"fy9rjyaakk-{0}-dph6jvottp-dph6jvottp.gz"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"fiwgk79u47-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"css":{"Children":{"carousal.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/carousal.js"},"Patterns":null},"carousal.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"32onbuj1wh-{0}-eo2dy7b2yn-eo2dy7b2yn.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/obj/Debug/net10.0/scopedcss/bundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/obj/Debug/net10.0/compressed/"],"Root":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"background.png"},"Patterns":null},"Common.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"Common.styles.css"},"Patterns":null},"Common.styles.css.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"8adx25x7bv-{0}-dyev8wf6eo-dyev8wf6eo.gz"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"2lk3dd1lz9-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"css":{"Children":{"carousal.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/carousal.js"},"Patterns":null},"carousal.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"ywk08q3juw-{0}-vnhftjewbd-vnhftjewbd.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
|
||||||
Binary file not shown.
Binary file not shown.
+17
@@ -10,6 +10,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Blazored.FluentValidation": "2.2.0",
|
"Blazored.FluentValidation": "2.2.0",
|
||||||
"Blazored.LocalStorage": "4.5.0",
|
"Blazored.LocalStorage": "4.5.0",
|
||||||
|
"Carousel": "1.0.0",
|
||||||
"Common.RCL": "1.0.0",
|
"Common.RCL": "1.0.0",
|
||||||
"ECommerce.Contracts": "1.0.0",
|
"ECommerce.Contracts": "1.0.0",
|
||||||
"Generic.CL": "1.0.0",
|
"Generic.CL": "1.0.0",
|
||||||
@@ -336,6 +337,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Carousel/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"Carousel.dll": {
|
||||||
|
"assemblyVersion": "1.0.0.0",
|
||||||
|
"fileVersion": "1.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"Common.RCL/1.0.0": {
|
"Common.RCL/1.0.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Generic.CL": "1.0.0",
|
"Generic.CL": "1.0.0",
|
||||||
@@ -603,6 +615,11 @@
|
|||||||
"path": "mudblazor/8.9.0",
|
"path": "mudblazor/8.9.0",
|
||||||
"hashPath": "mudblazor.8.9.0.nupkg.sha512"
|
"hashPath": "mudblazor.8.9.0.nupkg.sha512"
|
||||||
},
|
},
|
||||||
|
"Carousel/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
"Common.RCL/1.0.0": {
|
"Common.RCL/1.0.0": {
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,637 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeTarget": {
|
|
||||||
"name": ".NETCoreApp,Version=v10.0",
|
|
||||||
"signature": ""
|
|
||||||
},
|
|
||||||
"compilationOptions": {},
|
|
||||||
"targets": {
|
|
||||||
".NETCoreApp,Version=v10.0": {
|
|
||||||
"ECommerce.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Blazored.FluentValidation": "2.2.0",
|
|
||||||
"Blazored.LocalStorage": "4.5.0",
|
|
||||||
"Carousel": "1.0.0",
|
|
||||||
"Common.RCL": "1.0.0",
|
|
||||||
"Generic.CL": "1.0.0",
|
|
||||||
"ImageViewer.RCL": "1.0.0",
|
|
||||||
"LayoutLib.RCL": "1.0.0",
|
|
||||||
"Media.RCL": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Localization": "10.0.1",
|
|
||||||
"MudBlazor": "8.9.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ECommerce.RCL.dll": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Blazored.FluentValidation/2.2.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"FluentValidation": "12.1.1",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net8.0/Blazored.FluentValidation.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"FluentValidation/12.1.1": {
|
|
||||||
"runtime": {
|
|
||||||
"lib/net8.0/FluentValidation.dll": {
|
|
||||||
"assemblyVersion": "12.0.0.0",
|
|
||||||
"fileVersion": "12.1.1.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.Authorization/10.0.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Authorization": "10.0.1",
|
|
||||||
"Microsoft.AspNetCore.Components": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net10.0/Microsoft.AspNetCore.Components.Authorization.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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Carousel/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Carousel.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Common.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Generic.CL": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Common.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Generic.CL/1.0.0": {
|
|
||||||
"runtime": {
|
|
||||||
"Generic.CL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ImageViewer.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ImageViewer.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"LayoutLib.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Common.RCL": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"MudBlazor": "8.9.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"LayoutLib.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Media.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Blazored.LocalStorage": "4.5.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Authorization": "10.0.1",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Http": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Localization": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Media.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"libraries": {
|
|
||||||
"ECommerce.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Blazored.FluentValidation/2.2.0": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-lBSHW7faCJqwn7KtZt6vqHSiyGvTL5McpS4sQUW3RLu2R5eMmf4oolFeufZfcAB8TV8iI+/PYouz7sn773E8Og==",
|
|
||||||
"path": "blazored.fluentvalidation/2.2.0",
|
|
||||||
"hashPath": "blazored.fluentvalidation.2.2.0.nupkg.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"
|
|
||||||
},
|
|
||||||
"FluentValidation/12.1.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-EPpkIe1yh1a0OXyC100oOA8WMbZvqUu5plwhvYcb7oSELfyUZzfxV48BLhvs3kKo4NwG7MGLNgy1RJiYtT8Dpw==",
|
|
||||||
"path": "fluentvalidation/12.1.1",
|
|
||||||
"hashPath": "fluentvalidation.12.1.1.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.Authorization/10.0.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-Ahez1F0EfsPqIT/X/TcdJCDYjVACHJwIPgZSof33wqLXaENUJNDnzphkmXOiBY1tvok/ZIUVEpeFLWdkLh0IyA==",
|
|
||||||
"path": "microsoft.aspnetcore.components.authorization/10.0.1",
|
|
||||||
"hashPath": "microsoft.aspnetcore.components.authorization.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"
|
|
||||||
},
|
|
||||||
"Carousel/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Common.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Generic.CL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"ImageViewer.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"LayoutLib.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Media.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,653 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeTarget": {
|
|
||||||
"name": ".NETCoreApp,Version=v10.0",
|
|
||||||
"signature": ""
|
|
||||||
},
|
|
||||||
"compilationOptions": {},
|
|
||||||
"targets": {
|
|
||||||
".NETCoreApp,Version=v10.0": {
|
|
||||||
"ECommerceModule/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Blazored.FluentValidation": "2.2.0",
|
|
||||||
"Blazored.LocalStorage": "4.5.0",
|
|
||||||
"Carousel": "1.0.0",
|
|
||||||
"Common": "1.0.0",
|
|
||||||
"ECommerce.Contracts": "1.0.0",
|
|
||||||
"Generic": "1.0.0",
|
|
||||||
"ImageViewer": "1.0.0",
|
|
||||||
"LayoutLib": "1.0.0",
|
|
||||||
"Media": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Localization": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ECommerceModule.dll": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Blazored.FluentValidation/2.2.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"FluentValidation": "12.1.1",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net8.0/Blazored.FluentValidation.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"FluentValidation/12.1.1": {
|
|
||||||
"runtime": {
|
|
||||||
"lib/net8.0/FluentValidation.dll": {
|
|
||||||
"assemblyVersion": "12.0.0.0",
|
|
||||||
"fileVersion": "12.1.1.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.Authorization/10.0.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Authorization": "10.0.1",
|
|
||||||
"Microsoft.AspNetCore.Components": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net10.0/Microsoft.AspNetCore.Components.Authorization.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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Carousel/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Carousel.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Common/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Generic": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Common.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ECommerce.Contracts/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"FluentValidation": "12.1.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ECommerce.Contracts.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Generic/1.0.0": {
|
|
||||||
"runtime": {
|
|
||||||
"Generic.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ImageViewer/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ImageViewer.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"LayoutLib/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Common": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"MudBlazor": "8.9.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"LayoutLib.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Media/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Blazored.LocalStorage": "4.5.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Authorization": "10.0.1",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Http": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Localization": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Media.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"libraries": {
|
|
||||||
"ECommerceModule/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Blazored.FluentValidation/2.2.0": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-lBSHW7faCJqwn7KtZt6vqHSiyGvTL5McpS4sQUW3RLu2R5eMmf4oolFeufZfcAB8TV8iI+/PYouz7sn773E8Og==",
|
|
||||||
"path": "blazored.fluentvalidation/2.2.0",
|
|
||||||
"hashPath": "blazored.fluentvalidation.2.2.0.nupkg.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"
|
|
||||||
},
|
|
||||||
"FluentValidation/12.1.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-EPpkIe1yh1a0OXyC100oOA8WMbZvqUu5plwhvYcb7oSELfyUZzfxV48BLhvs3kKo4NwG7MGLNgy1RJiYtT8Dpw==",
|
|
||||||
"path": "fluentvalidation/12.1.1",
|
|
||||||
"hashPath": "fluentvalidation.12.1.1.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.Authorization/10.0.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-Ahez1F0EfsPqIT/X/TcdJCDYjVACHJwIPgZSof33wqLXaENUJNDnzphkmXOiBY1tvok/ZIUVEpeFLWdkLh0IyA==",
|
|
||||||
"path": "microsoft.aspnetcore.components.authorization/10.0.1",
|
|
||||||
"hashPath": "microsoft.aspnetcore.components.authorization.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"
|
|
||||||
},
|
|
||||||
"Carousel/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Common/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"ECommerce.Contracts/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Generic/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"ImageViewer/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"LayoutLib/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Media/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
{"Version":1,"ManifestType":"Build","Endpoints":[]}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib.Layout/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib.Layout/obj/Debug/net10.0/compressed/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib.Layout/obj/Debug/net10.0/scopedcss/bundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/obj/Debug/net10.0/scopedcss/projectbundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/obj/Debug/net10.0/compressed/","/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/"],"Root":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"background.png"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"pf6lx7tu0a-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"LayoutLib.Layout.styles.css":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"LayoutLib.Layout.styles.css"},"Patterns":null},"LayoutLib.Layout.styles.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"g7xth5w6h2-{0}-71cojco6gr-71cojco6gr.gz"},"Patterns":null},"resources":{"Children":{"SharedRes.ar.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.ar.json"},"Patterns":null},"SharedRes.ar.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"kid53bz92o-{0}-cywhq7x5br-cywhq7x5br.gz"},"Patterns":null},"SharedRes.de.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.de.json"},"Patterns":null},"SharedRes.de.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"jrg4maqdka-{0}-csy8fe3s9x-csy8fe3s9x.gz"},"Patterns":null},"SharedRes.en.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.en.json"},"Patterns":null},"SharedRes.en.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"mbaxl87kuv-{0}-6rydnfhjos-6rydnfhjos.gz"},"Patterns":null},"SharedRes.es.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.es.json"},"Patterns":null},"SharedRes.es.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"rsjrurp1pk-{0}-7peuzf6jmr-7peuzf6jmr.gz"},"Patterns":null},"SharedRes.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.json"},"Patterns":null},"SharedRes.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"r062reo1uf-{0}-6rydnfhjos-6rydnfhjos.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"_content":{"Children":{"Common.RCL":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"background.png"},"Patterns":null},"Common.RCL.dph6jvottp.bundle.scp.css":{"Children":null,"Asset":{"ContentRootIndex":4,"SubPath":"Common.RCL.bundle.scp.css"},"Patterns":null},"Common.RCL.dph6jvottp.bundle.scp.css.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"nyiqsnbdqh-{0}-dph6jvottp-dph6jvottp.gz"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"fiwgk79u47-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"css":{"Children":{"carousal.js":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"css/carousal.js"},"Patterns":null},"carousal.js.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"32onbuj1wh-{0}-eo2dy7b2yn-eo2dy7b2yn.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":3,"Pattern":"**","Depth":2}]},"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":6,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":6,"SubPath":"MudBlazor.min.js"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib/LayoutLib.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib/LayoutLib.RCL/obj/Debug/net10.0/compressed/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib/LayoutLib.RCL/obj/Debug/net10.0/scopedcss/bundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/Common.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/Common.RCL/obj/Debug/net10.0/scopedcss/projectbundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/Common.RCL/obj/Debug/net10.0/compressed/","/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/"],"Root":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"background.png"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"ly0x8gpdve-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"LayoutLib.RCL.styles.css":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"LayoutLib.RCL.styles.css"},"Patterns":null},"LayoutLib.RCL.styles.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"44umfahe6v-{0}-4uc3imhjqu-4uc3imhjqu.gz"},"Patterns":null},"resources":{"Children":{"SharedRes.ar.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.ar.json"},"Patterns":null},"SharedRes.ar.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"4s4ng6c1jl-{0}-w52k902j3l-w52k902j3l.gz"},"Patterns":null},"SharedRes.en.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.en.json"},"Patterns":null},"SharedRes.en.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"1d086a33fb-{0}-z8qc8wrh10-z8qc8wrh10.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"_content":{"Children":{"Common.RCL":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"background.png"},"Patterns":null},"Common.RCL.dph6jvottp.bundle.scp.css":{"Children":null,"Asset":{"ContentRootIndex":4,"SubPath":"Common.RCL.bundle.scp.css"},"Patterns":null},"Common.RCL.dph6jvottp.bundle.scp.css.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"nyiqsnbdqh-{0}-dph6jvottp-dph6jvottp.gz"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"fiwgk79u47-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"css":{"Children":{"carousal.js":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"css/carousal.js"},"Patterns":null},"carousal.js.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"32onbuj1wh-{0}-vnhftjewbd-vnhftjewbd.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":3,"Pattern":"**","Depth":2}]},"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":6,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":6,"SubPath":"MudBlazor.min.js"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib/obj/Debug/net10.0/compressed/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Layouts/LayoutLib/obj/Debug/net10.0/scopedcss/bundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/obj/Debug/net10.0/scopedcss/projectbundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common/obj/Debug/net10.0/compressed/","/home/yla/.nuget/packages/mudblazor/8.9.0/staticwebassets/"],"Root":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"background.png"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"j230ay6ibu-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"LayoutLib.styles.css":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"LayoutLib.styles.css"},"Patterns":null},"LayoutLib.styles.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"o5dp2pr57p-{0}-5phnxoj3fu-5phnxoj3fu.gz"},"Patterns":null},"resources":{"Children":{"SharedRes.ar.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.ar.json"},"Patterns":null},"SharedRes.ar.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"rx6wnqzng0-{0}-w52k902j3l-w52k902j3l.gz"},"Patterns":null},"SharedRes.en.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.en.json"},"Patterns":null},"SharedRes.en.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"zamg5qeycn-{0}-z8qc8wrh10-z8qc8wrh10.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"_content":{"Children":{"Common":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"background.png"},"Patterns":null},"Common.dyev8wf6eo.bundle.scp.css":{"Children":null,"Asset":{"ContentRootIndex":4,"SubPath":"Common.bundle.scp.css"},"Patterns":null},"Common.dyev8wf6eo.bundle.scp.css.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"4dziwjilcl-{0}-dyev8wf6eo-dyev8wf6eo.gz"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"2lk3dd1lz9-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"css":{"Children":{"carousal.js":{"Children":null,"Asset":{"ContentRootIndex":3,"SubPath":"css/carousal.js"},"Patterns":null},"carousal.js.gz":{"Children":null,"Asset":{"ContentRootIndex":5,"SubPath":"ywk08q3juw-{0}-vnhftjewbd-vnhftjewbd.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":3,"Pattern":"**","Depth":2}]},"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":6,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":6,"SubPath":"MudBlazor.min.js"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Media/Media.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Media/Media.RCL/obj/Debug/net10.0/compressed/"],"Root":{"Children":{"css":{"Children":{"cropper.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/cropper.min.css"},"Patterns":null},"cropper.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"w5z14dlnee-{0}-ozxrxjrq84-ozxrxjrq84.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"crop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/crop.js"},"Patterns":null},"crop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"hk7nq8n70x-{0}-rzaytjouo0-rzaytjouo0.gz"},"Patterns":null},"cropper.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/cropper.min.js"},"Patterns":null},"cropper.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"c4qv7zag90-{0}-llc9n82qda-llc9n82qda.gz"},"Patterns":null},"mediaInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/mediaInterop.js"},"Patterns":null},"mediaInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"8rzz1ly4wd-{0}-j3t2utpur3-j3t2utpur3.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"lib":{"Children":{"cropper.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/cropper.min.css"},"Patterns":null},"cropper.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"nsvlrsxof5-{0}-tef8z25zm7-tef8z25zm7.gz"},"Patterns":null},"cropper.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/cropper.min.js"},"Patterns":null},"cropper.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"ke9t4lehyl-{0}-9ydfkw1ttr-9ydfkw1ttr.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Media.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Media.RCL/obj/Debug/net10.0/compressed/"],"Root":{"Children":{"css":{"Children":{"cropper.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/cropper.min.css"},"Patterns":null},"cropper.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"w5z14dlnee-{0}-ozxrxjrq84-ozxrxjrq84.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"crop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/crop.js"},"Patterns":null},"crop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"hk7nq8n70x-{0}-rzaytjouo0-rzaytjouo0.gz"},"Patterns":null},"cropper.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/cropper.min.js"},"Patterns":null},"cropper.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"c4qv7zag90-{0}-llc9n82qda-llc9n82qda.gz"},"Patterns":null},"mediaInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/mediaInterop.js"},"Patterns":null},"mediaInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"8rzz1ly4wd-{0}-j3t2utpur3-j3t2utpur3.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"lib":{"Children":{"cropper.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/cropper.min.css"},"Patterns":null},"cropper.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"nsvlrsxof5-{0}-tef8z25zm7-tef8z25zm7.gz"},"Patterns":null},"cropper.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/cropper.min.js"},"Patterns":null},"cropper.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"ke9t4lehyl-{0}-9ydfkw1ttr-9ydfkw1ttr.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"resources":{"Children":{"SharedRes.ar.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.ar.json"},"Patterns":null},"SharedRes.ar.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"eeb5py100q-{0}-oaez6zahns-oaez6zahns.gz"},"Patterns":null},"SharedRes.de.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.de.json"},"Patterns":null},"SharedRes.de.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"w4da85j0rk-{0}-nc74u8ktlt-nc74u8ktlt.gz"},"Patterns":null},"SharedRes.en.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.en.json"},"Patterns":null},"SharedRes.en.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"avyjuutvtr-{0}-48ympo76ms-48ympo76ms.gz"},"Patterns":null},"SharedRes.es.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.es.json"},"Patterns":null},"SharedRes.es.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"dycy4is8hd-{0}-4uak7l8h6e-4uak7l8h6e.gz"},"Patterns":null},"SharedRes.json":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"resources/SharedRes.json"},"Patterns":null},"SharedRes.json.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"3ccbi69b6f-{0}-48ympo76ms-48ympo76ms.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Media/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Media/obj/Debug/net10.0/compressed/"],"Root":{"Children":{"css":{"Children":{"cropper.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/cropper.min.css"},"Patterns":null},"cropper.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"63e88vs3br-{0}-ozxrxjrq84-ozxrxjrq84.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"crop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/crop.js"},"Patterns":null},"crop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"lps60iqv38-{0}-rzaytjouo0-rzaytjouo0.gz"},"Patterns":null},"cropper.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/cropper.min.js"},"Patterns":null},"cropper.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"srub7l4ycb-{0}-llc9n82qda-llc9n82qda.gz"},"Patterns":null},"mediaInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/mediaInterop.js"},"Patterns":null},"mediaInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"do8do2nz96-{0}-j3t2utpur3-j3t2utpur3.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"lib":{"Children":{"cropper.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/cropper.min.css"},"Patterns":null},"cropper.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"0m7r05w73h-{0}-tef8z25zm7-tef8z25zm7.gz"},"Patterns":null},"cropper.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/cropper.min.js"},"Patterns":null},"cropper.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"xgz1hv2puc-{0}-9ydfkw1ttr-9ydfkw1ttr.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
{"Version":1,"ManifestType":"Build","Endpoints":[]}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"ContentRoots":["/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/wwwroot/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/obj/Release/net10.0/scopedcss/bundle/","/mnt/data/Work/Programming/MainProgram/Frontend/Libs/Generic/Common.RCL/obj/Release/net10.0/compressed/"],"Root":{"Children":{"background.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"background.png"},"Patterns":null},"Common.RCL.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"Common.RCL.styles.css"},"Patterns":null},"Common.RCL.styles.css.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"fy9rjyaakk-{0}-dph6jvottp-dph6jvottp.gz"},"Patterns":null},"exampleJsInterop.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"exampleJsInterop.js"},"Patterns":null},"exampleJsInterop.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"fiwgk79u47-{0}-luzdqbu196-luzdqbu196.gz"},"Patterns":null},"css":{"Children":{"carousal.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/carousal.js"},"Patterns":null},"carousal.js.gz":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"32onbuj1wh-{0}-vnhftjewbd-vnhftjewbd.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,654 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeTarget": {
|
|
||||||
"name": ".NETCoreApp,Version=v10.0",
|
|
||||||
"signature": ""
|
|
||||||
},
|
|
||||||
"compilationOptions": {},
|
|
||||||
"targets": {
|
|
||||||
".NETCoreApp,Version=v10.0": {
|
|
||||||
"ECommerce.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Blazored.FluentValidation": "2.2.0",
|
|
||||||
"Blazored.LocalStorage": "4.5.0",
|
|
||||||
"Carousel": "1.0.0",
|
|
||||||
"Common.RCL": "1.0.0",
|
|
||||||
"ECommerce.Contracts": "1.0.0",
|
|
||||||
"Generic.CL": "1.0.0",
|
|
||||||
"ImageViewer.RCL": "1.0.0",
|
|
||||||
"LayoutLib.RCL": "1.0.0",
|
|
||||||
"Media.RCL": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Localization": "10.0.1",
|
|
||||||
"MudBlazor": "8.9.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ECommerce.RCL.dll": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Blazored.FluentValidation/2.2.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"FluentValidation": "12.1.1",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net8.0/Blazored.FluentValidation.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"FluentValidation/12.1.1": {
|
|
||||||
"runtime": {
|
|
||||||
"lib/net8.0/FluentValidation.dll": {
|
|
||||||
"assemblyVersion": "12.0.0.0",
|
|
||||||
"fileVersion": "12.1.1.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.Authorization/10.0.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Authorization": "10.0.1",
|
|
||||||
"Microsoft.AspNetCore.Components": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net10.0/Microsoft.AspNetCore.Components.Authorization.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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Carousel/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Carousel.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Common.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Generic.CL": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Common.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ECommerce.Contracts/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"FluentValidation": "12.1.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ECommerce.Contracts.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Generic.CL/1.0.0": {
|
|
||||||
"runtime": {
|
|
||||||
"Generic.CL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ImageViewer.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"ImageViewer.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"LayoutLib.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Common.RCL": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"MudBlazor": "8.9.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"LayoutLib.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Media.RCL/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"Blazored.LocalStorage": "4.5.0",
|
|
||||||
"Microsoft.AspNetCore.Components.Authorization": "10.0.1",
|
|
||||||
"Microsoft.AspNetCore.Components.Web": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Http": "10.0.1",
|
|
||||||
"Microsoft.Extensions.Localization": "10.0.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"Media.RCL.dll": {
|
|
||||||
"assemblyVersion": "1.0.0.0",
|
|
||||||
"fileVersion": "1.0.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"libraries": {
|
|
||||||
"ECommerce.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Blazored.FluentValidation/2.2.0": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-lBSHW7faCJqwn7KtZt6vqHSiyGvTL5McpS4sQUW3RLu2R5eMmf4oolFeufZfcAB8TV8iI+/PYouz7sn773E8Og==",
|
|
||||||
"path": "blazored.fluentvalidation/2.2.0",
|
|
||||||
"hashPath": "blazored.fluentvalidation.2.2.0.nupkg.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"
|
|
||||||
},
|
|
||||||
"FluentValidation/12.1.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-EPpkIe1yh1a0OXyC100oOA8WMbZvqUu5plwhvYcb7oSELfyUZzfxV48BLhvs3kKo4NwG7MGLNgy1RJiYtT8Dpw==",
|
|
||||||
"path": "fluentvalidation/12.1.1",
|
|
||||||
"hashPath": "fluentvalidation.12.1.1.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.Authorization/10.0.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-Ahez1F0EfsPqIT/X/TcdJCDYjVACHJwIPgZSof33wqLXaENUJNDnzphkmXOiBY1tvok/ZIUVEpeFLWdkLh0IyA==",
|
|
||||||
"path": "microsoft.aspnetcore.components.authorization/10.0.1",
|
|
||||||
"hashPath": "microsoft.aspnetcore.components.authorization.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"
|
|
||||||
},
|
|
||||||
"Carousel/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Common.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"ECommerce.Contracts/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Generic.CL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"ImageViewer.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"LayoutLib.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Media.RCL/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user