Compare commits
2 Commits
07f1abed0e
...
b0ed40fb07
Author | SHA1 | Date |
---|---|---|
adueck | b0ed40fb07 | |
adueck | 9a6cd29af6 |
|
@ -17,7 +17,7 @@
|
||||||
"@formkit/auto-animate": "^1.0.0-beta.6",
|
"@formkit/auto-animate": "^1.0.0-beta.6",
|
||||||
"@fortawesome/fontawesome-free": "5.15.4",
|
"@fortawesome/fontawesome-free": "5.15.4",
|
||||||
"@lingdocs/lingdocs-main": "^0.3.3",
|
"@lingdocs/lingdocs-main": "^0.3.3",
|
||||||
"@lingdocs/ps-react": "^7.1.6",
|
"@lingdocs/ps-react": "^7.1.7",
|
||||||
"@mdx-js/rollup": "^2.2.1",
|
"@mdx-js/rollup": "^2.2.1",
|
||||||
"@stefanprobst/rehype-extract-toc": "^2.2.0",
|
"@stefanprobst/rehype-extract-toc": "^2.2.0",
|
||||||
"@types/mdx": "^2.0.3",
|
"@types/mdx": "^2.0.3",
|
||||||
|
@ -67,4 +67,4 @@
|
||||||
"vite": "^4.0.0",
|
"vite": "^4.0.0",
|
||||||
"vite-plugin-pwa": "^0.15.2"
|
"vite-plugin-pwa": "^0.15.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,6 +173,20 @@ export const contentTree: (ChapterSection | ChaptersSection)[] =
|
||||||
"slug": "other-equatives"
|
"slug": "other-equatives"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"heading": "Inflection 🔘",
|
||||||
|
"subdirectory": "inflection",
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"import": inflectionIntro,
|
||||||
|
"slug": "inflection-intro"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"import": inflectionPatterns,
|
||||||
|
"slug": "inflection-patterns"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"heading": "Nouns",
|
"heading": "Nouns",
|
||||||
|
@ -358,20 +372,6 @@ export const contentTree: (ChapterSection | ChaptersSection)[] =
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"heading": "Inflection 🔘",
|
|
||||||
"subdirectory": "inflection",
|
|
||||||
"chapters": [
|
|
||||||
{
|
|
||||||
"import": inflectionIntro,
|
|
||||||
"slug": "inflection-intro"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"import": inflectionPatterns,
|
|
||||||
"slug": "inflection-patterns"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"heading": "Sandwiches 🥪",
|
"heading": "Sandwiches 🥪",
|
||||||
"subdirectory": "sandwiches",
|
"subdirectory": "sandwiches",
|
||||||
|
|
|
@ -42,7 +42,7 @@ These words always end in:
|
||||||
- **Feminine:** - <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} />
|
- **Feminine:** - <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} />
|
||||||
|
|
||||||
<InflectionCarousel
|
<InflectionCarousel
|
||||||
items={startingWord(words.filter(tp.isPattern1Entry), "غټ")}
|
items={startingWord(words.filter(n => tp.isPattern1Entry(n) && !n.c.includes("adv.")), "غټ")}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
**Note:** See exceptions below.
|
**Note:** See exceptions below.
|
||||||
|
|
|
@ -12,6 +12,10 @@ import mascEndingChart from "./masc-plural-ending-decision-chart.excalidraw.svg"
|
||||||
import femEndingChart from "./fem-plural-ending-decision-chart.excalidraw.svg";
|
import femEndingChart from "./fem-plural-ending-decision-chart.excalidraw.svg";
|
||||||
import PluralTable from "./PluralTable";
|
import PluralTable from "./PluralTable";
|
||||||
import VideoPlayer from "../../components/VideoPlayer";
|
import VideoPlayer from "../../components/VideoPlayer";
|
||||||
|
import {
|
||||||
|
pluralNounGame,
|
||||||
|
} from "../../games/games";
|
||||||
|
import GameDisplay from "../../games/GameDisplay";
|
||||||
|
|
||||||
export const Pattern1 = () => <Link to="/nouns/nouns-unisex/#1-basic">Pattern #1</Link>;
|
export const Pattern1 = () => <Link to="/nouns/nouns-unisex/#1-basic">Pattern #1</Link>;
|
||||||
export const Pattern2 = () => <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-%DB%8C---ay">Pattern #2</Link>;
|
export const Pattern2 = () => <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-%DB%8C---ay">Pattern #2</Link>;
|
||||||
|
@ -561,3 +565,5 @@ The <InlinePs opts={opts} ps={{ p: "انې", f: "áane" }} /> can be added to fe
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<GameDisplay record={pluralNounGame} />
|
||||||
|
|
||||||
|
|
|
@ -4,108 +4,130 @@ import { useUser } from "../user-context";
|
||||||
import Link from "../components/Link";
|
import Link from "../components/Link";
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import SmoothCollapse from "react-smooth-collapse";
|
import SmoothCollapse from "react-smooth-collapse";
|
||||||
import {
|
import { AT } from "@lingdocs/lingdocs-main";
|
||||||
AT,
|
|
||||||
} from "@lingdocs/lingdocs-main";
|
|
||||||
|
|
||||||
function GamesBrowser() {
|
function GamesBrowser() {
|
||||||
const { user } = useUser();
|
const { user } = useUser();
|
||||||
const [opened, setOpened] = useState<string | undefined>(undefined);
|
const [opened, setOpened] = useState<string | undefined>(undefined);
|
||||||
function handleChapterClick(id: string) {
|
function handleChapterClick(id: string) {
|
||||||
setOpened(prev => prev === id ? undefined : id);
|
setOpened((prev) => (prev === id ? undefined : id));
|
||||||
}
|
}
|
||||||
return <div>
|
return (
|
||||||
{games.map((chapter) => (
|
<div>
|
||||||
<div key={chapter.chapter}>
|
{games.map((chapter) => (
|
||||||
<ChapterDisplay
|
<div key={chapter.chapter}>
|
||||||
chapter={chapter}
|
<ChapterDisplay
|
||||||
user={user}
|
chapter={chapter}
|
||||||
handleClick={handleChapterClick}
|
user={user}
|
||||||
expanded={opened === chapter.chapter}
|
handleClick={handleChapterClick}
|
||||||
/>
|
expanded={opened === chapter.chapter}
|
||||||
</div>
|
/>
|
||||||
))}
|
</div>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ChapterDisplay({ chapter, user, handleClick, expanded }: {
|
function ChapterDisplay({
|
||||||
chapter: { chapter: string, items: GameRecord[] },
|
chapter,
|
||||||
user: AT.LingdocsUser | undefined,
|
user,
|
||||||
handleClick: (chapter: string) => void,
|
handleClick,
|
||||||
expanded: boolean,
|
expanded,
|
||||||
|
}: {
|
||||||
|
chapter: { chapter: string; items: GameRecord[] };
|
||||||
|
user: AT.LingdocsUser | undefined;
|
||||||
|
handleClick: (chapter: string) => void;
|
||||||
|
expanded: boolean;
|
||||||
}) {
|
}) {
|
||||||
const [opened, setOpened] = useState<string | undefined>(undefined);
|
const [opened, setOpened] = useState<string | undefined>(undefined);
|
||||||
const progress = getPercentageComplete(chapter, user?.tests);
|
const progress = getPercentageComplete(chapter, user?.tests);
|
||||||
function handleTitleClick(id: string) {
|
function handleTitleClick(id: string) {
|
||||||
setOpened(prev => prev === id ? undefined : id);
|
setOpened((prev) => (prev === id ? undefined : id));
|
||||||
}
|
}
|
||||||
return <div className="mb-3">
|
return (
|
||||||
<div className="card clickable" onClick={() => handleClick(chapter.chapter)}>
|
<div className="mb-3">
|
||||||
<div className="card-body" style={{
|
<div
|
||||||
backgroundColor: expanded ? "#e6e6e6" : "inherit",
|
className="card clickable"
|
||||||
}}>
|
onClick={() => handleClick(chapter.chapter)}
|
||||||
<h4>{chapter.chapter}</h4>
|
>
|
||||||
<ChapterProgress progress={progress} />
|
<div
|
||||||
</div>
|
className="card-body"
|
||||||
|
style={{
|
||||||
|
backgroundColor: expanded ? "#e6e6e6" : "inherit",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<h4>{chapter.chapter}</h4>
|
||||||
|
<ChapterProgress progress={progress} />
|
||||||
</div>
|
</div>
|
||||||
<SmoothCollapse expanded={expanded}>
|
</div>
|
||||||
{chapter.items.map(({ id, title, Game }) => {
|
<SmoothCollapse expanded={expanded}>
|
||||||
const done = user?.tests.some(t => t.done && t.id === id);
|
{chapter.items.map(({ id, title, Game }) => {
|
||||||
const open = opened === id;
|
const done = user?.tests.some((t) => t.done && t.id === id);
|
||||||
return <div key={id}>
|
const open = opened === id;
|
||||||
<div className="d-flex flex-row justify-content-between align-items-center">
|
return (
|
||||||
<div>
|
<div key={id}>
|
||||||
<h5 className="my-3 clickable" onClick={() => handleTitleClick(id)}>
|
<div className="d-flex flex-row justify-content-between align-items-center">
|
||||||
<i className={`fas fa-caret-${open ? "down" : "right"}`}></i> {title}
|
<div>
|
||||||
{` `}
|
<h5
|
||||||
</h5>
|
className="my-3 clickable"
|
||||||
</div>
|
onClick={() => handleTitleClick(id)}
|
||||||
<div>
|
>
|
||||||
{done && <h4>✅</h4>}
|
<i
|
||||||
</div>
|
className={`fas fa-caret-${open ? "down" : "right"}`}
|
||||||
</div>
|
></i>{" "}
|
||||||
<SmoothCollapse expanded={open}>
|
{title}
|
||||||
{open && <Game inChapter={false} />}
|
{` `}
|
||||||
</SmoothCollapse>
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
})}
|
<div>{done && <h4>✅</h4>}</div>
|
||||||
</SmoothCollapse>
|
</div>
|
||||||
|
<SmoothCollapse expanded={open}>
|
||||||
|
{open && <Game inChapter={false} />}
|
||||||
|
</SmoothCollapse>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</SmoothCollapse>
|
||||||
</div>
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ChapterProgress({ progress }: { progress: "not logged in" | number }) {
|
function ChapterProgress({ progress }: { progress: "not logged in" | number }) {
|
||||||
if (progress === "not logged in") {
|
if (progress === "not logged in") {
|
||||||
return <div className="small text-muted"><Link to="/account">Log in</Link> to see progress</div>;
|
return (
|
||||||
}
|
<div className="small text-muted">
|
||||||
return <div>
|
<Link to="/account">Log in</Link> to see progress
|
||||||
<div className="small text-muted">{progress}% mastered</div>
|
</div>
|
||||||
<div className="progress my-1" style={{ height: "5px" }}>
|
);
|
||||||
<div
|
}
|
||||||
className="progress-bar"
|
return (
|
||||||
role="progressbar"
|
<div>
|
||||||
style={{ width: `${progress}%` }}
|
<div className="small text-muted">{progress}% mastered</div>
|
||||||
/>
|
<div className="progress my-1" style={{ height: "5px" }}>
|
||||||
</div>
|
<div
|
||||||
</div>;
|
className="progress-bar"
|
||||||
|
role="progressbar"
|
||||||
|
style={{ width: `${progress}%` }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPercentageComplete(
|
function getPercentageComplete(
|
||||||
chapter: { chapter: string, items: GameRecord[] },
|
chapter: { chapter: string; items: GameRecord[] },
|
||||||
tests: undefined | AT.TestResult[],
|
tests: undefined | AT.TestResult[]
|
||||||
): "not logged in" | number {
|
): "not logged in" | number {
|
||||||
if (!tests) return "not logged in";
|
if (!tests) return "not logged in";
|
||||||
const chapterTestIds = chapter.items.map(gr => gr.id);
|
const chapterTestIds = chapter.items.map((gr) => gr.id);
|
||||||
const userCompletedIds = tests.filter(t => t.done).map(t => t.id);
|
const userCompletedIds = tests.filter((t) => t.done).map((t) => t.id);
|
||||||
|
|
||||||
const required = chapterTestIds.length;
|
const required = chapterTestIds.length;
|
||||||
const completed = chapterTestIds
|
const completed = chapterTestIds.filter((x) =>
|
||||||
.filter(x => userCompletedIds.includes(x))
|
userCompletedIds.includes(x)
|
||||||
.length;
|
).length;
|
||||||
|
|
||||||
return Math.round(
|
return Math.round((completed / required) * 100);
|
||||||
(completed / (required + 1)) * 100
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default GamesBrowser;
|
export default GamesBrowser;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import EquativeGame from "./sub-cores/EquativeGame";
|
import EquativeGame from "./sub-cores/EquativeGame";
|
||||||
import VerbGame from "./sub-cores/VerbGame";
|
import VerbGame from "./sub-cores/VerbGame";
|
||||||
import GenderGame from "./sub-cores/GenderGame";
|
import GenderGame from "./sub-cores/GenderGame";
|
||||||
|
import PluralNounGame from "./sub-cores/PluralNounGame";
|
||||||
import UnisexNounGame from "./sub-cores/UnisexNounGame";
|
import UnisexNounGame from "./sub-cores/UnisexNounGame";
|
||||||
import EquativeSituations from "./sub-cores/EquativeSituations";
|
import EquativeSituations from "./sub-cores/EquativeSituations";
|
||||||
import VerbSituations from "./sub-cores/VerbSituations";
|
import VerbSituations from "./sub-cores/VerbSituations";
|
||||||
|
@ -12,541 +13,549 @@ import PerfectVerbsIntransitive from "./sub-cores/PerfectGame";
|
||||||
import NPAdjWriting from "./sub-cores/NPAdjGame";
|
import NPAdjWriting from "./sub-cores/NPAdjGame";
|
||||||
import EPAdjGame from "./sub-cores/EPAdjGame";
|
import EPAdjGame from "./sub-cores/EPAdjGame";
|
||||||
|
|
||||||
|
|
||||||
// NOUNS
|
// NOUNS
|
||||||
export const nounGenderGame1 = makeGameRecord({
|
export const nounGenderGame1 = makeGameRecord({
|
||||||
title: "Identify Noun Genders - Level 1",
|
title: "Identify Noun Genders - Level 1",
|
||||||
id: "gender-nouns-1",
|
id: "gender-nouns-1",
|
||||||
link: "/nouns/nouns-gender#gender-by-ending",
|
link: "/nouns/nouns-gender#gender-by-ending",
|
||||||
level: 1,
|
level: 1,
|
||||||
SubCore: GenderGame,
|
SubCore: GenderGame,
|
||||||
});
|
});
|
||||||
export const nounGenderGame2 = makeGameRecord({
|
export const nounGenderGame2 = makeGameRecord({
|
||||||
title: "Identify Noun Genders - Level 2",
|
title: "Identify Noun Genders - Level 2",
|
||||||
id: "gender-nouns-2",
|
id: "gender-nouns-2",
|
||||||
link: "/nouns/nouns-gender#exceptions",
|
link: "/nouns/nouns-gender#exceptions",
|
||||||
level: 2,
|
level: 2,
|
||||||
SubCore: GenderGame,
|
SubCore: GenderGame,
|
||||||
});
|
});
|
||||||
export const unisexNounGame = makeGameRecord({
|
export const unisexNounGame = makeGameRecord({
|
||||||
title: "Changing genders on unisex nouns",
|
title: "Changing genders on unisex nouns",
|
||||||
id: "unisex-nouns-1",
|
id: "unisex-nouns-1",
|
||||||
link: "/nouns/nouns-unisex/",
|
link: "/nouns/nouns-unisex/",
|
||||||
level: undefined,
|
level: undefined,
|
||||||
SubCore: UnisexNounGame,
|
SubCore: UnisexNounGame,
|
||||||
|
});
|
||||||
|
export const pluralNounGame = makeGameRecord({
|
||||||
|
title: "Making nouns plural",
|
||||||
|
id: "plural-nouns-1",
|
||||||
|
link: "/nouns/nouns-plural/",
|
||||||
|
level: undefined,
|
||||||
|
SubCore: PluralNounGame,
|
||||||
});
|
});
|
||||||
|
|
||||||
// INFLECTIONS
|
// INFLECTIONS
|
||||||
export const inflectionTableGame1 = makeGameRecord({
|
export const inflectionTableGame1 = makeGameRecord({
|
||||||
title: "Write the inflections - Pattern #1",
|
title: "Write the inflections - Pattern #1",
|
||||||
id: "write-inflections-1",
|
id: "write-inflections-1",
|
||||||
link: "/inflection/inflection-patterns/#1-basic",
|
link: "/inflection/inflection-patterns/#1-basic",
|
||||||
level: 1,
|
level: 1,
|
||||||
SubCore: InflectionsWriting,
|
SubCore: InflectionsWriting,
|
||||||
});
|
});
|
||||||
export const inflectionTableGame2 = makeGameRecord({
|
export const inflectionTableGame2 = makeGameRecord({
|
||||||
title: "Write the inflections - Pattern #2",
|
title: "Write the inflections - Pattern #2",
|
||||||
id: "write-inflections-2",
|
id: "write-inflections-2",
|
||||||
link: "/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-ی---ey",
|
link: "/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-ی---ey",
|
||||||
level: 2,
|
level: 2,
|
||||||
SubCore: InflectionsWriting,
|
SubCore: InflectionsWriting,
|
||||||
});
|
});
|
||||||
export const inflectionTableGame3 = makeGameRecord({
|
export const inflectionTableGame3 = makeGameRecord({
|
||||||
title: "Write the inflections - Pattern #3",
|
title: "Write the inflections - Pattern #3",
|
||||||
id: "write-inflections-3",
|
id: "write-inflections-3",
|
||||||
link: "/inflection/inflection-patterns/#3-words-ending-in-a-stressed-ی---éy",
|
link: "/inflection/inflection-patterns/#3-words-ending-in-a-stressed-ی---éy",
|
||||||
level: 3,
|
level: 3,
|
||||||
SubCore: InflectionsWriting,
|
SubCore: InflectionsWriting,
|
||||||
});
|
});
|
||||||
export const inflectionTableGame4 = makeGameRecord({
|
export const inflectionTableGame4 = makeGameRecord({
|
||||||
title: "Write the inflections - Pattern #4",
|
title: "Write the inflections - Pattern #4",
|
||||||
id: "write-inflections-4",
|
id: "write-inflections-4",
|
||||||
link: "/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern",
|
link: "/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern",
|
||||||
level: 4,
|
level: 4,
|
||||||
SubCore: InflectionsWriting,
|
SubCore: InflectionsWriting,
|
||||||
});
|
});
|
||||||
export const inflectionTableGame5 = makeGameRecord({
|
export const inflectionTableGame5 = makeGameRecord({
|
||||||
title: "Write the inflections - Pattern #5",
|
title: "Write the inflections - Pattern #5",
|
||||||
id: "write-inflections-5",
|
id: "write-inflections-5",
|
||||||
link: "/inflection/inflection-patterns/#5-shorter-words-that-squish",
|
link: "/inflection/inflection-patterns/#5-shorter-words-that-squish",
|
||||||
level: 5,
|
level: 5,
|
||||||
SubCore: InflectionsWriting,
|
SubCore: InflectionsWriting,
|
||||||
});
|
});
|
||||||
export const inflectionTableGame6 = makeGameRecord({
|
export const inflectionTableGame6 = makeGameRecord({
|
||||||
title: "Write the inflections - Pattern #6",
|
title: "Write the inflections - Pattern #6",
|
||||||
id: "write-inflections-6",
|
id: "write-inflections-6",
|
||||||
link: "/inflection/inflection-patterns/#6-inanimate-feminine-nouns-ending-in-ي---ee",
|
link: "/inflection/inflection-patterns/#6-inanimate-feminine-nouns-ending-in-ي---ee",
|
||||||
level: 6,
|
level: 6,
|
||||||
SubCore: InflectionsWriting,
|
SubCore: InflectionsWriting,
|
||||||
});
|
});
|
||||||
export const inflectionPatternsGame1 = makeGameRecord({
|
export const inflectionPatternsGame1 = makeGameRecord({
|
||||||
title: "Identify the inflection pattern (Level 1)",
|
title: "Identify the inflection pattern (Level 1)",
|
||||||
id: "inflection-patterns-1",
|
id: "inflection-patterns-1",
|
||||||
link: "/inflection/inflection-patterns/",
|
link: "/inflection/inflection-patterns/",
|
||||||
level: 1,
|
level: 1,
|
||||||
SubCore: InflectionPatterns,
|
SubCore: InflectionPatterns,
|
||||||
});
|
});
|
||||||
export const inflectionPatternsGame2 = makeGameRecord({
|
export const inflectionPatternsGame2 = makeGameRecord({
|
||||||
title: "Identify the inflection pattern (Level 2)",
|
title: "Identify the inflection pattern (Level 2)",
|
||||||
id: "inflection-patterns-2",
|
id: "inflection-patterns-2",
|
||||||
link: "/inflection/inflection-patterns/",
|
link: "/inflection/inflection-patterns/",
|
||||||
level: 2,
|
level: 2,
|
||||||
SubCore: InflectionPatterns,
|
SubCore: InflectionPatterns,
|
||||||
});
|
});
|
||||||
|
|
||||||
// EQUATIVES
|
// EQUATIVES
|
||||||
export const equativeGamePresent = makeGameRecord({
|
export const equativeGamePresent = makeGameRecord({
|
||||||
title: "Write the present equative",
|
title: "Write the present equative",
|
||||||
id: "equative-present",
|
id: "equative-present",
|
||||||
link: "/equatives/present-equative/",
|
link: "/equatives/present-equative/",
|
||||||
level: "present",
|
level: "present",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGameHabitual = makeGameRecord({
|
export const equativeGameHabitual = makeGameRecord({
|
||||||
title: "Write the habitual equative",
|
title: "Write the habitual equative",
|
||||||
id: "equative-habitual",
|
id: "equative-habitual",
|
||||||
link: "/equatives/habitual-equative/",
|
link: "/equatives/habitual-equative/",
|
||||||
level: "habitual",
|
level: "habitual",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGameSubjunctive = makeGameRecord({
|
export const equativeGameSubjunctive = makeGameRecord({
|
||||||
title: "Write the subjunctive equative",
|
title: "Write the subjunctive equative",
|
||||||
id: "equative-subjunctive",
|
id: "equative-subjunctive",
|
||||||
link: "/equatives/other-equatives/#subjunctive-equative",
|
link: "/equatives/other-equatives/#subjunctive-equative",
|
||||||
level: "subjunctive",
|
level: "subjunctive",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGameFuture = makeGameRecord({
|
export const equativeGameFuture = makeGameRecord({
|
||||||
title: "Write the future equative",
|
title: "Write the future equative",
|
||||||
id: "equative-future",
|
id: "equative-future",
|
||||||
link: "/equatives/other-equatives/#future-equative",
|
link: "/equatives/other-equatives/#future-equative",
|
||||||
level: "future",
|
level: "future",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGamePast = makeGameRecord({
|
export const equativeGamePast = makeGameRecord({
|
||||||
title: "Write the past equative",
|
title: "Write the past equative",
|
||||||
id: "equative-past",
|
id: "equative-past",
|
||||||
link: "/equatives/other-equatives/#past-equative",
|
link: "/equatives/other-equatives/#past-equative",
|
||||||
level: "past",
|
level: "past",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGameWouldBe = makeGameRecord({
|
export const equativeGameWouldBe = makeGameRecord({
|
||||||
title: 'Write the "would be" equative',
|
title: 'Write the "would be" equative',
|
||||||
id: "equative-would-be",
|
id: "equative-would-be",
|
||||||
link: "/equatives/other-equatives/#would-be-equative",
|
link: "/equatives/other-equatives/#would-be-equative",
|
||||||
level: "wouldBe",
|
level: "wouldBe",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGamePastSubjunctive = makeGameRecord({
|
export const equativeGamePastSubjunctive = makeGameRecord({
|
||||||
title: 'Write the past subjunctive equative',
|
title: "Write the past subjunctive equative",
|
||||||
id: "equative-past-subjunctive",
|
id: "equative-past-subjunctive",
|
||||||
link: "/equatives/other-equatives/#past-subjunctive",
|
link: "/equatives/other-equatives/#past-subjunctive",
|
||||||
level: "pastSubjunctive",
|
level: "pastSubjunctive",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGameWouldHaveBeen = makeGameRecord({
|
export const equativeGameWouldHaveBeen = makeGameRecord({
|
||||||
title: 'Write the "would have been" equative',
|
title: 'Write the "would have been" equative',
|
||||||
id: "equative-would-have-been",
|
id: "equative-would-have-been",
|
||||||
link: "/equatives/other-equatives/#wold-have-been-equative",
|
link: "/equatives/other-equatives/#wold-have-been-equative",
|
||||||
level: "wouldHaveBeen",
|
level: "wouldHaveBeen",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
export const equativeGameAllIdentify = makeGameRecord({
|
export const equativeGameAllIdentify = makeGameRecord({
|
||||||
title: "Identify the equative (all tenses)",
|
title: "Identify the equative (all tenses)",
|
||||||
id: "equative-past-summary-identify",
|
id: "equative-past-summary-identify",
|
||||||
link: "/equatives/other-equatives",
|
link: "/equatives/other-equatives",
|
||||||
level: "allTenses",
|
level: "allTenses",
|
||||||
SubCore: EquativeIdentify,
|
SubCore: EquativeIdentify,
|
||||||
});
|
});
|
||||||
export const equativeGameSituations = makeGameRecord({
|
export const equativeGameSituations = makeGameRecord({
|
||||||
title: "Choose the right equative for the situation",
|
title: "Choose the right equative for the situation",
|
||||||
id: "equative-past-situations",
|
id: "equative-past-situations",
|
||||||
link: "/equatives/other-equatives",
|
link: "/equatives/other-equatives",
|
||||||
level: "situations",
|
level: "situations",
|
||||||
SubCore: EquativeSituations,
|
SubCore: EquativeSituations,
|
||||||
});
|
});
|
||||||
export const equativeGameAllProduce = makeGameRecord({
|
export const equativeGameAllProduce = makeGameRecord({
|
||||||
title: "Write the equative (all tenses)",
|
title: "Write the equative (all tenses)",
|
||||||
id: "equative-past-summary-produce",
|
id: "equative-past-summary-produce",
|
||||||
link: "/equatives/other-equatives",
|
link: "/equatives/other-equatives",
|
||||||
level: "allTenses",
|
level: "allTenses",
|
||||||
SubCore: EquativeGame,
|
SubCore: EquativeGame,
|
||||||
});
|
});
|
||||||
|
|
||||||
// VERBS
|
// VERBS
|
||||||
export const presentVerbGame1 = makeGameRecord({
|
export const presentVerbGame1 = makeGameRecord({
|
||||||
title: "Write the present verb (one)",
|
title: "Write the present verb (one)",
|
||||||
id: "present-verbs-write-1",
|
id: "present-verbs-write-1",
|
||||||
link: "/verbs/present-verbs/",
|
link: "/verbs/present-verbs/",
|
||||||
level: { level: 1, type :"presentVerb" },
|
level: { level: 1, type: "presentVerb" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const presentVerbGame2 = makeGameRecord({
|
export const presentVerbGame2 = makeGameRecord({
|
||||||
title: "Write the present verb (mix)",
|
title: "Write the present verb (mix)",
|
||||||
id: "present-verbs-write-2",
|
id: "present-verbs-write-2",
|
||||||
link: "/verbs/present-verbs/",
|
link: "/verbs/present-verbs/",
|
||||||
level: { level: 2, type :"presentVerb" },
|
level: { level: 2, type: "presentVerb" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const subjunctiveVerbGame1 = makeGameRecord({
|
export const subjunctiveVerbGame1 = makeGameRecord({
|
||||||
title: "Write the subjunctive verb (one)",
|
title: "Write the subjunctive verb (one)",
|
||||||
id: "subjunctive-verbs-write-1",
|
id: "subjunctive-verbs-write-1",
|
||||||
link: "/verbs/subjunctive-verbs/",
|
link: "/verbs/subjunctive-verbs/",
|
||||||
level: { level: 1, type :"subjunctiveVerb" },
|
level: { level: 1, type: "subjunctiveVerb" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const subjunctiveVerbGame2 = makeGameRecord({
|
export const subjunctiveVerbGame2 = makeGameRecord({
|
||||||
title: "Write the subjunctive verb (mix)",
|
title: "Write the subjunctive verb (mix)",
|
||||||
id: "subjunctive-verbs-write-2",
|
id: "subjunctive-verbs-write-2",
|
||||||
link: "/verbs/subjunctive-verbs/",
|
link: "/verbs/subjunctive-verbs/",
|
||||||
level: { level: 2, type :"subjunctiveVerb" },
|
level: { level: 2, type: "subjunctiveVerb" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const futureVerbGame1 = makeGameRecord({
|
export const futureVerbGame1 = makeGameRecord({
|
||||||
title: "Write the future verb (one)",
|
title: "Write the future verb (one)",
|
||||||
id: "future-verbs-write-1",
|
id: "future-verbs-write-1",
|
||||||
link: "/verbs/future-verbs/",
|
link: "/verbs/future-verbs/",
|
||||||
level: { level: 1, type :"futureVerb" },
|
level: { level: 1, type: "futureVerb" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const futureVerbGame2 = makeGameRecord({
|
export const futureVerbGame2 = makeGameRecord({
|
||||||
title: "Write the future verb (mix)",
|
title: "Write the future verb (mix)",
|
||||||
id: "future-verbs-write-2",
|
id: "future-verbs-write-2",
|
||||||
link: "/verbs/future-verbs/",
|
link: "/verbs/future-verbs/",
|
||||||
level: { level: 2, type :"futureVerb" },
|
level: { level: 2, type: "futureVerb" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const imperativeVerbGame1 = makeGameRecord({
|
export const imperativeVerbGame1 = makeGameRecord({
|
||||||
title: "Write the imperative verb (one)",
|
title: "Write the imperative verb (one)",
|
||||||
id: "imperative-verbs-write-1",
|
id: "imperative-verbs-write-1",
|
||||||
link: "/verbs/imperative-verbs/",
|
link: "/verbs/imperative-verbs/",
|
||||||
level: { level: 1, type :"imperative" },
|
level: { level: 1, type: "imperative" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const imperativeVerbGame2 = makeGameRecord({
|
export const imperativeVerbGame2 = makeGameRecord({
|
||||||
title: "Write the imperative verb (mix)",
|
title: "Write the imperative verb (mix)",
|
||||||
id: "imperative-verbs-write-2",
|
id: "imperative-verbs-write-2",
|
||||||
link: "/verbs/imperative-verbs/",
|
link: "/verbs/imperative-verbs/",
|
||||||
level: { level: 2, type :"imperative" },
|
level: { level: 2, type: "imperative" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const intransitivePerfectivePastVerbGame1 = makeGameRecord({
|
export const intransitivePerfectivePastVerbGame1 = makeGameRecord({
|
||||||
title: "Write the intransitive simple past verb (one)",
|
title: "Write the intransitive simple past verb (one)",
|
||||||
id: "intransitive-perfective-past-verbs-write-1",
|
id: "intransitive-perfective-past-verbs-write-1",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
||||||
level: { level: 1, type :"intransitivePerfectivePast" },
|
level: { level: 1, type: "intransitivePerfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const intransitivePerfectivePastVerbGame2 = makeGameRecord({
|
export const intransitivePerfectivePastVerbGame2 = makeGameRecord({
|
||||||
title: "Write the intransitive simple past verb (mix)",
|
title: "Write the intransitive simple past verb (mix)",
|
||||||
id: "intransitive-perfective-past-verbs-write-2",
|
id: "intransitive-perfective-past-verbs-write-2",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
||||||
level: { level: 2, type :"intransitivePerfectivePast" },
|
level: { level: 2, type: "intransitivePerfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const intransitiveImperfectivePastVerbGame1 = makeGameRecord({
|
export const intransitiveImperfectivePastVerbGame1 = makeGameRecord({
|
||||||
title: "Write the intransitive continuous past verb (one)",
|
title: "Write the intransitive continuous past verb (one)",
|
||||||
id: "intransitive-imperfective-past-verbs-write-1",
|
id: "intransitive-imperfective-past-verbs-write-1",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
||||||
level: { level: 1, type :"intransitiveImperfectivePast" },
|
level: { level: 1, type: "intransitiveImperfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const intransitiveImperfectivePastVerbGame2 = makeGameRecord({
|
export const intransitiveImperfectivePastVerbGame2 = makeGameRecord({
|
||||||
title: "Write the intransitive continuous past verb (mix)",
|
title: "Write the intransitive continuous past verb (mix)",
|
||||||
id: "intransitive-imperfective-past-verbs-write-2",
|
id: "intransitive-imperfective-past-verbs-write-2",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-intransitive-verbs-",
|
||||||
level: { level: 2, type :"intransitiveImperfectivePast" },
|
level: { level: 2, type: "intransitiveImperfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const transitivePerfectivePastVerbGame1 = makeGameRecord({
|
export const transitivePerfectivePastVerbGame1 = makeGameRecord({
|
||||||
title: "Write the transitive simple past verb (one)",
|
title: "Write the transitive simple past verb (one)",
|
||||||
id: "transitive-perfective-past-verbs-write-1",
|
id: "transitive-perfective-past-verbs-write-1",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
||||||
level: { level: 1, type :"transitivePerfectivePast" },
|
level: { level: 1, type: "transitivePerfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const transitivePerfectivePastVerbGame2 = makeGameRecord({
|
export const transitivePerfectivePastVerbGame2 = makeGameRecord({
|
||||||
title: "Write the transitive simple past verb (mix)",
|
title: "Write the transitive simple past verb (mix)",
|
||||||
id: "transitive-perfective-past-verbs-write-2",
|
id: "transitive-perfective-past-verbs-write-2",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
||||||
level: { level: 2, type :"transitivePerfectivePast" },
|
level: { level: 2, type: "transitivePerfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const transitiveImperfectivePastVerbGame1 = makeGameRecord({
|
export const transitiveImperfectivePastVerbGame1 = makeGameRecord({
|
||||||
title: "Write the transitive continuous past verb (one)",
|
title: "Write the transitive continuous past verb (one)",
|
||||||
id: "transitive-imperfective-past-verbs-write-1",
|
id: "transitive-imperfective-past-verbs-write-1",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
||||||
level: { level: 1, type :"transitiveImperfectivePast" },
|
level: { level: 1, type: "transitiveImperfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const transitiveImperfectivePastVerbGame2 = makeGameRecord({
|
export const transitiveImperfectivePastVerbGame2 = makeGameRecord({
|
||||||
title: "Write the transitive continuous past verb (mix)",
|
title: "Write the transitive continuous past verb (mix)",
|
||||||
id: "transitive-imperfective-past-verbs-write-2",
|
id: "transitive-imperfective-past-verbs-write-2",
|
||||||
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
link: "/verbs/past-verbs/#past-tense-with-transitive-verbs-",
|
||||||
level: { level: 2, type :"transitiveImperfectivePast" },
|
level: { level: 2, type: "transitiveImperfectivePast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const habitualPastVerbGame1 = makeGameRecord({
|
export const habitualPastVerbGame1 = makeGameRecord({
|
||||||
title: "Write the habitual past verb (one)",
|
title: "Write the habitual past verb (one)",
|
||||||
id: "habitual-past-verbs-write-1",
|
id: "habitual-past-verbs-write-1",
|
||||||
link: "/verbs/past-verbs/#habitual-past-tenses",
|
link: "/verbs/past-verbs/#habitual-past-tenses",
|
||||||
level: { level: 1, type : "habitualPast" },
|
level: { level: 1, type: "habitualPast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const habitualPastVerbGame2 = makeGameRecord({
|
export const habitualPastVerbGame2 = makeGameRecord({
|
||||||
title: "Write the habitual past verb (mix)",
|
title: "Write the habitual past verb (mix)",
|
||||||
id: "habitual-past-verbs-write-2",
|
id: "habitual-past-verbs-write-2",
|
||||||
link: "/verbs/past-verbs/#habitual-past-tenses",
|
link: "/verbs/past-verbs/#habitual-past-tenses",
|
||||||
level: { level: 2, type: "habitualPast" },
|
level: { level: 2, type: "habitualPast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const allPastVerbGame1 = makeGameRecord({
|
export const allPastVerbGame1 = makeGameRecord({
|
||||||
title: "Write the past verb - all past tenses (one)",
|
title: "Write the past verb - all past tenses (one)",
|
||||||
id: "all-past-verbs-write-1",
|
id: "all-past-verbs-write-1",
|
||||||
link: "/verbs/past-verbs/",
|
link: "/verbs/past-verbs/",
|
||||||
level: { level: 1, type : "allPast" },
|
level: { level: 1, type: "allPast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const allPastVerbGame2 = makeGameRecord({
|
export const allPastVerbGame2 = makeGameRecord({
|
||||||
title: "Write past verb - all past tenses (mix)",
|
title: "Write past verb - all past tenses (mix)",
|
||||||
id: "all-past-verbs-write-2",
|
id: "all-past-verbs-write-2",
|
||||||
link: "/verbs/past-verbs/",
|
link: "/verbs/past-verbs/",
|
||||||
level: { level: 2, type: "allPast" },
|
level: { level: 2, type: "allPast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const allVerbGame1 = makeGameRecord({
|
export const allVerbGame1 = makeGameRecord({
|
||||||
title: "Write verb - all tenses (one)",
|
title: "Write verb - all tenses (one)",
|
||||||
id: "all-verbs-write-1",
|
id: "all-verbs-write-1",
|
||||||
link: "/verbs/master-chart/",
|
link: "/verbs/master-chart/",
|
||||||
level: { level: 1, type : "allPast" },
|
level: { level: 1, type: "allPast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const allVerbGame2 = makeGameRecord({
|
export const allVerbGame2 = makeGameRecord({
|
||||||
title: "Write verb - all tenses (mix)",
|
title: "Write verb - all tenses (mix)",
|
||||||
id: "all-verbs-write-2",
|
id: "all-verbs-write-2",
|
||||||
link: "/verbs/master-chart/",
|
link: "/verbs/master-chart/",
|
||||||
level: { level: 2, type: "allPast" },
|
level: { level: 2, type: "allPast" },
|
||||||
SubCore: VerbGame,
|
SubCore: VerbGame,
|
||||||
});
|
});
|
||||||
export const verbSituationsGame = makeGameRecord({
|
export const verbSituationsGame = makeGameRecord({
|
||||||
title: "Choose the right verb tense for the situation",
|
title: "Choose the right verb tense for the situation",
|
||||||
id: "verb-tense-situations",
|
id: "verb-tense-situations",
|
||||||
link: "/verbs/verbs-intro/",
|
link: "/verbs/verbs-intro/",
|
||||||
level: "situations",
|
level: "situations",
|
||||||
SubCore: VerbSituations,
|
SubCore: VerbSituations,
|
||||||
});
|
});
|
||||||
export const verbFormulasGame = makeGameRecord({
|
export const verbFormulasGame = makeGameRecord({
|
||||||
title: "Choose the verb tense formula",
|
title: "Choose the verb tense formula",
|
||||||
id: "verb-tense-formulas",
|
id: "verb-tense-formulas",
|
||||||
link: "/verbs/master-chart/",
|
link: "/verbs/master-chart/",
|
||||||
level: "all",
|
level: "all",
|
||||||
SubCore: VerbFormulas,
|
SubCore: VerbFormulas,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const intransitivePresentPerfectGameOne = makeGameRecord({
|
export const intransitivePresentPerfectGameOne = makeGameRecord({
|
||||||
title: "Write the present perfect verb - intransitive (one)",
|
title: "Write the present perfect verb - intransitive (one)",
|
||||||
id: "present-perfect-intransitive-one",
|
id: "present-perfect-intransitive-one",
|
||||||
link: "/verbs/perfect-verbs-intro/",
|
link: "/verbs/perfect-verbs-intro/",
|
||||||
level: {
|
level: {
|
||||||
level: 1,
|
level: 1,
|
||||||
type: "intransitive",
|
type: "intransitive",
|
||||||
},
|
},
|
||||||
SubCore: PerfectVerbsIntransitive,
|
SubCore: PerfectVerbsIntransitive,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const intransitivePresentPerfectGameMix = makeGameRecord({
|
export const intransitivePresentPerfectGameMix = makeGameRecord({
|
||||||
title: "Write the present perfect verb - intransitive (mix)",
|
title: "Write the present perfect verb - intransitive (mix)",
|
||||||
id: "present-perfect-intransitive-mix",
|
id: "present-perfect-intransitive-mix",
|
||||||
link: "/verbs/perfect-verbs-intro/",
|
link: "/verbs/perfect-verbs-intro/",
|
||||||
level: {
|
level: {
|
||||||
level: 2,
|
level: 2,
|
||||||
type: "intransitive",
|
type: "intransitive",
|
||||||
},
|
},
|
||||||
SubCore: PerfectVerbsIntransitive,
|
SubCore: PerfectVerbsIntransitive,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const presentPerfectGame = makeGameRecord({
|
export const presentPerfectGame = makeGameRecord({
|
||||||
title: "Write the present perfect verb - transitive/intransitive mix",
|
title: "Write the present perfect verb - transitive/intransitive mix",
|
||||||
id: "present-perfect",
|
id: "present-perfect",
|
||||||
link: "/verbs/perfect-verbs-intro/",
|
link: "/verbs/perfect-verbs-intro/",
|
||||||
level: {
|
level: {
|
||||||
level: 2,
|
level: 2,
|
||||||
type: "transitive-intransitive",
|
type: "transitive-intransitive",
|
||||||
},
|
},
|
||||||
SubCore: PerfectVerbsIntransitive,
|
SubCore: PerfectVerbsIntransitive,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const perfectGameOne = makeGameRecord({
|
export const perfectGameOne = makeGameRecord({
|
||||||
title: "Write the perfect verb - all perfect tenses (one verb)",
|
title: "Write the perfect verb - all perfect tenses (one verb)",
|
||||||
id: "all-perfect-one",
|
id: "all-perfect-one",
|
||||||
link: "/verbs/all-perfect-verbs/",
|
link: "/verbs/all-perfect-verbs/",
|
||||||
level: {
|
level: {
|
||||||
level: 1,
|
level: 1,
|
||||||
type: "all-tenses",
|
type: "all-tenses",
|
||||||
},
|
},
|
||||||
SubCore: PerfectVerbsIntransitive,
|
SubCore: PerfectVerbsIntransitive,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const perfectGameMix = makeGameRecord({
|
export const perfectGameMix = makeGameRecord({
|
||||||
title: "Write the perfect verb - all perfect tenses (mix)",
|
title: "Write the perfect verb - all perfect tenses (mix)",
|
||||||
id: "all-perfect-mix",
|
id: "all-perfect-mix",
|
||||||
link: "/verbs/all-perfect-verbs/",
|
link: "/verbs/all-perfect-verbs/",
|
||||||
level: {
|
level: {
|
||||||
level: 2,
|
level: 2,
|
||||||
type: "all-tenses",
|
type: "all-tenses",
|
||||||
},
|
},
|
||||||
SubCore: PerfectVerbsIntransitive,
|
SubCore: PerfectVerbsIntransitive,
|
||||||
});
|
});
|
||||||
|
|
||||||
// ADJECTIVES
|
// ADJECTIVES
|
||||||
export const epWithAdjectivesHints = makeGameRecord({
|
export const epWithAdjectivesHints = makeGameRecord({
|
||||||
title: "Write the adjective to match the subject (with inf. pattern hints)",
|
title: "Write the adjective to match the subject (with inf. pattern hints)",
|
||||||
id: "adjective-predicate-hints",
|
id: "adjective-predicate-hints",
|
||||||
link: "/inflection/inflection-patterns/",
|
link: "/inflection/inflection-patterns/",
|
||||||
level: "hints",
|
level: "hints",
|
||||||
SubCore: EPAdjGame,
|
SubCore: EPAdjGame,
|
||||||
});
|
});
|
||||||
export const epWithAdjectives = makeGameRecord({
|
export const epWithAdjectives = makeGameRecord({
|
||||||
title: "Write the predicate adjective to match the subject",
|
title: "Write the predicate adjective to match the subject",
|
||||||
id: "adjective-predicate",
|
id: "adjective-predicate",
|
||||||
link: "/inflection/inflection-patterns/",
|
link: "/inflection/inflection-patterns/",
|
||||||
level: "no-hints",
|
level: "no-hints",
|
||||||
SubCore: EPAdjGame,
|
SubCore: EPAdjGame,
|
||||||
});
|
});
|
||||||
export const npWithAdjectivesHints = makeGameRecord({
|
export const npWithAdjectivesHints = makeGameRecord({
|
||||||
title: "Write the adjective and noun together (with inf. pattern hints)",
|
title: "Write the adjective and noun together (with inf. pattern hints)",
|
||||||
id: "adjective-nps-hints",
|
id: "adjective-nps-hints",
|
||||||
link: "/phrase-structure/np/",
|
link: "/phrase-structure/np/",
|
||||||
level: "hints",
|
level: "hints",
|
||||||
SubCore: NPAdjWriting,
|
SubCore: NPAdjWriting,
|
||||||
});
|
});
|
||||||
export const npWithAdjectivesNoHints = makeGameRecord({
|
export const npWithAdjectivesNoHints = makeGameRecord({
|
||||||
title: "Write the adjective and noun together",
|
title: "Write the adjective and noun together",
|
||||||
id: "adjective-nps-no-hints",
|
id: "adjective-nps-no-hints",
|
||||||
link: "/phrase-structure/np/",
|
link: "/phrase-structure/np/",
|
||||||
level: "no-hints",
|
level: "no-hints",
|
||||||
SubCore: NPAdjWriting,
|
SubCore: NPAdjWriting,
|
||||||
});
|
});
|
||||||
export const npWithAdjectivesInSandwiches = makeGameRecord({
|
export const npWithAdjectivesInSandwiches = makeGameRecord({
|
||||||
title: "Write the adjective and noun together in sandwiches 🥪",
|
title: "Write the adjective and noun together in sandwiches 🥪",
|
||||||
id: "adjective-nps-in-sandwiches",
|
id: "adjective-nps-in-sandwiches",
|
||||||
link: "/phrase-structure/ap/#sandwich-",
|
link: "/phrase-structure/ap/#sandwich-",
|
||||||
level: "sandwiches",
|
level: "sandwiches",
|
||||||
SubCore: NPAdjWriting,
|
SubCore: NPAdjWriting,
|
||||||
});
|
});
|
||||||
|
|
||||||
const games: { chapter: string, items: GameRecord[] }[] = [
|
const games: { chapter: string; items: GameRecord[] }[] = [
|
||||||
{
|
{
|
||||||
chapter: "Nouns",
|
chapter: "Nouns",
|
||||||
items: [
|
items: [nounGenderGame1, nounGenderGame2, unisexNounGame, pluralNounGame],
|
||||||
nounGenderGame1,
|
},
|
||||||
nounGenderGame2,
|
{
|
||||||
unisexNounGame,
|
chapter: "Inflection",
|
||||||
],
|
items: [
|
||||||
},
|
inflectionTableGame1,
|
||||||
{
|
inflectionTableGame2,
|
||||||
chapter: "Inflection",
|
inflectionTableGame3,
|
||||||
items: [
|
inflectionTableGame4,
|
||||||
inflectionTableGame1,
|
inflectionTableGame5,
|
||||||
inflectionTableGame2,
|
inflectionTableGame6,
|
||||||
inflectionTableGame3,
|
inflectionPatternsGame1,
|
||||||
inflectionTableGame4,
|
inflectionPatternsGame2,
|
||||||
inflectionTableGame5,
|
],
|
||||||
inflectionTableGame6,
|
},
|
||||||
inflectionPatternsGame1,
|
{
|
||||||
inflectionPatternsGame2,
|
chapter: "Equatives",
|
||||||
],
|
items: [
|
||||||
},
|
equativeGamePresent,
|
||||||
{
|
equativeGameHabitual,
|
||||||
chapter: "Equatives",
|
equativeGameSubjunctive,
|
||||||
items: [
|
equativeGameFuture,
|
||||||
equativeGamePresent,
|
equativeGamePast,
|
||||||
equativeGameHabitual,
|
equativeGameWouldBe,
|
||||||
equativeGameSubjunctive,
|
equativeGamePastSubjunctive,
|
||||||
equativeGameFuture,
|
equativeGameWouldHaveBeen,
|
||||||
equativeGamePast,
|
equativeGameSituations,
|
||||||
equativeGameWouldBe,
|
equativeGameAllIdentify,
|
||||||
equativeGamePastSubjunctive,
|
equativeGameAllProduce,
|
||||||
equativeGameWouldHaveBeen,
|
],
|
||||||
equativeGameSituations,
|
},
|
||||||
equativeGameAllIdentify,
|
{
|
||||||
equativeGameAllProduce,
|
chapter: "Verbs",
|
||||||
],
|
items: [
|
||||||
},
|
presentVerbGame1,
|
||||||
{
|
presentVerbGame2,
|
||||||
chapter: "Verbs",
|
subjunctiveVerbGame1,
|
||||||
items: [
|
subjunctiveVerbGame2,
|
||||||
presentVerbGame1,
|
futureVerbGame1,
|
||||||
presentVerbGame2,
|
futureVerbGame2,
|
||||||
subjunctiveVerbGame1,
|
imperativeVerbGame1,
|
||||||
subjunctiveVerbGame2,
|
imperativeVerbGame2,
|
||||||
futureVerbGame1,
|
intransitiveImperfectivePastVerbGame1,
|
||||||
futureVerbGame2,
|
intransitiveImperfectivePastVerbGame2,
|
||||||
imperativeVerbGame1,
|
intransitivePerfectivePastVerbGame1,
|
||||||
imperativeVerbGame2,
|
intransitivePerfectivePastVerbGame2,
|
||||||
intransitiveImperfectivePastVerbGame1,
|
transitiveImperfectivePastVerbGame1,
|
||||||
intransitiveImperfectivePastVerbGame2,
|
transitiveImperfectivePastVerbGame2,
|
||||||
intransitivePerfectivePastVerbGame1,
|
transitivePerfectivePastVerbGame1,
|
||||||
intransitivePerfectivePastVerbGame2,
|
transitivePerfectivePastVerbGame2,
|
||||||
transitiveImperfectivePastVerbGame1,
|
habitualPastVerbGame1,
|
||||||
transitiveImperfectivePastVerbGame2,
|
habitualPastVerbGame2,
|
||||||
transitivePerfectivePastVerbGame1,
|
allPastVerbGame1,
|
||||||
transitivePerfectivePastVerbGame2,
|
allPastVerbGame2,
|
||||||
habitualPastVerbGame1,
|
allVerbGame1,
|
||||||
habitualPastVerbGame2,
|
allVerbGame2,
|
||||||
allPastVerbGame1,
|
verbSituationsGame,
|
||||||
allPastVerbGame2,
|
verbFormulasGame,
|
||||||
allVerbGame1,
|
],
|
||||||
allVerbGame2,
|
},
|
||||||
verbSituationsGame,
|
{
|
||||||
verbFormulasGame,
|
chapter: "Perfect Verbs",
|
||||||
],
|
items: [
|
||||||
},
|
intransitivePresentPerfectGameOne,
|
||||||
{
|
intransitivePresentPerfectGameMix,
|
||||||
chapter: "Perfect Verbs",
|
presentPerfectGame,
|
||||||
items: [
|
perfectGameOne,
|
||||||
intransitivePresentPerfectGameOne,
|
perfectGameMix,
|
||||||
intransitivePresentPerfectGameMix,
|
],
|
||||||
presentPerfectGame,
|
},
|
||||||
perfectGameOne,
|
{
|
||||||
perfectGameMix,
|
chapter: "Adjectives",
|
||||||
],
|
items: [
|
||||||
},
|
epWithAdjectivesHints,
|
||||||
{
|
epWithAdjectives,
|
||||||
chapter: "Adjectives",
|
npWithAdjectivesHints,
|
||||||
items: [
|
npWithAdjectivesNoHints,
|
||||||
epWithAdjectivesHints,
|
npWithAdjectivesInSandwiches,
|
||||||
epWithAdjectives,
|
],
|
||||||
npWithAdjectivesHints,
|
},
|
||||||
npWithAdjectivesNoHints,
|
|
||||||
npWithAdjectivesInSandwiches,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// check to make sure we have no duplicate game keys
|
// check to make sure we have no duplicate game keys
|
||||||
games.forEach(({ items }) => {
|
games.forEach(({ items }) => {
|
||||||
const allAreUnique = (arr: unknown[]) => arr.length === new Set(arr).size;
|
const allAreUnique = (arr: unknown[]) => arr.length === new Set(arr).size;
|
||||||
const ids = items.map(x => x.id);
|
const ids = items.map((x) => x.id);
|
||||||
const titles = items.map(x => x.title);
|
const titles = items.map((x) => x.title);
|
||||||
if (!allAreUnique(titles)) throw new Error("duplicate game title");
|
if (!allAreUnique(titles)) throw new Error("duplicate game title");
|
||||||
if (!allAreUnique(ids)) throw new Error("duplicate game key");
|
if (!allAreUnique(ids)) throw new Error("duplicate game key");
|
||||||
})
|
});
|
||||||
|
|
||||||
export default games;
|
export default games;
|
||||||
|
|
||||||
function makeGameRecord<T>({ title, id, link, level, SubCore }:{
|
function makeGameRecord<T>({
|
||||||
title: string,
|
title,
|
||||||
id: string,
|
id,
|
||||||
link: string,
|
link,
|
||||||
level: T,
|
level,
|
||||||
SubCore: GameSubCore<T>,
|
SubCore,
|
||||||
|
}: {
|
||||||
|
title: string;
|
||||||
|
id: string;
|
||||||
|
link: string;
|
||||||
|
level: T;
|
||||||
|
SubCore: GameSubCore<T>;
|
||||||
}): GameRecord {
|
}): GameRecord {
|
||||||
return {
|
return {
|
||||||
title,
|
title,
|
||||||
id,
|
id,
|
||||||
Game: ({ inChapter }: { inChapter: boolean }) => (
|
Game: ({ inChapter }: { inChapter: boolean }) => (
|
||||||
<SubCore inChapter={inChapter} id={id} level={level} link={link} />
|
<SubCore inChapter={inChapter} id={id} level={level} link={link} />
|
||||||
),
|
),
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,288 @@
|
||||||
|
import { useState } from "react";
|
||||||
|
import { comparePs } from "../../lib/game-utils";
|
||||||
|
import genderColors from "../../lib/gender-colors";
|
||||||
|
import GameCore from "../GameCore";
|
||||||
|
import {
|
||||||
|
Types as T,
|
||||||
|
Examples,
|
||||||
|
defaultTextOptions as opts,
|
||||||
|
inflectWord,
|
||||||
|
firstVariation,
|
||||||
|
typePredicates as tp,
|
||||||
|
randFromArray,
|
||||||
|
removeFVarients,
|
||||||
|
psStringFromEntry,
|
||||||
|
} from "@lingdocs/ps-react";
|
||||||
|
|
||||||
|
import { wordQuery } from "../../words/words";
|
||||||
|
import { makePool } from "../../lib/pool";
|
||||||
|
|
||||||
|
export const nouns = wordQuery("nouns", [
|
||||||
|
"dUaa",
|
||||||
|
"idaa",
|
||||||
|
"raNaa",
|
||||||
|
"angrez",
|
||||||
|
"xudza",
|
||||||
|
"ihtiyaaj",
|
||||||
|
"safar",
|
||||||
|
"khob",
|
||||||
|
"gUl",
|
||||||
|
"wakht",
|
||||||
|
"watan",
|
||||||
|
"qaazee",
|
||||||
|
"bachay",
|
||||||
|
"spay",
|
||||||
|
"nmasay",
|
||||||
|
"atal",
|
||||||
|
"puxtoon",
|
||||||
|
"wayaand",
|
||||||
|
"dzaay",
|
||||||
|
"kitaab",
|
||||||
|
"peesho",
|
||||||
|
"ghul",
|
||||||
|
"shpoon",
|
||||||
|
"xUwoonkay",
|
||||||
|
"gaawanDay",
|
||||||
|
"sakhtee",
|
||||||
|
"dostee",
|
||||||
|
"aRtiyaa",
|
||||||
|
"DaakTar",
|
||||||
|
"laas",
|
||||||
|
"waadu",
|
||||||
|
"dost",
|
||||||
|
"maar",
|
||||||
|
"lewu",
|
||||||
|
"چرګ",
|
||||||
|
"zmaray",
|
||||||
|
"zalmay",
|
||||||
|
"paakistaanay",
|
||||||
|
"baaNoo",
|
||||||
|
"maamaa",
|
||||||
|
"kaakaa",
|
||||||
|
"qaazuy",
|
||||||
|
"نرس",
|
||||||
|
"ghwaa",
|
||||||
|
"gwaax",
|
||||||
|
"gaam",
|
||||||
|
"andzoor",
|
||||||
|
"ghlaa",
|
||||||
|
"mlaa",
|
||||||
|
"khabura",
|
||||||
|
"andexna",
|
||||||
|
"برقه",
|
||||||
|
"پښه",
|
||||||
|
"پوښتنه",
|
||||||
|
"تمه",
|
||||||
|
"shpa",
|
||||||
|
"kurxa",
|
||||||
|
"amsaa",
|
||||||
|
"tsaa",
|
||||||
|
"مېلمستیا",
|
||||||
|
"وینا",
|
||||||
|
"plaan",
|
||||||
|
"bayragh",
|
||||||
|
"ghaax",
|
||||||
|
"فلم",
|
||||||
|
"marg",
|
||||||
|
"kaal",
|
||||||
|
"noom",
|
||||||
|
"paachaa",
|
||||||
|
"laalaa",
|
||||||
|
"بوټی",
|
||||||
|
"پېټی",
|
||||||
|
"توری",
|
||||||
|
"غړی",
|
||||||
|
"کاڼی",
|
||||||
|
"کلی",
|
||||||
|
"مړی",
|
||||||
|
"چېلی",
|
||||||
|
"کوچی",
|
||||||
|
"eeraanay",
|
||||||
|
"lmasay",
|
||||||
|
"baazoo",
|
||||||
|
"chaaqoo",
|
||||||
|
"paaroo",
|
||||||
|
"weeDiyo",
|
||||||
|
]);
|
||||||
|
|
||||||
|
// type NType =
|
||||||
|
// | "pattern1"
|
||||||
|
// | "pattern2"
|
||||||
|
// | "pattern3"
|
||||||
|
// | "pattern4"
|
||||||
|
// | "pattern5"
|
||||||
|
// | "other";
|
||||||
|
// // TODO: make pattern types as overlay types
|
||||||
|
// const types = intoPatterns(nouns);
|
||||||
|
const genders: T.Gender[] = ["masc", "fem"];
|
||||||
|
|
||||||
|
const amount = 25;
|
||||||
|
|
||||||
|
type Question = {
|
||||||
|
entry: T.DictionaryEntry;
|
||||||
|
singular: T.PsString;
|
||||||
|
plural: T.PsString[];
|
||||||
|
gender: T.Gender;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function PluralNounGame({
|
||||||
|
id,
|
||||||
|
link,
|
||||||
|
inChapter,
|
||||||
|
}: {
|
||||||
|
inChapter: boolean;
|
||||||
|
id: string;
|
||||||
|
link: string;
|
||||||
|
}) {
|
||||||
|
const getFromNounPool = makePool(nouns);
|
||||||
|
// let pool = { ...types };
|
||||||
|
function getQuestion(): Question {
|
||||||
|
const entry = getFromNounPool();
|
||||||
|
const gender: T.Gender = tp.isUnisexNounEntry(entry)
|
||||||
|
? randFromArray(genders)
|
||||||
|
: tp.isFemNounEntry(entry)
|
||||||
|
? "fem"
|
||||||
|
: "masc";
|
||||||
|
const [singular, plural] = getSingAndPlural({ entry, gender });
|
||||||
|
if (!singular || plural.length === 0) {
|
||||||
|
console.log({ singular, plural });
|
||||||
|
throw new Error("unable to generate plurals for " + entry.p);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
entry,
|
||||||
|
gender,
|
||||||
|
singular,
|
||||||
|
plural,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSingAndPlural({
|
||||||
|
entry,
|
||||||
|
gender,
|
||||||
|
}: {
|
||||||
|
entry: T.DictionaryEntry;
|
||||||
|
gender: T.Gender;
|
||||||
|
}): [T.PsString, T.PsString[]] {
|
||||||
|
const infs = inflectWord(entry);
|
||||||
|
if (!infs) {
|
||||||
|
throw new Error("Unable to inflect word for plural");
|
||||||
|
}
|
||||||
|
const inflections: T.InflectionSet =
|
||||||
|
infs.inflections && gender in infs.inflections
|
||||||
|
? // @ts-ignore
|
||||||
|
infs.inflections[gender]
|
||||||
|
: undefined;
|
||||||
|
const plural: T.PluralInflectionSet =
|
||||||
|
// @ts-ignore
|
||||||
|
"plural" in infs && infs.plural ? infs.plural[gender] : undefined;
|
||||||
|
const singular = inflections
|
||||||
|
? inflections[0][0]
|
||||||
|
: psStringFromEntry(removeFVarients(entry));
|
||||||
|
const allPlurals = [
|
||||||
|
...(inflections ? inflections[1] : []),
|
||||||
|
...(plural ? plural[0] : []),
|
||||||
|
];
|
||||||
|
return [singular, allPlurals];
|
||||||
|
}
|
||||||
|
|
||||||
|
function Display({ question, callback }: QuestionDisplayProps<Question>) {
|
||||||
|
const [answer, setAnswer] = useState<string>("");
|
||||||
|
const handleInput = ({
|
||||||
|
target: { value },
|
||||||
|
}: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
setAnswer(value);
|
||||||
|
};
|
||||||
|
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
||||||
|
e.preventDefault();
|
||||||
|
const a = answer.replace(" ګ", "ګ").replace(" گ", "گ");
|
||||||
|
const correct = comparePs(a, question.plural);
|
||||||
|
if (correct) {
|
||||||
|
setAnswer("");
|
||||||
|
}
|
||||||
|
callback(correct);
|
||||||
|
};
|
||||||
|
function makePartOfSpeechInfo(q: Question) {
|
||||||
|
return `(n. ${q.gender === "masc" ? "m" : "f"}. ${
|
||||||
|
q.entry.c?.includes("anim.") ? "anim." : ""
|
||||||
|
})`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div
|
||||||
|
className="pt-2 pb-1 mb-2"
|
||||||
|
style={{
|
||||||
|
maxWidth: "300px",
|
||||||
|
margin: "0 auto",
|
||||||
|
backgroundColor:
|
||||||
|
genderColors[question.gender === "masc" ? "m" : "f"],
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Examples opts={opts}>
|
||||||
|
{[
|
||||||
|
{
|
||||||
|
...question.singular,
|
||||||
|
e: `${firstVariation(question.entry.e)} ${makePartOfSpeechInfo(
|
||||||
|
question
|
||||||
|
)}`,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
</Examples>
|
||||||
|
</div>
|
||||||
|
<div>is a singular noun. Make it plural.</div>
|
||||||
|
<form onSubmit={handleSubmit}>
|
||||||
|
<div className="my-3" style={{ maxWidth: "200px", margin: "0 auto" }}>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
className="form-control"
|
||||||
|
autoComplete="off"
|
||||||
|
autoCapitalize="off"
|
||||||
|
spellCheck="false"
|
||||||
|
dir="auto"
|
||||||
|
value={answer}
|
||||||
|
onChange={handleInput}
|
||||||
|
/>
|
||||||
|
<div className="text-muted small mt-3">
|
||||||
|
Type <kbd>Enter</kbd> to check
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Instructions() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h5>Make the given noun plural</h5>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function DisplayCorrectAnswer({ question }: { question: Question }) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{question.plural.length > 1 && (
|
||||||
|
<div className="text-muted">One of the following:</div>
|
||||||
|
)}
|
||||||
|
{question.plural.map((ps: any) => (
|
||||||
|
<Examples opts={opts}>{ps}</Examples>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<GameCore
|
||||||
|
inChapter={inChapter}
|
||||||
|
studyLink={link}
|
||||||
|
getQuestion={getQuestion}
|
||||||
|
id={id}
|
||||||
|
Display={Display}
|
||||||
|
DisplayCorrectAnswer={DisplayCorrectAnswer}
|
||||||
|
amount={amount}
|
||||||
|
timeLimit={175}
|
||||||
|
Instructions={Instructions}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
|
@ -2,36 +2,35 @@ import { randFromArray } from "@lingdocs/ps-react";
|
||||||
import equal from "fast-deep-equal";
|
import equal from "fast-deep-equal";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param poolBase an array of things you want to use as the pool to pick from
|
* @param poolBase an array of things you want to use as the pool to pick from
|
||||||
* @param removalLaxity If set, thery will be a n% chance that the pick will NOT
|
* @param removalLaxity If set, thery will be a n% chance that the pick will NOT
|
||||||
* be removed after use. Defaults to 0, meaning that every time an item is picked
|
* be removed after use. Defaults to 0, meaning that every time an item is picked
|
||||||
* it is removed from the. 100 means that items will never be removed from the pool.
|
* it is removed from the. 100 means that items will never be removed from the pool.
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export function makePool<P>(poolBase: P[], removalLaxity = 0): () => P {
|
export function makePool<P>(poolBase: P[], removalLaxity = 0): () => P {
|
||||||
let pool = [...poolBase];
|
let pool = [...poolBase];
|
||||||
function shouldStillKeepIt() {
|
function shouldStillKeepIt() {
|
||||||
if (!removalLaxity) return false;
|
if (!removalLaxity) return false;
|
||||||
return Math.random() < (removalLaxity / 100);
|
return Math.random() < removalLaxity / 100;
|
||||||
|
}
|
||||||
|
function pickRandomFromPool(): P {
|
||||||
|
// Pick an item from the pool;
|
||||||
|
const pick = randFromArray(pool);
|
||||||
|
// Remove the (first occurance of) the item from the pool
|
||||||
|
// This step might be skipped if the removal laxity is set
|
||||||
|
if (shouldStillKeepIt()) {
|
||||||
|
return pick;
|
||||||
}
|
}
|
||||||
function pickRandomFromPool(): P {
|
const index = pool.findIndex((v) => equal(v, pick));
|
||||||
// Pick an item from the pool;
|
if (index === -1) throw new Error("could not find pick from pool");
|
||||||
const pick = randFromArray(pool);
|
pool.splice(index, 1);
|
||||||
// Remove the (first occurance of) the item from the pool
|
// If the pool is empty, reset it
|
||||||
// This step might be skipped if the removal laxity is set
|
if (pool.length === 0) {
|
||||||
if (shouldStillKeepIt()) {
|
pool = [...poolBase];
|
||||||
return pick;
|
|
||||||
}
|
|
||||||
const index = pool.findIndex(v => equal(v, pick))
|
|
||||||
if (index === -1) throw new Error("could not find pick from pool");
|
|
||||||
pool.splice(index, 1);
|
|
||||||
// If the pool is empty, reset it
|
|
||||||
if (pool.length === 0) {
|
|
||||||
pool = [...poolBase];
|
|
||||||
}
|
|
||||||
return pick;
|
|
||||||
}
|
}
|
||||||
return pickRandomFromPool;
|
return pick;
|
||||||
|
}
|
||||||
|
return pickRandomFromPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
16
src/main.tsx
16
src/main.tsx
|
@ -1,13 +1,11 @@
|
||||||
import React from 'react'
|
import React from "react";
|
||||||
import ReactDOM from 'react-dom/client'
|
import ReactDOM from "react-dom/client";
|
||||||
import App from './App'
|
import App from "./App";
|
||||||
import "bootstrap/dist/css/bootstrap.min.css";
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
import "@fortawesome/fontawesome-free/css/all.css";
|
import "@fortawesome/fontawesome-free/css/all.css";
|
||||||
import { registerSW } from "virtual:pwa-register";
|
import { registerSW } from "virtual:pwa-register";
|
||||||
import {
|
import { BrowserRouter } from "react-router-dom";
|
||||||
BrowserRouter,
|
import { UserProvider } from "./user-context";
|
||||||
} from "react-router-dom";
|
|
||||||
import { UserProvider} from "./user-context";
|
|
||||||
|
|
||||||
const updateSW = registerSW({
|
const updateSW = registerSW({
|
||||||
onNeedRefresh() {
|
onNeedRefresh() {
|
||||||
|
@ -20,12 +18,12 @@ const updateSW = registerSW({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
|
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<BrowserRouter>
|
<BrowserRouter>
|
||||||
<UserProvider>
|
<UserProvider>
|
||||||
<App />
|
<App />
|
||||||
</UserProvider>
|
</UserProvider>
|
||||||
</BrowserRouter>
|
</BrowserRouter>
|
||||||
</React.StrictMode>,
|
</React.StrictMode>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
export default [
|
export default [
|
||||||
1527812449, // هلته - hálta, álta
|
1527812449, // هلته - hálta, álta
|
||||||
1527813043, // بې له ټاله - be la Taala
|
|
||||||
1527823145, // بېرون - beróon
|
1527823145, // بېرون - beróon
|
||||||
1527811735, // هنرمندانه - hUnarmandaana
|
|
||||||
1527813516, // څنګه - tsanga, tsunga
|
1527813516, // څنګه - tsanga, tsunga
|
||||||
1578014249199, // پکښې - pukxe
|
1578014249199, // پکښې - pukxe
|
||||||
1527821618, // احمقانه - ahmaqaana
|
1527821618, // احمقانه - ahmaqaana
|
||||||
|
@ -18,10 +16,7 @@ export default [
|
||||||
1527811221, // پورته - porta
|
1527811221, // پورته - porta
|
||||||
1611401028364, // جسماً - jismán
|
1611401028364, // جسماً - jismán
|
||||||
1527815099, // نا وخته - naa wakhta
|
1527815099, // نا وخته - naa wakhta
|
||||||
1527823029, // برالا - baraalaa
|
|
||||||
1527817154, // پسې - pase
|
1527817154, // پسې - pase
|
||||||
1527818325, // اېله - elá
|
|
||||||
1610796256372, // مخ په وړاندې - mukh pu wRaande
|
|
||||||
1527819870, // په ناحقه - pu naahaqa
|
1527819870, // په ناحقه - pu naahaqa
|
||||||
1527815228, // رو - roo
|
1527815228, // رو - roo
|
||||||
1575236274891, // دوري - dóoree
|
1575236274891, // دوري - dóoree
|
||||||
|
@ -54,7 +49,6 @@ export default [
|
||||||
1527823231, // په جڼه جڼه - pu jaNa jaNa
|
1527823231, // په جڼه جڼه - pu jaNa jaNa
|
||||||
1527812890, // معمولاً - mamoolan
|
1527812890, // معمولاً - mamoolan
|
||||||
1586363985796, // روزانه - rozaaná
|
1586363985796, // روزانه - rozaaná
|
||||||
1527819008, // مطلق العنان - mUtlaq-Ul-'ináan
|
|
||||||
1527822660, // خود به خود - khoodbakhood
|
1527822660, // خود به خود - khoodbakhood
|
||||||
1527823364, // باوجود - baawujood
|
1527823364, // باوجود - baawujood
|
||||||
1527820143, // پسته - pasta
|
1527820143, // پسته - pasta
|
||||||
|
@ -71,7 +65,6 @@ export default [
|
||||||
1527821224, // فقط - faqát
|
1527821224, // فقط - faqát
|
||||||
1527817302, // یوځای - yodzaay
|
1527817302, // یوځای - yodzaay
|
||||||
1527820499, // عاریتاً - aariyatan
|
1527820499, // عاریتاً - aariyatan
|
||||||
1527815959, // دم درحال - dam dărhaal
|
|
||||||
1527821253, // نزدې - nizde, nazde
|
1527821253, // نزدې - nizde, nazde
|
||||||
1527815997, // بدبختانه - badbakhtaana
|
1527815997, // بدبختانه - badbakhtaana
|
||||||
1584688791272, // په لوی لاس - pu looy laas
|
1584688791272, // په لوی لاس - pu looy laas
|
||||||
|
@ -147,10 +140,8 @@ export default [
|
||||||
1527814710, // نژدې پر نژدې - najzde par najzde
|
1527814710, // نژدې پر نژدې - najzde par najzde
|
||||||
1527821743, // ابتداً - ibtidán
|
1527821743, // ابتداً - ibtidán
|
||||||
1527817155, // پرله پسې - parlapase
|
1527817155, // پرله پسې - parlapase
|
||||||
1527818323, // ایله - eelá
|
|
||||||
1527822464, // تقلیداً - taqleedan
|
1527822464, // تقلیداً - taqleedan
|
||||||
1527813650, // لکه - lăka
|
1527813650, // لکه - lăka
|
||||||
1527811618, // منحیث - minheys
|
|
||||||
1527822465, // تقلیفاً - taqleefan
|
1527822465, // تقلیفاً - taqleefan
|
||||||
1527817294, // پاس - paas
|
1527817294, // پاس - paas
|
||||||
1527819016, // مستقیماً - mUstaqeeman
|
1527819016, // مستقیماً - mUstaqeeman
|
||||||
|
@ -197,7 +188,6 @@ export default [
|
||||||
1527820087, // وخت ناوخت - wakhtnaawakht
|
1527820087, // وخت ناوخت - wakhtnaawakht
|
||||||
1527814163, // اخوا - akhwaa
|
1527814163, // اخوا - akhwaa
|
||||||
1527822165, // سیده - seeda
|
1527822165, // سیده - seeda
|
||||||
1527814912, // رانږدې - raanaGde
|
|
||||||
1593176318060, // ډانګ پېیلی - Daang pe`yúley
|
1593176318060, // ډانګ پېیلی - Daang pe`yúley
|
||||||
1527819455, // د دې له کبله - du de la kabala
|
1527819455, // د دې له کبله - du de la kabala
|
||||||
1578330078760, // بدبد - badbad, budbud
|
1578330078760, // بدبد - badbad, budbud
|
||||||
|
@ -222,7 +212,6 @@ export default [
|
||||||
1527811327, // صمیمانه - sameemaana
|
1527811327, // صمیمانه - sameemaana
|
||||||
1577390207734, // پرې - pre
|
1577390207734, // پرې - pre
|
||||||
1527818716, // تدریجاً - tadreejan
|
1527818716, // تدریجاً - tadreejan
|
||||||
1527822285, // کل - kUl
|
|
||||||
1527822183, // شرعاً - sharan
|
1527822183, // شرعاً - sharan
|
||||||
1527818276, // پرمهال - purmahaal
|
1527818276, // پرمهال - purmahaal
|
||||||
1527814270, // له بده مرغه - la buda margha, la buda murgha
|
1527814270, // له بده مرغه - la buda margha, la buda murgha
|
||||||
|
@ -248,10 +237,8 @@ export default [
|
||||||
1527813595, // چندان - chandaan
|
1527813595, // چندان - chandaan
|
||||||
1527811222, // په څېر - pu tser
|
1527811222, // په څېر - pu tser
|
||||||
1527813692, // په خاطر - pu khaatir
|
1527813692, // په خاطر - pu khaatir
|
||||||
1623688507454, // ګنګوړ - gangóR, gangwÚR
|
|
||||||
1527820344, // په داوطلب ډول - pu daawtaláb Dawul
|
1527820344, // په داوطلب ډول - pu daawtaláb Dawul
|
||||||
1527811360, // هم مهاله - hammahaala
|
1527811360, // هم مهاله - hammahaala
|
||||||
1527812498, // بلې - băle
|
|
||||||
1586262008294, // پېټ - peT
|
1586262008294, // پېټ - peT
|
||||||
1527818646, // یو په دوه - yawpudwá
|
1527818646, // یو په دوه - yawpudwá
|
||||||
1527812762, // خالي - khaalee
|
1527812762, // خالي - khaalee
|
||||||
|
@ -305,7 +292,6 @@ export default [
|
||||||
1578080952673, // دباندې - dubaande
|
1578080952673, // دباندې - dubaande
|
||||||
1527813323, // خوشبختانه - khoshbakhtaana
|
1527813323, // خوشبختانه - khoshbakhtaana
|
||||||
1527819156, // ظالمانه - zaalimaana
|
1527819156, // ظالمانه - zaalimaana
|
||||||
1527818313, // پنځلس ورځنی - pindzúlaswradzanéy
|
|
||||||
1527812670, // هسې - hase
|
1527812670, // هسې - hase
|
||||||
1527818324, // په مټې - pumúTe
|
1527818324, // په مټې - pumúTe
|
||||||
1527820205, // کله ناکله - kalanaakala
|
1527820205, // کله ناکله - kalanaakala
|
||||||
|
@ -313,7 +299,6 @@ export default [
|
||||||
1527813688, // کوز - kooz
|
1527813688, // کوز - kooz
|
||||||
1527821666, // آمرانه - aamuraana
|
1527821666, // آمرانه - aamuraana
|
||||||
1527817845, // کټ مټ - kaTmaT, kuTmuT
|
1527817845, // کټ مټ - kaTmaT, kuTmuT
|
||||||
1527822351, // تېر و بېر - ter-U-ber
|
|
||||||
1527813618, // طبعاً - taban
|
1527813618, // طبعاً - taban
|
||||||
1527821531, // تل - tul
|
1527821531, // تل - tul
|
||||||
1527817255, // لیرې - leere
|
1527817255, // لیرې - leere
|
||||||
|
@ -373,8 +358,6 @@ export default [
|
||||||
1527820289, // واقعاً - waaqi'an, waaqiyan
|
1527820289, // واقعاً - waaqi'an, waaqiyan
|
||||||
1588786919406, // زر تر زره - zur tur zura
|
1588786919406, // زر تر زره - zur tur zura
|
||||||
1575642923868, // حتیٰ - hattaa
|
1575642923868, // حتیٰ - hattaa
|
||||||
1527813261, // هله - hala
|
|
||||||
1593173287113, // مجمل - mUjmál
|
|
||||||
1527815224, // رښتیا - rixtiyaa
|
1527815224, // رښتیا - rixtiyaa
|
||||||
1594909066356, // خوا و شا - khwaa-U-shaa
|
1594909066356, // خوا و شا - khwaa-U-shaa
|
||||||
1527819344, // پسه - pása
|
1527819344, // پسه - pása
|
||||||
|
@ -387,9 +370,7 @@ export default [
|
||||||
1527821125, // په منطقي ډول - pu mantiqee Dawul
|
1527821125, // په منطقي ډول - pu mantiqee Dawul
|
||||||
1527812137, // تل تر تله - tulturtula
|
1527812137, // تل تر تله - tulturtula
|
||||||
1527812375, // واپس - waapus
|
1527812375, // واپس - waapus
|
||||||
1527821736, // په موقت ډول - pu mUwaqqat Dawul
|
|
||||||
1527816129, // خواره واره - khwaarawaara
|
1527816129, // خواره واره - khwaarawaara
|
||||||
1527812572, // د ... په شان - du … pu shaan
|
|
||||||
1527811423, // لاندې - laande
|
1527811423, // لاندې - laande
|
||||||
1527820416, // حاکمانه - haakimaana
|
1527820416, // حاکمانه - haakimaana
|
||||||
1527812866, // لږترلږه - luG tur luGa
|
1527812866, // لږترلږه - luG tur luGa
|
||||||
|
@ -407,7 +388,6 @@ export default [
|
||||||
1527813061, // بې درنګه - bediranga
|
1527813061, // بې درنګه - bediranga
|
||||||
1527818056, // فی الحال - filháal
|
1527818056, // فی الحال - filháal
|
||||||
1527818654, // عین - ayn
|
1527818654, // عین - ayn
|
||||||
1527818669, // ماشومانه - maashoomaana
|
|
||||||
1527822765, // له واره - la waara
|
1527822765, // له واره - la waara
|
||||||
1527814913, // ورنږدې - warnaGde
|
1527814913, // ورنږدې - warnaGde
|
||||||
1527816312, // تخمیناً - takhmeenan
|
1527816312, // تخمیناً - takhmeenan
|
||||||
|
@ -419,8 +399,6 @@ export default [
|
||||||
1527811244, // آن - aan
|
1527811244, // آن - aan
|
||||||
1527816949, // هومره - hoomra
|
1527816949, // هومره - hoomra
|
||||||
1527821995, // اخر - akhúr, akhír
|
1527821995, // اخر - akhúr, akhír
|
||||||
1527817078, // خود - khood, khwud
|
|
||||||
1527823176, // آخود - aakhwad
|
|
||||||
1586626956539, // درست - drust, drast
|
1586626956539, // درست - drust, drast
|
||||||
1527818644, // برحال - barháal
|
1527818644, // برحال - barháal
|
||||||
1527815340, // تکرار - tăkraar
|
1527815340, // تکرار - tăkraar
|
||||||
|
@ -442,21 +420,14 @@ export default [
|
||||||
1527820921, // علیحده - aleyhida, alaeyda
|
1527820921, // علیحده - aleyhida, alaeyda
|
||||||
1527817376, // درڅخه - dărtsukha
|
1527817376, // درڅخه - dărtsukha
|
||||||
1527822852, // دېخوا هاخوا - dekhwaa haakhwaa
|
1527822852, // دېخوا هاخوا - dekhwaa haakhwaa
|
||||||
1527820103, // یوموټ - yawmóoT
|
|
||||||
1527820737, // هغسې - haghase
|
1527820737, // هغسې - haghase
|
||||||
1527823338, // هاغومره - haaghoomra
|
1527823338, // هاغومره - haaghoomra
|
||||||
1527814318, // مخکښې - mukhkxe
|
1527814318, // مخکښې - mukhkxe
|
||||||
1584689070748, // نامستقیم - naamUstaqeem
|
|
||||||
1527821752, // ماسوا - maasiwáa
|
|
||||||
1591382269266, // قابو - qaaboo
|
1591382269266, // قابو - qaaboo
|
||||||
1527818586, // بلا استثنیٰ - bilaaistisnaa
|
1527818586, // بلا استثنیٰ - bilaaistisnaa
|
||||||
1527820750, // چوټ انداز - choT andaaz, chooT andaaz ??
|
1527820750, // چوټ انداز - choT andaaz, chooT andaaz ??
|
||||||
1527812504, // بېرته - berta
|
1527812504, // بېرته - berta
|
||||||
1571526377164, // کډن - kaDún
|
|
||||||
1527819764, // ماهانه - maahaaná
|
1527819764, // ماهانه - maahaaná
|
||||||
1527822366, // حق ناحق - haqnaaháq
|
|
||||||
1527819438, // لېرې - lere
|
|
||||||
1527819392, // برسېره - barséra
|
|
||||||
1527822184, // اخلاقاً - akhlaaqan
|
1527822184, // اخلاقاً - akhlaaqan
|
||||||
1527813260, // تماماً - tamaaman
|
1527813260, // تماماً - tamaaman
|
||||||
1588758935200, // وراخوا - wăraakhwaa
|
1588758935200, // وراخوا - wăraakhwaa
|
||||||
|
@ -489,7 +460,6 @@ export default [
|
||||||
1527812415, // سم دلاسه - samdulaasa
|
1527812415, // سم دلاسه - samdulaasa
|
||||||
1527823339, // هغومره - haghoomra
|
1527823339, // هغومره - haghoomra
|
||||||
1527821616, // مظلومانه - mazloomaana
|
1527821616, // مظلومانه - mazloomaana
|
||||||
1584691547040, // مودبانه - mUaddabaana
|
|
||||||
1527812324, // هاسې په هاسې - haase pu haase
|
1527812324, // هاسې په هاسې - haase pu haase
|
||||||
1527815420, // وروسته - wroosta
|
1527815420, // وروسته - wroosta
|
||||||
1527818595, // قدرتاً - qUdratan
|
1527818595, // قدرتاً - qUdratan
|
||||||
|
|
|
@ -9,9 +9,8 @@ export default [
|
||||||
1527817146, // استوګن - astogan
|
1527817146, // استوګن - astogan
|
||||||
1527813713, // امیدوار - Umeedwaar
|
1527813713, // امیدوار - Umeedwaar
|
||||||
1527819451, // انګرېز - angréz
|
1527819451, // انګرېز - angréz
|
||||||
1527820346, // انلاین - anlaayn
|
|
||||||
1527813667, // اهم - aham
|
1527813667, // اهم - aham
|
||||||
1598724912198, // اوچ - ooch
|
1527815130, // اوچ - wuch
|
||||||
1586452587974, // اوزګار - oozgáar
|
1586452587974, // اوزګار - oozgáar
|
||||||
1527816489, // ایماندار - eemaandaar
|
1527816489, // ایماندار - eemaandaar
|
||||||
1527820433, // باتور - baatóor
|
1527820433, // باتور - baatóor
|
||||||
|
@ -23,14 +22,12 @@ export default [
|
||||||
1527812515, // بل - bul
|
1527812515, // بل - bul
|
||||||
1527815725, // بلد - balad
|
1527815725, // بلد - balad
|
||||||
1577301753727, // بند - band
|
1577301753727, // بند - band
|
||||||
1527812490, // بې کار - be kaar
|
|
||||||
1527812031, // بېل - bel
|
1527812031, // بېل - bel
|
||||||
1527815144, // پاک - paak
|
1527815144, // پاک - paak
|
||||||
1527815201, // پټ - puT
|
1527815201, // پټ - puT
|
||||||
1527815179, // پلن - plun
|
1527815179, // پلن - plun
|
||||||
1527819059, // پنډ - punD
|
1527819059, // پنډ - punD
|
||||||
1611767359178, // ترسناک - tarsnáak
|
1611767359178, // ترسناک - tarsnáak
|
||||||
1527813270, // تروش - troosh
|
|
||||||
1527813817, // تنګ - tang
|
1527813817, // تنګ - tang
|
||||||
1527816354, // تیار - tayaar
|
1527816354, // تیار - tayaar
|
||||||
1527817056, // تېز - tez
|
1527817056, // تېز - tez
|
||||||
|
@ -38,7 +35,6 @@ export default [
|
||||||
1527819864, // ټیټ - TeeT
|
1527819864, // ټیټ - TeeT
|
||||||
1527811894, // ټینګ - Teeng
|
1527811894, // ټینګ - Teeng
|
||||||
1527812943, // ثابت - saabit
|
1527812943, // ثابت - saabit
|
||||||
1527813085, // ثقیل - saqeel
|
|
||||||
1527820479, // جاهل - jaahíl
|
1527820479, // جاهل - jaahíl
|
||||||
1588160800930, // جراح - jarráah
|
1588160800930, // جراح - jarráah
|
||||||
1527812707, // جګ - jig, jug
|
1527812707, // جګ - jig, jug
|
||||||
|
@ -215,7 +211,6 @@ export default [
|
||||||
|
|
||||||
1527813115, // ادعا - idaa
|
1527813115, // ادعا - idaa
|
||||||
1527818119, // امسا - amsaa
|
1527818119, // امسا - amsaa
|
||||||
1527815043, // جزا - jazaa
|
|
||||||
1527819022, // څا - tsaa
|
1527819022, // څا - tsaa
|
||||||
1527814225, // خطا - khataa
|
1527814225, // خطا - khataa
|
||||||
1610797589510, // خلا - khaláa
|
1610797589510, // خلا - khaláa
|
||||||
|
@ -240,6 +235,16 @@ export default [
|
||||||
1610443988250, // وېشلتیا - weshiltyaa, weshiltiyaa
|
1610443988250, // وېشلتیا - weshiltyaa, weshiltiyaa
|
||||||
1527816806, // وینا - waynaa
|
1527816806, // وینا - waynaa
|
||||||
|
|
||||||
|
1527815163, // پیشو - peesho
|
||||||
|
1527822272, // باڼو - baaNoo
|
||||||
|
1527823587, // بازو - baazoo
|
||||||
|
1527813463, // چاقو - chaaqóo
|
||||||
|
1527821599, // پارو - paaróo
|
||||||
|
1596290955751, // تالو - taalóo
|
||||||
|
|
||||||
|
1674934574643, // ویډیو - weeDiyo
|
||||||
|
1566468038374, // بیزو - beezo
|
||||||
|
|
||||||
1527815197, // پښتون
|
1527815197, // پښتون
|
||||||
1527813148, // پروت
|
1527813148, // پروت
|
||||||
1574867531681, // پوخ
|
1574867531681, // پوخ
|
||||||
|
@ -278,6 +283,7 @@ export default [
|
||||||
1576113803291, // ووړ
|
1576113803291, // ووړ
|
||||||
1527819244, // کوربه
|
1527819244, // کوربه
|
||||||
1527812908, // مېلمه
|
1527812908, // مېلمه
|
||||||
|
1527813270, // تروش - troosh
|
||||||
|
|
||||||
1527814150, // لار - laar
|
1527814150, // لار - laar
|
||||||
1527815417, // ورځ - wradz
|
1527815417, // ورځ - wradz
|
||||||
|
@ -400,6 +406,12 @@ export default [
|
||||||
1527822208, // وطواط - watwáat
|
1527822208, // وطواط - watwáat
|
||||||
1527819571, // وهم - wáhum, wahm
|
1527819571, // وهم - wáhum, wahm
|
||||||
1527816332, // ویاړ - wyaaR
|
1527816332, // ویاړ - wyaaR
|
||||||
|
1527816747, // ډاکټر - DaakTár
|
||||||
|
1527812849, // لاس - laas
|
||||||
|
1527814158, // دوست - dost
|
||||||
|
1527815711, // مار - maar
|
||||||
|
1527820043, // چرګ - charg
|
||||||
|
1527815127, // نرس - nurs
|
||||||
|
|
||||||
1568926976497, // اکسرې - iksre
|
1568926976497, // اکسرې - iksre
|
||||||
1602179757779, // الف بې - alif be
|
1602179757779, // الف بې - alif be
|
||||||
|
@ -446,6 +458,7 @@ export default [
|
||||||
1527813462, // کیلي - keelee
|
1527813462, // کیلي - keelee
|
||||||
1527814492, // ګاوداري - gaawdaaree
|
1527814492, // ګاوداري - gaawdaaree
|
||||||
1610013679820, // ورورولي - wrorwalée
|
1610013679820, // ورورولي - wrorwalée
|
||||||
|
1527816247, // سختي - sakhtee
|
||||||
|
|
||||||
1527821971, // بن - bun
|
1527821971, // بن - bun
|
||||||
1527816397, // ترور - tror
|
1527816397, // ترور - tror
|
||||||
|
@ -492,6 +505,7 @@ export default [
|
||||||
1579041957559, // ندا - nadáa
|
1579041957559, // ندا - nadáa
|
||||||
1527816253, // نواسه - nawaasa
|
1527816253, // نواسه - nawaasa
|
||||||
1527819971, // والي - waalée
|
1527819971, // والي - waalée
|
||||||
|
1527812456, // اړتیا - aRtyaa
|
||||||
|
|
||||||
1573659054031, // ارتوالی - artwaaley, aratwaaley
|
1573659054031, // ارتوالی - artwaaley, aratwaaley
|
||||||
1527811890, // ازغی - azghey
|
1527811890, // ازغی - azghey
|
||||||
|
@ -629,7 +643,6 @@ export default [
|
||||||
1527820130, // پلوی - palawéy
|
1527820130, // پلوی - palawéy
|
||||||
1582390092514, // پورتنی - portinéy
|
1582390092514, // پورتنی - portinéy
|
||||||
1610617741649, // ځنډنی - dzanDanéy, dzanDunéy
|
1610617741649, // ځنډنی - dzanDanéy, dzanDunéy
|
||||||
1610793723568, // چېلی - cheléy
|
|
||||||
1527819362, // خوسی - khooséy
|
1527819362, // خوسی - khooséy
|
||||||
1590052667427, // درستی - drustéy, drastéy
|
1590052667427, // درستی - drustéy, drastéy
|
||||||
1527822854, // ړومبی - Roombéy
|
1527822854, // ړومبی - Roombéy
|
||||||
|
@ -654,6 +667,7 @@ export default [
|
||||||
1527821373, // هوسی - hoséy
|
1527821373, // هوسی - hoséy
|
||||||
1527813636, // وروستی - wroostéy
|
1527813636, // وروستی - wroostéy
|
||||||
1527815430, // یوازنی - yawaazunéy
|
1527815430, // یوازنی - yawaazunéy
|
||||||
|
1714029848228, // ایرانی - eeraanáy
|
||||||
|
|
||||||
1527817036, // astáazey
|
1527817036, // astáazey
|
||||||
1582853867682, // اوسېدونکی
|
1582853867682, // اوسېدونکی
|
||||||
|
@ -815,7 +829,6 @@ export default [
|
||||||
1527818255, // لېوه - lewú
|
1527818255, // لېوه - lewú
|
||||||
1527821522, // مریه - mrayú
|
1527821522, // مریه - mrayú
|
||||||
1527812911, // مېړه - meRu
|
1527812911, // مېړه - meRu
|
||||||
1527811626, // نکېده - nukedu
|
|
||||||
1527816410, // نیکه - neekú
|
1527816410, // نیکه - neekú
|
||||||
1527822420, // واګه - waagu
|
1527822420, // واګه - waagu
|
||||||
1527816357, // وراره - wraaru
|
1527816357, // وراره - wraaru
|
||||||
|
@ -823,6 +836,7 @@ export default [
|
||||||
1527814789, // وېښته - wextu
|
1527814789, // وېښته - wextu
|
||||||
1527815394, // واده - waadú
|
1527815394, // واده - waadú
|
||||||
|
|
||||||
|
1527823526, // قاضۍ - qaazúy
|
||||||
1527818017, // اټۍ - aTuy
|
1527818017, // اټۍ - aTuy
|
||||||
1527812694, // انجنۍ - injUnuy
|
1527812694, // انجنۍ - injUnuy
|
||||||
1527815140, // اونۍ - onuy, ownuy, owunuy
|
1527815140, // اونۍ - onuy, ownuy, owunuy
|
||||||
|
@ -852,7 +866,6 @@ export default [
|
||||||
1527812594, // ځای - dzaay
|
1527812594, // ځای - dzaay
|
||||||
1527812525, // چای - chaay
|
1527812525, // چای - chaay
|
||||||
1527812783, // خدای - khUdaay
|
1527812783, // خدای - khUdaay
|
||||||
1527819514, // دای - daay
|
|
||||||
1610797797756, // سای - saay
|
1610797797756, // سای - saay
|
||||||
1527822345, // سرای - saráay
|
1527822345, // سرای - saráay
|
||||||
1586598425514, // بوی - booy
|
1586598425514, // بوی - booy
|
||||||
|
|
|
@ -1597,10 +1597,10 @@
|
||||||
rambda "^6.7.0"
|
rambda "^6.7.0"
|
||||||
react-select "^5.2.2"
|
react-select "^5.2.2"
|
||||||
|
|
||||||
"@lingdocs/ps-react@^7.1.6":
|
"@lingdocs/ps-react@^7.1.7":
|
||||||
version "7.1.6"
|
version "7.1.7"
|
||||||
resolved "https://npm.lingdocs.com/@lingdocs/ps-react/-/ps-react-7.1.6.tgz#610f543e5a82acbdb346026ea0bceb4a78febf21"
|
resolved "https://npm.lingdocs.com/@lingdocs/ps-react/-/ps-react-7.1.7.tgz#69c552322919d16afb5f1635e2b928e38761fc5f"
|
||||||
integrity sha512-IQf3X5uBvBbuhE2Q3/66rU7bVOeSg81rdPvvYgNCWDFk0fAM5VqV7mJSpRkMBM3foV9rlNk6F0WkNqG/ngp6IQ==
|
integrity sha512-yMKzcKnBQUgOsMZLAVKhBjpG5QzGC5nBEixtpj4PRVtjIs34HqwdxDxWPA0/OYZVNUvFhFui4UM3oZ+T568k9Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formkit/auto-animate" "^1.0.0-beta.3"
|
"@formkit/auto-animate" "^1.0.0-beta.3"
|
||||||
classnames "^2.2.6"
|
classnames "^2.2.6"
|
||||||
|
|
Loading…
Reference in New Issue