{"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  public readonly id = 'graph-node';\r\n\r\n  constructor(private _graphService: GraphService) {}\r\n\r\n  getById(id: string): Observable<any | undefined> {\r\n    return this._graphService.getNode(parseInt(id, 10));\r\n  }\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';\nimport {\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  FormsModule,\n  ReactiveFormsModule,\n} from '@angular/forms';\nimport { AsyncPipe } from '@angular/common';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n  MatChipListbox,\n  MatChipOption,\n  MatChipRemove,\n} from '@angular/material/chips';\n\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\n\nimport { NodeFilter, UriNode } from '@myrmidon/cadmus-api';\n\nimport { NodeListRepository } from '../../state/graph-node-list.repository';\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\n\n/**\n * Graph nodes filter used in graph nodes list.\n * Its data are in the graph nodes store, which gets updated when\n * users apply new filters.\n */\n@Component({\n  selector: 'cadmus-graph-node-filter',\n  templateUrl: './graph-node-filter.component.html',\n  styleUrls: ['./graph-node-filter.component.css'],\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormField,\n    MatLabel,\n    MatInput,\n    MatSelect,\n    MatOption,\n    MatCheckbox,\n    RefLookupComponent,\n    MatIconButton,\n    MatTooltip,\n    MatIcon,\n    MatChipListbox,\n    MatChipOption,\n    MatChipRemove,\n    AsyncPipe,\n  ],\n})\nexport class GraphNodeFilterComponent implements OnInit, OnDestroy {\n  private _sub?: Subscription;\n  public filter$: Observable<NodeFilter>;\n  public linkedNode$: Observable<UriNode | undefined>;\n  public classNodes$: Observable<UriNode[] | undefined>;\n\n  public readonly disabled = input<boolean>();\n\n  public label: FormControl<string | null>;\n  public isClass: FormControl<number>;\n  public uid: FormControl<string | null>;\n  public tag: FormControl<string | null>;\n  public sourceType: FormControl<number | null>;\n  public sid: FormControl<string | null>;\n  public sidPrefix: FormControl<boolean>;\n  public linkedNodeRole: FormControl<'S' | 'O' | null>;\n  public form: FormGroup;\n\n  constructor(\n    formBuilder: FormBuilder,\n    public lookupService: GraphNodeLookupService,\n    private _repository: NodeListRepository\n  ) {\n    this.filter$ = _repository.filter$;\n    this.linkedNode$ = _repository.linkedNode$;\n    this.classNodes$ = _repository.classNodes$;\n    // form\n    this.label = formBuilder.control(null);\n    this.isClass = formBuilder.control(0, { nonNullable: true });\n    this.uid = formBuilder.control(null);\n    this.tag = formBuilder.control(null);\n    this.sourceType = formBuilder.control(null);\n    this.sid = formBuilder.control(null);\n    this.sidPrefix = formBuilder.control(false, { nonNullable: true });\n    this.linkedNodeRole = formBuilder.control(null);\n    this.form = formBuilder.group({\n      label: this.label,\n      isClass: this.isClass,\n      uid: this.uid,\n      tag: this.tag,\n      sourceType: this.sourceType,\n      sid: this.sid,\n      sidPrefix: this.sidPrefix,\n      linkedNodeRole: this.linkedNodeRole,\n    });\n  }\n\n  public ngOnInit(): void {\n    this._sub = this.filter$.subscribe((f) => {\n      this.updateForm(f);\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this._sub?.unsubscribe();\n  }\n\n  private updateForm(filter: NodeFilter): void {\n    this.label.setValue(filter.label || null);\n    // is-class: 0=unset, 1=class, 2=not-class\n    if (filter.isClass !== undefined && filter.isClass !== null) {\n      this.isClass.setValue(filter.isClass ? 1 : 2);\n    } else {\n      this.isClass.setValue(0);\n    }\n    this.uid.setValue(filter.uid || null);\n    this.tag.setValue(filter.tag || null);\n    if (filter.sourceType === undefined || filter.sourceType === null) {\n      this.sourceType.setValue(null);\n    } else {\n      this.sourceType.setValue(filter.sourceType);\n    }\n    this.sid.setValue(filter.sid || null);\n    this.sidPrefix.setValue(filter.isSidPrefix ? true : false);\n    this._repository.setLinkedNodeId(filter.linkedNodeId);\n    this.linkedNodeRole.setValue(filter.linkedNodeRole || 'S');\n    this._repository.setClassNodeIds(filter.classIds);\n    this.form.markAsPristine();\n  }\n\n  private getFilter(): NodeFilter {\n    return {\n      label: this.label.value?.trim(),\n      isClass: this.isClass.value === 0 ? undefined : this.isClass.value === 1,\n      uid: this.uid.value?.trim(),\n      tag: this.tag.value?.trim(),\n      sourceType:\n        this.sourceType.value === null ? undefined : this.sourceType.value,\n      sid: this.sid.value?.trim(),\n      isSidPrefix: this.sidPrefix.value,\n      linkedNodeId: this._repository.getLinkedNode()?.id,\n      linkedNodeRole: this.linkedNodeRole.value || undefined,\n      classIds: this._repository.getClassNodes()?.map((n) => n.id),\n    };\n  }\n\n  public onResetLinkedNode(): void {\n    this._repository.setLinkedNode();\n  }\n\n  public onLinkedNodeSet(node: unknown): void {\n    this._repository.setLinkedNode((node as UriNode) || undefined);\n  }\n\n  public clearLinkedNode(): void {\n    this._repository.setLinkedNode();\n  }\n\n  public onClassAdd(node: unknown): void {\n    if (node) {\n      this._repository.addClassNode(node as UriNode);\n    }\n  }\n\n  public onClassRemove(id: number): void {\n    this._repository.deleteClassNode(id);\n  }\n\n  public reset(): void {\n    this.form.reset();\n    this.apply();\n  }\n\n  public apply(): void {\n    if (this.form.invalid) {\n      return;\n    }\n    const filter = this.getFilter();\n\n    // update filter in state\n    this._repository.setFilter(filter);\n  }\n}\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-refs-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-refs-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, signal } 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 readonly isNew = signal<boolean>(true);\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    // 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.set(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.set(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    } @else {\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';\nimport { Observable } from 'rxjs';\nimport { AsyncPipe } from '@angular/common';\nimport { take } from 'rxjs/operators';\n\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatIconButton, MatButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n  MatExpansionPanel,\n  MatExpansionPanelHeader,\n} from '@angular/material/expansion';\n\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\nimport { DataPage } from '@myrmidon/ngx-tools';\n\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\nimport { GraphService, UriNode, NodeSourceType } from '@myrmidon/cadmus-api';\n\nimport { NodeListRepository } from '../../state/graph-node-list.repository';\nimport { GraphNodeFilterComponent } from '../graph-node-filter/graph-node-filter.component';\nimport { GraphNodeEditorComponent } from '../graph-node-editor/graph-node-editor.component';\n\n/**\n * List of graph nodes. This includes a graph node filter, a list, and a graph\n * editor.\n */\n@Component({\n  selector: 'cadmus-graph-node-list',\n  templateUrl: './graph-node-list.component.html',\n  styleUrls: ['./graph-node-list.component.css'],\n  imports: [\n    MatCard,\n    MatCardContent,\n    GraphNodeFilterComponent,\n    MatProgressBar,\n    MatIconButton,\n    MatTooltip,\n    MatIcon,\n    MatButton,\n    MatPaginator,\n    MatExpansionPanel,\n    MatExpansionPanelHeader,\n    GraphNodeEditorComponent,\n    AsyncPipe,\n  ],\n})\nexport class GraphNodeListComponent {\n  public loading$: Observable<boolean | undefined>;\n  public page$: Observable<DataPage<UriNode>>;\n\n  /**\n   * The currently edited node if any.\n   */\n  public readonly editedNode = model<UriNode>();\n\n  /**\n   * The optional set of thesaurus entries for node's tags.\n   */\n  public readonly tagEntries = input<ThesaurusEntry[]>();\n\n  /**\n   * True if this node list should have a walker button for each node.\n   */\n  public readonly hasWalker = input<boolean>();\n\n  /**\n   * Emitted when walking a specific node is requested.\n   */\n  public readonly nodeWalk = output<UriNode>();\n\n  constructor(\n    private _repository: NodeListRepository,\n    private _graphService: GraphService,\n    private _dialogService: DialogService,\n    private _snackbar: MatSnackBar\n  ) {\n    this.loading$ = _repository.loading$;\n    this.page$ = _repository.page$;\n  }\n\n  public onPageChange(event: PageEvent): void {\n    this._repository.setPage(event.pageIndex + 1, event.pageSize);\n  }\n\n  public addNode(): void {\n    this.editedNode.set({\n      uri: '',\n      id: 0,\n      sourceType: NodeSourceType.User,\n      label: '',\n    });\n  }\n\n  public editNode(node: UriNode): void {\n    this.editedNode.set(node);\n  }\n\n  public onNodeChange(node: UriNode): void {\n    this._graphService.addNode(node).subscribe({\n      next: (n) => {\n        this.editedNode.set(undefined);\n        this._repository.reset();\n        this._snackbar.open('Node saved', 'OK', {\n          duration: 1500,\n        });\n      },\n      error: (error) => {\n        console.error('Error saving node', error);\n        this._snackbar.open('Error saving node', 'OK');\n      },\n    });\n  }\n\n  public onEditorClose(): void {\n    this.editedNode.set(undefined);\n  }\n\n  public deleteNode(node: UriNode): void {\n    this._dialogService\n      .confirm('Delete Node', 'Delete node ' + node.label + '?')\n      .pipe(take(1))\n      .subscribe((yes) => {\n        if (yes) {\n          this._graphService\n            .deleteNode(node.id)\n            .pipe(take(1))\n            .subscribe({\n              next: (_) => {\n                this._repository.reset();\n              },\n              error: (error) => {\n                console.error('Error deleting node', error);\n                this._snackbar.open('Error deleting node', 'OK');\n              },\n            });\n        }\n      });\n  }\n\n  public walkNode(node: UriNode): void {\n    this.nodeWalk.emit(node);\n  }\n\n  public reset(): void {\n    this._repository.reset();\n  }\n}\n","<div id=\"container\">\n  <!-- filters -->\n  <div id=\"filters\">\n    <mat-card appearance=\"outlined\">\n      <mat-card-content>\n        <cadmus-graph-node-filter\n          [disabled]=\"(loading$ | async) ? true : false\"\n        />\n      </mat-card-content>\n    </mat-card>\n  </div>\n\n  <!-- list -->\n  @if (page$ | async; as page) {\n  <div id=\"list\">\n    @if (loading$ | async) {\n    <div>\n      <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n    </div>\n    }\n    <!-- list -->\n    @if (page) {\n    <div>\n      <table>\n        <thead>\n          <th></th>\n          <th>id</th>\n          <th>cls</th>\n          <th>label</th>\n          <th>uri</th>\n          <th class=\"noif-lt-md\">srct</th>\n          <th class=\"noif-lt-md\">sid</th>\n          <th class=\"noif-lt-md\">tag</th>\n        </thead>\n        <tbody>\n          @for (d of page.items; track d.id) {\n          <tr [class.selected]=\"d === editedNode()\">\n            <td class=\"fit-width\">\n              @if (hasWalker()) {\n              <button\n                mat-icon-button\n                type=\"button\"\n                matTooltip=\"Walk node\"\n                (click)=\"walkNode(d)\"\n              >\n                <mat-icon class=\"mat-primary\">flare</mat-icon>\n              </button>\n              }\n              <button\n                mat-icon-button\n                type=\"button\"\n                matTooltip=\"Edit node\"\n                (click)=\"editNode(d)\"\n              >\n                <mat-icon class=\"mat-primary\">edit</mat-icon>\n              </button>\n              <button\n                mat-icon-button\n                type=\"button\"\n                matTooltip=\"Delete node\"\n                (click)=\"deleteNode(d)\"\n              >\n                <mat-icon class=\"mat-warn\">delete</mat-icon>\n              </button>\n            </td>\n            <td>{{ d.id }}</td>\n            <td>{{ d.isClass ? \"C\" : \"\" }}</td>\n            <td>{{ d.label }}</td>\n            <td>{{ d.uri }}</td>\n            <td class=\"noif-lt-md\">{{ \"UIPTX\"[d.sourceType] }}</td>\n            <td class=\"noif-lt-md\">{{ d.sid }}</td>\n            <td class=\"noif-lt-md\">{{ d.tag }}</td>\n          </tr>\n          }\n        </tbody>\n      </table>\n      <div>\n        <button\n          class=\"mat-primary\"\n          type=\"button\"\n          mat-flat-button\n          (click)=\"addNode()\"\n        >\n          <mat-icon>add_circle</mat-icon>\n          add node\n        </button>\n      </div>\n      <!-- pagination -->\n      <div class=\"form-row\">\n        <button\n          type=\"button\"\n          mat-icon-button\n          matTooltip=\"Reset list\"\n          (click)=\"reset()\"\n        >\n          <mat-icon class=\"mat-warn\">autorenew</mat-icon>\n        </button>\n        <mat-paginator\n          [length]=\"page.total\"\n          [pageIndex]=\"page.pageNumber - 1\"\n          [pageSize]=\"page.pageSize\"\n          [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\n          (page)=\"onPageChange($event)\"\n          [showFirstLastButtons]=\"true\"\n        />\n      </div>\n    </div>\n    }\n    <!-- editor -->\n    <mat-expansion-panel\n      [expanded]=\"editedNode() ? true : false\"\n      [disabled]=\"editedNode() ? false : true\"\n      id=\"editor\"\n    >\n      <mat-expansion-panel-header>Node</mat-expansion-panel-header>\n      <cadmus-graph-node-editor\n        [node]=\"editedNode()\"\n        [tagEntries]=\"tagEntries()\"\n        (nodeChange)=\"onNodeChange($event!)\"\n        (editorClose)=\"onEditorClose()\"\n      />\n    </mat-expansion-panel>\n  </div>\n  }\n</div>\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';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  Validators,\n  FormsModule,\n  ReactiveFormsModule,\n} from '@angular/forms';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatLabel, MatFormField } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\n\nimport { UriNode, TripleFilter } from '@myrmidon/cadmus-api';\n\nimport { GraphTripleListRepository } from '../../state/graph-triple-list.repository';\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\n\n/**\n * Graph triples filter used in graph triples list.\n * Its data are in the graph triples store, which gets updated when\n * users apply new filters.\n */\n@Component({\n  selector: 'cadmus-graph-triple-filter',\n  templateUrl: './graph-triple-filter.component.html',\n  styleUrls: ['./graph-triple-filter.component.css'],\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    RefLookupComponent,\n    MatIconButton,\n    MatIcon,\n    MatCheckbox,\n    MatLabel,\n    MatFormField,\n    MatInput,\n    MatTooltip,\n    AsyncPipe,\n  ],\n})\nexport class GraphTripleFilterComponent implements OnInit, OnDestroy {\n  private _sub?: Subscription;\n  public filter$: Observable<TripleFilter>;\n  public literal: FormControl<boolean>;\n  public objectLit: FormControl<string | null>;\n  public sid: FormControl<string | null>;\n  public sidPrefix: FormControl<boolean>;\n  public tag: FormControl<string | null>;\n  public form: FormGroup;\n\n  public subjectNode$: Observable<UriNode | undefined>;\n  public predicateNode$: Observable<UriNode | undefined>;\n  public objectNode$: Observable<UriNode | undefined>;\n\n  public readonly disabled = input<boolean>();\n\n  constructor(\n    formBuilder: FormBuilder,\n    public lookupService: GraphNodeLookupService,\n    private _repository: GraphTripleListRepository\n  ) {\n    this.filter$ = _repository.filter$;\n    this.subjectNode$ = _repository.subjectNode$;\n    this.predicateNode$ = _repository.predicateNode$;\n    this.objectNode$ = _repository.objectNode$;\n    // form\n    this.literal = formBuilder.control(false, { nonNullable: true });\n    this.objectLit = formBuilder.control(null, Validators.maxLength(100));\n    this.sid = formBuilder.control(null);\n    this.sidPrefix = formBuilder.control(false, { nonNullable: true });\n    this.tag = formBuilder.control(null);\n    this.form = formBuilder.group({\n      literal: this.literal,\n      objectLit: this.objectLit,\n      sid: this.sid,\n      sidPrefix: this.sidPrefix,\n      tag: this.tag,\n    });\n  }\n\n  public ngOnInit(): void {\n    this._sub = this.filter$.subscribe((f) => {\n      this.updateForm(f);\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this._sub?.unsubscribe();\n  }\n\n  private updateForm(filter: TripleFilter): void {\n    this._repository.setTermId(filter.subjectId, 'S');\n    this._repository.setTermId(\n      filter.predicateIds?.length ? filter.predicateIds[0] : null,\n      'P'\n    );\n    this._repository.setTermId(filter.objectId, 'O');\n    this.literal.setValue(filter.literalPattern ? true : false);\n    this.objectLit.setValue(filter.literalPattern || null);\n    this.sid.setValue(filter.sid || null);\n    this.tag.setValue(filter.tag || null);\n    this.form.markAsPristine();\n  }\n\n  private getFilter(): TripleFilter {\n    const pid = this._repository.getTerm('P')?.id;\n    return {\n      subjectId: this._repository.getTerm('S')?.id,\n      predicateIds: pid ? [pid] : undefined,\n      objectId: this.literal.value\n        ? undefined\n        : this._repository.getTerm('O')?.id,\n      literalPattern: this.literal.value\n        ? this.objectLit.value?.trim()\n        : undefined,\n      sid: this.sid.value?.trim(),\n      tag: this.tag.value?.trim(),\n    };\n  }\n\n  public onSubjectNodeChange(node?: unknown): void {\n    this._repository.setTerm(node as UriNode, 'S');\n  }\n\n  public clearSubjectNode(): void {\n    this._repository.setTerm(null, 'S');\n  }\n\n  public onPredicateNodeChange(node?: unknown): void {\n    this._repository.setTerm(node as UriNode, 'P');\n  }\n\n  public clearPredicateNode(): void {\n    this._repository.setTerm(null, 'P');\n  }\n\n  public onObjectNodeChange(node?: unknown): void {\n    this._repository.setTerm(node as UriNode, 'O');\n  }\n\n  public clearObjectNode(): void {\n    this._repository.setTerm(null, 'O');\n  }\n\n  public reset(): void {\n    this.form.reset();\n    this.apply();\n  }\n\n  public apply(): void {\n    if (this.form.invalid) {\n      return;\n    }\n    const filter = this.getFilter();\n\n    // update filter in state\n    this._repository.setFilter(filter);\n  }\n}\n","<form [formGroup]=\"form\" (submit)=\"apply()\" [attr.disabled]=\"disabled()\">\r\n  <!-- subject -->\r\n  <div class=\"form-row\">\r\n    <cadmus-refs-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-refs-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-refs-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  model,\r\n  OnDestroy,\r\n  OnInit,\r\n  output,\r\n  signal,\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\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   * Emitted when the user requested to close the editor.\r\n   */\r\n  public readonly editorClose = output();\r\n\r\n  public readonly isNew = signal<boolean>(true);\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    // 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.set(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.set(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-refs-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-refs-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-refs-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, signal } 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, deepCopy, EllipsisPipe } from '@myrmidon/ngx-tools';\r\n\r\nimport { GraphService, UriTriple } 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\r\n  public readonly editedTriple = signal<UriTriple | undefined>(undefined);\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  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.set({\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.set(deepCopy(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.set(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.set(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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"}