feat(lessons): add lessons from client db
This commit is contained in:
303
src/pages/student/lessons/LinearInequalitiesLesson.tsx
Normal file
303
src/pages/student/lessons/LinearInequalitiesLesson.tsx
Normal file
@ -0,0 +1,303 @@
|
||||
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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user