{"version":3,"file":"myrmidon-cadmus-graph-ui.mjs","sources":["../../../../projects/myrmidon/cadmus-graph-ui/src/lib/services/graph-node-lookup.service.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/state/graph-node-list.repository.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-filter/graph-node-filter.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-filter/graph-node-filter.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-editor/graph-node-editor.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-editor/graph-node-editor.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-list/graph-node-list.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-list/graph-node-list.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/state/graph-triple-list.repository.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-filter/graph-triple-filter.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-filter/graph-triple-filter.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-editor/graph-triple-editor.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-editor/graph-triple-editor.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-list/graph-triple-list.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-list/graph-triple-list.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/public-api.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/myrmidon-cadmus-graph-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { map, Observable, of } from 'rxjs';\r\n\r\nimport {\r\n  RefLookupFilter,\r\n  RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { GraphService, UriNode } from '@myrmidon/cadmus-api';\r\n\r\nexport interface GraphNodeLookupFilter extends RefLookupFilter {\r\n  isClass?: boolean | null;\r\n  tag?: string;\r\n}\r\n\r\n/**\r\n * Graph node lookup service.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GraphNodeLookupService implements RefLookupService {\r\n  constructor(private _graphService: GraphService) {}\r\n\r\n  lookup(filter: GraphNodeLookupFilter, options?: any): Observable<any[]> {\r\n    if (!filter.text) {\r\n      return of([]);\r\n    }\r\n    return this._graphService\r\n      .getNodes(1, filter.limit || 10, {\r\n        label: filter.text,\r\n        isClass:\r\n          filter.isClass === undefined || filter.isClass === null\r\n            ? undefined\r\n            : filter.isClass\r\n            ? true\r\n            : false,\r\n        tag: filter.tag,\r\n      })\r\n      .pipe(map((p) => p.items));\r\n  }\r\n\r\n  getName(item: any): string {\r\n    return (item as UriNode)?.label;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, forkJoin, Observable, tap } from 'rxjs';\r\n\r\nimport { NodeFilter, UriNode } from '@myrmidon/cadmus-api';\r\nimport {\r\n  PagedListStore,\r\n  PagedListStoreService,\r\n} from '@myrmidon/paged-data-browsers';\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\nimport { GraphService } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Graph nodes list repository.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class NodeListRepository\r\n  implements PagedListStoreService<NodeFilter, UriNode>\r\n{\r\n  private readonly _store: PagedListStore<NodeFilter, UriNode>;\r\n  private readonly _loading$: BehaviorSubject<boolean | undefined>;\r\n  private readonly _filter$: BehaviorSubject<NodeFilter>;\r\n  private readonly _linkedNode$: BehaviorSubject<UriNode | undefined>;\r\n  private readonly _classNodes$: BehaviorSubject<UriNode[]>;\r\n\r\n  public get loading$(): Observable<boolean | undefined> {\r\n    return this._loading$.asObservable();\r\n  }\r\n  public get filter$(): Observable<NodeFilter> {\r\n    return this._filter$.asObservable();\r\n  }\r\n  public get page$(): Observable<DataPage<UriNode>> {\r\n    return this._store.page$;\r\n  }\r\n  public get linkedNode$(): Observable<UriNode | undefined> {\r\n    return this._linkedNode$.asObservable();\r\n  }\r\n  public get classNodes$(): Observable<UriNode[] | undefined> {\r\n    return this._classNodes$.asObservable();\r\n  }\r\n\r\n  constructor(private _graphService: GraphService) {\r\n    this._store = new PagedListStore<NodeFilter, UriNode>(this);\r\n    this._loading$ = new BehaviorSubject<boolean | undefined>(undefined);\r\n    this._filter$ = new BehaviorSubject<NodeFilter>({});\r\n    this._linkedNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n    this._classNodes$ = new BehaviorSubject<UriNode[]>([]);\r\n    this._store.reset();\r\n  }\r\n\r\n  public getLinkedNode(): UriNode | undefined {\r\n    return this._linkedNode$.value;\r\n  }\r\n\r\n  public getClassNodes(): UriNode[] {\r\n    return this._classNodes$.value;\r\n  }\r\n\r\n  public loadPage(\r\n    pageNumber: number,\r\n    pageSize: number,\r\n    filter: NodeFilter\r\n  ): Observable<DataPage<UriNode>> {\r\n    this._loading$.next(true);\r\n    return this._graphService.getNodes(pageNumber, pageSize, filter).pipe(\r\n      tap({\r\n        next: () => this._loading$.next(false),\r\n        error: () => this._loading$.next(false),\r\n      })\r\n    );\r\n  }\r\n\r\n  public async reset(): Promise<void> {\r\n    this._loading$.next(true);\r\n    try {\r\n      await this._store.reset();\r\n    } catch (error) {\r\n      throw error;\r\n    } finally {\r\n      this._loading$.next(false);\r\n    }\r\n  }\r\n\r\n  public async setFilter(filter: NodeFilter): Promise<void> {\r\n    this._loading$.next(true);\r\n    try {\r\n      await this._store.setFilter(filter);\r\n    } catch (error) {\r\n      throw error;\r\n    } finally {\r\n      this._loading$.next(false);\r\n    }\r\n  }\r\n\r\n  public getFilter(): NodeFilter {\r\n    return this._store.getFilter();\r\n  }\r\n\r\n  public async setPage(pageNumber: number, pageSize: number): Promise<void> {\r\n    this._loading$.next(true);\r\n    try {\r\n      await this._store.setPage(pageNumber, pageSize);\r\n    } catch (error) {\r\n      throw error;\r\n    } finally {\r\n      this._loading$.next(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set the linked node used in filter.\r\n   *\r\n   * @param node The node or undefined.\r\n   */\r\n  public setLinkedNode(node?: UriNode): void {\r\n    this._linkedNode$.next(node);\r\n  }\r\n\r\n  /**\r\n   * Set the linked node used in filter by its ID.\r\n   *\r\n   * @param id The node ID.\r\n   */\r\n  public setLinkedNodeId(id?: number): void {\r\n    if (!id) {\r\n      this._linkedNode$.next(undefined);\r\n    } else {\r\n      this._graphService.getNode(id).subscribe({\r\n        next: (node) => {\r\n          this._linkedNode$.next(node);\r\n        },\r\n        error: (error) => {\r\n          console.error(`Node ID ${id} not found`, error);\r\n          console.warn('Node ID not found: ' + id);\r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Add the specified node to the filter class nodes.\r\n   * If the node already exists, nothing is done.\r\n   *\r\n   * @param node The node to add.\r\n   */\r\n  public addClassNode(node: UriNode): void {\r\n    const nodes = [...this._classNodes$.value];\r\n    if (nodes.some((n) => n.id === node.id)) {\r\n      return;\r\n    }\r\n    nodes.push(node);\r\n    this._classNodes$.next(nodes);\r\n  }\r\n\r\n  /**\r\n   * Set the class node IDs in the filter.\r\n   *\r\n   * @param ids The class nodes IDs or undefined.\r\n   */\r\n  public setClassNodeIds(ids?: number[]): void {\r\n    if (!ids || !ids.length) {\r\n      this._classNodes$.next([]);\r\n      return;\r\n    }\r\n\r\n    const requests: Observable<UriNode>[] = [];\r\n    ids.forEach((id) => {\r\n      requests.push(this._graphService.getNode(id));\r\n    });\r\n    forkJoin(requests).subscribe({\r\n      next: (nodes: UriNode[]) => {\r\n        this._classNodes$.next(nodes);\r\n      },\r\n      error: (error) => {\r\n        console.error('Error getting nodes', error);\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Delete the specified node from the filter class nodes.\r\n   * If the node does not exist, nothing is done.\r\n   *\r\n   * @param id The node's ID.\r\n   */\r\n  public deleteClassNode(id: number): void {\r\n    const nodes = [...this._classNodes$.value];\r\n    const i = nodes.findIndex((n) => n.id === id);\r\n    if (i > -1) {\r\n      nodes.splice(i, 1);\r\n      this._classNodes$.next(nodes);\r\n    }\r\n  }\r\n}\r\n","import { Component, input, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  FormsModule,\r\n  ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n  MatChipListbox,\r\n  MatChipOption,\r\n  MatChipRemove,\r\n} from '@angular/material/chips';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { NodeFilter, UriNode } from '@myrmidon/cadmus-api';\r\n\r\nimport { NodeListRepository } from '../../state/graph-node-list.repository';\r\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\r\n\r\n/**\r\n * Graph nodes filter used in graph nodes list.\r\n * Its data are in the graph nodes store, which gets updated when\r\n * users apply new filters.\r\n */\r\n@Component({\r\n  selector: 'cadmus-graph-node-filter',\r\n  templateUrl: './graph-node-filter.component.html',\r\n  styleUrls: ['./graph-node-filter.component.css'],\r\n  imports: [\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    MatFormField,\r\n    MatLabel,\r\n    MatInput,\r\n    MatSelect,\r\n    MatOption,\r\n    MatCheckbox,\r\n    RefLookupComponent,\r\n    MatIconButton,\r\n    MatTooltip,\r\n    MatIcon,\r\n    MatChipListbox,\r\n    MatChipOption,\r\n    MatChipRemove,\r\n    AsyncPipe,\r\n  ],\r\n})\r\nexport class GraphNodeFilterComponent implements OnInit, OnDestroy {\r\n  private _sub?: Subscription;\r\n  public filter$: Observable<NodeFilter>;\r\n  public linkedNode$: Observable<UriNode | undefined>;\r\n  public classNodes$: Observable<UriNode[] | undefined>;\r\n\r\n  public readonly disabled = input<boolean>();\r\n\r\n  public label: FormControl<string | null>;\r\n  public isClass: FormControl<number>;\r\n  public uid: FormControl<string | null>;\r\n  public tag: FormControl<string | null>;\r\n  public sourceType: FormControl<number | null>;\r\n  public sid: FormControl<string | null>;\r\n  public sidPrefix: FormControl<boolean>;\r\n  public linkedNodeRole: FormControl<'S' | 'O' | null>;\r\n  public form: FormGroup;\r\n\r\n  constructor(\r\n    formBuilder: FormBuilder,\r\n    public lookupService: GraphNodeLookupService,\r\n    private _repository: NodeListRepository\r\n  ) {\r\n    this.filter$ = _repository.filter$;\r\n    this.linkedNode$ = _repository.linkedNode$;\r\n    this.classNodes$ = _repository.classNodes$;\r\n    // form\r\n    this.label = formBuilder.control(null);\r\n    this.isClass = formBuilder.control(0, { nonNullable: true });\r\n    this.uid = formBuilder.control(null);\r\n    this.tag = formBuilder.control(null);\r\n    this.sourceType = formBuilder.control(null);\r\n    this.sid = formBuilder.control(null);\r\n    this.sidPrefix = formBuilder.control(false, { nonNullable: true });\r\n    this.linkedNodeRole = formBuilder.control(null);\r\n    this.form = formBuilder.group({\r\n      label: this.label,\r\n      isClass: this.isClass,\r\n      uid: this.uid,\r\n      tag: this.tag,\r\n      sourceType: this.sourceType,\r\n      sid: this.sid,\r\n      sidPrefix: this.sidPrefix,\r\n      linkedNodeRole: this.linkedNodeRole,\r\n    });\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this._sub = this.filter$.subscribe((f) => {\r\n      this.updateForm(f);\r\n    });\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this._sub?.unsubscribe();\r\n  }\r\n\r\n  private updateForm(filter: NodeFilter): void {\r\n    this.label.setValue(filter.label || null);\r\n    // is-class: 0=unset, 1=class, 2=not-class\r\n    if (filter.isClass !== undefined && filter.isClass !== null) {\r\n      this.isClass.setValue(filter.isClass ? 1 : 2);\r\n    } else {\r\n      this.isClass.setValue(0);\r\n    }\r\n    this.uid.setValue(filter.uid || null);\r\n    this.tag.setValue(filter.tag || null);\r\n    if (filter.sourceType === undefined || filter.sourceType === null) {\r\n      this.sourceType.setValue(null);\r\n    } else {\r\n      this.sourceType.setValue(filter.sourceType);\r\n    }\r\n    this.sid.setValue(filter.sid || null);\r\n    this.sidPrefix.setValue(filter.isSidPrefix ? true : false);\r\n    this._repository.setLinkedNodeId(filter.linkedNodeId);\r\n    this.linkedNodeRole.setValue(filter.linkedNodeRole || 'S');\r\n    this._repository.setClassNodeIds(filter.classIds);\r\n    this.form.markAsPristine();\r\n  }\r\n\r\n  private getFilter(): NodeFilter {\r\n    return {\r\n      label: this.label.value?.trim(),\r\n      isClass: this.isClass.value === 0 ? undefined : this.isClass.value === 1,\r\n      uid: this.uid.value?.trim(),\r\n      tag: this.tag.value?.trim(),\r\n      sourceType:\r\n        this.sourceType.value === null ? undefined : this.sourceType.value,\r\n      sid: this.sid.value?.trim(),\r\n      isSidPrefix: this.sidPrefix.value,\r\n      linkedNodeId: this._repository.getLinkedNode()?.id,\r\n      linkedNodeRole: this.linkedNodeRole.value || undefined,\r\n      classIds: this._repository.getClassNodes()?.map((n) => n.id),\r\n    };\r\n  }\r\n\r\n  public onResetLinkedNode(): void {\r\n    this._repository.setLinkedNode();\r\n  }\r\n\r\n  public onLinkedNodeSet(node: unknown): void {\r\n    this._repository.setLinkedNode((node as UriNode) || undefined);\r\n  }\r\n\r\n  public clearLinkedNode(): void {\r\n    this._repository.setLinkedNode();\r\n  }\r\n\r\n  public onClassAdd(node: unknown): void {\r\n    if (node) {\r\n      this._repository.addClassNode(node as UriNode);\r\n    }\r\n  }\r\n\r\n  public onClassRemove(id: number): void {\r\n    this._repository.deleteClassNode(id);\r\n  }\r\n\r\n  public reset(): void {\r\n    this.form.reset();\r\n    this.apply();\r\n  }\r\n\r\n  public apply(): void {\r\n    if (this.form.invalid) {\r\n      return;\r\n    }\r\n    const filter = this.getFilter();\r\n\r\n    // update filter in state\r\n    this._repository.setFilter(filter);\r\n  }\r\n}\r\n","<form\r\n  [formGroup]=\"form\"\r\n  (submit)=\"apply()\"\r\n  [attr.disabled]=\"disabled() ? true : null\"\r\n>\r\n  <div class=\"form-row\">\r\n    <!-- label -->\r\n    <div>\r\n      <mat-form-field>\r\n        <mat-label>label</mat-label>\r\n        <input matInput [formControl]=\"label\" />\r\n      </mat-form-field>\r\n    </div>\r\n\r\n    <!-- uid -->\r\n    <div>\r\n      <mat-form-field>\r\n        <mat-label>uid</mat-label>\r\n        <input matInput [formControl]=\"uid\" />\r\n      </mat-form-field>\r\n    </div>\r\n\r\n    <!-- isClass -->\r\n    <div>\r\n      <mat-form-field>\r\n        <mat-label>class</mat-label>\r\n        <mat-select [formControl]=\"isClass\">\r\n          <mat-option [value]=\"0\">(any)</mat-option>\r\n          <mat-option [value]=\"1\">not-class</mat-option>\r\n          <mat-option [value]=\"2\">class</mat-option>\r\n        </mat-select>\r\n      </mat-form-field>\r\n    </div>\r\n\r\n    <!-- tag -->\r\n    <div>\r\n      <mat-form-field>\r\n        <mat-label>tag</mat-label>\r\n        <input matInput [formControl]=\"tag\" />\r\n      </mat-form-field>\r\n    </div>\r\n\r\n    <!-- sourceType -->\r\n    <div>\r\n      <mat-form-field>\r\n        <mat-label>source type</mat-label>\r\n        <mat-select [formControl]=\"sourceType\">\r\n          <mat-option [value]=\"null\">(any)</mat-option>\r\n          <mat-option [value]=\"0\">user</mat-option>\r\n          <mat-option [value]=\"1\">item</mat-option>\r\n          <mat-option [value]=\"2\">part</mat-option>\r\n          <mat-option [value]=\"3\">thesaurus</mat-option>\r\n          <mat-option [value]=\"4\">implicit</mat-option>\r\n        </mat-select>\r\n      </mat-form-field>\r\n    </div>\r\n\r\n    <!-- sid, sidPrefix -->\r\n    <div>\r\n      <mat-form-field>\r\n        <mat-label>source ID</mat-label>\r\n        <input matInput [formControl]=\"sid\" />\r\n      </mat-form-field>\r\n      &nbsp;\r\n      <mat-checkbox [formControl]=\"sidPrefix\">prefix</mat-checkbox>\r\n    </div>\r\n\r\n    <!-- linkedNode, linkedNodeRole -->\r\n    <div>\r\n      <fieldset>\r\n        <legend>linked node</legend>\r\n        <cadmus-ref-lookup\r\n          label=\"node\"\r\n          [item]=\"linkedNode$ | async\"\r\n          [service]=\"lookupService\"\r\n          (itemChange)=\"onLinkedNodeSet($event)\"\r\n        />\r\n        @if (linkedNode$ | async) {\r\n        <div>\r\n          <mat-form-field>\r\n            <mat-label>role</mat-label>\r\n            <mat-select [formControl]=\"linkedNodeRole\">\r\n              <mat-option value=\"S\">subject</mat-option>\r\n              <mat-option value=\"O\">object</mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n          <button\r\n            type=\"button\"\r\n            mat-icon-button\r\n            matTooltip=\"Reset linked node\"\r\n            (click)=\"clearLinkedNode()\"\r\n          >\r\n            <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n          </button>\r\n        </div>\r\n        }\r\n      </fieldset>\r\n    </div>\r\n\r\n    <!-- classes -->\r\n    <div>\r\n      <fieldset>\r\n        <legend>classes</legend>\r\n        <cadmus-ref-lookup\r\n          label=\"class\"\r\n          [service]=\"lookupService\"\r\n          [baseFilter]=\"{ isClass: true }\"\r\n          (itemChange)=\"onClassAdd($event)\"\r\n        />\r\n        @if (classNodes$ | async; as classNodes) {\r\n        <mat-chip-listbox>\r\n          @for (node of classNodes; track node.id) {\r\n          <mat-chip-option\r\n            [removable]=\"true\"\r\n            (removed)=\"onClassRemove(node.id)\"\r\n            matTooltip=\"{{ node.uri }}\"\r\n            >{{ node.label }}\r\n            <button type=\"button\" matChipRemove>\r\n              <mat-icon>clear</mat-icon>\r\n            </button>\r\n          </mat-chip-option>\r\n          }\r\n        </mat-chip-listbox>\r\n        }\r\n      </fieldset>\r\n    </div>\r\n  </div>\r\n\r\n  <div id=\"toolbar\" class=\"btn-group\" role=\"group\" aria-label=\"toolbar\">\r\n    <button\r\n      mat-icon-button\r\n      type=\"button\"\r\n      (click)=\"reset()\"\r\n      matTooltip=\"Reset filters\"\r\n      [disabled]=\"disabled()\"\r\n    >\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      [disabled]=\"disabled()\"\r\n      matTooltip=\"Apply filters\"\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, effect, input, model, output } from '@angular/core';\r\nimport {\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  Validators,\r\n  FormsModule,\r\n  ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { UriNode, NodeSourceType } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Graph node editor.\r\n */\r\n@Component({\r\n  selector: 'cadmus-graph-node-editor',\r\n  templateUrl: './graph-node-editor.component.html',\r\n  styleUrls: ['./graph-node-editor.component.css'],\r\n  imports: [\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    MatFormField,\r\n    MatLabel,\r\n    MatInput,\r\n    MatError,\r\n    MatCheckbox,\r\n    MatSelect,\r\n    MatOption,\r\n    MatIconButton,\r\n    MatIcon,\r\n  ],\r\n})\r\nexport class GraphNodeEditorComponent {\r\n  /**\r\n   * The node being edited. A new node has ID=0 and no uri.\r\n   */\r\n  public readonly node = model<UriNode>();\r\n\r\n  /**\r\n   * The optional set of thesaurus entries for node's tags.\r\n   */\r\n  public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n  /**\r\n   * Emitted when the user requested to close the editor.\r\n   */\r\n  public readonly editorClose = output();\r\n\r\n  public isNew: boolean;\r\n\r\n  public uri: FormControl<string | null>;\r\n  public label: FormControl<string | null>;\r\n  public isClass: FormControl<boolean>;\r\n  public tag: FormControl<string | null>;\r\n  public form: FormGroup;\r\n\r\n  constructor(formBuilder: FormBuilder) {\r\n    this.isNew = true;\r\n    // form\r\n    this.uri = formBuilder.control(null, [\r\n      Validators.required,\r\n      Validators.maxLength(500),\r\n    ]);\r\n    this.label = formBuilder.control(null, [\r\n      Validators.required,\r\n      Validators.maxLength(500),\r\n    ]);\r\n    this.isClass = formBuilder.control(false, { nonNullable: true });\r\n    this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n    this.form = formBuilder.group({\r\n      uri: this.uri,\r\n      label: this.label,\r\n      isClass: this.isClass,\r\n      tag: this.tag,\r\n    });\r\n\r\n    effect(() => {\r\n      this.updateForm(this.node());\r\n    });\r\n  }\r\n\r\n  private updateForm(node?: UriNode): void {\r\n    if (!node) {\r\n      this.form.reset();\r\n      this.isNew = true;\r\n      return;\r\n    }\r\n    this.uri.setValue(node.uri);\r\n    this.label.setValue(node.label);\r\n    this.isClass.setValue(node.isClass ? true : false);\r\n    this.tag.setValue(node.tag || null);\r\n    this.isNew = node.id ? false : true;\r\n    this.form.markAsPristine();\r\n  }\r\n\r\n  private getNode(): UriNode {\r\n    return {\r\n      id: this.node()?.id || 0,\r\n      sourceType: this.node()?.sourceType || NodeSourceType.User,\r\n      uri: this.uri.value?.trim() || '',\r\n      label: this.label.value?.trim() || '',\r\n      isClass: this.isClass.value,\r\n      tag: this.tag.value?.trim(),\r\n    };\r\n  }\r\n\r\n  public cancel(): void {\r\n    this.editorClose.emit();\r\n  }\r\n\r\n  public save(): void {\r\n    if (this.form.invalid) {\r\n      return;\r\n    }\r\n    this.node.set(this.getNode());\r\n  }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n  <!-- uri (readonly if not new) -->\r\n  <div class=\"form-row\">\r\n    @if (isNew) {\r\n    <mat-form-field>\r\n      <mat-label>uri</mat-label>\r\n      <input matInput [formControl]=\"uri\" />\r\n      @if ($any(uri).errors?.required && (uri.dirty || uri.touched)) {\r\n      <mat-error>uri required</mat-error>\r\n      } @if ($any(uri).errors?.maxLength && (uri.dirty || uri.touched)) {\r\n      <mat-error>uri too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    } @if (!isNew) {\r\n    <span style=\"color: silver\">{{ uri.value }} </span>\r\n    }\r\n\r\n    <!-- label -->\r\n    <mat-form-field>\r\n      <mat-label>label</mat-label>\r\n      <input matInput [formControl]=\"label\" />\r\n      @if ($any(label).errors?.required && (label.dirty || label.touched)) {\r\n      <mat-error>label required</mat-error>\r\n      } @if ($any(label).errors?.maxLength && (label.dirty || label.touched)) {\r\n      <mat-error>label too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n\r\n    <!-- class -->\r\n    <mat-checkbox [formControl]=\"isClass\">is class</mat-checkbox>\r\n\r\n    <!-- tag -->\r\n    @if (tagEntries()?.length) {\r\n    <mat-form-field>\r\n      <mat-label>tag</mat-label>\r\n      <mat-select [formControl]=\"tag\">\r\n        <mat-option [value]=\"null\">(no tag)</mat-option>\r\n        @for (e of tagEntries(); track e.id) {\r\n        <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n        }\r\n      </mat-select>\r\n    </mat-form-field>\r\n    } @else {\r\n    <mat-form-field>\r\n      <mat-label>tag</mat-label>\r\n      <input matInput [formControl]=\"tag\" />\r\n      @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n      <mat-error>tag too long</mat-error>\r\n      }\r\n    </mat-form-field>\r\n    }\r\n  </div>\r\n\r\n  <!-- buttons -->\r\n  <div>\r\n    <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n      <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n    </button>\r\n    &nbsp;\r\n    <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\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, output } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatCard, MatCardContent } from '@angular/material/card';\r\nimport { MatProgressBar } from '@angular/material/progress-bar';\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n  MatExpansionPanel,\r\n  MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { GraphService, UriNode, NodeSourceType } from '@myrmidon/cadmus-api';\r\n\r\nimport { NodeListRepository } from '../../state/graph-node-list.repository';\r\nimport { GraphNodeFilterComponent } from '../graph-node-filter/graph-node-filter.component';\r\nimport { GraphNodeEditorComponent } from '../graph-node-editor/graph-node-editor.component';\r\n\r\n/**\r\n * List of graph nodes. This includes a graph node filter, a list, and a graph\r\n * editor.\r\n */\r\n@Component({\r\n  selector: 'cadmus-graph-node-list',\r\n  templateUrl: './graph-node-list.component.html',\r\n  styleUrls: ['./graph-node-list.component.css'],\r\n  imports: [\r\n    MatCard,\r\n    MatCardContent,\r\n    GraphNodeFilterComponent,\r\n    MatProgressBar,\r\n    MatIconButton,\r\n    MatTooltip,\r\n    MatIcon,\r\n    MatButton,\r\n    MatPaginator,\r\n    MatExpansionPanel,\r\n    MatExpansionPanelHeader,\r\n    GraphNodeEditorComponent,\r\n    AsyncPipe,\r\n  ],\r\n})\r\nexport class GraphNodeListComponent {\r\n  public loading$: Observable<boolean | undefined>;\r\n  public page$: Observable<DataPage<UriNode>>;\r\n\r\n  /**\r\n   * The currently edited node if any.\r\n   */\r\n  public readonly editedNode = model<UriNode>();\r\n\r\n  /**\r\n   * The optional set of thesaurus entries for node's tags.\r\n   */\r\n  public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n  /**\r\n   * True if this node list should have a walker button for each node.\r\n   */\r\n  public readonly hasWalker = input<boolean>();\r\n\r\n  /**\r\n   * Emitted when walking a specific node is requested.\r\n   */\r\n  public readonly nodeWalk = output<UriNode>();\r\n\r\n  constructor(\r\n    private _repository: NodeListRepository,\r\n    private _graphService: GraphService,\r\n    private _dialogService: DialogService,\r\n    private _snackbar: MatSnackBar\r\n  ) {\r\n    this.loading$ = _repository.loading$;\r\n    this.page$ = _repository.page$;\r\n  }\r\n\r\n  public onPageChange(event: PageEvent): void {\r\n    this._repository.setPage(event.pageIndex + 1, event.pageSize);\r\n  }\r\n\r\n  public addNode(): void {\r\n    this.editedNode.set({\r\n      uri: '',\r\n      id: 0,\r\n      sourceType: NodeSourceType.User,\r\n      label: '',\r\n    });\r\n  }\r\n\r\n  public editNode(node: UriNode): void {\r\n    this.editedNode.set(node);\r\n  }\r\n\r\n  public onNodeChange(node: UriNode): void {\r\n    this._graphService.addNode(node).subscribe({\r\n      next: (n) => {\r\n        this.editedNode.set(undefined);\r\n        this._repository.reset();\r\n        this._snackbar.open('Node saved', 'OK', {\r\n          duration: 1500,\r\n        });\r\n      },\r\n      error: (error) => {\r\n        console.error('Error saving node', error);\r\n        this._snackbar.open('Error saving node', 'OK');\r\n      },\r\n    });\r\n  }\r\n\r\n  public onEditorClose(): void {\r\n    this.editedNode.set(undefined);\r\n  }\r\n\r\n  public deleteNode(node: UriNode): void {\r\n    this._dialogService\r\n      .confirm('Delete Node', 'Delete node ' + node.label + '?')\r\n      .pipe(take(1))\r\n      .subscribe((yes) => {\r\n        if (yes) {\r\n          this._graphService\r\n            .deleteNode(node.id)\r\n            .pipe(take(1))\r\n            .subscribe({\r\n              next: (_) => {\r\n                this._repository.reset();\r\n              },\r\n              error: (error) => {\r\n                console.error('Error deleting node', error);\r\n                this._snackbar.open('Error deleting node', 'OK');\r\n              },\r\n            });\r\n        }\r\n      });\r\n  }\r\n\r\n  public walkNode(node: UriNode): void {\r\n    this.nodeWalk.emit(node);\r\n  }\r\n\r\n  public reset(): void {\r\n    this._repository.reset();\r\n  }\r\n}\r\n","<div id=\"container\">\r\n  <!-- filters -->\r\n  <div id=\"filters\">\r\n    <mat-card appearance=\"outlined\">\r\n      <mat-card-content>\r\n        <cadmus-graph-node-filter\r\n          [disabled]=\"(loading$ | async) ? true : false\"\r\n        />\r\n      </mat-card-content>\r\n    </mat-card>\r\n  </div>\r\n\r\n  <!-- list -->\r\n  @if (page$ | async; as page) {\r\n  <div id=\"list\">\r\n    @if (loading$ | async) {\r\n    <div>\r\n      <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n    </div>\r\n    }\r\n    <!-- list -->\r\n    @if (page) {\r\n    <div>\r\n      <table>\r\n        <thead>\r\n          <th></th>\r\n          <th>id</th>\r\n          <th>cls</th>\r\n          <th>label</th>\r\n          <th>uri</th>\r\n          <th class=\"noif-lt-md\">srct</th>\r\n          <th class=\"noif-lt-md\">sid</th>\r\n          <th class=\"noif-lt-md\">tag</th>\r\n        </thead>\r\n        <tbody>\r\n          @for (d of page.items; track d.id) {\r\n          <tr [class.selected]=\"d === editedNode()\">\r\n            <td class=\"fit-width\">\r\n              @if (hasWalker()) {\r\n              <button\r\n                mat-icon-button\r\n                type=\"button\"\r\n                matTooltip=\"Walk node\"\r\n                (click)=\"walkNode(d)\"\r\n              >\r\n                <mat-icon class=\"mat-primary\">flare</mat-icon>\r\n              </button>\r\n              }\r\n              <button\r\n                mat-icon-button\r\n                type=\"button\"\r\n                matTooltip=\"Edit node\"\r\n                (click)=\"editNode(d)\"\r\n              >\r\n                <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n              </button>\r\n              <button\r\n                mat-icon-button\r\n                type=\"button\"\r\n                matTooltip=\"Delete node\"\r\n                (click)=\"deleteNode(d)\"\r\n              >\r\n                <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n              </button>\r\n            </td>\r\n            <td>{{ d.id }}</td>\r\n            <td>{{ d.isClass ? \"C\" : \"\" }}</td>\r\n            <td>{{ d.label }}</td>\r\n            <td>{{ d.uri }}</td>\r\n            <td class=\"noif-lt-md\">{{ \"UIPTX\"[d.sourceType] }}</td>\r\n            <td class=\"noif-lt-md\">{{ d.sid }}</td>\r\n            <td class=\"noif-lt-md\">{{ d.tag }}</td>\r\n          </tr>\r\n          }\r\n        </tbody>\r\n      </table>\r\n      <div>\r\n        <button\r\n          class=\"mat-primary\"\r\n          type=\"button\"\r\n          mat-flat-button\r\n          (click)=\"addNode()\"\r\n        >\r\n          <mat-icon>add_circle</mat-icon>\r\n          add node\r\n        </button>\r\n      </div>\r\n      <!-- pagination -->\r\n      <div class=\"form-row\">\r\n        <button\r\n          type=\"button\"\r\n          mat-icon-button\r\n          matTooltip=\"Reset list\"\r\n          (click)=\"reset()\"\r\n        >\r\n          <mat-icon class=\"mat-warn\">autorenew</mat-icon>\r\n        </button>\r\n        <mat-paginator\r\n          [length]=\"page.total\"\r\n          [pageIndex]=\"page.pageNumber - 1\"\r\n          [pageSize]=\"page.pageSize\"\r\n          [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n          (page)=\"onPageChange($event)\"\r\n          [showFirstLastButtons]=\"true\"\r\n        />\r\n      </div>\r\n    </div>\r\n    }\r\n    <!-- editor -->\r\n    <mat-expansion-panel\r\n      [expanded]=\"editedNode() ? true : false\"\r\n      [disabled]=\"editedNode() ? false : true\"\r\n      id=\"editor\"\r\n    >\r\n      <mat-expansion-panel-header>Node</mat-expansion-panel-header>\r\n      <cadmus-graph-node-editor\r\n        [node]=\"editedNode()\"\r\n        [tagEntries]=\"tagEntries()\"\r\n        (nodeChange)=\"onNodeChange($event!)\"\r\n        (editorClose)=\"onEditorClose()\"\r\n      />\r\n    </mat-expansion-panel>\r\n  </div>\r\n  }\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, tap } from 'rxjs';\r\n\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\nimport {\r\n  PagedListStore,\r\n  PagedListStoreService,\r\n} from '@myrmidon/paged-data-browsers';\r\n\r\nimport { UriNode, TripleFilter, UriTriple } from '@myrmidon/cadmus-api';\r\nimport { GraphService } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Graph nodes list repository.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class GraphTripleListRepository\r\n  implements PagedListStoreService<TripleFilter, UriTriple>\r\n{\r\n  private readonly _store: PagedListStore<TripleFilter, UriTriple>;\r\n  private readonly _loading$: BehaviorSubject<boolean | undefined>;\r\n  private readonly _filter$: BehaviorSubject<TripleFilter>;\r\n  private readonly _subjectNode$: BehaviorSubject<UriNode | undefined>;\r\n  private readonly _predicateNode$: BehaviorSubject<UriNode | undefined>;\r\n  private readonly _objectNode$: BehaviorSubject<UriNode | undefined>;\r\n\r\n  public get loading$(): Observable<boolean | undefined> {\r\n    return this._loading$.asObservable();\r\n  }\r\n  public get filter$(): Observable<TripleFilter> {\r\n    return this._filter$.asObservable();\r\n  }\r\n  public get page$(): Observable<DataPage<UriTriple>> {\r\n    return this._store.page$;\r\n  }\r\n  public get subjectNode$(): Observable<UriNode | undefined> {\r\n    return this._subjectNode$.asObservable();\r\n  }\r\n  public get predicateNode$(): Observable<UriNode | undefined> {\r\n    return this._predicateNode$.asObservable();\r\n  }\r\n  public get objectNode$(): Observable<UriNode | undefined> {\r\n    return this._objectNode$.asObservable();\r\n  }\r\n\r\n  constructor(private _graphService: GraphService) {\r\n    this._store = new PagedListStore<TripleFilter, UriTriple>(this);\r\n    this._filter$ = new BehaviorSubject<TripleFilter>({});\r\n    this._subjectNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n    this._predicateNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n    this._objectNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n    this._loading$ = new BehaviorSubject<boolean | undefined>(undefined);\r\n    this._store.reset();\r\n  }\r\n\r\n  public async reset(): Promise<void> {\r\n    this._loading$.next(true);\r\n    try {\r\n      await this._store.reset();\r\n    } catch (error) {\r\n      throw error;\r\n    } finally {\r\n      this._loading$.next(false);\r\n    }\r\n  }\r\n\r\n  public loadPage(\r\n    pageNumber: number,\r\n    pageSize: number,\r\n    filter: TripleFilter\r\n  ): Observable<DataPage<UriTriple>> {\r\n    this._loading$.next(true);\r\n    return this._graphService.getTriples(pageNumber, pageSize, filter).pipe(\r\n      tap({\r\n        next: () => this._loading$.next(false),\r\n        error: () => this._loading$.next(false),\r\n      })\r\n    );\r\n  }\r\n\r\n  public async setFilter(filter: TripleFilter): Promise<void> {\r\n    this._loading$.next(true);\r\n    try {\r\n      await this._store.setFilter(filter);\r\n    } catch (error) {\r\n      throw error;\r\n    } finally {\r\n      this._loading$.next(false);\r\n    }\r\n  }\r\n\r\n  public getFilter(): TripleFilter {\r\n    return this._store.getFilter();\r\n  }\r\n\r\n  public async setPage(pageNumber: number, pageSize: number): Promise<void> {\r\n    this._loading$.next(true);\r\n    try {\r\n      await this._store.setPage(pageNumber, pageSize);\r\n    } catch (error) {\r\n      throw error;\r\n    } finally {\r\n      this._loading$.next(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set the node term used in filter.\r\n   *\r\n   * @param node The node or null/undefined.\r\n   * @param type The type: subject, predicate, object.\r\n   */\r\n  public setTerm(\r\n    node: UriNode | null | undefined,\r\n    type: 'S' | 'P' | 'O'\r\n  ): void {\r\n    switch (type) {\r\n      case 'S':\r\n        this._subjectNode$.next(node || undefined);\r\n        break;\r\n      case 'P':\r\n        this._predicateNode$.next(node || undefined);\r\n        break;\r\n      case 'O':\r\n        this._objectNode$.next(node || undefined);\r\n        break;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set the node term used in filter by its ID.\r\n   *\r\n   * @param id The node ID or null/undefined.\r\n   * @param type The type: subject, predicate, object.\r\n   */\r\n  public setTermId(id: number | null | undefined, type: 'S' | 'P' | 'O'): void {\r\n    if (!id) {\r\n      this.setTerm(null, type);\r\n      return;\r\n    }\r\n    this._graphService.getNode(id).subscribe({\r\n      next: (node) => {\r\n        this.setTerm(node, type);\r\n      },\r\n      error: (error) => {\r\n        console.error(`Node ID ${id} not found`, error);\r\n      },\r\n    });\r\n  }\r\n\r\n  public selectTerm(type: 'S' | 'P' | 'O'): Observable<UriNode | undefined> {\r\n    switch (type) {\r\n      case 'S':\r\n        return this.subjectNode$;\r\n      case 'P':\r\n        return this.predicateNode$;\r\n      case 'O':\r\n        return this.objectNode$;\r\n    }\r\n  }\r\n\r\n  public getTerm(type: 'S' | 'P' | 'O'): UriNode | undefined {\r\n    switch (type) {\r\n      case 'S':\r\n        return this._subjectNode$.value;\r\n      case 'P':\r\n        return this._predicateNode$.value;\r\n      case 'O':\r\n        return this._objectNode$.value;\r\n    }\r\n  }\r\n}\r\n","import { Component, input, OnDestroy, OnInit } from '@angular/core';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport {\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  Validators,\r\n  FormsModule,\r\n  ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatLabel, MatFormField } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { UriNode, TripleFilter } from '@myrmidon/cadmus-api';\r\n\r\nimport { GraphTripleListRepository } from '../../state/graph-triple-list.repository';\r\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\r\n\r\n/**\r\n * Graph triples filter used in graph triples list.\r\n * Its data are in the graph triples store, which gets updated when\r\n * users apply new filters.\r\n */\r\n@Component({\r\n  selector: 'cadmus-graph-triple-filter',\r\n  templateUrl: './graph-triple-filter.component.html',\r\n  styleUrls: ['./graph-triple-filter.component.css'],\r\n  imports: [\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    RefLookupComponent,\r\n    MatIconButton,\r\n    MatIcon,\r\n    MatCheckbox,\r\n    MatLabel,\r\n    MatFormField,\r\n    MatInput,\r\n    MatTooltip,\r\n    AsyncPipe,\r\n  ],\r\n})\r\nexport class GraphTripleFilterComponent implements OnInit, OnDestroy {\r\n  private _sub?: Subscription;\r\n  public filter$: Observable<TripleFilter>;\r\n  public literal: FormControl<boolean>;\r\n  public objectLit: FormControl<string | null>;\r\n  public sid: FormControl<string | null>;\r\n  public sidPrefix: FormControl<boolean>;\r\n  public tag: FormControl<string | null>;\r\n  public form: FormGroup;\r\n\r\n  public subjectNode$: Observable<UriNode | undefined>;\r\n  public predicateNode$: Observable<UriNode | undefined>;\r\n  public objectNode$: Observable<UriNode | undefined>;\r\n\r\n  public readonly disabled = input<boolean>();\r\n\r\n  constructor(\r\n    formBuilder: FormBuilder,\r\n    public lookupService: GraphNodeLookupService,\r\n    private _repository: GraphTripleListRepository\r\n  ) {\r\n    this.filter$ = _repository.filter$;\r\n    this.subjectNode$ = _repository.subjectNode$;\r\n    this.predicateNode$ = _repository.predicateNode$;\r\n    this.objectNode$ = _repository.objectNode$;\r\n    // form\r\n    this.literal = formBuilder.control(false, { nonNullable: true });\r\n    this.objectLit = formBuilder.control(null, Validators.maxLength(100));\r\n    this.sid = formBuilder.control(null);\r\n    this.sidPrefix = formBuilder.control(false, { nonNullable: true });\r\n    this.tag = formBuilder.control(null);\r\n    this.form = formBuilder.group({\r\n      literal: this.literal,\r\n      objectLit: this.objectLit,\r\n      sid: this.sid,\r\n      sidPrefix: this.sidPrefix,\r\n      tag: this.tag,\r\n    });\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this._sub = this.filter$.subscribe((f) => {\r\n      this.updateForm(f);\r\n    });\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this._sub?.unsubscribe();\r\n  }\r\n\r\n  private updateForm(filter: TripleFilter): void {\r\n    this._repository.setTermId(filter.subjectId, 'S');\r\n    this._repository.setTermId(\r\n      filter.predicateIds?.length ? filter.predicateIds[0] : null,\r\n      'P'\r\n    );\r\n    this._repository.setTermId(filter.objectId, 'O');\r\n    this.literal.setValue(filter.literalPattern ? true : false);\r\n    this.objectLit.setValue(filter.literalPattern || null);\r\n    this.sid.setValue(filter.sid || null);\r\n    this.tag.setValue(filter.tag || null);\r\n    this.form.markAsPristine();\r\n  }\r\n\r\n  private getFilter(): TripleFilter {\r\n    const pid = this._repository.getTerm('P')?.id;\r\n    return {\r\n      subjectId: this._repository.getTerm('S')?.id,\r\n      predicateIds: pid ? [pid] : undefined,\r\n      objectId: this.literal.value\r\n        ? undefined\r\n        : this._repository.getTerm('O')?.id,\r\n      literalPattern: this.literal.value\r\n        ? this.objectLit.value?.trim()\r\n        : undefined,\r\n      sid: this.sid.value?.trim(),\r\n      tag: this.tag.value?.trim(),\r\n    };\r\n  }\r\n\r\n  public onSubjectNodeChange(node?: unknown): void {\r\n    this._repository.setTerm(node as UriNode, 'S');\r\n  }\r\n\r\n  public clearSubjectNode(): void {\r\n    this._repository.setTerm(null, 'S');\r\n  }\r\n\r\n  public onPredicateNodeChange(node?: unknown): void {\r\n    this._repository.setTerm(node as UriNode, 'P');\r\n  }\r\n\r\n  public clearPredicateNode(): void {\r\n    this._repository.setTerm(null, 'P');\r\n  }\r\n\r\n  public onObjectNodeChange(node?: unknown): void {\r\n    this._repository.setTerm(node as UriNode, 'O');\r\n  }\r\n\r\n  public clearObjectNode(): void {\r\n    this._repository.setTerm(null, 'O');\r\n  }\r\n\r\n  public reset(): void {\r\n    this.form.reset();\r\n    this.apply();\r\n  }\r\n\r\n  public apply(): void {\r\n    if (this.form.invalid) {\r\n      return;\r\n    }\r\n    const filter = this.getFilter();\r\n\r\n    // update filter in state\r\n    this._repository.setFilter(filter);\r\n  }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"apply()\" [attr.disabled]=\"disabled()\">\r\n  <!-- subject -->\r\n  <div class=\"form-row\">\r\n    <cadmus-ref-lookup\r\n      [service]=\"lookupService\"\r\n      [item]=\"subjectNode$ | async\"\r\n      label=\"subject\"\r\n      (itemChange)=\"onSubjectNodeChange($event)\"\r\n    />\r\n    <button\r\n      type=\"button\"\r\n      mat-icon-button\r\n      style=\"margin-top: 20px\"\r\n      (click)=\"clearSubjectNode()\"\r\n    >\r\n      <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n    </button>\r\n  </div>\r\n  <!-- predicate -->\r\n  <div class=\"form-row\">\r\n    <cadmus-ref-lookup\r\n      [service]=\"lookupService\"\r\n      label=\"predicate\"\r\n      [item]=\"predicateNode$ | async\"\r\n      [baseFilter]=\"{ tag: 'property' }\"\r\n      (itemChange)=\"onPredicateNodeChange($event)\"\r\n    />\r\n    <button\r\n      type=\"button\"\r\n      mat-icon-button\r\n      style=\"margin-top: 20px\"\r\n      (click)=\"clearPredicateNode()\"\r\n    >\r\n      <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n    </button>\r\n  </div>\r\n  <!-- object, objectLit -->\r\n  <div>\r\n    <mat-checkbox [formControl]=\"literal\">literal</mat-checkbox>\r\n  </div>\r\n  @if (literal.value) {\r\n  <div>\r\n    <mat-label>literal</mat-label>\r\n    <mat-form-field>\r\n      <input matInput [formControl]=\"objectLit\" maxlength=\"500\" />\r\n    </mat-form-field>\r\n  </div>\r\n  } @else {\r\n  <div class=\"form-row\">\r\n    <cadmus-ref-lookup\r\n      [service]=\"lookupService\"\r\n      [item]=\"objectNode$ | async\"\r\n      label=\"object\"\r\n      (itemChange)=\"onObjectNodeChange($event)\"\r\n    />\r\n    <button\r\n      type=\"button\"\r\n      mat-icon-button\r\n      style=\"margin-top: 20px\"\r\n      (click)=\"clearObjectNode()\"\r\n    >\r\n      <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n    </button>\r\n  </div>\r\n  }\r\n  <!-- sid, sidPrefix -->\r\n  <div>\r\n    <mat-form-field>\r\n      <mat-label>sid</mat-label>\r\n      <input matInput [formControl]=\"sid\" maxlength=\"500\" />\r\n    </mat-form-field>\r\n    &nbsp;\r\n    <mat-checkbox [formControl]=\"sidPrefix\">prefix</mat-checkbox>\r\n  </div>\r\n  <!-- tag -->\r\n  <br />\r\n  <div\r\n    class=\"btn-group\"\r\n    role=\"group\"\r\n    aria-label=\"toolbar\"\r\n    style=\"margin-bottom: 10px\"\r\n  >\r\n    <button\r\n      mat-icon-button\r\n      type=\"button\"\r\n      (click)=\"reset()\"\r\n      matTooltip=\"Reset filters\"\r\n      [disabled]=\"disabled()\"\r\n    >\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      [disabled]=\"disabled()\"\r\n      matTooltip=\"Apply filters\"\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 {\r\n  Component,\r\n  effect,\r\n  input,\r\n  model,\r\n  OnDestroy,\r\n  OnInit,\r\n  output,\r\n} from '@angular/core';\r\nimport {\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  Validators,\r\n  FormsModule,\r\n  ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport {\r\n  MatFormField,\r\n  MatLabel,\r\n  MatError,\r\n  MatHint,\r\n} from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { GraphService, UriNode, UriTriple } from '@myrmidon/cadmus-api';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\n\r\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\r\n\r\n@Component({\r\n  selector: 'cadmus-graph-triple-editor',\r\n  templateUrl: './graph-triple-editor.component.html',\r\n  styleUrls: ['./graph-triple-editor.component.css'],\r\n  imports: [\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    RefLookupComponent,\r\n    MatCheckbox,\r\n    MatFormField,\r\n    MatLabel,\r\n    MatInput,\r\n    MatError,\r\n    MatHint,\r\n    MatIconButton,\r\n    MatIcon,\r\n  ],\r\n})\r\nexport class GraphTripleEditorComponent implements OnInit, OnDestroy {\r\n  private _sub?: Subscription;\r\n\r\n  public readonly triple = model<UriTriple>();\r\n\r\n  /**\r\n   * The optional set of thesaurus entries for triple's tags.\r\n   */\r\n  // public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n  /**\r\n   * Emitted when the user requested to close the editor.\r\n   */\r\n  public readonly editorClose = output();\r\n\r\n  public isNew: boolean;\r\n\r\n  public subjectNode: FormControl<UriNode | null>;\r\n  public predicateNode: FormControl<UriNode | null>;\r\n  public objectNode: FormControl<UriNode | null>;\r\n  public isLiteral: FormControl<boolean>;\r\n  public literal: FormControl<string | null>;\r\n  public literalLang: FormControl<string | null>;\r\n  public literalType: FormControl<string | null>;\r\n  public tag: FormControl<string | null>;\r\n  public form: FormGroup;\r\n\r\n  constructor(\r\n    formBuilder: FormBuilder,\r\n    public lookupService: GraphNodeLookupService,\r\n    private _snackbar: MatSnackBar,\r\n    private _graphService: GraphService\r\n  ) {\r\n    this.isNew = true;\r\n    // form\r\n    this.subjectNode = formBuilder.control(null, Validators.required);\r\n    this.predicateNode = formBuilder.control(null, Validators.required);\r\n    this.objectNode = formBuilder.control(null, {\r\n      validators: NgxToolsValidators.conditionalValidator(\r\n        () => !this.isLiteral.value,\r\n        Validators.required\r\n      ),\r\n    });\r\n    this.isLiteral = formBuilder.control(true, { nonNullable: true });\r\n    this.literal = formBuilder.control(null, {\r\n      validators: [Validators.required, Validators.maxLength(15000)],\r\n      updateOn: 'change',\r\n    });\r\n    this.literalLang = formBuilder.control(null, Validators.maxLength(10));\r\n    this.literalType = formBuilder.control(null, Validators.maxLength(100));\r\n    this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n    this.form = formBuilder.group({\r\n      subjectNode: this.subjectNode,\r\n      predicateNode: this.predicateNode,\r\n      objectNode: this.objectNode,\r\n      isLiteral: this.isLiteral,\r\n      literal: this.literal,\r\n      literalLang: this.literalLang,\r\n      literalType: this.literalType,\r\n      tag: this.tag,\r\n    });\r\n\r\n    effect(() => {\r\n      this.updateForm(this.triple());\r\n    });\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this._sub = this.isLiteral.valueChanges.subscribe((value) => {\r\n      if (value) {\r\n        this.objectNode.setValidators(null);\r\n        this.literal.setValidators([\r\n          Validators.required,\r\n          Validators.maxLength(15000),\r\n        ]);\r\n      } else {\r\n        this.objectNode.setValidators(Validators.required);\r\n        this.literal.setValidators(null);\r\n      }\r\n      this.literal.updateValueAndValidity();\r\n    });\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this._sub?.unsubscribe();\r\n  }\r\n\r\n  public onSubjectChange(node?: unknown): void {\r\n    this.subjectNode.setValue((node as UriNode) || null);\r\n    this.subjectNode.updateValueAndValidity();\r\n    this.subjectNode.markAsDirty();\r\n  }\r\n\r\n  public onPredicateChange(node?: unknown): void {\r\n    this.predicateNode.setValue((node as UriNode) || null);\r\n    this.predicateNode.updateValueAndValidity();\r\n    this.predicateNode.markAsDirty();\r\n  }\r\n\r\n  public onObjectChange(node?: unknown): void {\r\n    this.objectNode.setValue((node as UriNode) || null);\r\n    this.objectNode.updateValueAndValidity();\r\n    this.objectNode.markAsDirty();\r\n\r\n    if (node) {\r\n      this.isLiteral.setValue(false);\r\n      this.isLiteral.updateValueAndValidity();\r\n      this.isLiteral.markAsDirty();\r\n    }\r\n  }\r\n\r\n  private getNode(id: number): Promise<UriNode | undefined> {\r\n    return new Promise((resolve, reject) => {\r\n      this._graphService\r\n        .getNode(id)\r\n        .pipe(take(1))\r\n        .subscribe({\r\n          next: (node) => {\r\n            resolve(node);\r\n          },\r\n          error: (error) => {\r\n            console.error('Error loading node', error);\r\n            this._snackbar.open('Error loading node ' + id, 'OK');\r\n            reject();\r\n          },\r\n        });\r\n    });\r\n  }\r\n\r\n  private updateForm(triple?: UriTriple): void {\r\n    if (!triple) {\r\n      this.form.reset();\r\n      this.isLiteral.setValue(true);\r\n      this.isNew = true;\r\n      return;\r\n    }\r\n\r\n    if (triple.subjectId) {\r\n      this.getNode(triple.subjectId).then((node) => {\r\n        this.subjectNode.setValue(node || null);\r\n        this.subjectNode.updateValueAndValidity();\r\n        this.subjectNode.markAsDirty();\r\n      });\r\n    } else {\r\n      this.subjectNode.reset();\r\n    }\r\n    if (triple.predicateId) {\r\n      this.getNode(triple.predicateId).then((node) => {\r\n        this.predicateNode.setValue(node || null);\r\n        this.predicateNode.updateValueAndValidity();\r\n        this.predicateNode.markAsDirty();\r\n      });\r\n    } else {\r\n      this.predicateNode.reset();\r\n    }\r\n    if (triple.objectId) {\r\n      this.isLiteral.setValue(false);\r\n      this.getNode(triple.objectId).then((node) => {\r\n        this.objectNode.setValue(node || null);\r\n        this.objectNode.updateValueAndValidity();\r\n        this.objectNode.markAsDirty();\r\n      });\r\n    } else {\r\n      this.isLiteral.setValue(true);\r\n      this.literal.setValue(triple.objectLiteral || null);\r\n      this.literalLang.setValue(triple.literalLanguage || null);\r\n      this.literalType.setValue(triple.literalType || null);\r\n    }\r\n    this.isNew = triple.id ? false : true;\r\n    this.form.markAsPristine();\r\n  }\r\n\r\n  private getTriple(): UriTriple {\r\n    return {\r\n      id: this.triple()?.id || 0,\r\n      subjectId: this.subjectNode.value?.id || 0,\r\n      predicateId: this.predicateNode.value?.id || 0,\r\n      objectId: this.isLiteral.value\r\n        ? undefined\r\n        : this.objectNode.value?.id || 0,\r\n      objectLiteral: this.isLiteral.value ? this.literal.value! : undefined,\r\n      literalLanguage: this.isLiteral.value\r\n        ? this.literalLang.value || undefined\r\n        : undefined,\r\n      literalType: this.isLiteral.value\r\n        ? this.literalType.value || undefined\r\n        : undefined,\r\n      subjectUri: this.subjectNode.value?.uri || '',\r\n      predicateUri: this.predicateNode.value?.uri || '',\r\n      objectUri: this.isLiteral.value\r\n        ? undefined\r\n        : this.objectNode.value?.uri || '',\r\n    };\r\n  }\r\n\r\n  public cancel(): void {\r\n    this.editorClose.emit();\r\n  }\r\n\r\n  public save(): void {\r\n    if (this.form.invalid) {\r\n      return;\r\n    }\r\n    this.triple.set(this.getTriple());\r\n  }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n  <div id=\"row\">\r\n    <!-- S -->\r\n    <fieldset id=\"s\">\r\n      <legend>subject</legend>\r\n      <!-- picker -->\r\n      <cadmus-ref-lookup\r\n        [service]=\"lookupService\"\r\n        [required]=\"true\"\r\n        [item]=\"subjectNode.value\"\r\n        label=\"subject\"\r\n        (itemChange)=\"onSubjectChange($event)\"\r\n      />\r\n    </fieldset>\r\n    <!-- P -->\r\n    <fieldset id=\"p\">\r\n      <legend>predicate</legend>\r\n      <!-- picker -->\r\n      <cadmus-ref-lookup\r\n        [service]=\"lookupService\"\r\n        [required]=\"true\"\r\n        [item]=\"predicateNode.value\"\r\n        label=\"predicate\"\r\n        [baseFilter]=\"{ tag: 'property' }\"\r\n        (itemChange)=\"onPredicateChange($event)\"\r\n      />\r\n    </fieldset>\r\n    <!-- O -->\r\n    <fieldset id=\"o\">\r\n      <legend>object</legend>\r\n      <mat-checkbox [formControl]=\"isLiteral\">literal</mat-checkbox>\r\n      <!-- object -->\r\n      @if (!isLiteral.value) {\r\n      <cadmus-ref-lookup\r\n        [required]=\"true\"\r\n        [service]=\"lookupService\"\r\n        [item]=\"objectNode.value\"\r\n        label=\"object\"\r\n        (itemChange)=\"onObjectChange($event)\"\r\n      />\r\n      }\r\n      <!-- literal value -->\r\n      @if (isLiteral.value) {\r\n      <mat-form-field style=\"width: 100%\">\r\n        <mat-label>object</mat-label>\r\n        <textarea matInput [formControl]=\"literal\"></textarea>\r\n        @if ( $any(literal).errors?.required && (literal.dirty ||\r\n        literal.touched) ) {\r\n        <mat-error>literal required</mat-error>\r\n        } @if ( $any(literal).errors?.maxLength && (literal.dirty ||\r\n        literal.touched) ) {\r\n        <mat-error>literal too long</mat-error>\r\n        }\r\n      </mat-form-field>\r\n      }\r\n      <div class=\"form-row\">\r\n        <!-- literal language -->\r\n        @if (isLiteral.value) {\r\n        <mat-form-field>\r\n          <mat-label>language</mat-label>\r\n          <input matInput [formControl]=\"literalLang\" />\r\n          <mat-hint>ISO-639 etc.</mat-hint>\r\n          @if ( $any(literalLang).errors?.maxLength && (literalLang.dirty ||\r\n          literalLang.touched) ) {\r\n          <mat-error>language too long</mat-error>\r\n          }\r\n        </mat-form-field>\r\n\r\n        <!-- literal type -->\r\n        <mat-form-field>\r\n          <mat-label>type</mat-label>\r\n          <input matInput [formControl]=\"literalType\" />\r\n          <mat-hint>XML data type (xs:...)</mat-hint>\r\n          @if ( $any(literalType).errors?.maxLength && (literalType.dirty ||\r\n          literalType.touched) ) {\r\n          <mat-error>type too long</mat-error>\r\n          }\r\n        </mat-form-field>\r\n        }\r\n      </div>\r\n    </fieldset>\r\n  </div>\r\n\r\n  <!-- buttons -->\r\n  <div>\r\n    <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n      <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n    </button>\r\n    <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\r\n      <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n    </button>\r\n  </div>\r\n</form>\r\n","import { Component } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatCard, MatCardContent } from '@angular/material/card';\r\nimport { MatProgressBar } from '@angular/material/progress-bar';\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n  MatExpansionPanel,\r\n  MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { DataPage, EllipsisPipe } from '@myrmidon/ngx-tools';\r\n\r\nimport {\r\n  GraphService,\r\n  ThesaurusService,\r\n  UriTriple,\r\n} from '@myrmidon/cadmus-api';\r\n\r\nimport { GraphTripleFilterComponent } from '../graph-triple-filter/graph-triple-filter.component';\r\nimport { GraphTripleEditorComponent } from '../graph-triple-editor/graph-triple-editor.component';\r\nimport { GraphTripleListRepository } from '../../state/graph-triple-list.repository';\r\n\r\n@Component({\r\n  selector: 'cadmus-graph-triple-list',\r\n  templateUrl: './graph-triple-list.component.html',\r\n  styleUrls: ['./graph-triple-list.component.css'],\r\n  imports: [\r\n    MatCard,\r\n    MatCardContent,\r\n    GraphTripleFilterComponent,\r\n    MatProgressBar,\r\n    MatIconButton,\r\n    MatTooltip,\r\n    MatIcon,\r\n    MatButton,\r\n    MatPaginator,\r\n    MatExpansionPanel,\r\n    MatExpansionPanelHeader,\r\n    GraphTripleEditorComponent,\r\n    AsyncPipe,\r\n    EllipsisPipe,\r\n  ],\r\n})\r\nexport class GraphTripleListComponent {\r\n  public page$: Observable<DataPage<UriTriple>>;\r\n  public loading$: Observable<boolean | undefined>;\r\n  public editedTriple?: UriTriple;\r\n\r\n  /**\r\n   * The optional set of thesaurus entries for triple's tags.\r\n   */\r\n  // public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n  constructor(\r\n    private _graphService: GraphService,\r\n    private _dialogService: DialogService,\r\n    private _snackbar: MatSnackBar,\r\n    private _repository: GraphTripleListRepository\r\n  ) {\r\n    this.page$ = _repository.page$;\r\n    this.loading$ = _repository.loading$;\r\n  }\r\n\r\n  // ngOnInit(): void {\r\n  //   this._thesService\r\n  //     .getThesaurus('graph-triple-tags@en', true)\r\n  //     .subscribe((thesaurus) => {\r\n  //       this.tagEntries = thesaurus?.entries || [];\r\n  //     });\r\n  // }\r\n\r\n  public onPageChange(event: PageEvent): void {\r\n    this._repository.setPage(event.pageIndex + 1, event.pageSize);\r\n  }\r\n\r\n  public addTriple(): void {\r\n    this.editedTriple = {\r\n      id: 0,\r\n      subjectId: 0,\r\n      predicateId: 0,\r\n      objectId: 0,\r\n      subjectUri: '',\r\n      predicateUri: '',\r\n    };\r\n  }\r\n\r\n  public editTriple(triple: UriTriple): void {\r\n    this.editedTriple = triple;\r\n  }\r\n\r\n  public onTripleChange(triple: UriTriple): void {\r\n    this._graphService\r\n      .addTriple(triple)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (n) => {\r\n          this.editedTriple = undefined;\r\n          this._repository.reset();\r\n          this._snackbar.open('Triple saved', 'OK', {\r\n            duration: 1500,\r\n          });\r\n        },\r\n        error: (error) => {\r\n          console.error('Error saving triple', error);\r\n          this._snackbar.open('Error saving triple', 'OK');\r\n        },\r\n      });\r\n  }\r\n\r\n  public onEditorClose(): void {\r\n    this.editedTriple = undefined;\r\n  }\r\n\r\n  public deleteTriple(triple: UriTriple): void {\r\n    this._dialogService\r\n      .confirm('Delete Triple', 'Delete triple?')\r\n      .pipe(take(1))\r\n      .subscribe((yes) => {\r\n        if (yes) {\r\n          this._graphService\r\n            .deleteTriple(triple.id)\r\n            .pipe(take(1))\r\n            .subscribe({\r\n              next: (_) => {\r\n                this._repository.reset();\r\n              },\r\n              error: (error) => {\r\n                console.error('Error deleting triple', error);\r\n                this._snackbar.open('Error deleting triple', 'OK');\r\n              },\r\n            });\r\n        }\r\n      });\r\n  }\r\n\r\n  public reset(): void {\r\n    this._repository.reset();\r\n  }\r\n}\r\n","<div id=\"container\">\r\n  <!-- filters -->\r\n  <div id=\"filters\">\r\n    <mat-card appearance=\"outlined\">\r\n      <mat-card-content>\r\n        <cadmus-graph-triple-filter [disabled]=\"(loading$ | async) === true\" />\r\n      </mat-card-content>\r\n    </mat-card>\r\n  </div>\r\n\r\n  <!-- list -->\r\n  @if (page$ | async; as page) {\r\n  <div id=\"list\">\r\n    @if (loading$ | async) {\r\n    <div>\r\n      <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n    </div>\r\n    }\r\n    <!-- list -->\r\n    <div>\r\n      <table>\r\n        <thead>\r\n          <th></th>\r\n          <th>ID</th>\r\n          <th>S</th>\r\n          <th>P</th>\r\n          <th>O</th>\r\n          <th class=\"noif-lt-md\">sid</th>\r\n          <th class=\"noif-lt-md\">tag</th>\r\n        </thead>\r\n        <tbody>\r\n          @for (d of page.items; track d.id) {\r\n          <tr [class.selected]=\"d === editedTriple\">\r\n            <td class=\"fit-width\">\r\n              <button\r\n                mat-icon-button\r\n                type=\"button\"\r\n                matTooltip=\"Edit triple\"\r\n                (click)=\"editTriple(d)\"\r\n              >\r\n                <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n              </button>\r\n              <button\r\n                mat-icon-button\r\n                type=\"button\"\r\n                matTooltip=\"Delete triple\"\r\n                (click)=\"deleteTriple(d)\"\r\n              >\r\n                <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n              </button>\r\n            </td>\r\n            <td>{{ d.id }}</td>\r\n            <td>{{ d.subjectUri }}</td>\r\n            <td>{{ d.predicateUri }}</td>\r\n            <td>{{ d.objectUri ?? d.objectLiteral | ellipsis }}</td>\r\n            <td class=\"noif-lt-md\">{{ d.sid }}</td>\r\n            <td class=\"noif-lt-md\">{{ d.tag }}</td>\r\n          </tr>\r\n          }\r\n        </tbody>\r\n      </table>\r\n      <div>\r\n        <button\r\n          class=\"mat-primary\"\r\n          type=\"button\"\r\n          mat-flat-button\r\n          (click)=\"addTriple()\"\r\n        >\r\n          <mat-icon>add_circle</mat-icon>\r\n          triple\r\n        </button>\r\n      </div>\r\n      <!-- pagination -->\r\n      <div id=\"paginator\" class=\"form-row\">\r\n        <button\r\n          type=\"button\"\r\n          mat-icon-button\r\n          matTooltip=\"Reset list\"\r\n          (click)=\"reset()\"\r\n        >\r\n          <mat-icon class=\"mat-warn\">autorenew</mat-icon>\r\n        </button>\r\n        <mat-paginator\r\n          [length]=\"page.total\"\r\n          [pageIndex]=\"page.pageNumber - 1\"\r\n          [pageSize]=\"page.pageSize\"\r\n          [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n          (page)=\"onPageChange($event)\"\r\n          [showFirstLastButtons]=\"true\"\r\n        />\r\n      </div>\r\n    </div>\r\n    <!-- editor -->\r\n    <mat-expansion-panel\r\n      id=\"editor\"\r\n      [expanded]=\"editedTriple\"\r\n      [disabled]=\"!editedTriple\"\r\n    >\r\n      <mat-expansion-panel-header>Triple</mat-expansion-panel-header>\r\n      <cadmus-graph-triple-editor\r\n        [triple]=\"editedTriple\"\r\n        (tripleChange)=\"onTripleChange($event!)\"\r\n        (editorClose)=\"onEditorClose()\"\r\n      />\r\n    </mat-expansion-panel>\r\n  </div>\r\n  }\r\n</div>\r\n","/*\r\n * Public API Surface of cadmus-graph-ui\r\n */\r\n\r\n// export * from './lib/components/graph-node-filter/graph-node-filter.component';\r\nexport * from './lib/components/graph-node-list/graph-node-list.component';\r\nexport * from './lib/components/graph-node-editor/graph-node-editor.component';\r\n// export * from './lib/components/graph-triple-filter/graph-triple-filter.component';\r\nexport * from './lib/components/graph-triple-list/graph-triple-list.component';\r\nexport * from './lib/components/graph-triple-editor/graph-triple-editor.component';\r\n\r\nexport * from './lib/services/graph-node-lookup.service';\r\n\r\nexport * from './lib/state/graph-node-list.repository';\r\nexport * from './lib/state/graph-triple-list.repository';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.GraphNodeLookupService","i3.NodeListRepository","i1.NodeListRepository","i2","i4","i3.GraphTripleListRepository","i3","i4.GraphTripleListRepository"],"mappings":"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"}