StaticDEFAULT_StaticPARTSStaticTABSStaticTEMPLATE_Mirror of the modification field combobox for appendKeywords rows. Selecting an option writes the rule's field via partial update; free-typed values are caught by the parent change listener.
Build the keyword option list — one entry per keyword Item in the world,
{ key, label } where key is system.key (the canonical short identifier)
and label is the item name.
Build template context data for the triggers tab.
Add a visible "Make Stackable" header-bar button (next to the close button) on base-type AEs. Mirrors the pattern actor-sheet.mjs uses for Rest / Apply Damage / Apply Restore — direct DOM injection into the window controls strip rather than the auto-generated kebab submenu.
Static_Static_Static_Open Foundry's native AmbientLightConfig sheet (full Light tab UI) on a non-embedded AmbientLightDocument seeded with the AE's auraLightConfig. On submit, write the edited config back to system.auraLightConfig instead of trying to persist the temp light document.
Static_Static_Static_Convert this AE from "base" to "stackable". Foundry treats Document type as
effectively immutable post-create, so we copy → delete → recreate with the new
type. Stack-specific fields default in via their schema initials. The new AE
gets a new _id (callers should re-target if they were holding a UUID).
Static_Process form submission — handles simple fields and changes array. Trigger fields are handled by change listeners and action handlers.
AppV2 sheet for ActiveEffects with trigger support. Handles triggers via manual array updates (not submitOnChange) because Foundry's ArrayField doesn't support partial dot-notation updates.