different display (with all tenses listed) for chart mode in VPExplorer
This commit is contained in:
parent
e05d6f1111
commit
3eff2fbac0
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "pashto-inflector",
|
"name": "pashto-inflector",
|
||||||
"version": "5.0.12",
|
"version": "5.1.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "pashto-inflector",
|
"name": "pashto-inflector",
|
||||||
"version": "5.0.12",
|
"version": "5.1.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "pashto-inflector",
|
"name": "pashto-inflector",
|
||||||
"version": "5.0.12",
|
"version": "5.1.0",
|
||||||
"author": "lingdocs.com",
|
"author": "lingdocs.com",
|
||||||
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
||||||
"homepage": "https://verbs.lingdocs.com",
|
"homepage": "https://verbs.lingdocs.com",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@lingdocs/ps-react",
|
"name": "@lingdocs/ps-react",
|
||||||
"version": "5.0.12",
|
"version": "5.1.0",
|
||||||
"description": "Pashto inflector library module with React components",
|
"description": "Pashto inflector library module with React components",
|
||||||
"main": "dist/components/library.js",
|
"main": "dist/components/library.js",
|
||||||
"module": "dist/components/library.js",
|
"module": "dist/components/library.js",
|
||||||
|
|
|
@ -21,7 +21,7 @@ const defaultLevel = 4;
|
||||||
const indentAfterLevel = 5;
|
const indentAfterLevel = 5;
|
||||||
|
|
||||||
function Hider(props: {
|
function Hider(props: {
|
||||||
label: string,
|
label: string | JSX.Element,
|
||||||
showing: boolean,
|
showing: boolean,
|
||||||
aspect?: T.Aspect,
|
aspect?: T.Aspect,
|
||||||
handleChange: () => void,
|
handleChange: () => void,
|
||||||
|
@ -48,14 +48,16 @@ function Hider(props: {
|
||||||
extraMargin,
|
extraMargin,
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
<>
|
<div className="d-flex flex-row align-items-center">
|
||||||
{props.showing ? caretDown : caretRight}
|
{props.showing ? caretDown : caretRight}
|
||||||
{` `}
|
{` `}
|
||||||
{props.aspect
|
{props.aspect
|
||||||
? <i className={`fas fa-${props.aspect === "imperfective" ? "video" : "camera"} mr-2`} />
|
? <i className={`fas fa-${props.aspect === "imperfective" ? "video" : "camera"}`} />
|
||||||
: ""}
|
: ""}
|
||||||
|
<div className="ml-2">
|
||||||
{props.label}
|
{props.label}
|
||||||
</>,
|
</div>
|
||||||
|
</div>,
|
||||||
)}
|
)}
|
||||||
{props.showing && props.children}
|
{props.showing && props.children}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { abilityTenseOptions, imperativeTenseOptions, perfectTenseOptions, verbTenseOptions } from "./verbTenseOptions";
|
||||||
|
import ChartDisplay from "./VPChartDisplay";
|
||||||
|
import Hider from "../Hider";
|
||||||
|
import * as T from "../../../types";
|
||||||
|
import useStickyState from "../useStickyState";
|
||||||
|
import { isModalTense, isPerfectTense, isVerbTense } from "../../../lib/src/type-predicates";
|
||||||
|
|
||||||
|
function AllTensesDisplay({ VS, opts }: { VS: T.VerbSelection, opts: T.TextOptions }) {
|
||||||
|
const [showing, setShowing] = useStickyState<string[]>([], "tensesShowing");
|
||||||
|
const [showFormulas, setShowFormulas] = useStickyState<boolean>(false, "showFormulasWithCharts");
|
||||||
|
const adjustShowing = (v: string) => {
|
||||||
|
if (showing.includes(v)) {
|
||||||
|
setShowing(os => os.filter(x => x !== v));
|
||||||
|
} else {
|
||||||
|
setShowing(os => [v, ...os]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const options = VS.tenseCategory === "basic"
|
||||||
|
? verbTenseOptions
|
||||||
|
: VS.tenseCategory === "perfect"
|
||||||
|
? perfectTenseOptions
|
||||||
|
: VS.tenseCategory === "modal"
|
||||||
|
? abilityTenseOptions
|
||||||
|
: imperativeTenseOptions;
|
||||||
|
return <div>
|
||||||
|
<div className="clickable mb-2 small text-center" onClick={() => setShowFormulas(x => !x)}>
|
||||||
|
{!showFormulas ? "Show" : "Hide"} Formulas
|
||||||
|
</div>
|
||||||
|
{options.map((tense) => <div key={Math.random()}>
|
||||||
|
<Hider
|
||||||
|
label={tense.label}
|
||||||
|
showing={showing.includes(tense.value)}
|
||||||
|
handleChange={() => adjustShowing(tense.value)}
|
||||||
|
hLevel={5}
|
||||||
|
>
|
||||||
|
{showFormulas && <div className="mb-1">
|
||||||
|
<samp>🧪 {tense.formula}</samp>
|
||||||
|
</div>}
|
||||||
|
<ChartDisplay
|
||||||
|
VS={{
|
||||||
|
...VS,
|
||||||
|
[isVerbTense(tense.value)
|
||||||
|
? "verbTense"
|
||||||
|
: isPerfectTense(tense.value)
|
||||||
|
? "perfectTense"
|
||||||
|
: isModalTense(tense.value)
|
||||||
|
? "modalTense"
|
||||||
|
: "imperativeTense"
|
||||||
|
]: tense.value,
|
||||||
|
}}
|
||||||
|
opts={opts}
|
||||||
|
/>
|
||||||
|
</Hider>
|
||||||
|
</div>)}
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AllTensesDisplay;
|
|
@ -7,40 +7,7 @@ import { customStyles } from "../EntrySelect";
|
||||||
import {
|
import {
|
||||||
VpsReducerAction
|
VpsReducerAction
|
||||||
} from "../../../lib/src/phrase-building/vps-reducer";
|
} from "../../../lib/src/phrase-building/vps-reducer";
|
||||||
|
import { imperativeTenseOptions, perfectTenseOptions, verbTenseOptions } from "./verbTenseOptions";
|
||||||
const verbTenseOptions: { label: string | JSX.Element, value: T.VerbTense, formula: string }[] = [{
|
|
||||||
label: <div><i className="fas fa-video mr-2" />present</div>,
|
|
||||||
value: "presentVerb",
|
|
||||||
formula: "imperfective stem + present verb ending",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-camera mr-2" />subjunctive</div>,
|
|
||||||
value: "subjunctiveVerb",
|
|
||||||
formula: "perfective stem + present verb ending",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-video mr-2" />imperfective future</div>,
|
|
||||||
value: "imperfectiveFuture",
|
|
||||||
formula: "ba + present",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-camera mr-2" />perfective future</div>,
|
|
||||||
value: "perfectiveFuture",
|
|
||||||
formula: "ba + subjunctive",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-video mr-2" />continuous past</div>,
|
|
||||||
value: "imperfectivePast",
|
|
||||||
formula: "imperfective root + past verb ending",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-camera mr-2" />simple past</div>,
|
|
||||||
value: "perfectivePast",
|
|
||||||
formula: "perfective root + past verb ending",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-video mr-2" />habitual continual past</div>,
|
|
||||||
value: "habitualImperfectivePast",
|
|
||||||
formula: "ba + continuous past",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-camera mr-2" />habitual simple past</div>,
|
|
||||||
value: "habitualPerfectivePast",
|
|
||||||
formula: "ba + simple past",
|
|
||||||
}];
|
|
||||||
|
|
||||||
function composeFormula(formula: string, prefix: "passive" | "ability"): string {
|
function composeFormula(formula: string, prefix: "passive" | "ability"): string {
|
||||||
return formula.replace(/^perfective/, `${prefix} perfective`)
|
return formula.replace(/^perfective/, `${prefix} perfective`)
|
||||||
|
@ -52,50 +19,6 @@ function composeFormula(formula: string, prefix: "passive" | "ability"): string
|
||||||
.replace("past participle", `${prefix} past participle`);
|
.replace("past participle", `${prefix} past participle`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const perfectTenseOptions: { label: string | JSX.Element, value: T.PerfectTense, formula: string }[] = [{
|
|
||||||
label: "Present Perfect",
|
|
||||||
value: "presentPerfect",
|
|
||||||
formula: "past participle + present equative",
|
|
||||||
}, {
|
|
||||||
label: "Habitual Perfect",
|
|
||||||
value: "habitualPerfect",
|
|
||||||
formula: "past participle + habitual equative",
|
|
||||||
}, {
|
|
||||||
label: "Subjunctive Perfect",
|
|
||||||
value: "subjunctivePerfect",
|
|
||||||
formula: "past participle + subjunctive equative",
|
|
||||||
}, {
|
|
||||||
label: "Future Perfect",
|
|
||||||
value: "futurePerfect",
|
|
||||||
formula: "past participle + future equative",
|
|
||||||
}, {
|
|
||||||
label: "Past Perfect",
|
|
||||||
value: "pastPerfect",
|
|
||||||
formula: "past participle + past equative",
|
|
||||||
}, {
|
|
||||||
label: `"Would Be" Perfect`,
|
|
||||||
value: "wouldBePerfect",
|
|
||||||
formula: `past participle + "would be" equative`,
|
|
||||||
}, {
|
|
||||||
label: "Past Subjunctive Perfect",
|
|
||||||
value: "pastSubjunctivePerfect",
|
|
||||||
formula: "past participle + past subjunctive equative",
|
|
||||||
}, {
|
|
||||||
label: `"Would Have Been" Perfect`,
|
|
||||||
value: "wouldHaveBeenPerfect",
|
|
||||||
formula: `past participle + "would have been" equative`,
|
|
||||||
}];
|
|
||||||
|
|
||||||
const imperativeTenseOptions: { label: string | JSX.Element, value: T.ImperativeTense, formula: string }[] = [{
|
|
||||||
label: <div><i className="fas fa-video mr-2" />imperfective imperative</div>,
|
|
||||||
value: "imperfectiveImperative",
|
|
||||||
formula: "imperfective stem + imperative ending",
|
|
||||||
}, {
|
|
||||||
label: <div><i className="fas fa-camera mr-2" />perfective imperative</div>,
|
|
||||||
value: "perfectiveImperative",
|
|
||||||
formula: "perfective stem + imperative ending",
|
|
||||||
}];
|
|
||||||
|
|
||||||
export function getRandomTense(o?: T.PerfectTense | T.VerbTense | T.ModalTense | T.ImperativeTense): T.PerfectTense | T.VerbTense | T.ModalTense | T.ImperativeTense {
|
export function getRandomTense(o?: T.PerfectTense | T.VerbTense | T.ModalTense | T.ImperativeTense): T.PerfectTense | T.VerbTense | T.ModalTense | T.ImperativeTense {
|
||||||
let tns: T.PerfectTense | T.VerbTense | T.ModalTense | T.ImperativeTense;
|
let tns: T.PerfectTense | T.VerbTense | T.ModalTense | T.ImperativeTense;
|
||||||
const oldTenseCategory = !o
|
const oldTenseCategory = !o
|
||||||
|
@ -184,11 +107,18 @@ function TensePicker(props: ({
|
||||||
const showImperativeOption = ("vps" in props && props.vps.verb.voice === "active")
|
const showImperativeOption = ("vps" in props && props.vps.verb.voice === "active")
|
||||||
|| ("vpsComplete" in props && props.vpsComplete.verb.voice !== "active");
|
|| ("vpsComplete" in props && props.vpsComplete.verb.voice !== "active");
|
||||||
const inPassiveVoice = ("vps" in props && props.vps.verb.voice === "passive") || ("vpsComplete" in props && props.vpsComplete.verb.voice === "passive");;
|
const inPassiveVoice = ("vps" in props && props.vps.verb.voice === "passive") || ("vpsComplete" in props && props.vpsComplete.verb.voice === "passive");;
|
||||||
const canHaveFormula = "vps" in props && props.mode !== "quiz";
|
const inAllTensesMode = props.mode === "charts";
|
||||||
|
const canHaveFormula = "vps" in props
|
||||||
|
&& props.mode !== "quiz"
|
||||||
|
&& !inAllTensesMode;
|
||||||
return <div>
|
return <div>
|
||||||
<div style={{ maxWidth: "300px", minWidth: "250px", margin: "0 auto" }}>
|
<div style={{ maxWidth: "300px", minWidth: "250px", margin: "0 auto" }}>
|
||||||
<div className="d-flex flex-row justify-content-between align-items-center">
|
<div className="d-flex flex-row justify-content-between align-items-center">
|
||||||
<div className="h5">Verb Tense:</div>
|
<div className="h5">
|
||||||
|
{props.mode === "charts"
|
||||||
|
? "Tense Category:"
|
||||||
|
: "Verb Tense:"}
|
||||||
|
</div>
|
||||||
{canHaveFormula && <div className="clickable mb-2 small" onClick={() => setShowFormula(x => !x)}>
|
{canHaveFormula && <div className="clickable mb-2 small" onClick={() => setShowFormula(x => !x)}>
|
||||||
🧪 {!showFormula ? "Show" : "Hide"} Formula
|
🧪 {!showFormula ? "Show" : "Hide"} Formula
|
||||||
</div>}
|
</div>}
|
||||||
|
@ -230,7 +160,7 @@ function TensePicker(props: ({
|
||||||
{[...verbTenseOptions, ...perfectTenseOptions, ...imperativeTenseOptions].find(o => o.value === props.vpsComplete.verb.tense)?.label}
|
{[...verbTenseOptions, ...perfectTenseOptions, ...imperativeTenseOptions].find(o => o.value === props.vpsComplete.verb.tense)?.label}
|
||||||
</div>
|
</div>
|
||||||
: <>
|
: <>
|
||||||
<Select
|
{!inAllTensesMode && <Select
|
||||||
isSearchable={false}
|
isSearchable={false}
|
||||||
// for some reason can't use tOptions with find here;
|
// for some reason can't use tOptions with find here;
|
||||||
value={props.vps.verb && ([...verbTenseOptions, ...perfectTenseOptions, ...imperativeTenseOptions].find(o => o.value === props.vps.verb[
|
value={props.vps.verb && ([...verbTenseOptions, ...perfectTenseOptions, ...imperativeTenseOptions].find(o => o.value === props.vps.verb[
|
||||||
|
@ -245,12 +175,24 @@ function TensePicker(props: ({
|
||||||
className="mb-2"
|
className="mb-2"
|
||||||
options={tOptions}
|
options={tOptions}
|
||||||
styles={customStyles}
|
styles={customStyles}
|
||||||
/>
|
/>}
|
||||||
</>}
|
</>}
|
||||||
{"vps" in props && props.vps.verb && (props.mode !== "quiz") && <div className="d-flex flex-row justify-content-between align-items-center mt-2 mb-1" style={{ width: "100%" }}>
|
{"vps" in props && props.vps.verb && (props.mode !== "quiz") && <div className="d-flex flex-row justify-content-between align-items-center mt-2 mb-1" style={{ width: "100%" }}>
|
||||||
<div className="btn btn-light clickable" onClick={moveTense("back")}>
|
{!inAllTensesMode ? <div className="btn btn-light clickable" onClick={moveTense("back")}>
|
||||||
<i className="fas fa-chevron-left" />
|
<i className="fas fa-chevron-left" />
|
||||||
</div>
|
</div> : <div />}
|
||||||
|
{/* {props.mode === "charts" && <ButtonSelect
|
||||||
|
small
|
||||||
|
value={props.chartMode}
|
||||||
|
options={[{
|
||||||
|
label: "all",
|
||||||
|
value: "allTenses",
|
||||||
|
}, {
|
||||||
|
label: "one",
|
||||||
|
value: "oneTense",
|
||||||
|
}]}
|
||||||
|
handleChange={props.onChartModeChange}
|
||||||
|
/>} */}
|
||||||
{props.mode === "phrases" && <ButtonSelect
|
{props.mode === "phrases" && <ButtonSelect
|
||||||
small
|
small
|
||||||
value={props.vps.verb.negative.toString() as "true" | "false"}
|
value={props.vps.verb.negative.toString() as "true" | "false"}
|
||||||
|
@ -263,9 +205,9 @@ function TensePicker(props: ({
|
||||||
}]}
|
}]}
|
||||||
handleChange={onPosNegSelect}
|
handleChange={onPosNegSelect}
|
||||||
/>}
|
/>}
|
||||||
<div onClick={moveTense("forward")} className="btn btn-light clickable">
|
{!inAllTensesMode ? <div onClick={moveTense("forward")} className="btn btn-light clickable">
|
||||||
<i className="fas fa-chevron-right" />
|
<i className="fas fa-chevron-right" />
|
||||||
</div>
|
</div> : <div />}
|
||||||
</div>}
|
</div>}
|
||||||
{(canHaveFormula && showFormula) && (() => {
|
{(canHaveFormula && showFormula) && (() => {
|
||||||
// TODO: Be able to show modal formulas too
|
// TODO: Be able to show modal formulas too
|
||||||
|
|
|
@ -3,7 +3,6 @@ import TensePicker from "./TensePicker";
|
||||||
import VPDisplay from "./VPDisplay";
|
import VPDisplay from "./VPDisplay";
|
||||||
import ButtonSelect from "../ButtonSelect";
|
import ButtonSelect from "../ButtonSelect";
|
||||||
import * as T from "../../../types";
|
import * as T from "../../../types";
|
||||||
import ChartDisplay from "./VPChartDisplay";
|
|
||||||
import useStickyState, { useStickyReducer } from "../useStickyState";
|
import useStickyState, { useStickyReducer } from "../useStickyState";
|
||||||
import { makeVPSelectionState } from "../../../lib/src/phrase-building/verb-selection";
|
import { makeVPSelectionState } from "../../../lib/src/phrase-building/verb-selection";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
@ -14,6 +13,7 @@ import LZString from "lz-string";
|
||||||
import { vpsReducer } from "../../../lib/src/phrase-building/vps-reducer";
|
import { vpsReducer } from "../../../lib/src/phrase-building/vps-reducer";
|
||||||
import { getObjectSelection } from "../../../lib/src/phrase-building/blocks-utils";
|
import { getObjectSelection } from "../../../lib/src/phrase-building/blocks-utils";
|
||||||
import VPPicker from "./VPPicker";
|
import VPPicker from "./VPPicker";
|
||||||
|
import AllTensesDisplay from "./AllTensesDisplay";
|
||||||
|
|
||||||
export const vpPhraseURLParam = "vp";
|
export const vpPhraseURLParam = "vp";
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ function VPExplorer(props: {
|
||||||
opts={props.opts}
|
opts={props.opts}
|
||||||
setForm={handleSetForm}
|
setForm={handleSetForm}
|
||||||
/>}
|
/>}
|
||||||
{mode === "charts" && <ChartDisplay VS={vps.verb} opts={props.opts} />}
|
{mode === "charts" && <AllTensesDisplay VS={vps.verb} opts={props.opts} />}
|
||||||
{mode === "quiz" && <VPExplorerQuiz opts={props.opts} vps={vps} />}
|
{mode === "quiz" && <VPExplorerQuiz opts={props.opts} vps={vps} />}
|
||||||
{showClipped && <div className="alert alert-primary text-center" role="alert" style={{
|
{showClipped && <div className="alert alert-primary text-center" role="alert" style={{
|
||||||
position: "fixed",
|
position: "fixed",
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
import * as T from "../../../types";
|
||||||
|
|
||||||
|
export const verbTenseOptions: { label: string | JSX.Element, value: T.VerbTense, formula: string }[] = [{
|
||||||
|
label: <div><i className="fas fa-video mr-2" />present</div>,
|
||||||
|
value: "presentVerb",
|
||||||
|
formula: "imperfective stem + present verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />subjunctive</div>,
|
||||||
|
value: "subjunctiveVerb",
|
||||||
|
formula: "perfective stem + present verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-video mr-2" />imperfective future</div>,
|
||||||
|
value: "imperfectiveFuture",
|
||||||
|
formula: "ba + present",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />perfective future</div>,
|
||||||
|
value: "perfectiveFuture",
|
||||||
|
formula: "ba + subjunctive",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-video mr-2" />continuous past</div>,
|
||||||
|
value: "imperfectivePast",
|
||||||
|
formula: "imperfective root + past verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />simple past</div>,
|
||||||
|
value: "perfectivePast",
|
||||||
|
formula: "perfective root + past verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-video mr-2" />habitual continual past</div>,
|
||||||
|
value: "habitualImperfectivePast",
|
||||||
|
formula: "ba + continuous past",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />habitual simple past</div>,
|
||||||
|
value: "habitualPerfectivePast",
|
||||||
|
formula: "ba + simple past",
|
||||||
|
}];
|
||||||
|
|
||||||
|
export const abilityTenseOptions: { label: string | JSX.Element, value: T.VerbTense, formula: string }[] = [{
|
||||||
|
label: <div><i className="fas fa-video mr-2" />present ability</div>,
|
||||||
|
value: "presentVerb",
|
||||||
|
formula: "ability imperfective stem + present verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />subjunctive ability</div>,
|
||||||
|
value: "subjunctiveVerb",
|
||||||
|
formula: "ability perfective stem + present verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-video mr-2" />imperfective future ability</div>,
|
||||||
|
value: "imperfectiveFuture",
|
||||||
|
formula: "ba + present ability",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />perfective future ability</div>,
|
||||||
|
value: "perfectiveFuture",
|
||||||
|
formula: "ba + subjunctive ability",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-video mr-2" />continuous past ability</div>,
|
||||||
|
value: "imperfectivePast",
|
||||||
|
formula: "ability imperfective root + past verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />simple past ability</div>,
|
||||||
|
value: "perfectivePast",
|
||||||
|
formula: "ability perfective root + past verb ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-video mr-2" />habitual continual past ability</div>,
|
||||||
|
value: "habitualImperfectivePast",
|
||||||
|
formula: "ba + continuous past ability",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />habitual simple past ability</div>,
|
||||||
|
value: "habitualPerfectivePast",
|
||||||
|
formula: "ba + simple past ability",
|
||||||
|
}];
|
||||||
|
|
||||||
|
export const perfectTenseOptions: { label: string | JSX.Element, value: T.PerfectTense, formula: string }[] = [{
|
||||||
|
label: "Present Perfect",
|
||||||
|
value: "presentPerfect",
|
||||||
|
formula: "past participle + present equative",
|
||||||
|
}, {
|
||||||
|
label: "Habitual Perfect",
|
||||||
|
value: "habitualPerfect",
|
||||||
|
formula: "past participle + habitual equative",
|
||||||
|
}, {
|
||||||
|
label: "Subjunctive Perfect",
|
||||||
|
value: "subjunctivePerfect",
|
||||||
|
formula: "past participle + subjunctive equative",
|
||||||
|
}, {
|
||||||
|
label: "Future Perfect",
|
||||||
|
value: "futurePerfect",
|
||||||
|
formula: "past participle + future equative",
|
||||||
|
}, {
|
||||||
|
label: "Past Perfect",
|
||||||
|
value: "pastPerfect",
|
||||||
|
formula: "past participle + past equative",
|
||||||
|
}, {
|
||||||
|
label: `"Would Be" Perfect`,
|
||||||
|
value: "wouldBePerfect",
|
||||||
|
formula: `past participle + "would be" equative`,
|
||||||
|
}, {
|
||||||
|
label: "Past Subjunctive Perfect",
|
||||||
|
value: "pastSubjunctivePerfect",
|
||||||
|
formula: "past participle + past subjunctive equative",
|
||||||
|
}, {
|
||||||
|
label: `"Would Have Been" Perfect`,
|
||||||
|
value: "wouldHaveBeenPerfect",
|
||||||
|
formula: `past participle + "would have been" equative`,
|
||||||
|
}];
|
||||||
|
|
||||||
|
export const imperativeTenseOptions: { label: string | JSX.Element, value: T.ImperativeTense, formula: string }[] = [{
|
||||||
|
label: <div><i className="fas fa-video mr-2" />imperfective imperative</div>,
|
||||||
|
value: "imperfectiveImperative",
|
||||||
|
formula: "imperfective stem + imperative ending",
|
||||||
|
}, {
|
||||||
|
label: <div><i className="fas fa-camera mr-2" />perfective imperative</div>,
|
||||||
|
value: "perfectiveImperative",
|
||||||
|
formula: "perfective stem + imperative ending",
|
||||||
|
}];
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@lingdocs/inflect",
|
"name": "@lingdocs/inflect",
|
||||||
"version": "5.0.12",
|
"version": "5.1.0",
|
||||||
"description": "Pashto inflector library",
|
"description": "Pashto inflector library",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/lib/library.d.ts",
|
"types": "dist/lib/library.d.ts",
|
||||||
|
|
Loading…
Reference in New Issue