@myrmidon/cadmus-part-codicology-shelfmarks 0.0.2

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.
Files changed (26) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/cadmus-part-codicology-shelfmarks.module.mjs +91 -0
  3. package/esm2020/lib/cod-shelfmark-editor/cod-shelfmark-editor.component.mjs +100 -0
  4. package/esm2020/lib/cod-shelfmarks-part/cod-shelfmarks-part.component.mjs +151 -0
  5. package/esm2020/lib/cod-shelfmarks-part-feature/cod-shelfmarks-part-feature.component.mjs +26 -0
  6. package/esm2020/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.query.mjs +16 -0
  7. package/esm2020/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.service.mjs +18 -0
  8. package/esm2020/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.store.mjs +27 -0
  9. package/esm2020/lib/cod-shelfmarks-part.mjs +87 -0
  10. package/esm2020/myrmidon-cadmus-part-codicology-shelfmarks.mjs +5 -0
  11. package/esm2020/public-api.mjs +9 -0
  12. package/fesm2015/myrmidon-cadmus-part-codicology-shelfmarks.mjs +492 -0
  13. package/fesm2015/myrmidon-cadmus-part-codicology-shelfmarks.mjs.map +1 -0
  14. package/fesm2020/myrmidon-cadmus-part-codicology-shelfmarks.mjs +490 -0
  15. package/fesm2020/myrmidon-cadmus-part-codicology-shelfmarks.mjs.map +1 -0
  16. package/lib/cadmus-part-codicology-shelfmarks.module.d.ts +21 -0
  17. package/lib/cod-shelfmark-editor/cod-shelfmark-editor.component.d.ts +28 -0
  18. package/lib/cod-shelfmarks-part/cod-shelfmarks-part.component.d.ts +36 -0
  19. package/lib/cod-shelfmarks-part-feature/cod-shelfmarks-part-feature.component.d.ts +13 -0
  20. package/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.query.d.ts +8 -0
  21. package/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.service.d.ts +9 -0
  22. package/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.store.d.ts +10 -0
  23. package/lib/cod-shelfmarks-part.d.ts +90 -0
  24. package/myrmidon-cadmus-part-codicology-shelfmarks.d.ts +5 -0
  25. package/package.json +43 -0
  26. package/public-api.d.ts +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myrmidon-cadmus-part-codicology-shelfmarks.mjs","sources":["../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmark-editor/cod-shelfmark-editor.component.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmark-editor/cod-shelfmark-editor.component.html","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part/cod-shelfmarks-part.component.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part/cod-shelfmarks-part.component.html","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.store.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.query.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part-feature/edit-cod-shelfmarks-part.service.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part-feature/cod-shelfmarks-part-feature.component.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cod-shelfmarks-part-feature/cod-shelfmarks-part-feature.component.html","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/lib/cadmus-part-codicology-shelfmarks.module.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/public-api.ts","../../../../projects/myrmidon/cadmus-part-codicology-shelfmarks/src/myrmidon-cadmus-part-codicology-shelfmarks.ts"],"sourcesContent":["import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * A manuscript's shelfmark.\r\n */\r\nexport interface CodShelfmark {\r\n tag?: string;\r\n city: string;\r\n library: string;\r\n fund?: string;\r\n location: string;\r\n}\r\n\r\n/**\r\n * The CodShelfmarks part model.\r\n */\r\nexport interface CodShelfmarksPart extends Part {\r\n shelfmarks: CodShelfmark[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the CodShelfmarksPart type.\r\n */\r\nexport const COD_SHELFMARKS_PART_TYPEID = 'it.vedph.codicology.shelfmarks';\r\n\r\n/**\r\n * JSON schema for the CodShelfmarks part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const COD_SHELFMARKS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/codicology/' +\r\n COD_SHELFMARKS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'CodShelfmarksPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'shelfmarks',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n shelfmarks: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['city', 'library', 'location'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n city: {\r\n type: 'string',\r\n },\r\n library: {\r\n type: 'string',\r\n },\r\n fund: {\r\n type: 'string',\r\n },\r\n location: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\nimport { CodShelfmark } from '../cod-shelfmarks-part';\n\n@Component({\n selector: 'cadmus-cod-shelfmark-editor',\n templateUrl: './cod-shelfmark-editor.component.html',\n styleUrls: ['./cod-shelfmark-editor.component.css'],\n})\nexport class CodShelfmarkEditorComponent implements OnInit {\n private _shelfmark: CodShelfmark | undefined;\n\n @Input()\n public get shelfmark(): CodShelfmark | undefined {\n return this._shelfmark;\n }\n public set shelfmark(value: CodShelfmark | undefined) {\n this._shelfmark = value;\n this.updateForm(value);\n }\n\n // cod-shelfmark-tags\n @Input()\n public tagEntries: ThesaurusEntry[] | undefined;\n // cod-shelfmark-libraries\n @Input()\n public libEntries: ThesaurusEntry[] | undefined;\n\n @Output()\n public shelfmarkChange: EventEmitter<CodShelfmark>;\n @Output()\n public editorClose: EventEmitter<any>;\n\n public tag: FormControl;\n public city: FormControl;\n public library: FormControl;\n public fund: FormControl;\n public location: FormControl;\n public form: FormGroup;\n\n constructor(formBuilder: FormBuilder) {\n this.shelfmarkChange = new EventEmitter<CodShelfmark>();\n this.editorClose = new EventEmitter<any>();\n // form\n this.tag = formBuilder.control(null, Validators.maxLength(50));\n this.city = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.library = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.fund = formBuilder.control(null, Validators.maxLength(50));\n this.location = formBuilder.control(null, Validators.maxLength(50));\n\n this.form = formBuilder.group({\n tag: this.tag,\n city: this.city,\n library: this.library,\n fund: this.fund,\n location: this.location,\n });\n }\n\n ngOnInit(): void {\n if (this._shelfmark) {\n this.updateForm(this._shelfmark);\n }\n }\n\n private updateForm(model: CodShelfmark | undefined): void {\n if (!model) {\n this.form.reset();\n return;\n }\n\n this.tag.setValue(model.tag);\n this.city.setValue(model.city);\n this.library.setValue(model.library);\n this.fund.setValue(model.fund);\n this.location.setValue(model.location);\n this.form.markAsPristine();\n }\n\n private getModel(): CodShelfmark | null {\n return {\n tag: this.tag.value?.trim(),\n city: this.city.value?.trim(),\n library: this.library.value?.trim(),\n fund: this.fund.value?.trim(),\n location: this.location.value?.trim(),\n };\n }\n\n public cancel(): void {\n this.editorClose.emit();\n }\n\n public save(): void {\n if (this.form.invalid) {\n return;\n }\n const model = this.getModel();\n if (!model) {\n return;\n }\n this.shelfmarkChange.emit(model);\n }\n}\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <!-- tag (bound) -->\n <mat-form-field *ngIf=\"tagEntries?.length\" style=\"width: 8em\">\n <mat-select [formControl]=\"tag\" placeholder=\"tag\">\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- tag (free) -->\n <mat-form-field *ngIf=\"!tagEntries?.length\">\n <input matInput [formControl]=\"tag\" placeholder=\"tag\" />\n <mat-error\n *ngIf=\"$any(tag).errors?.maxLength && (tag.dirty || tag.touched)\"\n >tag too long</mat-error\n >\n </mat-form-field>\n <!-- city -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"city\" placeholder=\"city\" />\n <mat-error\n *ngIf=\"$any(city).errors?.required && (city.dirty || city.touched)\"\n >city required</mat-error\n >\n <mat-error\n *ngIf=\"$any(city).errors?.maxLength && (city.dirty || city.touched)\"\n >city too long</mat-error\n >\n </mat-form-field>\n </div>\n <div>\n <!-- library (bound) -->\n <mat-form-field *ngIf=\"libEntries?.length\" style=\"width: 8em\">\n <mat-select [formControl]=\"library\" placeholder=\"library\">\n <mat-option *ngFor=\"let e of libEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"\n $any(library).errors?.required && (library.dirty || library.touched)\n \"\n >library required</mat-error\n >\n </mat-form-field>\n <!-- library (free) -->\n <mat-form-field *ngIf=\"!libEntries?.length\">\n <input matInput [formControl]=\"library\" placeholder=\"library\" />\n <mat-error\n *ngIf=\"\n $any(library).errors?.required && (library.dirty || library.touched)\n \"\n >library required</mat-error\n >\n <mat-error\n *ngIf=\"\n $any(library).errors?.maxLength && (library.dirty || library.touched)\n \"\n >library too long</mat-error\n >\n </mat-form-field>\n <!-- fund -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"fund\" placeholder=\"fund\" />\n <mat-error\n *ngIf=\"$any(fund).errors?.maxLength && (fund.dirty || fund.touched)\"\n >fund too long</mat-error\n >\n </mat-form-field>\n <!-- location -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"location\" placeholder=\"location\" />\n <mat-error\n *ngIf=\"\n $any(location).errors?.required &&\n (location.dirty || location.touched)\n \"\n >location required</mat-error\n >\n <mat-error\n *ngIf=\"\n $any(location).errors?.maxLength &&\n (location.dirty || location.touched)\n \"\n >location too long</mat-error\n >\n </mat-form-field>\n </div>\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n color=\"warn\"\n mat-icon-button\n matTooltip=\"Discard changes\"\n (click)=\"cancel()\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n color=\"primary\"\n mat-icon-button\n matTooltip=\"Accept changes\"\n [disabled]=\"form.invalid || form.pristine\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormBuilder } from '@angular/forms';\nimport { take } from 'rxjs/operators';\n\nimport { deepCopy, NgToolsValidators } from '@myrmidon/ng-tools';\nimport { DialogService } from '@myrmidon/ng-mat-tools';\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\nimport { ModelEditorComponentBase } from '@myrmidon/cadmus-ui';\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\n\nimport {\n CodShelfmark,\n CodShelfmarksPart,\n COD_SHELFMARKS_PART_TYPEID,\n} from '../cod-shelfmarks-part';\n\n/**\n * CodShelfmarksPart editor component.\n * Thesauri: cod-shelfmark-tags, cod-shelfmark-libraries (all optional).\n */\n@Component({\n selector: 'cadmus-cod-shelfmarks-part',\n templateUrl: './cod-shelfmarks-part.component.html',\n styleUrls: ['./cod-shelfmarks-part.component.css'],\n})\nexport class CodShelfmarksPartComponent\n extends ModelEditorComponentBase<CodShelfmarksPart>\n implements OnInit\n{\n private _editedIndex: number;\n\n public tabIndex: number;\n public editedShelfmark: CodShelfmark | undefined;\n\n // cod-shelfmark-tags\n public tagEntries: ThesaurusEntry[] | undefined;\n // cod-shelfmark-libraries\n public libEntries: ThesaurusEntry[] | undefined;\n\n public shelfmarks: FormControl;\n\n constructor(\n authService: AuthJwtService,\n formBuilder: FormBuilder,\n private _dialogService: DialogService\n ) {\n super(authService);\n this._editedIndex = -1;\n this.tabIndex = 0;\n // form\n this.shelfmarks = formBuilder.control(\n [],\n NgToolsValidators.strictMinLengthValidator(1)\n );\n this.form = formBuilder.group({\n entries: this.shelfmarks,\n });\n }\n\n public ngOnInit(): void {\n this.initEditor();\n }\n\n private updateForm(model: CodShelfmarksPart): void {\n if (!model) {\n this.form!.reset();\n return;\n }\n this.shelfmarks.setValue(model.shelfmarks || []);\n this.form!.markAsPristine();\n }\n\n protected onModelSet(model: CodShelfmarksPart): void {\n this.updateForm(deepCopy(model));\n }\n\n protected override onThesauriSet(): void {\n let key = 'cod-shelfmark-tags';\n if (this.thesauri && this.thesauri[key]) {\n this.tagEntries = this.thesauri[key].entries;\n } else {\n this.tagEntries = undefined;\n }\n key = 'cod-shelfmark-libraries';\n if (this.thesauri && this.thesauri[key]) {\n this.libEntries = this.thesauri[key].entries;\n } else {\n this.libEntries = undefined;\n }\n }\n\n protected getModelFromForm(): CodShelfmarksPart {\n let part = this.model;\n if (!part) {\n part = {\n itemId: this.itemId || '',\n id: '',\n typeId: COD_SHELFMARKS_PART_TYPEID,\n roleId: this.roleId,\n timeCreated: new Date(),\n creatorId: '',\n timeModified: new Date(),\n userId: '',\n shelfmarks: [],\n };\n }\n part.shelfmarks = this.shelfmarks.value || [];\n return part;\n }\n\n public addShelfmark(): void {\n const entry: CodShelfmark = {\n city: '',\n library: this.libEntries?.length ? this.libEntries[0].id : '',\n location: '',\n };\n this.shelfmarks.setValue([...this.shelfmarks.value, entry]);\n this.editShelfmark(this.shelfmarks.value.length - 1);\n }\n\n public editShelfmark(index: number): void {\n if (index < 0) {\n this._editedIndex = -1;\n this.tabIndex = 0;\n this.editedShelfmark = undefined;\n } else {\n this._editedIndex = index;\n this.editedShelfmark = this.shelfmarks.value[index];\n setTimeout(() => {\n this.tabIndex = 1;\n }, 300);\n }\n }\n\n public onShelfmarkSave(entry: CodShelfmark): void {\n this.shelfmarks.setValue(\n this.shelfmarks.value.map((e: CodShelfmark, i: number) =>\n i === this._editedIndex ? entry : e\n )\n );\n this.editShelfmark(-1);\n }\n\n public onShelfmarkClose(): void {\n this.editShelfmark(-1);\n }\n\n public deleteShelfmark(index: number): void {\n this._dialogService\n .confirm('Confirmation', 'Delete shelfmark?')\n .pipe(take(1))\n .subscribe((yes) => {\n if (yes) {\n const entries = [...this.shelfmarks.value];\n entries.splice(index, 1);\n this.shelfmarks.setValue(entries);\n }\n });\n }\n\n public moveShelfmarkUp(index: number): void {\n if (index < 1) {\n return;\n }\n const entry = this.shelfmarks.value[index];\n const entries = [...this.shelfmarks.value];\n entries.splice(index, 1);\n entries.splice(index - 1, 0, entry);\n this.shelfmarks.setValue(entries);\n }\n\n public moveShelfmarkDown(index: number): void {\n if (index + 1 >= this.shelfmarks.value.length) {\n return;\n }\n const entry = this.shelfmarks.value[index];\n const entries = [...this.shelfmarks.value];\n entries.splice(index, 1);\n entries.splice(index + 1, 0, entry);\n this.shelfmarks.setValue(entries);\n }\n}\n","<form [formGroup]=\"form!\" (submit)=\"save()\">\n <mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>Shelfmarks Part</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-tab-group [(selectedIndex)]=\"tabIndex\">\n <mat-tab label=\"shelfmarks\">\n <div>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"addShelfmark()\"\n >\n <mat-icon>add_circle</mat-icon> add shelfmark\n </button>\n </div>\n <table *ngIf=\"shelfmarks?.value?.length\">\n <thead>\n <tr>\n <th></th>\n <th>tag</th>\n <th>city</th>\n <th>library</th>\n <th>fund</th>\n <th>location</th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"\n let entry of shelfmarks?.value;\n let i = index;\n let first = first;\n let last = last\n \"\n >\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"Edit this shelfmark\"\n (click)=\"editShelfmark(i)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this shelfmark up\"\n [disabled]=\"first\"\n (click)=\"moveShelfmarkUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this shelfmark down\"\n [disabled]=\"last\"\n (click)=\"moveShelfmarkDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n matTooltip=\"Delete this shelfmark\"\n (click)=\"deleteShelfmark(i)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.tag }}</td>\n <td>{{ entry.city }}</td>\n <td>{{ entry.library }}</td>\n <td>{{ entry.fund }}</td>\n <td>{{ entry.location }}</td>\n </tr>\n </tbody>\n </table>\n </mat-tab>\n\n <mat-tab label=\"shelfmark\" *ngIf=\"editedShelfmark\">\n <cadmus-cod-shelfmark-editor\n [tagEntries]=\"tagEntries\"\n [libEntries]=\"libEntries\"\n [shelfmark]=\"editedShelfmark\"\n (shelfmarkChange)=\"onShelfmarkSave($event)\"\n (editorClose)=\"onShelfmarkClose()\"\n ></cadmus-cod-shelfmark-editor>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n ></cadmus-close-save-buttons>\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Injectable } from '@angular/core';\r\nimport { StoreConfig, Store } from '@datorama/akita';\r\n\r\nimport { EditPartState, EditPartStoreApi } from '@myrmidon/cadmus-state';\r\nimport { COD_SHELFMARKS_PART_TYPEID } from '../cod-shelfmarks-part';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@StoreConfig({ name: COD_SHELFMARKS_PART_TYPEID })\r\nexport class EditCodShelfmarksPartStore\r\n extends Store<EditPartState>\r\n implements EditPartStoreApi\r\n{\r\n constructor() {\r\n super({});\r\n }\r\n\r\n public setDirty(value: boolean): void {\r\n this.update({ dirty: value });\r\n }\r\n public setSaving(value: boolean): void {\r\n this.update({ saving: value });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EditPartQueryBase } from '@myrmidon/cadmus-state';\r\n\r\nimport { EditCodShelfmarksPartStore } from './edit-cod-shelfmarks-part.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EditCodShelfmarksPartQuery extends EditPartQueryBase {\r\n constructor(store: EditCodShelfmarksPartStore) {\r\n super(store);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport { EditPartServiceBase } from '@myrmidon/cadmus-state';\r\nimport { EditCodShelfmarksPartStore } from './edit-cod-shelfmarks-part.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EditCodShelfmarksPartService extends EditPartServiceBase {\r\n constructor(\r\n editPartStore: EditCodShelfmarksPartStore,\r\n itemService: ItemService,\r\n thesaurusService: ThesaurusService\r\n ) {\r\n super(itemService, thesaurusService);\r\n this.store = editPartStore;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport {\n EditItemQuery,\n EditItemService,\n EditPartFeatureBase,\n} from '@myrmidon/cadmus-state';\nimport { EditCodShelfmarksPartQuery } from './edit-cod-shelfmarks-part.query';\nimport { EditCodShelfmarksPartService } from './edit-cod-shelfmarks-part.service';\n\n@Component({\n selector: 'cadmus-cod-shelfmarks-part-feature',\n templateUrl: './cod-shelfmarks-part-feature.component.html',\n styleUrls: ['./cod-shelfmarks-part-feature.component.css'],\n})\nexport class CodShelfmarksPartFeatureComponent\n extends EditPartFeatureBase\n implements OnInit\n{\n constructor(\n router: Router,\n route: ActivatedRoute,\n snackbar: MatSnackBar,\n editPartQuery: EditCodShelfmarksPartQuery,\n editPartService: EditCodShelfmarksPartService,\n editItemQuery: EditItemQuery,\n editItemService: EditItemService\n ) {\n super(\n router,\n route,\n snackbar,\n editPartQuery,\n editPartService,\n editItemQuery,\n editItemService\n );\n }\n\n public ngOnInit(): void {\n this.initEditor(['cod-shelfmark-tags', 'cod-shelfmark-libraries']);\n }\n}\n","<cadmus-current-item-bar></cadmus-current-item-bar>\n<cadmus-cod-shelfmarks-part\n [itemId]=\"itemId\"\n [roleId]=\"roleId\"\n [model]=\"$any(part$ | async)\"\n (modelChange)=\"save($event)\"\n [thesauri]=\"(thesauri$ | async) || undefined\"\n (editorClose)=\"close()\"\n (dirtyChange)=\"onDirtyChange($event)\"\n></cadmus-cod-shelfmarks-part>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n// cadmus\nimport { CadmusStateModule } from '@myrmidon/cadmus-state';\nimport { CadmusUiModule } from '@myrmidon/cadmus-ui';\nimport { CadmusUiPgModule } from '@myrmidon/cadmus-ui-pg';\n// locals (UI editor and PG wrapper)\nimport { CodShelfmarksPartComponent } from './cod-shelfmarks-part/cod-shelfmarks-part.component';\nimport { CodShelfmarkEditorComponent } from './cod-shelfmark-editor/cod-shelfmark-editor.component';\nimport { CodShelfmarksPartFeatureComponent } from './cod-shelfmarks-part-feature/cod-shelfmarks-part-feature.component';\n\n@NgModule({\n declarations: [\n CodShelfmarksPartComponent,\n CodShelfmarkEditorComponent,\n CodShelfmarksPartFeatureComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatCardModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatTabsModule,\n MatTooltipModule,\n // Cadmus\n CadmusStateModule,\n CadmusUiModule,\n CadmusUiPgModule,\n ],\n exports: [\n CodShelfmarksPartComponent,\n CodShelfmarkEditorComponent,\n CodShelfmarksPartFeatureComponent,\n ],\n})\nexport class CadmusPartCodicologyShelfmarksModule {}\n","/*\n * Public API Surface of cadmus-part-codicology-shelfmarks\n */\n\nexport * from './lib/cod-shelfmarks-part';\nexport * from './lib/cod-shelfmarks-part/cod-shelfmarks-part.component';\nexport * from './lib/cod-shelfmark-editor/cod-shelfmark-editor.component';\nexport * from './lib/cod-shelfmarks-part-feature/cod-shelfmarks-part-feature.component';\nexport * from './lib/cadmus-part-codicology-shelfmarks.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,490 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Component, Input, Output, Injectable, NgModule } from '@angular/core';
3
+ import { take } from 'rxjs/operators';
4
+ import { NgToolsValidators, deepCopy } from '@myrmidon/ng-tools';
5
+ import * as i9$1 from '@myrmidon/cadmus-ui';
6
+ import { ModelEditorComponentBase, CadmusUiModule } from '@myrmidon/cadmus-ui';
7
+ import * as i1$1 from '@myrmidon/auth-jwt-login';
8
+ import * as i1 from '@angular/forms';
9
+ import { Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
10
+ import * as i3$1 from '@myrmidon/ng-mat-tools';
11
+ import * as i4$1 from '@angular/material/card';
12
+ import { MatCardModule } from '@angular/material/card';
13
+ import * as i6 from '@angular/material/icon';
14
+ import { MatIconModule } from '@angular/material/icon';
15
+ import * as i6$1 from '@angular/material/tabs';
16
+ import { MatTabsModule } from '@angular/material/tabs';
17
+ import * as i5 from '@angular/material/button';
18
+ import { MatButtonModule } from '@angular/material/button';
19
+ import * as i2 from '@angular/material/form-field';
20
+ import * as i3 from '@angular/material/select';
21
+ import { MatSelectModule } from '@angular/material/select';
22
+ import * as i4 from '@angular/material/core';
23
+ import * as i7 from '@angular/common';
24
+ import { CommonModule } from '@angular/common';
25
+ import * as i8 from '@angular/material/input';
26
+ import { MatInputModule } from '@angular/material/input';
27
+ import * as i9 from '@angular/material/tooltip';
28
+ import { MatTooltipModule } from '@angular/material/tooltip';
29
+ import * as i5$1 from '@myrmidon/cadmus-state';
30
+ import { EditPartQueryBase, EditPartServiceBase, EditPartFeatureBase, CadmusStateModule } from '@myrmidon/cadmus-state';
31
+ import * as i1$2 from '@angular/router';
32
+ import * as i2$2 from '@angular/material/snack-bar';
33
+ import { __decorate } from 'tslib';
34
+ import { Store, StoreConfig } from '@datorama/akita';
35
+ import * as i2$1 from '@myrmidon/cadmus-api';
36
+ import * as i6$2 from '@myrmidon/cadmus-ui-pg';
37
+ import { CadmusUiPgModule } from '@myrmidon/cadmus-ui-pg';
38
+
39
+ /**
40
+ * The type ID used to identify the CodShelfmarksPart type.
41
+ */
42
+ const COD_SHELFMARKS_PART_TYPEID = 'it.vedph.codicology.shelfmarks';
43
+ /**
44
+ * JSON schema for the CodShelfmarks part.
45
+ * You can use the JSON schema tool at https://jsonschema.net/.
46
+ */
47
+ const COD_SHELFMARKS_PART_SCHEMA = {
48
+ $schema: 'http://json-schema.org/draft-07/schema#',
49
+ $id: 'www.vedph.it/cadmus/parts/codicology/' +
50
+ COD_SHELFMARKS_PART_TYPEID +
51
+ '.json',
52
+ type: 'object',
53
+ title: 'CodShelfmarksPart',
54
+ required: [
55
+ 'id',
56
+ 'itemId',
57
+ 'typeId',
58
+ 'timeCreated',
59
+ 'creatorId',
60
+ 'timeModified',
61
+ 'userId',
62
+ 'shelfmarks',
63
+ ],
64
+ properties: {
65
+ timeCreated: {
66
+ type: 'string',
67
+ pattern: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d+Z$',
68
+ },
69
+ creatorId: {
70
+ type: 'string',
71
+ },
72
+ timeModified: {
73
+ type: 'string',
74
+ pattern: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d+Z$',
75
+ },
76
+ userId: {
77
+ type: 'string',
78
+ },
79
+ id: {
80
+ type: 'string',
81
+ pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
82
+ },
83
+ itemId: {
84
+ type: 'string',
85
+ pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
86
+ },
87
+ typeId: {
88
+ type: 'string',
89
+ pattern: '^[a-z][-0-9a-z._]*$',
90
+ },
91
+ roleId: {
92
+ type: ['string', 'null'],
93
+ pattern: '^([a-z][-0-9a-z._]*)?$',
94
+ },
95
+ shelfmarks: {
96
+ type: 'array',
97
+ items: {
98
+ anyOf: [
99
+ {
100
+ type: 'object',
101
+ required: ['city', 'library', 'location'],
102
+ properties: {
103
+ tag: {
104
+ type: 'string',
105
+ },
106
+ city: {
107
+ type: 'string',
108
+ },
109
+ library: {
110
+ type: 'string',
111
+ },
112
+ fund: {
113
+ type: 'string',
114
+ },
115
+ location: {
116
+ type: 'string',
117
+ },
118
+ },
119
+ },
120
+ ],
121
+ },
122
+ },
123
+ },
124
+ };
125
+
126
+ class CodShelfmarkEditorComponent {
127
+ constructor(formBuilder) {
128
+ this.shelfmarkChange = new EventEmitter();
129
+ this.editorClose = new EventEmitter();
130
+ // form
131
+ this.tag = formBuilder.control(null, Validators.maxLength(50));
132
+ this.city = formBuilder.control(null, [
133
+ Validators.required,
134
+ Validators.maxLength(50),
135
+ ]);
136
+ this.library = formBuilder.control(null, [
137
+ Validators.required,
138
+ Validators.maxLength(50),
139
+ ]);
140
+ this.fund = formBuilder.control(null, Validators.maxLength(50));
141
+ this.location = formBuilder.control(null, Validators.maxLength(50));
142
+ this.form = formBuilder.group({
143
+ tag: this.tag,
144
+ city: this.city,
145
+ library: this.library,
146
+ fund: this.fund,
147
+ location: this.location,
148
+ });
149
+ }
150
+ get shelfmark() {
151
+ return this._shelfmark;
152
+ }
153
+ set shelfmark(value) {
154
+ this._shelfmark = value;
155
+ this.updateForm(value);
156
+ }
157
+ ngOnInit() {
158
+ if (this._shelfmark) {
159
+ this.updateForm(this._shelfmark);
160
+ }
161
+ }
162
+ updateForm(model) {
163
+ if (!model) {
164
+ this.form.reset();
165
+ return;
166
+ }
167
+ this.tag.setValue(model.tag);
168
+ this.city.setValue(model.city);
169
+ this.library.setValue(model.library);
170
+ this.fund.setValue(model.fund);
171
+ this.location.setValue(model.location);
172
+ this.form.markAsPristine();
173
+ }
174
+ getModel() {
175
+ return {
176
+ tag: this.tag.value?.trim(),
177
+ city: this.city.value?.trim(),
178
+ library: this.library.value?.trim(),
179
+ fund: this.fund.value?.trim(),
180
+ location: this.location.value?.trim(),
181
+ };
182
+ }
183
+ cancel() {
184
+ this.editorClose.emit();
185
+ }
186
+ save() {
187
+ if (this.form.invalid) {
188
+ return;
189
+ }
190
+ const model = this.getModel();
191
+ if (!model) {
192
+ return;
193
+ }
194
+ this.shelfmarkChange.emit(model);
195
+ }
196
+ }
197
+ CodShelfmarkEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CodShelfmarkEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
198
+ CodShelfmarkEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: CodShelfmarkEditorComponent, selector: "cadmus-cod-shelfmark-editor", inputs: { shelfmark: "shelfmark", tagEntries: "tagEntries", libEntries: "libEntries" }, outputs: { shelfmarkChange: "shelfmarkChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <!-- tag (bound) -->\n <mat-form-field *ngIf=\"tagEntries?.length\" style=\"width: 8em\">\n <mat-select [formControl]=\"tag\" placeholder=\"tag\">\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- tag (free) -->\n <mat-form-field *ngIf=\"!tagEntries?.length\">\n <input matInput [formControl]=\"tag\" placeholder=\"tag\" />\n <mat-error\n *ngIf=\"$any(tag).errors?.maxLength && (tag.dirty || tag.touched)\"\n >tag too long</mat-error\n >\n </mat-form-field>\n <!-- city -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"city\" placeholder=\"city\" />\n <mat-error\n *ngIf=\"$any(city).errors?.required && (city.dirty || city.touched)\"\n >city required</mat-error\n >\n <mat-error\n *ngIf=\"$any(city).errors?.maxLength && (city.dirty || city.touched)\"\n >city too long</mat-error\n >\n </mat-form-field>\n </div>\n <div>\n <!-- library (bound) -->\n <mat-form-field *ngIf=\"libEntries?.length\" style=\"width: 8em\">\n <mat-select [formControl]=\"library\" placeholder=\"library\">\n <mat-option *ngFor=\"let e of libEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"\n $any(library).errors?.required && (library.dirty || library.touched)\n \"\n >library required</mat-error\n >\n </mat-form-field>\n <!-- library (free) -->\n <mat-form-field *ngIf=\"!libEntries?.length\">\n <input matInput [formControl]=\"library\" placeholder=\"library\" />\n <mat-error\n *ngIf=\"\n $any(library).errors?.required && (library.dirty || library.touched)\n \"\n >library required</mat-error\n >\n <mat-error\n *ngIf=\"\n $any(library).errors?.maxLength && (library.dirty || library.touched)\n \"\n >library too long</mat-error\n >\n </mat-form-field>\n <!-- fund -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"fund\" placeholder=\"fund\" />\n <mat-error\n *ngIf=\"$any(fund).errors?.maxLength && (fund.dirty || fund.touched)\"\n >fund too long</mat-error\n >\n </mat-form-field>\n <!-- location -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"location\" placeholder=\"location\" />\n <mat-error\n *ngIf=\"\n $any(location).errors?.required &&\n (location.dirty || location.touched)\n \"\n >location required</mat-error\n >\n <mat-error\n *ngIf=\"\n $any(location).errors?.maxLength &&\n (location.dirty || location.touched)\n \"\n >location too long</mat-error\n >\n </mat-form-field>\n </div>\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n color=\"warn\"\n mat-icon-button\n matTooltip=\"Discard changes\"\n (click)=\"cancel()\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n color=\"primary\"\n mat-icon-button\n matTooltip=\"Accept changes\"\n [disabled]=\"form.invalid || form.pristine\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n", styles: [""], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.MatError, selector: "mat-error", inputs: ["id"] }, { type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CodShelfmarkEditorComponent, decorators: [{
200
+ type: Component,
201
+ args: [{ selector: 'cadmus-cod-shelfmark-editor', template: "<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <!-- tag (bound) -->\n <mat-form-field *ngIf=\"tagEntries?.length\" style=\"width: 8em\">\n <mat-select [formControl]=\"tag\" placeholder=\"tag\">\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- tag (free) -->\n <mat-form-field *ngIf=\"!tagEntries?.length\">\n <input matInput [formControl]=\"tag\" placeholder=\"tag\" />\n <mat-error\n *ngIf=\"$any(tag).errors?.maxLength && (tag.dirty || tag.touched)\"\n >tag too long</mat-error\n >\n </mat-form-field>\n <!-- city -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"city\" placeholder=\"city\" />\n <mat-error\n *ngIf=\"$any(city).errors?.required && (city.dirty || city.touched)\"\n >city required</mat-error\n >\n <mat-error\n *ngIf=\"$any(city).errors?.maxLength && (city.dirty || city.touched)\"\n >city too long</mat-error\n >\n </mat-form-field>\n </div>\n <div>\n <!-- library (bound) -->\n <mat-form-field *ngIf=\"libEntries?.length\" style=\"width: 8em\">\n <mat-select [formControl]=\"library\" placeholder=\"library\">\n <mat-option *ngFor=\"let e of libEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"\n $any(library).errors?.required && (library.dirty || library.touched)\n \"\n >library required</mat-error\n >\n </mat-form-field>\n <!-- library (free) -->\n <mat-form-field *ngIf=\"!libEntries?.length\">\n <input matInput [formControl]=\"library\" placeholder=\"library\" />\n <mat-error\n *ngIf=\"\n $any(library).errors?.required && (library.dirty || library.touched)\n \"\n >library required</mat-error\n >\n <mat-error\n *ngIf=\"\n $any(library).errors?.maxLength && (library.dirty || library.touched)\n \"\n >library too long</mat-error\n >\n </mat-form-field>\n <!-- fund -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"fund\" placeholder=\"fund\" />\n <mat-error\n *ngIf=\"$any(fund).errors?.maxLength && (fund.dirty || fund.touched)\"\n >fund too long</mat-error\n >\n </mat-form-field>\n <!-- location -->\n &nbsp;\n <mat-form-field>\n <input matInput [formControl]=\"location\" placeholder=\"location\" />\n <mat-error\n *ngIf=\"\n $any(location).errors?.required &&\n (location.dirty || location.touched)\n \"\n >location required</mat-error\n >\n <mat-error\n *ngIf=\"\n $any(location).errors?.maxLength &&\n (location.dirty || location.touched)\n \"\n >location too long</mat-error\n >\n </mat-form-field>\n </div>\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n color=\"warn\"\n mat-icon-button\n matTooltip=\"Discard changes\"\n (click)=\"cancel()\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n color=\"primary\"\n mat-icon-button\n matTooltip=\"Accept changes\"\n [disabled]=\"form.invalid || form.pristine\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n", styles: [""] }]
202
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { shelfmark: [{
203
+ type: Input
204
+ }], tagEntries: [{
205
+ type: Input
206
+ }], libEntries: [{
207
+ type: Input
208
+ }], shelfmarkChange: [{
209
+ type: Output
210
+ }], editorClose: [{
211
+ type: Output
212
+ }] } });
213
+
214
+ /**
215
+ * CodShelfmarksPart editor component.
216
+ * Thesauri: cod-shelfmark-tags, cod-shelfmark-libraries (all optional).
217
+ */
218
+ class CodShelfmarksPartComponent extends ModelEditorComponentBase {
219
+ constructor(authService, formBuilder, _dialogService) {
220
+ super(authService);
221
+ this._dialogService = _dialogService;
222
+ this._editedIndex = -1;
223
+ this.tabIndex = 0;
224
+ // form
225
+ this.shelfmarks = formBuilder.control([], NgToolsValidators.strictMinLengthValidator(1));
226
+ this.form = formBuilder.group({
227
+ entries: this.shelfmarks,
228
+ });
229
+ }
230
+ ngOnInit() {
231
+ this.initEditor();
232
+ }
233
+ updateForm(model) {
234
+ if (!model) {
235
+ this.form.reset();
236
+ return;
237
+ }
238
+ this.shelfmarks.setValue(model.shelfmarks || []);
239
+ this.form.markAsPristine();
240
+ }
241
+ onModelSet(model) {
242
+ this.updateForm(deepCopy(model));
243
+ }
244
+ onThesauriSet() {
245
+ let key = 'cod-shelfmark-tags';
246
+ if (this.thesauri && this.thesauri[key]) {
247
+ this.tagEntries = this.thesauri[key].entries;
248
+ }
249
+ else {
250
+ this.tagEntries = undefined;
251
+ }
252
+ key = 'cod-shelfmark-libraries';
253
+ if (this.thesauri && this.thesauri[key]) {
254
+ this.libEntries = this.thesauri[key].entries;
255
+ }
256
+ else {
257
+ this.libEntries = undefined;
258
+ }
259
+ }
260
+ getModelFromForm() {
261
+ let part = this.model;
262
+ if (!part) {
263
+ part = {
264
+ itemId: this.itemId || '',
265
+ id: '',
266
+ typeId: COD_SHELFMARKS_PART_TYPEID,
267
+ roleId: this.roleId,
268
+ timeCreated: new Date(),
269
+ creatorId: '',
270
+ timeModified: new Date(),
271
+ userId: '',
272
+ shelfmarks: [],
273
+ };
274
+ }
275
+ part.shelfmarks = this.shelfmarks.value || [];
276
+ return part;
277
+ }
278
+ addShelfmark() {
279
+ const entry = {
280
+ city: '',
281
+ library: this.libEntries?.length ? this.libEntries[0].id : '',
282
+ location: '',
283
+ };
284
+ this.shelfmarks.setValue([...this.shelfmarks.value, entry]);
285
+ this.editShelfmark(this.shelfmarks.value.length - 1);
286
+ }
287
+ editShelfmark(index) {
288
+ if (index < 0) {
289
+ this._editedIndex = -1;
290
+ this.tabIndex = 0;
291
+ this.editedShelfmark = undefined;
292
+ }
293
+ else {
294
+ this._editedIndex = index;
295
+ this.editedShelfmark = this.shelfmarks.value[index];
296
+ setTimeout(() => {
297
+ this.tabIndex = 1;
298
+ }, 300);
299
+ }
300
+ }
301
+ onShelfmarkSave(entry) {
302
+ this.shelfmarks.setValue(this.shelfmarks.value.map((e, i) => i === this._editedIndex ? entry : e));
303
+ this.editShelfmark(-1);
304
+ }
305
+ onShelfmarkClose() {
306
+ this.editShelfmark(-1);
307
+ }
308
+ deleteShelfmark(index) {
309
+ this._dialogService
310
+ .confirm('Confirmation', 'Delete shelfmark?')
311
+ .pipe(take(1))
312
+ .subscribe((yes) => {
313
+ if (yes) {
314
+ const entries = [...this.shelfmarks.value];
315
+ entries.splice(index, 1);
316
+ this.shelfmarks.setValue(entries);
317
+ }
318
+ });
319
+ }
320
+ moveShelfmarkUp(index) {
321
+ if (index < 1) {
322
+ return;
323
+ }
324
+ const entry = this.shelfmarks.value[index];
325
+ const entries = [...this.shelfmarks.value];
326
+ entries.splice(index, 1);
327
+ entries.splice(index - 1, 0, entry);
328
+ this.shelfmarks.setValue(entries);
329
+ }
330
+ moveShelfmarkDown(index) {
331
+ if (index + 1 >= this.shelfmarks.value.length) {
332
+ return;
333
+ }
334
+ const entry = this.shelfmarks.value[index];
335
+ const entries = [...this.shelfmarks.value];
336
+ entries.splice(index, 1);
337
+ entries.splice(index + 1, 0, entry);
338
+ this.shelfmarks.setValue(entries);
339
+ }
340
+ }
341
+ CodShelfmarksPartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CodShelfmarksPartComponent, deps: [{ token: i1$1.AuthJwtService }, { token: i1.FormBuilder }, { token: i3$1.DialogService }], target: i0.ɵɵFactoryTarget.Component });
342
+ CodShelfmarksPartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: CodShelfmarksPartComponent, selector: "cadmus-cod-shelfmarks-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form!\" (submit)=\"save()\">\n <mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>Shelfmarks Part</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-tab-group [(selectedIndex)]=\"tabIndex\">\n <mat-tab label=\"shelfmarks\">\n <div>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"addShelfmark()\"\n >\n <mat-icon>add_circle</mat-icon> add shelfmark\n </button>\n </div>\n <table *ngIf=\"shelfmarks?.value?.length\">\n <thead>\n <tr>\n <th></th>\n <th>tag</th>\n <th>city</th>\n <th>library</th>\n <th>fund</th>\n <th>location</th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"\n let entry of shelfmarks?.value;\n let i = index;\n let first = first;\n let last = last\n \"\n >\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"Edit this shelfmark\"\n (click)=\"editShelfmark(i)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this shelfmark up\"\n [disabled]=\"first\"\n (click)=\"moveShelfmarkUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this shelfmark down\"\n [disabled]=\"last\"\n (click)=\"moveShelfmarkDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n matTooltip=\"Delete this shelfmark\"\n (click)=\"deleteShelfmark(i)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.tag }}</td>\n <td>{{ entry.city }}</td>\n <td>{{ entry.library }}</td>\n <td>{{ entry.fund }}</td>\n <td>{{ entry.location }}</td>\n </tr>\n </tbody>\n </table>\n </mat-tab>\n\n <mat-tab label=\"shelfmark\" *ngIf=\"editedShelfmark\">\n <cadmus-cod-shelfmark-editor\n [tagEntries]=\"tagEntries\"\n [libEntries]=\"libEntries\"\n [shelfmark]=\"editedShelfmark\"\n (shelfmarkChange)=\"onShelfmarkSave($event)\"\n (editorClose)=\"onShelfmarkClose()\"\n ></cadmus-cod-shelfmark-editor>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n ></cadmus-close-save-buttons>\n </mat-card-actions>\n </mat-card>\n</form>\n", styles: ["th{font-weight:400;color:silver}\n"], components: [{ type: i4$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i4$1.MatCardHeader, selector: "mat-card-header" }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i6$1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: CodShelfmarkEditorComponent, selector: "cadmus-cod-shelfmark-editor", inputs: ["shelfmark", "tagEntries", "libEntries"], outputs: ["shelfmarkChange", "editorClose"] }, { type: i9$1.CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4$1.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { type: i4$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i4$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }] });
343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CodShelfmarksPartComponent, decorators: [{
344
+ type: Component,
345
+ args: [{ selector: 'cadmus-cod-shelfmarks-part', template: "<form [formGroup]=\"form!\" (submit)=\"save()\">\n <mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>Shelfmarks Part</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-tab-group [(selectedIndex)]=\"tabIndex\">\n <mat-tab label=\"shelfmarks\">\n <div>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"addShelfmark()\"\n >\n <mat-icon>add_circle</mat-icon> add shelfmark\n </button>\n </div>\n <table *ngIf=\"shelfmarks?.value?.length\">\n <thead>\n <tr>\n <th></th>\n <th>tag</th>\n <th>city</th>\n <th>library</th>\n <th>fund</th>\n <th>location</th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"\n let entry of shelfmarks?.value;\n let i = index;\n let first = first;\n let last = last\n \"\n >\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"Edit this shelfmark\"\n (click)=\"editShelfmark(i)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this shelfmark up\"\n [disabled]=\"first\"\n (click)=\"moveShelfmarkUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this shelfmark down\"\n [disabled]=\"last\"\n (click)=\"moveShelfmarkDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n matTooltip=\"Delete this shelfmark\"\n (click)=\"deleteShelfmark(i)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.tag }}</td>\n <td>{{ entry.city }}</td>\n <td>{{ entry.library }}</td>\n <td>{{ entry.fund }}</td>\n <td>{{ entry.location }}</td>\n </tr>\n </tbody>\n </table>\n </mat-tab>\n\n <mat-tab label=\"shelfmark\" *ngIf=\"editedShelfmark\">\n <cadmus-cod-shelfmark-editor\n [tagEntries]=\"tagEntries\"\n [libEntries]=\"libEntries\"\n [shelfmark]=\"editedShelfmark\"\n (shelfmarkChange)=\"onShelfmarkSave($event)\"\n (editorClose)=\"onShelfmarkClose()\"\n ></cadmus-cod-shelfmark-editor>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n ></cadmus-close-save-buttons>\n </mat-card-actions>\n </mat-card>\n</form>\n", styles: ["th{font-weight:400;color:silver}\n"] }]
346
+ }], ctorParameters: function () { return [{ type: i1$1.AuthJwtService }, { type: i1.FormBuilder }, { type: i3$1.DialogService }]; } });
347
+
348
+ let EditCodShelfmarksPartStore = class EditCodShelfmarksPartStore extends Store {
349
+ constructor() {
350
+ super({});
351
+ }
352
+ setDirty(value) {
353
+ this.update({ dirty: value });
354
+ }
355
+ setSaving(value) {
356
+ this.update({ saving: value });
357
+ }
358
+ };
359
+ EditCodShelfmarksPartStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
360
+ EditCodShelfmarksPartStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartStore, providedIn: 'root' });
361
+ EditCodShelfmarksPartStore = __decorate([
362
+ StoreConfig({ name: COD_SHELFMARKS_PART_TYPEID })
363
+ ], EditCodShelfmarksPartStore);
364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartStore, decorators: [{
365
+ type: Injectable,
366
+ args: [{ providedIn: 'root' }]
367
+ }], ctorParameters: function () { return []; } });
368
+
369
+ class EditCodShelfmarksPartQuery extends EditPartQueryBase {
370
+ constructor(store) {
371
+ super(store);
372
+ }
373
+ }
374
+ EditCodShelfmarksPartQuery.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartQuery, deps: [{ token: EditCodShelfmarksPartStore }], target: i0.ɵɵFactoryTarget.Injectable });
375
+ EditCodShelfmarksPartQuery.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartQuery, providedIn: 'root' });
376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartQuery, decorators: [{
377
+ type: Injectable,
378
+ args: [{ providedIn: 'root' }]
379
+ }], ctorParameters: function () { return [{ type: EditCodShelfmarksPartStore }]; } });
380
+
381
+ class EditCodShelfmarksPartService extends EditPartServiceBase {
382
+ constructor(editPartStore, itemService, thesaurusService) {
383
+ super(itemService, thesaurusService);
384
+ this.store = editPartStore;
385
+ }
386
+ }
387
+ EditCodShelfmarksPartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartService, deps: [{ token: EditCodShelfmarksPartStore }, { token: i2$1.ItemService }, { token: i2$1.ThesaurusService }], target: i0.ɵɵFactoryTarget.Injectable });
388
+ EditCodShelfmarksPartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartService, providedIn: 'root' });
389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EditCodShelfmarksPartService, decorators: [{
390
+ type: Injectable,
391
+ args: [{ providedIn: 'root' }]
392
+ }], ctorParameters: function () { return [{ type: EditCodShelfmarksPartStore }, { type: i2$1.ItemService }, { type: i2$1.ThesaurusService }]; } });
393
+
394
+ class CodShelfmarksPartFeatureComponent extends EditPartFeatureBase {
395
+ constructor(router, route, snackbar, editPartQuery, editPartService, editItemQuery, editItemService) {
396
+ super(router, route, snackbar, editPartQuery, editPartService, editItemQuery, editItemService);
397
+ }
398
+ ngOnInit() {
399
+ this.initEditor(['cod-shelfmark-tags', 'cod-shelfmark-libraries']);
400
+ }
401
+ }
402
+ CodShelfmarksPartFeatureComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CodShelfmarksPartFeatureComponent, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2$2.MatSnackBar }, { token: EditCodShelfmarksPartQuery }, { token: EditCodShelfmarksPartService }, { token: i5$1.EditItemQuery }, { token: i5$1.EditItemService }], target: i0.ɵɵFactoryTarget.Component });
403
+ CodShelfmarksPartFeatureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: CodShelfmarksPartFeatureComponent, selector: "cadmus-cod-shelfmarks-part-feature", usesInheritance: true, ngImport: i0, template: "<cadmus-current-item-bar></cadmus-current-item-bar>\n<cadmus-cod-shelfmarks-part\n [itemId]=\"itemId\"\n [roleId]=\"roleId\"\n [model]=\"$any(part$ | async)\"\n (modelChange)=\"save($event)\"\n [thesauri]=\"(thesauri$ | async) || undefined\"\n (editorClose)=\"close()\"\n (dirtyChange)=\"onDirtyChange($event)\"\n></cadmus-cod-shelfmarks-part>\n", styles: [""], components: [{ type: i6$2.CurrentItemBarComponent, selector: "cadmus-current-item-bar" }, { type: CodShelfmarksPartComponent, selector: "cadmus-cod-shelfmarks-part" }], pipes: { "async": i7.AsyncPipe } });
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CodShelfmarksPartFeatureComponent, decorators: [{
405
+ type: Component,
406
+ args: [{ selector: 'cadmus-cod-shelfmarks-part-feature', template: "<cadmus-current-item-bar></cadmus-current-item-bar>\n<cadmus-cod-shelfmarks-part\n [itemId]=\"itemId\"\n [roleId]=\"roleId\"\n [model]=\"$any(part$ | async)\"\n (modelChange)=\"save($event)\"\n [thesauri]=\"(thesauri$ | async) || undefined\"\n (editorClose)=\"close()\"\n (dirtyChange)=\"onDirtyChange($event)\"\n></cadmus-cod-shelfmarks-part>\n", styles: [""] }]
407
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2$2.MatSnackBar }, { type: EditCodShelfmarksPartQuery }, { type: EditCodShelfmarksPartService }, { type: i5$1.EditItemQuery }, { type: i5$1.EditItemService }]; } });
408
+
409
+ class CadmusPartCodicologyShelfmarksModule {
410
+ }
411
+ CadmusPartCodicologyShelfmarksModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CadmusPartCodicologyShelfmarksModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
412
+ CadmusPartCodicologyShelfmarksModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CadmusPartCodicologyShelfmarksModule, declarations: [CodShelfmarksPartComponent,
413
+ CodShelfmarkEditorComponent,
414
+ CodShelfmarksPartFeatureComponent], imports: [CommonModule,
415
+ FormsModule,
416
+ ReactiveFormsModule,
417
+ // material
418
+ MatButtonModule,
419
+ MatCardModule,
420
+ MatIconModule,
421
+ MatInputModule,
422
+ MatSelectModule,
423
+ MatTabsModule,
424
+ MatTooltipModule,
425
+ // Cadmus
426
+ CadmusStateModule,
427
+ CadmusUiModule,
428
+ CadmusUiPgModule], exports: [CodShelfmarksPartComponent,
429
+ CodShelfmarkEditorComponent,
430
+ CodShelfmarksPartFeatureComponent] });
431
+ CadmusPartCodicologyShelfmarksModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CadmusPartCodicologyShelfmarksModule, imports: [[
432
+ CommonModule,
433
+ FormsModule,
434
+ ReactiveFormsModule,
435
+ // material
436
+ MatButtonModule,
437
+ MatCardModule,
438
+ MatIconModule,
439
+ MatInputModule,
440
+ MatSelectModule,
441
+ MatTabsModule,
442
+ MatTooltipModule,
443
+ // Cadmus
444
+ CadmusStateModule,
445
+ CadmusUiModule,
446
+ CadmusUiPgModule,
447
+ ]] });
448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: CadmusPartCodicologyShelfmarksModule, decorators: [{
449
+ type: NgModule,
450
+ args: [{
451
+ declarations: [
452
+ CodShelfmarksPartComponent,
453
+ CodShelfmarkEditorComponent,
454
+ CodShelfmarksPartFeatureComponent,
455
+ ],
456
+ imports: [
457
+ CommonModule,
458
+ FormsModule,
459
+ ReactiveFormsModule,
460
+ // material
461
+ MatButtonModule,
462
+ MatCardModule,
463
+ MatIconModule,
464
+ MatInputModule,
465
+ MatSelectModule,
466
+ MatTabsModule,
467
+ MatTooltipModule,
468
+ // Cadmus
469
+ CadmusStateModule,
470
+ CadmusUiModule,
471
+ CadmusUiPgModule,
472
+ ],
473
+ exports: [
474
+ CodShelfmarksPartComponent,
475
+ CodShelfmarkEditorComponent,
476
+ CodShelfmarksPartFeatureComponent,
477
+ ],
478
+ }]
479
+ }] });
480
+
481
+ /*
482
+ * Public API Surface of cadmus-part-codicology-shelfmarks
483
+ */
484
+
485
+ /**
486
+ * Generated bundle index. Do not edit.
487
+ */
488
+
489
+ export { COD_SHELFMARKS_PART_SCHEMA, COD_SHELFMARKS_PART_TYPEID, CadmusPartCodicologyShelfmarksModule, CodShelfmarkEditorComponent, CodShelfmarksPartComponent, CodShelfmarksPartFeatureComponent };
490
+ //# sourceMappingURL=myrmidon-cadmus-part-codicology-shelfmarks.mjs.map