{"version":3,"file":"myrmidon-cadmus-part-lexicography-lemma.mjs","sources":["../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/lex-lemma-part.ts","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/word-form-editor/word-form-editor.ts","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/word-form-editor/word-form-editor.html","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/word-form-set-editor/word-form-set-editor.ts","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/word-form-set-editor/word-form-set-editor.html","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/lex-lemma-part-editor/lex-lemma-part-editor.ts","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/lex-lemma-part-editor/lex-lemma-part-editor.html","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/lex-lemma-part-feature/lex-lemma-part-feature.ts","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/lib/components/lex-lemma-part-feature/lex-lemma-part-feature.html","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/public-api.ts","../../../../projects/myrmidon/cadmus-part-lexicography-lemma/src/myrmidon-cadmus-part-lexicography-lemma.ts"],"sourcesContent":["import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * A word form.\r\n */\r\nexport interface WordForm {\r\n  type: string;\r\n  prefix?: string;\r\n  value: string;\r\n  suffix?: string;\r\n  pos: string;\r\n  features?: string[];\r\n  tags?: string[];\r\n  note?: string;\r\n}\r\n\r\n/**\r\n * The lemma part model.\r\n */\r\nexport interface LexLemmaPart extends Part {\r\n  lid: string;\r\n  homograph?: number;\r\n  forms: WordForm[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the lemma part type.\r\n */\r\nexport const LEX_LEMMA_PART_TYPEID = 'it.vedph.lexicography.lemma';\r\n\r\n/**\r\n * JSON schema for the lemma part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const LEX_LEMMA_PART_SCHEMA = {\r\n  $schema: 'http://json-schema.org/draft-07/schema#',\r\n  $id: 'www.vedph.it/cadmus/parts/myrmidon/lexicography/' + LEX_LEMMA_PART_TYPEID + '.json',\r\n  type: 'object',\r\n  title: 'LexLemmaPart',\r\n  required: [\r\n    'id',\r\n    'itemId',\r\n    'typeId',\r\n    'timeCreated',\r\n    'creatorId',\r\n    'timeModified',\r\n    'userId',\r\n    'lid',\r\n    'forms',\r\n  ],\r\n  properties: {\r\n    timeCreated: {\r\n      type: 'string',\r\n      pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n    },\r\n    creatorId: {\r\n      type: 'string',\r\n    },\r\n    timeModified: {\r\n      type: 'string',\r\n      pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n    },\r\n    userId: {\r\n      type: 'string',\r\n    },\r\n    id: {\r\n      type: 'string',\r\n      pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n    },\r\n    itemId: {\r\n      type: 'string',\r\n      pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n    },\r\n    typeId: {\r\n      type: 'string',\r\n      pattern: '^[a-z][-0-9a-z._]*$',\r\n    },\r\n    roleId: {\r\n      type: ['string', 'null'],\r\n      pattern: '^([a-z][-0-9a-z._]*)?$',\r\n    },\r\n    lid: {\r\n      type: 'string',\r\n    },\r\n    homograph: {\r\n      type: ['integer', 'null'],\r\n    },\r\n    forms: {\r\n      type: 'array',\r\n      minItems: 1,\r\n      items: {\r\n        type: 'object',\r\n        required: ['type', 'value', 'pos'],\r\n        properties: {\r\n          type: {\r\n            type: 'string',\r\n          },\r\n          prefix: {\r\n            type: 'string',\r\n          },\r\n          value: {\r\n            type: 'string',\r\n          },\r\n          suffix: {\r\n            type: 'string',\r\n          },\r\n          pos: {\r\n            type: 'string',\r\n          },\r\n          features: {\r\n            type: 'array',\r\n            items: {\r\n              type: 'string',\r\n            },\r\n          },\r\n          tags: {\r\n            type: 'array',\r\n            items: {\r\n              type: 'string',\r\n            },\r\n          },\r\n          note: {\r\n            type: 'string',\r\n          },\r\n        },\r\n        additionalProperties: false,\r\n      },\r\n    },\r\n  },\r\n  additionalProperties: false,\r\n};\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, input, model, output, signal } from '@angular/core';\r\nimport {\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  ReactiveFormsModule,\r\n  Validators,\r\n} from '@angular/forms';\r\n\r\n// material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { ThesEntriesPickerComponent } from '@myrmidon/cadmus-ui';\r\n\r\nimport { WordForm } from '../../lex-lemma-part';\r\n\r\n@Component({\r\n  selector: 'cadmus-word-form-editor',\r\n  imports: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    MatButtonModule,\r\n    MatCheckboxModule,\r\n    MatFormFieldModule,\r\n    MatIconModule,\r\n    MatInputModule,\r\n    MatSelectModule,\r\n    MatTooltipModule,\r\n    ThesEntriesPickerComponent,\r\n  ],\r\n  templateUrl: './word-form-editor.html',\r\n  styleUrl: './word-form-editor.css',\r\n})\r\nexport class WordFormEditor {\r\n  public readonly form = model<WordForm | undefined>();\r\n  public readonly cancelEdit = output();\r\n\r\n  // lex-word-form-types\r\n  public readonly typeEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-word-form-prefixes\r\n  public readonly prefixEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-word-form-suffixes\r\n  public readonly suffixEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-pos-tags\r\n  public readonly posEntries = input.required<ThesaurusEntry[]>();\r\n  // lex-word-form-features\r\n  public readonly featureEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-word-form-tags\r\n  public readonly tagEntries = input<ThesaurusEntry[] | undefined>();\r\n\r\n  public type: FormControl<string>;\r\n  public prefix: FormControl<string | null>;\r\n  public value: FormControl<string>;\r\n  public suffix: FormControl<string | null>;\r\n  public pos: FormControl<ThesaurusEntry>;\r\n  public features: FormControl<ThesaurusEntry[]>;\r\n  public tags: FormControl<ThesaurusEntry[]>;\r\n  public note: FormControl<string | null>;\r\n  public formCtl: FormGroup;\r\n\r\n  constructor(formBuilder: FormBuilder) {\r\n    // form\r\n    this.type = formBuilder.control('', {\r\n      nonNullable: true,\r\n      validators: [Validators.required, Validators.maxLength(50)],\r\n    });\r\n    this.prefix = formBuilder.control(null, { validators: [Validators.maxLength(50)] });\r\n    this.value = formBuilder.control('', {\r\n      nonNullable: true,\r\n      validators: [Validators.required, Validators.maxLength(500)],\r\n    });\r\n    this.suffix = formBuilder.control(null, { validators: [Validators.maxLength(50)] });\r\n    this.pos = formBuilder.control(\r\n      { id: '', value: '' },\r\n      {\r\n        nonNullable: true,\r\n        validators: Validators.required,\r\n      }\r\n    );\r\n    this.features = formBuilder.control([], { nonNullable: true });\r\n    this.tags = formBuilder.control([], { nonNullable: true });\r\n    this.note = formBuilder.control(null);\r\n    this.formCtl = formBuilder.group({\r\n      type: this.type,\r\n      prefix: this.prefix,\r\n      value: this.value,\r\n      suffix: this.suffix,\r\n      pos: this.pos,\r\n      features: this.features,\r\n      tags: this.tags,\r\n      note: this.note,\r\n    });\r\n\r\n    // when model changes, update form\r\n    effect(() => {\r\n      const data = this.form();\r\n      this.updateForm(data);\r\n    });\r\n  }\r\n\r\n  public mapIdToEntry(\r\n    id: string | null,\r\n    entries: ThesaurusEntry[] | undefined\r\n  ): ThesaurusEntry | null {\r\n    if (!id) return null;\r\n    if (!entries) return { id, value: id };\r\n    return entries.find((e) => e.id === id) || { id, value: id };\r\n  }\r\n\r\n  private mapIdsToEntries(ids: string[], entries: ThesaurusEntry[] | undefined): ThesaurusEntry[] {\r\n    if (!entries) return ids.map((id) => ({ id, value: id }));\r\n    return ids.map((id) => entries.find((e) => e.id === id) || { id, value: id });\r\n  }\r\n\r\n  private updateForm(data: WordForm | undefined | null): void {\r\n    if (!data) {\r\n      this.formCtl.reset();\r\n    } else {\r\n      this.type.setValue(data.type || '');\r\n      this.prefix.setValue(data.prefix || null);\r\n      this.value.setValue(data.value || '');\r\n      this.suffix.setValue(data.suffix || null);\r\n      this.pos.setValue(this.mapIdToEntry(data.pos, this.posEntries()) || this.posEntries()?.[0]!);\r\n      this.features.setValue(this.mapIdsToEntries(data.features || [], this.featureEntries()));\r\n      this.tags.setValue(this.mapIdsToEntries(data.tags || [], this.tagEntries()));\r\n      this.note.setValue(data.note || null);\r\n      this.formCtl.markAsPristine();\r\n    }\r\n  }\r\n\r\n  public onPosEntriesChange(entries: ThesaurusEntry[]): void {\r\n    this.pos.setValue(entries[0]);\r\n    this.pos.markAsDirty();\r\n    this.pos.updateValueAndValidity();\r\n  }\r\n\r\n  public onFeatureEntriesChange(entries: ThesaurusEntry[]): void {\r\n    this.features.setValue(entries);\r\n    this.features.markAsDirty();\r\n    this.features.updateValueAndValidity();\r\n  }\r\n\r\n  public onTagEntriesChange(entries: ThesaurusEntry[]): void {\r\n    this.tags.setValue(entries);\r\n    this.tags.markAsDirty();\r\n    this.tags.updateValueAndValidity();\r\n  }\r\n\r\n  private getData(): WordForm {\r\n    return {\r\n      type: this.type.value,\r\n      prefix: this.prefix.value || undefined,\r\n      value: this.value.value,\r\n      suffix: this.suffix.value || undefined,\r\n      pos: this.pos.value.id,\r\n      features: this.features.value.map((e) => e.id),\r\n      tags: this.tags.value.map((e) => e.id),\r\n      note: this.note.value?.trim() || undefined,\r\n    };\r\n  }\r\n\r\n  public cancel(): void {\r\n    this.cancelEdit.emit();\r\n  }\r\n\r\n  /**\r\n   * Saves the current form data by updating the `data` model signal.\r\n   * This method can be called manually (e.g., by a Save button) or\r\n   * automatically (via auto-save).\r\n   * @param pristine If true (default), the form is marked as pristine\r\n   * after saving.\r\n   * Set to false for auto-save if you want the form to remain dirty.\r\n   */\r\n  public save(pristine = true): void {\r\n    if (this.formCtl.invalid) {\r\n      // show validation errors\r\n      this.formCtl.markAllAsTouched();\r\n      return;\r\n    }\r\n\r\n    const data = this.getData();\r\n    this.form.set(data);\r\n\r\n    if (pristine) {\r\n      this.formCtl.markAsPristine();\r\n    }\r\n  }\r\n}\r\n","<form [formGroup]=\"formCtl\" (submit)=\"save()\">\r\n  <div class=\"form-row\">\r\n    <!-- type (bound) -->\r\n    @if (typeEntries()?.length) {\r\n    <mat-form-field>\r\n      <mat-label>type</mat-label>\r\n      <mat-select [formControl]=\"type\">\r\n        @for (e of typeEntries(); track e.id) {\r\n        <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n        }\r\n      </mat-select>\r\n      @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n      <mat-error>type required</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    } @else {\r\n    <!-- type (free) -->\r\n    <mat-form-field>\r\n      <mat-label>type</mat-label>\r\n      <input matInput [formControl]=\"type\" />\r\n      @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n      <mat-error>type required</mat-error>\r\n      } @if ($any(type).errors?.maxLength && (type.dirty || type.touched)) {\r\n      <mat-error>type too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    }\r\n\r\n    <!-- pos (always bound) -->\r\n    <cadmus-thes-entries-picker\r\n      [availableEntries]=\"posEntries()!\"\r\n      [entries]=\"[this.pos.value]\"\r\n      [hierarchicLabels]=\"true\"\r\n      [minEntries]=\"1\"\r\n      [maxEntries]=\"1\"\r\n      (entriesChange)=\"onPosEntriesChange($event!)\"\r\n    />\r\n  </div>\r\n  <div class=\"form-row\">\r\n    <!-- prefix (bound) -->\r\n    @if (prefixEntries()?.length) {\r\n    <mat-form-field>\r\n      <mat-label>prefix</mat-label>\r\n      <mat-select [formControl]=\"prefix\">\r\n        @for (e of prefixEntries(); track e.id) {\r\n        <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n        }\r\n      </mat-select>\r\n      @if ($any(prefix).errors?.required && (prefix.dirty || prefix.touched)) {\r\n      <mat-error>prefix required</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    } @else {\r\n    <!-- prefix (free) -->\r\n    <mat-form-field>\r\n      <mat-label>prefix</mat-label>\r\n      <input matInput [formControl]=\"prefix\" />\r\n      @if ($any(prefix).errors?.required && (prefix.dirty || prefix.touched)) {\r\n      <mat-error>prefix required</mat-error>\r\n      } @if ($any(prefix).errors?.maxLength && (prefix.dirty || prefix.touched)) {\r\n      <mat-error>prefix too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    }\r\n\r\n    <!-- value -->\r\n    <mat-form-field>\r\n      <mat-label>value</mat-label>\r\n      <input matInput [formControl]=\"value\" />\r\n      @if ($any(value).errors?.required && (value.dirty || value.touched)) {\r\n      <mat-error>value required</mat-error>\r\n      } @if ($any(value).errors?.maxLength && (value.dirty || value.touched)) {\r\n      <mat-error>value too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n\r\n    <!-- suffix (bound) -->\r\n    @if (suffixEntries()?.length) {\r\n    <mat-form-field>\r\n      <mat-label>suffix</mat-label>\r\n      <mat-select [formControl]=\"suffix\">\r\n        @for (e of suffixEntries(); track e.id) {\r\n        <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n        }\r\n      </mat-select>\r\n      @if ($any(suffix).errors?.required && (suffix.dirty || suffix.touched)) {\r\n      <mat-error>suffix required</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    } @else {\r\n    <!-- suffix (free) -->\r\n    <mat-form-field>\r\n      <mat-label>suffix</mat-label>\r\n      <input matInput [formControl]=\"suffix\" />\r\n      @if ($any(suffix).errors?.required && (suffix.dirty || suffix.touched)) {\r\n      <mat-error>suffix required</mat-error>\r\n      } @if ($any(suffix).errors?.maxLength && (suffix.dirty || suffix.touched)) {\r\n      <mat-error>suffix too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    }\r\n  </div>\r\n  <!-- features -->\r\n  @if (featureEntries()?.length) {\r\n  <div>\r\n    <fieldset>\r\n      <legend>features</legend>\r\n      <cadmus-thes-entries-picker\r\n        [availableEntries]=\"featureEntries()!\"\r\n        [entries]=\"features.value\"\r\n        [hierarchicLabels]=\"true\"\r\n        (entriesChange)=\"onFeatureEntriesChange($event!)\"\r\n      />\r\n    </fieldset>\r\n  </div>\r\n  }\r\n  <!-- tags -->\r\n  @if (tagEntries()?.length) {\r\n  <div>\r\n    <fieldset>\r\n      <legend>tags</legend>\r\n      <cadmus-thes-entries-picker\r\n        [availableEntries]=\"tagEntries()!\"\r\n        [entries]=\"tags.value\"\r\n        (entriesChange)=\"onTagEntriesChange($event!)\"\r\n      />\r\n    </fieldset>\r\n  </div>\r\n  }\r\n  <!-- note -->\r\n  <div>\r\n    <mat-form-field class=\"long-text\">\r\n      <mat-label>note</mat-label>\r\n      <textarea matInput [formControl]=\"note\" rows=\"3\"></textarea>\r\n      @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n      <mat-error>note too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n  </div>\r\n  <!-- buttons -->\r\n  <div>\r\n    <button type=\"button\" mat-icon-button matTooltip=\"Discard changes\" (click)=\"cancel()\">\r\n      <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n    </button>\r\n    <button\r\n      type=\"submit\"\r\n      mat-icon-button\r\n      matTooltip=\"Accept changes\"\r\n      [disabled]=\"formCtl.invalid || formCtl.pristine\"\r\n    >\r\n      <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n    </button>\r\n  </div>\r\n</form>\r\n","import { Component, input, model, signal } from '@angular/core';\r\n\r\nimport {\r\n  MatExpansionPanel,\r\n  MatExpansionPanelHeader,\r\n  MatExpansionPanelTitle,\r\n} from '@angular/material/expansion';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { FlatLookupPipe } from '@myrmidon/ngx-tools';\r\n\r\nimport { WordForm } from '../../lex-lemma-part';\r\nimport { WordFormEditor } from '../word-form-editor/word-form-editor';\r\n\r\n/**\r\n * Editor for a set of word forms.\r\n */\r\n@Component({\r\n  selector: 'cadmus-word-form-set-editor',\r\n  imports: [\r\n    MatExpansionPanel,\r\n    MatExpansionPanelHeader,\r\n    MatExpansionPanelTitle,\r\n    MatButton,\r\n    MatIconButton,\r\n    MatIcon,\r\n    MatTooltip,\r\n    FlatLookupPipe,\r\n    WordFormEditor,\r\n  ],\r\n  templateUrl: './word-form-set-editor.html',\r\n  styleUrl: './word-form-set-editor.css',\r\n})\r\nexport class WordFormSetEditor {\r\n  /**\r\n   * The forms to edit.\r\n   */\r\n  public readonly forms = model<WordForm[]>([]);\r\n  /**\r\n   * The form being edited.\r\n   */\r\n  public readonly edited = signal<WordForm | undefined>(undefined);\r\n  /**\r\n   * The index of the form being edited, -1 if a new one.\r\n   */\r\n  public readonly editedIndex = signal<number>(-1);\r\n\r\n  // lex-word-form-types\r\n  public readonly typeEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-word-form-prefixes\r\n  public readonly prefixEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-word-form-suffixes\r\n  public readonly suffixEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-pos-tags (required)\r\n  public readonly posEntries = input.required<ThesaurusEntry[]>();\r\n  // lex-word-form-features\r\n  public readonly featureEntries = input<ThesaurusEntry[] | undefined>();\r\n  // lex-word-form-tags\r\n  public readonly tagEntries = input<ThesaurusEntry[] | undefined>();\r\n\r\n  constructor(private _dialogService: DialogService) {}\r\n\r\n  public addForm(): void {\r\n    const entry: WordForm = {\r\n      type: this.typeEntries()?.[0]?.id ?? '',\r\n      pos: this.posEntries()?.[0]?.id ?? '',\r\n      value: '',\r\n    };\r\n    this.editedIndex.set(-1);\r\n    this.edited.set(entry);\r\n  }\r\n\r\n  public editForm(entry: WordForm, index: number): void {\r\n    this.editedIndex.set(index);\r\n    this.edited.set(structuredClone(entry));\r\n  }\r\n\r\n  public closeForm(): void {\r\n    this.editedIndex.set(-1);\r\n    this.edited.set(undefined);\r\n  }\r\n\r\n  public saveForm(entry: WordForm): void {\r\n    const forms = [...this.forms()];\r\n    if (this.editedIndex() === -1) {\r\n      forms.push(entry);\r\n    } else {\r\n      forms.splice(this.editedIndex(), 1, entry);\r\n    }\r\n    this.forms.set(forms);\r\n    this.closeForm();\r\n  }\r\n\r\n  public deleteForm(index: number): void {\r\n    this._dialogService\r\n      .confirm('Confirmation', `Delete form #${index + 1}?`)\r\n      .subscribe((yes: boolean | undefined) => {\r\n        if (yes) {\r\n          if (this.editedIndex() === index) {\r\n            this.closeForm();\r\n          }\r\n          const forms = [...this.forms()];\r\n          forms.splice(index, 1);\r\n          this.forms.set(forms);\r\n        }\r\n      });\r\n  }\r\n\r\n  public moveFormUp(index: number): void {\r\n    if (index < 1) {\r\n      return;\r\n    }\r\n    const form = this.forms()[index];\r\n    const forms = [...this.forms()];\r\n    forms.splice(index, 1);\r\n    forms.splice(index - 1, 0, form);\r\n    this.forms.set(forms);\r\n  }\r\n\r\n  public moveFormDown(index: number): void {\r\n    if (index + 1 >= this.forms().length) {\r\n      return;\r\n    }\r\n    const form = this.forms()[index];\r\n    const forms = [...this.forms()];\r\n    forms.splice(index, 1);\r\n    forms.splice(index + 1, 0, form);\r\n    this.forms.set(forms);\r\n  }\r\n}\r\n","<div>\r\n  <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addForm()\">\r\n    <mat-icon>add_circle</mat-icon> form\r\n  </button>\r\n</div>\r\n@if (forms().length) {\r\n<table>\r\n  <thead>\r\n    <tr>\r\n      <th></th>\r\n      <th>type</th>\r\n      <th>prefix</th>\r\n      <th>value</th>\r\n      <th>suffix</th>\r\n      <th>POS</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    @for (entry of forms(); track entry; let i = $index; let first = $first; let last = $last)\r\n    {\r\n    <tr [class.selected]=\"i === editedIndex()\">\r\n      <td class=\"fit-width\">\r\n        <button\r\n          type=\"button\"\r\n          mat-icon-button\r\n          matTooltip=\"Edit this form\"\r\n          (click)=\"editForm(entry, i)\"\r\n        >\r\n          <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n        </button>\r\n        <button\r\n          type=\"button\"\r\n          mat-icon-button\r\n          matTooltip=\"Move this form up\"\r\n          [disabled]=\"first\"\r\n          (click)=\"moveFormUp(i)\"\r\n        >\r\n          <mat-icon>arrow_upward</mat-icon>\r\n        </button>\r\n        <button\r\n          type=\"button\"\r\n          mat-icon-button\r\n          matTooltip=\"Move this form down\"\r\n          [disabled]=\"last\"\r\n          (click)=\"moveFormDown(i)\"\r\n        >\r\n          <mat-icon>arrow_downward</mat-icon>\r\n        </button>\r\n        <button\r\n          type=\"button\"\r\n          mat-icon-button\r\n          matTooltip=\"Delete this form\"\r\n          (click)=\"deleteForm(i)\"\r\n        >\r\n          <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n        </button>\r\n      </td>\r\n      <td>{{ entry.type | flatLookup : typeEntries() : 'id' : 'value' }}</td>\r\n      <td>{{ entry.prefix | flatLookup : prefixEntries() : 'id' : 'value' }}</td>\r\n      <td>{{ entry.value }}</td>\r\n      <td>{{ entry.suffix | flatLookup : suffixEntries() : 'id' : 'value' }}</td>\r\n      <td>{{ entry.pos | flatLookup : posEntries() : 'id' : 'value' }}</td>\r\n    </tr>\r\n    }\r\n  </tbody>\r\n</table>\r\n} @if (edited()) {\r\n<fieldset>\r\n  <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n    <mat-expansion-panel-header>\r\n      <mat-panel-title>form #</mat-panel-title>\r\n    </mat-expansion-panel-header>\r\n    <cadmus-word-form-editor\r\n      [typeEntries]=\"typeEntries()\"\r\n      [prefixEntries]=\"prefixEntries()\"\r\n      [suffixEntries]=\"suffixEntries()\"\r\n      [posEntries]=\"posEntries()\"\r\n      [featureEntries]=\"featureEntries()\"\r\n      [tagEntries]=\"tagEntries()\"\r\n      [form]=\"edited()!\"\r\n      (formChange)=\"saveForm($event!)\"\r\n      (editorClose)=\"closeForm()\"\r\n    />\r\n  </mat-expansion-panel>\r\n</fieldset>\r\n}\r\n","import { Component, OnInit, signal } from '@angular/core';\r\nimport {\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  ReactiveFormsModule,\r\n  UntypedFormGroup,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport { TitleCasePipe } from '@angular/common';\r\n\r\nimport {\r\n  MatCard,\r\n  MatCardActions,\r\n  MatCardContent,\r\n  MatCardHeader,\r\n  MatCardTitle,\r\n} from '@angular/material/card';\r\nimport { MatError, MatFormField, MatLabel } from '@angular/material/form-field';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { EditedObject, ThesauriSet, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { CloseSaveButtonsComponent, ModelEditorComponentBase } from '@myrmidon/cadmus-ui';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport { LEX_LEMMA_PART_TYPEID, LexLemmaPart, WordForm } from '../../lex-lemma-part';\r\nimport { WordFormSetEditor } from '../word-form-set-editor/word-form-set-editor';\r\n\r\n/**\r\n * Lexicography lemma part editor component.\r\n * Thesauri: lex-word-form-types, lex-word-form-prefixes, lex-word-form-suffixes,\r\n * lex-pos-tags, lex-word-form-features, lex-word-form-tags.\r\n */\r\n@Component({\r\n  selector: 'cadmus-lex-lemma-part-editor',\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    MatCard,\r\n    MatCardActions,\r\n    MatCardContent,\r\n    MatCardHeader,\r\n    MatCardTitle,\r\n    MatError,\r\n    MatFormField,\r\n    MatIcon,\r\n    MatIconButton,\r\n    MatInput,\r\n    MatLabel,\r\n    MatTooltip,\r\n    TitleCasePipe,\r\n    CloseSaveButtonsComponent,\r\n    WordFormSetEditor,\r\n  ],\r\n  templateUrl: './lex-lemma-part-editor.html',\r\n  styleUrl: './lex-lemma-part-editor.css',\r\n})\r\nexport class LexLemmaPartEditor extends ModelEditorComponentBase<LexLemmaPart> implements OnInit {\r\n  public lid: FormControl<string | null>;\r\n  public homograph: FormControl<number>;\r\n  public forms: FormControl<WordForm[]>;\r\n\r\n  // lex-word-form-types\r\n  public readonly typeEntries = signal<ThesaurusEntry[] | undefined>(undefined);\r\n  // lex-word-form-prefixes\r\n  public readonly prefixEntries = signal<ThesaurusEntry[] | undefined>(undefined);\r\n  // lex-word-form-suffixes\r\n  public readonly suffixEntries = signal<ThesaurusEntry[] | undefined>(undefined);\r\n  // lex-pos-tags (required)\r\n  public readonly posEntries = signal<ThesaurusEntry[]>([]);\r\n  // lex-word-form-features\r\n  public readonly featureEntries = signal<ThesaurusEntry[] | undefined>(undefined);\r\n  // lex-word-form-tags\r\n  public readonly tagEntries = signal<ThesaurusEntry[] | undefined>(undefined);\r\n\r\n  constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n    super(authService, formBuilder);\r\n    // form\r\n    this.lid = formBuilder.control(null, {\r\n      nonNullable: true,\r\n      validators: [Validators.required, Validators.maxLength(300)],\r\n    });\r\n    this.homograph = formBuilder.control(0, { nonNullable: true });\r\n    this.forms = formBuilder.control([], { nonNullable: true });\r\n  }\r\n\r\n  public override ngOnInit(): void {\r\n    super.ngOnInit();\r\n  }\r\n\r\n  protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n    return formBuilder.group({\r\n      lid: this.lid,\r\n      homograph: this.homograph,\r\n      forms: this.forms,\r\n    });\r\n  }\r\n\r\n  private updateThesauri(thesauri: ThesauriSet): void {\r\n    let key = 'lex-word-form-types';\r\n    if (this.hasThesaurus(key)) {\r\n      this.typeEntries.set(thesauri[key].entries);\r\n    } else {\r\n      this.typeEntries.set(undefined);\r\n    }\r\n    key = 'lex-word-form-prefixes';\r\n    if (this.hasThesaurus(key)) {\r\n      this.prefixEntries.set(thesauri[key].entries);\r\n    } else {\r\n      this.prefixEntries.set(undefined);\r\n    }\r\n    key = 'lex-word-form-suffixes';\r\n    if (this.hasThesaurus(key)) {\r\n      this.suffixEntries.set(thesauri[key].entries);\r\n    } else {\r\n      this.suffixEntries.set(undefined);\r\n    }\r\n    key = 'lex-pos-tags';\r\n    if (this.hasThesaurus(key)) {\r\n      this.posEntries.set(thesauri[key].entries!);\r\n    } else {\r\n      this.posEntries.set([]);\r\n    }\r\n    key = 'lex-word-form-features';\r\n    if (this.hasThesaurus(key)) {\r\n      this.featureEntries.set(thesauri[key].entries);\r\n    } else {\r\n      this.featureEntries.set(undefined);\r\n    }\r\n    key = 'lex-word-form-tags';\r\n    if (this.hasThesaurus(key)) {\r\n      this.tagEntries.set(thesauri[key].entries);\r\n    } else {\r\n      this.tagEntries.set(undefined);\r\n    }\r\n  }\r\n\r\n  private updateForm(part?: LexLemmaPart | null): void {\r\n    if (!part) {\r\n      this.form.reset();\r\n      return;\r\n    }\r\n    this.lid.setValue(part.lid || null);\r\n    this.homograph.setValue(part.homograph || 0);\r\n    this.forms.setValue(part.forms || []);\r\n    this.form.markAsPristine();\r\n  }\r\n\r\n  public onFormsChange(forms: WordForm[]): void {\r\n    this.forms.setValue(forms || []);\r\n    this.form.markAsDirty();\r\n    this.forms.updateValueAndValidity();\r\n  }\r\n\r\n  protected override onDataSet(data?: EditedObject<LexLemmaPart>): void {\r\n    // thesauri\r\n    if (data?.thesauri) {\r\n      this.updateThesauri(data.thesauri);\r\n    }\r\n\r\n    // form\r\n    this.updateForm(data?.value);\r\n  }\r\n\r\n  protected getValue(): LexLemmaPart {\r\n    let part = this.getEditedPart(LEX_LEMMA_PART_TYPEID) as LexLemmaPart;\r\n    part.lid = this.lid.value || '';\r\n    part.homograph = this.homograph.value || undefined;\r\n    part.forms = this.forms.value || [];\r\n    return part;\r\n  }\r\n\r\n  // TODO: generate LID\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n  <mat-card>\r\n    <mat-card-header>\r\n      <div mat-card-avatar>\r\n        <mat-icon>picture_in_picture</mat-icon>\r\n      </div>\r\n      <mat-card-title>\r\n        {{ (modelName() | titlecase) || 'Lemma Part' }}\r\n      </mat-card-title>\r\n    </mat-card-header>\r\n    <mat-card-content>\r\n      <div class=\"form-row\">\r\n        <!-- lid -->\r\n        <mat-form-field>\r\n          <mat-label>LID</mat-label>\r\n          <input matInput [formControl]=\"lid\" />\r\n          @if ($any(lid).errors?.required && (lid.dirty || lid.touched)) {\r\n          <mat-error>LID required</mat-error>\r\n          } @if ($any(lid).errors?.maxLength && (lid.dirty || lid.touched)) {\r\n          <mat-error>LID too long</mat-error>\r\n          }\r\n        </mat-form-field>\r\n        <!-- button -->\r\n        <button type=\"button\" mat-icon-button matTooltip=\"Generate LID\">\r\n          <mat-icon class=\"mat-primary\">arrow_circle_left</mat-icon>\r\n        </button>\r\n        <!-- homograph -->\r\n        <mat-form-field class=\"nr\">\r\n          <mat-label>hom.</mat-label>\r\n          <input matInput [formControl]=\"homograph\" type=\"number\" min=\"0\" max=\"50\" />\r\n        </mat-form-field>\r\n      </div>\r\n      <!-- forms -->\r\n      <div>\r\n        <fieldset>\r\n          <legend>\r\n            forms @if (!this.forms.value.length) {\r\n            <span id=\"forms-error\" matTooltip=\"Form(s) required\"\r\n              ><mat-icon class=\"mat-warn\">error</mat-icon></span\r\n            >\r\n            }\r\n          </legend>\r\n          <cadmus-word-form-set-editor\r\n            [typeEntries]=\"typeEntries()\"\r\n            [prefixEntries]=\"prefixEntries()\"\r\n            [suffixEntries]=\"suffixEntries()\"\r\n            [posEntries]=\"posEntries()\"\r\n            [featureEntries]=\"featureEntries()\"\r\n            [tagEntries]=\"tagEntries()\"\r\n            [forms]=\"forms.value\"\r\n            (formsChange)=\"onFormsChange($event)\"\r\n          />\r\n        </fieldset>\r\n      </div>\r\n    </mat-card-content>\r\n    <mat-card-actions>\r\n      <cadmus-close-save-buttons [form]=\"form\" [noSave]=\"userLevel < 2\" (closeRequest)=\"close()\" />\r\n    </mat-card-actions>\r\n  </mat-card>\r\n</form>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport { EditPartFeatureBase, PartEditorService } from '@myrmidon/cadmus-state';\r\nimport { CurrentItemBarComponent } from '@myrmidon/cadmus-ui-pg';\r\n\r\nimport { LexLemmaPartEditor } from '../lex-lemma-part-editor/lex-lemma-part-editor';\r\n\r\n@Component({\r\n  selector: 'cadmus-lex-lemma-part-feature',\r\n  imports: [CurrentItemBarComponent, LexLemmaPartEditor],\r\n  templateUrl: './lex-lemma-part-feature.html',\r\n  styleUrl: './lex-lemma-part-feature.css',\r\n})\r\nexport class LexLemmaPartFeature extends EditPartFeatureBase implements OnInit {\r\n  constructor(\r\n    router: Router,\r\n    route: ActivatedRoute,\r\n    snackbar: MatSnackBar,\r\n    itemService: ItemService,\r\n    thesaurusService: ThesaurusService,\r\n    editorService: PartEditorService\r\n  ) {\r\n    super(router, route, snackbar, itemService, thesaurusService, editorService);\r\n  }\r\n\r\n  protected override getReqThesauriIds(): string[] {\r\n    return [\r\n      'lex-word-form-types',\r\n      'lex-word-form-prefixes',\r\n      'lex-word-form-suffixes',\r\n      'lex-pos-tags',\r\n      'lex-word-form-features',\r\n      'lex-word-form-tags',\r\n    ];\r\n  }\r\n}\r\n","<cadmus-current-item-bar />\r\n<cadmus-lex-lemma-part-editor\r\n  [identity]=\"identity\"\r\n  [data]=\"$any(data)\"\r\n  (dataChange)=\"save($event!.value!)\"\r\n  (editorClose)=\"close()\"\r\n  (dirtyChange)=\"onDirtyChange($event)\"\r\n/>\r\n","/*\r\n * Public API Surface of cadmus-part-lexicography-lemma\r\n */\r\n\r\nexport * from './lib/lex-lemma-part';\r\nexport * from './lib/components/word-form-editor/word-form-editor';\r\nexport * from './lib/components/word-form-set-editor/word-form-set-editor';\r\nexport * from './lib/components/lex-lemma-part-feature/lex-lemma-part-feature';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}