304 lines
12 KiB
TypeScript
304 lines
12 KiB
TypeScript
import React from "react";
|
||
import {
|
||
Scale,
|
||
ArrowRight,
|
||
GitBranch,
|
||
BarChart,
|
||
Layers,
|
||
BookOpen,
|
||
} from "lucide-react";
|
||
import LessonShell, {
|
||
ConceptCard,
|
||
FormulaBox,
|
||
ExampleCard,
|
||
TipCard,
|
||
PracticeFromDataset,
|
||
} from "../../../components/lessons/LessonShell";
|
||
import InequalityRegionWidget from "../../../components/lessons/InequalityRegionWidget";
|
||
import {
|
||
LINEAR_INEQ_EASY,
|
||
LINEAR_INEQ_MEDIUM,
|
||
} from "../../../data/math/linear-inequalities";
|
||
|
||
interface LessonProps {
|
||
onFinish?: () => void;
|
||
}
|
||
const SECTIONS = [
|
||
{ title: "Solving Inequalities", icon: Scale },
|
||
{ title: "Compound Inequalities", icon: GitBranch },
|
||
{ title: "Graphing on Number Lines", icon: ArrowRight },
|
||
{ title: "Coordinate Plane", icon: BarChart },
|
||
{ title: "Systems of Inequalities", icon: Layers },
|
||
{ title: "Practice & Quiz", icon: BookOpen },
|
||
];
|
||
|
||
export default function LinearInequalitiesLesson({ onFinish }: LessonProps) {
|
||
return (
|
||
<LessonShell
|
||
title="Linear Inequalities"
|
||
sections={SECTIONS}
|
||
color="blue"
|
||
onFinish={onFinish}
|
||
>
|
||
{/* Section 1: Solving Inequalities */}
|
||
<div>
|
||
<h2 className="text-3xl font-extrabold text-slate-900 mb-6">
|
||
Solving Inequalities
|
||
</h2>
|
||
<ConceptCard color="blue">
|
||
<p className="text-slate-700 leading-relaxed">
|
||
Inequalities work just like equations — apply the same operation to
|
||
both sides. The <strong>one critical difference</strong>: when you
|
||
multiply or divide by a <strong>negative number</strong>, you must{" "}
|
||
<strong>flip the inequality sign</strong>.
|
||
</p>
|
||
<div className="grid grid-cols-2 md:grid-cols-4 gap-3 mt-4">
|
||
<div className="bg-blue-50 border border-blue-200 rounded-xl p-3 text-center">
|
||
<p className="font-bold text-blue-700 text-lg"><</p>
|
||
<p className="text-xs text-slate-500">Less than</p>
|
||
</div>
|
||
<div className="bg-blue-50 border border-blue-200 rounded-xl p-3 text-center">
|
||
<p className="font-bold text-blue-700 text-lg">></p>
|
||
<p className="text-xs text-slate-500">Greater than</p>
|
||
</div>
|
||
<div className="bg-blue-50 border border-blue-200 rounded-xl p-3 text-center">
|
||
<p className="font-bold text-blue-700 text-lg">≤</p>
|
||
<p className="text-xs text-slate-500">Less than or equal</p>
|
||
</div>
|
||
<div className="bg-blue-50 border border-blue-200 rounded-xl p-3 text-center">
|
||
<p className="font-bold text-blue-700 text-lg">≥</p>
|
||
<p className="text-xs text-slate-500">Greater than or equal</p>
|
||
</div>
|
||
</div>
|
||
</ConceptCard>
|
||
<ExampleCard title="Example: Flip the Sign" color="blue">
|
||
<p>Solve: −3x + 7 > 16</p>
|
||
<p className="text-slate-500">−3x > 9</p>
|
||
<p className="text-slate-500">
|
||
Divide by −3 → <strong className="text-red-600">FLIP</strong> → x
|
||
< −3
|
||
</p>
|
||
</ExampleCard>
|
||
<div className="mt-4">
|
||
<ExampleCard title="Example: Variables on Both Sides" color="blue">
|
||
<p>Solve: 2x − 5 ≤ 3x + 2</p>
|
||
<p className="text-slate-500">−x ≤ 7</p>
|
||
<p className="text-slate-500">
|
||
Multiply by −1 → <strong className="text-blue-700">x ≥ −7</strong>
|
||
</p>
|
||
</ExampleCard>
|
||
</div>
|
||
<div className="mt-4">
|
||
<TipCard type="warning">
|
||
<p className="text-slate-700">
|
||
The #1 inequality mistake: forgetting to flip the sign when
|
||
multiplying or dividing by a negative. The SAT specifically
|
||
designs trap answers for this.
|
||
</p>
|
||
</TipCard>
|
||
</div>
|
||
</div>
|
||
|
||
{/* Section 2: Compound Inequalities */}
|
||
<div>
|
||
<h2 className="text-3xl font-extrabold text-slate-900 mb-6">
|
||
Compound Inequalities
|
||
</h2>
|
||
<ConceptCard color="blue">
|
||
<p className="text-slate-700 leading-relaxed">
|
||
A compound inequality combines two inequalities.{" "}
|
||
<strong>AND</strong> means both must be true (intersection).{" "}
|
||
<strong>OR</strong> means at least one must be true (union).
|
||
</p>
|
||
<div className="grid md:grid-cols-2 gap-4 mt-4">
|
||
<div className="bg-emerald-50 border border-emerald-200 rounded-xl p-4">
|
||
<p className="font-bold text-emerald-800 mb-1">
|
||
AND (Intersection)
|
||
</p>
|
||
<p className="text-sm text-slate-700">
|
||
−2 < x ≤ 5 means x is between −2 and 5
|
||
</p>
|
||
<p className="text-xs text-slate-500 mt-1">
|
||
Both conditions satisfied simultaneously
|
||
</p>
|
||
</div>
|
||
<div className="bg-amber-50 border border-amber-200 rounded-xl p-4">
|
||
<p className="font-bold text-amber-800 mb-1">OR (Union)</p>
|
||
<p className="text-sm text-slate-700">
|
||
x < −3 OR x > 4 means outside the interval
|
||
</p>
|
||
<p className="text-xs text-slate-500 mt-1">
|
||
At least one condition satisfied
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</ConceptCard>
|
||
<ExampleCard title="Example: AND (Three-Part)" color="blue">
|
||
<p>Solve: −2 < 3x + 1 ≤ 10</p>
|
||
<p className="text-slate-500">Subtract 1: −3 < 3x ≤ 9</p>
|
||
<p className="text-slate-500">
|
||
Divide by 3:{" "}
|
||
<strong className="text-blue-700">−1 < x ≤ 3</strong>
|
||
</p>
|
||
</ExampleCard>
|
||
<div className="mt-4">
|
||
<ExampleCard title="Example: OR" color="blue">
|
||
<p>Solve: x + 1 < −2 OR x + 1 > 4</p>
|
||
<p className="text-slate-500">x < −3 OR x > 3</p>
|
||
<p className="text-slate-500">
|
||
<strong className="text-blue-700">
|
||
Solution: (−∞, −3) ∪ (3, ∞)
|
||
</strong>
|
||
</p>
|
||
</ExampleCard>
|
||
</div>
|
||
</div>
|
||
|
||
{/* Section 3: Graphing on Number Lines */}
|
||
<div>
|
||
<h2 className="text-3xl font-extrabold text-slate-900 mb-6">
|
||
Graphing on Number Lines
|
||
</h2>
|
||
<ConceptCard color="blue">
|
||
<p className="text-slate-700 leading-relaxed">
|
||
When graphing inequalities on a number line, the circle type and
|
||
shading direction matter.
|
||
</p>
|
||
<div className="mt-4 overflow-x-auto">
|
||
<table className="w-full text-sm border-collapse">
|
||
<thead>
|
||
<tr className="bg-blue-100 text-blue-900">
|
||
<th className="border border-blue-300 px-3 py-2 text-left font-bold">
|
||
Symbol
|
||
</th>
|
||
<th className="border border-blue-300 px-3 py-2 text-left font-bold">
|
||
Circle
|
||
</th>
|
||
<th className="border border-blue-300 px-3 py-2 text-left font-bold">
|
||
Meaning
|
||
</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody className="text-slate-700">
|
||
<tr className="bg-white">
|
||
<td className="border border-slate-200 px-3 py-2 font-mono">
|
||
< or >
|
||
</td>
|
||
<td className="border border-slate-200 px-3 py-2 font-semibold">
|
||
Open ○
|
||
</td>
|
||
<td className="border border-slate-200 px-3 py-2">
|
||
Value NOT included
|
||
</td>
|
||
</tr>
|
||
<tr className="bg-slate-50">
|
||
<td className="border border-slate-200 px-3 py-2 font-mono">
|
||
≤ or ≥
|
||
</td>
|
||
<td className="border border-slate-200 px-3 py-2 font-semibold">
|
||
Closed ●
|
||
</td>
|
||
<td className="border border-slate-200 px-3 py-2">
|
||
Value IS included
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</ConceptCard>
|
||
<TipCard type="tip">
|
||
<p className="text-slate-700">
|
||
The SAT frequently asks which number line graph matches a given
|
||
inequality. Just check: open vs closed circle, and which direction
|
||
the arrow points.
|
||
</p>
|
||
</TipCard>
|
||
</div>
|
||
|
||
{/* Section 4: Coordinate Plane */}
|
||
<div>
|
||
<h2 className="text-3xl font-extrabold text-slate-900 mb-6">
|
||
Coordinate Plane Inequalities
|
||
</h2>
|
||
<ConceptCard color="blue">
|
||
<p className="text-slate-700 leading-relaxed">
|
||
When graphing a linear inequality in two variables:
|
||
</p>
|
||
<div className="space-y-2 mt-3 text-sm">
|
||
<p>1. Graph the boundary line (y = mx + b)</p>
|
||
<p>
|
||
2. Use a <strong>dashed line</strong> for < or > (not
|
||
included)
|
||
</p>
|
||
<p>
|
||
3. Use a <strong>solid line</strong> for ≤ or ≥ (included)
|
||
</p>
|
||
<p>
|
||
4. Shade <strong>above</strong> for y > or y ≥ and{" "}
|
||
<strong>below</strong> for y < or y ≤
|
||
</p>
|
||
</div>
|
||
</ConceptCard>
|
||
<ExampleCard title="Example: Graph y ≥ 2x − 1" color="blue">
|
||
<p>Boundary line: y = 2x − 1 (slope 2, y-intercept −1)</p>
|
||
<p className="text-slate-500">Solid line (≥ means included)</p>
|
||
<p className="text-slate-500">
|
||
<strong className="text-blue-700">Shade above the line</strong>
|
||
</p>
|
||
</ExampleCard>
|
||
<div className="mt-6">
|
||
<InequalityRegionWidget />
|
||
</div>
|
||
</div>
|
||
|
||
{/* Section 5: Systems of Inequalities */}
|
||
<div>
|
||
<h2 className="text-3xl font-extrabold text-slate-900 mb-6">
|
||
Systems of Inequalities
|
||
</h2>
|
||
<ConceptCard color="blue">
|
||
<p className="text-slate-700 leading-relaxed">
|
||
The solution to a system of inequalities is the{" "}
|
||
<strong>overlapping region</strong> where ALL inequalities are
|
||
satisfied. Any point in this region satisfies every inequality in
|
||
the system.
|
||
</p>
|
||
</ConceptCard>
|
||
<ExampleCard title="Example: System" color="blue">
|
||
<p>y ≤ x + 3 AND y > −x + 1</p>
|
||
<p className="text-slate-500">
|
||
Graph both: shade below y = x + 3 (solid), shade above y = −x + 1
|
||
(dashed)
|
||
</p>
|
||
<p className="text-slate-500">
|
||
<strong className="text-blue-700">
|
||
Solution is the overlapping region
|
||
</strong>
|
||
</p>
|
||
</ExampleCard>
|
||
<div className="mt-4">
|
||
<TipCard type="tip">
|
||
<p className="text-slate-700">
|
||
To check if a point is in the solution region, plug it into BOTH
|
||
inequalities. It must satisfy all of them.
|
||
</p>
|
||
</TipCard>
|
||
</div>
|
||
</div>
|
||
|
||
{/* Section 6: Practice & Quiz */}
|
||
<div>
|
||
<h2 className="text-3xl font-extrabold text-slate-900 mb-6">
|
||
Practice & Quiz
|
||
</h2>
|
||
{LINEAR_INEQ_EASY.slice(0, 2).map((q) => (
|
||
<PracticeFromDataset key={q.id} question={q} color="blue" />
|
||
))}
|
||
{LINEAR_INEQ_MEDIUM.slice(0, 1).map((q) => (
|
||
<PracticeFromDataset key={q.id} question={q} color="blue" />
|
||
))}
|
||
</div>
|
||
</LessonShell>
|
||
);
|
||
}
|