{"version":3,"file":"xxmachina-components-molecules-inline-edit-field.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/molecules/inline-edit-field/inline-edit-field.molecule.ts","../../../../../packages/@xxmachina/components/src/lib/molecules/inline-edit-field/xxmachina-components-molecules-inline-edit-field.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Directive, ElementRef, effect, inject, input, signal, viewChild } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { InjectableComponent, NgAtomicComponent, TokenizedType } from '@ng-atomic/core';\n\nenum ActionId {\n  VALUE_COMMIT = '[@xxmachina/molecules/inline-edit-field] value commit',\n}\n\n@TokenizedType()\n@Directive({ standalone: true, selector: 'molecules-inline-edit-field' })\nexport class InlineEditFieldMoleculeStore extends InjectableComponent {\n  static readonly ActionId = ActionId;\n  readonly control = input.required<FormControl<string>>();\n  readonly displayValue = input.required<string>();\n}\n\n@Component({\n  selector: 'molecules-inline-edit-field',\n  standalone: true,\n  imports: [ReactiveFormsModule],\n  template: `\n    @if (isEditing()) {\n      <input\n        class=\"edit-input\"\n        [formControl]=\"store.control()\"\n        (blur)=\"onBlur()\"\n        (keydown.enter)=\"onEnter($event)\"\n        (keydown.escape)=\"onEscape($event)\"\n        #inputEl\n      />\n    } @else {\n      <span\n        class=\"display-value\"\n        (dblclick)=\"startEdit()\"\n      >{{ store.displayValue() }}</span>\n    }\n  `,\n  styleUrl: './inline-edit-field.molecule.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [\n    {\n      directive: InlineEditFieldMoleculeStore,\n      inputs: ['control', 'displayValue'],\n    }\n  ],\n})\nexport class InlineEditFieldMolecule extends NgAtomicComponent {\n  static readonly ActionId = ActionId;\n  protected readonly store = inject(InlineEditFieldMoleculeStore);\n  readonly isEditing = signal(false);\n  private originalValue = '';\n  private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n\n  constructor() {\n    super();\n    // 編集モード開始時に入力欄にフォーカス\n    effect(() => {\n      if (this.isEditing() && this.inputEl()) {\n        setTimeout(() => this.inputEl()?.nativeElement.focus(), 0);\n      }\n    });\n  }\n\n  startEdit() {\n    this.originalValue = this.store.control().value;\n    this.isEditing.set(true);\n  }\n\n  onBlur() {\n    this.commitValue();\n  }\n\n  onEnter(event: Event) {\n    event.preventDefault();\n    this.commitValue();\n  }\n\n  onEscape(event: Event) {\n    event.preventDefault();\n    this.store.control().setValue(this.originalValue);\n    this.isEditing.set(false);\n  }\n\n  private commitValue() {\n    const newValue = this.store.control().value;\n    this.isEditing.set(false);\n\n    if (newValue !== this.originalValue) {\n      this.dispatch({\n        id: ActionId.VALUE_COMMIT,\n        payload: { value: newValue, previousValue: this.originalValue },\n      });\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}