+ {vps.blocks.map(({ block, key }, i, blocks) => {
+ if (isNoObject(block)) return null;
+ return
+
+ {(i > 0 && !isNoObject(blocks[i - 1].block)) ?
adjustVps({ type: "shift block", payload: { index: i, direction: "back" }})}
+ >
+
+
:
}
+ {(i < vps.blocks.length - 1 && !isNoObject(blocks[i + 1].block)) ?
adjustVps({ type: "shift block", payload: { index: i, direction: "forward" }})}
+ >
+
+
:
}
+
+ {(!block || block.type === "AP")
+ ?
adjustVps({ type: "set AP", payload: { index: i, AP } })}
+ onRemove={() => adjustVps({ type: "remove AP", payload: i })}
+ />
+ : (block?.type === "subjectSelection")
+ ? setShowingExplanation({ role: "king", item: "subject" })}>Subject {roleIcon.king}
+ :
+ Subject
+ {` `}
+ setShowingExplanation({ role: "servant", item: "subject" })}>{roleIcon.servant}
+ {` `}
+ {(rendered && rendered.whatsAdjustable !== "king") &&
+ adjustVps({ type: "toggle servant shrink" })} className="mx-2 clickable">
+ {!servantIsShrunk ? "🪄" : "👶"}
+
+ }
+
}
+ entryFeeder={entryFeeder}
+ np={block.selection}
+ counterPart={vps.verb ? object : undefined}
+ role={(isPast && vps.verb.transitivity !== "intransitive")
+ ? "ergative"
+ : "subject"
+ }
+ onChange={handleSubjectChange}
+ opts={opts}
+ isShrunk={(servantIsShrunk && roles.servant === "subject")}
+ />
+ : (vps.verb && block?.type === "objectSelection" && block.selection !== "none")
+ ?
+ {(typeof block.selection === "number")
+ ?
+ {roles.king === "object"
+ ?
setShowingExplanation({ role: "king", item: "object" })}>Object {roleIcon.king}
+ :
Object
}
+
Unspoken 3rd Pers. Masc. Plur.
+
+ :
setShowingExplanation({ role: "king", item: "object" })}>Object {roleIcon.king}
+ :
+ Object
+ {` `}
+ setShowingExplanation({ role: "servant", item: "object" })}>{roleIcon.servant}
+ {` `}
+ {(rendered && rendered.whatsAdjustable !== "king") &&
+ adjustVps({ type: "toggle servant shrink" })} className="mx-2 clickable">
+ {!servantIsShrunk ? "🪄" : "👶"}
+
+ }
+
}
+ entryFeeder={entryFeeder}
+ role="object"
+ np={block.selection}
+ counterPart={subject}
+ onChange={handleObjectChange}
+ opts={opts}
+ isShrunk={(servantIsShrunk && roles.servant === "object")}
+ />}
+