This commit is contained in:
2026-06-06 17:38:26 -04:00
parent 96de91e86c
commit cc7b2a593a
4 changed files with 573 additions and 8 deletions

View File

@@ -5049,7 +5049,557 @@
"grape-ring", "grape-ring",
"grape-root-knot", "grape-root-knot",
"grape-stubby-root", "grape-stubby-root",
"lettuce-brown-stain" "lettuce-brown-stain",
"lettuce-russet-spotting",
"lettuce-tipburn",
"lettuce-false-root-knot",
"lettuce-lesion",
"lettuce-needle",
"lettuce-root-knot",
"mango-dagger-nematode",
"mango-lance-nematode",
"mango-sheathoid-nematode",
"mango-abnormal-ripening",
"mango-algal-leaf-spot-red-rust",
"mango-black-tip",
"mango-brushing-damage",
"mango-bunchy-top",
"mango-chilling-injury",
"mango-copper-deficiency",
"mango-decline",
"mango-hot-water-scald",
"mango-impact-damage",
"mango-internal-necrosis",
"mango-jelly-seed",
"mango-lenticel-spotting",
"mango-little-leaf",
"mango-manganese-deficiency",
"mango-parasitic-lichen",
"mango-premature-ripening",
"mango-pressure-damage",
"mango-sapburn-injury",
"mango-soft-nose",
"mango-spongy-tissue",
"mango-stem-end-cavity",
"mango-tipburn",
"papaya-algal-leaf-spot",
"papaya-bumpy-fruit",
"papaya-freckles",
"papaya-nivum-haamir-dieback",
"papaya-reniform-nematode",
"papaya-root-knot-nematode",
"peanut-pod-lesion",
"peanut-ring",
"peanut-root-knot-javanese",
"peanut-root-knot-northern",
"peanut-root-knot-peanut",
"peanut-root-lesion",
"peanut-seed-and-pod",
"peanut-sting",
"peanut-testa",
"peanut-rugose-leaf-curl",
"pear-alfalfa-greening-green-stain",
"pear-bitter-pit",
"pear-black-end",
"pear-black-speck-skin-speckling",
"pear-blossom-blast",
"pear-brown-core",
"pear-core-breakdown-bartlett",
"pear-cork-spot",
"pear-green-stain",
"pear-internal-bark-necrosis",
"pear-mealy-core-danjou",
"pear-pink-end-bartlett",
"pear-rosette",
"pear-scald",
"pear-dagger-american",
"pear-lesion",
"pear-root-knot",
"pepper-tomato-fruitworm",
"pepper-tomato-hornworm",
"pepper-tobacco-hornworm",
"pepper-brown-tipped-pearl",
"pepper-eggplant-borer",
"pepper-tomato-fruit-borer",
"pepper-eggplant-leafroller",
"pepper-potato-tuber-moth",
"pepper-tomato-borer",
"pepper-tomato-pinworm",
"pepper-root-knot",
"pepper-sting",
"pepper-stubby-root",
"pepper-autogenous-necrosis",
"pepper-fruit-pox",
"pepper-gold-fleck",
"pepper-graywall",
"pineapple-lesion",
"pineapple-reniform",
"pineapple-root-knot",
"pineapple-internal-browning",
"pineapple-radial-brown-stripe",
"pineapple-triad-rot",
"pineapple-y-center-rot",
"pineapple-woody-fruit",
"rice-alkalinity-or-salt-damage",
"rice-cold-injury",
"rice-straighthead",
"rice-white-tip-see-nematodes",
"sorghum-awl",
"sorghum-dagger-american",
"sorghum-lesion",
"sorghum-needle",
"sorghum-reniform",
"sorghum-ring",
"sorghum-root-knot",
"sorghum-sting",
"sorghum-stubby-root",
"soybean-lance-nematode",
"soybean-lesion-nematode",
"soybean-pin-nematode",
"soybean-reniform-nematode",
"soybean-ring-nematode",
"soybean-root-knot-nematode",
"soybean-sheath-nematode",
"soybean-soybean-cyst-nematode",
"soybean-spiral-nematode",
"soybean-sting-nematode",
"soybean-stubby-root-nematode",
"soybean-stunt-nematode",
"spinach-beet-cyst-nematode",
"spinach-clover-cyst-nematode",
"spinach-root-knot",
"spinach-root-lesion",
"spinach-heart-leaf-disorder",
"spinach-leaf-necrosis-and-scorch",
"spinach-tip-burn",
"strawberry-pith-necrosis-and-crown-death",
"strawberry-rapid-death",
"strawberry-slime-molds",
"strawberry-bulb-and-stem",
"strawberry-dagger-american",
"strawberry-lesion",
"strawberry-root-knot",
"strawberry-spring-dwarf-crimp-or-foliar-nematodes",
"strawberry-sting",
"strawberry-summer-dwarf-crimp",
"sugarcane-bud-proliferation",
"sugarcane-bunch-top",
"sugarcane-cluster-stool",
"sugarcane-internal-stalk-necrosis",
"sugarcane-leaf-freckle",
"sugarcane-leaf-stipple",
"sugarcane-multiple-buds",
"sugarcane-stem-galls",
"sugarcane-lesion",
"sugarcane-root-knot",
"sunflower-dagger-american",
"sunflower-lesion",
"sunflower-reniform",
"sunflower-root-knot",
"sweet-potato-brown-ring-of-roots-bulb-and-stem-nematode",
"sweet-potato-burrowing",
"sweet-potato-lesion",
"sweet-potato-reniform",
"sweet-potato-root-knot",
"sweet-potato-sting",
"sweet-potato-stubby-root",
"tobacco-bulb-and-stem-stem-break",
"tobacco-dagger-american",
"tobacco-foliar",
"tobacco-lesion",
"tobacco-reniform",
"tobacco-root-knot",
"tobacco-stubby-root",
"tobacco-brown-root-rot",
"tobacco-drought-spot",
"tobacco-false-broomrape",
"tobacco-frenching",
"tobacco-stem-break-in-europe",
"tobacco-sunscald",
"tobacco-weather-fleck",
"watermelon-air-pollution-injury",
"watermelon-bitter-fruit",
"watermelon-blossom-end-rot",
"watermelon-bottle-neck-of-fruit",
"watermelon-sandburn",
"watermelon-sunscald-fruit",
"watermelon-windburn",
"watermelon-dagger-american",
"watermelon-lesion",
"watermelon-reniform",
"watermelon-ring",
"watermelon-root-knot",
"watermelon-sting",
"watermelon-stubby-root",
"wheat-cereal-cyst-nematode",
"wheat-grass-cyst-nematode",
"wheat-root-gall-nematode",
"wheat-root-knot-nematoderef-namewong",
"wheat-seed-gall-ear-cockle-nematode-wheat-gall-nematoderef-namewong",
"alfalfa-bulb-and-stem-nematode",
"alfalfa-chrysanthemum-foliar-nematode",
"alfalfa-cyst-nematode",
"alfalfa-dagger-nematode",
"alfalfa-lesion-nematode",
"alfalfa-needle-nematode",
"alfalfa-pin-nematode",
"alfalfa-reniform-nematode",
"alfalfa-root-knot-nematode",
"alfalfa-spiral-nematode",
"alfalfa-stubby-root-nematode",
"alfalfa-stunt-nematode",
"tea-burrowing-nematode",
"tea-dagger-nematode",
"tea-lance-nematode",
"tea-mature-tea-nematode",
"tea-pin-nematode",
"tea-reniform-nematode",
"tea-root-knot-nematode",
"tea-root-lesion-nematode",
"tea-sheath-nematode",
"tea-stunt-nematode",
"tomato-sunscald",
"tomato-nutrient-deficiency-general",
"tomato-overwatering-damage-edema",
"potato-sunscald",
"potato-nutrient-deficiency-general",
"potato-overwatering-damage-edema",
"bell-pepper-sunscald",
"bell-pepper-nutrient-deficiency-general",
"bell-pepper-overwatering-damage-edema",
"chili-pepper-sunscald",
"chili-pepper-nutrient-deficiency-general",
"chili-pepper-overwatering-damage-edema",
"eggplant-sunscald",
"eggplant-nutrient-deficiency-general",
"eggplant-overwatering-damage-edema",
"tobacco-nutrient-deficiency-general",
"tobacco-overwatering-damage-edema",
"tomatillo-sunscald",
"tomatillo-nutrient-deficiency-general",
"tomatillo-overwatering-damage-edema",
"petunia-sunscald",
"petunia-nutrient-deficiency-general",
"petunia-overwatering-damage-edema",
"gooseberry-sunscald",
"gooseberry-nutrient-deficiency-general",
"gooseberry-overwatering-damage-edema",
"cucumber-sunscald",
"cucumber-nutrient-deficiency-general",
"cucumber-overwatering-damage-edema",
"zucchini-sunscald",
"zucchini-nutrient-deficiency-general",
"zucchini-overwatering-damage-edema",
"summer-squash-sunscald",
"summer-squash-nutrient-deficiency-general",
"summer-squash-overwatering-damage-edema",
"winter-squash-sunscald",
"winter-squash-nutrient-deficiency-general",
"winter-squash-overwatering-damage-edema",
"pumpkin-sunscald",
"pumpkin-nutrient-deficiency-general",
"pumpkin-overwatering-damage-edema",
"watermelon-sunscald",
"watermelon-nutrient-deficiency-general",
"watermelon-overwatering-damage-edema",
"cantaloupe-sunscald",
"cantaloupe-nutrient-deficiency-general",
"cantaloupe-overwatering-damage-edema",
"honeydew-sunscald",
"honeydew-nutrient-deficiency-general",
"honeydew-overwatering-damage-edema",
"bitter-melon-sunscald",
"bitter-melon-nutrient-deficiency-general",
"bitter-melon-overwatering-damage-edema",
"chayote-sunscald",
"chayote-nutrient-deficiency-general",
"chayote-overwatering-damage-edema",
"acorn-squash-sunscald",
"acorn-squash-nutrient-deficiency-general",
"acorn-squash-overwatering-damage-edema",
"butternut-squash-sunscald",
"butternut-squash-nutrient-deficiency-general",
"butternut-squash-overwatering-damage-edema",
"calabash-sunscald",
"calabash-nutrient-deficiency-general",
"calabash-overwatering-damage-edema",
"luffa-sunscald",
"luffa-nutrient-deficiency-general",
"luffa-overwatering-damage-edema",
"apple-nutrient-deficiency-general",
"apple-overwatering-damage-edema",
"pear-sunscald",
"pear-nutrient-deficiency-general",
"pear-overwatering-damage-edema",
"peach-sunscald",
"peach-nutrient-deficiency-general",
"peach-overwatering-damage-edema",
"cherry-sunscald",
"cherry-nutrient-deficiency-general",
"cherry-overwatering-damage-edema",
"apricot-sunscald",
"apricot-nutrient-deficiency-general",
"apricot-overwatering-damage-edema",
"plum-sunscald",
"plum-nutrient-deficiency-general",
"plum-overwatering-damage-edema",
"almond-sunscald",
"almond-nutrient-deficiency-general",
"almond-overwatering-damage-edema",
"strawberry-sunscald",
"strawberry-nutrient-deficiency-general",
"strawberry-overwatering-damage-edema",
"raspberry-sunscald",
"raspberry-nutrient-deficiency-general",
"raspberry-overwatering-damage-edema",
"blackberry-sunscald",
"blackberry-nutrient-deficiency-general",
"blackberry-overwatering-damage-edema",
"blueberry-sunscald",
"blueberry-nutrient-deficiency-general",
"blueberry-overwatering-damage-edema",
"cranberry-sunscald",
"cranberry-nutrient-deficiency-general",
"cranberry-overwatering-damage-edema",
"rose-sunscald",
"rose-nutrient-deficiency-general",
"rose-overwatering-damage-edema",
"hawthorn-sunscald",
"hawthorn-nutrient-deficiency-general",
"hawthorn-overwatering-damage-edema",
"quince-sunscald",
"quince-nutrient-deficiency-general",
"quince-overwatering-damage-edema",
"cabbage-sunscald",
"cabbage-nutrient-deficiency-general",
"cabbage-overwatering-damage-edema",
"broccoli-sunscald",
"broccoli-nutrient-deficiency-general",
"broccoli-overwatering-damage-edema",
"cauliflower-sunscald",
"cauliflower-nutrient-deficiency-general",
"cauliflower-overwatering-damage-edema",
"brussels-sprouts-sunscald",
"brussels-sprouts-nutrient-deficiency-general",
"brussels-sprouts-overwatering-damage-edema",
"kale-sunscald",
"kale-nutrient-deficiency-general",
"kale-overwatering-damage-edema",
"bok-choy-sunscald",
"bok-choy-nutrient-deficiency-general",
"bok-choy-overwatering-damage-edema",
"radish-sunscald",
"radish-nutrient-deficiency-general",
"radish-overwatering-damage-edema",
"turnip-sunscald",
"turnip-nutrient-deficiency-general",
"turnip-overwatering-damage-edema",
"arugula-sunscald",
"arugula-nutrient-deficiency-general",
"arugula-overwatering-damage-edema",
"collard-greens-sunscald",
"collard-greens-nutrient-deficiency-general",
"collard-greens-overwatering-damage-edema",
"mustard-greens-sunscald",
"mustard-greens-nutrient-deficiency-general",
"mustard-greens-overwatering-damage-edema",
"horseradish-sunscald",
"horseradish-nutrient-deficiency-general",
"horseradish-overwatering-damage-edema",
"wasabi-sunscald",
"wasabi-nutrient-deficiency-general",
"wasabi-overwatering-damage-edema",
"green-bean-sunscald",
"green-bean-nutrient-deficiency-general",
"green-bean-overwatering-damage-edema",
"soybean-sunscald",
"soybean-nutrient-deficiency-general",
"soybean-overwatering-damage-edema",
"peanut-sunscald",
"peanut-nutrient-deficiency-general",
"peanut-overwatering-damage-edema",
"chickpea-sunscald",
"chickpea-nutrient-deficiency-general",
"chickpea-overwatering-damage-edema",
"lentil-sunscald",
"lentil-nutrient-deficiency-general",
"lentil-overwatering-damage-edema",
"faba-bean-sunscald",
"faba-bean-nutrient-deficiency-general",
"faba-bean-overwatering-damage-edema",
"cowpea-sunscald",
"cowpea-nutrient-deficiency-general",
"cowpea-overwatering-damage-edema",
"pigeon-pea-sunscald",
"pigeon-pea-nutrient-deficiency-general",
"pigeon-pea-overwatering-damage-edema",
"alfalfa-sunscald",
"alfalfa-nutrient-deficiency-general",
"alfalfa-overwatering-damage-edema",
"clover-sunscald",
"clover-nutrient-deficiency-general",
"clover-overwatering-damage-edema",
"peas-sunscald",
"peas-nutrient-deficiency-general",
"peas-overwatering-damage-edema",
"lupine-sunscald",
"lupine-nutrient-deficiency-general",
"lupine-overwatering-damage-edema",
"wisteria-sunscald",
"wisteria-nutrient-deficiency-general",
"wisteria-overwatering-damage-edema",
"robinia-sunscald",
"robinia-nutrient-deficiency-general",
"robinia-overwatering-damage-edema",
"corn-sunscald",
"corn-nutrient-deficiency-general",
"corn-overwatering-damage-edema",
"wheat-sunscald",
"wheat-nutrient-deficiency-general",
"wheat-overwatering-damage-edema",
"rice-sunscald",
"rice-nutrient-deficiency-general",
"rice-overwatering-damage-edema",
"barley-sunscald",
"barley-nutrient-deficiency-general",
"barley-overwatering-damage-edema",
"oats-sunscald",
"oats-nutrient-deficiency-general",
"oats-overwatering-damage-edema",
"sorghum-sunscald",
"sorghum-nutrient-deficiency-general",
"sorghum-overwatering-damage-edema",
"sugarcane-sunscald",
"sugarcane-nutrient-deficiency-general",
"sugarcane-overwatering-damage-edema",
"bamboo-sunscald",
"bamboo-nutrient-deficiency-general",
"bamboo-overwatering-damage-edema",
"turfgrass-sunscald",
"turfgrass-nutrient-deficiency-general",
"turfgrass-overwatering-damage-edema",
"millet-sunscald",
"millet-nutrient-deficiency-general",
"millet-overwatering-damage-edema",
"rye-sunscald",
"rye-nutrient-deficiency-general",
"rye-overwatering-damage-edema",
"sunflower-sunscald",
"sunflower-nutrient-deficiency-general",
"sunflower-overwatering-damage-edema",
"lettuce-sunscald",
"lettuce-nutrient-deficiency-general",
"lettuce-overwatering-damage-edema",
"artichoke-sunscald",
"artichoke-nutrient-deficiency-general",
"artichoke-overwatering-damage-edema",
"chicory-sunscald",
"chicory-nutrient-deficiency-general",
"chicory-overwatering-damage-edema",
"endive-sunscald",
"endive-nutrient-deficiency-general",
"endive-overwatering-damage-edema",
"daisy-sunscald",
"daisy-nutrient-deficiency-general",
"daisy-overwatering-damage-edema",
"marigold-sunscald",
"marigold-nutrient-deficiency-general",
"marigold-overwatering-damage-edema",
"zinnia-sunscald",
"zinnia-nutrient-deficiency-general",
"zinnia-overwatering-damage-edema",
"chrysanthemum-sunscald",
"chrysanthemum-nutrient-deficiency-general",
"chrysanthemum-overwatering-damage-edema",
"dahlia-sunscald",
"dahlia-nutrient-deficiency-general",
"dahlia-overwatering-damage-edema",
"calendula-sunscald",
"calendula-nutrient-deficiency-general",
"calendula-overwatering-damage-edema",
"echinacea-sunscald",
"echinacea-nutrient-deficiency-general",
"echinacea-overwatering-damage-edema",
"yarrow-sunscald",
"yarrow-nutrient-deficiency-general",
"yarrow-overwatering-damage-edema",
"tarragon-sunscald",
"tarragon-nutrient-deficiency-general",
"tarragon-overwatering-damage-edema",
"stevia-sunscald",
"stevia-nutrient-deficiency-general",
"stevia-overwatering-damage-edema",
"basil-sunscald",
"basil-nutrient-deficiency-general",
"basil-overwatering-damage-edema",
"mint-sunscald",
"mint-nutrient-deficiency-general",
"mint-overwatering-damage-edema",
"lavender-sunscald",
"lavender-nutrient-deficiency-general",
"lavender-overwatering-damage-edema",
"rosemary-sunscald",
"rosemary-nutrient-deficiency-general",
"rosemary-overwatering-damage-edema",
"thyme-sunscald",
"thyme-nutrient-deficiency-general",
"thyme-overwatering-damage-edema",
"oregano-sunscald",
"oregano-nutrient-deficiency-general",
"oregano-overwatering-damage-edema",
"sage-sunscald",
"sage-nutrient-deficiency-general",
"sage-overwatering-damage-edema",
"lemon-balm-sunscald",
"lemon-balm-nutrient-deficiency-general",
"lemon-balm-overwatering-damage-edema",
"catnip-sunscald",
"catnip-nutrient-deficiency-general",
"catnip-overwatering-damage-edema",
"coleus-sunscald",
"coleus-nutrient-deficiency-general",
"coleus-overwatering-damage-edema",
"carrot-sunscald",
"carrot-nutrient-deficiency-general",
"carrot-overwatering-damage-edema",
"celery-sunscald",
"celery-nutrient-deficiency-general",
"celery-overwatering-damage-edema",
"parsley-sunscald",
"parsley-nutrient-deficiency-general",
"parsley-overwatering-damage-edema",
"cilantro-sunscald",
"cilantro-nutrient-deficiency-general",
"cilantro-overwatering-damage-edema",
"dill-sunscald",
"dill-nutrient-deficiency-general",
"dill-overwatering-damage-edema",
"fennel-sunscald",
"fennel-nutrient-deficiency-general",
"fennel-overwatering-damage-edema",
"parsnip-sunscald",
"parsnip-nutrient-deficiency-general",
"parsnip-overwatering-damage-edema",
"cumin-sunscald",
"cumin-nutrient-deficiency-general",
"cumin-overwatering-damage-edema",
"onion-sunscald",
"onion-nutrient-deficiency-general",
"onion-overwatering-damage-edema",
"garlic-sunscald",
"garlic-nutrient-deficiency-general",
"garlic-overwatering-damage-edema",
"leek-sunscald",
"leek-nutrient-deficiency-general",
"leek-overwatering-damage-edema",
"shallot-leaf-spot-septoriacercospora",
"shallot-sunscald",
"shallot-nutrient-deficiency-general",
"shallot-overwatering-damage-edema",
"chive-leaf-spot-septoriacercospora",
"chive-sunscald",
"chive-nutrient-deficiency-general",
"chive-overwatering-damage-edema"
], ],
"totalFound": 5050 "totalFound": 5600
} }

