@testgorilla/tgo-ui 8.5.0 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/prompt/index.d.ts +18 -4
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +31 -8
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
- package/mcp/catalog.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-write-with-ai.mjs","sources":["../../../components/write-with-ai/llm.service.ts","../../../components/write-with-ai/write-with-ai.component.ts","../../../components/write-with-ai/write-with-ai.component.html","../../../components/write-with-ai/write-with-ai.module.ts","../../../components/write-with-ai/testgorilla-tgo-ui-components-write-with-ai.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable, of, delay, map } from 'rxjs';\nimport { WriteWithAiLlmConfig } from './write-with-ai.model';\n\nexport interface LlmRequest {\n sourceText: string;\n prompt: string;\n context?: string;\n}\n\ninterface OpenAiChatResponse {\n choices: { message: { content: string } }[];\n}\n\ninterface GeminiResponse {\n candidates: { content: { parts: { text: string }[] } }[];\n}\n\nconst OPENAI_DEFAULT_ENDPOINT = 'https://api.openai.com/v1/chat/completions';\nconst OPENAI_DEFAULT_MODEL = 'gpt-5-mini';\nconst GEMINI_DEFAULT_MODEL = 'gemini-3.0-flash';\n\n@Injectable({ providedIn: 'root' })\nexport class WriteWithAiLlmService {\n constructor(private readonly http: HttpClient) {}\n\n generate(request: LlmRequest, config: WriteWithAiLlmConfig): Observable<string> {\n if (!config.apiKey) {\n return this.simulateResponse(request, config);\n }\n\n if (config.provider === 'gemini') {\n return this.callGemini(request, config);\n }\n\n return this.callOpenAi(request, config);\n }\n\n private resolveEndpoint(config: WriteWithAiLlmConfig): string {\n return config.endpoint ?? config.baseUrl ?? OPENAI_DEFAULT_ENDPOINT;\n }\n\n private callOpenAi(request: LlmRequest, config: WriteWithAiLlmConfig): Observable<string> {\n const endpoint = this.resolveEndpoint(config);\n const model = config.model ?? OPENAI_DEFAULT_MODEL;\n const systemMessage = this.buildSystemMessage(request.sourceText, request.context ?? config.context);\n\n const body = {\n model,\n messages: [\n { role: 'system', content: systemMessage },\n { role: 'user', content: request.prompt },\n ],\n };\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n });\n\n return this.http\n .post<OpenAiChatResponse>(endpoint, body, { headers })\n .pipe(map(res => res.choices[0]?.message?.content ?? ''));\n }\n\n private callGemini(request: LlmRequest, config: WriteWithAiLlmConfig): Observable<string> {\n const model = config.model ?? GEMINI_DEFAULT_MODEL;\n const baseUrl =\n config.endpoint ??\n config.baseUrl ??\n `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent`;\n const systemMessage = this.buildSystemMessage(request.sourceText, request.context ?? config.context);\n\n const body = {\n system_instruction: { parts: [{ text: systemMessage }] },\n contents: [{ role: 'user', parts: [{ text: request.prompt }] }],\n };\n\n const apiKey = config.apiKey;\n if (!apiKey) {\n return this.simulateResponse(request, config);\n }\n\n const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\n const params = new HttpParams().set('key', apiKey);\n\n return this.http\n .post<GeminiResponse>(baseUrl, body, { headers, params })\n .pipe(map(res => res.candidates?.[0]?.content?.parts?.[0]?.text ?? ''));\n }\n\n private simulateResponse(request: LlmRequest, _config: WriteWithAiLlmConfig): Observable<string> {\n const source = request.sourceText?.trim();\n const prompt = request.prompt?.trim();\n\n let response: string;\n\n if (source && prompt) {\n const truncated = source.length > 200 ? `${source.substring(0, 200)}…` : source;\n response =\n `Based on the following text:\\n\\n\"${truncated}\"\\n\\n` +\n `Here is the result for \"${prompt}\":\\n\\n${this.generatePlaceholderContent(prompt, source)}`;\n } else if (prompt) {\n response = this.generatePlaceholderContent(prompt, '');\n } else {\n response = 'Please provide a prompt describing what you would like me to write.';\n }\n\n return of(response).pipe(delay(1200));\n }\n\n private generatePlaceholderContent(prompt: string, source: string): string {\n const lower = prompt.toLowerCase();\n\n if (lower.includes('shorter') || lower.includes('concise') || lower.includes('summarize')) {\n const sentences = source.split(/[.!?]+/).filter(s => s.trim());\n if (sentences.length > 1) {\n return `${sentences\n .slice(0, Math.ceil(sentences.length / 2))\n .join('. ')\n .trim()}.`;\n }\n return `${source.substring(0, Math.ceil(source.length * 0.6)).trim()}…`;\n }\n\n if (lower.includes('formal') || lower.includes('professional') || lower.includes('tone')) {\n return `Dear Recipient,\\n\\nI hope this message finds you well. ${source || 'I am writing to follow up on our recent discussion.'}\\n\\nPlease do not hesitate to reach out should you require further information.\\n\\nBest regards`;\n }\n\n if (lower.includes('email') || lower.includes('draft') || lower.includes('write')) {\n return `Subject: Follow-up\\n\\nHi there,\\n\\n${source || 'Thank you for your time. I wanted to reach out regarding the next steps.'}\\n\\nLooking forward to hearing from you.\\n\\nBest regards`;\n }\n\n return `[Simulated LLM response]\\n\\nPrompt: ${prompt}\\n\\nThis is a simulated response. To enable real LLM calls, provide an apiKey in the llmConfig input. The service supports OpenAI-compatible and Gemini endpoints.`;\n }\n\n private buildSystemMessage(sourceText: string, context?: string): string {\n const parts: string[] = [];\n\n if (context) {\n parts.push(context);\n }\n\n if (sourceText) {\n parts.push(`The user is working with the following source text:\\n\\n\"\"\"${sourceText}\"\"\"`);\n }\n\n parts.push('Respond with only the requested content. Do not include explanations or preamble.');\n\n return parts.join('\\n\\n');\n }\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n OnInit,\n untracked,\n} from '@angular/core';\nimport { AsyncPipe } from '@angular/common';\nimport { FormsModule, NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest, map, Subject, takeUntil } from 'rxjs';\nimport { PromptData, PromptTag, PromptModule } from '@testgorilla/tgo-ui/components/prompt';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { AiCaveatComponentModule } from '@testgorilla/tgo-ui/components/ai-caveat';\nimport { AlertBannerComponentModule, AlertBannerAction } from '@testgorilla/tgo-ui/components/alert-banner';\nimport { AlertBarType, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { TagComponentModule } from '@testgorilla/tgo-ui/components/tag';\nimport {\n WriteWithAiStatus,\n WriteWithAiTagOption,\n WriteWithAiLlmConfig,\n WriteWithAiSubmitEvent,\n} from './write-with-ai.model';\nimport { WriteWithAiLlmService } from './llm.service';\n\ninterface StatusConfig {\n variant: 'loading' | 'success' | 'error';\n alertType: AlertBarType;\n messageKey: string;\n actions: AlertBannerAction[];\n}\n\n@Component({\n selector: 'ui-write-with-ai',\n templateUrl: './write-with-ai.component.html',\n styleUrl: './write-with-ai.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: block' },\n providers: [\n UiTranslatePipe,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WriteWithAiComponent),\n multi: true,\n },\n ],\n imports: [\n AsyncPipe,\n FormsModule,\n FieldComponentModule,\n ButtonComponentModule,\n IconComponentModule,\n PromptModule,\n AiCaveatComponentModule,\n AlertBannerComponentModule,\n TagComponentModule,\n UiTranslatePipe,\n ],\n})\nexport class WriteWithAiComponent implements OnInit, ControlValueAccessor {\n readonly value = input('');\n readonly standalone = input(false);\n readonly defaultOpen = input(false);\n readonly fieldLabel = input('');\n readonly header = input('');\n readonly placeholder = input('');\n readonly promptValue = input('');\n readonly tags = input<WriteWithAiTagOption[]>([]);\n readonly status = input<WriteWithAiStatus>('idle');\n readonly subheader = input<string | undefined>(undefined);\n readonly llmConfig = input<WriteWithAiLlmConfig | undefined>(undefined);\n\n /** Layout: make the inner field stretch to fill its container height. */\n readonly fullHeight = input(false);\n\n /** Layout: render the inner field without a visible border. */\n readonly borderless = input(false);\n\n /**\n * When true, hides the free-text `ui-prompt` and renders the `tags` chips on their own.\n * Clicking a chip submits its label as the prompt via `promptSubmit`.\n * Use this when the host backend only accepts a constrained set of prompts (e.g. an enum).\n */\n readonly tagsOnly = input(false, { transform: booleanAttribute });\n\n /** Opaque host metadata emitted with promptSubmit for backend integrations. */\n readonly metadata = input<Record<string, unknown>>({});\n\n readonly valueChange = output<string>();\n readonly promptChange = output<string>();\n readonly promptSubmit = output<WriteWithAiSubmitEvent>();\n readonly cancelPending = output<void>();\n readonly acceptResult = output<void>();\n readonly requestRefine = output<void>();\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly llmService = inject(WriteWithAiLlmService);\n private readonly uiTranslate = inject(UiTranslatePipe);\n private readonly promptModel = signal('');\n private readonly isPanelManuallyOpen = signal(false);\n private readonly internalStatus = signal<WriteWithAiStatus>('idle');\n private readonly internalValue = signal('');\n private readonly cancelRequest$ = new Subject<void>();\n\n /** ControlValueAccessor: whether the form control is disabled. */\n readonly cvaDisabled = signal(false);\n\n /** Tag carousel (tagsOnly mode): scroll container + arrow-enabled state. */\n private readonly tagsScrollRef = viewChild<ElementRef<HTMLDivElement>>('tagsScrollContainer');\n readonly canScrollTagsLeft = signal(false);\n readonly canScrollTagsRight = signal(false);\n\n /** ControlValueAccessor callbacks. */\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly translationContext = 'WRITE_WITH_AI.';\n\n private readonly labels = toSignal(\n combineLatest([\n this.uiTranslate.transform(`${this.translationContext}CANCEL`),\n this.uiTranslate.transform(`${this.translationContext}ACCEPT`),\n this.uiTranslate.transform(`${this.translationContext}MAKE_CHANGES`),\n this.uiTranslate.transform(`${this.translationContext}TRY_AGAIN`),\n ]).pipe(map(([cancel, accept, makeChanges, tryAgain]) => ({ cancel, accept, makeChanges, tryAgain }))),\n { initialValue: { cancel: '', accept: '', makeChanges: '', tryAgain: '' } }\n );\n\n readonly isDefaultMode = computed(() => this.llmConfig()?.default === true);\n\n readonly effectiveStatus = computed(() => (this.isDefaultMode() ? this.internalStatus() : this.status()));\n\n readonly effectiveValue = computed(() => (this.isDefaultMode() ? this.internalValue() : this.value()));\n\n readonly isPanelVisible = computed(() => this.standalone() || this.isPanelManuallyOpen());\n\n readonly promptTags = computed<PromptTag[]>(() =>\n this.tags().map(tag => ({ id: tag.id, label: tag.label, autocomplete: tag.description ?? '' }))\n );\n\n readonly statusConfig = computed<StatusConfig | null>(() => {\n const l = this.labels();\n switch (this.effectiveStatus()) {\n case 'loading':\n return {\n variant: 'loading',\n alertType: 'info',\n messageKey: `${this.translationContext}WRITING`,\n actions: [{ label: l.cancel, onClick: () => this.handleCancel() }],\n };\n case 'success':\n return {\n variant: 'success',\n alertType: 'success',\n messageKey: `${this.translationContext}CONTENT_GENERATED`,\n actions: [\n { label: l.accept, onClick: () => this.handleAccept() },\n { label: l.makeChanges, onClick: () => this.handleRefine() },\n ],\n };\n case 'error':\n return {\n variant: 'error',\n alertType: 'error',\n messageKey: `${this.translationContext}ERROR_MESSAGE`,\n actions: [{ label: l.tryAgain, onClick: () => this.handleRefine() }],\n };\n default:\n return null;\n }\n });\n\n constructor() {\n effect(() => {\n const promptValue = this.promptValue();\n const isDefault = this.isDefaultMode();\n if (!isDefault) {\n untracked(() => this.promptModel.set(promptValue));\n }\n });\n\n effect(() => {\n const value = this.value();\n const isDefault = this.isDefaultMode();\n if (isDefault) {\n untracked(() => this.internalValue.set(value));\n }\n });\n\n // Scroll events don't trigger change detection, so the arrow disabled-state\n // is kept in signals. This re-measures whenever the carousel (re)mounts or\n // the tag set changes; runtime scrolling is handled by the (scroll) listener.\n // It only reads layout, so it runs in the dedicated `read` phase.\n afterRenderEffect({\n read: () => {\n this.tags();\n const el = this.tagsScrollRef()?.nativeElement;\n if (el) {\n this.measureTagScroll(el);\n }\n },\n });\n\n // Resizing the host can change overflow without a scroll or tag-set change,\n // so observe the carousel and re-measure when its box changes.\n effect(onCleanup => {\n const el = this.tagsScrollRef()?.nativeElement;\n if (!el || typeof ResizeObserver === 'undefined') {\n return;\n }\n const observer = new ResizeObserver(() => this.measureTagScroll(el));\n observer.observe(el);\n onCleanup(() => observer.disconnect());\n });\n }\n\n readonly promptModelData = computed<PromptData>(() => ({ text: this.promptModel(), files: [] }));\n\n handlePromptModelChange(value: PromptData | string): void {\n const text = typeof value === 'string' ? value : (value?.text ?? '');\n this.promptModel.set(text);\n this.promptChange.emit(text);\n }\n\n ngOnInit() {\n if (this.defaultOpen()) {\n this.isPanelManuallyOpen.set(true);\n }\n }\n\n togglePanel(): void {\n if (this.standalone()) {\n return;\n }\n this.isPanelManuallyOpen.update(current => !current);\n }\n\n handleValueInput(value: string): void {\n if (this.isDefaultMode()) {\n this.internalValue.set(value);\n }\n this.valueChange.emit(value);\n this.onChange(value);\n this.onTouched();\n }\n\n handlePromptSubmit(promptData?: PromptData | string): void {\n const prompt = typeof promptData === 'string' ? promptData : (promptData?.text ?? this.promptModel());\n this.promptModel.set(prompt);\n this.promptChange.emit(prompt);\n\n const submitEvent: WriteWithAiSubmitEvent = {\n prompt,\n content: this.effectiveValue(),\n metadata: this.metadata(),\n };\n\n if (this.isDefaultMode()) {\n this.executeDefaultFlow(prompt);\n }\n\n this.promptSubmit.emit(submitEvent);\n }\n\n handleTagClick(tag: WriteWithAiTagOption): void {\n // ui-tag's press fires even when isDisabled, so guard here.\n if (this.cvaDisabled()) {\n return;\n }\n this.handlePromptSubmit(tag.label);\n }\n\n measureTagScroll(el: HTMLElement): void {\n this.canScrollTagsLeft.set(el.scrollLeft > 0);\n this.canScrollTagsRight.set(Math.ceil(el.scrollLeft + el.clientWidth) < el.scrollWidth);\n }\n\n scrollTags(el: HTMLElement, direction: -1 | 1): void {\n el.scrollBy({ left: direction * el.clientWidth * 0.8, behavior: 'smooth' });\n }\n\n handlePrimaryAction(): void {\n const status = this.effectiveStatus();\n if (status === 'loading') {\n this.handleCancel();\n } else if (status === 'success') {\n this.handleAccept();\n } else if (status === 'error') {\n this.handleRefine();\n }\n }\n\n handleSecondaryAction(): void {\n if (this.effectiveStatus() === 'success') {\n this.handleRefine();\n }\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: string): void {\n const v = value ?? '';\n if (this.isDefaultMode()) {\n this.internalValue.set(v);\n }\n // For integration mode the host uses the [value] input directly,\n // but we still keep internal state in sync for CVA consumers.\n this.internalValue.set(v);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Private helpers ---\n\n private executeDefaultFlow(prompt: string): void {\n const config = this.llmConfig();\n if (!config) {\n return;\n }\n\n this.cancelRequest$.next();\n this.internalStatus.set('loading');\n\n this.llmService\n .generate({ sourceText: this.effectiveValue(), prompt, context: config.context }, config)\n .pipe(takeUntil(this.cancelRequest$), takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: result => {\n this.internalValue.set(result);\n this.valueChange.emit(result);\n this.onChange(result);\n this.internalStatus.set('success');\n },\n error: () => {\n this.internalStatus.set('error');\n },\n });\n }\n\n private handleCancel(): void {\n if (this.isDefaultMode()) {\n this.cancelRequest$.next();\n this.internalStatus.set('idle');\n }\n this.cancelPending.emit();\n }\n\n private handleAccept(): void {\n if (this.isDefaultMode()) {\n this.internalStatus.set('idle');\n this.promptModel.set('');\n }\n if (!this.standalone()) {\n this.isPanelManuallyOpen.set(false);\n }\n this.acceptResult.emit();\n }\n\n private handleRefine(): void {\n if (this.isDefaultMode()) {\n this.internalStatus.set('idle');\n }\n this.requestRefine.emit();\n }\n}\n","<div\n class=\"write-with-ai\"\n [class.write-with-ai--standalone]=\"standalone()\"\n [class.write-with-ai--full-height]=\"fullHeight()\"\n>\n @if (!standalone()) {\n <div class=\"write-with-ai__host\">\n <ui-field\n [label]=\"fieldLabel() || (translationContext + 'FIELD_LABEL' | uiTranslate | async)!\"\n type=\"textarea\"\n [showBottomContent]=\"false\"\n [fullHeight]=\"fullHeight()\"\n [borderless]=\"borderless()\"\n [disabled]=\"cvaDisabled()\"\n [ngModel]=\"effectiveValue()\"\n (ngModelChange)=\"handleValueInput($event)\"\n ></ui-field>\n <ui-button\n class=\"write-with-ai__cta\"\n variant=\"ghost-ai\"\n size=\"small\"\n [label]=\"(translationContext + 'AI_ASSIST' | uiTranslate | async)!\"\n iconName=\"Sparkle-in-line\"\n iconPosition=\"left\"\n [disabled]=\"isPanelVisible() || cvaDisabled()\"\n (buttonClickEvent)=\"togglePanel()\"\n ></ui-button>\n </div>\n }\n\n @if (isPanelVisible()) {\n <section\n class=\"write-with-ai__panel\"\n [class.write-with-ai__panel--loading]=\"effectiveStatus() === 'loading'\"\n role=\"region\"\n [attr.aria-label]=\"(translationContext + 'AI_WRITING_ASSISTANT' | uiTranslate | async)!\"\n >\n <header class=\"write-with-ai__panel-header\">\n <div class=\"write-with-ai__panel-heading\">\n <div class=\"write-with-ai__title-row\">\n @if (effectiveStatus() !== 'loading') {\n <ui-icon class=\"write-with-ai__title-icon\" name=\"Sparkle-in-line\" color=\"ai\"></ui-icon>\n }\n <h4 class=\"write-with-ai__title\">\n {{ header() || (translationContext + 'HEADER' | uiTranslate | async) }}\n </h4>\n </div>\n @if (subheader()) {\n <p class=\"write-with-ai__subheader\">{{ subheader() }}</p>\n }\n </div>\n @if (!standalone()) {\n <ui-button\n variant=\"icon-button\"\n iconName=\"Close\"\n size=\"small\"\n [tooltip]=\"(translationContext + 'CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"(translationContext + 'CLOSE_AI_ASSISTANT' | uiTranslate | async)!\"\n (buttonClickEvent)=\"togglePanel()\"\n ></ui-button>\n }\n </header>\n\n @if (effectiveStatus() === 'idle') {\n @if (tagsOnly()) {\n @if (tags().length) {\n <div class=\"write-with-ai__tags-prompt\">\n <div\n class=\"write-with-ai__tags-container\"\n role=\"group\"\n [attr.aria-label]=\"header() || (translationContext + 'HEADER' | uiTranslate | async)\"\n #tagsScrollContainer\n (scroll)=\"measureTagScroll(tagsScrollContainer)\"\n >\n @for (tag of tags(); track tag.id) {\n <ui-tag\n [label]=\"tag.label\"\n [ariaLabel]=\"tag.label\"\n [isDisabled]=\"cvaDisabled()\"\n (press)=\"handleTagClick(tag)\"\n ></ui-tag>\n }\n </div>\n <div class=\"write-with-ai__tags-arrows\">\n <ui-button\n variant=\"icon-button\"\n size=\"small\"\n iconName=\"Arrow-chevron-left-in-line\"\n [tooltip]=\"(translationContext + 'SCROLL_TAGS_LEFT' | uiTranslate | async)!\"\n [ariaLabel]=\"(translationContext + 'SCROLL_TAGS_LEFT' | uiTranslate | async)!\"\n [disabled]=\"cvaDisabled() || !canScrollTagsLeft()\"\n (buttonClickEvent)=\"scrollTags(tagsScrollContainer, -1)\"\n ></ui-button>\n <ui-button\n variant=\"icon-button\"\n size=\"small\"\n iconName=\"Arrow-chevron-right-in-line\"\n [tooltip]=\"(translationContext + 'SCROLL_TAGS_RIGHT' | uiTranslate | async)!\"\n [ariaLabel]=\"(translationContext + 'SCROLL_TAGS_RIGHT' | uiTranslate | async)!\"\n [disabled]=\"cvaDisabled() || !canScrollTagsRight()\"\n (buttonClickEvent)=\"scrollTags(tagsScrollContainer, 1)\"\n ></ui-button>\n </div>\n </div>\n }\n } @else {\n <div class=\"write-with-ai__prompt\">\n <ui-prompt\n [ngModel]=\"promptModelData()\"\n (ngModelChange)=\"handlePromptModelChange($event)\"\n [tags]=\"promptTags()\"\n [placeholder]=\"placeholder() || (translationContext + 'PLACEHOLDER' | uiTranslate | async)!\"\n [showSendButton]=\"true\"\n (promptData)=\"handlePromptSubmit($event)\"\n ></ui-prompt>\n </div>\n }\n }\n\n @if (statusConfig(); as cfg) {\n <ui-alert-banner\n [alertType]=\"cfg.alertType\"\n alertVariant=\"callout\"\n [message]=\"(cfg.messageKey | uiTranslate | async)!\"\n [includeDismissButton]=\"false\"\n [isLoading]=\"cfg.variant === 'loading'\"\n [hasIcon]=\"cfg.variant !== 'loading'\"\n [actions]=\"cfg.actions\"\n [isFullWidth]=\"true\"\n ></ui-alert-banner>\n }\n\n <div class=\"write-with-ai__caveat\">\n <ui-ai-caveat></ui-ai-caveat>\n </div>\n </section>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { WriteWithAiComponent } from './write-with-ai.component';\n\n@NgModule({\n imports: [WriteWithAiComponent],\n exports: [WriteWithAiComponent],\n})\nexport class WriteWithAiComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-write-with-ai.mjs","sources":["../../../components/write-with-ai/llm.service.ts","../../../components/write-with-ai/write-with-ai.component.ts","../../../components/write-with-ai/write-with-ai.component.html","../../../components/write-with-ai/write-with-ai.module.ts","../../../components/write-with-ai/testgorilla-tgo-ui-components-write-with-ai.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable, of, delay, map } from 'rxjs';\nimport { WriteWithAiLlmConfig } from './write-with-ai.model';\n\nexport interface LlmRequest {\n sourceText: string;\n prompt: string;\n context?: string;\n}\n\ninterface OpenAiChatResponse {\n choices: { message: { content: string } }[];\n}\n\ninterface GeminiResponse {\n candidates: { content: { parts: { text: string }[] } }[];\n}\n\nconst OPENAI_DEFAULT_ENDPOINT = 'https://api.openai.com/v1/chat/completions';\nconst OPENAI_DEFAULT_MODEL = 'gpt-5-mini';\nconst GEMINI_DEFAULT_MODEL = 'gemini-3.0-flash';\n\n@Injectable({ providedIn: 'root' })\nexport class WriteWithAiLlmService {\n constructor(private readonly http: HttpClient) {}\n\n generate(request: LlmRequest, config: WriteWithAiLlmConfig): Observable<string> {\n if (!config.apiKey) {\n return this.simulateResponse(request, config);\n }\n\n if (config.provider === 'gemini') {\n return this.callGemini(request, config);\n }\n\n return this.callOpenAi(request, config);\n }\n\n private resolveEndpoint(config: WriteWithAiLlmConfig): string {\n return config.endpoint ?? config.baseUrl ?? OPENAI_DEFAULT_ENDPOINT;\n }\n\n private callOpenAi(request: LlmRequest, config: WriteWithAiLlmConfig): Observable<string> {\n const endpoint = this.resolveEndpoint(config);\n const model = config.model ?? OPENAI_DEFAULT_MODEL;\n const systemMessage = this.buildSystemMessage(request.sourceText, request.context ?? config.context);\n\n const body = {\n model,\n messages: [\n { role: 'system', content: systemMessage },\n { role: 'user', content: request.prompt },\n ],\n };\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n });\n\n return this.http\n .post<OpenAiChatResponse>(endpoint, body, { headers })\n .pipe(map(res => res.choices[0]?.message?.content ?? ''));\n }\n\n private callGemini(request: LlmRequest, config: WriteWithAiLlmConfig): Observable<string> {\n const model = config.model ?? GEMINI_DEFAULT_MODEL;\n const baseUrl =\n config.endpoint ??\n config.baseUrl ??\n `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent`;\n const systemMessage = this.buildSystemMessage(request.sourceText, request.context ?? config.context);\n\n const body = {\n system_instruction: { parts: [{ text: systemMessage }] },\n contents: [{ role: 'user', parts: [{ text: request.prompt }] }],\n };\n\n const apiKey = config.apiKey;\n if (!apiKey) {\n return this.simulateResponse(request, config);\n }\n\n const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\n const params = new HttpParams().set('key', apiKey);\n\n return this.http\n .post<GeminiResponse>(baseUrl, body, { headers, params })\n .pipe(map(res => res.candidates?.[0]?.content?.parts?.[0]?.text ?? ''));\n }\n\n private simulateResponse(request: LlmRequest, _config: WriteWithAiLlmConfig): Observable<string> {\n const source = request.sourceText?.trim();\n const prompt = request.prompt?.trim();\n\n let response: string;\n\n if (source && prompt) {\n const truncated = source.length > 200 ? `${source.substring(0, 200)}…` : source;\n response =\n `Based on the following text:\\n\\n\"${truncated}\"\\n\\n` +\n `Here is the result for \"${prompt}\":\\n\\n${this.generatePlaceholderContent(prompt, source)}`;\n } else if (prompt) {\n response = this.generatePlaceholderContent(prompt, '');\n } else {\n response = 'Please provide a prompt describing what you would like me to write.';\n }\n\n return of(response).pipe(delay(1200));\n }\n\n private generatePlaceholderContent(prompt: string, source: string): string {\n const lower = prompt.toLowerCase();\n\n if (lower.includes('shorter') || lower.includes('concise') || lower.includes('summarize')) {\n const sentences = source.split(/[.!?]+/).filter(s => s.trim());\n if (sentences.length > 1) {\n return `${sentences\n .slice(0, Math.ceil(sentences.length / 2))\n .join('. ')\n .trim()}.`;\n }\n return `${source.substring(0, Math.ceil(source.length * 0.6)).trim()}…`;\n }\n\n if (lower.includes('formal') || lower.includes('professional') || lower.includes('tone')) {\n return `Dear Recipient,\\n\\nI hope this message finds you well. ${source || 'I am writing to follow up on our recent discussion.'}\\n\\nPlease do not hesitate to reach out should you require further information.\\n\\nBest regards`;\n }\n\n if (lower.includes('email') || lower.includes('draft') || lower.includes('write')) {\n return `Subject: Follow-up\\n\\nHi there,\\n\\n${source || 'Thank you for your time. I wanted to reach out regarding the next steps.'}\\n\\nLooking forward to hearing from you.\\n\\nBest regards`;\n }\n\n return `[Simulated LLM response]\\n\\nPrompt: ${prompt}\\n\\nThis is a simulated response. To enable real LLM calls, provide an apiKey in the llmConfig input. The service supports OpenAI-compatible and Gemini endpoints.`;\n }\n\n private buildSystemMessage(sourceText: string, context?: string): string {\n const parts: string[] = [];\n\n if (context) {\n parts.push(context);\n }\n\n if (sourceText) {\n parts.push(`The user is working with the following source text:\\n\\n\"\"\"${sourceText}\"\"\"`);\n }\n\n parts.push('Respond with only the requested content. Do not include explanations or preamble.');\n\n return parts.join('\\n\\n');\n }\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n OnInit,\n untracked,\n} from '@angular/core';\nimport { AsyncPipe } from '@angular/common';\nimport { FormsModule, NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest, map, Subject, takeUntil } from 'rxjs';\nimport { PromptData, PromptTag, PromptModule } from '@testgorilla/tgo-ui/components/prompt';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { AiCaveatComponentModule } from '@testgorilla/tgo-ui/components/ai-caveat';\nimport { AlertBannerComponentModule, AlertBannerAction } from '@testgorilla/tgo-ui/components/alert-banner';\nimport { AlertBarType, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { TagComponentModule } from '@testgorilla/tgo-ui/components/tag';\nimport {\n WriteWithAiStatus,\n WriteWithAiTagOption,\n WriteWithAiLlmConfig,\n WriteWithAiSubmitEvent,\n} from './write-with-ai.model';\nimport { WriteWithAiLlmService } from './llm.service';\n\ninterface StatusConfig {\n variant: 'loading' | 'success' | 'error';\n alertType: AlertBarType;\n messageKey: string;\n actions: AlertBannerAction[];\n}\n\n@Component({\n selector: 'ui-write-with-ai',\n templateUrl: './write-with-ai.component.html',\n styleUrl: './write-with-ai.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: block' },\n providers: [\n UiTranslatePipe,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WriteWithAiComponent),\n multi: true,\n },\n ],\n imports: [\n AsyncPipe,\n FormsModule,\n FieldComponentModule,\n ButtonComponentModule,\n IconComponentModule,\n PromptModule,\n AiCaveatComponentModule,\n AlertBannerComponentModule,\n TagComponentModule,\n UiTranslatePipe,\n ],\n})\nexport class WriteWithAiComponent implements OnInit, ControlValueAccessor {\n readonly value = input('');\n readonly standalone = input(false);\n readonly defaultOpen = input(false);\n readonly fieldLabel = input('');\n readonly header = input('');\n readonly placeholder = input('');\n readonly promptValue = input('');\n readonly tags = input<WriteWithAiTagOption[]>([]);\n readonly status = input<WriteWithAiStatus>('idle');\n readonly subheader = input<string | undefined>(undefined);\n readonly llmConfig = input<WriteWithAiLlmConfig | undefined>(undefined);\n\n /** Layout: make the inner field stretch to fill its container height. */\n readonly fullHeight = input(false);\n\n /** Layout: render the inner field without a visible border. */\n readonly borderless = input(false);\n\n /**\n * When true, hides the free-text `ui-prompt` and renders the `tags` chips on their own.\n * Clicking a chip submits its label as the prompt via `promptSubmit`.\n * Use this when the host backend only accepts a constrained set of prompts (e.g. an enum).\n */\n readonly tagsOnly = input(false, { transform: booleanAttribute });\n\n /** Opaque host metadata emitted with promptSubmit for backend integrations. */\n readonly metadata = input<Record<string, unknown>>({});\n\n readonly valueChange = output<string>();\n readonly promptChange = output<string>();\n readonly promptSubmit = output<WriteWithAiSubmitEvent>();\n readonly cancelPending = output<void>();\n readonly acceptResult = output<void>();\n readonly requestRefine = output<void>();\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly llmService = inject(WriteWithAiLlmService);\n private readonly uiTranslate = inject(UiTranslatePipe);\n private readonly promptModel = signal('');\n private readonly isPanelManuallyOpen = signal(false);\n private readonly internalStatus = signal<WriteWithAiStatus>('idle');\n private readonly internalValue = signal('');\n private readonly cancelRequest$ = new Subject<void>();\n\n /** ControlValueAccessor: whether the form control is disabled. */\n readonly cvaDisabled = signal(false);\n\n /** Tag carousel (tagsOnly mode): scroll container + arrow-enabled state. */\n private readonly tagsScrollRef = viewChild<ElementRef<HTMLDivElement>>('tagsScrollContainer');\n readonly canScrollTagsLeft = signal(false);\n readonly canScrollTagsRight = signal(false);\n\n /** ControlValueAccessor callbacks. */\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly translationContext = 'WRITE_WITH_AI.';\n\n private readonly labels = toSignal(\n combineLatest([\n this.uiTranslate.transform(`${this.translationContext}CANCEL`),\n this.uiTranslate.transform(`${this.translationContext}ACCEPT`),\n this.uiTranslate.transform(`${this.translationContext}MAKE_CHANGES`),\n this.uiTranslate.transform(`${this.translationContext}TRY_AGAIN`),\n ]).pipe(map(([cancel, accept, makeChanges, tryAgain]) => ({ cancel, accept, makeChanges, tryAgain }))),\n { initialValue: { cancel: '', accept: '', makeChanges: '', tryAgain: '' } }\n );\n\n readonly isDefaultMode = computed(() => this.llmConfig()?.default === true);\n\n readonly effectiveStatus = computed(() => (this.isDefaultMode() ? this.internalStatus() : this.status()));\n\n readonly effectiveValue = computed(() => (this.isDefaultMode() ? this.internalValue() : this.value()));\n\n readonly isPanelVisible = computed(() => this.standalone() || this.isPanelManuallyOpen());\n\n readonly promptTags = computed<PromptTag[]>(() =>\n this.tags().map(tag => ({ id: tag.id, label: tag.label, autocomplete: tag.description ?? '' }))\n );\n\n readonly statusConfig = computed<StatusConfig | null>(() => {\n const l = this.labels();\n switch (this.effectiveStatus()) {\n case 'loading':\n return {\n variant: 'loading',\n alertType: 'info',\n messageKey: `${this.translationContext}WRITING`,\n actions: [{ label: l.cancel, onClick: () => this.handleCancel() }],\n };\n case 'success':\n return {\n variant: 'success',\n alertType: 'success',\n messageKey: `${this.translationContext}CONTENT_GENERATED`,\n actions: [\n { label: l.accept, onClick: () => this.handleAccept() },\n { label: l.makeChanges, onClick: () => this.handleRefine() },\n ],\n };\n case 'error':\n return {\n variant: 'error',\n alertType: 'error',\n messageKey: `${this.translationContext}ERROR_MESSAGE`,\n actions: [{ label: l.tryAgain, onClick: () => this.handleRefine() }],\n };\n default:\n return null;\n }\n });\n\n constructor() {\n effect(() => {\n const promptValue = this.promptValue();\n const isDefault = this.isDefaultMode();\n if (!isDefault) {\n untracked(() => this.promptModel.set(promptValue));\n }\n });\n\n effect(() => {\n const value = this.value();\n const isDefault = this.isDefaultMode();\n if (isDefault) {\n untracked(() => this.internalValue.set(value));\n }\n });\n\n // Scroll events don't trigger change detection, so the arrow disabled-state\n // is kept in signals. This re-measures whenever the carousel (re)mounts or\n // the tag set changes; runtime scrolling is handled by the (scroll) listener.\n // It only reads layout, so it runs in the dedicated `read` phase.\n afterRenderEffect({\n read: () => {\n this.tags();\n const el = this.tagsScrollRef()?.nativeElement;\n if (el) {\n this.measureTagScroll(el);\n }\n },\n });\n\n // Resizing the host can change overflow without a scroll or tag-set change,\n // so observe the carousel and re-measure when its box changes.\n effect(onCleanup => {\n const el = this.tagsScrollRef()?.nativeElement;\n if (!el || typeof ResizeObserver === 'undefined') {\n return;\n }\n const observer = new ResizeObserver(() => this.measureTagScroll(el));\n observer.observe(el);\n onCleanup(() => observer.disconnect());\n });\n }\n\n readonly promptModelData = computed<PromptData>(() => ({ text: this.promptModel(), files: [] }));\n\n handlePromptModelChange(value: PromptData | string): void {\n const text = typeof value === 'string' ? value : (value?.text ?? '');\n this.promptModel.set(text);\n this.promptChange.emit(text);\n }\n\n ngOnInit() {\n if (this.defaultOpen()) {\n this.isPanelManuallyOpen.set(true);\n }\n }\n\n togglePanel(): void {\n if (this.standalone()) {\n return;\n }\n this.isPanelManuallyOpen.update(current => !current);\n }\n\n handleValueInput(value: string): void {\n if (this.isDefaultMode()) {\n this.internalValue.set(value);\n }\n this.valueChange.emit(value);\n this.onChange(value);\n this.onTouched();\n }\n\n handlePromptSubmit(promptData?: PromptData | string): void {\n const prompt = typeof promptData === 'string' ? promptData : (promptData?.text ?? this.promptModel());\n this.promptModel.set(prompt);\n this.promptChange.emit(prompt);\n\n const submitEvent: WriteWithAiSubmitEvent = {\n prompt,\n content: this.effectiveValue(),\n metadata: this.metadata(),\n };\n\n if (this.isDefaultMode()) {\n this.executeDefaultFlow(prompt);\n }\n\n this.promptSubmit.emit(submitEvent);\n }\n\n handleTagClick(tag: WriteWithAiTagOption): void {\n // ui-tag's press fires even when isDisabled, so guard here.\n if (this.cvaDisabled()) {\n return;\n }\n this.handlePromptSubmit(tag.label);\n }\n\n measureTagScroll(el: HTMLElement): void {\n this.canScrollTagsLeft.set(el.scrollLeft > 0);\n this.canScrollTagsRight.set(Math.ceil(el.scrollLeft + el.clientWidth) < el.scrollWidth);\n }\n\n scrollTags(el: HTMLElement, direction: -1 | 1): void {\n el.scrollBy({ left: direction * el.clientWidth * 0.8, behavior: 'smooth' });\n }\n\n handlePrimaryAction(): void {\n const status = this.effectiveStatus();\n if (status === 'loading') {\n this.handleCancel();\n } else if (status === 'success') {\n this.handleAccept();\n } else if (status === 'error') {\n this.handleRefine();\n }\n }\n\n handleSecondaryAction(): void {\n if (this.effectiveStatus() === 'success') {\n this.handleRefine();\n }\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: string): void {\n const v = value ?? '';\n if (this.isDefaultMode()) {\n this.internalValue.set(v);\n }\n // For integration mode the host uses the [value] input directly,\n // but we still keep internal state in sync for CVA consumers.\n this.internalValue.set(v);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Private helpers ---\n\n private executeDefaultFlow(prompt: string): void {\n const config = this.llmConfig();\n if (!config) {\n return;\n }\n\n this.cancelRequest$.next();\n this.internalStatus.set('loading');\n\n this.llmService\n .generate({ sourceText: this.effectiveValue(), prompt, context: config.context }, config)\n .pipe(takeUntil(this.cancelRequest$), takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: result => {\n this.internalValue.set(result);\n this.valueChange.emit(result);\n this.onChange(result);\n this.internalStatus.set('success');\n },\n error: () => {\n this.internalStatus.set('error');\n },\n });\n }\n\n private handleCancel(): void {\n if (this.isDefaultMode()) {\n this.cancelRequest$.next();\n this.internalStatus.set('idle');\n }\n this.cancelPending.emit();\n }\n\n private handleAccept(): void {\n if (this.isDefaultMode()) {\n this.internalStatus.set('idle');\n this.promptModel.set('');\n }\n if (!this.standalone()) {\n this.isPanelManuallyOpen.set(false);\n }\n this.acceptResult.emit();\n }\n\n private handleRefine(): void {\n if (this.isDefaultMode()) {\n this.internalStatus.set('idle');\n }\n this.requestRefine.emit();\n }\n}\n","<div\n class=\"write-with-ai\"\n [class.write-with-ai--standalone]=\"standalone()\"\n [class.write-with-ai--full-height]=\"fullHeight()\"\n>\n @if (!standalone()) {\n <div class=\"write-with-ai__host\">\n <ui-field\n [label]=\"fieldLabel() || (translationContext + 'FIELD_LABEL' | uiTranslate | async)!\"\n type=\"textarea\"\n [showBottomContent]=\"false\"\n [fullHeight]=\"fullHeight()\"\n [borderless]=\"borderless()\"\n [disabled]=\"cvaDisabled()\"\n [ngModel]=\"effectiveValue()\"\n (ngModelChange)=\"handleValueInput($event)\"\n ></ui-field>\n <ui-button\n class=\"write-with-ai__cta\"\n variant=\"ghost-ai\"\n size=\"small\"\n [label]=\"(translationContext + 'AI_ASSIST' | uiTranslate | async)!\"\n iconName=\"Sparkle-in-line\"\n iconPosition=\"left\"\n [disabled]=\"isPanelVisible() || cvaDisabled()\"\n (buttonClickEvent)=\"togglePanel()\"\n ></ui-button>\n </div>\n }\n\n @if (isPanelVisible()) {\n <section\n class=\"write-with-ai__panel\"\n [class.write-with-ai__panel--loading]=\"effectiveStatus() === 'loading'\"\n role=\"region\"\n [attr.aria-label]=\"(translationContext + 'AI_WRITING_ASSISTANT' | uiTranslate | async)!\"\n >\n <header class=\"write-with-ai__panel-header\">\n <div class=\"write-with-ai__panel-heading\">\n <div class=\"write-with-ai__title-row\">\n @if (effectiveStatus() !== 'loading') {\n <ui-icon class=\"write-with-ai__title-icon\" name=\"Sparkle-in-line\" color=\"ai\"></ui-icon>\n }\n <h4 class=\"write-with-ai__title\">\n {{ header() || (translationContext + 'HEADER' | uiTranslate | async) }}\n </h4>\n </div>\n @if (subheader()) {\n <p class=\"write-with-ai__subheader\">{{ subheader() }}</p>\n }\n </div>\n @if (!standalone()) {\n <ui-button\n variant=\"icon-button\"\n iconName=\"Close\"\n size=\"small\"\n [tooltip]=\"(translationContext + 'CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"(translationContext + 'CLOSE_AI_ASSISTANT' | uiTranslate | async)!\"\n (buttonClickEvent)=\"togglePanel()\"\n ></ui-button>\n }\n </header>\n\n @if (effectiveStatus() === 'idle') {\n @if (tagsOnly()) {\n @if (tags().length) {\n <div class=\"write-with-ai__tags-prompt\">\n <div\n class=\"write-with-ai__tags-container\"\n role=\"group\"\n [attr.aria-label]=\"header() || (translationContext + 'HEADER' | uiTranslate | async)\"\n #tagsScrollContainer\n (scroll)=\"measureTagScroll(tagsScrollContainer)\"\n >\n @for (tag of tags(); track tag.id) {\n <ui-tag\n [label]=\"tag.label\"\n [ariaLabel]=\"tag.label\"\n [isDisabled]=\"cvaDisabled()\"\n (press)=\"handleTagClick(tag)\"\n ></ui-tag>\n }\n </div>\n <div class=\"write-with-ai__tags-arrows\">\n <ui-button\n variant=\"icon-button\"\n size=\"small\"\n iconName=\"Arrow-chevron-left-in-line\"\n [tooltip]=\"(translationContext + 'SCROLL_TAGS_LEFT' | uiTranslate | async)!\"\n [ariaLabel]=\"(translationContext + 'SCROLL_TAGS_LEFT' | uiTranslate | async)!\"\n [disabled]=\"cvaDisabled() || !canScrollTagsLeft()\"\n (buttonClickEvent)=\"scrollTags(tagsScrollContainer, -1)\"\n ></ui-button>\n <ui-button\n variant=\"icon-button\"\n size=\"small\"\n iconName=\"Arrow-chevron-right-in-line\"\n [tooltip]=\"(translationContext + 'SCROLL_TAGS_RIGHT' | uiTranslate | async)!\"\n [ariaLabel]=\"(translationContext + 'SCROLL_TAGS_RIGHT' | uiTranslate | async)!\"\n [disabled]=\"cvaDisabled() || !canScrollTagsRight()\"\n (buttonClickEvent)=\"scrollTags(tagsScrollContainer, 1)\"\n ></ui-button>\n </div>\n </div>\n }\n } @else {\n <div class=\"write-with-ai__prompt\">\n <ui-prompt\n [ngModel]=\"promptModelData()\"\n (ngModelChange)=\"handlePromptModelChange($event)\"\n [tags]=\"promptTags()\"\n [placeholder]=\"placeholder() || (translationContext + 'PLACEHOLDER' | uiTranslate | async)!\"\n [showSendButton]=\"true\"\n (promptData)=\"handlePromptSubmit($event)\"\n ></ui-prompt>\n </div>\n }\n }\n\n @if (statusConfig(); as cfg) {\n <ui-alert-banner\n [alertType]=\"cfg.alertType\"\n alertVariant=\"callout\"\n [message]=\"(cfg.messageKey | uiTranslate | async)!\"\n [includeDismissButton]=\"false\"\n [isLoading]=\"cfg.variant === 'loading'\"\n [hasIcon]=\"cfg.variant !== 'loading'\"\n [actions]=\"cfg.actions\"\n [isFullWidth]=\"true\"\n ></ui-alert-banner>\n }\n\n <div class=\"write-with-ai__caveat\">\n <ui-ai-caveat></ui-ai-caveat>\n </div>\n </section>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { WriteWithAiComponent } from './write-with-ai.component';\n\n@NgModule({\n imports: [WriteWithAiComponent],\n exports: [WriteWithAiComponent],\n})\nexport class WriteWithAiComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|