Adds ability to gate topics by group membership. Shows separate subheading text and has input for a custom CTA button link.
Group gating can work independently of the category and tag gating, or in conjunction.
What is the problem?
Discourse core PR #36678 changes `topic.tags` from a string array
(e.g., `["support", "bug"]`) to an object array (e.g.,
`[{id: 12, name: "support", slug: "support"}]`). This breaks the
`TopicInGatedCategory#recalculate` method which checks if topic tags
include enabled tags using `this.enabledTags.includes(t)`.
What is the solution?
Update the gated tag checking logic to extract the tag name using
`typeof t === "string" ? t : t.name` before comparing against
`this.enabledTags`. This ensures backward compatibility with both
the old string format and the new object format.