import Component from "@glimmer/component"; import { tracked } from "@glimmer/tracking"; import { on } from "@ember/modifier"; import { action } from "@ember/object"; import { service } from "@ember/service"; import DButton from "discourse/components/d-button"; import htmlClass from "discourse/helpers/html-class"; import getURL from "discourse-common/lib/get-url"; export default class AiArtifactComponent extends Component { @service siteSettings; @tracked expanded = false; @tracked showingArtifact = false; constructor() { super(...arguments); this.keydownHandler = this.handleKeydown.bind(this); } willDestroy() { super.willDestroy(...arguments); window.removeEventListener("keydown", this.keydownHandler); } @action handleKeydown(event) { if (event.key === "Escape" || event.key === "Esc") { this.expanded = false; } } get requireClickToRun() { if (this.showingArtifact) { return false; } return this.siteSettings.ai_artifact_security === "strict"; } get artifactUrl() { let url = getURL(`/discourse-ai/ai-bot/artifacts/${this.args.artifactId}`); if (this.args.artifactVersion) { url = `${url}/${this.args.artifactVersion}`; } return url; } @action showArtifact() { this.showingArtifact = true; } @action toggleView() { this.expanded = !this.expanded; if (this.expanded) { window.addEventListener("keydown", this.keydownHandler); } else { window.removeEventListener("keydown", this.keydownHandler); } } get wrapperClasses() { return `ai-artifact__wrapper ${ this.expanded ? "ai-artifact__expanded" : "" }`; } @action artifactPanelHover() { // retrrigger animation const panel = document.querySelector(".ai-artifact__panel"); panel.style.animation = "none"; // Stop the animation setTimeout(() => { panel.style.animation = ""; // Re-trigger the animation by removing the none style }, 0); } }