@myrmidon/cadmus-ui 15.1.3 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"myrmidon-cadmus-ui.mjs","sources":["../../../../projects/myrmidon/cadmus-ui/src/lib/components/close-save-buttons/close-save-buttons.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/close-save-buttons/close-save-buttons.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/decorated-token-text/decorated-token-text.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/decorated-token-text/decorated-token-text.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/error-list/error-list.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/error-list/error-list.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/services/color.service.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/facet-badge/facet-badge.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/facet-badge/facet-badge.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/flags-badge/flags-badge.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/flags-badge/flags-badge.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/layer-hints/layer-hints.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/layer-hints/layer-hints.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/lookup-pin/lookup-pin.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/lookup-pin/lookup-pin.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thesaurus-tree/static-thes-paged-tree-store.service.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thes-paged-tree-filter/thes-paged-tree-filter.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thes-paged-tree-filter/thes-paged-tree-filter.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thes-paged-tree-browser/thes-paged-tree-browser.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thes-paged-tree-browser/thes-paged-tree-browser.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thesaurus-tree/thesaurus-tree.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thesaurus-tree/thesaurus-tree.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thes-entries-picker/thes-entries-picker.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/thes-entries-picker/thes-entries-picker.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/part-badge/part-badge.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/part-badge/part-badge.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/model-editor-component-base.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/validators/custom-validators.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/validators/json-validators.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/services/user-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/utils.ts","../../../../projects/myrmidon/cadmus-ui/src/public-api.ts","../../../../projects/myrmidon/cadmus-ui/src/myrmidon-cadmus-ui.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\r\nimport { FormGroup, UntypedFormGroup } from '@angular/forms';\r\n\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'cadmus-close-save-buttons',\r\n templateUrl: './close-save-buttons.component.html',\r\n styleUrls: ['./close-save-buttons.component.css'],\r\n imports: [MatButton, MatIcon],\r\n})\r\nexport class CloseSaveButtonsComponent {\r\n public readonly form = input<FormGroup | UntypedFormGroup>();\r\n\r\n public readonly noSave = input<boolean>();\r\n\r\n public readonly closeRequest = output();\r\n\r\n public close(): void {\r\n this.closeRequest.emit();\r\n }\r\n}\r\n","@if (form()) {\n<div class=\"form-row\">\n <button type=\"button\" mat-flat-button class=\"mat-warn\" (click)=\"close()\">\n <mat-icon>cancel</mat-icon>\n close\n </button>\n @if (!noSave()) {\n <button\n type=\"submit\"\n [disabled]=\"form()?.invalid\"\n mat-flat-button\n class=\"mat-primary\"\n >\n <mat-icon>check_circle</mat-icon>\n save\n </button>\n }\n</div>\n}\n","import {\r\n Component,\r\n OnInit,\r\n ViewChild,\r\n ElementRef,\r\n input,\r\n effect,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { SafeHtmlPipe } from '@myrmidon/ngx-tools';\r\n\r\nimport { TokenLocation, TextLayerService } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Decorated token-based text visualizer. This is used when editing\r\n * token-based text layers.\r\n */\r\n@Component({\r\n selector: 'cadmus-decorated-token-text',\r\n templateUrl: './decorated-token-text.component.html',\r\n styleUrls: ['./decorated-token-text.component.css'],\r\n imports: [SafeHtmlPipe],\r\n})\r\nexport class DecoratedTokenTextComponent implements OnInit {\r\n @ViewChild('textElem') _textElement?: ElementRef;\r\n\r\n /**\r\n * The base text.\r\n */\r\n public readonly baseText = input<string>('');\r\n\r\n /**\r\n * The token-based locations of all the fragments in the layer.\r\n */\r\n public readonly locations = input<TokenLocation[]>([]);\r\n\r\n /**\r\n * A selected token-based location.\r\n */\r\n public readonly selectedLocation = input<TokenLocation>();\r\n\r\n public readonly text = signal<string | undefined>(undefined); // rendered HTML text\r\n\r\n constructor(private _textLayerService: TextLayerService) {\r\n effect(() => {\r\n this.decorate(this.baseText(), this.locations(), this.selectedLocation());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.decorate(this.baseText(), this.locations(), this.selectedLocation());\r\n }\r\n\r\n private decorate(\r\n text: string,\r\n locations: TokenLocation[],\r\n selectedLocation?: TokenLocation\r\n ): void {\r\n this.text.set(\r\n this._textLayerService.render(text, locations, selectedLocation)\r\n );\r\n }\r\n}\r\n","<div [innerHtml]=\"text() | safeHtml : 'html'\" id=\"text\" #textElem></div>\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cadmus-error-list',\r\n templateUrl: './error-list.component.html',\r\n styleUrls: ['./error-list.component.css'],\r\n})\r\nexport class ErrorListComponent {\r\n public readonly errors = input<string[]>();\r\n}\r\n","@if (errors()?.length) {\n <ul>\n @for (error of errors(); track error) {\n <li class=\"error\">{{error}}</li>\n }\n </ul>\n}\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Colors helper service.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ColorService {\r\n /**\r\n * Get the R,G,B components of the color expressed by the specified\r\n * RGB string (3 or 6 digits format).\r\n *\r\n * @param rgb The RGB color string (3 or 6 digits).\r\n * @returns An array where [0]=R, [1]=G, [2]=B, or null if invalid\r\n * input string.\r\n */\r\n public getRgb(rgb: string): number[] | null {\r\n if (!rgb) {\r\n return null;\r\n }\r\n\r\n // RGB\r\n let m = rgb.match(/^#?([0-9a-f]{3})$/i);\r\n if (m && m[1]) {\r\n // in 3-characters format, each value is multiplied by 0x11 to give an\r\n // even scale from 0x00 to 0xff\r\n return [\r\n parseInt(m[1].charAt(0), 16) * 0x11,\r\n parseInt(m[1].charAt(1), 16) * 0x11,\r\n parseInt(m[1].charAt(2), 16) * 0x11,\r\n ];\r\n }\r\n // RRGGBB\r\n m = rgb.match(/^#?([0-9a-f]{6})$/i);\r\n if (m && m[1]) {\r\n return [\r\n parseInt(m[1].substring(0, 2), 16),\r\n parseInt(m[1].substring(2, 4), 16),\r\n parseInt(m[1].substring(4, 6), 16),\r\n ];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get black or white according to which of them has the maximum contrast\r\n * against the specified color.\r\n *\r\n * @param rgb The RGB color string.\r\n * @returns Black or white. If rgb is invalid, always black.\r\n */\r\n public getContrastColor(rgb: string): string {\r\n // https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color\r\n const values = this.getRgb(rgb);\r\n if (!values) {\r\n return 'black';\r\n }\r\n return values[0] * 0.299 + values[1] * 0.587 + values[2] * 0.114 > 186\r\n ? 'black'\r\n : 'white';\r\n }\r\n\r\n /**\r\n * Convert HSL to RGB.\r\n *\r\n * @param h Hue\r\n * @param s Saturation\r\n * @param l Lightness\r\n * @returns Object with r, g, b values.\r\n */\r\n public hslToRgb(\r\n h: number,\r\n s: number,\r\n l: number\r\n ): { r: number; g: number; b: number } {\r\n // https://css-tricks.com/converting-color-spaces-in-javascript/\r\n // must be fractions of 1\r\n s /= 100;\r\n l /= 100;\r\n\r\n let c = (1 - Math.abs(2 * l - 1)) * s,\r\n x = c * (1 - Math.abs(((h / 60) % 2) - 1)),\r\n m = l - c / 2,\r\n r = 0,\r\n g = 0,\r\n b = 0;\r\n if (0 <= h && h < 60) {\r\n r = c;\r\n g = x;\r\n b = 0;\r\n } else if (60 <= h && h < 120) {\r\n r = x;\r\n g = c;\r\n b = 0;\r\n } else if (120 <= h && h < 180) {\r\n r = 0;\r\n g = c;\r\n b = x;\r\n } else if (180 <= h && h < 240) {\r\n r = 0;\r\n g = x;\r\n b = c;\r\n } else if (240 <= h && h < 300) {\r\n r = x;\r\n g = 0;\r\n b = c;\r\n } else if (300 <= h && h < 360) {\r\n r = c;\r\n g = 0;\r\n b = x;\r\n }\r\n r = Math.round((r + m) * 255);\r\n g = Math.round((g + m) * 255);\r\n b = Math.round((b + m) * 255);\r\n\r\n return { r: r, g: g, b: b };\r\n }\r\n\r\n public rgbToString(r: number, g: number, b: number): string {\r\n let rd = r.toString(16);\r\n if (rd.length === 1) {\r\n rd = '0' + rd;\r\n }\r\n let gd = g.toString(16);\r\n if (gd.length === 1) {\r\n gd = '0' + gd;\r\n }\r\n let bd = b.toString(16);\r\n if (bd.length === 1) {\r\n bd = '0' + bd;\r\n }\r\n return rd + gd + bd;\r\n }\r\n\r\n /**\r\n * Get the next color from a palette generated to include\r\n * the specified count of colors.\r\n *\r\n * @param index The index of the next color in the palette.\r\n * @param count The total count of colors in the palette.\r\n * @param blueBoost True to adjust colors for the eye's lack of sensitivity to blue.\r\n * @returns The RRGGBB values string.\r\n */\r\n public nextPaletteColor(\r\n index: number,\r\n count: number,\r\n blueBoost = true\r\n ): string {\r\n // https://stackoverflow.com/questions/43193341/how-to-generate-random-pastel-or-brighter-color-in-javascript\r\n const h = Math.floor((index / count) * 341); // between 0 and 340\r\n let s = 100;\r\n let l = 50;\r\n\r\n if (blueBoost && h > 215 && h < 265) {\r\n const gain = 20;\r\n let blueness = 1 - Math.abs(h - 240) / 25;\r\n let change = Math.floor(gain * blueness);\r\n l += change;\r\n s -= change;\r\n }\r\n const rgb = this.hslToRgb(h, s, l);\r\n return this.rgbToString(rgb.r, rgb.g, rgb.b);\r\n }\r\n}\r\n","import { Component, effect, input, Input, signal } from '@angular/core';\r\nimport { FacetDefinition } from '@myrmidon/cadmus-core';\r\n\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { ColorService } from '../../services/color.service';\r\n\r\nexport interface FacetBadgeData {\r\n definitions: FacetDefinition[];\r\n facetId?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-facet-badge',\r\n templateUrl: './facet-badge.component.html',\r\n styleUrls: ['./facet-badge.component.css'],\r\n imports: [MatTooltip],\r\n})\r\nexport class FacetBadgeComponent {\r\n private _facetColors: { [key: string]: string };\r\n private _facetTips: { [key: string]: string };\r\n\r\n public readonly color = signal<string>('transparent');\r\n public readonly contrastColor = signal<string>('black');\r\n public readonly tip = signal<string | undefined>(undefined);\r\n\r\n /**\r\n * The facet data.\r\n */\r\n public readonly data = input<FacetBadgeData>({\r\n definitions: [],\r\n });\r\n\r\n constructor(private _colorService: ColorService) {\r\n this._facetColors = {};\r\n this._facetTips = {};\r\n\r\n effect(() => {\r\n this.updateBadge(this.data());\r\n });\r\n }\r\n\r\n private getFacetColor(facetId: string): string {\r\n if (this._facetColors[facetId]) {\r\n return this._facetColors[facetId];\r\n }\r\n if (!this.data().definitions?.length) {\r\n return 'transparent';\r\n }\r\n\r\n const facet = this.data().definitions.find((f) => {\r\n return f.id === facetId;\r\n });\r\n if (facet?.colorKey) {\r\n this._facetColors[facetId] = '#' + facet.colorKey;\r\n } else {\r\n this._facetColors[facetId] = 'transparent';\r\n }\r\n return this._facetColors[facetId];\r\n }\r\n\r\n private getFacetTip(facetId: string): string | null {\r\n if (this._facetTips[facetId]) {\r\n return this._facetTips[facetId];\r\n }\r\n\r\n if (!this.data().definitions?.length) {\r\n return null;\r\n }\r\n\r\n const facet = this.data().definitions.find((f) => {\r\n return f.id === facetId;\r\n });\r\n if (!facet) {\r\n this._facetTips[facetId] = facetId;\r\n } else {\r\n const sb: string[] = [];\r\n for (let i = 0; i < facet.partDefinitions.length; i++) {\r\n if (i > 0) {\r\n sb.push(', ');\r\n }\r\n sb.push(facet.partDefinitions[i].name);\r\n if (facet.partDefinitions[i].isRequired) {\r\n sb.push('*');\r\n }\r\n }\r\n this._facetTips[facetId] = sb.join('');\r\n }\r\n return this._facetTips[facetId];\r\n }\r\n\r\n private updateBadge(data?: FacetBadgeData) {\r\n this._facetColors = {};\r\n this._facetTips = {};\r\n this.color.set(this.getFacetColor(data?.facetId || ''));\r\n this.contrastColor.set(this._colorService.getContrastColor(this.color()));\r\n this.tip.set(this.getFacetTip(data?.facetId || '') ?? undefined);\r\n }\r\n}\r\n","<span\r\n class=\"model-type\"\r\n [style.background-color]=\"color()\"\r\n [style.color]=\"contrastColor()\"\r\n matTooltip=\"{{ tip() }}\"\r\n >{{ data().facetId }}\r\n</span>\r\n","import { Component, effect, input, Input, signal } from '@angular/core';\r\n\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { FlagDefinition } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Data for FlagsBadgeComponent, including flags and their definitions.\r\n */\r\nexport interface FlagsBadgeData {\r\n definitions: FlagDefinition[];\r\n flags: number;\r\n}\r\n\r\n/**\r\n * Badge with item's flags. Each flag is represented by a circle filled\r\n * with the flag's color key.\r\n */\r\n@Component({\r\n selector: 'cadmus-flags-badge',\r\n templateUrl: './flags-badge.component.html',\r\n styleUrls: ['./flags-badge.component.css'],\r\n imports: [MatTooltip],\r\n})\r\nexport class FlagsBadgeComponent {\r\n public readonly data = input<FlagsBadgeData>();\r\n\r\n public readonly badgeFlags = signal<FlagDefinition[]>([]);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.updateBadge(this.data());\r\n });\r\n }\r\n\r\n private updateBadge(data?: FlagsBadgeData) {\r\n if (!data) {\r\n return;\r\n }\r\n this.badgeFlags.set(\r\n data.definitions.filter((def) => {\r\n // tslint:disable-next-line: no-bitwise\r\n return def.id & data!.flags;\r\n })\r\n );\r\n }\r\n}\r\n","<div>\r\n @for (def of badgeFlags(); track def.id) {\r\n <span\r\n class=\"badge-flag\"\r\n [style.color]=\"'#' + def.colorKey\"\r\n [matTooltip]=\"def.label\"\r\n >\r\n @if (def.isAdmin) { ◆ } @else { ⬤ }\r\n </span>\r\n }\r\n</div>\r\n","import { Component, output, input, effect } from '@angular/core';\r\nimport {\r\n FormGroup,\r\n FormArray,\r\n FormBuilder,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FormControl,\r\n} from '@angular/forms';\r\n\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\n\r\nimport { LayerHint } from '@myrmidon/cadmus-core';\r\n\r\n@Component({\r\n selector: 'cadmus-layer-hints',\r\n templateUrl: './layer-hints.component.html',\r\n styleUrls: ['./layer-hints.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatCheckbox,\r\n MatButton,\r\n ],\r\n})\r\nexport class LayerHintsComponent {\r\n public readonly hints = input<LayerHint[]>([]);\r\n\r\n public readonly targetLocation = input<string>();\r\n public readonly disabled = input<boolean>();\r\n public readonly readonly = input<boolean>();\r\n\r\n public readonly requestEdit = output<LayerHint>();\r\n public readonly requestDelete = output<LayerHint>();\r\n public readonly requestMove = output<LayerHint>();\r\n public readonly requestPatch = output<string[]>();\r\n\r\n public form: FormGroup;\r\n public checks: FormArray<FormControl<boolean>>;\r\n\r\n constructor(\r\n private _formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n this.checks = _formBuilder.array<FormControl<boolean>>([]);\r\n this.form = _formBuilder.group({\r\n checks: this.checks,\r\n });\r\n\r\n effect(() => {\r\n this.updateChecks(this.hints());\r\n });\r\n }\r\n\r\n private updateChecks(hints: LayerHint[]) {\r\n this.checks.clear();\r\n for (let i = 0; i < hints.length; i++) {\r\n this.checks.push(this._formBuilder.control(false, { nonNullable: true }));\r\n }\r\n }\r\n\r\n public emitRequestEdit(hint: LayerHint) {\r\n this.requestEdit.emit(hint);\r\n }\r\n\r\n public emitRequestDelete(hint: LayerHint) {\r\n this._dialogService\r\n .confirm('Confirm Deletion', `Delete fragment at \"${hint.location}\"?`)\r\n .subscribe((ok: boolean) => {\r\n if (ok) {\r\n this.requestDelete.emit(hint);\r\n }\r\n });\r\n }\r\n\r\n public emitRequestMove(hint: LayerHint) {\r\n if (!this.targetLocation) {\r\n return;\r\n }\r\n this._dialogService\r\n .confirm(\r\n 'Confirm Move',\r\n `Move fragment at ${hint.location} to ${this.targetLocation}?`\r\n )\r\n .subscribe((ok: boolean) => {\r\n if (ok) {\r\n this.requestMove.emit(hint);\r\n }\r\n });\r\n }\r\n\r\n public emitRequestPatch() {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this._dialogService\r\n .confirm('Confirm Patch', `Patch the selected fragments?`)\r\n .subscribe((ok: boolean) => {\r\n if (ok) {\r\n const patches: string[] = [];\r\n for (let i = 0; i < this.checks.length; i++) {\r\n if (this.checks.at(i).value) {\r\n patches.push(this.hints()[i].patchOperation!);\r\n }\r\n }\r\n this.requestPatch.emit(patches);\r\n }\r\n });\r\n }\r\n}\r\n","@if (hints().length) {\r\n<form [formGroup]=\"form\" (submit)=\"emitRequestPatch()\">\r\n <table class=\"patches\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>location</th>\r\n <th>description</th>\r\n <th>patch</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (hint of hints(); track hint; let i = $index) {\r\n <tr>\r\n @if (!readonly()) {\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this fragment\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this fragment to {{ targetLocation() }}\"\r\n [disabled]=\"\r\n disabled() ||\r\n !targetLocation() ||\r\n targetLocation() === hint.location\r\n \"\r\n (click)=\"emitRequestMove(hint)\"\r\n >\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this fragment\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"emitRequestDelete(hint)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n }\r\n <td>{{ hint.location }}</td>\r\n <td>{{ hint.description }}</td>\r\n <td>\r\n @if (hint.patchOperation) {\r\n <mat-checkbox\r\n matTooltip=\"Apply this patch\"\r\n [formControl]=\"checks.at(i)\"\r\n >\r\n {{ hint.patchOperation }}\r\n </mat-checkbox>\r\n }\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n @if (targetLocation()) {\r\n <div>move target: {{ targetLocation() }}</div>\r\n }\r\n <button\r\n type=\"submit\"\r\n mat-flat-button\r\n [disabled]=\"readonly() || disabled() || form.invalid\"\r\n >\r\n apply patches\r\n </button>\r\n</form>\r\n}\r\n","import {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n OnInit,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport {\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Observable, of } from 'rxjs';\r\nimport {\r\n debounceTime,\r\n distinctUntilChanged,\r\n map,\r\n switchMap,\r\n take,\r\n} from 'rxjs/operators';\r\n\r\nimport {\r\n MatAutocomplete,\r\n MatAutocompleteTrigger,\r\n} from '@angular/material/autocomplete';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatFormField } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { DataPage, ErrorWrapper } from '@myrmidon/ngx-tools';\r\n\r\nimport { DataPinInfo, IndexLookupDefinitions } from '@myrmidon/cadmus-core';\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Generic data pin lookup component. This allows users typing a part\r\n * of a pin's value, and get the full pin. For instance, if you have\r\n * a lookup set of colors and type \"gr\", you might get the pins\r\n * corresponding to \"green\" (e.g. id=color, value=green), \"gray\", etc.\r\n * Usage: add a FormControl to hold a DataPinInfo value; in the HTML\r\n * template set the component's lookupKey, label, initialValue, and\r\n * entryChange handler. The initialValue, if any, should be the initial\r\n * DataPinInfo value.\r\n * If you are using this component as a pure lookup device, don't set\r\n * the initialValue and set resetOnPick=true.\r\n */\r\n@Component({\r\n selector: 'cadmus-lookup-pin',\r\n templateUrl: './lookup-pin.component.html',\r\n styleUrls: ['./lookup-pin.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatAutocomplete,\r\n MatOption,\r\n MatFormField,\r\n MatInput,\r\n MatAutocompleteTrigger,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n AsyncPipe,\r\n ],\r\n})\r\nexport class LookupPinComponent implements OnInit {\r\n /**\r\n * The entry value initially set when the component loads.\r\n */\r\n public readonly initialValue = input<string>();\r\n\r\n /**\r\n * The label to be displayed for this lookup.\r\n */\r\n public readonly label = input<string>('');\r\n\r\n /**\r\n * The maximum count of lookup entries to retrieve.\r\n * Default is 10.\r\n */\r\n public readonly limit = input<number>(10);\r\n\r\n /**\r\n * True to reset the lookup value after it is picked.\r\n * This is typically used when you use this component\r\n * as a pure lookup device, storing the picked value\r\n * elsewhere when handling its entryChange event.\r\n */\r\n public readonly resetOnPick = input<boolean>();\r\n\r\n /**\r\n * Fired whenever an entry is picked. Usually you should\r\n * cast the received argument to a more specific type.\r\n */\r\n public readonly entryChange = output<DataPinInfo | null>();\r\n\r\n public form: UntypedFormGroup;\r\n public lookup: UntypedFormControl;\r\n public entries$: Observable<DataPinInfo[]> | undefined;\r\n\r\n public readonly entry = signal<DataPinInfo | undefined>(undefined);\r\n\r\n constructor(\r\n formBuilder: UntypedFormBuilder,\r\n private _itemService: ItemService,\r\n @Inject('indexLookupDefinitions')\r\n private _lookupDefs: IndexLookupDefinitions\r\n ) {\r\n // form\r\n this.lookup = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n lookup: this.lookup,\r\n });\r\n\r\n effect(() => {\r\n console.log('lookup pin initial value', this.initialValue());\r\n if (this.lookup) {\r\n this.resetToInitial();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * The lookup key to be used for this component.\r\n * This should be a key from the injectable indexLookupDefinitions.\r\n */\r\n public readonly lookupKey = input<string>();\r\n\r\n public ngOnInit(): void {\r\n this.entries$ = this.lookup.valueChanges.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n switchMap((value: DataPinInfo | string) => {\r\n // if it's a string it's a filter; else it's the entry got\r\n if (typeof value === 'string') {\r\n return this.lookupEntries(value, this.limit());\r\n } else {\r\n return of([value]);\r\n }\r\n })\r\n );\r\n // setup initial value if its name was specified\r\n if (this.initialValue()) {\r\n this.resetToInitial();\r\n }\r\n }\r\n\r\n private lookupEntries(\r\n filter: string,\r\n limit: number\r\n ): Observable<DataPinInfo[]> {\r\n // get the lookup definition\r\n if (!this.lookupKey() || !filter) {\r\n return of([]);\r\n }\r\n const ld = this._lookupDefs[this.lookupKey()!];\r\n if (!ld) {\r\n return of([]);\r\n }\r\n\r\n // build query\r\n const query = ld.roleId\r\n ? `[partTypeId=${ld.typeId}] AND [roleId=${ld.roleId}] AND [name=${ld.name}] AND [value^=${filter}]`\r\n : `[partTypeId=${ld.typeId}] AND [name=${ld.name}] AND [value^=${filter}]`;\r\n\r\n // search\r\n return this._itemService.searchPins(query, 1, limit).pipe(\r\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\r\n if (w.error) {\r\n return [];\r\n } else {\r\n return w.value?.items || [];\r\n }\r\n })\r\n );\r\n }\r\n\r\n private resetToInitial(): void {\r\n this.lookupEntries(this.initialValue() || '', 1)\r\n .pipe(take(1))\r\n .subscribe((entries) => {\r\n this.lookup.setValue(entries.length ? entries[0] : undefined);\r\n });\r\n }\r\n\r\n public clear(): void {\r\n this.entry.set(undefined);\r\n this.lookup.setValue(null);\r\n this.entryChange.emit(null);\r\n }\r\n\r\n public entryToName(entry: DataPinInfo): string {\r\n return entry?.value;\r\n }\r\n\r\n public pickEntry(entry: DataPinInfo): void {\r\n this.entry.set(entry);\r\n this.entryChange.emit(entry);\r\n if (this.resetOnPick()) {\r\n this.clear();\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <mat-autocomplete #lookupAuto=\"matAutocomplete\" [displayWith]=\"entryToName\">\r\n @for (entry of entries$ | async; track entry) {\r\n <mat-option [value]=\"entry\" (onSelectionChange)=\"pickEntry(entry)\">\r\n {{ entry?.value }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"label()\"\r\n [formControl]=\"lookup\"\r\n [matAutocomplete]=\"lookupAuto\"\r\n />\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"clear()\"\r\n [disabled]=\"!entry()\"\r\n matTooltip=\"Clear\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n</form>\r\n","import { DataPage } from '@myrmidon/ngx-tools';\r\nimport {\r\n PagedTreeNode,\r\n PagedTreeStoreService,\r\n TreeNodeFilter,\r\n} from '@myrmidon/paged-data-browsers';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nexport interface ThesaurusEntry {\r\n id: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * The filter for thesaurus entry nodes. The only filtered property is\r\n * the node's label.\r\n */\r\nexport interface ThesEntryNodeFilter extends TreeNodeFilter {\r\n label?: string;\r\n}\r\n\r\n/**\r\n * The tree node for thesaurus entries in a paging tree node.\r\n */\r\nexport interface ThesEntryPagedTreeNode\r\n extends PagedTreeNode<ThesEntryNodeFilter> {\r\n key: string; // entry.id\r\n value: string; // entry.value (not rendered; the rendered value is in label)\r\n}\r\n\r\n/**\r\n * A label rendering function which removes from a label\r\n * all the characters past the last colon, trimming the result.\r\n * This is a typical rendering when dealing with hierarchical\r\n * thesaurus entries, e.g. \"furniture: table: color\", where\r\n * we can shorten the label to just \"color\", as \"furniture\"\r\n * and \"table\" are its ancestors.\r\n */\r\nexport const renderLabelFromLastColon = (label: string): string => {\r\n if (!label) {\r\n return label;\r\n }\r\n const i = label.lastIndexOf(':');\r\n return i > -1 && i + 1 < label.length ? label.substring(i + 1).trim() : label;\r\n};\r\n\r\ninterface NumberedEntry extends ThesaurusEntry {\r\n n: number;\r\n}\r\n\r\n/**\r\n * A static paged tree store service for thesaurus entries.\r\n * This builds the tree nodes from the thesaurus entries, assuming\r\n * that entry IDs are hierarchical and separated by dots (.).\r\n */\r\nexport class StaticThesPagedTreeStoreService\r\n implements PagedTreeStoreService<ThesEntryNodeFilter>\r\n{\r\n private _nodes: ThesEntryPagedTreeNode[] = [];\r\n private _built = false;\r\n private readonly _entries: NumberedEntry[];\r\n\r\n constructor(\r\n entries: ThesaurusEntry[],\r\n private _renderLabel?: (label: string) => string\r\n ) {\r\n // assign a number to each entry for stable IDs\r\n this._entries = entries.map((entry, index) => ({\r\n ...entry,\r\n n: index + 1,\r\n }));\r\n }\r\n\r\n private ensureNodes(): void {\r\n // lazily build the nodes only once\r\n if (this._built) {\r\n return;\r\n }\r\n\r\n // map where key is node.id and value is max x value for that parent\r\n // (0 is used for the virtual root)\r\n const xMap = new Map<number, number>();\r\n\r\n for (const entry of this._entries) {\r\n const hasDot = entry.id.includes('.');\r\n const keyParts = entry.id.split('.');\r\n\r\n // create the node\r\n const node: ThesEntryPagedTreeNode = {\r\n id: entry.n,\r\n label:\r\n hasDot && this._renderLabel\r\n ? this._renderLabel(entry.value)\r\n : entry.value,\r\n key: entry.id,\r\n value: entry.value,\r\n paging: { pageNumber: 0, pageCount: 0, total: 0 },\r\n y: hasDot ? keyParts.length : 1,\r\n x: 0, // will be set later\r\n parentId: undefined, // will be set later\r\n hasChildren: false, // will be set later\r\n };\r\n\r\n // if it has a dot, find its parent and set parentId\r\n if (hasDot) {\r\n // build the parent key\r\n const parentKey = keyParts.slice(0, keyParts.length - 1).join('.');\r\n // find the parent node with that key\r\n const parentNode = this._nodes.find((n) => n.key === parentKey);\r\n // if found, set parentId and x in child and hasChildren in parent\r\n if (parentNode) {\r\n node.parentId = parentNode.id;\r\n parentNode.hasChildren = true;\r\n if (xMap.has(parentNode.id)) {\r\n xMap.set(parentNode.id, xMap.get(parentNode.id)! + 1);\r\n } else {\r\n xMap.set(parentNode.id, 1);\r\n }\r\n node.x = xMap.get(parentNode.id)!;\r\n } else {\r\n // parent not found, treat as root\r\n if (xMap.has(0)) {\r\n xMap.set(0, xMap.get(0)! + 1);\r\n } else {\r\n xMap.set(0, 1);\r\n }\r\n node.x = xMap.get(0)!;\r\n }\r\n } else {\r\n // else it's a root node\r\n if (xMap.has(0)) {\r\n xMap.set(0, xMap.get(0)! + 1);\r\n } else {\r\n xMap.set(0, 1);\r\n }\r\n node.x = xMap.get(0)!;\r\n }\r\n\r\n this._nodes.push(node);\r\n }\r\n\r\n this._built = true;\r\n }\r\n\r\n /**\r\n * Get the specified page of nodes.\r\n * @param filter The filter.\r\n * @param pageNumber The page number.\r\n * @param pageSize The page size.\r\n * @param hasMockRoot Whether the root node is a mock node. Not used here.\r\n */\r\n public getNodes(\r\n filter: ThesEntryNodeFilter,\r\n pageNumber: number,\r\n pageSize: number,\r\n hasMockRoot?: boolean\r\n ): Observable<DataPage<ThesEntryPagedTreeNode>> {\r\n this.ensureNodes();\r\n\r\n // apply filtering\r\n let nodes = this._nodes.filter((n) => {\r\n if (filter.parentId !== undefined && filter.parentId !== null) {\r\n if (n.parentId !== filter.parentId) {\r\n return false;\r\n }\r\n } else {\r\n if (n.parentId) {\r\n return false;\r\n }\r\n }\r\n\r\n if (filter.label) {\r\n const filterValue = filter.label.toLowerCase();\r\n if (!n.label.toLowerCase().includes(filterValue)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n\r\n // apply paging\r\n const startIndex = (pageNumber - 1) * pageSize;\r\n const endIndex = startIndex + pageSize;\r\n const pagedNodes = nodes.slice(startIndex, endIndex);\r\n\r\n // page and return\r\n const paged = nodes.slice(\r\n (pageNumber - 1) * pageSize,\r\n pageNumber * pageSize\r\n );\r\n return of({\r\n items: paged,\r\n pageNumber: pageNumber,\r\n pageSize: pageSize,\r\n pageCount: Math.ceil(nodes.length / pageSize),\r\n total: nodes.length,\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n effect,\r\n inject,\r\n model,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { ThesEntryNodeFilter } from '../thesaurus-tree/static-thes-paged-tree-store.service';\r\n\r\n/**\r\n * A filter to be used for thesaurus paged tree browsers.\r\n */\r\n@Component({\r\n selector: 'cadmus-thes-paged-tree-filter',\r\n imports: [\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n ],\r\n templateUrl: './thes-paged-tree-filter.component.html',\r\n styleUrl: './thes-paged-tree-filter.component.css',\r\n})\r\nexport class ThesPagedTreeFilterComponent implements OnInit {\r\n public readonly dialogRef = inject<\r\n MatDialogRef<ThesPagedTreeFilterComponent>\r\n >(MatDialogRef, {\r\n optional: true,\r\n });\r\n public readonly data = inject(MAT_DIALOG_DATA, { optional: true });\r\n\r\n /**\r\n * The filter.\r\n */\r\n public readonly filter = model<ThesEntryNodeFilter | null | undefined>();\r\n\r\n public readonly wrapped = signal<boolean>(false);\r\n\r\n public label: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n constructor() {\r\n const formBuilder = inject(FormBuilder);\r\n const data = this.data;\r\n\r\n // form\r\n this.label = formBuilder.control<string | null>(null);\r\n this.form = formBuilder.group({\r\n label: this.label,\r\n });\r\n // bind dialog data if any\r\n if (this.dialogRef) {\r\n this.wrapped.set(true);\r\n if (data) {\r\n this.filter.set(data.filter);\r\n }\r\n } else {\r\n this.wrapped.set(false);\r\n }\r\n\r\n // update form when filter changes\r\n effect(() => {\r\n this.updateForm(this.filter());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.updateForm(this.filter());\r\n }\r\n\r\n private updateForm(filter?: ThesEntryNodeFilter | null): void {\r\n if (!filter) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.label.setValue(filter.label ?? null);\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getFilter(): ThesEntryNodeFilter {\r\n return {\r\n label: this.label.value ?? undefined,\r\n };\r\n }\r\n\r\n public reset(): void {\r\n this.form.reset();\r\n this.filter.set(null);\r\n this.dialogRef?.close(null);\r\n }\r\n\r\n public apply(): void {\r\n this.filter.set(this.getFilter());\r\n this.dialogRef?.close(this.filter());\r\n }\r\n}\r\n","<form\r\n [formGroup]=\"form\"\r\n [style.margin.px]=\"wrapped() ? 16 : 0\"\r\n (submit)=\"apply()\"\r\n>\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <mat-form-field>\r\n <input matInput placeholder=\"label\" [formControl]=\"label\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- buttons -->\r\n <button type=\"button\" mat-icon-button matTooltip=\"Reset\" (click)=\"reset()\">\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Apply\"\r\n [disabled]=\"form.invalid\"\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 OnDestroy,\r\n OnInit,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\n\r\nimport {\r\n BrowserTreeNodeComponent,\r\n PagedTreeStore,\r\n PageChangeRequest,\r\n} from '@myrmidon/paged-data-browsers';\r\n\r\nimport {\r\n renderLabelFromLastColon,\r\n StaticThesPagedTreeStoreService,\r\n ThesEntryNodeFilter,\r\n ThesEntryPagedTreeNode,\r\n} from '../thesaurus-tree/static-thes-paged-tree-store.service';\r\nimport { ThesPagedTreeFilterComponent } from '../thes-paged-tree-filter/thes-paged-tree-filter.component';\r\n\r\n@Component({\r\n selector: 'cadmus-thes-paged-tree-browser',\r\n imports: [\r\n AsyncPipe,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n ThesPagedTreeFilterComponent,\r\n BrowserTreeNodeComponent,\r\n ],\r\n templateUrl: './thes-paged-tree-browser.component.html',\r\n styleUrl: './thes-paged-tree-browser.component.css',\r\n})\r\nexport class ThesPagedTreeBrowserComponent implements OnInit, OnDestroy {\r\n private _dialog = inject(MatDialog);\r\n private _sub?: Subscription;\r\n\r\n /**\r\n * The service to use to load the nodes.\r\n */\r\n public readonly service = input<StaticThesPagedTreeStoreService>(\r\n new StaticThesPagedTreeStoreService([], renderLabelFromLastColon)\r\n );\r\n\r\n /**\r\n * Emitted when a node is clicked.\r\n */\r\n public readonly nodePick = output<ThesEntryPagedTreeNode>();\r\n\r\n /**\r\n * The store instance, built from the service.\r\n */\r\n public readonly store = computed(() => {\r\n const service = this.service();\r\n const store = new PagedTreeStore<\r\n ThesEntryPagedTreeNode,\r\n ThesEntryNodeFilter\r\n >(service);\r\n this.nodes$ = store.nodes$;\r\n this.filter$ = store.filter$;\r\n return store;\r\n });\r\n\r\n public readonly loading = signal<boolean>(false);\r\n\r\n public debug: FormControl<boolean> = new FormControl(false, {\r\n nonNullable: true,\r\n });\r\n public hideLoc: FormControl<boolean> = new FormControl(false, {\r\n nonNullable: true,\r\n });\r\n public hideFilter: FormControl<boolean> = new FormControl(false, {\r\n nonNullable: true,\r\n });\r\n\r\n public filter$: Observable<Readonly<ThesEntryNodeFilter>>;\r\n public nodes$: Observable<Readonly<ThesEntryPagedTreeNode[]>>;\r\n\r\n public label: FormControl<string | null> = new FormControl(null);\r\n public form = new FormGroup({\r\n label: this.label,\r\n });\r\n\r\n constructor() {\r\n const store = this.store();\r\n this.nodes$ = store.nodes$;\r\n this.filter$ = store.filter$;\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (!this.store().getNodes().length) {\r\n this.loading.set(true);\r\n this.store()\r\n .setFilter({})\r\n .finally(() => {\r\n this.loading.set(false);\r\n console.log('nodes loaded', this.store().getNodes());\r\n });\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n public reset(): void {\r\n this.loading.set(true);\r\n this.store()\r\n .reset()\r\n .finally(() => {\r\n this.loading.set(false);\r\n });\r\n }\r\n\r\n public onToggleExpanded(node: ThesEntryPagedTreeNode): void {\r\n this.loading.set(true);\r\n if (node.expanded) {\r\n this.store()\r\n .collapse(node.id)\r\n .finally(() => {\r\n this.loading.set(false);\r\n });\r\n } else {\r\n this.store()\r\n .expand(node.id)\r\n .finally(() => {\r\n this.loading.set(false);\r\n });\r\n }\r\n }\r\n\r\n public onPageChangeRequest(request: PageChangeRequest): void {\r\n this.loading.set(true);\r\n this.store()\r\n .changePage(request.node.id, request.paging.pageNumber)\r\n .finally(() => {\r\n this.loading.set(false);\r\n });\r\n }\r\n\r\n public onFilterChange(filter: ThesEntryNodeFilter | null | undefined): void {\r\n console.log('filter change', filter);\r\n this.loading.set(true);\r\n this.store()\r\n .setFilter(filter || {})\r\n .finally(() => {\r\n this.loading.set(false);\r\n });\r\n }\r\n\r\n public onEditFilterRequest(node: ThesEntryPagedTreeNode): void {\r\n const dialogRef = this._dialog.open(ThesPagedTreeFilterComponent, {\r\n data: {\r\n filter: node.filter,\r\n },\r\n });\r\n dialogRef.afterClosed().subscribe((filter) => {\r\n // undefined = user dismissed without changes\r\n if (filter === null) {\r\n this.store().setNodeFilter(node.id, null);\r\n } else if (filter) {\r\n this.store().setNodeFilter(node.id, filter);\r\n }\r\n });\r\n }\r\n\r\n public expandAll(): void {\r\n this.store().expandAll();\r\n }\r\n\r\n public collapseAll(): void {\r\n this.store().collapseAll();\r\n }\r\n\r\n public clear(): void {\r\n this.store().clear();\r\n }\r\n\r\n public onNodeClick(node: ThesEntryPagedTreeNode): void {\r\n if (!node.hasChildren) {\r\n this.nodePick.emit(node);\r\n }\r\n }\r\n\r\n public findLabels(): void {\r\n if (!this.label.value) {\r\n return;\r\n }\r\n this.store().findLabels(this.label.value);\r\n }\r\n\r\n public removeHilites(): void {\r\n this.store().removeHilites();\r\n }\r\n}\r\n","<div id=\"container\">\r\n <!-- filters -->\r\n <div id=\"filters\" class=\"form-row\">\r\n <form [formGroup]=\"form\" (submit)=\"findLabels()\" class=\"form-row\">\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 }\r\n </mat-form-field>\r\n <button type=\"submit\" mat-icon-button class=\"mat-primary\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"removeHilites()\">\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n </form>\r\n <fieldset>\r\n <legend>filter</legend>\r\n <cadmus-thes-paged-tree-filter\r\n [filter]=\"filter$ | async\"\r\n (filterChange)=\"onFilterChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n\r\n <!-- tree -->\r\n <div id=\"tree\">\r\n <!-- progress -->\r\n @if (loading()) {\r\n <div>\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </div>\r\n }\r\n <!-- nodes -->\r\n @if (nodes$ | async; as nodes) {\r\n <div>\r\n @for (node of nodes; track node.id; let i = $index) {\r\n <div class=\"button-row\" [class.hilite]=\"node.hilite\">\r\n <pdb-browser-tree-node\r\n [node]=\"node\"\r\n [debug]=\"debug.value\"\r\n [paging]=\"\r\n node.expanded &&\r\n i + 1 < nodes.length &&\r\n nodes[i + 1].paging.pageCount > 1\r\n ? nodes[i + 1].paging\r\n : undefined\r\n \"\r\n [hideFilter]=\"hideFilter.value\"\r\n [hideLoc]=\"hideLoc.value\"\r\n (toggleExpandedRequest)=\"onToggleExpanded($any($event))\"\r\n (changePageRequest)=\"onPageChangeRequest($event)\"\r\n (editNodeFilterRequest)=\"onEditFilterRequest($any($event))\"\r\n />\r\n @if (!node.hasChildren) {\r\n <button type=\"button\" mat-icon-button (click)=\"onNodeClick(node)\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"form-row\">\r\n <mat-checkbox [formControl]=\"debug\">debug</mat-checkbox>\r\n <mat-checkbox [formControl]=\"hideFilter\">no filter</mat-checkbox>\r\n <mat-checkbox [formControl]=\"hideLoc\">no loc.</mat-checkbox>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n (click)=\"collapseAll()\"\r\n style=\"margin-left: 24px\"\r\n >\r\n collapse\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, computed, input, output, Type } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ThesPagedTreeFilterComponent } from '../thes-paged-tree-filter/thes-paged-tree-filter.component';\r\nimport {\r\n renderLabelFromLastColon,\r\n StaticThesPagedTreeStoreService,\r\n ThesaurusEntry,\r\n ThesEntryPagedTreeNode,\r\n} from './static-thes-paged-tree-store.service';\r\nimport { ThesPagedTreeBrowserComponent } from '../thes-paged-tree-browser/thes-paged-tree-browser.component';\r\n\r\n/**\r\n * Thesaurus tree component.\r\n * This component displays a set of hierarchical thesaurus entries\r\n * in a tree, provided that each entry marks its hierarchy with\r\n * dots. For instance, say you have the hierarchy \"furniture\" -\r\n * \"type\" - \"color\". You might have an entry whose ID is\r\n * \"furniture.table.red\", with a sibling \"furniture.table.green\",\r\n * and a parent \"furniture.table\". This parent is there only to\r\n * provide a label to the parent node, but only leaf nodes can be\r\n * picked by the user. Whenever one is picked, the entryChange\r\n * event is emitted. Note that even if you specify a label renderer\r\n * function, the event always emits the original label.\r\n */\r\n@Component({\r\n selector: 'cadmus-thesaurus-tree',\r\n templateUrl: './thesaurus-tree.component.html',\r\n styleUrls: ['./thesaurus-tree.component.css'],\r\n imports: [FormsModule, ReactiveFormsModule, ThesPagedTreeBrowserComponent],\r\n})\r\nexport class ThesaurusTreeComponent {\r\n /**\r\n * The thesaurus entries.\r\n */\r\n public readonly entries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The optional node label rendering function.\r\n */\r\n public readonly renderLabel = input<(label: string) => string>(\r\n renderLabelFromLastColon\r\n );\r\n\r\n /**\r\n * Fired when a thesaurus entry is selected.\r\n */\r\n public readonly entryChange = output<ThesaurusEntry>();\r\n\r\n /**\r\n * The tree store service, dependent on the current entries and renderLabel.\r\n */\r\n public readonly service = computed<StaticThesPagedTreeStoreService>(() => {\r\n const entries = this.entries();\r\n return new StaticThesPagedTreeStoreService(\r\n entries || [],\r\n this.renderLabel()\r\n );\r\n });\r\n\r\n /**\r\n * The filter component class to use.\r\n */\r\n public readonly filterComponent: Type<ThesPagedTreeFilterComponent> =\r\n ThesPagedTreeFilterComponent;\r\n\r\n public onNodePick(node: ThesEntryPagedTreeNode): void {\r\n // only allow selection of leaf nodes (nodes without children)\r\n if (!node.hasChildren) {\r\n // find the original entry\r\n const entry = this.entries()?.find((e) => e.id === node.key);\r\n if (entry) {\r\n this.entryChange.emit(entry);\r\n }\r\n }\r\n }\r\n}\r\n","<div>\r\n <!-- tree -->\r\n @if (service() && entries()?.length) {\r\n <div class=\"tree-wrapper\">\r\n <cadmus-thes-paged-tree-browser\r\n [service]=\"service()\"\r\n (nodePick)=\"onNodePick($event)\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n untracked,\r\n} from '@angular/core';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n CdkDragDrop,\r\n CdkDropList,\r\n CdkDrag,\r\n moveItemInArray,\r\n CdkDragPlaceholder,\r\n} from '@angular/cdk/drag-drop';\r\nimport {\r\n MatChipListbox,\r\n MatChipOption,\r\n MatChipRemove,\r\n} from '@angular/material/chips';\r\nimport { MatExpansionPanel } from '@angular/material/expansion';\r\nimport { MatFormField } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { renderLabelFromLastColon } from '../thesaurus-tree/static-thes-paged-tree-store.service';\r\nimport { ThesaurusTreeComponent } from '../thesaurus-tree/thesaurus-tree.component';\r\n\r\n/**\r\n * The prefix added to custom entries' IDs.\r\n */\r\nexport const CUSTOM_ENTRY_PREFIX = '$';\r\n\r\n/**\r\n * A picker component for thesaurus entries.\r\n * This component allows picking one or more entries from a given thesaurus.\r\n * In its collapsed state, it shows the picked entries as chips; when\r\n * expanded, it shows the thesaurus tree to pick from. Custom entries\r\n * (not in the thesaurus) can be optionally allowed.\r\n */\r\n@Component({\r\n selector: 'cadmus-thes-entries-picker',\r\n imports: [\r\n ReactiveFormsModule,\r\n CdkDropList,\r\n CdkDrag,\r\n MatChipListbox,\r\n MatChipOption,\r\n MatChipRemove,\r\n MatExpansionPanel,\r\n MatFormField,\r\n MatIconButton,\r\n MatIcon,\r\n MatInput,\r\n MatTooltip,\r\n ThesaurusTreeComponent,\r\n ],\r\n templateUrl: './thes-entries-picker.component.html',\r\n styleUrl: './thes-entries-picker.component.css',\r\n})\r\nexport class ThesEntriesPickerComponent {\r\n /**\r\n * The thesaurus entries to pick from (required).\r\n */\r\n public readonly availableEntries = input.required<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The picked entries.\r\n */\r\n public readonly entries = model<ThesaurusEntry[]>([]);\r\n\r\n /**\r\n * True to show the entries with labels shortened according to\r\n * their hierarchy.\r\n */\r\n public readonly hierarchicLabels = input<boolean>(false);\r\n\r\n /**\r\n * True to automatically sort entries (disables drag-and-drop).\r\n * When false, entries can be manually reordered via drag-and-drop.\r\n */\r\n public readonly autoSort = input<boolean>(false);\r\n\r\n /**\r\n * True to allow custom values (not in the entries list).\r\n */\r\n public readonly allowCustom = input<boolean>(false);\r\n\r\n /**\r\n * The minimum number of entries to pick.\r\n */\r\n public readonly minEntries = input<number>(0);\r\n\r\n /**\r\n * The maximum number of entries to pick (0=unlimited).\r\n */\r\n public readonly maxEntries = input<number>(0);\r\n\r\n /**\r\n * True when the picker is expanded (showing the entries list).\r\n */\r\n public readonly expanded = model<boolean>(false);\r\n\r\n /**\r\n * The message to show when there are no picked entries.\r\n */\r\n public readonly emptyMessage = input<string>('no entries');\r\n\r\n /**\r\n * The number of remaining entries that can be picked (0=unlimited).\r\n * This is displayed only if maxEntries > 1.\r\n */\r\n public readonly remaining = computed(() => {\r\n if (this.maxEntries() > 0) {\r\n return this.maxEntries() - this.entries().length;\r\n }\r\n return 0;\r\n });\r\n\r\n public id: FormControl<string>;\r\n public value: FormControl<string>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.id = formBuilder.control<string>('', {\r\n validators: [Validators.required, Validators.maxLength(100)],\r\n nonNullable: true,\r\n });\r\n this.value = formBuilder.control<string>('', {\r\n validators: [Validators.required, Validators.maxLength(500)],\r\n nonNullable: true,\r\n });\r\n this.form = formBuilder.group({\r\n id: this.id,\r\n value: this.value,\r\n });\r\n // if auto-sort is turned on and we have entries, sort them\r\n effect(\r\n () => {\r\n // only track autoSort() changes, not entries()\r\n const shouldSort = this.autoSort();\r\n\r\n if (shouldSort) {\r\n // use untracked to read entries without creating a dependency\r\n const currentEntries = untracked(() => this.entries());\r\n if (currentEntries.length > 1) {\r\n const entries = [...currentEntries];\r\n this.sortEntries(entries);\r\n this.entries.set(entries);\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n // need arrow function to use 'this'\r\n public renderLabel = (label: string): string => {\r\n return this.hierarchicLabels() ? renderLabelFromLastColon(label) : label;\r\n };\r\n\r\n private sortEntries(entries: ThesaurusEntry[]) {\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n const aIsCustom = a.id?.startsWith(CUSTOM_ENTRY_PREFIX) ?? false;\r\n const bIsCustom = b.id?.startsWith(CUSTOM_ENTRY_PREFIX) ?? false;\r\n if (aIsCustom !== bIsCustom) {\r\n // place custom entries after non-custom ones\r\n return aIsCustom ? 1 : -1;\r\n }\r\n // same kind: sort by label/value\r\n return a.value.localeCompare(b.value);\r\n });\r\n }\r\n\r\n public onEntryChange(entry: ThesaurusEntry): void {\r\n // check if already present\r\n if (this.entries().some((e: ThesaurusEntry) => e.id === entry.id)) {\r\n return;\r\n }\r\n // check if limit is reached\r\n if (this.maxEntries() && this.entries().length >= this.maxEntries()) {\r\n return;\r\n }\r\n\r\n const entries = [...this.entries()];\r\n entries.push(entry);\r\n if (this.autoSort()) {\r\n this.sortEntries(entries);\r\n }\r\n this.entries.set(entries);\r\n }\r\n\r\n public addCustomEntry(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n\r\n // create the custom entry\r\n const customEntry: ThesaurusEntry = {\r\n id: CUSTOM_ENTRY_PREFIX + this.id.value,\r\n value: this.value.value,\r\n };\r\n\r\n // check if already present\r\n if (this.entries().some((e: ThesaurusEntry) => e.id === customEntry.id)) {\r\n return;\r\n }\r\n // check if limit is reached\r\n if (this.maxEntries() && this.entries().length >= this.maxEntries()) {\r\n return;\r\n }\r\n const entries = [...this.entries()];\r\n entries.push(customEntry);\r\n if (this.autoSort()) {\r\n this.sortEntries(entries);\r\n }\r\n this.entries.set(entries);\r\n this.form.reset();\r\n }\r\n\r\n public removeEntry(entry: ThesaurusEntry): void {\r\n const entries = [...this.entries().filter((e) => e.id !== entry.id)];\r\n this.entries.set(entries);\r\n }\r\n\r\n public clear(): void {\r\n this.entries.set([]);\r\n // if min > 0, expand the picker\r\n if (this.minEntries() > 0 && !this.expanded()) {\r\n setTimeout(() => {\r\n this.expanded.set(true);\r\n }, 0);\r\n }\r\n }\r\n\r\n public onDrop(event: CdkDragDrop<ThesaurusEntry[]>): void {\r\n const entries = [...this.entries()];\r\n moveItemInArray(entries, event.previousIndex, event.currentIndex);\r\n this.entries.set(entries);\r\n }\r\n}\r\n","<div id=\"container\">\r\n <!-- picked entries -->\r\n <div id=\"picked\" class=\"form-row\">\r\n <!-- count -->\r\n <span class=\"nr\" [class.error]=\"entries().length < minEntries()\">{{\r\n entries().length\r\n }}</span>\r\n <!-- max-->\r\n @if (maxEntries() > 1) {\r\n <span class=\"muted\">/{{ maxEntries() }}</span>\r\n @if (remaining()) {\r\n <span class=\"muted\">: -{{ remaining() }}</span>\r\n } }\r\n <!-- min -->\r\n @if (minEntries()) {\r\n <!-- min with error -->\r\n @if (entries().length < minEntries()) {\r\n <span class=\"error\"> (min {{ minEntries() }})</span>\r\n }\r\n <!-- min without error -->\r\n @else {\r\n <span class=\"muted\"> (min {{ minEntries() }})</span>\r\n } }\r\n <!-- list -->\r\n <mat-chip-listbox\r\n [cdkDropListDisabled]=\"autoSort()\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"chip-list\"\r\n >\r\n @for (e of entries(); track e.id; let idx = $index) {\r\n <div class=\"chip-wrapper\">\r\n <mat-chip-option\r\n [cdkDragDisabled]=\"autoSort()\"\r\n cdkDrag\r\n [class.error]=\"!allowCustom() && e.id.startsWith('$')\"\r\n >\r\n {{ renderLabel(e.value) }}\r\n <button\r\n type=\"button\"\r\n matChipRemove\r\n (click)=\"removeEntry(e)\"\r\n aria-label=\"Remove entry\"\r\n >\r\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n </mat-chip-option>\r\n </div>\r\n } @empty {\r\n <span class=\"muted empty-message\">{{ emptyMessage() }}</span>\r\n }\r\n </mat-chip-listbox>\r\n\r\n <!-- clear -->\r\n @if (entries().length > 0) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Remove all entries\"\r\n (click)=\"clear()\"\r\n [disabled]=\"entries().length === 0\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n }\r\n <!-- toggler -->\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Toggle picker\"\r\n (click)=\"expanded.set(!expanded())\"\r\n >\r\n @if (expanded()) {\r\n <mat-icon class=\"mat-primary\">publish</mat-icon>\r\n } @if (!expanded()) {\r\n <mat-icon class=\"mat-primary\">get_app</mat-icon>\r\n }\r\n </button>\r\n </div>\r\n\r\n <!-- entries picker -->\r\n <div id=\"picker\">\r\n <mat-expansion-panel\r\n [expanded]=\"expanded()\"\r\n (expandedChange)=\"expanded.set($event)\"\r\n >\r\n <div>\r\n <fieldset>\r\n <legend>available</legend>\r\n <cadmus-thesaurus-tree\r\n [entries]=\"availableEntries()\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onEntryChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n @if (allowCustom()) {\r\n <div>\r\n <form [formGroup]=\"form\" (submit)=\"addCustomEntry()\">\r\n <fieldset>\r\n <legend>custom</legend>\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [formControl]=\"id\"\r\n placeholder=\"ID\"\r\n />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [formControl]=\"value\"\r\n placeholder=\"label\"\r\n />\r\n </mat-form-field>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Add custom entry\"\r\n [disabled]=\"\r\n !form.valid ||\r\n (maxEntries() > 0 && entries().length >= maxEntries())\r\n \"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n </fieldset>\r\n </form>\r\n </div>\r\n }\r\n </mat-expansion-panel>\r\n </div>\r\n</div>\r\n","import { Component, input, computed } from '@angular/core';\r\n\r\nimport {\r\n Thesaurus,\r\n FacetDefinition,\r\n PartTypeIds,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\nimport { FacetService } from '@myrmidon/cadmus-api';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { ColorToContrastPipe } from '@myrmidon/ngx-tools';\r\n\r\nexport enum PartBadgeType {\r\n partAndRole = 0,\r\n partOnly = 1,\r\n roleOnly = 2,\r\n}\r\n\r\n/**\r\n * Function used to get the part's human-friendly name from its ID and role ID.\r\n * This assumes that thesaurus entries with role ID specified have form\r\n * partId:roleId.\r\n * @param typeId The part type ID.\r\n * @param roleId The optional role ID.\r\n * @param typeThesaurus The types thesaurus.\r\n * @param noFallback If true, and no thesaurus is provided, return undefined\r\n * rather than the type and role IDs.\r\n * @returns The name.\r\n */\r\nexport function getPartIdName(\r\n typeId: string,\r\n roleId?: string | null,\r\n typeThesaurus?: Thesaurus,\r\n noFallback = false\r\n): string | undefined {\r\n if (!typeThesaurus) {\r\n if (noFallback) {\r\n return undefined;\r\n }\r\n return roleId ? `${typeId} ${roleId}` : typeId;\r\n }\r\n let entry: ThesaurusEntry | undefined;\r\n\r\n // first find partId:roleId if any\r\n if (roleId) {\r\n const suffixedId = `${typeId}:${roleId}`;\r\n entry = typeThesaurus.entries?.find((e) => e.id === suffixedId);\r\n if (entry) {\r\n return entry.value;\r\n }\r\n }\r\n // else find partId alone\r\n entry = typeThesaurus.entries?.find((e) => e.id === typeId);\r\n\r\n return entry ? entry.value : typeId;\r\n}\r\n\r\n/**\r\n * Part badge component. This component displays a badge with the\r\n * part's type name and role name, if any, and a background color.\r\n */\r\n@Component({\r\n selector: 'cadmus-part-badge',\r\n imports: [MatTooltip, ColorToContrastPipe],\r\n templateUrl: './part-badge.component.html',\r\n styleUrls: ['./part-badge.component.css'],\r\n})\r\nexport class PartBadgeComponent {\r\n /**\r\n * The badge type: 0=part and role, 1=part only, 2=role only.\r\n */\r\n public readonly badgeType = input<PartBadgeType>(PartBadgeType.partAndRole);\r\n\r\n /**\r\n * The types thesaurus.\r\n */\r\n public readonly typeThesaurus = input<Thesaurus>();\r\n\r\n /**\r\n * The part's facet definition.\r\n */\r\n public readonly facetDefinition = input<FacetDefinition>();\r\n\r\n /**\r\n * The part type IDs.\r\n */\r\n public readonly partTypeIds = input<PartTypeIds>();\r\n\r\n /**\r\n * The part type name.\r\n */\r\n public readonly typeName = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const typeThesaurus = this.typeThesaurus();\r\n\r\n if (!partTypeIds) {\r\n return undefined;\r\n }\r\n\r\n return getPartIdName(partTypeIds.typeId, partTypeIds.roleId, typeThesaurus);\r\n });\r\n\r\n /**\r\n * The part role name.\r\n */\r\n public readonly roleName = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const typeThesaurus = this.typeThesaurus();\r\n\r\n if (!partTypeIds) {\r\n return undefined;\r\n }\r\n\r\n return this.getRoleIdName(partTypeIds.roleId, typeThesaurus);\r\n });\r\n\r\n /**\r\n * The part badge color.\r\n */\r\n public readonly color = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const facetDefinition = this.facetDefinition();\r\n\r\n if (!partTypeIds) {\r\n return 'transparent';\r\n }\r\n\r\n return this.getPartColor(\r\n partTypeIds.typeId,\r\n partTypeIds.roleId,\r\n facetDefinition\r\n );\r\n });\r\n\r\n /**\r\n * The part definition matching the part type ID and role ID.\r\n */\r\n public readonly partDefinition = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const facetDefinition = this.facetDefinition();\r\n\r\n if (!partTypeIds || !facetDefinition?.partDefinitions) {\r\n return undefined;\r\n }\r\n\r\n // First try to find exact match with typeId:roleId\r\n if (partTypeIds.roleId) {\r\n const exactMatch = facetDefinition.partDefinitions.find(\r\n (pd) => pd.typeId === `${partTypeIds.typeId}:${partTypeIds.roleId}`\r\n );\r\n if (exactMatch) {\r\n return exactMatch;\r\n }\r\n }\r\n\r\n // Fallback to match by typeId only\r\n return facetDefinition.partDefinitions.find(\r\n (pd) => pd.typeId === partTypeIds.typeId\r\n );\r\n });\r\n\r\n constructor(private _facetService: FacetService) {}\r\n\r\n private getPartColor(\r\n typeId: string,\r\n roleId?: string,\r\n facetDefinition?: FacetDefinition\r\n ): string {\r\n if (!facetDefinition) {\r\n return 'transparent';\r\n }\r\n return this._facetService.getPartColor(typeId, roleId, facetDefinition);\r\n }\r\n\r\n /**\r\n * Get the role's human-friendly name from its ID.\r\n * @param roleId The role ID.\r\n * @param typeThesaurus The types thesaurus.\r\n * @returns The name or undefined.\r\n */\r\n private getRoleIdName(\r\n roleId?: string,\r\n typeThesaurus?: Thesaurus\r\n ): string | undefined {\r\n if (!roleId || !typeThesaurus) {\r\n return roleId;\r\n }\r\n let entry: ThesaurusEntry | undefined;\r\n\r\n // first find full roleId with optional suffix\r\n entry = typeThesaurus.entries?.find((e) => e.id === roleId);\r\n if (entry) {\r\n return entry.value;\r\n }\r\n\r\n // else strip :suffix if any and find\r\n const i = roleId.lastIndexOf(':');\r\n if (i > -1) {\r\n roleId = roleId.substring(0, i);\r\n }\r\n entry = typeThesaurus.entries?.find((e) => e.id === roleId);\r\n return entry ? entry.value : roleId;\r\n }\r\n}\r\n","@if (badgeType() !== 2) {\r\n<span\r\n class=\"part-badge\"\r\n [style.background-color]=\"color()\"\r\n [style.color]=\"color() | colorToContrast\"\r\n [matTooltip]=\"partDefinition()?.description\"\r\n>\r\n {{ typeName() }}\r\n</span>\r\n} @if (badgeType() !== 1 && roleName()) {\r\n<span class=\"role-badge\">\r\n {{ roleName() }}\r\n</span>\r\n}\r\n","import {\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n input,\r\n effect,\r\n model,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormGroup,\r\n PristineChangeEvent,\r\n UntypedFormGroup,\r\n} from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { deepCopy } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService, User } from '@myrmidon/auth-jwt-login';\r\nimport { AppRepository } from '@myrmidon/cadmus-state';\r\n\r\nimport {\r\n EditedObject,\r\n Fragment,\r\n FragmentIdentity,\r\n Part,\r\n PartIdentity,\r\n} from '@myrmidon/cadmus-core';\r\nimport { getPartIdName } from './part-badge/part-badge.component';\r\n\r\n/**\r\n * Base class for part/fragment editors dumb components.\r\n * The model type is the templated argument T.\r\n *\r\n * When deriving from this editor, be sure to call super.ngOnInit()\r\n * from the derived editor's ngOnInit handler.\r\n */\r\n@Component({\r\n template: '',\r\n standalone: false,\r\n})\r\nexport abstract class ModelEditorComponentBase<T extends Part | Fragment>\r\n implements OnInit, OnDestroy\r\n{\r\n private readonly _mebSubs: Subscription[] = [];\r\n protected readonly _appRepository?: AppRepository;\r\n\r\n /**\r\n * The root form of the editor.\r\n */\r\n public form: FormGroup | UntypedFormGroup;\r\n\r\n /**\r\n * The current user.\r\n */\r\n public user?: User;\r\n\r\n /**\r\n * The user authorization level (0-4).\r\n */\r\n public userLevel: number;\r\n\r\n /**\r\n * An observable with the current dirty state of the editor.\r\n */\r\n public isDirty$: BehaviorSubject<boolean>;\r\n\r\n /**\r\n * The identity of the edited model.\r\n */\r\n public readonly identity = input<PartIdentity | FragmentIdentity>();\r\n\r\n /**\r\n * The data being edited.\r\n */\r\n public readonly data = model<EditedObject<T>>();\r\n\r\n /**\r\n * True to disable the editor.\r\n */\r\n public readonly disabled = input<boolean>();\r\n\r\n /**\r\n * Event emitted when the dirty state has changed.\r\n * This event just reflects changes in isDirty$, and is a facility\r\n * for propagating it to the parent's component.\r\n */\r\n public readonly dirtyChange = output<boolean>();\r\n\r\n /**\r\n * Emitted when the user requests to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * The human-friendly model name. This is computed from the model's\r\n * type ID and role ID, if any, using the types thesaurus set provided\r\n * by the app repository.\r\n */\r\n public readonly modelName = computed<string | undefined>(() => {\r\n const identity = this.identity();\r\n // layers have no identity but have a layerPart\r\n if (!identity) {\r\n const layerPart = this.data()?.layerPart;\r\n if (layerPart) {\r\n return getPartIdName(\r\n layerPart.typeId,\r\n layerPart.roleId,\r\n this._appRepository?.getTypeThesaurus(),\r\n true // no fallback so that the part template can use its default name\r\n );\r\n }\r\n return undefined;\r\n }\r\n if (!identity) {\r\n return undefined;\r\n }\r\n return getPartIdName(\r\n identity.typeId,\r\n identity.roleId,\r\n this._appRepository?.getTypeThesaurus(),\r\n true // no fallback so that the part template can use its default name\r\n );\r\n });\r\n\r\n /**\r\n * Create a new instance of the editor.\r\n *\r\n * @param authService The authentication service.\r\n * @param formBuilder Form builder.\r\n */\r\n constructor(\r\n protected authService: AuthJwtService,\r\n protected formBuilder: FormBuilder\r\n ) {\r\n this.form = formBuilder.group({});\r\n this.userLevel = 0;\r\n this.isDirty$ = new BehaviorSubject<boolean>(false);\r\n this._appRepository = inject(AppRepository);\r\n\r\n effect(() => {\r\n this.disableForm(this.disabled());\r\n });\r\n effect(() => {\r\n this.onDataSet(this.data());\r\n });\r\n effect(() => {\r\n this.onIdentitySet(this.identity());\r\n });\r\n }\r\n\r\n private disableForm(disabled?: boolean) {\r\n if (disabled) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\r\n }\r\n\r\n private onIdentitySet(identity?: PartIdentity | FragmentIdentity) {\r\n if (identity?.partId) {\r\n const part = this.data()?.value as Part;\r\n if (part && !part.id) {\r\n console.log('part identity set', identity.partId);\r\n part.id = identity.partId;\r\n }\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // form\r\n this.form = this.buildForm(this.formBuilder);\r\n\r\n // dirty check on form\r\n this._mebSubs.push(\r\n this.form.events.subscribe((e) => {\r\n if (e instanceof PristineChangeEvent) {\r\n console.log('dirty change: ', !e.pristine);\r\n this.isDirty$.next(!e.pristine);\r\n this.dirtyChange.emit(this.isDirty$.value);\r\n }\r\n })\r\n );\r\n\r\n // auth service\r\n this.userLevel = this.getCurrentUserLevel();\r\n this._mebSubs.push(\r\n this.authService.currentUser$.subscribe((user: User | null) => {\r\n this.updateUserProperties(user);\r\n })\r\n );\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._mebSubs.forEach((s) => s.unsubscribe());\r\n }\r\n\r\n /**\r\n * Implement in the derived class to build the root form of this editor.\r\n * The form built will then be attached to the dirty check mechanism\r\n * provided by this base class.\r\n *\r\n * @param formBuilder The form builder.\r\n */\r\n protected abstract buildForm(\r\n formBuilder: FormBuilder\r\n ): FormGroup | UntypedFormGroup;\r\n\r\n /**\r\n * Get the authorization level of the current user if any.\r\n * @returns 4-1 for admin, editor, operator, visitor; else 0.\r\n */\r\n private getCurrentUserLevel(): number {\r\n const user = this.authService.currentUserValue;\r\n if (!user || !user.roles) {\r\n return 0;\r\n }\r\n if (user.roles.indexOf('admin') > -1) {\r\n return 4;\r\n }\r\n if (user.roles.indexOf('editor') > -1) {\r\n return 3;\r\n }\r\n if (user.roles.indexOf('operator') > -1) {\r\n return 2;\r\n }\r\n if (user.roles.indexOf('visitor') > -1) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n private updateUserProperties(user: User | null): void {\r\n if (!user) {\r\n this.user = undefined;\r\n this.userLevel = 0;\r\n } else {\r\n this.user = user;\r\n this.userLevel = this.getCurrentUserLevel();\r\n }\r\n }\r\n\r\n /**\r\n * Update the data value property and emit the corresponding\r\n * modelChange event.\r\n *\r\n * @param value The value.\r\n */\r\n protected updateValue(value: T): void {\r\n this.data.set({ ...(this.data() || { thesauri: {} }), value: value });\r\n }\r\n\r\n /**\r\n * Invoked whenever the model property is set (=data comes from input model\r\n * property), unless setting it via updateModel. Implement to update the form\r\n * controls to reflect the new model data.\r\n *\r\n * @param data The data set, or undefined.\r\n */\r\n protected abstract onDataSet(data?: EditedObject<T>): void;\r\n\r\n /**\r\n * Get a new object from the edited part if any, else as a new part.\r\n *\r\n * @param typeId The part's type ID. This is a constant received\r\n * from the implementor.\r\n * @returns Part object.\r\n */\r\n protected getEditedPart(typeId: string): Part {\r\n const part = deepCopy(this.data()?.value) as Part | null;\r\n return (\r\n part || {\r\n itemId: this.identity()!.itemId || '',\r\n id: '',\r\n typeId: typeId,\r\n roleId: this.identity()!.roleId || undefined,\r\n timeCreated: new Date(),\r\n creatorId: '',\r\n timeModified: new Date(),\r\n userId: '',\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get a new object from the edited fragment if any, else a new fragment.\r\n *\r\n * @returns Fragment object.\r\n */\r\n protected getEditedFragment(): Fragment {\r\n const fr = deepCopy(this.data()?.value) as Fragment | null;\r\n return (\r\n fr || {\r\n location: (this.identity() as FragmentIdentity).loc,\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Implement in derived classes to get the data from form's controls.\r\n * This is used when saving.\r\n */\r\n protected abstract getValue(): T;\r\n\r\n /**\r\n * True if this editor has the thesaurus having the specified key in the\r\n * loaded thesauri set.\r\n */\r\n protected hasThesaurus(key: string): boolean {\r\n return this.data()?.thesauri && this.data()!.thesauri[key] ? true : false;\r\n }\r\n\r\n /**\r\n * Emit a request to close the editor.\r\n */\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n /**\r\n * Save the edited data if valid.\r\n */\r\n public save(): void {\r\n if (this.form.invalid) {\r\n console.warn('Save invoked with invalid form');\r\n return;\r\n }\r\n const value = this.getValue();\r\n this.updateValue(value);\r\n // the form is no more dirty\r\n this.form.markAsPristine();\r\n }\r\n}\r\n","import {\r\n AbstractControl,\r\n ValidatorFn,\r\n ValidationErrors,\r\n FormGroup,\r\n UntypedFormGroup,\r\n} from '@angular/forms';\r\n\r\n// https://www.tektutorialshub.com/angular/custom-validator-with-parameters-in-angular/\r\n\r\n/**\r\n * General-purpose custom validators.\r\n */\r\n// https://github.com/angular/angular/issues/18867#issuecomment-357484102\r\n// @dynamic\r\nexport class CustomValidators {\r\n /**\r\n * Validates a FormGroup or FormArray control checking if the count of their\r\n * controls with a true value is equal to or greater than the specified\r\n * number.\r\n *\r\n * @param min The minimum number of checked controls.\r\n */\r\n public static minChecked(min = 1): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n // https://trungk18.com/experience/angular-form-array-validate-at-least-one-checkbox-was-selected/\r\n let checked = 0;\r\n\r\n const group = (control as FormGroup) || (control as UntypedFormGroup);\r\n Object.keys(group.controls).forEach((key) => {\r\n const ctl = group.controls[key];\r\n if (ctl.value === true) {\r\n checked++;\r\n }\r\n });\r\n\r\n if (checked < min) {\r\n return {\r\n minChecked: true,\r\n };\r\n }\r\n return null;\r\n };\r\n }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\n\r\n/**\r\n * Simple JSON validator.\r\n */\r\nexport class JsonValidators {\r\n public static json(\r\n control: AbstractControl\r\n ): { [key: string]: boolean } | null {\r\n if (!control.value) {\r\n // we allow empty code\r\n return null;\r\n }\r\n try {\r\n JSON.parse(control.value);\r\n } catch (e) {\r\n return { json: true };\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { DataPage } from '@myrmidon/ngx-tools';\n\nimport { UserService } from '@myrmidon/cadmus-api';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\n\nexport interface UserWithRoles {\n user: {\n id: string;\n firstName: string;\n lastName: string;\n userName: string;\n email: string;\n };\n roles: string[];\n}\n\n/**\n * Service for users lookup.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class UserRefLookupService implements RefLookupService {\n constructor(private _userService: UserService) {}\n\n public lookup(\n filter: RefLookupFilter,\n options?: any\n ): Observable<UserWithRoles[]> {\n return this._userService\n .getUsers(\n {\n name: filter.text,\n },\n 1,\n filter.limit\n )\n .pipe(\n map((page: DataPage<UserWithRoles>) => {\n return page.items;\n })\n );\n }\n\n public getName(item: UserWithRoles): string {\n return item?.user?.userName;\n }\n}\n","// https://github.com/angular/angular/issues/10887\r\n\r\nimport { AbstractControl } from '@angular/forms';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n/**\r\n * Extract arguments of function\r\n */\r\nexport type ArgumentsType<F> = F extends (...args: infer A) => any ? A : never;\r\n\r\n/**\r\n * Creates an object like O. Optionally provide minimum set of properties P\r\n * which the objects must share to conform.\r\n */\r\ntype ObjectLike<O extends object, P extends keyof O = keyof O> = Pick<O, P>;\r\n\r\n/**\r\n * Extract a touched changed observable from an abstract control.\r\n * Use in component code like:\r\n * this.touchedChanges$ = extractTouchedChanges(this.form);\r\n *\r\n * @param control AbstractControl-like object with markAsTouched method.\r\n */\r\nexport const extractTouchedChanges = (\r\n control: ObjectLike<AbstractControl, 'markAsTouched' | 'markAsUntouched'>\r\n): Observable<boolean> => {\r\n const prevMarkAsTouched = control.markAsTouched;\r\n const prevMarkAsUntouched = control.markAsUntouched;\r\n\r\n const touchedChanges$ = new Subject<boolean>();\r\n\r\n function nextMarkAsTouched(\r\n ...args: ArgumentsType<AbstractControl['markAsTouched']>\r\n ): void {\r\n touchedChanges$.next(true);\r\n prevMarkAsTouched.bind(control)(...args);\r\n }\r\n\r\n function nextMarkAsUntouched(\r\n ...args: ArgumentsType<AbstractControl['markAsUntouched']>\r\n ): void {\r\n touchedChanges$.next(false);\r\n prevMarkAsUntouched.bind(control)(...args);\r\n }\r\n\r\n control.markAsTouched = nextMarkAsTouched;\r\n control.markAsUntouched = nextMarkAsUntouched;\r\n\r\n return touchedChanges$;\r\n};\r\n\r\n/**\r\n * Extract a pristine changed observable from an abstract control.\r\n * Use in component code like:\r\n * this.pristineChanges$ = extractPristineChanges(this.form);\r\n *\r\n * @param control AbstractControl-like object with markAsPristine and markAsDirty\r\n * methods.\r\n */\r\nexport const extractPristineChanges = (\r\n control: ObjectLike<AbstractControl, 'markAsPristine' | 'markAsDirty'>\r\n): Observable<boolean> => {\r\n const prevMarkAsPristine = control.markAsPristine;\r\n const prevMarkAsDirty = control.markAsDirty;\r\n\r\n const pristineChanges$ = new Subject<boolean>();\r\n\r\n function nextMarkAsPristine(\r\n ...args: ArgumentsType<AbstractControl['markAsPristine']>\r\n ): void {\r\n pristineChanges$.next(true);\r\n prevMarkAsPristine.bind(control)(...args);\r\n }\r\n\r\n function nextMarkAsDirty(\r\n ...args: ArgumentsType<AbstractControl['markAsDirty']>\r\n ): void {\r\n pristineChanges$.next(false);\r\n prevMarkAsDirty.bind(control)(...args);\r\n }\r\n\r\n control.markAsPristine = nextMarkAsPristine;\r\n control.markAsDirty = nextMarkAsDirty;\r\n\r\n return pristineChanges$;\r\n};\r\n","/*\r\n * Public API Surface of cadmus-ui\r\n */\r\n\r\nexport * from './lib/components/close-save-buttons/close-save-buttons.component';\r\nexport * from './lib/components/decorated-token-text/decorated-token-text.component';\r\nexport * from './lib/components/error-list/error-list.component';\r\nexport * from './lib/components/facet-badge/facet-badge.component';\r\nexport * from './lib/components/flags-badge/flags-badge.component';\r\nexport * from './lib/components/layer-hints/layer-hints.component';\r\nexport * from './lib/components/lookup-pin/lookup-pin.component';\r\nexport * from './lib/components/thes-entries-picker/thes-entries-picker.component';\r\nexport * from './lib/components/thes-paged-tree-browser/thes-paged-tree-browser.component'\r\nexport * from './lib/components/part-badge/part-badge.component';\r\nexport * from './lib/components/thesaurus-tree/static-thes-paged-tree-store.service';\r\nexport * from './lib/components/thesaurus-tree/thesaurus-tree.component';\r\n\r\nexport * from './lib/components/model-editor-component-base';\r\n\r\nexport * from './lib/services/color.service';\r\n\r\nexport * from './lib/validators/custom-validators';\r\nexport * from './lib/validators/json-validators';\r\n\r\nexport * from './lib/services/user-ref-lookup.service';\r\n\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ColorService","i1","i2","i3","i4","i6","map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"myrmidon-cadmus-ui.mjs","sources":["../../../../projects/myrmidon/cadmus-ui/src/lib/components/close-save-buttons/close-save-buttons.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/close-save-buttons/close-save-buttons.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/decorated-token-text/decorated-token-text.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/decorated-token-text/decorated-token-text.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/error-list/error-list.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/error-list/error-list.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/services/color.service.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/facet-badge/facet-badge.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/facet-badge/facet-badge.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/flags-badge/flags-badge.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/flags-badge/flags-badge.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/layer-hints/layer-hints.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/layer-hints/layer-hints.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/lookup-pin/lookup-pin.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/lookup-pin/lookup-pin.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/part-badge/part-badge.component.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/components/part-badge/part-badge.component.html","../../../../projects/myrmidon/cadmus-ui/src/lib/components/model-editor-component-base.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/validators/custom-validators.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/validators/json-validators.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/services/user-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-ui/src/lib/utils.ts","../../../../projects/myrmidon/cadmus-ui/src/public-api.ts","../../../../projects/myrmidon/cadmus-ui/src/myrmidon-cadmus-ui.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\r\nimport { FormGroup, UntypedFormGroup } from '@angular/forms';\r\n\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'cadmus-close-save-buttons',\r\n templateUrl: './close-save-buttons.component.html',\r\n styleUrls: ['./close-save-buttons.component.css'],\r\n imports: [MatButton, MatIcon],\r\n})\r\nexport class CloseSaveButtonsComponent {\r\n public readonly form = input<FormGroup | UntypedFormGroup>();\r\n\r\n public readonly noSave = input<boolean>();\r\n\r\n public readonly closeRequest = output();\r\n\r\n public close(): void {\r\n this.closeRequest.emit();\r\n }\r\n}\r\n","@if (form()) {\n<div class=\"form-row\">\n <button type=\"button\" mat-flat-button class=\"mat-warn\" (click)=\"close()\">\n <mat-icon>cancel</mat-icon>\n close\n </button>\n @if (!noSave()) {\n <button\n type=\"submit\"\n [disabled]=\"form()?.invalid\"\n mat-flat-button\n class=\"mat-primary\"\n >\n <mat-icon>check_circle</mat-icon>\n save\n </button>\n }\n</div>\n}\n","import {\r\n Component,\r\n OnInit,\r\n ViewChild,\r\n ElementRef,\r\n input,\r\n effect,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { SafeHtmlPipe } from '@myrmidon/ngx-tools';\r\n\r\nimport { TokenLocation, TextLayerService } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Decorated token-based text visualizer. This is used when editing\r\n * token-based text layers.\r\n */\r\n@Component({\r\n selector: 'cadmus-decorated-token-text',\r\n templateUrl: './decorated-token-text.component.html',\r\n styleUrls: ['./decorated-token-text.component.css'],\r\n imports: [SafeHtmlPipe],\r\n})\r\nexport class DecoratedTokenTextComponent implements OnInit {\r\n @ViewChild('textElem') _textElement?: ElementRef;\r\n\r\n /**\r\n * The base text.\r\n */\r\n public readonly baseText = input<string>('');\r\n\r\n /**\r\n * The token-based locations of all the fragments in the layer.\r\n */\r\n public readonly locations = input<TokenLocation[]>([]);\r\n\r\n /**\r\n * A selected token-based location.\r\n */\r\n public readonly selectedLocation = input<TokenLocation>();\r\n\r\n public readonly text = signal<string | undefined>(undefined); // rendered HTML text\r\n\r\n constructor(private _textLayerService: TextLayerService) {\r\n effect(() => {\r\n this.decorate(this.baseText(), this.locations(), this.selectedLocation());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.decorate(this.baseText(), this.locations(), this.selectedLocation());\r\n }\r\n\r\n private decorate(\r\n text: string,\r\n locations: TokenLocation[],\r\n selectedLocation?: TokenLocation\r\n ): void {\r\n this.text.set(\r\n this._textLayerService.render(text, locations, selectedLocation)\r\n );\r\n }\r\n}\r\n","<div [innerHtml]=\"text() | safeHtml : 'html'\" id=\"text\" #textElem></div>\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cadmus-error-list',\r\n templateUrl: './error-list.component.html',\r\n styleUrls: ['./error-list.component.css'],\r\n})\r\nexport class ErrorListComponent {\r\n public readonly errors = input<string[]>();\r\n}\r\n","@if (errors()?.length) {\n <ul>\n @for (error of errors(); track error) {\n <li class=\"error\">{{error}}</li>\n }\n </ul>\n}\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Colors helper service.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ColorService {\r\n /**\r\n * Get the R,G,B components of the color expressed by the specified\r\n * RGB string (3 or 6 digits format).\r\n *\r\n * @param rgb The RGB color string (3 or 6 digits).\r\n * @returns An array where [0]=R, [1]=G, [2]=B, or null if invalid\r\n * input string.\r\n */\r\n public getRgb(rgb: string): number[] | null {\r\n if (!rgb) {\r\n return null;\r\n }\r\n\r\n // RGB\r\n let m = rgb.match(/^#?([0-9a-f]{3})$/i);\r\n if (m && m[1]) {\r\n // in 3-characters format, each value is multiplied by 0x11 to give an\r\n // even scale from 0x00 to 0xff\r\n return [\r\n parseInt(m[1].charAt(0), 16) * 0x11,\r\n parseInt(m[1].charAt(1), 16) * 0x11,\r\n parseInt(m[1].charAt(2), 16) * 0x11,\r\n ];\r\n }\r\n // RRGGBB\r\n m = rgb.match(/^#?([0-9a-f]{6})$/i);\r\n if (m && m[1]) {\r\n return [\r\n parseInt(m[1].substring(0, 2), 16),\r\n parseInt(m[1].substring(2, 4), 16),\r\n parseInt(m[1].substring(4, 6), 16),\r\n ];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get black or white according to which of them has the maximum contrast\r\n * against the specified color.\r\n *\r\n * @param rgb The RGB color string.\r\n * @returns Black or white. If rgb is invalid, always black.\r\n */\r\n public getContrastColor(rgb: string): string {\r\n // https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color\r\n const values = this.getRgb(rgb);\r\n if (!values) {\r\n return 'black';\r\n }\r\n return values[0] * 0.299 + values[1] * 0.587 + values[2] * 0.114 > 186\r\n ? 'black'\r\n : 'white';\r\n }\r\n\r\n /**\r\n * Convert HSL to RGB.\r\n *\r\n * @param h Hue\r\n * @param s Saturation\r\n * @param l Lightness\r\n * @returns Object with r, g, b values.\r\n */\r\n public hslToRgb(\r\n h: number,\r\n s: number,\r\n l: number\r\n ): { r: number; g: number; b: number } {\r\n // https://css-tricks.com/converting-color-spaces-in-javascript/\r\n // must be fractions of 1\r\n s /= 100;\r\n l /= 100;\r\n\r\n let c = (1 - Math.abs(2 * l - 1)) * s,\r\n x = c * (1 - Math.abs(((h / 60) % 2) - 1)),\r\n m = l - c / 2,\r\n r = 0,\r\n g = 0,\r\n b = 0;\r\n if (0 <= h && h < 60) {\r\n r = c;\r\n g = x;\r\n b = 0;\r\n } else if (60 <= h && h < 120) {\r\n r = x;\r\n g = c;\r\n b = 0;\r\n } else if (120 <= h && h < 180) {\r\n r = 0;\r\n g = c;\r\n b = x;\r\n } else if (180 <= h && h < 240) {\r\n r = 0;\r\n g = x;\r\n b = c;\r\n } else if (240 <= h && h < 300) {\r\n r = x;\r\n g = 0;\r\n b = c;\r\n } else if (300 <= h && h < 360) {\r\n r = c;\r\n g = 0;\r\n b = x;\r\n }\r\n r = Math.round((r + m) * 255);\r\n g = Math.round((g + m) * 255);\r\n b = Math.round((b + m) * 255);\r\n\r\n return { r: r, g: g, b: b };\r\n }\r\n\r\n public rgbToString(r: number, g: number, b: number): string {\r\n let rd = r.toString(16);\r\n if (rd.length === 1) {\r\n rd = '0' + rd;\r\n }\r\n let gd = g.toString(16);\r\n if (gd.length === 1) {\r\n gd = '0' + gd;\r\n }\r\n let bd = b.toString(16);\r\n if (bd.length === 1) {\r\n bd = '0' + bd;\r\n }\r\n return rd + gd + bd;\r\n }\r\n\r\n /**\r\n * Get the next color from a palette generated to include\r\n * the specified count of colors.\r\n *\r\n * @param index The index of the next color in the palette.\r\n * @param count The total count of colors in the palette.\r\n * @param blueBoost True to adjust colors for the eye's lack of sensitivity to blue.\r\n * @returns The RRGGBB values string.\r\n */\r\n public nextPaletteColor(\r\n index: number,\r\n count: number,\r\n blueBoost = true\r\n ): string {\r\n // https://stackoverflow.com/questions/43193341/how-to-generate-random-pastel-or-brighter-color-in-javascript\r\n const h = Math.floor((index / count) * 341); // between 0 and 340\r\n let s = 100;\r\n let l = 50;\r\n\r\n if (blueBoost && h > 215 && h < 265) {\r\n const gain = 20;\r\n let blueness = 1 - Math.abs(h - 240) / 25;\r\n let change = Math.floor(gain * blueness);\r\n l += change;\r\n s -= change;\r\n }\r\n const rgb = this.hslToRgb(h, s, l);\r\n return this.rgbToString(rgb.r, rgb.g, rgb.b);\r\n }\r\n}\r\n","import { Component, effect, input, Input, signal } from '@angular/core';\r\nimport { FacetDefinition } from '@myrmidon/cadmus-core';\r\n\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { ColorService } from '../../services/color.service';\r\n\r\nexport interface FacetBadgeData {\r\n definitions: FacetDefinition[];\r\n facetId?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-facet-badge',\r\n templateUrl: './facet-badge.component.html',\r\n styleUrls: ['./facet-badge.component.css'],\r\n imports: [MatTooltip],\r\n})\r\nexport class FacetBadgeComponent {\r\n private _facetColors: { [key: string]: string };\r\n private _facetTips: { [key: string]: string };\r\n\r\n public readonly color = signal<string>('transparent');\r\n public readonly contrastColor = signal<string>('black');\r\n public readonly tip = signal<string | undefined>(undefined);\r\n\r\n /**\r\n * The facet data.\r\n */\r\n public readonly data = input<FacetBadgeData>({\r\n definitions: [],\r\n });\r\n\r\n constructor(private _colorService: ColorService) {\r\n this._facetColors = {};\r\n this._facetTips = {};\r\n\r\n effect(() => {\r\n this.updateBadge(this.data());\r\n });\r\n }\r\n\r\n private getFacetColor(facetId: string): string {\r\n if (this._facetColors[facetId]) {\r\n return this._facetColors[facetId];\r\n }\r\n if (!this.data().definitions?.length) {\r\n return 'transparent';\r\n }\r\n\r\n const facet = this.data().definitions.find((f) => {\r\n return f.id === facetId;\r\n });\r\n if (facet?.colorKey) {\r\n this._facetColors[facetId] = '#' + facet.colorKey;\r\n } else {\r\n this._facetColors[facetId] = 'transparent';\r\n }\r\n return this._facetColors[facetId];\r\n }\r\n\r\n private getFacetTip(facetId: string): string | null {\r\n if (this._facetTips[facetId]) {\r\n return this._facetTips[facetId];\r\n }\r\n\r\n if (!this.data().definitions?.length) {\r\n return null;\r\n }\r\n\r\n const facet = this.data().definitions.find((f) => {\r\n return f.id === facetId;\r\n });\r\n if (!facet) {\r\n this._facetTips[facetId] = facetId;\r\n } else {\r\n const sb: string[] = [];\r\n for (let i = 0; i < facet.partDefinitions.length; i++) {\r\n if (i > 0) {\r\n sb.push(', ');\r\n }\r\n sb.push(facet.partDefinitions[i].name);\r\n if (facet.partDefinitions[i].isRequired) {\r\n sb.push('*');\r\n }\r\n }\r\n this._facetTips[facetId] = sb.join('');\r\n }\r\n return this._facetTips[facetId];\r\n }\r\n\r\n private updateBadge(data?: FacetBadgeData) {\r\n this._facetColors = {};\r\n this._facetTips = {};\r\n this.color.set(this.getFacetColor(data?.facetId || ''));\r\n this.contrastColor.set(this._colorService.getContrastColor(this.color()));\r\n this.tip.set(this.getFacetTip(data?.facetId || '') ?? undefined);\r\n }\r\n}\r\n","<span\r\n class=\"model-type\"\r\n [style.background-color]=\"color()\"\r\n [style.color]=\"contrastColor()\"\r\n matTooltip=\"{{ tip() }}\"\r\n >{{ data().facetId }}\r\n</span>\r\n","import { Component, effect, input, Input, signal } from '@angular/core';\r\n\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { FlagDefinition } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Data for FlagsBadgeComponent, including flags and their definitions.\r\n */\r\nexport interface FlagsBadgeData {\r\n definitions: FlagDefinition[];\r\n flags: number;\r\n}\r\n\r\n/**\r\n * Badge with item's flags. Each flag is represented by a circle filled\r\n * with the flag's color key.\r\n */\r\n@Component({\r\n selector: 'cadmus-flags-badge',\r\n templateUrl: './flags-badge.component.html',\r\n styleUrls: ['./flags-badge.component.css'],\r\n imports: [MatTooltip],\r\n})\r\nexport class FlagsBadgeComponent {\r\n public readonly data = input<FlagsBadgeData>();\r\n\r\n public readonly badgeFlags = signal<FlagDefinition[]>([]);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.updateBadge(this.data());\r\n });\r\n }\r\n\r\n private updateBadge(data?: FlagsBadgeData) {\r\n if (!data) {\r\n return;\r\n }\r\n this.badgeFlags.set(\r\n data.definitions.filter((def) => {\r\n // tslint:disable-next-line: no-bitwise\r\n return def.id & data!.flags;\r\n })\r\n );\r\n }\r\n}\r\n","<div>\r\n @for (def of badgeFlags(); track def.id) {\r\n <span\r\n class=\"badge-flag\"\r\n [style.color]=\"'#' + def.colorKey\"\r\n [matTooltip]=\"def.label\"\r\n >\r\n @if (def.isAdmin) { ◆ } @else { ⬤ }\r\n </span>\r\n }\r\n</div>\r\n","import { Component, output, input, effect } from '@angular/core';\r\nimport {\r\n FormGroup,\r\n FormArray,\r\n FormBuilder,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FormControl,\r\n} from '@angular/forms';\r\n\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\n\r\nimport { LayerHint } from '@myrmidon/cadmus-core';\r\n\r\n@Component({\r\n selector: 'cadmus-layer-hints',\r\n templateUrl: './layer-hints.component.html',\r\n styleUrls: ['./layer-hints.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatCheckbox,\r\n MatButton,\r\n ],\r\n})\r\nexport class LayerHintsComponent {\r\n public readonly hints = input<LayerHint[]>([]);\r\n\r\n public readonly targetLocation = input<string>();\r\n public readonly disabled = input<boolean>();\r\n public readonly readonly = input<boolean>();\r\n\r\n public readonly requestEdit = output<LayerHint>();\r\n public readonly requestDelete = output<LayerHint>();\r\n public readonly requestMove = output<LayerHint>();\r\n public readonly requestPatch = output<string[]>();\r\n\r\n public form: FormGroup;\r\n public checks: FormArray<FormControl<boolean>>;\r\n\r\n constructor(\r\n private _formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n this.checks = _formBuilder.array<FormControl<boolean>>([]);\r\n this.form = _formBuilder.group({\r\n checks: this.checks,\r\n });\r\n\r\n effect(() => {\r\n this.updateChecks(this.hints());\r\n });\r\n }\r\n\r\n private updateChecks(hints: LayerHint[]) {\r\n this.checks.clear();\r\n for (let i = 0; i < hints.length; i++) {\r\n this.checks.push(this._formBuilder.control(false, { nonNullable: true }));\r\n }\r\n }\r\n\r\n public emitRequestEdit(hint: LayerHint) {\r\n this.requestEdit.emit(hint);\r\n }\r\n\r\n public emitRequestDelete(hint: LayerHint) {\r\n this._dialogService\r\n .confirm('Confirm Deletion', `Delete fragment at \"${hint.location}\"?`)\r\n .subscribe((ok: boolean) => {\r\n if (ok) {\r\n this.requestDelete.emit(hint);\r\n }\r\n });\r\n }\r\n\r\n public emitRequestMove(hint: LayerHint) {\r\n if (!this.targetLocation) {\r\n return;\r\n }\r\n this._dialogService\r\n .confirm(\r\n 'Confirm Move',\r\n `Move fragment at ${hint.location} to ${this.targetLocation}?`\r\n )\r\n .subscribe((ok: boolean) => {\r\n if (ok) {\r\n this.requestMove.emit(hint);\r\n }\r\n });\r\n }\r\n\r\n public emitRequestPatch() {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this._dialogService\r\n .confirm('Confirm Patch', `Patch the selected fragments?`)\r\n .subscribe((ok: boolean) => {\r\n if (ok) {\r\n const patches: string[] = [];\r\n for (let i = 0; i < this.checks.length; i++) {\r\n if (this.checks.at(i).value) {\r\n patches.push(this.hints()[i].patchOperation!);\r\n }\r\n }\r\n this.requestPatch.emit(patches);\r\n }\r\n });\r\n }\r\n}\r\n","@if (hints().length) {\r\n<form [formGroup]=\"form\" (submit)=\"emitRequestPatch()\">\r\n <table class=\"patches\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>location</th>\r\n <th>description</th>\r\n <th>patch</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (hint of hints(); track hint; let i = $index) {\r\n <tr>\r\n @if (!readonly()) {\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this fragment\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this fragment to {{ targetLocation() }}\"\r\n [disabled]=\"\r\n disabled() ||\r\n !targetLocation() ||\r\n targetLocation() === hint.location\r\n \"\r\n (click)=\"emitRequestMove(hint)\"\r\n >\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this fragment\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"emitRequestDelete(hint)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n }\r\n <td>{{ hint.location }}</td>\r\n <td>{{ hint.description }}</td>\r\n <td>\r\n @if (hint.patchOperation) {\r\n <mat-checkbox\r\n matTooltip=\"Apply this patch\"\r\n [formControl]=\"checks.at(i)\"\r\n >\r\n {{ hint.patchOperation }}\r\n </mat-checkbox>\r\n }\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n @if (targetLocation()) {\r\n <div>move target: {{ targetLocation() }}</div>\r\n }\r\n <button\r\n type=\"submit\"\r\n mat-flat-button\r\n [disabled]=\"readonly() || disabled() || form.invalid\"\r\n >\r\n apply patches\r\n </button>\r\n</form>\r\n}\r\n","import {\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n OnInit,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport {\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Observable, of } from 'rxjs';\r\nimport {\r\n debounceTime,\r\n distinctUntilChanged,\r\n map,\r\n switchMap,\r\n take,\r\n} from 'rxjs/operators';\r\n\r\nimport {\r\n MatAutocomplete,\r\n MatAutocompleteTrigger,\r\n} from '@angular/material/autocomplete';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatFormField } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { DataPage, ErrorWrapper } from '@myrmidon/ngx-tools';\r\n\r\nimport { DataPinInfo, IndexLookupDefinitions } from '@myrmidon/cadmus-core';\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Generic data pin lookup component. This allows users typing a part\r\n * of a pin's value, and get the full pin. For instance, if you have\r\n * a lookup set of colors and type \"gr\", you might get the pins\r\n * corresponding to \"green\" (e.g. id=color, value=green), \"gray\", etc.\r\n * Usage: add a FormControl to hold a DataPinInfo value; in the HTML\r\n * template set the component's lookupKey, label, initialValue, and\r\n * entryChange handler. The initialValue, if any, should be the initial\r\n * DataPinInfo value.\r\n * If you are using this component as a pure lookup device, don't set\r\n * the initialValue and set resetOnPick=true.\r\n */\r\n@Component({\r\n selector: 'cadmus-lookup-pin',\r\n templateUrl: './lookup-pin.component.html',\r\n styleUrls: ['./lookup-pin.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatAutocomplete,\r\n MatOption,\r\n MatFormField,\r\n MatInput,\r\n MatAutocompleteTrigger,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n AsyncPipe,\r\n ],\r\n})\r\nexport class LookupPinComponent implements OnInit {\r\n /**\r\n * The entry value initially set when the component loads.\r\n */\r\n public readonly initialValue = input<string>();\r\n\r\n /**\r\n * The label to be displayed for this lookup.\r\n */\r\n public readonly label = input<string>('');\r\n\r\n /**\r\n * The maximum count of lookup entries to retrieve.\r\n * Default is 10.\r\n */\r\n public readonly limit = input<number>(10);\r\n\r\n /**\r\n * True to reset the lookup value after it is picked.\r\n * This is typically used when you use this component\r\n * as a pure lookup device, storing the picked value\r\n * elsewhere when handling its entryChange event.\r\n */\r\n public readonly resetOnPick = input<boolean>();\r\n\r\n /**\r\n * Fired whenever an entry is picked. Usually you should\r\n * cast the received argument to a more specific type.\r\n */\r\n public readonly entryChange = output<DataPinInfo | null>();\r\n\r\n public form: UntypedFormGroup;\r\n public lookup: UntypedFormControl;\r\n public entries$: Observable<DataPinInfo[]> | undefined;\r\n\r\n public readonly entry = signal<DataPinInfo | undefined>(undefined);\r\n\r\n constructor(\r\n formBuilder: UntypedFormBuilder,\r\n private _itemService: ItemService,\r\n @Inject('indexLookupDefinitions')\r\n private _lookupDefs: IndexLookupDefinitions\r\n ) {\r\n // form\r\n this.lookup = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n lookup: this.lookup,\r\n });\r\n\r\n effect(() => {\r\n console.log('lookup pin initial value', this.initialValue());\r\n if (this.lookup) {\r\n this.resetToInitial();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * The lookup key to be used for this component.\r\n * This should be a key from the injectable indexLookupDefinitions.\r\n */\r\n public readonly lookupKey = input<string>();\r\n\r\n public ngOnInit(): void {\r\n this.entries$ = this.lookup.valueChanges.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n switchMap((value: DataPinInfo | string) => {\r\n // if it's a string it's a filter; else it's the entry got\r\n if (typeof value === 'string') {\r\n return this.lookupEntries(value, this.limit());\r\n } else {\r\n return of([value]);\r\n }\r\n })\r\n );\r\n // setup initial value if its name was specified\r\n if (this.initialValue()) {\r\n this.resetToInitial();\r\n }\r\n }\r\n\r\n private lookupEntries(\r\n filter: string,\r\n limit: number\r\n ): Observable<DataPinInfo[]> {\r\n // get the lookup definition\r\n if (!this.lookupKey() || !filter) {\r\n return of([]);\r\n }\r\n const ld = this._lookupDefs[this.lookupKey()!];\r\n if (!ld) {\r\n return of([]);\r\n }\r\n\r\n // build query\r\n const query = ld.roleId\r\n ? `[partTypeId=${ld.typeId}] AND [roleId=${ld.roleId}] AND [name=${ld.name}] AND [value^=${filter}]`\r\n : `[partTypeId=${ld.typeId}] AND [name=${ld.name}] AND [value^=${filter}]`;\r\n\r\n // search\r\n return this._itemService.searchPins(query, 1, limit).pipe(\r\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\r\n if (w.error) {\r\n return [];\r\n } else {\r\n return w.value?.items || [];\r\n }\r\n })\r\n );\r\n }\r\n\r\n private resetToInitial(): void {\r\n this.lookupEntries(this.initialValue() || '', 1)\r\n .pipe(take(1))\r\n .subscribe((entries) => {\r\n this.lookup.setValue(entries.length ? entries[0] : undefined);\r\n });\r\n }\r\n\r\n public clear(): void {\r\n this.entry.set(undefined);\r\n this.lookup.setValue(null);\r\n this.entryChange.emit(null);\r\n }\r\n\r\n public entryToName(entry: DataPinInfo): string {\r\n return entry?.value;\r\n }\r\n\r\n public pickEntry(entry: DataPinInfo): void {\r\n this.entry.set(entry);\r\n this.entryChange.emit(entry);\r\n if (this.resetOnPick()) {\r\n this.clear();\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <mat-autocomplete #lookupAuto=\"matAutocomplete\" [displayWith]=\"entryToName\">\r\n @for (entry of entries$ | async; track entry) {\r\n <mat-option [value]=\"entry\" (onSelectionChange)=\"pickEntry(entry)\">\r\n {{ entry?.value }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"label()\"\r\n [formControl]=\"lookup\"\r\n [matAutocomplete]=\"lookupAuto\"\r\n />\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"clear()\"\r\n [disabled]=\"!entry()\"\r\n matTooltip=\"Clear\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n</form>\r\n","import { Component, input, computed } from '@angular/core';\r\n\r\nimport {\r\n Thesaurus,\r\n FacetDefinition,\r\n PartTypeIds,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\nimport { FacetService } from '@myrmidon/cadmus-api';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { ColorToContrastPipe } from '@myrmidon/ngx-tools';\r\n\r\nexport enum PartBadgeType {\r\n partAndRole = 0,\r\n partOnly = 1,\r\n roleOnly = 2,\r\n}\r\n\r\n/**\r\n * Function used to get the part's human-friendly name from its ID and role ID.\r\n * This assumes that thesaurus entries with role ID specified have form\r\n * partId:roleId.\r\n * @param typeId The part type ID.\r\n * @param roleId The optional role ID.\r\n * @param typeThesaurus The types thesaurus.\r\n * @param noFallback If true, and no thesaurus is provided, return undefined\r\n * rather than the type and role IDs.\r\n * @returns The name.\r\n */\r\nexport function getPartIdName(\r\n typeId: string,\r\n roleId?: string | null,\r\n typeThesaurus?: Thesaurus,\r\n noFallback = false\r\n): string | undefined {\r\n if (!typeThesaurus) {\r\n if (noFallback) {\r\n return undefined;\r\n }\r\n return roleId ? `${typeId} ${roleId}` : typeId;\r\n }\r\n let entry: ThesaurusEntry | undefined;\r\n\r\n // first find partId:roleId if any\r\n if (roleId) {\r\n const suffixedId = `${typeId}:${roleId}`;\r\n entry = typeThesaurus.entries?.find((e) => e.id === suffixedId);\r\n if (entry) {\r\n return entry.value;\r\n }\r\n }\r\n // else find partId alone\r\n entry = typeThesaurus.entries?.find((e) => e.id === typeId);\r\n\r\n return entry ? entry.value : typeId;\r\n}\r\n\r\n/**\r\n * Part badge component. This component displays a badge with the\r\n * part's type name and role name, if any, and a background color.\r\n */\r\n@Component({\r\n selector: 'cadmus-part-badge',\r\n imports: [MatTooltip, ColorToContrastPipe],\r\n templateUrl: './part-badge.component.html',\r\n styleUrls: ['./part-badge.component.css'],\r\n})\r\nexport class PartBadgeComponent {\r\n /**\r\n * The badge type: 0=part and role, 1=part only, 2=role only.\r\n */\r\n public readonly badgeType = input<PartBadgeType>(PartBadgeType.partAndRole);\r\n\r\n /**\r\n * The types thesaurus.\r\n */\r\n public readonly typeThesaurus = input<Thesaurus>();\r\n\r\n /**\r\n * The part's facet definition.\r\n */\r\n public readonly facetDefinition = input<FacetDefinition>();\r\n\r\n /**\r\n * The part type IDs.\r\n */\r\n public readonly partTypeIds = input<PartTypeIds>();\r\n\r\n /**\r\n * The part type name.\r\n */\r\n public readonly typeName = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const typeThesaurus = this.typeThesaurus();\r\n\r\n if (!partTypeIds) {\r\n return undefined;\r\n }\r\n\r\n return getPartIdName(partTypeIds.typeId, partTypeIds.roleId, typeThesaurus);\r\n });\r\n\r\n /**\r\n * The part role name.\r\n */\r\n public readonly roleName = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const typeThesaurus = this.typeThesaurus();\r\n\r\n if (!partTypeIds) {\r\n return undefined;\r\n }\r\n\r\n return this.getRoleIdName(partTypeIds.roleId, typeThesaurus);\r\n });\r\n\r\n /**\r\n * The part badge color.\r\n */\r\n public readonly color = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const facetDefinition = this.facetDefinition();\r\n\r\n if (!partTypeIds) {\r\n return 'transparent';\r\n }\r\n\r\n return this.getPartColor(\r\n partTypeIds.typeId,\r\n partTypeIds.roleId,\r\n facetDefinition\r\n );\r\n });\r\n\r\n /**\r\n * The part definition matching the part type ID and role ID.\r\n */\r\n public readonly partDefinition = computed(() => {\r\n const partTypeIds = this.partTypeIds();\r\n const facetDefinition = this.facetDefinition();\r\n\r\n if (!partTypeIds || !facetDefinition?.partDefinitions) {\r\n return undefined;\r\n }\r\n\r\n // First try to find exact match with typeId:roleId\r\n if (partTypeIds.roleId) {\r\n const exactMatch = facetDefinition.partDefinitions.find(\r\n (pd) => pd.typeId === `${partTypeIds.typeId}:${partTypeIds.roleId}`\r\n );\r\n if (exactMatch) {\r\n return exactMatch;\r\n }\r\n }\r\n\r\n // Fallback to match by typeId only\r\n return facetDefinition.partDefinitions.find(\r\n (pd) => pd.typeId === partTypeIds.typeId\r\n );\r\n });\r\n\r\n constructor(private _facetService: FacetService) {}\r\n\r\n private getPartColor(\r\n typeId: string,\r\n roleId?: string,\r\n facetDefinition?: FacetDefinition\r\n ): string {\r\n if (!facetDefinition) {\r\n return 'transparent';\r\n }\r\n return this._facetService.getPartColor(typeId, roleId, facetDefinition);\r\n }\r\n\r\n /**\r\n * Get the role's human-friendly name from its ID.\r\n * @param roleId The role ID.\r\n * @param typeThesaurus The types thesaurus.\r\n * @returns The name or undefined.\r\n */\r\n private getRoleIdName(\r\n roleId?: string,\r\n typeThesaurus?: Thesaurus\r\n ): string | undefined {\r\n if (!roleId || !typeThesaurus) {\r\n return roleId;\r\n }\r\n let entry: ThesaurusEntry | undefined;\r\n\r\n // first find full roleId with optional suffix\r\n entry = typeThesaurus.entries?.find((e) => e.id === roleId);\r\n if (entry) {\r\n return entry.value;\r\n }\r\n\r\n // else strip :suffix if any and find\r\n const i = roleId.lastIndexOf(':');\r\n if (i > -1) {\r\n roleId = roleId.substring(0, i);\r\n }\r\n entry = typeThesaurus.entries?.find((e) => e.id === roleId);\r\n return entry ? entry.value : roleId;\r\n }\r\n}\r\n","@if (badgeType() !== 2) {\r\n<span\r\n class=\"part-badge\"\r\n [style.background-color]=\"color()\"\r\n [style.color]=\"color() | colorToContrast\"\r\n [matTooltip]=\"partDefinition()?.description\"\r\n>\r\n {{ typeName() }}\r\n</span>\r\n} @if (badgeType() !== 1 && roleName()) {\r\n<span class=\"role-badge\">\r\n {{ roleName() }}\r\n</span>\r\n}\r\n","import {\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n input,\r\n effect,\r\n model,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormGroup,\r\n PristineChangeEvent,\r\n UntypedFormGroup,\r\n} from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { deepCopy } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService, User } from '@myrmidon/auth-jwt-login';\r\nimport { AppRepository } from '@myrmidon/cadmus-state';\r\n\r\nimport {\r\n EditedObject,\r\n Fragment,\r\n FragmentIdentity,\r\n Part,\r\n PartIdentity,\r\n} from '@myrmidon/cadmus-core';\r\nimport { getPartIdName } from './part-badge/part-badge.component';\r\n\r\n/**\r\n * Base class for part/fragment editors dumb components.\r\n * The model type is the templated argument T.\r\n *\r\n * When deriving from this editor, be sure to call super.ngOnInit()\r\n * from the derived editor's ngOnInit handler.\r\n */\r\n@Component({\r\n template: '',\r\n standalone: false,\r\n})\r\nexport abstract class ModelEditorComponentBase<T extends Part | Fragment>\r\n implements OnInit, OnDestroy\r\n{\r\n private readonly _mebSubs: Subscription[] = [];\r\n protected readonly _appRepository?: AppRepository;\r\n\r\n /**\r\n * The root form of the editor.\r\n */\r\n public form: FormGroup | UntypedFormGroup;\r\n\r\n /**\r\n * The current user.\r\n */\r\n public user?: User;\r\n\r\n /**\r\n * The user authorization level (0-4).\r\n */\r\n public userLevel: number;\r\n\r\n /**\r\n * An observable with the current dirty state of the editor.\r\n */\r\n public isDirty$: BehaviorSubject<boolean>;\r\n\r\n /**\r\n * The identity of the edited model.\r\n */\r\n public readonly identity = input<PartIdentity | FragmentIdentity>();\r\n\r\n /**\r\n * The data being edited.\r\n */\r\n public readonly data = model<EditedObject<T>>();\r\n\r\n /**\r\n * True to disable the editor.\r\n */\r\n public readonly disabled = input<boolean>();\r\n\r\n /**\r\n * Event emitted when the dirty state has changed.\r\n * This event just reflects changes in isDirty$, and is a facility\r\n * for propagating it to the parent's component.\r\n */\r\n public readonly dirtyChange = output<boolean>();\r\n\r\n /**\r\n * Emitted when the user requests to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * The human-friendly model name. This is computed from the model's\r\n * type ID and role ID, if any, using the types thesaurus set provided\r\n * by the app repository.\r\n */\r\n public readonly modelName = computed<string | undefined>(() => {\r\n const identity = this.identity();\r\n // layers have no identity but have a layerPart\r\n if (!identity) {\r\n const layerPart = this.data()?.layerPart;\r\n if (layerPart) {\r\n return getPartIdName(\r\n layerPart.typeId,\r\n layerPart.roleId,\r\n this._appRepository?.getTypeThesaurus(),\r\n true // no fallback so that the part template can use its default name\r\n );\r\n }\r\n return undefined;\r\n }\r\n if (!identity) {\r\n return undefined;\r\n }\r\n return getPartIdName(\r\n identity.typeId,\r\n identity.roleId,\r\n this._appRepository?.getTypeThesaurus(),\r\n true // no fallback so that the part template can use its default name\r\n );\r\n });\r\n\r\n /**\r\n * Create a new instance of the editor.\r\n *\r\n * @param authService The authentication service.\r\n * @param formBuilder Form builder.\r\n */\r\n constructor(\r\n protected authService: AuthJwtService,\r\n protected formBuilder: FormBuilder\r\n ) {\r\n this.form = formBuilder.group({});\r\n this.userLevel = 0;\r\n this.isDirty$ = new BehaviorSubject<boolean>(false);\r\n this._appRepository = inject(AppRepository);\r\n\r\n effect(() => {\r\n this.disableForm(this.disabled());\r\n });\r\n effect(() => {\r\n this.onDataSet(this.data());\r\n });\r\n effect(() => {\r\n this.onIdentitySet(this.identity());\r\n });\r\n }\r\n\r\n private disableForm(disabled?: boolean) {\r\n if (disabled) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\r\n }\r\n\r\n private onIdentitySet(identity?: PartIdentity | FragmentIdentity) {\r\n if (identity?.partId) {\r\n const part = this.data()?.value as Part;\r\n if (part && !part.id) {\r\n console.log('part identity set', identity.partId);\r\n part.id = identity.partId;\r\n }\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // form\r\n this.form = this.buildForm(this.formBuilder);\r\n\r\n // dirty check on form\r\n this._mebSubs.push(\r\n this.form.events.subscribe((e) => {\r\n if (e instanceof PristineChangeEvent) {\r\n console.log('dirty change: ', !e.pristine);\r\n this.isDirty$.next(!e.pristine);\r\n this.dirtyChange.emit(this.isDirty$.value);\r\n }\r\n })\r\n );\r\n\r\n // auth service\r\n this.userLevel = this.getCurrentUserLevel();\r\n this._mebSubs.push(\r\n this.authService.currentUser$.subscribe((user: User | null) => {\r\n this.updateUserProperties(user);\r\n })\r\n );\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._mebSubs.forEach((s) => s.unsubscribe());\r\n }\r\n\r\n /**\r\n * Implement in the derived class to build the root form of this editor.\r\n * The form built will then be attached to the dirty check mechanism\r\n * provided by this base class.\r\n *\r\n * @param formBuilder The form builder.\r\n */\r\n protected abstract buildForm(\r\n formBuilder: FormBuilder\r\n ): FormGroup | UntypedFormGroup;\r\n\r\n /**\r\n * Get the authorization level of the current user if any.\r\n * @returns 4-1 for admin, editor, operator, visitor; else 0.\r\n */\r\n private getCurrentUserLevel(): number {\r\n const user = this.authService.currentUserValue;\r\n if (!user || !user.roles) {\r\n return 0;\r\n }\r\n if (user.roles.indexOf('admin') > -1) {\r\n return 4;\r\n }\r\n if (user.roles.indexOf('editor') > -1) {\r\n return 3;\r\n }\r\n if (user.roles.indexOf('operator') > -1) {\r\n return 2;\r\n }\r\n if (user.roles.indexOf('visitor') > -1) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n private updateUserProperties(user: User | null): void {\r\n if (!user) {\r\n this.user = undefined;\r\n this.userLevel = 0;\r\n } else {\r\n this.user = user;\r\n this.userLevel = this.getCurrentUserLevel();\r\n }\r\n }\r\n\r\n /**\r\n * Update the data value property and emit the corresponding\r\n * modelChange event.\r\n *\r\n * @param value The value.\r\n */\r\n protected updateValue(value: T): void {\r\n this.data.set({ ...(this.data() || { thesauri: {} }), value: value });\r\n }\r\n\r\n /**\r\n * Invoked whenever the model property is set (=data comes from input model\r\n * property), unless setting it via updateModel. Implement to update the form\r\n * controls to reflect the new model data.\r\n *\r\n * @param data The data set, or undefined.\r\n */\r\n protected abstract onDataSet(data?: EditedObject<T>): void;\r\n\r\n /**\r\n * Get a new object from the edited part if any, else as a new part.\r\n *\r\n * @param typeId The part's type ID. This is a constant received\r\n * from the implementor.\r\n * @returns Part object.\r\n */\r\n protected getEditedPart(typeId: string): Part {\r\n const part = deepCopy(this.data()?.value) as Part | null;\r\n return (\r\n part || {\r\n itemId: this.identity()!.itemId || '',\r\n id: '',\r\n typeId: typeId,\r\n roleId: this.identity()!.roleId || undefined,\r\n timeCreated: new Date(),\r\n creatorId: '',\r\n timeModified: new Date(),\r\n userId: '',\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get a new object from the edited fragment if any, else a new fragment.\r\n *\r\n * @returns Fragment object.\r\n */\r\n protected getEditedFragment(): Fragment {\r\n const fr = deepCopy(this.data()?.value) as Fragment | null;\r\n return (\r\n fr || {\r\n location: (this.identity() as FragmentIdentity).loc,\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Implement in derived classes to get the data from form's controls.\r\n * This is used when saving.\r\n */\r\n protected abstract getValue(): T;\r\n\r\n /**\r\n * True if this editor has the thesaurus having the specified key in the\r\n * loaded thesauri set.\r\n */\r\n protected hasThesaurus(key: string): boolean {\r\n return this.data()?.thesauri && this.data()!.thesauri[key] ? true : false;\r\n }\r\n\r\n /**\r\n * Emit a request to close the editor.\r\n */\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n /**\r\n * Save the edited data if valid.\r\n */\r\n public save(): void {\r\n if (this.form.invalid) {\r\n console.warn('Save invoked with invalid form');\r\n return;\r\n }\r\n const value = this.getValue();\r\n this.updateValue(value);\r\n // the form is no more dirty\r\n this.form.markAsPristine();\r\n }\r\n}\r\n","import {\r\n AbstractControl,\r\n ValidatorFn,\r\n ValidationErrors,\r\n FormGroup,\r\n UntypedFormGroup,\r\n} from '@angular/forms';\r\n\r\n// https://www.tektutorialshub.com/angular/custom-validator-with-parameters-in-angular/\r\n\r\n/**\r\n * General-purpose custom validators.\r\n */\r\n// https://github.com/angular/angular/issues/18867#issuecomment-357484102\r\n// @dynamic\r\nexport class CustomValidators {\r\n /**\r\n * Validates a FormGroup or FormArray control checking if the count of their\r\n * controls with a true value is equal to or greater than the specified\r\n * number.\r\n *\r\n * @param min The minimum number of checked controls.\r\n */\r\n public static minChecked(min = 1): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n // https://trungk18.com/experience/angular-form-array-validate-at-least-one-checkbox-was-selected/\r\n let checked = 0;\r\n\r\n const group = (control as FormGroup) || (control as UntypedFormGroup);\r\n Object.keys(group.controls).forEach((key) => {\r\n const ctl = group.controls[key];\r\n if (ctl.value === true) {\r\n checked++;\r\n }\r\n });\r\n\r\n if (checked < min) {\r\n return {\r\n minChecked: true,\r\n };\r\n }\r\n return null;\r\n };\r\n }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\n\r\n/**\r\n * Simple JSON validator.\r\n */\r\nexport class JsonValidators {\r\n public static json(\r\n control: AbstractControl\r\n ): { [key: string]: boolean } | null {\r\n if (!control.value) {\r\n // we allow empty code\r\n return null;\r\n }\r\n try {\r\n JSON.parse(control.value);\r\n } catch (e) {\r\n return { json: true };\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { DataPage } from '@myrmidon/ngx-tools';\n\nimport { UserService } from '@myrmidon/cadmus-api';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\n\nexport interface UserWithRoles {\n user: {\n id: string;\n firstName: string;\n lastName: string;\n userName: string;\n email: string;\n };\n roles: string[];\n}\n\n/**\n * Service for users lookup.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class UserRefLookupService implements RefLookupService {\n constructor(private _userService: UserService) {}\n\n public lookup(\n filter: RefLookupFilter,\n options?: any\n ): Observable<UserWithRoles[]> {\n return this._userService\n .getUsers(\n {\n name: filter.text,\n },\n 1,\n filter.limit\n )\n .pipe(\n map((page: DataPage<UserWithRoles>) => {\n return page.items;\n })\n );\n }\n\n public getName(item: UserWithRoles): string {\n return item?.user?.userName;\n }\n}\n","// https://github.com/angular/angular/issues/10887\r\n\r\nimport { AbstractControl } from '@angular/forms';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n/**\r\n * Extract arguments of function\r\n */\r\nexport type ArgumentsType<F> = F extends (...args: infer A) => any ? A : never;\r\n\r\n/**\r\n * Creates an object like O. Optionally provide minimum set of properties P\r\n * which the objects must share to conform.\r\n */\r\ntype ObjectLike<O extends object, P extends keyof O = keyof O> = Pick<O, P>;\r\n\r\n/**\r\n * Extract a touched changed observable from an abstract control.\r\n * Use in component code like:\r\n * this.touchedChanges$ = extractTouchedChanges(this.form);\r\n *\r\n * @param control AbstractControl-like object with markAsTouched method.\r\n */\r\nexport const extractTouchedChanges = (\r\n control: ObjectLike<AbstractControl, 'markAsTouched' | 'markAsUntouched'>\r\n): Observable<boolean> => {\r\n const prevMarkAsTouched = control.markAsTouched;\r\n const prevMarkAsUntouched = control.markAsUntouched;\r\n\r\n const touchedChanges$ = new Subject<boolean>();\r\n\r\n function nextMarkAsTouched(\r\n ...args: ArgumentsType<AbstractControl['markAsTouched']>\r\n ): void {\r\n touchedChanges$.next(true);\r\n prevMarkAsTouched.bind(control)(...args);\r\n }\r\n\r\n function nextMarkAsUntouched(\r\n ...args: ArgumentsType<AbstractControl['markAsUntouched']>\r\n ): void {\r\n touchedChanges$.next(false);\r\n prevMarkAsUntouched.bind(control)(...args);\r\n }\r\n\r\n control.markAsTouched = nextMarkAsTouched;\r\n control.markAsUntouched = nextMarkAsUntouched;\r\n\r\n return touchedChanges$;\r\n};\r\n\r\n/**\r\n * Extract a pristine changed observable from an abstract control.\r\n * Use in component code like:\r\n * this.pristineChanges$ = extractPristineChanges(this.form);\r\n *\r\n * @param control AbstractControl-like object with markAsPristine and markAsDirty\r\n * methods.\r\n */\r\nexport const extractPristineChanges = (\r\n control: ObjectLike<AbstractControl, 'markAsPristine' | 'markAsDirty'>\r\n): Observable<boolean> => {\r\n const prevMarkAsPristine = control.markAsPristine;\r\n const prevMarkAsDirty = control.markAsDirty;\r\n\r\n const pristineChanges$ = new Subject<boolean>();\r\n\r\n function nextMarkAsPristine(\r\n ...args: ArgumentsType<AbstractControl['markAsPristine']>\r\n ): void {\r\n pristineChanges$.next(true);\r\n prevMarkAsPristine.bind(control)(...args);\r\n }\r\n\r\n function nextMarkAsDirty(\r\n ...args: ArgumentsType<AbstractControl['markAsDirty']>\r\n ): void {\r\n pristineChanges$.next(false);\r\n prevMarkAsDirty.bind(control)(...args);\r\n }\r\n\r\n control.markAsPristine = nextMarkAsPristine;\r\n control.markAsDirty = nextMarkAsDirty;\r\n\r\n return pristineChanges$;\r\n};\r\n","/*\r\n * Public API Surface of cadmus-ui\r\n */\r\n\r\nexport * from './lib/components/close-save-buttons/close-save-buttons.component';\r\nexport * from './lib/components/decorated-token-text/decorated-token-text.component';\r\nexport * from './lib/components/error-list/error-list.component';\r\nexport * from './lib/components/facet-badge/facet-badge.component';\r\nexport * from './lib/components/flags-badge/flags-badge.component';\r\nexport * from './lib/components/layer-hints/layer-hints.component';\r\nexport * from './lib/components/lookup-pin/lookup-pin.component';\r\nexport * from './lib/components/part-badge/part-badge.component';\r\n\r\nexport * from './lib/components/model-editor-component-base';\r\n\r\nexport * from './lib/services/color.service';\r\n\r\nexport * from './lib/validators/custom-validators';\r\nexport * from './lib/validators/json-validators';\r\n\r\nexport * from './lib/services/user-ref-lookup.service';\r\n\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ColorService","i1","i2","map"],"mappings":"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"}
|