View File

@@ -591,7 +591,9 @@ function countImagesInDir(classDir: string): number {
function reconcileClassCount(classDir: string, progressCount: number): number { function reconcileClassCount(classDir: string, progressCount: number): number {
const fileCount = countImagesInDir(classDir); const fileCount = countImagesInDir(classDir);
if (fileCount < progressCount) { if (fileCount < progressCount) {
console.log(` ↻ File count (${fileCount}) < progress count (${progressCount}) — reconciling`); console.log(
` ↻ File count (${fileCount}) < progress count (${progressCount}) — reconciling`,
);
return fileCount; return fileCount;
} }
return progressCount; return progressCount;
@@ -776,6 +778,13 @@ async function main() {
mkdirSync(DATASET_DIR, { recursive: true }); mkdirSync(DATASET_DIR, { recursive: true });
const progress = loadProgress(); const progress = loadProgress();
// If all phases complete, exit early
if (progress.phase === 3) {
console.log(" ✓ All phases already complete. Delete .progress.json to re-run.");
await closeDb();
return;
}
const startTime = Date.now(); const startTime = Date.now();
// ── Phase 1: Core set ────────────────────────────────────────────────── // ── Phase 1: Core set ──────────────────────────────────────────────────
@@ -786,7 +795,9 @@ async function main() {
const coreStart = progress.phase === 0 ? progress.phaseIndex : 0; const coreStart = progress.phase === 0 ? progress.phaseIndex : 0;
if (coreStart > 0) { if (coreStart > 0) {
console.log(` Resuming from disease #${coreStart + 1} (${((coreStart / coreDiseases.length) * 100).toFixed(0)}% done)`); console.log(
` Resuming from disease #${coreStart + 1} (${((coreStart / coreDiseases.length) * 100).toFixed(0)}% done)`,
);
} }
for (let i = coreStart; i < coreDiseases.length; i++) { for (let i = coreStart; i < coreDiseases.length; i++) {
@@ -814,7 +825,9 @@ async function main() {
const fullStart = progress.phase === 1 ? progress.phaseIndex : 0; const fullStart = progress.phase === 1 ? progress.phaseIndex : 0;
if (fullStart > 0) { if (fullStart > 0) {
console.log(` Resuming from disease #${fullStart + 1} (${((fullStart / fullDiseases.length) * 100).toFixed(0)}% done)`); console.log(
` Resuming from disease #${fullStart + 1} (${((fullStart / fullDiseases.length) * 100).toFixed(0)}% done)`,
);
} }
for (let i = fullStart; i < fullDiseases.length; i++) { for (let i = fullStart; i < fullDiseases.length; i++) {

View File

@@ -147,7 +147,7 @@ export default async function PlantDetailPage({ params }: Props) {
<div className="mb-10 rounded-xl bg-gradient-to-r from-leaf-green-50 to-soil-brown-50 dark:from-leaf-green-950 dark:to-soil-brown-950 border border-leaf-green-200 dark:border-leaf-green-800 p-5 sm:p-6"> <div className="mb-10 rounded-xl bg-gradient-to-r from-leaf-green-50 to-soil-brown-50 dark:from-leaf-green-950 dark:to-soil-brown-950 border border-leaf-green-200 dark:border-leaf-green-800 p-5 sm:p-6">
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"> <div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4">
<div> <div>
<h2 className="text-base font-semibold text-zinc-900 dark:text-zinc-100"> <h2 className="text-base font-semibold text-zinc-900 ">
🧐 Spot a problem on your {plant.commonName.toLowerCase()}? 🧐 Spot a problem on your {plant.commonName.toLowerCase()}?
</h2> </h2>
<p className="text-sm text-zinc-600 dark:text-zinc-400 mt-1"> <p className="text-sm text-zinc-600 dark:text-zinc-400 mt-1">
@@ -171,7 +171,9 @@ export default async function PlantDetailPage({ params }: Props) {
<p className="text-sm text-zinc-500 dark:text-zinc-400 mb-6"> <p className="text-sm text-zinc-500 dark:text-zinc-400 mb-6">
{diseases.length === 0 {diseases.length === 0
? "No diseases currently documented for this plant." ? "No diseases currently documented for this plant."
: `${diseases.length} ${diseases.length === 1 ? "disease" : "diseases"} documented for ${plant.commonName}.`} : `${diseases.length} ${
diseases.length === 1 ? "disease" : "diseases"
} documented for ${plant.commonName}.`}
</p> </p>
{diseases.length > 0 ? ( {diseases.length > 0 ? (

View File

@@ -27,7 +27,7 @@ export default function BetaNotice({
variant === "card" ? "px-4 sm:px-6 py-3" : "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-3" variant === "card" ? "px-4 sm:px-6 py-3" : "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-3"
} }
> >
<p className="text-xs sm:text-sm text-warning-amber-800 dark:text-warning-amber-200 text-center leading-relaxed"> <p className="text-xs sm:text-sm text-warning-amber-800 text-center leading-relaxed">
<span className="font-semibold">🚧 Beta Community Driven.</span> Most data here is not <span className="font-semibold">🚧 Beta Community Driven.</span> Most data here is not
reviewed by humans. Spot something wrong or it could be better? Use the{" "} reviewed by humans. Spot something wrong or it could be better? Use the{" "}
<span className="inline-flex items-center gap-1 font-medium whitespace-nowrap"> <span className="inline-flex items-center gap-1 font-medium whitespace-nowrap">