_dispatchModelValueChangedEvent(...args) {
      /** @event model-value-changed */
      this.dispatchEvent(
        /** @privateEvent model-value-changed: FormControl redispatches it as public event */
        new CustomEvent('model-value-changed', {
          bubbles: true,
          detail: /** @type { ModelValueEventDetails } */ (
            /** @type {unknown} */ ({
              formPath: [this],
              isTriggeredByUser: Boolean(this._isHandlingUserInput),
            })
          ),
        }),
      );
    }
This is wrapped in a distinct method, so that parents can control when the changed event
is fired. For objects, a deep comparison might be needed.
@param {{ modelValue: unknown; }[]} args
@protected