@myrmidon/cadmus-part-ndpdrw-tech 0.0.3

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.
package/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # CadmusPartNdpdrwTech
2
+
3
+ This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
8
+
9
+ ```bash
10
+ ng generate component component-name
11
+ ```
12
+
13
+ For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
14
+
15
+ ```bash
16
+ ng generate --help
17
+ ```
18
+
19
+ ## Building
20
+
21
+ To build the library, run:
22
+
23
+ ```bash
24
+ ng build cadmus-part-ndpdrw-tech
25
+ ```
26
+
27
+ This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
28
+
29
+ ### Publishing the Library
30
+
31
+ Once the project is built, you can publish your library by following these steps:
32
+
33
+ 1. Navigate to the `dist` directory:
34
+ ```bash
35
+ cd dist/cadmus-part-ndpdrw-tech
36
+ ```
37
+
38
+ 2. Run the `npm publish` command to publish your library to the npm registry:
39
+ ```bash
40
+ npm publish
41
+ ```
42
+
43
+ ## Running unit tests
44
+
45
+ To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
46
+
47
+ ```bash
48
+ ng test
49
+ ```
50
+
51
+ ## Running end-to-end tests
52
+
53
+ For end-to-end (e2e) testing, run:
54
+
55
+ ```bash
56
+ ng e2e
57
+ ```
58
+
59
+ Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
60
+
61
+ ## Additional Resources
62
+
63
+ For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -0,0 +1,349 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i2 from '@angular/forms';
4
+ import { Validators, ReactiveFormsModule } from '@angular/forms';
5
+ import * as i8 from '@angular/common';
6
+ import { CommonModule, TitleCasePipe } from '@angular/common';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import * as i3 from '@angular/material/card';
9
+ import { MatCardModule } from '@angular/material/card';
10
+ import { MatExpansionModule } from '@angular/material/expansion';
11
+ import * as i4 from '@angular/material/form-field';
12
+ import { MatFormFieldModule } from '@angular/material/form-field';
13
+ import * as i5 from '@angular/material/icon';
14
+ import { MatIconModule } from '@angular/material/icon';
15
+ import * as i6 from '@angular/material/input';
16
+ import { MatInputModule } from '@angular/material/input';
17
+ import * as i7 from '@angular/material/select';
18
+ import { MatSelectModule } from '@angular/material/select';
19
+ import { MatTooltipModule } from '@angular/material/tooltip';
20
+ import { PhysicalMeasurementSetComponent } from '@myrmidon/cadmus-mat-physical-size';
21
+ import { FlagSetComponent } from '@myrmidon/cadmus-ui-flag-set';
22
+ import { ModelEditorComponentBase, CloseSaveButtonsComponent } from '@myrmidon/cadmus-ui';
23
+ import * as i1 from '@myrmidon/auth-jwt-login';
24
+ import * as i4$1 from '@myrmidon/cadmus-state';
25
+ import { EditPartFeatureBase } from '@myrmidon/cadmus-state';
26
+ import { CurrentItemBarComponent } from '@myrmidon/cadmus-item-editor';
27
+ import * as i1$1 from '@angular/router';
28
+ import * as i2$1 from '@angular/material/snack-bar';
29
+ import * as i3$1 from '@myrmidon/cadmus-api';
30
+
31
+ /**
32
+ * The type ID used to identify the DrawingTechPart type.
33
+ */
34
+ const DRAWING_TECH_PART_TYPEID = 'it.vedph.ndp.drawing-tech';
35
+ /**
36
+ * JSON schema for the DrawingTech part.
37
+ * You can use the JSON schema tool at https://jsonschema.net/.
38
+ */
39
+ const DRAWING_TECH_PART_SCHEMA = {
40
+ $schema: 'http://json-schema.org/draft-07/schema#',
41
+ $id: 'www.vedph.it/cadmus/parts/ndp/' + DRAWING_TECH_PART_TYPEID + '.json',
42
+ type: 'object',
43
+ title: 'DrawingTechPart',
44
+ required: [
45
+ 'id',
46
+ 'itemId',
47
+ 'typeId',
48
+ 'timeCreated',
49
+ 'creatorId',
50
+ 'timeModified',
51
+ 'userId',
52
+ 'material',
53
+ ],
54
+ properties: {
55
+ timeCreated: {
56
+ type: 'string',
57
+ pattern: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d+Z$',
58
+ },
59
+ creatorId: {
60
+ type: 'string',
61
+ },
62
+ timeModified: {
63
+ type: 'string',
64
+ pattern: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d+Z$',
65
+ },
66
+ userId: {
67
+ type: 'string',
68
+ },
69
+ id: {
70
+ type: 'string',
71
+ pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
72
+ },
73
+ itemId: {
74
+ type: 'string',
75
+ pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
76
+ },
77
+ typeId: {
78
+ type: 'string',
79
+ pattern: '^[a-z][-0-9a-z._]*$',
80
+ },
81
+ roleId: {
82
+ type: ['string', 'null'],
83
+ pattern: '^([a-z][-0-9a-z._]*)?$',
84
+ },
85
+ material: {
86
+ type: 'string',
87
+ },
88
+ features: {
89
+ type: 'array',
90
+ items: { type: 'string' },
91
+ },
92
+ measures: {
93
+ type: 'array',
94
+ items: {
95
+ type: 'object',
96
+ properties: {
97
+ tag: { type: 'string' },
98
+ value: { type: 'number' },
99
+ unit: { type: 'string' },
100
+ },
101
+ required: ['tag', 'value', 'unit'],
102
+ },
103
+ },
104
+ techniques: {
105
+ type: 'array',
106
+ items: { type: 'string' },
107
+ },
108
+ colors: {
109
+ type: 'array',
110
+ items: { type: 'string' },
111
+ },
112
+ note: {
113
+ type: 'string',
114
+ },
115
+ },
116
+ };
117
+
118
+ function entryToFlag(entry) {
119
+ return {
120
+ id: entry.id,
121
+ label: entry.value,
122
+ };
123
+ }
124
+ /**
125
+ * Drawing techniques part editor component.
126
+ * Thesauri: drawing-tech-materials, drawing-tech-features, drawing-tech-techniques,
127
+ * drawing-tech-colors, drawing-tech-size-units, drawing-tech-dim-tags,
128
+ * drawing-tech-measure-names.
129
+ */
130
+ class DrawingTechPartComponent extends ModelEditorComponentBase {
131
+ material;
132
+ features;
133
+ measures;
134
+ techniques;
135
+ colors;
136
+ note;
137
+ // drawing-tech-materials
138
+ materialEntries = signal(undefined, ...(ngDevMode ? [{ debugName: "materialEntries" }] : /* istanbul ignore next */ []));
139
+ // drawing-tech-features
140
+ featureEntries = signal(undefined, ...(ngDevMode ? [{ debugName: "featureEntries" }] : /* istanbul ignore next */ []));
141
+ // drawing-tech-techniques
142
+ techniqueEntries = signal(undefined, ...(ngDevMode ? [{ debugName: "techniqueEntries" }] : /* istanbul ignore next */ []));
143
+ // drawing-tech-colors
144
+ colorEntries = signal(undefined, ...(ngDevMode ? [{ debugName: "colorEntries" }] : /* istanbul ignore next */ []));
145
+ // drawing-tech-size-units
146
+ sizeUnitEntries = signal(undefined, ...(ngDevMode ? [{ debugName: "sizeUnitEntries" }] : /* istanbul ignore next */ []));
147
+ // drawing-tech-dim-tags
148
+ dimTagEntries = signal(undefined, ...(ngDevMode ? [{ debugName: "dimTagEntries" }] : /* istanbul ignore next */ []));
149
+ // drawing-tech-measure-names
150
+ measureNameEntries = signal(undefined, ...(ngDevMode ? [{ debugName: "measureNameEntries" }] : /* istanbul ignore next */ []));
151
+ // flags mapped from thesaurus entries
152
+ featureFlags = computed(() => this.featureEntries()?.map((e) => entryToFlag(e)) || [], ...(ngDevMode ? [{ debugName: "featureFlags" }] : /* istanbul ignore next */ []));
153
+ techniqueFlags = computed(() => this.techniqueEntries()?.map((e) => entryToFlag(e)) || [], ...(ngDevMode ? [{ debugName: "techniqueFlags" }] : /* istanbul ignore next */ []));
154
+ colorFlags = computed(() => this.colorEntries()?.map((e) => entryToFlag(e)) || [], ...(ngDevMode ? [{ debugName: "colorFlags" }] : /* istanbul ignore next */ []));
155
+ constructor(authService, formBuilder) {
156
+ super(authService, formBuilder);
157
+ // form
158
+ this.material = formBuilder.control('', {
159
+ nonNullable: true,
160
+ validators: [Validators.required, Validators.maxLength(50)],
161
+ });
162
+ this.features = formBuilder.control([], { nonNullable: true });
163
+ this.measures = formBuilder.control([], { nonNullable: true });
164
+ this.techniques = formBuilder.control([], { nonNullable: true });
165
+ this.colors = formBuilder.control([], { nonNullable: true });
166
+ this.note = formBuilder.control(null, {
167
+ validators: [Validators.maxLength(5000)],
168
+ });
169
+ }
170
+ ngOnInit() {
171
+ super.ngOnInit();
172
+ }
173
+ buildForm(formBuilder) {
174
+ return formBuilder.group({
175
+ material: this.material,
176
+ features: this.features,
177
+ measures: this.measures,
178
+ techniques: this.techniques,
179
+ colors: this.colors,
180
+ note: this.note,
181
+ });
182
+ }
183
+ updateThesauri(thesauri) {
184
+ let key = 'drawing-tech-materials';
185
+ if (this.hasThesaurus(key)) {
186
+ this.materialEntries.set(thesauri[key].entries);
187
+ }
188
+ else {
189
+ this.materialEntries.set(undefined);
190
+ }
191
+ key = 'drawing-tech-features';
192
+ if (this.hasThesaurus(key)) {
193
+ this.featureEntries.set(thesauri[key].entries);
194
+ }
195
+ else {
196
+ this.featureEntries.set(undefined);
197
+ }
198
+ key = 'drawing-tech-techniques';
199
+ if (this.hasThesaurus(key)) {
200
+ this.techniqueEntries.set(thesauri[key].entries);
201
+ }
202
+ else {
203
+ this.techniqueEntries.set(undefined);
204
+ }
205
+ key = 'drawing-tech-colors';
206
+ if (this.hasThesaurus(key)) {
207
+ this.colorEntries.set(thesauri[key].entries);
208
+ }
209
+ else {
210
+ this.colorEntries.set(undefined);
211
+ }
212
+ key = 'drawing-tech-size-units';
213
+ if (this.hasThesaurus(key)) {
214
+ this.sizeUnitEntries.set(thesauri[key].entries);
215
+ }
216
+ else {
217
+ this.sizeUnitEntries.set(undefined);
218
+ }
219
+ key = 'drawing-tech-dim-tags';
220
+ if (this.hasThesaurus(key)) {
221
+ this.dimTagEntries.set(thesauri[key].entries);
222
+ }
223
+ else {
224
+ this.dimTagEntries.set(undefined);
225
+ }
226
+ key = 'drawing-tech-measure-names';
227
+ if (this.hasThesaurus(key)) {
228
+ this.measureNameEntries.set(thesauri[key].entries);
229
+ }
230
+ else {
231
+ this.measureNameEntries.set(undefined);
232
+ }
233
+ }
234
+ updateForm(part) {
235
+ if (!part) {
236
+ this.form.reset();
237
+ return;
238
+ }
239
+ this.material.setValue(part.material);
240
+ this.features.setValue(part.features || []);
241
+ this.measures.setValue(part.measures || []);
242
+ this.techniques.setValue(part.techniques || []);
243
+ this.colors.setValue(part.colors || []);
244
+ this.note.setValue(part.note || null);
245
+ this.form.markAsPristine();
246
+ }
247
+ onDataSet(data) {
248
+ // thesauri
249
+ if (data?.thesauri) {
250
+ this.updateThesauri(data.thesauri);
251
+ }
252
+ // form
253
+ this.updateForm(data?.value);
254
+ }
255
+ getValue() {
256
+ let part = this.getEditedPart(DRAWING_TECH_PART_TYPEID);
257
+ part.material = this.material.value || '';
258
+ part.features = this.features.value?.length
259
+ ? this.features.value
260
+ : undefined;
261
+ part.measures = this.measures.value?.length
262
+ ? this.measures.value
263
+ : undefined;
264
+ part.techniques = this.techniques.value?.length
265
+ ? this.techniques.value
266
+ : undefined;
267
+ part.colors = this.colors.value?.length ? this.colors.value : undefined;
268
+ part.note = this.note.value?.trim() || undefined;
269
+ return part;
270
+ }
271
+ onFeatureCheckedIdsChange(ids) {
272
+ this.features.setValue(ids);
273
+ this.features.markAsDirty();
274
+ this.features.updateValueAndValidity();
275
+ }
276
+ onTechniqueCheckedIdsChange(ids) {
277
+ this.techniques.setValue(ids);
278
+ this.techniques.markAsDirty();
279
+ this.techniques.updateValueAndValidity();
280
+ }
281
+ onColorCheckedIdsChange(ids) {
282
+ this.colors.setValue(ids);
283
+ this.colors.markAsDirty();
284
+ this.colors.updateValueAndValidity();
285
+ }
286
+ onMeasuresChange(measures) {
287
+ this.measures.setValue(measures);
288
+ this.measures.markAsDirty();
289
+ this.measures.updateValueAndValidity();
290
+ }
291
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: DrawingTechPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
292
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: DrawingTechPartComponent, isStandalone: true, selector: "cadmus-drawing-tech-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Drawing Technique Part\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <!-- material (bound) -->\r\n @if (materialEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>material</mat-label>\r\n <mat-select [formControl]=\"material\">\r\n @for (e of materialEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ($any(material).errors?.required && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- material (free) -->\r\n <mat-form-field>\r\n <mat-label>material</mat-label>\r\n <input matInput [formControl]=\"material\" />\r\n @if ($any(material).errors?.required && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material required</mat-error>\r\n } @if ($any(material).errors?.maxLength && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- features -->\r\n @if (featureEntries()?.length) {\r\n <div>\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"featureFlags()\"\r\n [checkedIds]=\"features.value\"\r\n (checkedIdsChange)=\"onFeatureCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- measurements -->\r\n <div class=\"mt\">\r\n <cadmus-mat-physical-measurement-set\r\n [nameEntries]=\"measureNameEntries()\"\r\n [unitEntries]=\"sizeUnitEntries() || []\"\r\n [dimTagEntries]=\"dimTagEntries()\"\r\n [measurements]=\"measures.value\"\r\n (measurementsChange)=\"onMeasuresChange($event)\"\r\n />\r\n </div>\r\n <!-- techniques-->\r\n @if (techniqueEntries()?.length) {\r\n <div class=\"mt\">\r\n <fieldset>\r\n <legend>techniques</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"techniqueFlags()\"\r\n [checkedIds]=\"techniques.value\"\r\n (checkedIdsChange)=\"onTechniqueCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- colors -->\r\n @if (colorEntries()?.length) {\r\n <div class=\"mt\">\r\n <fieldset>\r\n <legend>colors</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"colorFlags()\"\r\n [checkedIds]=\"colors.value\"\r\n (checkedIdsChange)=\"onColorCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- note -->\r\n <mat-form-field class=\"long-text mt\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\" rows=\"3\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".long-text{width:100%;max-width:800px}fieldset{border:1px solid var(--mat-sys-on-surface-variant);border-radius:6px;padding:6px}legend{color:var(--mat-sys-on-surface-variant)}.mt{margin-top:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type:
293
+ // cadmus
294
+ FlagSetComponent, selector: "cadmus-ui-flag-set", inputs: ["flags", "checkedIds", "allowCustom", "hideToolbar", "numbering"], outputs: ["checkedIdsChange"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "component", type: PhysicalMeasurementSetComponent, selector: "cadmus-mat-physical-measurement-set", inputs: ["measurements", "allowCustomName", "defaultUnit", "distinct", "hideTag", "unitEntries", "dimTagEntries", "nameEntries"], outputs: ["measurementsChange"] }, { kind: "pipe", type: i8.TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
295
+ }
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: DrawingTechPartComponent, decorators: [{
297
+ type: Component,
298
+ args: [{ selector: 'cadmus-drawing-tech-part', imports: [
299
+ CommonModule,
300
+ ReactiveFormsModule,
301
+ MatButtonModule,
302
+ MatCardModule,
303
+ MatExpansionModule,
304
+ MatFormFieldModule,
305
+ MatIconModule,
306
+ MatInputModule,
307
+ MatSelectModule,
308
+ MatTooltipModule,
309
+ TitleCasePipe,
310
+ // cadmus
311
+ FlagSetComponent,
312
+ CloseSaveButtonsComponent,
313
+ PhysicalMeasurementSetComponent,
314
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Drawing Technique Part\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <!-- material (bound) -->\r\n @if (materialEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>material</mat-label>\r\n <mat-select [formControl]=\"material\">\r\n @for (e of materialEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ($any(material).errors?.required && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- material (free) -->\r\n <mat-form-field>\r\n <mat-label>material</mat-label>\r\n <input matInput [formControl]=\"material\" />\r\n @if ($any(material).errors?.required && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material required</mat-error>\r\n } @if ($any(material).errors?.maxLength && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- features -->\r\n @if (featureEntries()?.length) {\r\n <div>\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"featureFlags()\"\r\n [checkedIds]=\"features.value\"\r\n (checkedIdsChange)=\"onFeatureCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- measurements -->\r\n <div class=\"mt\">\r\n <cadmus-mat-physical-measurement-set\r\n [nameEntries]=\"measureNameEntries()\"\r\n [unitEntries]=\"sizeUnitEntries() || []\"\r\n [dimTagEntries]=\"dimTagEntries()\"\r\n [measurements]=\"measures.value\"\r\n (measurementsChange)=\"onMeasuresChange($event)\"\r\n />\r\n </div>\r\n <!-- techniques-->\r\n @if (techniqueEntries()?.length) {\r\n <div class=\"mt\">\r\n <fieldset>\r\n <legend>techniques</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"techniqueFlags()\"\r\n [checkedIds]=\"techniques.value\"\r\n (checkedIdsChange)=\"onTechniqueCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- colors -->\r\n @if (colorEntries()?.length) {\r\n <div class=\"mt\">\r\n <fieldset>\r\n <legend>colors</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"colorFlags()\"\r\n [checkedIds]=\"colors.value\"\r\n (checkedIdsChange)=\"onColorCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- note -->\r\n <mat-form-field class=\"long-text mt\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\" rows=\"3\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".long-text{width:100%;max-width:800px}fieldset{border:1px solid var(--mat-sys-on-surface-variant);border-radius:6px;padding:6px}legend{color:var(--mat-sys-on-surface-variant)}.mt{margin-top:16px}\n"] }]
315
+ }], ctorParameters: () => [{ type: i1.AuthJwtService }, { type: i2.FormBuilder }] });
316
+
317
+ class DrawingTechPartFeatureComponent extends EditPartFeatureBase {
318
+ constructor(router, route, snackbar, itemService, thesaurusService, editorService) {
319
+ super(router, route, snackbar, itemService, thesaurusService, editorService);
320
+ }
321
+ getReqThesauriIds() {
322
+ return [
323
+ 'drawing-tech-materials',
324
+ 'drawing-tech-features',
325
+ 'drawing-tech-techniques',
326
+ 'drawing-tech-colors',
327
+ 'drawing-tech-size-units',
328
+ 'drawing-tech-dim-tags',
329
+ 'drawing-tech-measure-names',
330
+ ];
331
+ }
332
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: DrawingTechPartFeatureComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2$1.MatSnackBar }, { token: i3$1.ItemService }, { token: i3$1.ThesaurusService }, { token: i4$1.PartEditorService }], target: i0.ɵɵFactoryTarget.Component });
333
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: DrawingTechPartFeatureComponent, isStandalone: true, selector: "cadmus-drawing-tech-part-feature", usesInheritance: true, ngImport: i0, template: "<cadmus-current-item-bar />\r\n<cadmus-drawing-tech-part\r\n [identity]=\"identity()\"\r\n [data]=\"$any(data())\"\r\n (dataChange)=\"save($event!.value!)\"\r\n (editorClose)=\"close()\"\r\n (dirtyChange)=\"onDirtyChange($event)\"\r\n/>\r\n", styles: [""], dependencies: [{ kind: "component", type: CurrentItemBarComponent, selector: "cadmus-current-item-bar" }, { kind: "component", type: DrawingTechPartComponent, selector: "cadmus-drawing-tech-part" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
334
+ }
335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: DrawingTechPartFeatureComponent, decorators: [{
336
+ type: Component,
337
+ args: [{ selector: 'cadmus-drawing-tech-part-feature', imports: [CurrentItemBarComponent, DrawingTechPartComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<cadmus-current-item-bar />\r\n<cadmus-drawing-tech-part\r\n [identity]=\"identity()\"\r\n [data]=\"$any(data())\"\r\n (dataChange)=\"save($event!.value!)\"\r\n (editorClose)=\"close()\"\r\n (dirtyChange)=\"onDirtyChange($event)\"\r\n/>\r\n" }]
338
+ }], ctorParameters: () => [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2$1.MatSnackBar }, { type: i3$1.ItemService }, { type: i3$1.ThesaurusService }, { type: i4$1.PartEditorService }] });
339
+
340
+ /*
341
+ * Public API Surface of cadmus-part-ndpdrw-tech
342
+ */
343
+
344
+ /**
345
+ * Generated bundle index. Do not edit.
346
+ */
347
+
348
+ export { DRAWING_TECH_PART_SCHEMA, DRAWING_TECH_PART_TYPEID, DrawingTechPartComponent, DrawingTechPartFeatureComponent };
349
+ //# sourceMappingURL=myrmidon-cadmus-part-ndpdrw-tech.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myrmidon-cadmus-part-ndpdrw-tech.mjs","sources":["../../../../projects/myrmidon/cadmus-part-ndpdrw-tech/src/lib/drawing-tech-part.ts","../../../../projects/myrmidon/cadmus-part-ndpdrw-tech/src/lib/drawing-tech-part/drawing-tech-part.component.ts","../../../../projects/myrmidon/cadmus-part-ndpdrw-tech/src/lib/drawing-tech-part/drawing-tech-part.component.html","../../../../projects/myrmidon/cadmus-part-ndpdrw-tech/src/lib/drawing-tech-part-feature/drawing-tech-part-feature.component.ts","../../../../projects/myrmidon/cadmus-part-ndpdrw-tech/src/lib/drawing-tech-part-feature/drawing-tech-part-feature.component.html","../../../../projects/myrmidon/cadmus-part-ndpdrw-tech/src/public-api.ts","../../../../projects/myrmidon/cadmus-part-ndpdrw-tech/src/myrmidon-cadmus-part-ndpdrw-tech.ts"],"sourcesContent":["import { Part } from '@myrmidon/cadmus-core';\r\n\r\nimport { PhysicalMeasurement } from '@myrmidon/cadmus-mat-physical-size';\r\n\r\n/**\r\n * The DrawingTech part model.\r\n */\r\nexport interface DrawingTechPart extends Part {\r\n material: string;\r\n features?: string[];\r\n measures?: PhysicalMeasurement[];\r\n techniques?: string[];\r\n colors?: string[];\r\n note?: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the DrawingTechPart type.\r\n */\r\nexport const DRAWING_TECH_PART_TYPEID = 'it.vedph.ndp.drawing-tech';\r\n\r\n/**\r\n * JSON schema for the DrawingTech part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const DRAWING_TECH_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/ndp/' + DRAWING_TECH_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'DrawingTechPart',\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 'material',\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 material: {\r\n type: 'string',\r\n },\r\n features: {\r\n type: 'array',\r\n items: { type: 'string' },\r\n },\r\n measures: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n properties: {\r\n tag: { type: 'string' },\r\n value: { type: 'number' },\r\n unit: { type: 'string' },\r\n },\r\n required: ['tag', 'value', 'unit'],\r\n },\r\n },\r\n techniques: {\r\n type: 'array',\r\n items: { type: 'string' },\r\n },\r\n colors: {\r\n type: 'array',\r\n items: { type: 'string' },\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n};\r\n","import { ChangeDetectionStrategy, Component, computed, OnInit, signal } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\n\r\nimport { CommonModule, TitleCasePipe } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { PhysicalMeasurement, PhysicalMeasurementSetComponent } from '@myrmidon/cadmus-mat-physical-size';\r\nimport { Flag, FlagSetComponent } from '@myrmidon/cadmus-ui-flag-set';\r\n\r\nimport {\r\n EditedObject,\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n DRAWING_TECH_PART_TYPEID,\r\n DrawingTechPart,\r\n} from '../drawing-tech-part';\r\n\r\nfunction entryToFlag(entry: ThesaurusEntry): Flag {\r\n return {\r\n id: entry.id,\r\n label: entry.value,\r\n };\r\n}\r\n\r\n/**\r\n * Drawing techniques part editor component.\r\n * Thesauri: drawing-tech-materials, drawing-tech-features, drawing-tech-techniques,\r\n * drawing-tech-colors, drawing-tech-size-units, drawing-tech-dim-tags,\r\n * drawing-tech-measure-names.\r\n */\r\n@Component({\r\n selector: 'cadmus-drawing-tech-part',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCardModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n TitleCasePipe,\r\n // cadmus\r\n FlagSetComponent,\r\n CloseSaveButtonsComponent,\r\n PhysicalMeasurementSetComponent,\r\n],\r\n templateUrl: './drawing-tech-part.component.html',\r\n styleUrl: './drawing-tech-part.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DrawingTechPartComponent\r\n extends ModelEditorComponentBase<DrawingTechPart>\r\n implements OnInit\r\n{\r\n public material: FormControl<string>;\r\n public features: FormControl<string[]>;\r\n public measures: FormControl<PhysicalMeasurement[]>;\r\n public techniques: FormControl<string[]>;\r\n public colors: FormControl<string[]>;\r\n public note: FormControl<string | null>;\r\n\r\n // drawing-tech-materials\r\n public readonly materialEntries = signal<ThesaurusEntry[] | undefined>(\r\n undefined\r\n );\r\n // drawing-tech-features\r\n public readonly featureEntries = signal<ThesaurusEntry[] | undefined>(\r\n undefined\r\n );\r\n // drawing-tech-techniques\r\n public readonly techniqueEntries = signal<ThesaurusEntry[] | undefined>(\r\n undefined\r\n );\r\n // drawing-tech-colors\r\n public readonly colorEntries = signal<ThesaurusEntry[] | undefined>(\r\n undefined\r\n );\r\n // drawing-tech-size-units\r\n public readonly sizeUnitEntries = signal<ThesaurusEntry[] | undefined>(\r\n undefined\r\n );\r\n // drawing-tech-dim-tags\r\n public readonly dimTagEntries = signal<ThesaurusEntry[] | undefined>(\r\n undefined\r\n );\r\n // drawing-tech-measure-names\r\n public readonly measureNameEntries = signal<ThesaurusEntry[] | undefined>(\r\n undefined\r\n );\r\n\r\n // flags mapped from thesaurus entries\r\n public featureFlags = computed<Flag[]>(\r\n () => this.featureEntries()?.map((e) => entryToFlag(e)) || []\r\n );\r\n public techniqueFlags = computed<Flag[]>(\r\n () => this.techniqueEntries()?.map((e) => entryToFlag(e)) || []\r\n );\r\n public colorFlags = computed<Flag[]>(\r\n () => this.colorEntries()?.map((e) => entryToFlag(e)) || []\r\n );\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.material = formBuilder.control('', {\r\n nonNullable: true,\r\n validators: [Validators.required, Validators.maxLength(50)],\r\n });\r\n this.features = formBuilder.control([], { nonNullable: true });\r\n this.measures = formBuilder.control([], { nonNullable: true });\r\n this.techniques = formBuilder.control([], { nonNullable: true });\r\n this.colors = formBuilder.control([], { nonNullable: true });\r\n this.note = formBuilder.control(null, {\r\n validators: [Validators.maxLength(5000)],\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n material: this.material,\r\n features: this.features,\r\n measures: this.measures,\r\n techniques: this.techniques,\r\n colors: this.colors,\r\n note: this.note,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'drawing-tech-materials';\r\n if (this.hasThesaurus(key)) {\r\n this.materialEntries.set(thesauri[key].entries);\r\n } else {\r\n this.materialEntries.set(undefined);\r\n }\r\n key = 'drawing-tech-features';\r\n if (this.hasThesaurus(key)) {\r\n this.featureEntries.set(thesauri[key].entries);\r\n } else {\r\n this.featureEntries.set(undefined);\r\n }\r\n key = 'drawing-tech-techniques';\r\n if (this.hasThesaurus(key)) {\r\n this.techniqueEntries.set(thesauri[key].entries);\r\n } else {\r\n this.techniqueEntries.set(undefined);\r\n }\r\n key = 'drawing-tech-colors';\r\n if (this.hasThesaurus(key)) {\r\n this.colorEntries.set(thesauri[key].entries);\r\n } else {\r\n this.colorEntries.set(undefined);\r\n }\r\n key = 'drawing-tech-size-units';\r\n if (this.hasThesaurus(key)) {\r\n this.sizeUnitEntries.set(thesauri[key].entries);\r\n } else {\r\n this.sizeUnitEntries.set(undefined);\r\n }\r\n key = 'drawing-tech-dim-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.dimTagEntries.set(thesauri[key].entries);\r\n } else {\r\n this.dimTagEntries.set(undefined);\r\n }\r\n key = 'drawing-tech-measure-names';\r\n if (this.hasThesaurus(key)) {\r\n this.measureNameEntries.set(thesauri[key].entries);\r\n } else {\r\n this.measureNameEntries.set(undefined);\r\n }\r\n }\r\n\r\n private updateForm(part?: DrawingTechPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.material.setValue(part.material);\r\n this.features.setValue(part.features || []);\r\n this.measures.setValue(part.measures || []);\r\n this.techniques.setValue(part.techniques || []);\r\n this.colors.setValue(part.colors || []);\r\n this.note.setValue(part.note || null);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<DrawingTechPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): DrawingTechPart {\r\n let part = this.getEditedPart(DRAWING_TECH_PART_TYPEID) as DrawingTechPart;\r\n part.material = this.material.value || '';\r\n part.features = this.features.value?.length\r\n ? this.features.value\r\n : undefined;\r\n part.measures = this.measures.value?.length\r\n ? this.measures.value\r\n : undefined;\r\n part.techniques = this.techniques.value?.length\r\n ? this.techniques.value\r\n : undefined;\r\n part.colors = this.colors.value?.length ? this.colors.value : undefined;\r\n part.note = this.note.value?.trim() || undefined;\r\n return part;\r\n }\r\n\r\n public onFeatureCheckedIdsChange(ids: string[]): void {\r\n this.features.setValue(ids);\r\n this.features.markAsDirty();\r\n this.features.updateValueAndValidity();\r\n }\r\n\r\n public onTechniqueCheckedIdsChange(ids: string[]): void {\r\n this.techniques.setValue(ids);\r\n this.techniques.markAsDirty();\r\n this.techniques.updateValueAndValidity();\r\n }\r\n\r\n public onColorCheckedIdsChange(ids: string[]): void {\r\n this.colors.setValue(ids);\r\n this.colors.markAsDirty();\r\n this.colors.updateValueAndValidity();\r\n }\r\n\r\n public onMeasuresChange(measures: PhysicalMeasurement[]): void {\r\n this.measures.setValue(measures);\r\n this.measures.markAsDirty();\r\n this.measures.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Drawing Technique Part\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <!-- material (bound) -->\r\n @if (materialEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>material</mat-label>\r\n <mat-select [formControl]=\"material\">\r\n @for (e of materialEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ($any(material).errors?.required && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- material (free) -->\r\n <mat-form-field>\r\n <mat-label>material</mat-label>\r\n <input matInput [formControl]=\"material\" />\r\n @if ($any(material).errors?.required && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material required</mat-error>\r\n } @if ($any(material).errors?.maxLength && (material.dirty ||\r\n material.touched)) {\r\n <mat-error>material too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- features -->\r\n @if (featureEntries()?.length) {\r\n <div>\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"featureFlags()\"\r\n [checkedIds]=\"features.value\"\r\n (checkedIdsChange)=\"onFeatureCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- measurements -->\r\n <div class=\"mt\">\r\n <cadmus-mat-physical-measurement-set\r\n [nameEntries]=\"measureNameEntries()\"\r\n [unitEntries]=\"sizeUnitEntries() || []\"\r\n [dimTagEntries]=\"dimTagEntries()\"\r\n [measurements]=\"measures.value\"\r\n (measurementsChange)=\"onMeasuresChange($event)\"\r\n />\r\n </div>\r\n <!-- techniques-->\r\n @if (techniqueEntries()?.length) {\r\n <div class=\"mt\">\r\n <fieldset>\r\n <legend>techniques</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"techniqueFlags()\"\r\n [checkedIds]=\"techniques.value\"\r\n (checkedIdsChange)=\"onTechniqueCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- colors -->\r\n @if (colorEntries()?.length) {\r\n <div class=\"mt\">\r\n <fieldset>\r\n <legend>colors</legend>\r\n <cadmus-ui-flag-set\r\n [flags]=\"colorFlags()\"\r\n [checkedIds]=\"colors.value\"\r\n (checkedIdsChange)=\"onColorCheckedIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n <!-- note -->\r\n <mat-form-field class=\"long-text mt\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\" rows=\"3\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport { EditPartFeatureBase, PartEditorService } from '@myrmidon/cadmus-state';\r\nimport { CurrentItemBarComponent } from '@myrmidon/cadmus-item-editor';\r\n\r\nimport { DrawingTechPartComponent } from '../drawing-tech-part/drawing-tech-part.component';\r\n\r\n@Component({\r\n selector: 'cadmus-drawing-tech-part-feature',\r\n imports: [CurrentItemBarComponent, DrawingTechPartComponent],\r\n templateUrl: './drawing-tech-part-feature.component.html',\r\n styleUrl: './drawing-tech-part-feature.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DrawingTechPartFeatureComponent\r\n extends EditPartFeatureBase\r\n implements OnInit\r\n{\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n snackbar: MatSnackBar,\r\n itemService: ItemService,\r\n thesaurusService: ThesaurusService,\r\n editorService: PartEditorService\r\n ) {\r\n super(\r\n router,\r\n route,\r\n snackbar,\r\n itemService,\r\n thesaurusService,\r\n editorService\r\n );\r\n }\r\n\r\n protected override getReqThesauriIds(): string[] {\r\n return [\r\n 'drawing-tech-materials',\r\n 'drawing-tech-features',\r\n 'drawing-tech-techniques',\r\n 'drawing-tech-colors',\r\n 'drawing-tech-size-units',\r\n 'drawing-tech-dim-tags',\r\n 'drawing-tech-measure-names',\r\n ];\r\n }\r\n}\r\n","<cadmus-current-item-bar />\r\n<cadmus-drawing-tech-part\r\n [identity]=\"identity()\"\r\n [data]=\"$any(data())\"\r\n (dataChange)=\"save($event!.value!)\"\r\n (editorClose)=\"close()\"\r\n (dirtyChange)=\"onDirtyChange($event)\"\r\n/>\r\n","/*\r\n * Public API Surface of cadmus-part-ndpdrw-tech\r\n */\r\n\r\nexport * from './lib/drawing-tech-part';\r\nexport * from './lib/drawing-tech-part/drawing-tech-part.component';\r\nexport * from './lib/drawing-tech-part-feature/drawing-tech-part-feature.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@myrmidon/cadmus-part-ndpdrw-tech",
3
+ "version": "0.0.3",
4
+ "description": "Cadmus - NDP drawings techniques.",
5
+ "keywords": [
6
+ "Cadmus",
7
+ "NDP"
8
+ ],
9
+ "homepage": "https://github.com/vedph/cadmus-ndp-app",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/vedph/cadmus-ndp-app"
13
+ },
14
+ "author": {
15
+ "name": "Daniele Fusi"
16
+ },
17
+ "peerDependencies": {
18
+ "@angular/common": "^21.2.6",
19
+ "@angular/core": "^21.2.6",
20
+ "@angular/material": "^21.2.4",
21
+ "@myrmidon/auth-jwt-login": "^8.0.6",
22
+ "@myrmidon/cadmus-core": "^12.0.4",
23
+ "@myrmidon/cadmus-mat-physical-size": "^9.0.12",
24
+ "@myrmidon/cadmus-ui-flag-set": "^9.0.4"
25
+ },
26
+ "dependencies": {
27
+ "tslib": "^2.3.0"
28
+ },
29
+ "sideEffects": false,
30
+ "module": "fesm2022/myrmidon-cadmus-part-ndpdrw-tech.mjs",
31
+ "typings": "types/myrmidon-cadmus-part-ndpdrw-tech.d.ts",
32
+ "exports": {
33
+ "./package.json": {
34
+ "default": "./package.json"
35
+ },
36
+ ".": {
37
+ "types": "./types/myrmidon-cadmus-part-ndpdrw-tech.d.ts",
38
+ "default": "./fesm2022/myrmidon-cadmus-part-ndpdrw-tech.mjs"
39
+ }
40
+ },
41
+ "type": "module"
42
+ }
@@ -0,0 +1,161 @@
1
+ import { Part, ThesaurusEntry, EditedObject } from '@myrmidon/cadmus-core';
2
+ import { PhysicalMeasurement } from '@myrmidon/cadmus-mat-physical-size';
3
+ import * as _angular_core from '@angular/core';
4
+ import { OnInit } from '@angular/core';
5
+ import { FormControl, FormBuilder, FormGroup, UntypedFormGroup } from '@angular/forms';
6
+ import { AuthJwtService } from '@myrmidon/auth-jwt-login';
7
+ import { Flag } from '@myrmidon/cadmus-ui-flag-set';
8
+ import { ModelEditorComponentBase } from '@myrmidon/cadmus-ui';
9
+ import { MatSnackBar } from '@angular/material/snack-bar';
10
+ import { Router, ActivatedRoute } from '@angular/router';
11
+ import { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';
12
+ import { EditPartFeatureBase, PartEditorService } from '@myrmidon/cadmus-state';
13
+
14
+ /**
15
+ * The DrawingTech part model.
16
+ */
17
+ interface DrawingTechPart extends Part {
18
+ material: string;
19
+ features?: string[];
20
+ measures?: PhysicalMeasurement[];
21
+ techniques?: string[];
22
+ colors?: string[];
23
+ note?: string;
24
+ }
25
+ /**
26
+ * The type ID used to identify the DrawingTechPart type.
27
+ */
28
+ declare const DRAWING_TECH_PART_TYPEID = "it.vedph.ndp.drawing-tech";
29
+ /**
30
+ * JSON schema for the DrawingTech part.
31
+ * You can use the JSON schema tool at https://jsonschema.net/.
32
+ */
33
+ declare const DRAWING_TECH_PART_SCHEMA: {
34
+ $schema: string;
35
+ $id: string;
36
+ type: string;
37
+ title: string;
38
+ required: string[];
39
+ properties: {
40
+ timeCreated: {
41
+ type: string;
42
+ pattern: string;
43
+ };
44
+ creatorId: {
45
+ type: string;
46
+ };
47
+ timeModified: {
48
+ type: string;
49
+ pattern: string;
50
+ };
51
+ userId: {
52
+ type: string;
53
+ };
54
+ id: {
55
+ type: string;
56
+ pattern: string;
57
+ };
58
+ itemId: {
59
+ type: string;
60
+ pattern: string;
61
+ };
62
+ typeId: {
63
+ type: string;
64
+ pattern: string;
65
+ };
66
+ roleId: {
67
+ type: string[];
68
+ pattern: string;
69
+ };
70
+ material: {
71
+ type: string;
72
+ };
73
+ features: {
74
+ type: string;
75
+ items: {
76
+ type: string;
77
+ };
78
+ };
79
+ measures: {
80
+ type: string;
81
+ items: {
82
+ type: string;
83
+ properties: {
84
+ tag: {
85
+ type: string;
86
+ };
87
+ value: {
88
+ type: string;
89
+ };
90
+ unit: {
91
+ type: string;
92
+ };
93
+ };
94
+ required: string[];
95
+ };
96
+ };
97
+ techniques: {
98
+ type: string;
99
+ items: {
100
+ type: string;
101
+ };
102
+ };
103
+ colors: {
104
+ type: string;
105
+ items: {
106
+ type: string;
107
+ };
108
+ };
109
+ note: {
110
+ type: string;
111
+ };
112
+ };
113
+ };
114
+
115
+ /**
116
+ * Drawing techniques part editor component.
117
+ * Thesauri: drawing-tech-materials, drawing-tech-features, drawing-tech-techniques,
118
+ * drawing-tech-colors, drawing-tech-size-units, drawing-tech-dim-tags,
119
+ * drawing-tech-measure-names.
120
+ */
121
+ declare class DrawingTechPartComponent extends ModelEditorComponentBase<DrawingTechPart> implements OnInit {
122
+ material: FormControl<string>;
123
+ features: FormControl<string[]>;
124
+ measures: FormControl<PhysicalMeasurement[]>;
125
+ techniques: FormControl<string[]>;
126
+ colors: FormControl<string[]>;
127
+ note: FormControl<string | null>;
128
+ readonly materialEntries: _angular_core.WritableSignal<ThesaurusEntry[] | undefined>;
129
+ readonly featureEntries: _angular_core.WritableSignal<ThesaurusEntry[] | undefined>;
130
+ readonly techniqueEntries: _angular_core.WritableSignal<ThesaurusEntry[] | undefined>;
131
+ readonly colorEntries: _angular_core.WritableSignal<ThesaurusEntry[] | undefined>;
132
+ readonly sizeUnitEntries: _angular_core.WritableSignal<ThesaurusEntry[] | undefined>;
133
+ readonly dimTagEntries: _angular_core.WritableSignal<ThesaurusEntry[] | undefined>;
134
+ readonly measureNameEntries: _angular_core.WritableSignal<ThesaurusEntry[] | undefined>;
135
+ featureFlags: _angular_core.Signal<Flag[]>;
136
+ techniqueFlags: _angular_core.Signal<Flag[]>;
137
+ colorFlags: _angular_core.Signal<Flag[]>;
138
+ constructor(authService: AuthJwtService, formBuilder: FormBuilder);
139
+ ngOnInit(): void;
140
+ protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup;
141
+ private updateThesauri;
142
+ private updateForm;
143
+ protected onDataSet(data?: EditedObject<DrawingTechPart>): void;
144
+ protected getValue(): DrawingTechPart;
145
+ onFeatureCheckedIdsChange(ids: string[]): void;
146
+ onTechniqueCheckedIdsChange(ids: string[]): void;
147
+ onColorCheckedIdsChange(ids: string[]): void;
148
+ onMeasuresChange(measures: PhysicalMeasurement[]): void;
149
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawingTechPartComponent, never>;
150
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawingTechPartComponent, "cadmus-drawing-tech-part", never, {}, {}, never, never, true, never>;
151
+ }
152
+
153
+ declare class DrawingTechPartFeatureComponent extends EditPartFeatureBase implements OnInit {
154
+ constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService);
155
+ protected getReqThesauriIds(): string[];
156
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawingTechPartFeatureComponent, never>;
157
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawingTechPartFeatureComponent, "cadmus-drawing-tech-part-feature", never, {}, {}, never, never, true, never>;
158
+ }
159
+
160
+ export { DRAWING_TECH_PART_SCHEMA, DRAWING_TECH_PART_TYPEID, DrawingTechPartComponent, DrawingTechPartFeatureComponent };
161
+ export type { DrawingTechPart };