{"version":3,"file":"xxmachina-components-pages-thread.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/pages/thread/thread.page.ts","../../../../../packages/@xxmachina/components/src/lib/pages/thread/xxmachina-components-pages-thread.ts"],"sourcesContent":["import { Component, Directive, effect, HostListener, inject, input, Provider, signal } from \"@angular/core\";\nimport { RouterOutletFrame } from \"@ng-atomic/components/frames/router-outlet\";\nimport { ThreadTemplate } from \"@ng-atomic/components/templates/thread\";\nimport { injectIsRootPage, injectNavStartActionsV2, makeDI, NavActionId } from \"@ng-atomic/common/services/ui\";\nimport { _computed, applyToInput, Effect, InjectableComponent, NavActions, NgAtomicComponent, provideEffect } from \"@ng-atomic/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { QueryActionReducer } from \"@xxmachina/components/pages/query\";\nimport { MessageService } from \"@xxmachina/components/services/message\";\nimport { Message } from \"@ng-atomic/common/models\";\nimport { ContextService } from \"@xxmachina/components/services/context\";\n\nenum ActionId {\n  SEND_MESSAGE = 'send-message',\n}\n\n@Directive({ standalone: true })\nexport class ThreadPageStore extends InjectableComponent {\n  static readonly DI = makeDI(ThreadPageStore, () => () => ({\n    title: 'title',\n    navStartActions: [] as NavActions,\n  }), ['components', 'pages', 'thread'])\n\n  static provideEffects(): Provider[] {\n    return [\n      provideEffect(ActionId.SEND_MESSAGE, () => {\n        const messageService = inject(MessageService);\n        return (message: Message) => {\n          messageService.pushMessage(message);\n        }\n      }),\n      ThreadPageStore.provideNavigationEffects(),\n    ]\n  }\n\n  static provideNavigationEffects(): Provider[] {\n    return [\n      provideEffect(NavActionId.BACK, () => {\n        return () => { history.back() };\n      }),\n    ]\n  }\n\n  static provideNavStartActions(): Provider[] {\n    return [\n      ThreadPageStore.DI.provideInitializer((store) => {\n        const navStartActions = injectNavStartActionsV2();\n        effect(() => applyToInput(store, 'navStartActions', navStartActions()));\n      }),\n    ];\n  }\n\n  readonly isRootPage = injectIsRootPage('side');\n  // readonly navStartActions = injectSideAppNavStartActions(this.isRootPage);\n  readonly config = ThreadPageStore.DI.injectConfig();\n  readonly title = input(_computed(() => this.config().title));\n  readonly navStartActions = input(_computed(() => this.config().navStartActions));\n  readonly actions = signal([\n    { id: ActionId.SEND_MESSAGE, name: '送信', icon: 'send' },\n  ]);\n  protected readonly fb = inject(FormBuilder);\n  readonly form = this.fb.group({\n    message: this.fb.control(''),\n    name: this.fb.control(''),\n    description: this.fb.control(''),\n  });\n  readonly messages = input<{ role: string, content: string }[]>([]);\n\n  constructor() {\n    super();\n    ThreadPageStore.DI.initialize(this);\n  }\n}\n\n@Component({\n  selector: 'app-chat',\n  template: `\n    <frames-router-outlet>\n      <templates-messages\n        [title]=\"store.title()\"\n        [navStartActions]=\"store.navStartActions()\"\n        [form]=\"store.form\"\n        [messages]=\"store.messages()\"\n        [actions]=\"store.actions()\"\n        (action)=\"dispatch($event)\"\n      />\n    </frames-router-outlet>\n  `,\n  styleUrls: ['./thread.page.scss'],\n  imports: [\n    RouterOutletFrame,\n    ThreadTemplate,\n  ],\n  hostDirectives: [\n    {\n      directive: ThreadPageStore,\n      inputs: [\n        'title',\n        'navStartActions',\n        'messages',\n      ]\n    },\n  ]\n})\nexport class ThreadPage extends NgAtomicComponent {\n  protected readonly store = inject(ThreadPageStore);\n  protected readonly reducer = inject(QueryActionReducer);\n  // protected readonly message = inject(MessageService);\n  protected readonly context = inject(ContextService)\n\n  readonly isComposing = signal(false);\n\n  // 日本語入力中の状態を管理\n  @HostListener('compositionstart', ['$event'])\n  onCompositionStart(event: Event) {\n    this.isComposing.set(true);\n  }\n\n  @HostListener('compositionend', ['$event'])\n  onCompositionEnd(event: Event) {\n    this.isComposing.set(false);\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeydown(event: KeyboardEvent) {\n    if (this.isComposing()) return;\n\n    console.log(event);\n    if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {\n      this._sendMessage();\n    }\n  }\n\n  @Effect(ActionId.SEND_MESSAGE)\n  protected _sendMessage() {\n    const content = this.store.form.get(['message'])?.value;\n    // this.message.pushMessage({ content, time: new Date(), role: 'user' });\n    // this.store.form.get(['message'])?.reset();\n    // this.message.completeMessage([\n    //   {\n    //     role: 'system',\n    //     content: message`\n    //     アシスタントはユーザーの命令に対して、GraphQLとパースするtypescriptを返します。\n\n    //     以下は現在のページの背景情報です。\n    //     ${this.context.context()}\n\n    //     `,\n    //     time: new Date(),\n    //   }\n    // ]);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}