diff --git a/Portfolio.Domain/Features/Pokemon/Ingredient.cs b/Portfolio.Domain/Features/Pokemon/Ingredient.cs new file mode 100644 index 0000000..b873d7e --- /dev/null +++ b/Portfolio.Domain/Features/Pokemon/Ingredient.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Portfolio.Domain.Features.Pokemon +{ + public class Ingredient + { + public string Ing { get; set; } + public string Description { get; set; } + public string ImageURL { get; set; } + } +} diff --git a/Portfolio.Domain/Features/Pokemon/Pokemon.cs b/Portfolio.Domain/Features/Pokemon/Pokemon.cs index d730256..1eeacb3 100644 --- a/Portfolio.Domain/Features/Pokemon/Pokemon.cs +++ b/Portfolio.Domain/Features/Pokemon/Pokemon.cs @@ -19,6 +19,9 @@ namespace Portfolio.Domain.Features.Pokemon public string? PokemonImageUrl { get; set; } public string? PokemonShinyImageUrl { get; set; } public string? FlavorText { get; set; } + public string? Ingredient1 { get; set; } + public string? Ingredient2 { get; set; } + public string? Ingredient3 { get; set; } } diff --git a/Portfolio.Infrastructure/Migrations/20251117160500_updatePokemonAddIngredients.Designer.cs b/Portfolio.Infrastructure/Migrations/20251117160500_updatePokemonAddIngredients.Designer.cs new file mode 100644 index 0000000..9ac28a8 --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251117160500_updatePokemonAddIngredients.Designer.cs @@ -0,0 +1,130 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Portfolio.Infrastructure; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20251117160500_updatePokemonAddIngredients")] + partial class updatePokemonAddIngredients + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon.Pokemon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FlavorText") + .HasColumnType("nvarchar(max)"); + + b.PrimitiveCollection("Ingredients") + .HasColumnType("nvarchar(max)"); + + b.Property("IsVariation") + .HasColumnType("bit"); + + b.Property("PokemonId") + .HasColumnType("int"); + + b.Property("PokemonImageUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonShinyImageUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonType") + .HasColumnType("nvarchar(max)"); + + b.Property("SleepType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Speciality") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("VariationName") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Pokemons"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Natures.PokemonNature", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRating") + .HasColumnType("int"); + + b.Property("IngredientRating") + .HasColumnType("int"); + + b.Property("Nature") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SkillRating") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("PokemonNatures"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Subskills.PokemonSubskill", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRank") + .HasColumnType("int"); + + b.Property("IngredientRank") + .HasColumnType("int"); + + b.Property("SkillRank") + .HasColumnType("int"); + + b.Property("SubSkill") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("PokemonSubskills"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/20251117160500_updatePokemonAddIngredients.cs b/Portfolio.Infrastructure/Migrations/20251117160500_updatePokemonAddIngredients.cs new file mode 100644 index 0000000..c9e2a53 --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251117160500_updatePokemonAddIngredients.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + /// + public partial class updatePokemonAddIngredients : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Ingredients", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Ingredients", + table: "Pokemons"); + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/20251117171147_updatePokemonChangeIngredient.Designer.cs b/Portfolio.Infrastructure/Migrations/20251117171147_updatePokemonChangeIngredient.Designer.cs new file mode 100644 index 0000000..a84d0ff --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251117171147_updatePokemonChangeIngredient.Designer.cs @@ -0,0 +1,136 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Portfolio.Infrastructure; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20251117171147_updatePokemonChangeIngredient")] + partial class updatePokemonChangeIngredient + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon.Pokemon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FlavorText") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient1") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient2") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient3") + .HasColumnType("nvarchar(max)"); + + b.Property("IsVariation") + .HasColumnType("bit"); + + b.Property("PokemonId") + .HasColumnType("int"); + + b.Property("PokemonImageUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonShinyImageUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonType") + .HasColumnType("nvarchar(max)"); + + b.Property("SleepType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Speciality") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("VariationName") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Pokemons"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Natures.PokemonNature", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRating") + .HasColumnType("int"); + + b.Property("IngredientRating") + .HasColumnType("int"); + + b.Property("Nature") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SkillRating") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("PokemonNatures"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Subskills.PokemonSubskill", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRank") + .HasColumnType("int"); + + b.Property("IngredientRank") + .HasColumnType("int"); + + b.Property("SkillRank") + .HasColumnType("int"); + + b.Property("SubSkill") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("PokemonSubskills"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/20251117171147_updatePokemonChangeIngredient.cs b/Portfolio.Infrastructure/Migrations/20251117171147_updatePokemonChangeIngredient.cs new file mode 100644 index 0000000..7aee532 --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251117171147_updatePokemonChangeIngredient.cs @@ -0,0 +1,48 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + /// + public partial class updatePokemonChangeIngredient : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "Ingredients", + table: "Pokemons", + newName: "Ingredient3"); + + migrationBuilder.AddColumn( + name: "Ingredient1", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "Ingredient2", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Ingredient1", + table: "Pokemons"); + + migrationBuilder.DropColumn( + name: "Ingredient2", + table: "Pokemons"); + + migrationBuilder.RenameColumn( + name: "Ingredient3", + table: "Pokemons", + newName: "Ingredients"); + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs b/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs index 8877fe0..dba4d10 100644 --- a/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs @@ -32,6 +32,15 @@ namespace Portfolio.Infrastructure.Migrations b.Property("FlavorText") .HasColumnType("nvarchar(max)"); + b.Property("Ingredient1") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient2") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient3") + .HasColumnType("nvarchar(max)"); + b.Property("IsVariation") .HasColumnType("bit"); diff --git a/Portfolio.Infrastructure/README.md b/Portfolio.Infrastructure/README.md new file mode 100644 index 0000000..614f5c7 --- /dev/null +++ b/Portfolio.Infrastructure/README.md @@ -0,0 +1,10 @@ + + +To Update Entites in the Database: + +1. Make necessary changes to Enttities within .Domain +2. Open NuGet Packet Manager +3. Ensure default project is pointed to .Infrastructure +4. Enter `Add-Migration [Migration Tag Name, ex: updateEntityAddChange]` +5. Enter `Update-Database` +6. Check SSMS to ensure changes. \ No newline at end of file diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonBadge.razor.css b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonBadge.razor.css index e586ab9..6e6e497 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonBadge.razor.css +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonBadge.razor.css @@ -1,4 +1,11 @@ -.badge { +$width: 200px; +$height: 80px; + +*, *::before, *::after { + box-sizing: border-box; +} + +.badge { display: flex; align-items: center; justify-content: center; @@ -9,9 +16,14 @@ color: white; font-size: clamp(0.7rem, 1vw, 0.9rem); text-align: center; + font-weight: 400; + text-shadow: 0 2px 2px rgba(0,0,0,0.25); + box-shadow: 0 1px 2px 0 rgba(0,0,0,0.35); + transition: all 0.2s ease; white-space: nowrap; } + .statText { margin: 0; padding: 0; diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonCard.razor.css b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonCard.razor.css index 1e15e88..aa5baa2 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonCard.razor.css +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonCard.razor.css @@ -50,6 +50,8 @@ right: 2%; width: clamp(1.5rem, 2.5vw, 2.5rem); height: clamp(1.5rem, 2.5vw, 2.5rem); + box-shadow: 0 1px 2px 1px rgba(0,0,0,0.35); + border-radius: 20px; } .pokemon-flavor-text { diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor index 54d861e..72a865c 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor @@ -1,4 +1,6 @@ @inject IPokemonService PokemonService +@inject IHttpClientFactory ClientFactory + @if(formUse == "ADD") { @@ -95,6 +97,26 @@ + +
+ +
+
+ Ingredient 1 +
+
+ + + @foreach (var ingredient in Ingredients) + { + + } + +
+
+
+ +
diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs index 41d7998..8af5e6b 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Components.Web; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Portfolio.Application.Services.PokemonService; using Portfolio.Domain.Features.Pokemon; +using Portfolio.Domain.Features.Portfolio; namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components { @@ -28,7 +29,10 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components PokemonName = string.Empty, // Required fields cannot be null SleepType = string.Empty, Speciality = string.Empty, - IsVariation = false + IsVariation = false, + Ingredient1 = "", + Ingredient2 = "", + Ingredient3 = "" }; // When Editing @@ -38,6 +42,9 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components // General Form + + private List PokemonTypeInfo; + protected static readonly string[] PokemonTypes = new[] { "Grass","Fire","Water","Normal","Flying","Bug","Poison","Electric","Ground","Rock","Ice", @@ -45,6 +52,7 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components }; protected static readonly string[] SleepTypes = new[] { "Dozing", "Snoozing", "Slumbering" }; protected static readonly string[] Specialities = new[] { "Berries", "Ingredients", "Skills", "All" }; + private List Ingredients { get; set; } private bool HideLabel { get; set; } @@ -53,6 +61,9 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components protected override async Task OnInitializedAsync() { + var http = ClientFactory.CreateClient("LocalClient"); + Ingredients = await http.GetFromJsonAsync>("data/ingredients.json"); + if (formUse == "EDIT") { if (PokemonToEdit.IsVariation == true) diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor index d8da86a..63e7a26 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor @@ -86,7 +86,7 @@
- +
diff --git a/Portfolio.WebUI.Server/wwwroot/data/ingredients.json b/Portfolio.WebUI.Server/wwwroot/data/ingredients.json new file mode 100644 index 0000000..f83d99f --- /dev/null +++ b/Portfolio.WebUI.Server/wwwroot/data/ingredients.json @@ -0,0 +1,98 @@ +[ + { + "ingredient": "Large Leek", + "description": "Whether this is the kind of vegetable stalk that Farfetch'd like is unknown.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/largeleek.png" + }, + { + "ingredient": "Tasty Mushroom", + "description": "A juicy mushroom with an abundance of umami flavor.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/tastymushroom.png" + }, + { + "ingredient": "Fancy Egg", + "description": "A nutritious cooking ingredient that goes well with all sorts of seasonings.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/fancyegg.png" + }, + { + "ingredient": "Soft Potato", + "description": "Its mellow flavor makes both body and spirit feel warm and fuzzy.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/softpotato.png" + }, + { + "ingredient": "Fancy Apple", + "description": "An apple chosen above others. It has spectacular form and a brilliant sheen.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/fancyapple.png" + }, + { + "ingredient": "Fiery Herb", + "description": "The fiery taste of this bright-red herb will wake anyone right up.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/fieryherb.png" + }, + { + "ingredient": "Bean Sausage", + "description": "A healthy sausage made from beans that Pok�mon like to eat.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/beansausage.png" + }, + { + "ingredient": "Moomoo Milk", + "description": "Highly nutritious milk. Pok�mon that drink it become full of energy.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/moomoomilk.png" + }, + { + "ingredient": "Honey", + "description": "A sweet honey collected by Pok�mon.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/honey.png" + }, + { + "ingredient": "Pure Oil", + "description": "All-purpose oil that can be used in any type of cuisine.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/pureoil.png" + }, + { + "ingredient": "Warming Ginger", + "description": "Spicy ginger that warms the body better than any other ingredient.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/warmingginger.png" + }, + { + "ingredient": "Snoozy Tomato", + "description": "A bright-red tomato. Eat it and you'll sleep like a baby.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/snoozytomato.png" + }, + { + "ingredient": "Soothing Cacao", + "description": "This cacao bean is time-consuming to process, but its soothing effects make the effort worthwhile.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/soothingcacao.png" + }, + { + "ingredient": "Slowpoke Tail", + "description": "A very tasty tail of something. When it falls off, it grows back quickly.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/slowpoketail.png" + }, + { + "ingredient": "Greengrass Soybeans", + "description": "This Greengrass Isle specialty is easy to process into foods that are great for training.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/greengrasssoybeans.png" + }, + { + "ingredient": "Greengrass Corn", + "description": "This Greengrass Isle specialty can be eaten raw. It's remarkably sweet.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/greengrasscorn.png" + }, + { + "ingredient": "Rousing Coffee", + "description": "You may have trouble sleeping if you drink too much of this. It may help make you feel more alert.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/rousingcoffee.png" + }, + { + "ingredient": "Plump Pumpkin", + "description": "A big pumpkin packed full of pulp.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/plumppumpkin.png" + }, + { + "ingredient": "Glossy Avocado", + "description": "The glossy green shine is a sign it' s freshly picked.", + "imageURL": "https://www.serebii.net/pokemonsleep/ingredients/glossyavocado.png" + } + +] \ No newline at end of file diff --git a/Portfolio.WebUI.Server/wwwroot/data/pkmn_type-and-berries.json b/Portfolio.WebUI.Server/wwwroot/data/pkmn_type-and-berries.json new file mode 100644 index 0000000..33145cd --- /dev/null +++ b/Portfolio.WebUI.Server/wwwroot/data/pkmn_type-and-berries.json @@ -0,0 +1,111 @@ +[ + { + "type": "Grass", + "berry": "Durin", + "description": "This Berry is tremendously bitter. Just one bite is enough to instantly stop hiccups.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/durinberry.png" + }, + { + "type": "Fire", + "berry": "Leppa", + "description": "It takes longer to grow than Berries such as Cheri. The smaller Berries taste better.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/leppaberry.png" + }, + { + "type": "Water", + "berry": "Oran", + "description": "Nature's gifts came together as one in this Berry. It has a wondrous mix of flavors that spread in the mouth.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/oranberry.png" + }, + { + "type": "Normal", + "berry": "Persim", + "description": "The more this Berry absorbs energy from sunlight, the more vividly colorful it grows.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/persimberry.png" + }, + { + "type": "Flying", + "berry": "Pamtre", + "description": "This Berry drifted from a faraway sea. It can now be cultivated even on this island.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/pamtreberry.png" + }, + { + "type": "Bug", + "berry": "Lum", + "description": "This Berry's gradual process of storing nutrients beneficial to Pok�mon health causes it to mature slowly.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/lumberry.png" + }, + { + "type": "Poison", + "berry": "Chesto", + "description": "This Berry's thick skin and fruit are very tough and dry-tasting. However, every bit of it can be eaten.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/chestoberry.png" + }, + { + "type": "Electric", + "berry": "Grepa", + "description": "One bite of this very tender Berry fills the mouth with its sweet and tangy flavor.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/grepaberry.png" + }, + { + "type": "Ground", + "berry": "Figy", + "description": "This Berry is oddly shaped, appearing as if someone took a bite out of it. It's packed full of spicy substances.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/figyberry.png" + }, + { + "type": "Rock", + "berry": "Sitrus", + "description": "Sitrus came from the same family as Oran. It's larger and smoother- tasting than Oran.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/sitrusberry.png" + }, + { + "type": "Ice", + "berry": "Rawst", + "description": "If the leaves grow longer and curlier than average, this Berry will have a somewhat bitter taste.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/rawstberry.png" + }, + { + "type": "Steel", + "berry": "Belue", + "description": "This glossy and colorful Berry has a mouthwateringly delicious appearance. However, it's awfully sour.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/belueberry.png" + }, + { + "type": "Fighting", + "berry": "Cheri", + "description": "This bright red Berry is very spicy and has a provocative flavor. It blooms with delicate, pretty flowers.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/cheriberry.png" + }, + { + "type": "Psychic", + "berry": "Mago", + "description": "This Berry progressively curves as it grows. The curvier the Berry, the sweeter it tastes.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/magoberry.png" + }, + { + "type": "Dark", + "berry": "Wiki", + "description": "It's said that this Berry grew lumps to help Pok�mon grip it, allowing propagation farther afield.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/wikiberry.png" + }, + { + "type": "Fairy", + "berry": "Pecha", + "description": "Because of its hollow inside pocket, there isn't a lot to eat. What can be eaten is very sweet and delicious.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/pechaberry.png" + }, + { + "type": "Ghost", + "berry": "Bluk", + "description": "Though this small, delicately skinned Berry is blue in color, it dyes the mouth black when eaten.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/blukberry.png" + }, + { + "type": "Dragon", + "berry": "Yache", + "description": "This Berry has a refreshing flavor that strikes a good balance of dryness and sourness. It tastes better chilled.", + "imageURL": "https://www.serebii.net/pokemonsleep/berries/yacheberry.png" + } + +] \ No newline at end of file