@sftech/ng-orchestrator 0.0.13 → 0.0.17
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/fesm2022/{sftech-ng-orchestrator-agent.service-B1eDDbBp.mjs → sftech-ng-orchestrator-agent.service-DPJMw8a4.mjs} +3 -6
- package/fesm2022/sftech-ng-orchestrator-agent.service-DPJMw8a4.mjs.map +1 -0
- package/fesm2022/{sftech-ng-orchestrator-agents.routes-DMY81ODI.mjs → sftech-ng-orchestrator-agents.routes-B9GSWOIz.mjs} +11 -16
- package/fesm2022/sftech-ng-orchestrator-agents.routes-B9GSWOIz.mjs.map +1 -0
- package/fesm2022/sftech-ng-orchestrator-chats.routes-BLGhykMM.mjs +556 -0
- package/fesm2022/sftech-ng-orchestrator-chats.routes-BLGhykMM.mjs.map +1 -0
- package/fesm2022/{sftech-ng-orchestrator-prompt-display.component-Cs98Is_J.mjs → sftech-ng-orchestrator-prompt-display.component-Cd6Ff3KE.mjs} +59 -11
- package/fesm2022/sftech-ng-orchestrator-prompt-display.component-Cd6Ff3KE.mjs.map +1 -0
- package/fesm2022/sftech-ng-orchestrator-prompt.model-DhASegzq.mjs +57 -0
- package/fesm2022/sftech-ng-orchestrator-prompt.model-DhASegzq.mjs.map +1 -0
- package/fesm2022/{sftech-ng-orchestrator-prompts.routes-C_K_TNaw.mjs → sftech-ng-orchestrator-prompts.routes-DQZ_Hmjs.mjs} +2 -3
- package/fesm2022/sftech-ng-orchestrator-prompts.routes-DQZ_Hmjs.mjs.map +1 -0
- package/fesm2022/sftech-ng-orchestrator-sftech-ng-orchestrator-CJMmRHC-.mjs +222 -0
- package/fesm2022/sftech-ng-orchestrator-sftech-ng-orchestrator-CJMmRHC-.mjs.map +1 -0
- package/fesm2022/sftech-ng-orchestrator.mjs +1 -1
- package/lib/ng-orchestrator/{agents → admin/agents}/components/agent/agent-display/agent-display.component.d.ts +8 -8
- package/lib/ng-orchestrator/{agents → admin/agents}/components/agent/agents-list/agents-list.component.d.ts +4 -4
- package/lib/ng-orchestrator/{prompts → admin/prompts}/components/prompt/prompt-display/prompt-display.component.d.ts +4 -4
- package/lib/ng-orchestrator/{prompts → admin/prompts}/components/prompt/prompts-list/prompts-list.component.d.ts +4 -4
- package/lib/ng-orchestrator/{prompts → admin/prompts}/components/prompt-history/prompt-history-display/prompt-history-display.component.d.ts +5 -5
- package/lib/ng-orchestrator/{prompts → admin/prompts}/components/prompt-history/prompt-history-list/prompt-history-list.component.d.ts +5 -5
- package/lib/ng-orchestrator/chats/agent-chat/agent-chat-message/agent-chat-message.component.d.ts +11 -0
- package/lib/ng-orchestrator/chats/agent-chat/agent-chat-message-human-input/agent-chat-message-human-input.component.d.ts +20 -0
- package/lib/ng-orchestrator/chats/agent-chat/agent-chat.component.d.ts +44 -0
- package/lib/ng-orchestrator/chats/agent-selection/agent-selection.component.d.ts +22 -0
- package/lib/ng-orchestrator/chats/chats.component.d.ts +5 -0
- package/lib/ng-orchestrator/chats/chats.routes.d.ts +16 -0
- package/lib/ng-orchestrator/chats/core/dataprovider/agent-run-icon-text.dataprovider.d.ts +9 -0
- package/lib/ng-orchestrator/core/dataprovider/orchestrator-icon.provider.d.ts +13 -0
- package/lib/ng-orchestrator/{agents/core → core}/dtos/agent-create-request.dto.d.ts +0 -1
- package/lib/ng-orchestrator/{agents/core → core}/dtos/agent-response.dto.d.ts +1 -2
- package/lib/ng-orchestrator/core/dtos/agent-run-create-request.dto.d.ts +3 -0
- package/lib/ng-orchestrator/core/dtos/agent-run-response.dto.d.ts +12 -0
- package/lib/ng-orchestrator/{agents/core → core}/dtos/agent-update-request.dto.d.ts +0 -1
- package/lib/ng-orchestrator/core/dtos/chat-create-request.dto.d.ts +4 -0
- package/lib/ng-orchestrator/core/dtos/chat-message-response.dto.d.ts +6 -0
- package/lib/ng-orchestrator/core/dtos/chat-response.dto.d.ts +6 -0
- package/lib/ng-orchestrator/core/dtos/chat-update-request.dto.d.ts +3 -0
- package/lib/ng-orchestrator/core/enums/agent-run-status.enum.d.ts +9 -0
- package/lib/ng-orchestrator/core/models/agent-run.model.d.ts +19 -0
- package/lib/ng-orchestrator/{agents/core → core}/models/agent.model.d.ts +2 -3
- package/lib/ng-orchestrator/core/models/chat-message.model.d.ts +10 -0
- package/lib/ng-orchestrator/core/models/chat.model.d.ts +8 -0
- package/lib/ng-orchestrator/core/service/agent-run.service.d.ts +19 -0
- package/lib/ng-orchestrator/{agents/core/services → core/service}/agent.service.d.ts +1 -1
- package/lib/ng-orchestrator/core/service/chat.service.d.ts +20 -0
- package/lib/ng-orchestrator/core/service/orchestrator.service.d.ts +20 -0
- package/lib/ng-orchestrator/{prompts/core/services → core/service}/prompt-history.service.d.ts +1 -1
- package/lib/ng-orchestrator/{prompts/core/services → core/service}/prompt.service.d.ts +1 -1
- package/lib/ng-orchestrator/orchestrator.module.d.ts +2 -1
- package/package.json +2 -2
- package/fesm2022/sftech-ng-orchestrator-agent.service-B1eDDbBp.mjs.map +0 -1
- package/fesm2022/sftech-ng-orchestrator-agents.routes-DMY81ODI.mjs.map +0 -1
- package/fesm2022/sftech-ng-orchestrator-chat.routes-VZLqUmet.mjs +0 -154
- package/fesm2022/sftech-ng-orchestrator-chat.routes-VZLqUmet.mjs.map +0 -1
- package/fesm2022/sftech-ng-orchestrator-prompt-display.component-Cs98Is_J.mjs.map +0 -1
- package/fesm2022/sftech-ng-orchestrator-prompt.service-5pF5b4ys.mjs +0 -107
- package/fesm2022/sftech-ng-orchestrator-prompt.service-5pF5b4ys.mjs.map +0 -1
- package/fesm2022/sftech-ng-orchestrator-prompts.routes-C_K_TNaw.mjs.map +0 -1
- package/fesm2022/sftech-ng-orchestrator-sftech-ng-orchestrator-BVqY_Vj9.mjs +0 -158
- package/fesm2022/sftech-ng-orchestrator-sftech-ng-orchestrator-BVqY_Vj9.mjs.map +0 -1
- package/lib/ng-orchestrator/chat/chat.component.d.ts +0 -38
- package/lib/ng-orchestrator/chat/chat.routes.d.ts +0 -5
- package/lib/ng-orchestrator/core/dtos/llm-response.dto.d.ts +0 -10
- package/lib/ng-orchestrator/core/models/llm-response.model.d.ts +0 -12
- package/lib/ng-orchestrator/core/pipes/bold-input-vars.pipe.d.ts +0 -7
- package/lib/ng-orchestrator/core/service/orcherstrator.service.d.ts +0 -17
- /package/lib/ng-orchestrator/{agents → admin/agents}/agents.component.d.ts +0 -0
- /package/lib/ng-orchestrator/{agents → admin/agents}/agents.routes.d.ts +0 -0
- /package/lib/ng-orchestrator/{agents → admin/agents}/components/agent/agent-display/prompt-helper-modal/prompt-helper-modal.component.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts → admin/prompts}/prompts.component.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts → admin/prompts}/prompts.routes.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts/core → core}/dtos/prompt-history-create.dto.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts/core → core}/dtos/prompt-history-response.dto.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts/core → core}/dtos/prompt-history-update.dto.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts/core → core}/dtos/prompt-request.dto.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts/core → core}/dtos/prompt-update.dto.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts/core → core}/models/prompt-history.model.d.ts +0 -0
- /package/lib/ng-orchestrator/{prompts/core → core}/models/prompt.model.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sftech-ng-orchestrator-chats.routes-BLGhykMM.mjs","sources":["../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/enums/agent-run-status.enum.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/service/agent-run.service.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/service/chat.service.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/dataprovider/orchestrator-icon.provider.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/core/dataprovider/agent-run-icon-text.dataprovider.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-chat/agent-chat-message-human-input/agent-chat-message-human-input.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-chat/agent-chat-message-human-input/agent-chat-message-human-input.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-chat/agent-chat-message/agent-chat-message.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-chat/agent-chat-message/agent-chat-message.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-chat/agent-chat.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-chat/agent-chat.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-selection/agent-selection.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/agent-selection/agent-selection.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/chats.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/chats/chats.routes.ts"],"sourcesContent":["export enum EAgentRunStatus {\r\n INIT = 'init',\r\n PRERUNNING = 'pre_running',\r\n RUNNING = 'running',\r\n POSTRUNNING = 'post_running',\r\n CLARIFICATION_NEEDED = 'clarification_needed',\r\n COMPLETED = 'completed',\r\n FAILED = 'failed',\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { BaseDbApiService, MappedApiError, MappedApiResponse } from '@sftech/ng-shared';\r\nimport { Observable } from 'rxjs';\r\nimport { IOrchestratorConfig } from '../configuration/orchestrator-config.interface';\r\nimport { ORCHESTRATOR_CONFIGURATION } from '../configuration/orchestrator-configuration.token';\r\nimport { IAgentRunCreateRequestDto } from '../dtos/agent-run-create-request.dto';\r\nimport { IAgentRunResponseDto } from '../dtos/agent-run-response.dto';\r\nimport { AgentRun } from '../models/agent-run.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AgentRunService extends BaseDbApiService<AgentRun, IAgentRunCreateRequestDto, IAgentRunResponseDto, IAgentRunResponseDto> {\r\n constructor(\r\n protected override readonly http: HttpClient,\r\n @Inject(ORCHESTRATOR_CONFIGURATION) protected override readonly config: IOrchestratorConfig,\r\n ) {\r\n super(http, config);\r\n this.url = `${this.config.orchestratorDbUrl}/agent-runs`;\r\n }\r\n\r\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\r\n override insert(dto: IAgentRunCreateRequestDto): Observable<MappedApiResponse<AgentRun> | MappedApiError> {\r\n throw new Error('Method not implemented');\r\n }\r\n\r\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\r\n override update(id: number, dto: IAgentRunResponseDto): Observable<MappedApiResponse<AgentRun> | MappedApiError> {\r\n throw new Error('Method not implemented');\r\n }\r\n\r\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\r\n override delete(id: number): Observable<MappedApiResponse<AgentRun> | MappedApiError> {\r\n throw new Error('Method not implemented');\r\n }\r\n\r\n protected getNewModel(): AgentRun {\r\n return new AgentRun();\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { BaseDbApiService, IApiResponse, IOdataResponseDto, MappedApiError, MappedApiResponse, MappedOdataResponse, OData } from '@sftech/ng-shared';\r\nimport { Observable, catchError, map } from 'rxjs';\r\nimport { IOrchestratorConfig } from '../configuration/orchestrator-config.interface';\r\nimport { ORCHESTRATOR_CONFIGURATION } from '../configuration/orchestrator-configuration.token';\r\nimport { IChatCreateRequestDto } from '../dtos/chat-create-request.dto';\r\nimport { IChatResponseDto } from '../dtos/chat-response.dto';\r\nimport { IChatUpdateRequestDto } from '../dtos/chat-update-request.dto';\r\nimport { Chat } from '../models/chat.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChatService extends BaseDbApiService<Chat, IChatCreateRequestDto, IChatUpdateRequestDto, IChatResponseDto> {\r\n constructor(\r\n protected override readonly http: HttpClient,\r\n @Inject(ORCHESTRATOR_CONFIGURATION) protected override readonly config: IOrchestratorConfig,\r\n ) {\r\n super(http, config);\r\n this.url = `${this.config.orchestratorDbUrl}/chats`;\r\n }\r\n\r\n public override odata(odataQuery: OData): Observable<MappedOdataResponse<Chat> | MappedApiError> {\r\n return this.http.get<IApiResponse<IOdataResponseDto<IChatResponseDto>>>(`${this.url}/${odataQuery.toGetParameter()}`).pipe(\r\n map((response: IApiResponse<IOdataResponseDto<IChatResponseDto>>) => this.responseOdataMapping(response)),\r\n catchError((error) => {\r\n return this.httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public override insert(dto: IChatCreateRequestDto): Observable<MappedApiResponse<Chat> | MappedApiError> {\r\n return this.http.post<IApiResponse<IChatResponseDto>>(this.url, dto).pipe(\r\n map((response: IApiResponse<IChatResponseDto>) => this.responseMapping(response)),\r\n catchError((error) => {\r\n return this.httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\r\n public override update(id: number, dto: IChatUpdateRequestDto): Observable<MappedApiResponse<Chat> | MappedApiError> {\r\n throw new Error('update of a chat is not allowed');\r\n }\r\n\r\n protected override getNewModel(): Chat {\r\n return new Chat();\r\n }\r\n}\r\n","import { faBrain, faCheck, faCircleQuestion, faClipboardCheck, faCog, faLaptop, faNetworkWired, faNoteSticky, faSpinner, faUser, faXmark } from '@fortawesome/free-solid-svg-icons';\r\nimport { IconProvider } from '@sftech/ng-shared';\r\n\r\nexport class OrchestratorIconProvider extends IconProvider {\r\n public static readonly agentRunStatusInit = faNoteSticky;\r\n public static readonly agentRunStatusRunning = faCog;\r\n public static readonly agentRunStatusCompleted = faCheck;\r\n public static readonly agentRunStatusFailed = faXmark;\r\n public static readonly agentRunStatusPrerun = faSpinner;\r\n public static readonly agentRunStatusPostrun = faClipboardCheck;\r\n public static readonly agentRunStatusClarify = faCircleQuestion;\r\n\r\n public static readonly messageTypeAI = faBrain;\r\n public static readonly messageTypeHuman = faUser;\r\n public static readonly messageTypeSystem = faNetworkWired;\r\n}\r\n","import { IconDefinition } from '@fortawesome/angular-fontawesome';\r\nimport { IconProvider } from '@sftech/ng-shared';\r\nimport { OrchestratorIconProvider } from '../../../core/dataprovider/orchestrator-icon.provider';\r\nimport { EAgentRunStatus } from '../../../core/enums/agent-run-status.enum';\r\n\r\n// biome-ignore lint/complexity/noStaticOnlyClass: <explanation>\r\nexport class AgentRunIconTextDataprovider {\r\n private static readonly UNKNOWN_TEXT = 'Unbekannt';\r\n\r\n public static getTextForStatus(status: EAgentRunStatus | undefined): string {\r\n if (!status) {\r\n return AgentRunIconTextDataprovider.UNKNOWN_TEXT;\r\n }\r\n switch (status) {\r\n case EAgentRunStatus.INIT:\r\n return 'Anlage';\r\n case EAgentRunStatus.RUNNING:\r\n return 'In Bearbeitung';\r\n case EAgentRunStatus.COMPLETED:\r\n return 'Abgeschlossen';\r\n case EAgentRunStatus.FAILED:\r\n return 'Fehlgeschlagen';\r\n case EAgentRunStatus.CLARIFICATION_NEEDED:\r\n return 'Rückfrage';\r\n case EAgentRunStatus.PRERUNNING:\r\n return 'Vorbereitung';\r\n case EAgentRunStatus.POSTRUNNING:\r\n return 'Nachbereitung';\r\n default:\r\n return AgentRunIconTextDataprovider.UNKNOWN_TEXT;\r\n }\r\n }\r\n\r\n public static getIconForStatus(status: EAgentRunStatus | undefined): IconDefinition {\r\n if (!status) {\r\n return IconProvider.unknown;\r\n }\r\n switch (status) {\r\n case EAgentRunStatus.INIT:\r\n return OrchestratorIconProvider.agentRunStatusInit;\r\n case EAgentRunStatus.RUNNING:\r\n return OrchestratorIconProvider.agentRunStatusRunning;\r\n case EAgentRunStatus.COMPLETED:\r\n return OrchestratorIconProvider.agentRunStatusCompleted;\r\n case EAgentRunStatus.FAILED:\r\n return OrchestratorIconProvider.agentRunStatusFailed;\r\n case EAgentRunStatus.CLARIFICATION_NEEDED:\r\n return OrchestratorIconProvider.agentRunStatusClarify;\r\n case EAgentRunStatus.PRERUNNING:\r\n return OrchestratorIconProvider.agentRunStatusPrerun;\r\n case EAgentRunStatus.POSTRUNNING:\r\n return OrchestratorIconProvider.agentRunStatusPostrun;\r\n default:\r\n return IconProvider.unknown;\r\n }\r\n }\r\n\r\n public static getIconClassesForStatus(status: EAgentRunStatus | undefined): string {\r\n if (!status) {\r\n return AgentRunIconTextDataprovider.UNKNOWN_TEXT;\r\n }\r\n switch (status) {\r\n case EAgentRunStatus.INIT:\r\n return '';\r\n case EAgentRunStatus.RUNNING:\r\n return 'text-primary-600';\r\n case EAgentRunStatus.COMPLETED:\r\n return 'text-green-600';\r\n case EAgentRunStatus.FAILED:\r\n return 'text-red-600';\r\n case EAgentRunStatus.CLARIFICATION_NEEDED:\r\n return '';\r\n case EAgentRunStatus.PRERUNNING:\r\n return '';\r\n case EAgentRunStatus.POSTRUNNING:\r\n return '';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n public static getIconForMessageType(messageType: string): IconDefinition {\r\n switch (messageType) {\r\n case 'system':\r\n return OrchestratorIconProvider.messageTypeSystem;\r\n case 'human':\r\n return OrchestratorIconProvider.messageTypeHuman;\r\n case 'ai':\r\n return OrchestratorIconProvider.messageTypeAI;\r\n default:\r\n return IconProvider.unknown;\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, Output, effect, inject, input } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { FormErrorDisplayComponent, MappedApiError } from '@sftech/ng-shared';\r\nimport { AgentRunIconTextDataprovider } from 'libs/ng-orchestrator/src/lib/ng-orchestrator/chats/core/dataprovider/agent-run-icon-text.dataprovider';\r\nimport { MessageService } from 'primeng/api';\r\nimport { Button } from 'primeng/button';\r\nimport { FloatLabel } from 'primeng/floatlabel';\r\nimport { InputText } from 'primeng/inputtext';\r\nimport { Agent } from '../../../core/models/agent.model';\r\n\r\nimport { OrchestratorService } from '../../../core/service/orchestrator.service';\r\n\r\n@Component({\r\n selector: 'sftech-agent-chat-message-human-input',\r\n imports: [FaIconComponent, Button, FloatLabel, FormErrorDisplayComponent, InputText, ReactiveFormsModule],\r\n templateUrl: './agent-chat-message-human-input.component.html',\r\n styleUrl: './agent-chat-message-human-input.component.css',\r\n})\r\nexport class AgentChatMessageHumanInputComponent {\r\n public agent = input<Agent>();\r\n\r\n @Output() agentRunIdReceived = new EventEmitter<number>();\r\n\r\n public messageService = inject(MessageService);\r\n public orchestratorService = inject(OrchestratorService);\r\n\r\n public form = new FormGroup({});\r\n\r\n private _agentChanged$ = effect(() => {\r\n this.agent()!\r\n .llmUserPrompt?.template.match(/{{(.*?)}}/g)\r\n ?.forEach((m: string) => {\r\n const key = m.slice(2, -2);\r\n this.form.addControl(key, new FormControl('', [Validators.required]));\r\n });\r\n });\r\n\r\n protected readonly iconTextMapper = AgentRunIconTextDataprovider;\r\n\r\n public run(): void {\r\n if (this.form!.valid && this.form!.valid) {\r\n this.orchestratorService\r\n .runAgent({\r\n agentIdentifier: this.agent()!.identifier,\r\n userInput: this.form!.value,\r\n })\r\n .subscribe((res) => {\r\n if (res instanceof MappedApiError) {\r\n this.messageService.add({ severity: 'error', summary: 'Error', detail: res.messages.join('|') });\r\n return;\r\n }\r\n this.agentRunIdReceived.emit(res);\r\n });\r\n } else {\r\n console.error('Form is invalid');\r\n }\r\n }\r\n\r\n public getInputFormControlNames(): string[] {\r\n return Object.keys(this.form!.controls);\r\n }\r\n}\r\n","<div class=\"my-2 p-4 rounded bg-white flex border-1 flex-row items-center text-right border-gray-600 flex-row-reverse\">\r\n <div class=\"me-4 ms-4 text-gray-600\">\r\n <fa-icon [icon]=\"iconTextMapper.getIconForMessageType('human')\" size=\"2x\"></fa-icon>\r\n </div>\r\n <div class=\"m-0 flex-grow\">\r\n <div class=\"template border-b-1 border-gray-600 p-3\">{{this.agent()!.llmUserPrompt?.template}}</div>\r\n <hr />\r\n <div class=\"inputs mt-2\">\r\n <form [formGroup]=\"form!\">\r\n <div class=\"flex justify-end\">\r\n @for (controlName of getInputFormControlNames(); track controlName) {\r\n <div>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"{{ controlName}}\" formControlName=\"{{ controlName }}\" pInputText\r\n class=\"w-full\"/>\r\n <label for=\"{{ controlName }}\">{{ controlName }}</label>\r\n </p-floatlabel>\r\n <sftech-form-error-display [control]=\"form!.get(controlName)!\"\r\n [label]=\"controlName\"></sftech-form-error-display>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"mt-2\">\r\n <p-button type=\"submit\" label=\"Senden\" (onClick)=\"run()\" tabindex=\"1\"/>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>","import { JsonPipe, NgClass } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { MarkdownComponent } from 'ngx-markdown';\r\nimport { Skeleton } from 'primeng/skeleton';\r\nimport { AgentRunIconTextDataprovider } from '../../core/dataprovider/agent-run-icon-text.dataprovider';\r\n\r\n@Component({\r\n selector: 'sftech-agent-chat-message',\r\n imports: [NgClass, FaIconComponent, MarkdownComponent, JsonPipe, Skeleton],\r\n templateUrl: './agent-chat-message.component.html',\r\n styleUrl: './agent-chat-message.component.css',\r\n})\r\nexport class AgentChatMessageComponent {\r\n public message = input('message');\r\n public type = input('type');\r\n\r\n public iconTextMapper = AgentRunIconTextDataprovider;\r\n\r\n public extractJson(message: string): string {\r\n const jsonMatch = message.match(/```json\\s*([\\s\\S]*?)\\s*```/);\r\n if (jsonMatch && jsonMatch[1]) {\r\n try {\r\n const data = JSON.parse(jsonMatch[1]);\r\n const md = this._toMarkdownFromJson(data);\r\n return md;\r\n } catch (e) {\r\n console.error('Failed to parse JSON:', e);\r\n return 'Invalid JSON';\r\n }\r\n }\r\n return 'No JSON found';\r\n }\r\n\r\n private _toMarkdownFromJson(obj: any): string {\r\n let md = '';\r\n\r\n for (const key of Object.keys(obj)) {\r\n const value = obj[key];\r\n\r\n // Überschrift für jede Kategorie\r\n md += `\\n### ${key}\\n\\n`;\r\n\r\n if (Array.isArray(value) && value.length && typeof value[0] === 'object') {\r\n // Tabellen-Header\r\n const headers = Object.keys(value[0]);\r\n md += `| ${headers.join(' | ')} |\\n`;\r\n md += `| ${headers.map(() => '---').join(' | ')} |\\n`;\r\n\r\n // Tabellen-Zeilen\r\n for (const row of value) {\r\n md += `| ${headers.map((h) => row[h]).join(' | ')} |\\n`;\r\n }\r\n md += '\\n';\r\n } else if (typeof value === 'object') {\r\n // Rekursiver Aufruf bei verschachtelten Objekten\r\n md += this._toMarkdownFromJson(value);\r\n } else {\r\n // Einfaches Feld\r\n md += `- **${key}:** ${value}\\n`;\r\n }\r\n }\r\n\r\n return md;\r\n }\r\n}\r\n","@if (type() === 'ai_loading') {\r\n <div class=\"p-4 rounded bg-white flex border-1 flex-row items-center\">\r\n <div class=\"me-4 ms-4 text-green-600\">\r\n <fa-icon [icon]=\"iconTextMapper.getIconForMessageType('ai')\" size=\"2x\"></fa-icon>\r\n </div>\r\n <div class=\"m-0 w-full\">\r\n <div class=\"flex space-x-2 justify-start items-center\">\r\n <div class=\"me-4\">Die Antwort wird ermittelt</div>\r\n <div class=\"w-3 h-3 bg-green-600 rounded-full animate-bounceDelay\"></div>\r\n <div class=\"w-3 h-3 bg-green-600 rounded-full animate-bounceDelay [animation-delay:-0.32s]\"></div>\r\n <div class=\"w-3 h-3 bg-green-600 rounded-full animate-bounceDelay [animation-delay:-0.16s]\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n} @else if (type() === 'ai_failed') {\r\n <div class=\"p-4 rounded bg-red-100 flex border-1 flex-row items-center\">\r\n <div class=\"me-4 ms-4 text-green-600\">\r\n <fa-icon [icon]=\"iconTextMapper.getIconForMessageType('ai')\" size=\"2x\"></fa-icon>\r\n </div>\r\n <div class=\"m-0 w-full\">\r\n {{\r\n message()\r\n }}\r\n </div>\r\n\r\n </div>\r\n\r\n} @else {\r\n <div class=\"p-4 rounded bg-white flex border-1 flex-row items-center\" [ngClass]=\"{\r\n 'border-green-600 bg-green-200': type() === 'ai',\r\n 'text-right border-gray-600 flex-row-reverse': type() === 'human',\r\n 'border-yellow-600 bg-yellow-100': type() === 'system',\r\n }\">\r\n <div class=\"me-4 ms-4\" [ngClass]=\"{\r\n 'text-green-600': type() === 'ai',\r\n 'text-gray-600': type() === 'human',\r\n 'text-yellow-600': type() === 'system',\r\n }\">\r\n <fa-icon [icon]=\"iconTextMapper.getIconForMessageType(type())\" size=\"2x\"></fa-icon>\r\n </div>\r\n @if (message().includes('```json')) {\r\n <div class=\"m-0 prose prose-sm max-w-none\" markdown>{{ extractJson(message()) }}</div>\r\n } @else {\r\n <div class=\"m-0\" markdown>{{ message() }}</div>\r\n }\r\n </div>\r\n}\r\n\r\n\r\n\r\n","import { DatePipe } from '@angular/common';\r\nimport { Component, OnDestroy, OnInit, computed, effect, inject, signal } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { EFilterOperator, EFilterTypes, ESortDirection, IconProvider, MappedApiError, MappedOdataResponse, OData, OdataFilter } from '@sftech/ng-shared';\r\nimport { MessageService } from 'primeng/api';\r\nimport { ButtonDirective } from 'primeng/button';\r\nimport { Panel } from 'primeng/panel';\r\nimport { Subscription, map } from 'rxjs';\r\nimport { IChatMessageResponseDto } from '../../core/dtos/chat-message-response.dto';\r\nimport { EAgentRunStatus } from '../../core/enums/agent-run-status.enum';\r\nimport { AgentRun } from '../../core/models/agent-run.model';\r\nimport { Agent } from '../../core/models/agent.model';\r\nimport { ChatMessage } from '../../core/models/chat-message.model';\r\nimport { Chat } from '../../core/models/chat.model';\r\nimport { AgentRunService } from '../../core/service/agent-run.service';\r\nimport { AgentService } from '../../core/service/agent.service';\r\nimport { ChatService } from '../../core/service/chat.service';\r\nimport { OrchestratorService } from '../../core/service/orchestrator.service';\r\nimport { AgentRunIconTextDataprovider } from '../core/dataprovider/agent-run-icon-text.dataprovider';\r\nimport { AgentChatMessageHumanInputComponent } from './agent-chat-message-human-input/agent-chat-message-human-input.component';\r\nimport { AgentChatMessageComponent } from './agent-chat-message/agent-chat-message.component';\r\n\r\n@Component({\r\n selector: 'sftech-agent-chat',\r\n imports: [Panel, ButtonDirective, AgentChatMessageComponent, DatePipe, FaIconComponent, AgentChatMessageHumanInputComponent],\r\n templateUrl: './agent-chat.component.html',\r\n styleUrl: './agent-chat.component.css',\r\n})\r\nexport class AgentChatComponent implements OnInit, OnDestroy {\r\n protected readonly activeRoute = inject(ActivatedRoute);\r\n protected readonly router = inject(Router);\r\n\r\n protected readonly agentService = inject(AgentService);\r\n protected readonly agentRunService = inject(AgentRunService);\r\n protected readonly chatService = inject(ChatService);\r\n protected readonly orchestratorService = inject(OrchestratorService);\r\n protected readonly messageService = inject(MessageService);\r\n\r\n protected agent!: Agent;\r\n\r\n protected readonly agentRuns = signal<AgentRun[] | undefined>(undefined);\r\n\r\n protected selectedAgentRun = signal<AgentRun | undefined>(undefined);\r\n protected selectedAgent = signal<Agent | undefined>(undefined);\r\n\r\n public iconProvider = IconProvider;\r\n public iconTextMapper = AgentRunIconTextDataprovider;\r\n public agentRunStatus = EAgentRunStatus;\r\n\r\n public subscriptions: Subscription[] = [];\r\n\r\n protected selectedAgentRunChanged$ = effect(() => {\r\n if (!this.selectedAgentRun()) {\r\n return;\r\n }\r\n });\r\n\r\n public loading = computed(() => {\r\n if (!this.selectedAgentRun()?.status) {\r\n return false;\r\n }\r\n return ![EAgentRunStatus.COMPLETED, EAgentRunStatus.CLARIFICATION_NEEDED, EAgentRunStatus.FAILED, EAgentRunStatus.INIT].includes(this.selectedAgentRun()!.status);\r\n });\r\n\r\n public ngOnInit(): void {\r\n console.log('ngOnInit');\r\n const agentId = Number(this.activeRoute.snapshot.paramMap.get('agentId'));\r\n const agentRunId = Number(this.activeRoute.snapshot.paramMap.get('agentRunId'));\r\n if (agentId) {\r\n const odata = new OData();\r\n odata.filter.addAnd(new OdataFilter('agentId', agentId, EFilterOperator.EQUALS, EFilterTypes.NUMERIC));\r\n odata.order.column = 'updatedAt';\r\n odata.order.direction = ESortDirection.DESC;\r\n this.agentRunService\r\n .odata(odata)\r\n .pipe(\r\n map((res: MappedOdataResponse<AgentRun> | MappedApiError) => {\r\n if (res instanceof MappedApiError) {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: 'Fehler beim Laden der Chat-Daten',\r\n });\r\n throw new Error(res.messages.join('|'));\r\n }\r\n this.selectedAgentRun.set(res.data.items.find((ar) => agentRunId == ar.id));\r\n this.agentRuns.set(res.data.items);\r\n }),\r\n )\r\n .subscribe();\r\n this.agentService.get(agentId, true).subscribe((res) => {\r\n if (res instanceof MappedApiError) {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: 'Fehler beim Laden des Agenten-Daten',\r\n });\r\n throw new Error(res.messages.join('|'));\r\n }\r\n this.selectedAgent.set(res.data as Agent);\r\n });\r\n } else {\r\n this.messageService.add({ severity: 'error', summary: 'Error', detail: 'Fehler beim Laden des Agenten' });\r\n // this.router.navigate(['../chats']);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.subscriptions.forEach((subscription) => subscription.unsubscribe());\r\n }\r\n\r\n public startNewRun(): void {\r\n if (!this.selectedAgent()) {\r\n return;\r\n }\r\n const agentRun = new AgentRun();\r\n agentRun.agentId = this.selectedAgent()!.id;\r\n agentRun.agent = this.selectedAgent();\r\n agentRun.status = EAgentRunStatus.INIT;\r\n agentRun.createdAt = new Date();\r\n agentRun.chat = new Chat();\r\n const systemContextMessage = new ChatMessage();\r\n systemContextMessage.messageType = 'system';\r\n systemContextMessage.message = `${this.selectedAgent()!.llmSystemPrompt?.template}Antworte nach folgender Spezifikation:<br>${this.selectedAgent()?.answerSpecification}`;\r\n agentRun.chat.messages = [systemContextMessage];\r\n this.selectedAgentRun.set(agentRun);\r\n }\r\n\r\n public selectAgentRun(agentRun: AgentRun): void {\r\n this.selectedAgentRun.set(agentRun);\r\n this._loadChat();\r\n\r\n if (this.selectedAgentRun()!.id) {\r\n this._setRelativeUrl();\r\n }\r\n }\r\n\r\n public startObservingAgentRun(agentRunId: number) {\r\n this.subscriptions.push(\r\n this.orchestratorService.observeAgentRun(agentRunId).subscribe({\r\n next: (update: AgentRun | MappedApiError) => {\r\n if (update instanceof MappedApiError) {\r\n this.messageService.add({ severity: 'error', summary: 'Error', detail: 'Fehler beim Beobachten des Agentenlaufs' });\r\n return;\r\n }\r\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\r\n this.selectedAgentRun.update((agentRun) => {\r\n return this._mapUpdateOnAgentRun(agentRun!, update);\r\n });\r\n if (update.id && this.agentRuns()?.filter((ars) => ars.id === update.id).length === 0) {\r\n this.agentRuns.update((ars) => {\r\n ars?.unshift(update);\r\n return ars;\r\n });\r\n }\r\n },\r\n error: (err) => {\r\n this.messageService.add({ severity: 'error', summary: 'Error', detail: 'Fehler beim Beobachten des Agentenlaufs' });\r\n console.error('Error observing agent run:', err);\r\n },\r\n complete: () => {\r\n console.log('Completed observing agent run');\r\n },\r\n }),\r\n );\r\n }\r\n\r\n public goBack() {\r\n const index = this.router.url.indexOf('/agent/');\r\n const result = this.router.url.substring(0, index);\r\n this.router.navigateByUrl(result);\r\n }\r\n\r\n private _loadChat(): void {\r\n if (!this.selectedAgentRun() || !this.selectedAgentRun()!.chatId) {\r\n return;\r\n }\r\n this.chatService.get(this.selectedAgentRun()!.chatId!, true).subscribe((res) => {\r\n if (res instanceof MappedApiError) {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: 'Fehler beim Laden der Chat-Daten',\r\n });\r\n }\r\n this.selectedAgentRun.update((ar) => {\r\n ar!.chat = res.data as Chat;\r\n return ar;\r\n });\r\n });\r\n }\r\n\r\n private _setRelativeUrl() {\r\n let relativeUrl: string;\r\n if (this.router.url.includes('/r/')) {\r\n const index = this.router.url.indexOf('/r/') + 3; // 3 = Länge von \"/r/\"\r\n const result = this.router.url.substring(0, index);\r\n\r\n relativeUrl = `${result}${this.selectedAgentRun()!.id}`;\r\n } else {\r\n relativeUrl = `r/${this.selectedAgentRun()!.id}`;\r\n }\r\n this.router.navigate([relativeUrl], {\r\n relativeTo: this.activeRoute,\r\n replaceUrl: true, // überschreibt den Verlauf\r\n skipLocationChange: false, // false = URL sichtbar, true = nur intern\r\n });\r\n }\r\n\r\n private _mapUpdateOnAgentRun(agentRun: AgentRun, update: AgentRun): AgentRun {\r\n if (!agentRun.chat?.messages && !update.chat?.messages) {\r\n return update;\r\n }\r\n\r\n if (!update.chat && agentRun.chat) {\r\n update.chat = agentRun.chat;\r\n }\r\n\r\n if (agentRun.chat?.messages && update.chat!.messages.length <= agentRun.chat!.messages.length) {\r\n update.chat!.messages = agentRun.chat!.messages;\r\n }\r\n console.log('Mapped AgentRun:', update.chat!.messages.length, agentRun.chat!.messages.length);\r\n return update;\r\n }\r\n}\r\n","<div class=\"flex h-full shadow-lg\">\r\n <div class=\"chats-panel border-r-1 border-gray-300 p-2 w-[250px] flex-shrink-0 h-full\">\r\n <div class=\"flex justify-between\">\r\n <div (click)=\"goBack()\" tabindex=\"2\">\r\n <fa-icon [icon]=\"iconProvider.back\" class=\"me-3\"></fa-icon>\r\n </div>\r\n <h2 class=\"text-2xl font-bold mb-4\">{{ selectedAgent()?.name }}</h2>\r\n </div>\r\n @if (selectedAgent()) {\r\n <div class=\"mt-0 mb-2\">\r\n <button pButton type=\"button\" class=\"w-full mt-4\" (click)=\"startNewRun()\" tabindex=\"3\">\r\n <fa-icon [icon]=\"iconProvider.add\"></fa-icon>\r\n neu\r\n </button>\r\n </div>\r\n }\r\n <div class=\"p-1 m-2 border-1 border-gray-300 rounded-lg bg-white max-h-[calc(100%-120px)] overflow-y-auto\">\r\n\r\n\r\n @if (agentRuns() === undefined) {\r\n\r\n <p class=\"m-0\">\r\n Die Chats werden geladen...\r\n </p>\r\n } @else if (!agentRuns()?.length) {\r\n <p class=\"m-0\">\r\n Bisher noch keine Chats vorhanden\r\n </p>\r\n } @else {\r\n <div class=\"my-2 mx-2 flex flex-col gap-1 overflow-y-auto\">\r\n @for (agentRun of agentRuns(); track agentRun) {\r\n <div class=\"border border-gray-300 rounded-lg p-4 hover:shadow-lg transition cursor-pointer\"\r\n (click)=\"selectAgentRun(agentRun)\"\r\n [class.bg-blue-100]=\"selectedAgentRun()?.id === agentRun.id\">\r\n <div class=\"text-sm text-gray-500\">{{ agentRun.createdAt | date:'dd.MM.YY - hh:mm' }}</div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"chat bg-gray-50 flex-grow-1 p-3 overflow-y-auto m-1\">\r\n @if (selectedAgentRun() === undefined) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Bitte einen Chat aus der linken Liste auswählen\r\n </p>\r\n </p-panel>\r\n } @else if (selectedAgent() === undefined) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Die Chat-Daten werden geladen...\r\n </p>\r\n </p-panel>\r\n } @else {\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"border-b border-gray-300 pb-2 mb-2 flex justify-between\">\r\n <h2 class=\"text-xl font-semibold\">\r\n Agent: {{ selectedAgent()?.name }}\r\n vom {{ (selectedAgentRun()?.createdAt ?? selectedAgentRun()?.startedAt | date:'dd.MM.yyyy - hh:mm') }}</h2>\r\n <p class=\"text-gray-600 font-bold\">Status:\r\n <fa-icon [icon]=\"iconTextMapper.getIconForStatus(selectedAgentRun()?.status)\" size=\"2x\"\r\n [classList]=\"iconTextMapper.getIconClassesForStatus(selectedAgentRun()?.status)\"\r\n [animation]=\"selectedAgentRun()?.status === 'running' ? 'spin' : undefined\"\r\n class=\"ms-2\"></fa-icon>\r\n </p>\r\n </div>\r\n @if (selectedAgentRun()!.chat) {\r\n @for (message of selectedAgentRun()!.chat!.messages; track message.id) {\r\n <div class=\"mb-2\">\r\n <sftech-agent-chat-message [message]=\"message.message\"\r\n [type]=\"message.messageType\"></sftech-agent-chat-message>\r\n </div>\r\n }\r\n }\r\n @if (selectedAgentRun()!.status === agentRunStatus.INIT) {\r\n <sftech-agent-chat-message-human-input [agent]=\"selectedAgent()\"\r\n (agentRunIdReceived)=\"startObservingAgentRun($event)\"></sftech-agent-chat-message-human-input>\r\n }\r\n @if (loading()) {\r\n <div class=\"mb-2\">\r\n <sftech-agent-chat-message [message]=\"'Am Überlegen'\"\r\n [type]=\"'ai_loading'\"></sftech-agent-chat-message>\r\n </div>\r\n }\r\n @if (selectedAgentRun()?.status === agentRunStatus.FAILED) {\r\n <div class=\"mb-2\">\r\n <sftech-agent-chat-message\r\n [message]=\"'Es ist ein Fehler aufgetreten! Bitte versuche es zu einem späteren Zeitpunkt erneut.'\"\r\n [type]=\"'ai_failed'\"></sftech-agent-chat-message>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, OnInit, inject, signal } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { BaseListComponent, IconProvider, MappedApiError } from '@sftech/ng-shared';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { Panel } from 'primeng/panel';\r\nimport { IAgentCreateDto } from '../../core/dtos/agent-create-request.dto';\r\nimport { IAgentResponseDto } from '../../core/dtos/agent-response.dto';\r\nimport { Agent } from '../../core/models/agent.model';\r\nimport { McpTool } from '../../core/models/mcp-tool.model';\r\nimport { AgentService } from '../../core/service/agent.service';\r\nimport { OrchestratorService } from '../../core/service/orchestrator.service';\r\n\r\n@Component({\r\n selector: 'sftech-agent-selection',\r\n imports: [Panel, RouterLink],\r\n providers: [DialogService],\r\n templateUrl: './agent-selection.component.html',\r\n styleUrl: './agent-selection.component.css',\r\n})\r\nexport class AgentSelectionComponent extends BaseListComponent<Agent, IAgentCreateDto, IAgentCreateDto, IAgentResponseDto> implements OnInit {\r\n protected _repo = inject(AgentService);\r\n protected _route = 'chats/agents';\r\n\r\n protected orchestratorService = inject(OrchestratorService);\r\n protected messageService = inject(MessageService);\r\n protected iconProvider = IconProvider;\r\n\r\n public tools = signal<McpTool[] | undefined>(undefined);\r\n\r\n public override ngOnInit() {\r\n super.ngOnInit();\r\n this.orchestratorService.getTools().subscribe((res) => {\r\n if (res instanceof MappedApiError) {\r\n this.messageService.add({ severity: 'error', summary: 'Fehler', detail: res.messages.join('|') });\r\n return;\r\n }\r\n this.tools.set(res.data);\r\n });\r\n }\r\n\r\n public getToolNames(agent: Agent) {\r\n if (!agent.tools || agent.tools.length === 0) {\r\n return 'Keine Werkzeuge';\r\n }\r\n return agent.tools\r\n .map((tool) => this.tools()?.find((t) => t.identifier === tool)?.name)\r\n .filter((name) => !!name)\r\n .join(' | ');\r\n }\r\n}\r\n","<h2 class=\"mt-4 text-2xl font-bold mb-4\">Agenten Auswahl</h2>\r\n\r\n@if (data() === undefined) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Daten werden geladen...\r\n </p>\r\n </p-panel>\r\n} @else if (!data()?.length) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Keine Daten vorhanden\r\n </p>\r\n </p-panel>\r\n} @else {\r\n <div class=\"grid grid-cols-4 gap-4\">\r\n @for (agent of data(); track agent) {\r\n <div class=\"aspect-square flex justify-between flex-col border border-gray-300 rounded-lg p-4 hover:shadow-lg transition cursor-pointer shadow-xl hover:shadow-sm\" [routerLink]=\"['agent/' + agent.id]\">\r\n <div>\r\n <h2 class=\"text-lg font-semibold mb-6\">{{ agent.name }}</h2>\r\n <p class=\"text-gray-600\">{{ agent.description }}</p>\r\n </div>\r\n <div class=\"text-sm text-gray-500\">Tools: {{ getToolNames(agent) }}</div>\r\n </div>\r\n }\r\n </div>\r\n}","import { Component } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'sftech-chats',\r\n imports: [RouterOutlet],\r\n template: '<router-outlet></router-outlet>',\r\n styles: '',\r\n})\r\nexport class ChatsComponent {}\r\n","import { AuthenticationGuard } from '@sftech/ng-auth';\r\nimport { AgentChatComponent } from './agent-chat/agent-chat.component';\r\nimport { AgentSelectionComponent } from './agent-selection/agent-selection.component';\r\nimport { ChatsComponent } from './chats.component';\r\n\r\nexport const chatsRoutes = [\r\n {\r\n path: '',\r\n component: ChatsComponent,\r\n children: [\r\n {\r\n path: '',\r\n component: AgentSelectionComponent,\r\n },\r\n {\r\n path: 'agent/:agentId/r/:agentRunId',\r\n component: AgentChatComponent,\r\n },\r\n {\r\n path: 'agent/:agentId',\r\n component: AgentChatComponent,\r\n },\r\n ],\r\n canActivate: [AuthenticationGuard],\r\n },\r\n];\r\n"],"names":["AgentRunIconTextDataprovider","i1"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Component, signal, effect } from '@angular/core';
|
|
3
|
-
import * as i1 from '@angular/forms';
|
|
2
|
+
import { Inject, Injectable, inject, Component, signal, effect } from '@angular/core';
|
|
3
|
+
import * as i1$1 from '@angular/forms';
|
|
4
4
|
import { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { BaseDisplayComponent, BaseDialogComponent, BaseListComponent, PaginatorComponent, OData, OdataFilterCollection, OdataFilter, EFilterOperator, EFilterTypes, ODataOrder, ESortDirection
|
|
5
|
+
import { BaseDbApiService, BaseDisplayComponent, BaseDialogComponent, BaseListComponent, PaginatorComponent, OData, OdataFilterCollection, OdataFilter, EFilterOperator, EFilterTypes, ODataOrder, ESortDirection } from '@sftech/ng-shared';
|
|
6
6
|
import { AutoFocus } from 'primeng/autofocus';
|
|
7
7
|
import { Button } from 'primeng/button';
|
|
8
8
|
import { DatePicker } from 'primeng/datepicker';
|
|
@@ -10,12 +10,60 @@ import { DialogService } from 'primeng/dynamicdialog';
|
|
|
10
10
|
import { FloatLabel } from 'primeng/floatlabel';
|
|
11
11
|
import { InputText } from 'primeng/inputtext';
|
|
12
12
|
import { Textarea } from 'primeng/textarea';
|
|
13
|
-
import {
|
|
13
|
+
import { P as Prompt, a as PromptHistory } from './sftech-ng-orchestrator-prompt.model-DhASegzq.mjs';
|
|
14
|
+
import * as i1 from '@angular/common/http';
|
|
15
|
+
import { O as ORCHESTRATOR_CONFIGURATION } from './sftech-ng-orchestrator-sftech-ng-orchestrator-CJMmRHC-.mjs';
|
|
14
16
|
import { DatePipe } from '@angular/common';
|
|
15
17
|
import { Panel } from 'primeng/panel';
|
|
16
|
-
import * as i1$
|
|
18
|
+
import * as i1$2 from 'primeng/table';
|
|
17
19
|
import { TableModule } from 'primeng/table';
|
|
18
20
|
|
|
21
|
+
class PromptService extends BaseDbApiService {
|
|
22
|
+
http;
|
|
23
|
+
config;
|
|
24
|
+
constructor(http, config) {
|
|
25
|
+
super(http, config);
|
|
26
|
+
this.http = http;
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.url = `${this.config.orchestratorDbUrl}/prompts`;
|
|
29
|
+
}
|
|
30
|
+
getNewModel() {
|
|
31
|
+
return new Prompt();
|
|
32
|
+
}
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptService, deps: [{ token: i1.HttpClient }, { token: ORCHESTRATOR_CONFIGURATION }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
34
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptService, providedIn: 'root' });
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptService, decorators: [{
|
|
37
|
+
type: Injectable,
|
|
38
|
+
args: [{ providedIn: 'root' }]
|
|
39
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
40
|
+
type: Inject,
|
|
41
|
+
args: [ORCHESTRATOR_CONFIGURATION]
|
|
42
|
+
}] }] });
|
|
43
|
+
|
|
44
|
+
class PromptHistoryService extends BaseDbApiService {
|
|
45
|
+
http;
|
|
46
|
+
config;
|
|
47
|
+
constructor(http, config) {
|
|
48
|
+
super(http, config);
|
|
49
|
+
this.http = http;
|
|
50
|
+
this.config = config;
|
|
51
|
+
this.url = `${this.config.orchestratorDbUrl}/prompts/histories`;
|
|
52
|
+
}
|
|
53
|
+
getNewModel() {
|
|
54
|
+
return new PromptHistory();
|
|
55
|
+
}
|
|
56
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptHistoryService, deps: [{ token: i1.HttpClient }, { token: ORCHESTRATOR_CONFIGURATION }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
57
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptHistoryService, providedIn: 'root' });
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptHistoryService, decorators: [{
|
|
60
|
+
type: Injectable,
|
|
61
|
+
args: [{ providedIn: 'root' }]
|
|
62
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
63
|
+
type: Inject,
|
|
64
|
+
args: [ORCHESTRATOR_CONFIGURATION]
|
|
65
|
+
}] }] });
|
|
66
|
+
|
|
19
67
|
class PromptHistoryDisplayComponent extends BaseDisplayComponent {
|
|
20
68
|
_repo = inject(PromptHistoryService);
|
|
21
69
|
_route = '/prompts/history';
|
|
@@ -39,7 +87,7 @@ class PromptHistoryDisplayComponent extends BaseDisplayComponent {
|
|
|
39
87
|
throw new Error('Manual creation of PromptHistory is not supported');
|
|
40
88
|
}
|
|
41
89
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptHistoryDisplayComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
42
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: PromptHistoryDisplayComponent, isStandalone: true, selector: "sftech-prompt-history-display", usesInheritance: true, ngImport: i0, template: "<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close({ operation: 'aborted' })\">\n <ng-template #header>\n <div class=\"flex justify-between\">\n <h2 class=\"text-xl font-semibold\">\n Prompt\n @if (model()) {\n <span class=\"ms-1\">{{ this.model()!.identifier }}</span>\n }\n </h2>\n </div>\n </ng-template>\n <ng-template #body>\n @if (model()) {\n <form [formGroup]=\"form\">\n <div class=\"grid grid-cols-4 mb-2 gap-2\">\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\"/>\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"promptId\" formControlName=\"promptId\" pInputText class=\"w-full\"/>\n <label for=\"promptId\">{{ this.model()!.getUiNameForProperty('promptId') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText class=\"w-full\"/>\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\" [showTime]=\"true\"\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"></p-datePicker>\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\n </p-floatlabel>\n </div>\n <div class=\"w-full mb-2\">\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"name\" formControlName=\"name\" pInputText class=\"w-full\"/>\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\n </p-floatlabel>\n </div>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <textarea rows=\"5\" id=\"template\" formControlName=\"template\" pTextarea class=\"w-full\"></textarea>\n <label for=\"template\">{{ this.model()!.getUiNameForProperty('template') }}</label>\n </p-floatlabel>\n </form>\n }\n </ng-template>\n <ng-template #footer>\n </ng-template>\n</sftech-base-dialog>", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: BaseDialogComponent, selector: "sftech-base-dialog", inputs: ["hasHeader", "hasFooter", "showButtons", "headerText"], outputs: ["closed"] }, { kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "variant", "fluid", "pSize"], outputs: ["onResize"] }] });
|
|
90
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: PromptHistoryDisplayComponent, isStandalone: true, selector: "sftech-prompt-history-display", usesInheritance: true, ngImport: i0, template: "<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close({ operation: 'aborted' })\">\n <ng-template #header>\n <div class=\"flex justify-between\">\n <h2 class=\"text-xl font-semibold\">\n Prompt\n @if (model()) {\n <span class=\"ms-1\">{{ this.model()!.identifier }}</span>\n }\n </h2>\n </div>\n </ng-template>\n <ng-template #body>\n @if (model()) {\n <form [formGroup]=\"form\">\n <div class=\"grid grid-cols-4 mb-2 gap-2\">\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\"/>\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"promptId\" formControlName=\"promptId\" pInputText class=\"w-full\"/>\n <label for=\"promptId\">{{ this.model()!.getUiNameForProperty('promptId') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText class=\"w-full\"/>\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\" [showTime]=\"true\"\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"></p-datePicker>\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\n </p-floatlabel>\n </div>\n <div class=\"w-full mb-2\">\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"name\" formControlName=\"name\" pInputText class=\"w-full\"/>\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\n </p-floatlabel>\n </div>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <textarea rows=\"5\" id=\"template\" formControlName=\"template\" pTextarea class=\"w-full\"></textarea>\n <label for=\"template\">{{ this.model()!.getUiNameForProperty('template') }}</label>\n </p-floatlabel>\n </form>\n }\n </ng-template>\n <ng-template #footer>\n </ng-template>\n</sftech-base-dialog>", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: BaseDialogComponent, selector: "sftech-base-dialog", inputs: ["hasHeader", "hasFooter", "showButtons", "headerText"], outputs: ["closed"] }, { kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "variant", "fluid", "pSize"], outputs: ["onResize"] }] });
|
|
43
91
|
}
|
|
44
92
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptHistoryDisplayComponent, decorators: [{
|
|
45
93
|
type: Component,
|
|
@@ -52,7 +100,7 @@ class PromptHistoryListComponent extends BaseListComponent {
|
|
|
52
100
|
_modalComponent = PromptHistoryDisplayComponent;
|
|
53
101
|
detailModalHeaderText = 'Prompt-Details';
|
|
54
102
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptHistoryListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: PromptHistoryListComponent, isStandalone: true, selector: "sftech-prompt-history-list", usesInheritance: true, ngImport: i0, template: "@if (!data()) {\n <p-panel [toggleable]=\"false\">\n <p class=\"m-0\">\n Daten werden geladen...\n </p>\n </p-panel>\n} @else if (data()!.length === 0) {\n <p-panel [toggleable]=\"false\">\n <p class=\"m-0\">\n Es sind keine Prompts vorhanden.\n </p>\n </p-panel>\n} @else if (data()!.length > 0) {\n <p-table [value]=\"data()!\"\n stripedRows\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n selectionMode=\"single\"\n [resizableColumns]=\"true\"\n dataKey=\"id\"\n >\n <ng-template #header>\n <tr>\n @for(column of data()![0].propertiesToShow; track column) {\n <th>\n {{ data()![0].getUiNameForProperty(column) }}\n </th>\n }\n </tr>\n </ng-template>\n <ng-template #body let-prompt>\n <tr (click)=\"openDisplay(prompt.id)\" [pSelectableRow]=\"prompt\">\n @for(column of data()![0].propertiesToShow; track column) {\n <td style=\"white-space: pre-wrap\">\n @if (column === 'createdAt') {\n {{ prompt.getPropertyValue(column) | date: 'dd.MM.yyyy - HH:mm' }}\n } @else {\n {{ prompt.getPropertyValue(column) }}\n }\n </td>\n }\n </tr>\n </ng-template>\n </p-table>\n <sftech-paginator [pagination]=\"odata().pagination\" (odataChanged)=\"updatePagination($event)\"></sftech-paginator>\n}\n\n", styles: [""], dependencies: [{ kind: "component", type: PaginatorComponent, selector: "sftech-paginator", inputs: ["pagination"], outputs: ["odataChanged"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$
|
|
103
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: PromptHistoryListComponent, isStandalone: true, selector: "sftech-prompt-history-list", usesInheritance: true, ngImport: i0, template: "@if (!data()) {\n <p-panel [toggleable]=\"false\">\n <p class=\"m-0\">\n Daten werden geladen...\n </p>\n </p-panel>\n} @else if (data()!.length === 0) {\n <p-panel [toggleable]=\"false\">\n <p class=\"m-0\">\n Es sind keine Prompts vorhanden.\n </p>\n </p-panel>\n} @else if (data()!.length > 0) {\n <p-table [value]=\"data()!\"\n stripedRows\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n selectionMode=\"single\"\n [resizableColumns]=\"true\"\n dataKey=\"id\"\n >\n <ng-template #header>\n <tr>\n @for(column of data()![0].propertiesToShow; track column) {\n <th>\n {{ data()![0].getUiNameForProperty(column) }}\n </th>\n }\n </tr>\n </ng-template>\n <ng-template #body let-prompt>\n <tr (click)=\"openDisplay(prompt.id)\" [pSelectableRow]=\"prompt\">\n @for(column of data()![0].propertiesToShow; track column) {\n <td style=\"white-space: pre-wrap\">\n @if (column === 'createdAt') {\n {{ prompt.getPropertyValue(column) | date: 'dd.MM.yyyy - HH:mm' }}\n } @else {\n {{ prompt.getPropertyValue(column) }}\n }\n </td>\n }\n </tr>\n </ng-template>\n </p-table>\n <sftech-paginator [pagination]=\"odata().pagination\" (odataChanged)=\"updatePagination($event)\"></sftech-paginator>\n}\n\n", styles: [""], dependencies: [{ kind: "component", type: PaginatorComponent, selector: "sftech-paginator", inputs: ["pagination"], outputs: ["odataChanged"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i1$2.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }] });
|
|
56
104
|
}
|
|
57
105
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptHistoryListComponent, decorators: [{
|
|
58
106
|
type: Component,
|
|
@@ -103,12 +151,12 @@ class PromptDisplayComponent extends BaseDisplayComponent {
|
|
|
103
151
|
return odata;
|
|
104
152
|
}
|
|
105
153
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
106
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: PromptDisplayComponent, isStandalone: true, selector: "sftech-prompt-display", providers: [DialogService], usesInheritance: true, ngImport: i0, template: "<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close({ operation: 'aborted' })\">\r\n <ng-template #header>\r\n <div class=\"flex justify-between\">\r\n <h2 class=\"text-xl font-semibold\">\r\n Prompt\r\n @if (model()) {\r\n <span class=\"ms-1\">{{ this.model()!.identifier }}</span>\r\n }\r\n </h2>\r\n </div>\r\n </ng-template>\r\n <ng-template #body>\r\n @if (model()) {\r\n <form [formGroup]=\"form\" [pAutoFocus]=\"true\" class=\"mb-5\">\r\n <div class=\"grid grid-cols-3 mb-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\" />\r\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText class=\"w-full\" />\r\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\" [showTime]=\"true\"\r\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"></p-datePicker>\r\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\r\n </p-floatlabel>\r\n </div>\r\n <p-floatlabel variant=\"in\" class=\"w-full mb-2\">\r\n <input type=\"text\" id=\"name\" formControlName=\"name\" pInputText class=\"w-full\"/>\r\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <textarea rows=\"5\" id=\"template\" formControlName=\"template\" pTextarea class=\"w-full\"></textarea>\r\n <label for=\"template\">{{ this.model()!.getUiNameForProperty('template') }}</label>\r\n </p-floatlabel>\r\n <div class=\"flex justify-end mt-2\">\r\n <p-button label=\"Speichern\" type=\"submit\" (onClick)=\"submitForm()\" (keyup.enter)=\"submitForm()\" [disabled]=\"!form.dirty\"></p-button>\r\n </div>\r\n </form>\r\n @if (odataForHistories()) {\r\n <hr class=\"text-gray-200 my-3 w-full\" />\r\n <h2 class=\"font-bold mt-2 mb-5\">Prompt-History</h2>\r\n <sftech-prompt-history-list [odata]=\"odataForHistories()!\" [canEdit]=\"false\" [openDisplayAsModal]=\"true\"></sftech-prompt-history-list>\r\n }\r\n }\r\n </ng-template>\r\n <ng-template #footer>\r\n\r\n </ng-template>\r\n</sftech-base-dialog>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "directive", type: AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus", "pAutoFocus"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "variant", "fluid", "pSize"], outputs: ["onResize"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: BaseDialogComponent, selector: "sftech-base-dialog", inputs: ["hasHeader", "hasFooter", "showButtons", "headerText"], outputs: ["closed"] }, { kind: "component", type: PromptHistoryListComponent, selector: "sftech-prompt-history-list" }] });
|
|
154
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: PromptDisplayComponent, isStandalone: true, selector: "sftech-prompt-display", providers: [DialogService], usesInheritance: true, ngImport: i0, template: "<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close({ operation: 'aborted' })\">\r\n <ng-template #header>\r\n <div class=\"flex justify-between\">\r\n <h2 class=\"text-xl font-semibold\">\r\n Prompt\r\n @if (model()) {\r\n <span class=\"ms-1\">{{ this.model()!.identifier }}</span>\r\n }\r\n </h2>\r\n </div>\r\n </ng-template>\r\n <ng-template #body>\r\n @if (model()) {\r\n <form [formGroup]=\"form\" [pAutoFocus]=\"true\" class=\"mb-5\">\r\n <div class=\"grid grid-cols-3 mb-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\" />\r\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText class=\"w-full\" />\r\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\" [showTime]=\"true\"\r\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"></p-datePicker>\r\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\r\n </p-floatlabel>\r\n </div>\r\n <p-floatlabel variant=\"in\" class=\"w-full mb-2\">\r\n <input type=\"text\" id=\"name\" formControlName=\"name\" pInputText class=\"w-full\"/>\r\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <textarea rows=\"5\" id=\"template\" formControlName=\"template\" pTextarea class=\"w-full\"></textarea>\r\n <label for=\"template\">{{ this.model()!.getUiNameForProperty('template') }}</label>\r\n </p-floatlabel>\r\n <div class=\"flex justify-end mt-2\">\r\n <p-button label=\"Speichern\" type=\"submit\" (onClick)=\"submitForm()\" (keyup.enter)=\"submitForm()\" [disabled]=\"!form.dirty\"></p-button>\r\n </div>\r\n </form>\r\n @if (odataForHistories()) {\r\n <hr class=\"text-gray-200 my-3 w-full\" />\r\n <h2 class=\"font-bold mt-2 mb-5\">Prompt-History</h2>\r\n <sftech-prompt-history-list [odata]=\"odataForHistories()!\" [canEdit]=\"false\" [openDisplayAsModal]=\"true\"></sftech-prompt-history-list>\r\n }\r\n }\r\n </ng-template>\r\n <ng-template #footer>\r\n\r\n </ng-template>\r\n</sftech-base-dialog>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "directive", type: AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus", "pAutoFocus"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "variant", "fluid", "pSize"], outputs: ["onResize"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: BaseDialogComponent, selector: "sftech-base-dialog", inputs: ["hasHeader", "hasFooter", "showButtons", "headerText"], outputs: ["closed"] }, { kind: "component", type: PromptHistoryListComponent, selector: "sftech-prompt-history-list" }] });
|
|
107
155
|
}
|
|
108
156
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PromptDisplayComponent, decorators: [{
|
|
109
157
|
type: Component,
|
|
110
|
-
args: [{ selector: 'sftech-prompt-display', imports: [ReactiveFormsModule, InputText, AutoFocus, FloatLabel, DatePicker, Textarea, Button, BaseDialogComponent, PromptHistoryListComponent
|
|
158
|
+
args: [{ selector: 'sftech-prompt-display', imports: [ReactiveFormsModule, InputText, AutoFocus, FloatLabel, DatePicker, Textarea, Button, BaseDialogComponent, PromptHistoryListComponent], providers: [DialogService], template: "<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close({ operation: 'aborted' })\">\r\n <ng-template #header>\r\n <div class=\"flex justify-between\">\r\n <h2 class=\"text-xl font-semibold\">\r\n Prompt\r\n @if (model()) {\r\n <span class=\"ms-1\">{{ this.model()!.identifier }}</span>\r\n }\r\n </h2>\r\n </div>\r\n </ng-template>\r\n <ng-template #body>\r\n @if (model()) {\r\n <form [formGroup]=\"form\" [pAutoFocus]=\"true\" class=\"mb-5\">\r\n <div class=\"grid grid-cols-3 mb-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\" />\r\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText class=\"w-full\" />\r\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\" [showTime]=\"true\"\r\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"></p-datePicker>\r\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\r\n </p-floatlabel>\r\n </div>\r\n <p-floatlabel variant=\"in\" class=\"w-full mb-2\">\r\n <input type=\"text\" id=\"name\" formControlName=\"name\" pInputText class=\"w-full\"/>\r\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <textarea rows=\"5\" id=\"template\" formControlName=\"template\" pTextarea class=\"w-full\"></textarea>\r\n <label for=\"template\">{{ this.model()!.getUiNameForProperty('template') }}</label>\r\n </p-floatlabel>\r\n <div class=\"flex justify-end mt-2\">\r\n <p-button label=\"Speichern\" type=\"submit\" (onClick)=\"submitForm()\" (keyup.enter)=\"submitForm()\" [disabled]=\"!form.dirty\"></p-button>\r\n </div>\r\n </form>\r\n @if (odataForHistories()) {\r\n <hr class=\"text-gray-200 my-3 w-full\" />\r\n <h2 class=\"font-bold mt-2 mb-5\">Prompt-History</h2>\r\n <sftech-prompt-history-list [odata]=\"odataForHistories()!\" [canEdit]=\"false\" [openDisplayAsModal]=\"true\"></sftech-prompt-history-list>\r\n }\r\n }\r\n </ng-template>\r\n <ng-template #footer>\r\n\r\n </ng-template>\r\n</sftech-base-dialog>\r\n" }]
|
|
111
159
|
}], ctorParameters: () => [] });
|
|
112
160
|
|
|
113
|
-
export {
|
|
114
|
-
//# sourceMappingURL=sftech-ng-orchestrator-prompt-display.component-
|
|
161
|
+
export { PromptService as P, PromptDisplayComponent as a };
|
|
162
|
+
//# sourceMappingURL=sftech-ng-orchestrator-prompt-display.component-Cd6Ff3KE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sftech-ng-orchestrator-prompt-display.component-Cd6Ff3KE.mjs","sources":["../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/service/prompt.service.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/service/prompt-history.service.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt-history/prompt-history-display/prompt-history-display.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt-history/prompt-history-display/prompt-history-display.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt-history/prompt-history-list/prompt-history-list.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt-history/prompt-history-list/prompt-history-list.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt/prompt-display/prompt-display.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt/prompt-display/prompt-display.component.html"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { BaseDbApiService } from '@sftech/ng-shared';\r\nimport { IOrchestratorConfig } from '../configuration/orchestrator-config.interface';\r\nimport { ORCHESTRATOR_CONFIGURATION } from '../configuration/orchestrator-configuration.token';\r\nimport { IPromptResponseDto } from '../dtos/prompt-request.dto';\r\nimport { IPromptUpdateDto } from '../dtos/prompt-update.dto';\r\nimport { Prompt } from '../models/prompt.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PromptService extends BaseDbApiService<Prompt, IPromptUpdateDto, IPromptUpdateDto, IPromptResponseDto> {\r\n constructor(\r\n protected override readonly http: HttpClient,\r\n @Inject(ORCHESTRATOR_CONFIGURATION) protected override readonly config: IOrchestratorConfig,\r\n ) {\r\n super(http, config);\r\n this.url = `${this.config.orchestratorDbUrl}/prompts`;\r\n }\r\n\r\n protected getNewModel(): Prompt {\r\n return new Prompt();\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { BaseDbApiService } from '@sftech/ng-shared';\r\nimport { IOrchestratorConfig } from '../configuration/orchestrator-config.interface';\r\nimport { ORCHESTRATOR_CONFIGURATION } from '../configuration/orchestrator-configuration.token';\r\nimport { IPromptHistoryResponseDto } from '../dtos/prompt-history-response.dto';\r\nimport { IPromptHistoryUpdateDto } from '../dtos/prompt-history-update.dto';\r\nimport { PromptHistory } from '../models/prompt-history.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PromptHistoryService extends BaseDbApiService<PromptHistory, IPromptHistoryUpdateDto, IPromptHistoryUpdateDto, IPromptHistoryResponseDto> {\r\n constructor(\r\n protected override readonly http: HttpClient,\r\n @Inject(ORCHESTRATOR_CONFIGURATION) protected override readonly config: IOrchestratorConfig,\r\n ) {\r\n super(http, config);\r\n this.url = `${this.config.orchestratorDbUrl}/prompts/histories`;\r\n }\r\n\r\n protected getNewModel(): PromptHistory {\r\n return new PromptHistory();\r\n }\r\n}\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { BaseDialogComponent, BaseDisplayComponent } from '@sftech/ng-shared';\r\nimport { DatePicker } from 'primeng/datepicker';\r\nimport { FloatLabel } from 'primeng/floatlabel';\r\nimport { InputText } from 'primeng/inputtext';\r\nimport { Textarea } from 'primeng/textarea';\r\nimport { IPromptHistoryCreateDto } from '../../../../../core/dtos/prompt-history-create.dto';\r\nimport { IPromptHistoryResponseDto } from '../../../../../core/dtos/prompt-history-response.dto';\r\nimport { IPromptHistoryUpdateDto } from '../../../../../core/dtos/prompt-history-update.dto';\r\nimport { PromptHistory } from '../../../../../core/models/prompt-history.model';\r\nimport { PromptHistoryService } from '../../../../../core/service/prompt-history.service';\r\n\r\n@Component({\r\n selector: 'sftech-prompt-history-display',\r\n standalone: true,\r\n imports: [ReactiveFormsModule, BaseDialogComponent, DatePicker, FloatLabel, InputText, Textarea],\r\n templateUrl: './prompt-history-display.component.html',\r\n styleUrl: './prompt-history-display.component.css',\r\n})\r\nexport class PromptHistoryDisplayComponent extends BaseDisplayComponent<PromptHistory, IPromptHistoryCreateDto, IPromptHistoryUpdateDto, IPromptHistoryResponseDto> implements OnInit {\r\n protected override _repo = inject(PromptHistoryService);\r\n protected override _route = '/prompts/history';\r\n\r\n protected override initializeForm(): FormGroup {\r\n return new FormGroup({\r\n id: new FormControl({ value: this.model()!.id, disabled: true }),\r\n createdAt: new FormControl({ value: this.model()!.createdAt, disabled: true }),\r\n identifier: new FormControl({ value: this.model()!.identifier, disabled: true }),\r\n template: new FormControl({ value: this.model()!.template, disabled: this.canEdit }),\r\n name: new FormControl({ value: this.model()!.name, disabled: this.canEdit }),\r\n promptId: new FormControl({ value: this.model()!.promptId, disabled: this.canEdit }),\r\n });\r\n }\r\n protected override getNewModel(): PromptHistory {\r\n return new PromptHistory();\r\n }\r\n protected override mapFormToUpdateDto(): IPromptHistoryUpdateDto {\r\n throw new Error('Edit of PromptHistory is not supported');\r\n }\r\n protected override mapFormToCreateDto(): IPromptHistoryCreateDto {\r\n throw new Error('Manual creation of PromptHistory is not supported');\r\n }\r\n}\r\n","<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close({ operation: 'aborted' })\">\n <ng-template #header>\n <div class=\"flex justify-between\">\n <h2 class=\"text-xl font-semibold\">\n Prompt\n @if (model()) {\n <span class=\"ms-1\">{{ this.model()!.identifier }}</span>\n }\n </h2>\n </div>\n </ng-template>\n <ng-template #body>\n @if (model()) {\n <form [formGroup]=\"form\">\n <div class=\"grid grid-cols-4 mb-2 gap-2\">\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\"/>\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"promptId\" formControlName=\"promptId\" pInputText class=\"w-full\"/>\n <label for=\"promptId\">{{ this.model()!.getUiNameForProperty('promptId') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText class=\"w-full\"/>\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\n </p-floatlabel>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\" [showTime]=\"true\"\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"></p-datePicker>\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\n </p-floatlabel>\n </div>\n <div class=\"w-full mb-2\">\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <input type=\"text\" id=\"name\" formControlName=\"name\" pInputText class=\"w-full\"/>\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\n </p-floatlabel>\n </div>\n <p-floatlabel variant=\"in\" class=\"w-full\">\n <textarea rows=\"5\" id=\"template\" formControlName=\"template\" pTextarea class=\"w-full\"></textarea>\n <label for=\"template\">{{ this.model()!.getUiNameForProperty('template') }}</label>\n </p-floatlabel>\n </form>\n }\n </ng-template>\n <ng-template #footer>\n </ng-template>\n</sftech-base-dialog>","import { DatePipe } from '@angular/common';\r\nimport { Component, OnInit, inject } from '@angular/core';\r\nimport { BaseListComponent, PaginatorComponent } from '@sftech/ng-shared';\r\nimport { Panel } from 'primeng/panel';\r\nimport { TableModule } from 'primeng/table';\r\nimport { IPromptHistoryCreateDto } from '../../../../../core/dtos/prompt-history-create.dto';\r\nimport { IPromptHistoryResponseDto } from '../../../../../core/dtos/prompt-history-response.dto';\r\nimport { IPromptHistoryUpdateDto } from '../../../../../core/dtos/prompt-history-update.dto';\r\nimport { PromptHistory } from '../../../../../core/models/prompt-history.model';\r\nimport { PromptHistoryService } from '../../../../../core/service/prompt-history.service';\r\nimport { PromptHistoryDisplayComponent } from '../prompt-history-display/prompt-history-display.component';\r\n\r\n@Component({\r\n selector: 'sftech-prompt-history-list',\r\n standalone: true,\r\n imports: [PaginatorComponent, DatePipe, Panel, TableModule],\r\n templateUrl: './prompt-history-list.component.html',\r\n styleUrl: './prompt-history-list.component.scss',\r\n})\r\nexport class PromptHistoryListComponent extends BaseListComponent<PromptHistory, IPromptHistoryCreateDto, IPromptHistoryUpdateDto, IPromptHistoryResponseDto> implements OnInit {\r\n protected override _repo = inject(PromptHistoryService);\r\n protected override _route = '/prompting/prompt-history';\r\n protected override _modalComponent = PromptHistoryDisplayComponent;\r\n protected override detailModalHeaderText = 'Prompt-Details';\r\n}\r\n","@if (!data()) {\n <p-panel [toggleable]=\"false\">\n <p class=\"m-0\">\n Daten werden geladen...\n </p>\n </p-panel>\n} @else if (data()!.length === 0) {\n <p-panel [toggleable]=\"false\">\n <p class=\"m-0\">\n Es sind keine Prompts vorhanden.\n </p>\n </p-panel>\n} @else if (data()!.length > 0) {\n <p-table [value]=\"data()!\"\n stripedRows\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n selectionMode=\"single\"\n [resizableColumns]=\"true\"\n dataKey=\"id\"\n >\n <ng-template #header>\n <tr>\n @for(column of data()![0].propertiesToShow; track column) {\n <th>\n {{ data()![0].getUiNameForProperty(column) }}\n </th>\n }\n </tr>\n </ng-template>\n <ng-template #body let-prompt>\n <tr (click)=\"openDisplay(prompt.id)\" [pSelectableRow]=\"prompt\">\n @for(column of data()![0].propertiesToShow; track column) {\n <td style=\"white-space: pre-wrap\">\n @if (column === 'createdAt') {\n {{ prompt.getPropertyValue(column) | date: 'dd.MM.yyyy - HH:mm' }}\n } @else {\n {{ prompt.getPropertyValue(column) }}\n }\n </td>\n }\n </tr>\n </ng-template>\n </p-table>\n <sftech-paginator [pagination]=\"odata().pagination\" (odataChanged)=\"updatePagination($event)\"></sftech-paginator>\n}\n\n","import { Component, effect, inject, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { BaseDialogComponent, BaseDisplayComponent, EFilterOperator, EFilterTypes, ESortDirection, OData, ODataOrder, OdataFilter, OdataFilterCollection } from '@sftech/ng-shared';\r\nimport { AutoFocus } from 'primeng/autofocus';\r\nimport { Button } from 'primeng/button';\r\nimport { DatePicker } from 'primeng/datepicker';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { FloatLabel } from 'primeng/floatlabel';\r\nimport { InputText } from 'primeng/inputtext';\r\nimport { Textarea } from 'primeng/textarea';\r\nimport { IPromptResponseDto } from '../../../../../core/dtos/prompt-request.dto';\r\nimport { IPromptUpdateDto } from '../../../../../core/dtos/prompt-update.dto';\r\nimport { Prompt } from '../../../../../core/models/prompt.model';\r\nimport { PromptService } from '../../../../../core/service/prompt.service';\r\nimport { PromptHistoryListComponent } from '../../prompt-history/prompt-history-list/prompt-history-list.component';\r\n\r\n@Component({\r\n selector: 'sftech-prompt-display',\r\n imports: [ReactiveFormsModule, InputText, AutoFocus, FloatLabel, DatePicker, Textarea, Button, BaseDialogComponent, PromptHistoryListComponent],\r\n providers: [DialogService],\r\n templateUrl: './prompt-display.component.html',\r\n styleUrl: './prompt-display.component.css',\r\n})\r\nexport class PromptDisplayComponent extends BaseDisplayComponent<Prompt, IPromptUpdateDto, IPromptUpdateDto, IPromptResponseDto> {\r\n protected override _repo = inject(PromptService);\r\n protected override _route = 'prompt';\r\n\r\n public odataForHistories = signal<OData | undefined>(undefined);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.model()?.id) {\r\n this.odataForHistories.set(this.getOdataForHistories());\r\n }\r\n });\r\n }\r\n\r\n protected override initializeForm(): FormGroup {\r\n return new FormGroup({\r\n id: new FormControl({ value: this.model()!.id, disabled: true }),\r\n createdAt: new FormControl({ value: this.model()!.createdAt, disabled: true }),\r\n identifier: new FormControl({ value: this.model()!.identifier, disabled: true }),\r\n template: new FormControl(this.model()?.template),\r\n name: new FormControl(this.model()?.name),\r\n });\r\n }\r\n protected override getNewModel(): Prompt {\r\n return new Prompt();\r\n }\r\n protected override mapFormToUpdateDto(): IPromptUpdateDto {\r\n return {\r\n identifier: this.form.get('identifier')!.value,\r\n template: this.form.get('template')!.value,\r\n name: this.form.get('name')!.value,\r\n };\r\n }\r\n protected override mapFormToCreateDto(): IPromptUpdateDto {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n public getOdataForHistories(): OData {\r\n const odata = new OData();\r\n odata.filter = new OdataFilterCollection();\r\n odata.filter.addAnd(new OdataFilter('promptId', this.model()!.id!, EFilterOperator.EQUALS, EFilterTypes.NUMERIC));\r\n odata.order = new ODataOrder();\r\n odata.order.column = 'createdAt';\r\n odata.order.direction = ESortDirection.DESC;\r\n return odata;\r\n }\r\n}\r\n","<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close({ operation: 'aborted' })\">\r\n <ng-template #header>\r\n <div class=\"flex justify-between\">\r\n <h2 class=\"text-xl font-semibold\">\r\n Prompt\r\n @if (model()) {\r\n <span class=\"ms-1\">{{ this.model()!.identifier }}</span>\r\n }\r\n </h2>\r\n </div>\r\n </ng-template>\r\n <ng-template #body>\r\n @if (model()) {\r\n <form [formGroup]=\"form\" [pAutoFocus]=\"true\" class=\"mb-5\">\r\n <div class=\"grid grid-cols-3 mb-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\" />\r\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText class=\"w-full\" />\r\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\" [showTime]=\"true\"\r\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"></p-datePicker>\r\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\r\n </p-floatlabel>\r\n </div>\r\n <p-floatlabel variant=\"in\" class=\"w-full mb-2\">\r\n <input type=\"text\" id=\"name\" formControlName=\"name\" pInputText class=\"w-full\"/>\r\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <textarea rows=\"5\" id=\"template\" formControlName=\"template\" pTextarea class=\"w-full\"></textarea>\r\n <label for=\"template\">{{ this.model()!.getUiNameForProperty('template') }}</label>\r\n </p-floatlabel>\r\n <div class=\"flex justify-end mt-2\">\r\n <p-button label=\"Speichern\" type=\"submit\" (onClick)=\"submitForm()\" (keyup.enter)=\"submitForm()\" [disabled]=\"!form.dirty\"></p-button>\r\n </div>\r\n </form>\r\n @if (odataForHistories()) {\r\n <hr class=\"text-gray-200 my-3 w-full\" />\r\n <h2 class=\"font-bold mt-2 mb-5\">Prompt-History</h2>\r\n <sftech-prompt-history-list [odata]=\"odataForHistories()!\" [canEdit]=\"false\" [openDisplayAsModal]=\"true\"></sftech-prompt-history-list>\r\n }\r\n }\r\n </ng-template>\r\n <ng-template #footer>\r\n\r\n </ng-template>\r\n</sftech-base-dialog>\r\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { BaseDbModel, EFilterTypes } from '@sftech/ng-shared';
|
|
2
|
+
|
|
3
|
+
class PromptHistory extends BaseDbModel {
|
|
4
|
+
identifier;
|
|
5
|
+
name;
|
|
6
|
+
template;
|
|
7
|
+
promptId;
|
|
8
|
+
propertiesToShow = ['name', 'identifier', 'template', 'promptId', 'createdAt'];
|
|
9
|
+
propertyUINames = new Map([
|
|
10
|
+
['name', 'name'],
|
|
11
|
+
['template', 'template'],
|
|
12
|
+
['histories', 'histories'],
|
|
13
|
+
['promptId', 'Prompt-ID'],
|
|
14
|
+
['createdAt', 'erstellt'],
|
|
15
|
+
]);
|
|
16
|
+
fromDto(dto) {
|
|
17
|
+
const model = new PromptHistory();
|
|
18
|
+
model.id = dto.id;
|
|
19
|
+
model.name = dto.name;
|
|
20
|
+
model.createdAt = new Date(dto.createdAt);
|
|
21
|
+
model.identifier = dto.identifier;
|
|
22
|
+
model.template = dto.template;
|
|
23
|
+
model.promptId = dto.promptId;
|
|
24
|
+
return model;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
class Prompt extends BaseDbModel {
|
|
29
|
+
identifier;
|
|
30
|
+
name;
|
|
31
|
+
template;
|
|
32
|
+
histories = [];
|
|
33
|
+
propertiesToShow = ['name', 'identifier', 'template'];
|
|
34
|
+
propertyUINames = new Map([
|
|
35
|
+
['name', 'Name'],
|
|
36
|
+
['template', 'Template'],
|
|
37
|
+
['identifier', 'identifier'],
|
|
38
|
+
]);
|
|
39
|
+
propertyFilterType = new Map([
|
|
40
|
+
['name', EFilterTypes.STRING],
|
|
41
|
+
['template', EFilterTypes.STRING],
|
|
42
|
+
['identifier', EFilterTypes.STRING],
|
|
43
|
+
]);
|
|
44
|
+
fromDto(dto) {
|
|
45
|
+
const model = new Prompt();
|
|
46
|
+
model.id = dto.id;
|
|
47
|
+
model.createdAt = new Date(dto.createdAt);
|
|
48
|
+
model.name = dto.name;
|
|
49
|
+
model.identifier = dto.identifier;
|
|
50
|
+
model.template = dto.template;
|
|
51
|
+
model.histories = dto.histories ? PromptHistory.fromDtos(dto.histories) : [];
|
|
52
|
+
return model;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { Prompt as P, PromptHistory as a };
|
|
57
|
+
//# sourceMappingURL=sftech-ng-orchestrator-prompt.model-DhASegzq.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sftech-ng-orchestrator-prompt.model-DhASegzq.mjs","sources":["../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/models/prompt-history.model.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/models/prompt.model.ts"],"sourcesContent":["import { BaseDbModel, IBaseDbResponseDto } from '@sftech/ng-shared';\r\nimport { IPromptHistoryResponseDto } from '../dtos/prompt-history-response.dto';\r\nimport { IPromptResponseDto } from '../dtos/prompt-request.dto';\r\n\r\nexport class PromptHistory extends BaseDbModel {\r\n public identifier!: string;\r\n public name!: string;\r\n public template!: string;\r\n public promptId!: number;\r\n\r\n public override propertiesToShow = ['name', 'identifier', 'template', 'promptId', 'createdAt'];\r\n\r\n public override propertyUINames = new Map<string, string>([\r\n ['name', 'name'],\r\n ['template', 'template'],\r\n ['histories', 'histories'],\r\n ['promptId', 'Prompt-ID'],\r\n ['createdAt', 'erstellt'],\r\n ]);\r\n\r\n public override fromDto(dto: IPromptHistoryResponseDto): PromptHistory {\r\n const model = new PromptHistory();\r\n model.id = dto.id;\r\n model.name = dto.name;\r\n model.createdAt = new Date(dto.createdAt);\r\n model.identifier = dto.identifier;\r\n model.template = dto.template;\r\n model.promptId = dto.promptId;\r\n return model;\r\n }\r\n}\r\n","import { BaseDbModel, EFilterTypes, IBaseDbResponseDto } from '@sftech/ng-shared';\r\nimport { IPromptResponseDto } from '../dtos/prompt-request.dto';\r\nimport { PromptHistory } from './prompt-history.model';\r\n\r\nexport class Prompt extends BaseDbModel {\r\n public identifier!: string;\r\n public name!: string;\r\n public template!: string;\r\n public histories: PromptHistory[] = [];\r\n\r\n public override propertiesToShow = ['name', 'identifier', 'template'];\r\n\r\n public override propertyUINames = new Map<string, string>([\r\n ['name', 'Name'],\r\n ['template', 'Template'],\r\n ['identifier', 'identifier'],\r\n ]);\r\n\r\n public override propertyFilterType = new Map<string, EFilterTypes>([\r\n ['name', EFilterTypes.STRING],\r\n ['template', EFilterTypes.STRING],\r\n ['identifier', EFilterTypes.STRING],\r\n ]);\r\n\r\n public override fromDto(dto: IPromptResponseDto): Prompt {\r\n const model = new Prompt();\r\n model.id = dto.id;\r\n model.createdAt = new Date(dto.createdAt);\r\n model.name = dto.name;\r\n model.identifier = dto.identifier;\r\n model.template = dto.template;\r\n model.histories = dto.histories ? (PromptHistory.fromDtos(dto.histories) as PromptHistory[]) : [];\r\n return model;\r\n }\r\n}\r\n"],"names":[],"mappings":";;AAIM,MAAO,aAAc,SAAQ,WAAW,CAAA;AACnC,IAAA,UAAU;AACV,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,QAAQ;AAEC,IAAA,gBAAgB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC;IAE9E,eAAe,GAAG,IAAI,GAAG,CAAiB;QACtD,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,UAAU,EAAE,UAAU,CAAC;QACxB,CAAC,WAAW,EAAE,WAAW,CAAC;QAC1B,CAAC,UAAU,EAAE,WAAW,CAAC;QACzB,CAAC,WAAW,EAAE,UAAU,CAAC;AAC5B,KAAA,CAAC;AAEc,IAAA,OAAO,CAAC,GAA8B,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE;AACjC,QAAA,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;AACjB,QAAA,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;QACrB,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,QAAA,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;AACjC,QAAA,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC7B,QAAA,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC7B,QAAA,OAAO,KAAK;;AAEnB;;AC1BK,MAAO,MAAO,SAAQ,WAAW,CAAA;AAC5B,IAAA,UAAU;AACV,IAAA,IAAI;AACJ,IAAA,QAAQ;IACR,SAAS,GAAoB,EAAE;IAEtB,gBAAgB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC;IAErD,eAAe,GAAG,IAAI,GAAG,CAAiB;QACtD,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,UAAU,EAAE,UAAU,CAAC;QACxB,CAAC,YAAY,EAAE,YAAY,CAAC;AAC/B,KAAA,CAAC;IAEc,kBAAkB,GAAG,IAAI,GAAG,CAAuB;AAC/D,QAAA,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC;AAC7B,QAAA,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC;AACjC,QAAA,CAAC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC;AACtC,KAAA,CAAC;AAEc,IAAA,OAAO,CAAC,GAAuB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE;AAC1B,QAAA,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;QACjB,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,QAAA,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;AACrB,QAAA,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;AACjC,QAAA,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;QAC7B,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,GAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAqB,GAAG,EAAE;AACjG,QAAA,OAAO,KAAK;;AAEnB;;;;"}
|
|
@@ -5,8 +5,7 @@ import { DialogService } from 'primeng/dynamicdialog';
|
|
|
5
5
|
import { Panel } from 'primeng/panel';
|
|
6
6
|
import * as i1 from 'primeng/table';
|
|
7
7
|
import { TableModule } from 'primeng/table';
|
|
8
|
-
import { P as PromptService } from './sftech-ng-orchestrator-prompt.
|
|
9
|
-
import { P as PromptDisplayComponent } from './sftech-ng-orchestrator-prompt-display.component-Cs98Is_J.mjs';
|
|
8
|
+
import { P as PromptService, a as PromptDisplayComponent } from './sftech-ng-orchestrator-prompt-display.component-Cd6Ff3KE.mjs';
|
|
10
9
|
import { RouterOutlet } from '@angular/router';
|
|
11
10
|
|
|
12
11
|
class PromptsListComponent extends BaseListComponent {
|
|
@@ -49,4 +48,4 @@ const promptsRoutes = [
|
|
|
49
48
|
];
|
|
50
49
|
|
|
51
50
|
export { promptsRoutes };
|
|
52
|
-
//# sourceMappingURL=sftech-ng-orchestrator-prompts.routes-
|
|
51
|
+
//# sourceMappingURL=sftech-ng-orchestrator-prompts.routes-DQZ_Hmjs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sftech-ng-orchestrator-prompts.routes-DQZ_Hmjs.mjs","sources":["../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt/prompts-list/prompts-list.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/components/prompt/prompts-list/prompts-list.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/prompts.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/prompts.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/prompts/prompts.routes.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\r\nimport { BaseListComponent, IconProvider, PaginatorComponent } from '@sftech/ng-shared';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { Panel } from 'primeng/panel';\r\nimport { TableModule } from 'primeng/table';\r\nimport { IPromptResponseDto } from '../../../../../core/dtos/prompt-request.dto';\r\nimport { IPromptUpdateDto } from '../../../../../core/dtos/prompt-update.dto';\r\nimport { Prompt } from '../../../../../core/models/prompt.model';\r\nimport { PromptService } from '../../../../../core/service/prompt.service';\r\nimport { PromptDisplayComponent } from '../prompt-display/prompt-display.component';\r\n\r\n@Component({\r\n selector: 'sftech-prompts-list',\r\n imports: [PaginatorComponent, Panel, TableModule],\r\n providers: [DialogService],\r\n templateUrl: './prompts-list.component.html',\r\n styleUrl: './prompts-list.component.css',\r\n})\r\nexport class PromptsListComponent extends BaseListComponent<Prompt, IPromptUpdateDto, IPromptUpdateDto, IPromptResponseDto> {\r\n protected _repo = inject(PromptService);\r\n protected _route = 'prompts';\r\n protected override _modalComponent = PromptDisplayComponent;\r\n protected override detailModalHeaderText = 'Prompt-Details';\r\n\r\n public iconProvider = IconProvider;\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<h1 class=\"text-primary-900 font-bold text-xl p-2 my-4\">Prompt-Übersicht</h1>\r\n@if (!data()) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Daten werden geladen...\r\n </p>\r\n </p-panel>\r\n} @else if (data()!.length === 0) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Es sind keine Prompts vorhanden.\r\n </p>\r\n </p-panel>\r\n} @else if (data()!.length > 0) {\r\n <p-table [value]=\"data()!\"\r\n stripedRows\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n selectionMode=\"single\"\r\n [resizableColumns]=\"true\"\r\n dataKey=\"id\"\r\n >\r\n <ng-template #header>\r\n <tr>\r\n @for(column of data()![0].propertiesToShow; track column) {\r\n <th>{{ data()![0].getUiNameForProperty(column) }}</th>\r\n }\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-prompt>\r\n <tr (click)=\"openDisplay(prompt.id)\" [pSelectableRow]=\"prompt\">\r\n @for(column of data()![0].propertiesToShow; track column) {\r\n <td style=\"white-space: pre-wrap\">\r\n {{ prompt.getPropertyValue(column) }}\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <sftech-paginator [pagination]=\"odata().pagination\" (odataChanged)=\"updatePagination($event)\"></sftech-paginator>\r\n}\r\n\r\n","import { Component } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'sftech-prompts',\r\n imports: [RouterOutlet],\r\n templateUrl: './prompts.component.html',\r\n styleUrl: './prompts.component.css',\r\n})\r\nexport class PromptsComponent {}\r\n","<router-outlet></router-outlet>\r\n\r\n","import { PromptsListComponent } from './components/prompt/prompts-list/prompts-list.component';\r\nimport { PromptsComponent } from './prompts.component';\r\n\r\nexport const promptsRoutes = [\r\n {\r\n path: '',\r\n component: PromptsComponent,\r\n children: [\r\n {\r\n path: '',\r\n component: PromptsListComponent,\r\n },\r\n ],\r\n },\r\n];\r\n"],"names":[],"mappings":"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"}
|