@meshmakers/octo-ui 3.3.780 → 3.3.800
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.
|
@@ -20,7 +20,7 @@ import { IconsModule, SVGIconModule, SVGIconComponent } from '@progress/kendo-an
|
|
|
20
20
|
import * as i5 from '@progress/kendo-angular-inputs';
|
|
21
21
|
import { InputsModule, TextBoxModule, KENDO_INPUTS } from '@progress/kendo-angular-inputs';
|
|
22
22
|
import { searchIcon, sortAscSmallIcon, sortDescSmallIcon, filterClearIcon, chevronRightIcon, chevronDownIcon, downloadIcon, fileIcon, folderIcon, calendarIcon, checkboxCheckedIcon, listUnorderedIcon, arrowRightIcon, arrowLeftIcon, chevronDoubleRightIcon, chevronDoubleLeftIcon, arrowUpIcon, arrowDownIcon, pencilIcon, trashIcon, copyIcon, plusIcon, minusIcon, dollarIcon, infoCircleIcon, gearIcon, eyeIcon, arrowRotateCcwIcon, folderMoreIcon, folderOpenIcon, locationsIcon, arrowRotateCwIcon, xIcon } from '@progress/kendo-svg-icons';
|
|
23
|
-
import { Subject, firstValueFrom, Subscription, of, forkJoin, takeUntil as takeUntil$1,
|
|
23
|
+
import { Subject, firstValueFrom, Subscription, of, forkJoin, takeUntil as takeUntil$1, catchError as catchError$1, map as map$1, defer, from, finalize, switchMap as switchMap$1, startWith } from 'rxjs';
|
|
24
24
|
import { debounceTime, distinctUntilChanged, map, switchMap, tap, catchError, takeUntil } from 'rxjs/operators';
|
|
25
25
|
import { LoaderModule } from '@progress/kendo-angular-indicators';
|
|
26
26
|
import { isCompositeFilterDescriptor } from '@progress/kendo-data-query';
|
|
@@ -242,8 +242,8 @@ class AttributeSortSelectorDialogComponent {
|
|
|
242
242
|
onCancel() {
|
|
243
243
|
this.windowRef.close();
|
|
244
244
|
}
|
|
245
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
246
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
245
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSortSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: AttributeSortSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-sort-selector-dialog", host: { attributes: { "data-component": "attribute-sort-selector" } }, ngImport: i0, template: `
|
|
247
247
|
<div class="attribute-sort-selector-container">
|
|
248
248
|
<!-- Filter Section -->
|
|
249
249
|
<div class="filter-container">
|
|
@@ -413,7 +413,7 @@ class AttributeSortSelectorDialogComponent {
|
|
|
413
413
|
</div>
|
|
414
414
|
`, isInline: true, styles: [":host{display:block;height:100%}.attribute-sort-selector-container{display:flex;flex-direction:column;height:100%;padding:16px 20px;box-sizing:border-box;gap:16px}.filter-container{display:flex;gap:12px;flex-shrink:0}.search-input{flex:1}.type-filter-dropdown{width:160px;flex-shrink:0}.lists-container{display:flex;gap:16px;flex:1;min-height:0}.list-section{flex:1;display:flex;flex-direction:column;min-height:0}.list-section h4,.sort-options-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600;flex-shrink:0}.attribute-grid{border-radius:4px;flex:1;min-height:200px}.attribute-grid ::ng-deep .k-grid-table tbody tr{cursor:pointer}.sort-options-section{width:120px;flex-shrink:0;display:flex;flex-direction:column;padding-top:32px}.sort-buttons{display:flex;flex-direction:row;gap:4px}.sort-button{flex:1;min-width:36px;height:36px;padding:0;display:flex;align-items:center;justify-content:center}.add-button{width:100%;margin-top:16px}.sort-display{display:flex;align-items:center;gap:6px}.sort-indicator{font-size:14px;font-weight:700;color:var(--kendo-color-primary, #ff6358)}.action-bar{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0;padding-top:8px;border-top:1px solid var(--kendo-color-border, #dee2e6)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: DropDownListModule }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: WindowModule }] });
|
|
415
415
|
}
|
|
416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSortSelectorDialogComponent, decorators: [{
|
|
417
417
|
type: Component,
|
|
418
418
|
args: [{ selector: 'mm-attribute-sort-selector-dialog', standalone: true, host: { 'data-component': 'attribute-sort-selector' }, imports: [
|
|
419
419
|
CommonModule,
|
|
@@ -661,10 +661,10 @@ class AttributeSortSelectorDialogService {
|
|
|
661
661
|
};
|
|
662
662
|
}
|
|
663
663
|
}
|
|
664
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
665
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
664
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSortSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
665
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSortSelectorDialogService });
|
|
666
666
|
}
|
|
667
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
667
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSortSelectorDialogService, decorators: [{
|
|
668
668
|
type: Injectable
|
|
669
669
|
}] });
|
|
670
670
|
|
|
@@ -848,8 +848,8 @@ class CkTypeSelectorDialogComponent {
|
|
|
848
848
|
this.windowRef.close(result);
|
|
849
849
|
}
|
|
850
850
|
}
|
|
851
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
852
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
851
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
852
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: CkTypeSelectorDialogComponent, isStandalone: true, selector: "mm-ck-type-selector-dialog", ngImport: i0, template: `
|
|
853
853
|
<div class="ck-type-selector-container">
|
|
854
854
|
<div class="filter-container">
|
|
855
855
|
<div class="filter-row">
|
|
@@ -931,7 +931,7 @@ class CkTypeSelectorDialogComponent {
|
|
|
931
931
|
</div>
|
|
932
932
|
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%}.ck-type-selector-container{display:flex;flex-direction:column;flex:1;min-height:0;padding:20px;box-sizing:border-box;gap:12px}.filter-container{margin-bottom:16px;flex-shrink:0}.filter-row{display:flex;gap:16px;align-items:flex-end}.filter-item{display:flex;flex-direction:column;gap:4px}.filter-item label{font-size:12px;font-weight:500}.filter-item.flex-grow{flex:1}.filter-item.filter-actions{flex-shrink:0}.filter-input{min-width:180px}.grid-container{flex:1;min-height:0;display:flex;flex-direction:column}.grid-container kendo-grid,.grid-container .type-grid{flex:1;min-height:200px}.type-grid{border-radius:4px}.type-grid ::ng-deep .k-grid-table tbody tr{cursor:pointer}.abstract-type{font-style:italic;opacity:.7}.final-type{font-weight:600}.type-badge{display:inline-block;font-size:10px;padding:1px 6px;border-radius:10px;margin-left:8px;text-transform:uppercase}.type-badge.abstract{background-color:var(--kendo-color-warning, #ffc107);color:var(--kendo-color-on-warning, #000);opacity:.8}.type-badge.final{background-color:var(--kendo-color-success, #28a745);color:var(--kendo-color-on-success, #fff);opacity:.8}.selection-info{margin-top:12px;padding:8px 12px;background:var(--kendo-color-success-subtle, #d4edda);border:1px solid var(--kendo-color-success, #28a745);border-radius:4px;font-size:14px;flex-shrink:0}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;padding:8px 20px 0;flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "ngmodule", type: WindowModule }] });
|
|
933
933
|
}
|
|
934
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
934
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeSelectorDialogComponent, decorators: [{
|
|
935
935
|
type: Component,
|
|
936
936
|
args: [{ selector: 'mm-ck-type-selector-dialog', standalone: true, imports: [
|
|
937
937
|
CommonModule,
|
|
@@ -1087,10 +1087,10 @@ class CkTypeSelectorDialogService {
|
|
|
1087
1087
|
};
|
|
1088
1088
|
}
|
|
1089
1089
|
}
|
|
1090
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1091
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1090
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1091
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeSelectorDialogService });
|
|
1092
1092
|
}
|
|
1093
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1093
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeSelectorDialogService, decorators: [{
|
|
1094
1094
|
type: Injectable
|
|
1095
1095
|
}] });
|
|
1096
1096
|
|
|
@@ -1466,10 +1466,10 @@ class PropertyConverterService {
|
|
|
1466
1466
|
const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
|
|
1467
1467
|
return isoDateRegex.test(value) && !isNaN(Date.parse(value));
|
|
1468
1468
|
}
|
|
1469
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1470
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1469
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PropertyConverterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1470
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PropertyConverterService, providedIn: 'root' });
|
|
1471
1471
|
}
|
|
1472
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1472
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PropertyConverterService, decorators: [{
|
|
1473
1473
|
type: Injectable,
|
|
1474
1474
|
args: [{
|
|
1475
1475
|
providedIn: 'root'
|
|
@@ -1812,8 +1812,8 @@ class PropertyValueDisplayComponent {
|
|
|
1812
1812
|
this.binaryDownload.emit(event);
|
|
1813
1813
|
}
|
|
1814
1814
|
}
|
|
1815
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1816
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1815
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PropertyValueDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1816
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PropertyValueDisplayComponent, isStandalone: true, selector: "mm-property-value-display", inputs: { value: "value", type: "type", displayMode: "displayMode" }, outputs: { binaryDownload: "binaryDownload" }, ngImport: i0, template: `
|
|
1817
1817
|
<div class="property-value-display" [ngClass]="'type-' + type.toLowerCase()">
|
|
1818
1818
|
|
|
1819
1819
|
@if (expandableRecord) {
|
|
@@ -1913,7 +1913,7 @@ class PropertyValueDisplayComponent {
|
|
|
1913
1913
|
</div>
|
|
1914
1914
|
`, isInline: true, styles: [".property-value-display{display:flex;align-items:flex-start;gap:8px;width:100%;min-width:0}.text-display,.default-display{word-break:break-word;white-space:pre-wrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.json-display{font-family:Roboto Mono,monospace;font-size:.8em;white-space:pre-wrap;word-break:break-word;margin:0;flex:1;min-width:0}.type-indicator{font-family:Roboto Mono,monospace;font-size:.7em;padding:1px 5px;background:var(--kendo-color-base-subtle);border-radius:3px;color:var(--kendo-color-subtle);white-space:nowrap;flex-shrink:0}.expandable-record{width:100%}.record-header{display:flex;align-items:center;gap:6px;cursor:pointer;padding:2px 0;border-radius:3px;transition:background-color .15s ease}.record-header:hover{background-color:var(--kendo-color-base-subtle, rgba(0,0,0,.04))}.expand-icon{flex-shrink:0;width:14px;height:14px;color:var(--kendo-color-subtle)}.record-summary{color:var(--kendo-color-subtle);font-size:.85em;font-style:italic;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.record-content{margin-left:20px;padding-left:8px;border-left:1px solid var(--kendo-color-border, #dee2e6)}.array-item{margin:4px 0}.array-index{font-family:Roboto Mono,monospace;font-size:.8em;color:var(--kendo-color-subtle)}.nested-properties{margin-left:8px}.nested-property{display:flex;align-items:flex-start;gap:8px;padding:2px 0}.property-key{font-weight:500;white-space:nowrap;flex-shrink:0;color:var(--kendo-color-subtle);font-size:.85em}.binary-linked-display{display:flex;align-items:center;gap:12px;width:100%}.binary-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.filename{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size{font-size:.85em;color:var(--kendo-color-subtle);flex-shrink:0}.content-type{font-size:.75em;padding:2px 6px;background:var(--kendo-color-base-subtle);border-radius:3px;color:var(--kendo-color-subtle);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: PropertyValueDisplayComponent, selector: "mm-property-value-display", inputs: ["value", "type", "displayMode"], outputs: ["binaryDownload"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1915
1915
|
}
|
|
1916
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1916
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PropertyValueDisplayComponent, decorators: [{
|
|
1917
1917
|
type: Component,
|
|
1918
1918
|
args: [{ selector: 'mm-property-value-display', standalone: true, imports: [CommonModule, SVGIconModule, ButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
1919
1919
|
<div class="property-value-display" [ngClass]="'type-' + type.toLowerCase()">
|
|
@@ -2166,8 +2166,8 @@ class PropertyGridComponent {
|
|
|
2166
2166
|
onBinaryDownload(event) {
|
|
2167
2167
|
this.binaryDownload.emit(event);
|
|
2168
2168
|
}
|
|
2169
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2170
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
2169
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PropertyGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2170
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PropertyGridComponent, isStandalone: true, selector: "mm-property-grid", inputs: { data: "data", config: "config", showTypeColumn: "showTypeColumn" }, outputs: { propertyChange: "propertyChange", saveRequested: "saveRequested", binaryDownload: "binaryDownload" }, usesOnChanges: true, ngImport: i0, template: `
|
|
2171
2171
|
<div class="mm-property-grid" [style.height]="config.height || '400px'">
|
|
2172
2172
|
|
|
2173
2173
|
@if (config.showSearch) {
|
|
@@ -2251,7 +2251,7 @@ class PropertyGridComponent {
|
|
|
2251
2251
|
</div>
|
|
2252
2252
|
`, isInline: true, styles: [".mm-property-grid{display:flex;flex-direction:column;border:1px solid var(--kendo-color-border);border-radius:4px;overflow:hidden}.search-toolbar{padding:8px;border-bottom:1px solid var(--kendo-color-border);background:var(--kendo-color-base-subtle)}.property-grid{flex:1;border:none}.property-name-cell{display:flex;align-items:center;gap:8px;min-height:24px}.type-icon{width:16px;height:16px;opacity:.7}.property-info{display:flex;align-items:center;gap:4px;flex:1}.property-name{font-weight:500}.required-indicator{color:var(--kendo-color-error);font-weight:700}.readonly-indicator{font-size:12px;opacity:.7}.property-editor{width:100%;min-width:200px}.validation-error{color:var(--kendo-color-error);font-size:.8em;margin-top:4px}.type-badge{font-size:.75em;padding:2px 6px;border-radius:3px;text-transform:uppercase;font-weight:500;background:var(--kendo-color-base-subtle);color:var(--kendo-color-on-base)}.grid-toolbar{padding:8px;border-top:1px solid var(--kendo-color-border);background:var(--kendo-color-base-subtle);display:flex;align-items:center;gap:8px}.changes-indicator{margin-left:auto;font-size:.9em;color:var(--kendo-color-primary);font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: PropertyValueDisplayComponent, selector: "mm-property-value-display", inputs: ["value", "type", "displayMode"], outputs: ["binaryDownload"] }] });
|
|
2253
2253
|
}
|
|
2254
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PropertyGridComponent, decorators: [{
|
|
2255
2255
|
type: Component,
|
|
2256
2256
|
args: [{ selector: 'mm-property-grid', standalone: true, imports: [
|
|
2257
2257
|
CommonModule,
|
|
@@ -2622,8 +2622,8 @@ class CkTypeSelectorInputComponent {
|
|
|
2622
2622
|
this.selectCkType(result.selectedCkType);
|
|
2623
2623
|
}
|
|
2624
2624
|
}
|
|
2625
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2626
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
2625
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeSelectorInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2626
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: CkTypeSelectorInputComponent, isStandalone: true, selector: "mm-ck-type-selector-input", inputs: { placeholder: "placeholder", minSearchLength: "minSearchLength", maxResults: "maxResults", debounceMs: "debounceMs", ckModelIds: "ckModelIds", allowAbstract: "allowAbstract", dialogTitle: "dialogTitle", advancedSearchLabel: "advancedSearchLabel", derivedFromRtCkTypeId: "derivedFromRtCkTypeId", disabled: "disabled", required: "required" }, outputs: { ckTypeSelected: "ckTypeSelected", ckTypeCleared: "ckTypeCleared" }, providers: [
|
|
2627
2627
|
{
|
|
2628
2628
|
provide: NG_VALUE_ACCESSOR,
|
|
2629
2629
|
useExisting: forwardRef(() => CkTypeSelectorInputComponent),
|
|
@@ -2690,7 +2690,7 @@ class CkTypeSelectorInputComponent {
|
|
|
2690
2690
|
</div>
|
|
2691
2691
|
`, isInline: true, styles: [":host{display:block;width:100%}.ck-type-select-wrapper{position:relative;display:flex;align-items:center;width:100%;gap:4px}.ck-type-select-wrapper.disabled{opacity:.6;pointer-events:none}.ck-type-autocomplete{flex:1;min-width:0}.dialog-button{flex-shrink:0;height:30px;width:30px;padding:0;display:flex;align-items:center;justify-content:center}.ck-type-item{padding:4px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-data-message{padding:8px 12px;color:var(--kendo-color-subtle);font-style:italic;text-align:center}.advanced-search-footer{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;color:var(--kendo-color-primary);border-top:1px solid var(--kendo-color-border);background:var(--kendo-color-surface-alt);transition:background-color .2s}.advanced-search-footer:hover{background:var(--kendo-color-base-hover)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i4.AutoCompleteComponent, selector: "kendo-autocomplete", inputs: ["highlightFirst", "showStickyHeader", "focusableId", "data", "value", "valueField", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "clearButton", "suggest", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoAutoComplete"] }, { kind: "directive", type: i4.FooterTemplateDirective, selector: "[kendoDropDownListFooterTemplate],[kendoComboBoxFooterTemplate],[kendoDropDownTreeFooterTemplate],[kendoMultiColumnComboBoxFooterTemplate],[kendoAutoCompleteFooterTemplate],[kendoMultiSelectFooterTemplate],[kendoMultiSelectTreeFooterTemplate]" }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "directive", type: i4.NoDataTemplateDirective, selector: "[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]" }, { kind: "ngmodule", type: LoaderModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: IconsModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: SVGIconModule }] });
|
|
2692
2692
|
}
|
|
2693
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2693
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeSelectorInputComponent, decorators: [{
|
|
2694
2694
|
type: Component,
|
|
2695
2695
|
args: [{ selector: 'mm-ck-type-selector-input', standalone: true, imports: [
|
|
2696
2696
|
CommonModule,
|
|
@@ -3143,8 +3143,8 @@ class AttributeSelectorDialogComponent {
|
|
|
3143
3143
|
this.sortAvailableAttributes();
|
|
3144
3144
|
this.updateGrids();
|
|
3145
3145
|
}
|
|
3146
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3147
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
3146
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3147
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: AttributeSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-selector-dialog", ngImport: i0, template: `
|
|
3148
3148
|
<div class="attribute-selector-container">
|
|
3149
3149
|
<div class="filter-container">
|
|
3150
3150
|
<kendo-textbox
|
|
@@ -3356,7 +3356,7 @@ class AttributeSelectorDialogComponent {
|
|
|
3356
3356
|
</div>
|
|
3357
3357
|
`, isInline: true, styles: [":host{display:block;height:100%}.attribute-selector-container{display:flex;flex-direction:column;height:100%;padding:16px 20px;box-sizing:border-box;gap:16px}.filter-container{display:flex;gap:12px;flex-shrink:0}.search-input{flex:1}.type-filter-dropdown{width:160px;flex-shrink:0}.options-container{display:flex;align-items:center;gap:8px;font-size:.85rem;flex-shrink:0}.option-label{cursor:pointer}.depth-input{width:90px}.lists-container{display:flex;gap:16px;flex:1;min-height:0}.list-section{flex:1;display:flex;flex-direction:column;min-height:0}.list-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600;flex-shrink:0}.attribute-grid{border-radius:4px;flex:1;min-height:200px}.attribute-grid ::ng-deep .k-grid-table tbody tr{cursor:pointer}.action-buttons{display:flex;flex-direction:column;gap:8px;justify-content:center;padding:32px 8px 0}.separator{height:1px;background-color:var(--kendo-color-border, #dee2e6);margin:8px 0}.order-buttons{display:flex;flex-direction:column;gap:8px;justify-content:center;padding:32px 8px 0}.order-number{color:var(--kendo-color-primary, #ff6358);font-weight:600;margin-right:8px;min-width:24px;display:inline-block}.single-select-container{flex:1;min-height:0;display:flex;flex-direction:column}.single-select-container .attribute-grid{flex:1}.action-bar{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0;padding-top:8px;border-top:1px solid var(--kendo-color-border, #dee2e6)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: i5.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "directive", type: i5.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: DropDownListModule }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: WindowModule }] });
|
|
3358
3358
|
}
|
|
3359
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSelectorDialogComponent, decorators: [{
|
|
3360
3360
|
type: Component,
|
|
3361
3361
|
args: [{ selector: 'mm-attribute-selector-dialog', standalone: true, imports: [
|
|
3362
3362
|
CommonModule,
|
|
@@ -3655,10 +3655,10 @@ class AttributeSelectorDialogService {
|
|
|
3655
3655
|
};
|
|
3656
3656
|
}
|
|
3657
3657
|
}
|
|
3658
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3659
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
3658
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3659
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSelectorDialogService, providedIn: 'root' });
|
|
3660
3660
|
}
|
|
3661
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3661
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeSelectorDialogService, decorators: [{
|
|
3662
3662
|
type: Injectable,
|
|
3663
3663
|
args: [{
|
|
3664
3664
|
providedIn: 'root'
|
|
@@ -3802,8 +3802,8 @@ class RuntimeEntityVariableDialogComponent {
|
|
|
3802
3802
|
return true;
|
|
3803
3803
|
return false;
|
|
3804
3804
|
}
|
|
3805
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3806
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
3805
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeEntityVariableDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3806
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: RuntimeEntityVariableDialogComponent, isStandalone: true, selector: "mm-runtime-entity-variable-dialog", ngImport: i0, template: `
|
|
3807
3807
|
<div class="dialog-content">
|
|
3808
3808
|
<div class="form-row">
|
|
3809
3809
|
<label class="form-label">CK Type</label>
|
|
@@ -3885,7 +3885,7 @@ class RuntimeEntityVariableDialogComponent {
|
|
|
3885
3885
|
</div>
|
|
3886
3886
|
`, isInline: true, styles: [".dialog-content{display:flex;flex-direction:column;gap:16px;padding:16px 20px}.form-row{display:flex;flex-direction:column;gap:4px}.form-label{font-size:12px;font-weight:600;color:var(--kendo-color-subtle, #666)}.mappings-grid{border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px;background:var(--kendo-color-surface-alt, #fafafa)}.grid-header{display:grid;grid-template-columns:1fr 1fr 100px 40px;gap:.5rem;padding:.5rem .75rem;background:var(--kendo-color-surface, #f5f5f5);border-bottom:1px solid var(--kendo-color-border, #e0e0e0);font-size:12px;font-weight:600;color:var(--kendo-color-subtle, #666)}.grid-row{display:grid;grid-template-columns:1fr 1fr 100px 40px;gap:.5rem;padding:.5rem .75rem;align-items:start;border-bottom:1px solid var(--kendo-color-border, #e0e0e0)}.grid-row:last-child{border-bottom:none}.col-name{display:flex;flex-direction:column;gap:2px}.col-path,.col-type{font-size:13px;padding-top:6px;color:var(--kendo-color-on-app-surface, #424242)}.col-actions{display:flex;justify-content:center;padding-top:2px}.error-text{font-size:11px;color:var(--kendo-color-error, #f44336)}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:8px;border-top:1px solid var(--kendo-color-border, #e0e0e0)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "ngmodule", type: GridModule }, { kind: "ngmodule", type: IconsModule }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }] });
|
|
3887
3887
|
}
|
|
3888
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3888
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeEntityVariableDialogComponent, decorators: [{
|
|
3889
3889
|
type: Component,
|
|
3890
3890
|
args: [{ selector: 'mm-runtime-entity-variable-dialog', standalone: true, imports: [
|
|
3891
3891
|
CommonModule,
|
|
@@ -4020,10 +4020,10 @@ class RuntimeEntityVariableDialogService {
|
|
|
4020
4020
|
return { confirmed: false };
|
|
4021
4021
|
}
|
|
4022
4022
|
}
|
|
4023
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
4024
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
4023
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeEntityVariableDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4024
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeEntityVariableDialogService, providedIn: 'root' });
|
|
4025
4025
|
}
|
|
4026
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
4026
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeEntityVariableDialogService, decorators: [{
|
|
4027
4027
|
type: Injectable,
|
|
4028
4028
|
args: [{
|
|
4029
4029
|
providedIn: 'root'
|
|
@@ -4209,8 +4209,8 @@ class EntityIdInfoComponent {
|
|
|
4209
4209
|
this.notificationService.showError('Failed to copy to clipboard');
|
|
4210
4210
|
}
|
|
4211
4211
|
}
|
|
4212
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
4213
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
4212
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityIdInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4213
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: EntityIdInfoComponent, isStandalone: true, selector: "mm-entity-id-info", inputs: { rtId: "rtId", rtCkTypeId: "rtCkTypeId", ckTypeId: "ckTypeId" }, ngImport: i0, template: `
|
|
4214
4214
|
<kendo-dropdownbutton
|
|
4215
4215
|
[data]="copyOptions"
|
|
4216
4216
|
[svgIcon]="copyIcon"
|
|
@@ -4228,7 +4228,7 @@ class EntityIdInfoComponent {
|
|
|
4228
4228
|
</kendo-dropdownbutton>
|
|
4229
4229
|
`, isInline: true, styles: [":host{display:inline-block}.copy-item{display:flex;flex-direction:column;gap:2px;padding:8px 12px;width:100%}.copy-label{font-size:.7rem;font-weight:600;color:var(--kendo-color-primary, #64ceb9);text-transform:uppercase;letter-spacing:.5px}.copy-value{font-family:Roboto Mono,monospace;font-size:.75rem;color:var(--kendo-color-subtle, #9292a6);word-break:break-all}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i3$1.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { kind: "directive", type: i3$1.ButtonItemTemplateDirective, selector: "[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]" }, { kind: "ngmodule", type: SVGIconModule }] });
|
|
4230
4230
|
}
|
|
4231
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
4231
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityIdInfoComponent, decorators: [{
|
|
4232
4232
|
type: Component,
|
|
4233
4233
|
args: [{ selector: 'mm-entity-id-info', standalone: true, imports: [
|
|
4234
4234
|
CommonModule,
|
|
@@ -4754,8 +4754,8 @@ class FieldFilterEditorComponent {
|
|
|
4754
4754
|
}
|
|
4755
4755
|
return values;
|
|
4756
4756
|
}
|
|
4757
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
4758
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
4757
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: FieldFilterEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4758
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: FieldFilterEditorComponent, isStandalone: true, selector: "mm-field-filter-editor", inputs: { availableAttributes: "availableAttributes", ckTypeId: "ckTypeId", hideNavigationProperties: "hideNavigationProperties", attributePaths: "attributePaths", enableVariables: "enableVariables", availableVariables: "availableVariables", filters: "filters" }, outputs: { filtersChange: "filtersChange" }, usesOnChanges: true, ngImport: i0, template: `
|
|
4759
4759
|
<div class="field-filter-editor">
|
|
4760
4760
|
@if (ckTypeId && !hideNavigationProperties) {
|
|
4761
4761
|
<div class="attribute-options">
|
|
@@ -5054,7 +5054,7 @@ class FieldFilterEditorComponent {
|
|
|
5054
5054
|
</div>
|
|
5055
5055
|
`, isInline: true, styles: [".field-filter-editor{display:flex;flex-direction:column;gap:10px}.attribute-options{display:flex;align-items:center;gap:16px;font-size:.85rem}.inline-checkbox{display:flex;align-items:center;gap:6px;cursor:pointer;font-weight:400}.inline-field{display:flex;align-items:center;gap:6px;font-weight:400}.depth-input{width:80px}.loading-hint{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.toolbar{display:flex;gap:10px;margin-bottom:5px}.filter-grid{border:1px solid #d5d5d5}.filter-grid ::ng-deep .k-grid-header .k-header{font-weight:600}.checkbox-column{text-align:center}.attribute-dropdown,.operator-dropdown,.attribute-input,.value-input{width:100%}.attribute-item{display:flex;justify-content:space-between;align-items:center;width:100%}.attribute-path{flex:1}.attribute-type{font-size:11px;color:#888;margin-left:8px;padding:2px 6px;background:#f0f0f0;border-radius:3px}.empty-state{padding:40px;text-align:center;border:1px dashed;border-radius:8px;font-family:Montserrat,sans-serif;font-size:.9rem}.empty-state p{margin:0}.value-cell{display:flex;gap:4px;align-items:center}.value-cell .value-input{flex:1}.variable-toggle{flex-shrink:0}.variable-item{display:flex;flex-direction:column;gap:2px}.variable-name{font-family:monospace;font-weight:500}.variable-label{font-size:11px;color:var(--kendo-color-subtle, #888)}.variable-value{font-family:monospace;color:var(--kendo-color-primary, #0d6efd)}.variable-placeholder{color:var(--kendo-color-subtle, #888)}.variable-dropdown ::ng-deep .k-input-value-text{font-family:monospace}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i3.HeaderTemplateDirective, selector: "[kendoGridHeaderTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: i4.ValueTemplateDirective, selector: "[kendoDropDownListValueTemplate],[kendoDropDownTreeValueTemplate]" }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i5.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "directive", type: i5.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: DateInputsModule }, { kind: "component", type: i7.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["focusableId", "weekDaysFormat", "showOtherMonthDays", "value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "adaptiveTitle", "adaptiveSubtitle", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "clearButton", "autoFill", "adaptiveMode", "inputAttributes", "defaultTab", "size", "rounded", "fillMode", "headerTemplate", "footerTemplate", "footer"], outputs: ["valueChange", "open", "close", "focus", "blur", "escape"], exportAs: ["kendo-datetimepicker"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: PopupModule }, { kind: "ngmodule", type: IntlModule }] });
|
|
5056
5056
|
}
|
|
5057
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5057
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: FieldFilterEditorComponent, decorators: [{
|
|
5058
5058
|
type: Component,
|
|
5059
5059
|
args: [{ selector: 'mm-field-filter-editor', standalone: true, imports: [
|
|
5060
5060
|
CommonModule,
|
|
@@ -5399,8 +5399,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
5399
5399
|
*/
|
|
5400
5400
|
class OctoLoaderComponent {
|
|
5401
5401
|
size = 'medium';
|
|
5402
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
5403
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
5402
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: OctoLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5403
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: OctoLoaderComponent, isStandalone: true, selector: "mm-octo-loader", inputs: { size: "size" }, ngImport: i0, template: `
|
|
5404
5404
|
<div class="octo-loader" [class.octo-loader--small]="size === 'small'" [class.octo-loader--medium]="size === 'medium'">
|
|
5405
5405
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-22 -8 112 118" class="octo-loader__svg" overflow="visible">
|
|
5406
5406
|
<!-- Orbit track -->
|
|
@@ -5491,7 +5491,7 @@ class OctoLoaderComponent {
|
|
|
5491
5491
|
</div>
|
|
5492
5492
|
`, isInline: true, styles: [":host{display:inline-flex;align-items:center;justify-content:center;color:var(--kendo-color-primary, #64ceb9)}.octo-loader{display:inline-flex;align-items:center;justify-content:center}.octo-loader--small .octo-loader__svg{width:24px;height:24px}.octo-loader--medium .octo-loader__svg{width:48px;height:48px}.octo-arm--ol{transform-origin:7px 52.74px;animation:octo-wiggle-outer 1.2s ease-in-out infinite}.octo-arm--or{transform-origin:56px 52.74px;animation:octo-wiggle-outer 1.2s ease-in-out infinite;animation-delay:-.6s}.octo-leg--left{transform-origin:21.8px 52.74px;animation:octo-wiggle-inner 1s ease-in-out infinite}.octo-leg--center{transform-origin:31.5px 52.74px;animation:octo-wiggle-inner 1s ease-in-out infinite reverse;animation-delay:-.33s}.octo-leg--right{transform-origin:46px 52.74px;animation:octo-wiggle-inner 1s ease-in-out infinite;animation-delay:-.66s}@keyframes octo-wiggle-inner{0%,to{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}@keyframes octo-wiggle-outer{0%,to{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}.octo-orbit{stroke:var(--neo-cyan, #00a8dc)}.octo-data{fill:var(--neo-cyan, #00a8dc)}\n"] });
|
|
5493
5493
|
}
|
|
5494
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: OctoLoaderComponent, decorators: [{
|
|
5495
5495
|
type: Component,
|
|
5496
5496
|
args: [{ selector: 'mm-octo-loader', standalone: true, template: `
|
|
5497
5497
|
<div class="octo-loader" [class.octo-loader--small]="size === 'small'" [class.octo-loader--medium]="size === 'medium'">
|
|
@@ -5612,10 +5612,10 @@ class GetBinaryInfoDtoGQL extends i1$2.Query {
|
|
|
5612
5612
|
constructor(apollo) {
|
|
5613
5613
|
super(apollo);
|
|
5614
5614
|
}
|
|
5615
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
5616
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
5615
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetBinaryInfoDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5616
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetBinaryInfoDtoGQL, providedIn: 'root' });
|
|
5617
5617
|
}
|
|
5618
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5618
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetBinaryInfoDtoGQL, decorators: [{
|
|
5619
5619
|
type: Injectable,
|
|
5620
5620
|
args: [{
|
|
5621
5621
|
providedIn: 'root'
|
|
@@ -5658,10 +5658,10 @@ class GetRuntimeEntityAssociationsByIdDtoGQL extends i1$2.Query {
|
|
|
5658
5658
|
constructor(apollo) {
|
|
5659
5659
|
super(apollo);
|
|
5660
5660
|
}
|
|
5661
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
5662
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
5661
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntityAssociationsByIdDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5662
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntityAssociationsByIdDtoGQL, providedIn: 'root' });
|
|
5663
5663
|
}
|
|
5664
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5664
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntityAssociationsByIdDtoGQL, decorators: [{
|
|
5665
5665
|
type: Injectable,
|
|
5666
5666
|
args: [{
|
|
5667
5667
|
providedIn: 'root'
|
|
@@ -5746,15 +5746,15 @@ class EntityAssociationsDataSourceDirective extends OctoGraphQlDataSource {
|
|
|
5746
5746
|
return new FetchResultTyped(transformedItems, totalCount);
|
|
5747
5747
|
}));
|
|
5748
5748
|
}
|
|
5749
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
5750
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
5749
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityAssociationsDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5750
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: EntityAssociationsDataSourceDirective, isStandalone: true, selector: "[mmEntityAssociationsDataSource]", providers: [
|
|
5751
5751
|
{
|
|
5752
5752
|
provide: DataSourceBase,
|
|
5753
5753
|
useExisting: forwardRef(() => EntityAssociationsDataSourceDirective),
|
|
5754
5754
|
},
|
|
5755
5755
|
], exportAs: ["mmEntityAssociationsDataSource"], usesInheritance: true, ngImport: i0 });
|
|
5756
5756
|
}
|
|
5757
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5757
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityAssociationsDataSourceDirective, decorators: [{
|
|
5758
5758
|
type: Directive,
|
|
5759
5759
|
args: [{
|
|
5760
5760
|
selector: '[mmEntityAssociationsDataSource]',
|
|
@@ -6110,8 +6110,8 @@ class EntityDetailViewComponent {
|
|
|
6110
6110
|
});
|
|
6111
6111
|
}
|
|
6112
6112
|
}
|
|
6113
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
6114
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
6113
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityDetailViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6114
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityDetailViewComponent, isStandalone: true, selector: "mm-entity-detail-view", inputs: { entity: "entity", loading: "loading", error: "error", showHeader: "showHeader", messages: "messages" }, outputs: { retry: "retry", propertyChange: "propertyChange", navigateToEntity: "navigateToEntity" }, viewQueries: [{ propertyName: "associationsDataSource", first: true, predicate: ["associationsDir"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
6115
6115
|
@if (loading) {
|
|
6116
6116
|
<div class="loading-state">
|
|
6117
6117
|
<p>{{ _messages.loadingEntityDetails }}</p>
|
|
@@ -6325,7 +6325,7 @@ class EntityDetailViewComponent {
|
|
|
6325
6325
|
}
|
|
6326
6326
|
`, isInline: true, styles: [".loading-state,.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;text-align:center;min-height:200px}.loading-state .error-message,.error-state .error-message{margin-bottom:16px;font-family:Roboto,sans-serif;color:#e74c3c}.entity-content{flex:1;display:flex;flex-direction:column;gap:24px}.entity-content .basic-info-card{padding:20px 24px;background:linear-gradient(180deg,var(--iron-navy),var(--surface-elevated));border:1px solid var(--octo-mint-30);border-radius:4px 16px;position:relative;box-shadow:0 4px 20px #0006,0 0 15px var(--octo-mint-08)}.entity-content .basic-info-card:before{content:\"\";position:absolute;top:0;left:0;width:4px;height:100%;background:linear-gradient(180deg,var(--octo-mint),var(--neo-cyan),var(--royal-violet));box-shadow:0 0 10px var(--octo-mint-50);border-radius:4px 0 0 4px}.entity-content .basic-info-card .basic-info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px}.entity-content .basic-info-card .basic-info-grid .info-item{display:flex;flex-direction:column;gap:8px}.entity-content .basic-info-card .basic-info-grid .info-item label{font-family:Montserrat,sans-serif;font-weight:600;font-size:.75rem;letter-spacing:.5px;text-transform:uppercase;color:var(--octo-mint-80)}.entity-content .basic-info-card .basic-info-grid .info-item .value{font-family:Roboto Mono,monospace;font-size:.875rem;color:rgba(var(--octo-text-color),.9);word-break:break-word;background:var(--deep-sea-40);padding:8px 12px;border-radius:4px;border:1px solid var(--octo-mint-15)}.entity-content .basic-info-card .basic-info-grid .info-item.with-action .value-with-action{display:flex;align-items:center}.entity-content .basic-info-card .basic-info-grid .info-item.with-action .value-with-action .value{flex:1;font-family:Roboto Mono,monospace;font-size:.875rem;color:rgba(var(--octo-text-color),.9);word-break:break-word}.entity-content .entity-tabs{flex:1;min-height:400px;background:linear-gradient(180deg,var(--iron-navy),var(--surface-elevated));border:1px solid var(--octo-mint-30);border-radius:4px 16px;overflow:hidden;position:relative}.entity-content .entity-tabs:before{content:\"\";position:absolute;top:0;left:0;width:4px;height:100%;background:linear-gradient(180deg,var(--octo-mint),var(--neo-cyan),var(--royal-violet));box-shadow:0 0 10px var(--octo-mint-50);z-index:1}.entity-content .entity-tabs ::ng-deep .k-tabstrip{background:transparent}.entity-content .entity-tabs ::ng-deep .k-tabstrip .k-tabstrip-items-wrapper{background:linear-gradient(90deg,var(--octo-mint-10),transparent);border-bottom:1px solid var(--octo-mint-20);padding-left:20px}.entity-content .entity-tabs ::ng-deep .k-tabstrip .k-tabstrip-items-wrapper .k-tabstrip-items .k-item{background:transparent;border:none;color:rgba(var(--octo-text-color),.7);font-family:Montserrat,sans-serif;font-weight:600;font-size:.8rem;letter-spacing:.5px;text-transform:uppercase;padding:12px 20px;margin-right:4px;border-radius:4px 4px 0 0;transition:all .2s ease}.entity-content .entity-tabs ::ng-deep .k-tabstrip .k-tabstrip-items-wrapper .k-tabstrip-items .k-item:hover{background:var(--octo-mint-10);color:var(--octo-mint)}.entity-content .entity-tabs ::ng-deep .k-tabstrip .k-tabstrip-items-wrapper .k-tabstrip-items .k-item.k-active{background:linear-gradient(180deg,var(--octo-mint-20),transparent);color:var(--octo-mint);border-bottom:2px solid var(--octo-mint);box-shadow:0 0 10px var(--octo-mint-30)}.entity-content .entity-tabs ::ng-deep .k-tabstrip .k-tabstrip-content{background:transparent;border:none;padding:0}.entity-content .entity-tabs .tab-content{padding:20px 24px;height:100%;overflow-y:auto}.entity-content .entity-tabs .tab-content .empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 40px;text-align:center}.entity-content .entity-tabs .tab-content .empty-state kendo-svgicon{font-size:64px;margin-bottom:20px;color:var(--octo-mint-40);text-shadow:0 0 20px var(--octo-mint-30)}.entity-content .entity-tabs .tab-content .empty-state p{margin:0;font-family:Montserrat,sans-serif;font-size:.9rem;color:rgba(var(--octo-text-color),.5);letter-spacing:.5px}.entity-content .entity-tabs .tab-content.properties-tab{padding:0;height:100%}.entity-content .entity-tabs .tab-content.properties-tab mm-property-grid{display:block;height:100%;width:100%}.entity-content .entity-tabs .tab-content.associations-tab{display:flex;flex-direction:column;gap:16px;padding:0;height:100%}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:16px;padding:16px 20px;background:linear-gradient(90deg,var(--octo-mint-05),transparent);border-bottom:1px solid var(--octo-mint-20)}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar .filter-group{display:flex;align-items:center;gap:10px}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar .filter-group label{font-family:Montserrat,sans-serif;font-weight:600;font-size:.75rem;letter-spacing:.5px;text-transform:uppercase;color:var(--octo-mint-80);white-space:nowrap}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar .filter-group kendo-dropdownlist{width:160px}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar .filter-group kendo-textbox{width:220px}.entity-content .entity-tabs .tab-content.associations-tab mm-list-view{flex:1;display:block;height:calc(100% - 70px)}@media(max-width:768px){.entity-content{gap:16px}.entity-content .basic-info-card{padding:16px 20px}.entity-content .basic-info-card .basic-info-grid{grid-template-columns:1fr;gap:16px}.entity-content .entity-tabs{min-height:300px}.entity-content .entity-tabs ::ng-deep .k-tabstrip .k-tabstrip-items-wrapper{padding-left:12px}.entity-content .entity-tabs ::ng-deep .k-tabstrip .k-tabstrip-items-wrapper .k-tabstrip-items .k-item{padding:10px 14px;font-size:.75rem}.entity-content .entity-tabs .tab-content{padding:16px}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar{flex-direction:column;align-items:flex-start;gap:12px}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar .filter-group{width:100%}.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar .filter-group kendo-dropdownlist,.entity-content .entity-tabs .tab-content.associations-tab .associations-toolbar .filter-group kendo-textbox{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TabStripModule }, { kind: "component", type: i1$3.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i1$3.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i1$3.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i1$3.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i1$3.CardBodyComponent, selector: "kendo-card-body" }, { kind: "component", type: i1$3.CardHeaderComponent, selector: "kendo-card-header" }, { kind: "ngmodule", type: DropDownListModule }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: TextBoxModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: PropertyGridComponent, selector: "mm-property-grid", inputs: ["data", "config", "showTypeColumn"], outputs: ["propertyChange", "saveRequested", "binaryDownload"] }, { kind: "component", type: ListViewComponent, selector: "mm-list-view", inputs: ["pageSize", "skip", "rowIsClickable", "showRowCheckBoxes", "showRowSelectAllCheckBox", "contextMenuType", "leftToolbarActions", "rightToolbarActions", "actionCommandItems", "contextMenuCommandItems", "excelExportFileName", "pdfExportFileName", "pageable", "sortable", "rowFilterEnabled", "searchTextBoxEnabled", "rowClass", "messages", "selectable", "columns"], outputs: ["rowClicked"] }, { kind: "directive", type: EntityAssociationsDataSourceDirective, selector: "[mmEntityAssociationsDataSource]", exportAs: ["mmEntityAssociationsDataSource"] }] });
|
|
6327
6327
|
}
|
|
6328
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
6328
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityDetailViewComponent, decorators: [{
|
|
6329
6329
|
type: Component,
|
|
6330
6330
|
args: [{ selector: "mm-entity-detail-view", standalone: true, imports: [
|
|
6331
6331
|
CommonModule,
|
|
@@ -6603,10 +6603,10 @@ class GetRuntimeEntityByIdDtoGQL extends i1$2.Query {
|
|
|
6603
6603
|
constructor(apollo) {
|
|
6604
6604
|
super(apollo);
|
|
6605
6605
|
}
|
|
6606
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
6607
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
6606
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntityByIdDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6607
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntityByIdDtoGQL, providedIn: 'root' });
|
|
6608
6608
|
}
|
|
6609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
6609
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntityByIdDtoGQL, decorators: [{
|
|
6610
6610
|
type: Injectable,
|
|
6611
6611
|
args: [{
|
|
6612
6612
|
providedIn: 'root'
|
|
@@ -6648,10 +6648,10 @@ class EntityDetailDataSource {
|
|
|
6648
6648
|
throw error;
|
|
6649
6649
|
}
|
|
6650
6650
|
}
|
|
6651
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
6652
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
6651
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityDetailDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6652
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityDetailDataSource, providedIn: 'root' });
|
|
6653
6653
|
}
|
|
6654
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
6654
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityDetailDataSource, decorators: [{
|
|
6655
6655
|
type: Injectable,
|
|
6656
6656
|
args: [{
|
|
6657
6657
|
providedIn: 'root',
|
|
@@ -6806,8 +6806,8 @@ class EntityDetailComponent {
|
|
|
6806
6806
|
// TODO: Implement property change handling
|
|
6807
6807
|
// This could be used to track modifications and enable save functionality
|
|
6808
6808
|
}
|
|
6809
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
6810
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
6809
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6810
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityDetailComponent, isStandalone: true, selector: "mm-entity-detail", ngImport: i0, template: `
|
|
6811
6811
|
<div class="entity-detail">
|
|
6812
6812
|
<div class="entity-detail-header">
|
|
6813
6813
|
<button
|
|
@@ -6841,7 +6841,7 @@ class EntityDetailComponent {
|
|
|
6841
6841
|
</div>
|
|
6842
6842
|
`, isInline: true, styles: [":host{display:block;height:100%;width:100%}.entity-detail{height:100%;display:flex;flex-direction:column;padding:24px;box-sizing:border-box;overflow-y:auto}.entity-detail .entity-detail-header{display:flex;align-items:center;gap:20px;margin-bottom:24px;padding:20px 24px;background:linear-gradient(180deg,var(--iron-navy),var(--surface-elevated));border:1px solid var(--octo-mint-30);border-radius:4px 16px;position:relative;box-shadow:0 4px 20px #0006,0 0 15px var(--octo-mint-08)}.entity-detail .entity-detail-header:before{content:\"\";position:absolute;top:0;left:0;width:4px;height:100%;background:linear-gradient(180deg,var(--octo-mint),var(--neo-cyan),var(--royal-violet));box-shadow:0 0 10px var(--octo-mint-50);border-radius:4px 0 0 4px}.entity-detail .entity-detail-header .header-info{flex:1}.entity-detail .entity-detail-header .header-info .entity-title h2{margin:0 0 8px;font-family:Montserrat,sans-serif;font-size:1.4rem;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--octo-text-color);text-shadow:0 0 10px rgba(0,0,0,.3)}.entity-detail .entity-detail-header .header-info .entity-type{margin:0;font-family:Roboto Mono,monospace;font-size:.8rem;background:var(--deep-sea-60);padding:6px 12px;border-radius:4px;border:1px solid var(--neo-cyan-30);display:inline-block;color:var(--neo-cyan)}.entity-detail mm-entity-detail-view{flex:1;display:flex;flex-direction:column;overflow-y:auto}@media(max-width:768px){.entity-detail{padding:16px}.entity-detail .entity-detail-header{flex-direction:column;align-items:flex-start;gap:12px;padding:16px 20px}.entity-detail .entity-detail-header .header-info .entity-title h2{font-size:1.1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: EntityDetailViewComponent, selector: "mm-entity-detail-view", inputs: ["entity", "loading", "error", "showHeader", "messages"], outputs: ["retry", "propertyChange", "navigateToEntity"] }] });
|
|
6843
6843
|
}
|
|
6844
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
6844
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityDetailComponent, decorators: [{
|
|
6845
6845
|
type: Component,
|
|
6846
6846
|
args: [{ selector: 'mm-entity-detail', imports: [
|
|
6847
6847
|
CommonModule,
|
|
@@ -7156,6 +7156,149 @@ const article = {
|
|
|
7156
7156
|
viewBox: '0 -960 960 960'
|
|
7157
7157
|
};
|
|
7158
7158
|
|
|
7159
|
+
const GetCkTypeAssociationRolesDocumentDto = gql `
|
|
7160
|
+
query getCkTypeAssociationRoles($ckTypeId: String!) {
|
|
7161
|
+
constructionKit {
|
|
7162
|
+
types(rtCkId: $ckTypeId, first: 1) {
|
|
7163
|
+
items {
|
|
7164
|
+
rtCkTypeId
|
|
7165
|
+
associations {
|
|
7166
|
+
in {
|
|
7167
|
+
all {
|
|
7168
|
+
roleId {
|
|
7169
|
+
fullName
|
|
7170
|
+
semanticVersionedFullName
|
|
7171
|
+
}
|
|
7172
|
+
rtRoleId
|
|
7173
|
+
navigationPropertyName
|
|
7174
|
+
multiplicity
|
|
7175
|
+
targetCkTypeId {
|
|
7176
|
+
fullName
|
|
7177
|
+
}
|
|
7178
|
+
rtTargetCkTypeId
|
|
7179
|
+
}
|
|
7180
|
+
}
|
|
7181
|
+
out {
|
|
7182
|
+
all {
|
|
7183
|
+
roleId {
|
|
7184
|
+
fullName
|
|
7185
|
+
semanticVersionedFullName
|
|
7186
|
+
}
|
|
7187
|
+
rtRoleId
|
|
7188
|
+
navigationPropertyName
|
|
7189
|
+
multiplicity
|
|
7190
|
+
targetCkTypeId {
|
|
7191
|
+
fullName
|
|
7192
|
+
}
|
|
7193
|
+
rtTargetCkTypeId
|
|
7194
|
+
}
|
|
7195
|
+
}
|
|
7196
|
+
}
|
|
7197
|
+
}
|
|
7198
|
+
}
|
|
7199
|
+
}
|
|
7200
|
+
}
|
|
7201
|
+
`;
|
|
7202
|
+
class GetCkTypeAssociationRolesDtoGQL extends i1$2.Query {
|
|
7203
|
+
document = GetCkTypeAssociationRolesDocumentDto;
|
|
7204
|
+
constructor(apollo) {
|
|
7205
|
+
super(apollo);
|
|
7206
|
+
}
|
|
7207
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7208
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, providedIn: 'root' });
|
|
7209
|
+
}
|
|
7210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, decorators: [{
|
|
7211
|
+
type: Injectable,
|
|
7212
|
+
args: [{
|
|
7213
|
+
providedIn: 'root'
|
|
7214
|
+
}]
|
|
7215
|
+
}], ctorParameters: () => [{ type: i1$2.Apollo }] });
|
|
7216
|
+
|
|
7217
|
+
/**
|
|
7218
|
+
* Validates whether a drag-and-drop move (reparenting) is allowed by the CK model.
|
|
7219
|
+
*
|
|
7220
|
+
* Strategy: query the SOURCE type's OUTBOUND association roles and look for a
|
|
7221
|
+
* `System/ParentChild` role whose `rtTargetCkTypeId` matches the destination type.
|
|
7222
|
+
* This means "source entity can have a parent of destination type".
|
|
7223
|
+
*/
|
|
7224
|
+
class AssociationValidationService {
|
|
7225
|
+
getCkTypeAssociationRolesGQL = inject(GetCkTypeAssociationRolesDtoGQL);
|
|
7226
|
+
/** Cache: sourceCkTypeId → outbound roles */
|
|
7227
|
+
outRolesCache = new Map();
|
|
7228
|
+
/**
|
|
7229
|
+
* Checks whether an entity of `sourceCkTypeId` can be moved (reparented)
|
|
7230
|
+
* to an entity of `destinationCkTypeId` via a ParentChild association.
|
|
7231
|
+
*/
|
|
7232
|
+
async canMove(sourceCkTypeId, destinationCkTypeId) {
|
|
7233
|
+
const outRoles = await this.getOutboundRoles(sourceCkTypeId);
|
|
7234
|
+
// Find a ParentChild outbound role where the target matches the destination type.
|
|
7235
|
+
// Use rtTargetCkTypeId (runtime format) for matching — it matches event.ckTypeId.
|
|
7236
|
+
const matchingRole = outRoles.find((r) => r.rtRoleId === 'System/ParentChild' &&
|
|
7237
|
+
r.rtTargetCkTypeId === destinationCkTypeId);
|
|
7238
|
+
if (matchingRole) {
|
|
7239
|
+
return {
|
|
7240
|
+
allowed: true,
|
|
7241
|
+
rtRoleId: matchingRole.rtRoleId,
|
|
7242
|
+
roleId: matchingRole.roleId,
|
|
7243
|
+
navigationPropertyName: this.toLowerCamelCase(matchingRole.navigationPropertyName),
|
|
7244
|
+
};
|
|
7245
|
+
}
|
|
7246
|
+
return {
|
|
7247
|
+
allowed: false,
|
|
7248
|
+
reason: `CK model does not define a ParentChild association from "${sourceCkTypeId}" to "${destinationCkTypeId}"`,
|
|
7249
|
+
};
|
|
7250
|
+
}
|
|
7251
|
+
/**
|
|
7252
|
+
* Fetches and caches the outbound association roles for a given CK type.
|
|
7253
|
+
*/
|
|
7254
|
+
async getOutboundRoles(ckTypeId) {
|
|
7255
|
+
const cached = this.outRolesCache.get(ckTypeId);
|
|
7256
|
+
if (cached) {
|
|
7257
|
+
return cached;
|
|
7258
|
+
}
|
|
7259
|
+
const result = await firstValueFrom(this.getCkTypeAssociationRolesGQL.fetch({
|
|
7260
|
+
variables: { ckTypeId },
|
|
7261
|
+
fetchPolicy: 'network-only',
|
|
7262
|
+
}));
|
|
7263
|
+
const typeData = result.data?.constructionKit?.types?.items?.[0];
|
|
7264
|
+
const rawRoles = typeData?.associations?.out?.all ?? [];
|
|
7265
|
+
const roles = rawRoles
|
|
7266
|
+
.filter((r) => r !== null && r !== undefined)
|
|
7267
|
+
.map((r) => ({
|
|
7268
|
+
roleId: r.roleId?.fullName ?? '',
|
|
7269
|
+
rtRoleId: String(r.rtRoleId ?? ''),
|
|
7270
|
+
targetCkTypeId: r.targetCkTypeId?.fullName ?? '',
|
|
7271
|
+
rtTargetCkTypeId: String(r.rtTargetCkTypeId ?? ''),
|
|
7272
|
+
multiplicity: r.multiplicity ?? '',
|
|
7273
|
+
navigationPropertyName: r.navigationPropertyName ?? '',
|
|
7274
|
+
}));
|
|
7275
|
+
this.outRolesCache.set(ckTypeId, roles);
|
|
7276
|
+
return roles;
|
|
7277
|
+
}
|
|
7278
|
+
/**
|
|
7279
|
+
* Normalizes navigation property name to lowerCamelCase, matching the
|
|
7280
|
+
* backend convention used by typed input types (e.g. "Parent" → "parent").
|
|
7281
|
+
*/
|
|
7282
|
+
toLowerCamelCase(name) {
|
|
7283
|
+
if (!name) {
|
|
7284
|
+
return name;
|
|
7285
|
+
}
|
|
7286
|
+
return name.charAt(0).toLowerCase() + name.slice(1);
|
|
7287
|
+
}
|
|
7288
|
+
/** Clears the role cache (e.g. on tenant switch). */
|
|
7289
|
+
clearCache() {
|
|
7290
|
+
this.outRolesCache.clear();
|
|
7291
|
+
}
|
|
7292
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AssociationValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7293
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AssociationValidationService, providedIn: 'root' });
|
|
7294
|
+
}
|
|
7295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AssociationValidationService, decorators: [{
|
|
7296
|
+
type: Injectable,
|
|
7297
|
+
args: [{
|
|
7298
|
+
providedIn: 'root',
|
|
7299
|
+
}]
|
|
7300
|
+
}] });
|
|
7301
|
+
|
|
7159
7302
|
const GetRuntimeEntitiesByTypeDocumentDto = gql `
|
|
7160
7303
|
query getRuntimeEntitiesByType($ckTypeId: String!, $after: String, $first: Int, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort]) {
|
|
7161
7304
|
runtime {
|
|
@@ -7188,10 +7331,10 @@ class GetRuntimeEntitiesByTypeDtoGQL extends i1$2.Query {
|
|
|
7188
7331
|
constructor(apollo) {
|
|
7189
7332
|
super(apollo);
|
|
7190
7333
|
}
|
|
7191
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7192
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7334
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntitiesByTypeDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7335
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntitiesByTypeDtoGQL, providedIn: 'root' });
|
|
7193
7336
|
}
|
|
7194
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7337
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetRuntimeEntitiesByTypeDtoGQL, decorators: [{
|
|
7195
7338
|
type: Injectable,
|
|
7196
7339
|
args: [{
|
|
7197
7340
|
providedIn: 'root'
|
|
@@ -7252,15 +7395,15 @@ class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource {
|
|
|
7252
7395
|
return new FetchResultTyped(transformedItems, totalCount);
|
|
7253
7396
|
}));
|
|
7254
7397
|
}
|
|
7255
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7256
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
7398
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeEntitiesDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
7399
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: CkTypeEntitiesDataSourceDirective, isStandalone: true, selector: "[mmCkTypeEntitiesDataSource]", providers: [
|
|
7257
7400
|
{
|
|
7258
7401
|
provide: DataSourceBase,
|
|
7259
7402
|
useExisting: forwardRef(() => CkTypeEntitiesDataSourceDirective),
|
|
7260
7403
|
},
|
|
7261
7404
|
], exportAs: ["mmCkTypeEntitiesDataSource"], usesInheritance: true, ngImport: i0 });
|
|
7262
7405
|
}
|
|
7263
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7406
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CkTypeEntitiesDataSourceDirective, decorators: [{
|
|
7264
7407
|
type: Directive,
|
|
7265
7408
|
args: [{
|
|
7266
7409
|
selector: '[mmCkTypeEntitiesDataSource]',
|
|
@@ -7352,21 +7495,29 @@ class RuntimeBrowserStateService {
|
|
|
7352
7495
|
*/
|
|
7353
7496
|
getItemId(item) {
|
|
7354
7497
|
const itemData = item.item;
|
|
7355
|
-
// Runtime entity
|
|
7498
|
+
// Runtime entity — has both rtId and ckTypeId as scalar strings
|
|
7356
7499
|
if ('rtId' in itemData && 'ckTypeId' in itemData) {
|
|
7357
7500
|
return `${String(itemData.ckTypeId)}@${String(itemData.rtId)}`;
|
|
7358
7501
|
}
|
|
7359
|
-
// CK Model
|
|
7502
|
+
// CK Model — id is CkModelIdDto (object with fullName)
|
|
7360
7503
|
if ('id' in itemData &&
|
|
7361
7504
|
!('rtId' in itemData) &&
|
|
7362
7505
|
!('ckTypeId' in itemData)) {
|
|
7363
|
-
|
|
7506
|
+
const modelId = itemData.id;
|
|
7507
|
+
const name = typeof modelId === 'object' && modelId !== null && 'fullName' in modelId
|
|
7508
|
+
? modelId.fullName
|
|
7509
|
+
: String(modelId);
|
|
7510
|
+
return `ck-model:${name}`;
|
|
7364
7511
|
}
|
|
7365
|
-
// CK Type
|
|
7512
|
+
// CK Type — ckTypeId is CkTypeIdDto (object with fullName)
|
|
7366
7513
|
if ('ckTypeId' in itemData &&
|
|
7367
7514
|
!('rtId' in itemData) &&
|
|
7368
7515
|
!('id' in itemData)) {
|
|
7369
|
-
|
|
7516
|
+
const typeId = itemData.ckTypeId;
|
|
7517
|
+
const name = typeof typeId === 'object' && typeId !== null && 'fullName' in typeId
|
|
7518
|
+
? typeId.fullName
|
|
7519
|
+
: String(typeId);
|
|
7520
|
+
return `ck-type:${name}`;
|
|
7370
7521
|
}
|
|
7371
7522
|
// CK Models root
|
|
7372
7523
|
if ('isCkModelsRoot' in itemData && itemData.isCkModelsRoot) {
|
|
@@ -7374,10 +7525,10 @@ class RuntimeBrowserStateService {
|
|
|
7374
7525
|
}
|
|
7375
7526
|
return item.text || 'unknown';
|
|
7376
7527
|
}
|
|
7377
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7378
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7528
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7529
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserStateService, providedIn: 'root' });
|
|
7379
7530
|
}
|
|
7380
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7531
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserStateService, decorators: [{
|
|
7381
7532
|
type: Injectable,
|
|
7382
7533
|
args: [{
|
|
7383
7534
|
providedIn: 'root',
|
|
@@ -7399,10 +7550,10 @@ class TypeHelperService {
|
|
|
7399
7550
|
&& item.rtId
|
|
7400
7551
|
&& item.ckTypeId);
|
|
7401
7552
|
}
|
|
7402
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7403
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7553
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TypeHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7554
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TypeHelperService, providedIn: 'root' });
|
|
7404
7555
|
}
|
|
7405
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TypeHelperService, decorators: [{
|
|
7406
7557
|
type: Injectable,
|
|
7407
7558
|
args: [{
|
|
7408
7559
|
providedIn: 'root',
|
|
@@ -7425,10 +7576,10 @@ class CreateEntitiesDtoGQL extends i1$2.Mutation {
|
|
|
7425
7576
|
constructor(apollo) {
|
|
7426
7577
|
super(apollo);
|
|
7427
7578
|
}
|
|
7428
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7429
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7579
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CreateEntitiesDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7580
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CreateEntitiesDtoGQL, providedIn: 'root' });
|
|
7430
7581
|
}
|
|
7431
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7582
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CreateEntitiesDtoGQL, decorators: [{
|
|
7432
7583
|
type: Injectable,
|
|
7433
7584
|
args: [{
|
|
7434
7585
|
providedIn: 'root'
|
|
@@ -7460,10 +7611,10 @@ class AttributeCoordinatorService {
|
|
|
7460
7611
|
markStructureAsReady() {
|
|
7461
7612
|
this.structureReady.set(true);
|
|
7462
7613
|
}
|
|
7463
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7464
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7614
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeCoordinatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7615
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeCoordinatorService, providedIn: "root" });
|
|
7465
7616
|
}
|
|
7466
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7617
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeCoordinatorService, decorators: [{
|
|
7467
7618
|
type: Injectable,
|
|
7468
7619
|
args: [{ providedIn: "root" }]
|
|
7469
7620
|
}] });
|
|
@@ -7514,10 +7665,10 @@ class GetCkAttributesDetailedDtoGQL extends i1$2.Query {
|
|
|
7514
7665
|
constructor(apollo) {
|
|
7515
7666
|
super(apollo);
|
|
7516
7667
|
}
|
|
7517
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7518
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7668
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkAttributesDetailedDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7669
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkAttributesDetailedDtoGQL, providedIn: 'root' });
|
|
7519
7670
|
}
|
|
7520
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7671
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkAttributesDetailedDtoGQL, decorators: [{
|
|
7521
7672
|
type: Injectable,
|
|
7522
7673
|
args: [{
|
|
7523
7674
|
providedIn: 'root'
|
|
@@ -7571,16 +7722,71 @@ class GetCkRecordDetailedDtoGQL extends i1$2.Query {
|
|
|
7571
7722
|
constructor(apollo) {
|
|
7572
7723
|
super(apollo);
|
|
7573
7724
|
}
|
|
7574
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7575
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7725
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkRecordDetailedDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7726
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkRecordDetailedDtoGQL, providedIn: 'root' });
|
|
7576
7727
|
}
|
|
7577
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7728
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkRecordDetailedDtoGQL, decorators: [{
|
|
7578
7729
|
type: Injectable,
|
|
7579
7730
|
args: [{
|
|
7580
7731
|
providedIn: 'root'
|
|
7581
7732
|
}]
|
|
7582
7733
|
}], ctorParameters: () => [{ type: i1$2.Apollo }] });
|
|
7583
7734
|
|
|
7735
|
+
/**
|
|
7736
|
+
* Resolves raw CK attribute definitions for a CK type or CK record by id.
|
|
7737
|
+
*
|
|
7738
|
+
* Extracted from AttributeDataService to break a potential circular dependency:
|
|
7739
|
+
* AttributeMapperService needs to look up nested record attribute definitions when mapping
|
|
7740
|
+
* RECORD / RECORD_ARRAY values to GraphQL, while AttributeDataService already depends on
|
|
7741
|
+
* AttributeMapperService for mapping raw definitions into form-ready Attribute shapes.
|
|
7742
|
+
*
|
|
7743
|
+
* This resolver is intentionally minimal: it fetches and returns raw CkAttributeMetadata[]
|
|
7744
|
+
* with no mapping. Callers that need form-ready Attribute objects should map them via
|
|
7745
|
+
* AttributeMapperService.mapToFormAttribute.
|
|
7746
|
+
*
|
|
7747
|
+
* Apollo's default cache-first fetchPolicy deduplicates repeated lookups for the same ckId,
|
|
7748
|
+
* so callers do not need to memoize externally.
|
|
7749
|
+
*/
|
|
7750
|
+
class AttributeMetadataResolverService {
|
|
7751
|
+
getCkAttributesDetailedGQL = inject(GetCkAttributesDetailedDtoGQL);
|
|
7752
|
+
getCkRecordDetailedGQL = inject(GetCkRecordDetailedDtoGQL);
|
|
7753
|
+
/**
|
|
7754
|
+
* Fetches raw attribute metadata for a CK type or CK record.
|
|
7755
|
+
* Returns an empty array when the id is missing or the request fails.
|
|
7756
|
+
*/
|
|
7757
|
+
getRawAttributes$(ckId, isRecord = false) {
|
|
7758
|
+
if (!ckId)
|
|
7759
|
+
return of([]);
|
|
7760
|
+
const stream$ = isRecord
|
|
7761
|
+
? this.fetchCkRecordAttributes(ckId)
|
|
7762
|
+
: this.fetchCkAttributes(ckId);
|
|
7763
|
+
return stream$.pipe(catchError$1((err) => {
|
|
7764
|
+
console.error('AttributeMetadataResolverService error:', err);
|
|
7765
|
+
return of([]);
|
|
7766
|
+
}));
|
|
7767
|
+
}
|
|
7768
|
+
fetchCkAttributes(ckTypeId) {
|
|
7769
|
+
return this.getCkAttributesDetailedGQL
|
|
7770
|
+
.fetch({ variables: { ckId: ckTypeId } })
|
|
7771
|
+
.pipe(map$1((res) => (res.data?.constructionKit?.types?.items?.[0]?.attributes?.items ??
|
|
7772
|
+
[]).filter((item) => item != null)));
|
|
7773
|
+
}
|
|
7774
|
+
fetchCkRecordAttributes(ckRecordId) {
|
|
7775
|
+
return this.getCkRecordDetailedGQL
|
|
7776
|
+
.fetch({ variables: { ckId: ckRecordId } })
|
|
7777
|
+
.pipe(map$1((res) => (res.data?.constructionKit?.records?.items?.[0]?.attributes
|
|
7778
|
+
?.items ?? []).filter((item) => item != null)));
|
|
7779
|
+
}
|
|
7780
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeMetadataResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7781
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeMetadataResolverService, providedIn: 'root' });
|
|
7782
|
+
}
|
|
7783
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeMetadataResolverService, decorators: [{
|
|
7784
|
+
type: Injectable,
|
|
7785
|
+
args: [{
|
|
7786
|
+
providedIn: 'root',
|
|
7787
|
+
}]
|
|
7788
|
+
}] });
|
|
7789
|
+
|
|
7584
7790
|
class AttributeRecognitionService {
|
|
7585
7791
|
isString(attributeValueType) {
|
|
7586
7792
|
return attributeValueType === "STRING";
|
|
@@ -7622,10 +7828,10 @@ class AttributeRecognitionService {
|
|
|
7622
7828
|
isStringArray(attributeValueType) {
|
|
7623
7829
|
return attributeValueType === "STRING_ARRAY";
|
|
7624
7830
|
}
|
|
7625
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7626
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
7831
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeRecognitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7832
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeRecognitionService, providedIn: "root" });
|
|
7627
7833
|
}
|
|
7628
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7834
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeRecognitionService, decorators: [{
|
|
7629
7835
|
type: Injectable,
|
|
7630
7836
|
args: [{ providedIn: "root" }]
|
|
7631
7837
|
}] });
|
|
@@ -7696,6 +7902,7 @@ const BINARY_REFERENCE_FLAG = "__isBinaryFromBase64";
|
|
|
7696
7902
|
*/
|
|
7697
7903
|
class AttributeMapperService {
|
|
7698
7904
|
recognition = inject(AttributeRecognitionService);
|
|
7905
|
+
metadataResolver = inject(AttributeMetadataResolverService);
|
|
7699
7906
|
isRecordValue(value) {
|
|
7700
7907
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7701
7908
|
}
|
|
@@ -7751,115 +7958,187 @@ class AttributeMapperService {
|
|
|
7751
7958
|
return defer(() => from(this.mapFormValueToGraphQLAttributes(formValue, attributesMetadata)));
|
|
7752
7959
|
}
|
|
7753
7960
|
/**
|
|
7754
|
-
* Maps form values to GraphQL format for createEntities / updateRuntimeEntities.
|
|
7755
|
-
*
|
|
7961
|
+
* Maps form values to GraphQL format for createEntities / updateRuntimeEntities. Top-level RECORD and
|
|
7962
|
+
* RECORD_ARRAY attribute values are recursively mapped via the same per-attribute logic so nested
|
|
7963
|
+
* scalars (BINARY, GEO, TIME_SPAN, …) get type conversion identical to their top-level siblings.
|
|
7756
7964
|
*/
|
|
7757
7965
|
async mapFormValueToGraphQLAttributes(formValue, attributesMetadata) {
|
|
7758
|
-
const result = [];
|
|
7759
7966
|
if (!this.isRecordValue(formValue)) {
|
|
7760
|
-
return
|
|
7761
|
-
}
|
|
7762
|
-
const metadataMap = new Map();
|
|
7763
|
-
if (attributesMetadata) {
|
|
7764
|
-
attributesMetadata.forEach((attr) => {
|
|
7765
|
-
metadataMap.set(attr.attributeName, attr);
|
|
7766
|
-
});
|
|
7967
|
+
return [];
|
|
7767
7968
|
}
|
|
7969
|
+
const metadataMap = new Map((attributesMetadata ?? []).map((attr) => [attr.attributeName, attr]));
|
|
7970
|
+
const result = [];
|
|
7768
7971
|
for (const [key, value] of Object.entries(formValue)) {
|
|
7769
|
-
if (!key)
|
|
7770
|
-
continue;
|
|
7771
|
-
}
|
|
7772
|
-
const metadata = metadataMap.get(key);
|
|
7773
|
-
if (metadata?.attributeValueType === "BINARY_LINKED") {
|
|
7774
|
-
const processedValue = await this.processAttributeValue(value, metadata?.attributeValueType);
|
|
7775
|
-
if (processedValue instanceof File) {
|
|
7776
|
-
// Skip synthetic reference/preview files — they are placeholders created by
|
|
7777
|
-
// parseBinaryLinkedForForm and must not be re-uploaded (would overwrite real data with zeros).
|
|
7778
|
-
if (processedValue[BINARY_LINKED_REFERENCE_FLAG]) {
|
|
7779
|
-
continue;
|
|
7780
|
-
}
|
|
7781
|
-
result.push({ attributeName: key, value: processedValue });
|
|
7782
|
-
}
|
|
7783
|
-
else {
|
|
7784
|
-
// Value was cleared (null / empty array) — send null so the backend removes the linked binary.
|
|
7785
|
-
result.push({ attributeName: key, value: null });
|
|
7786
|
-
}
|
|
7972
|
+
if (!key)
|
|
7787
7973
|
continue;
|
|
7974
|
+
const mapped = await this.mapSingleAttributeToInput(key, value, metadataMap.get(key));
|
|
7975
|
+
if (mapped !== null) {
|
|
7976
|
+
result.push(mapped);
|
|
7788
7977
|
}
|
|
7789
|
-
|
|
7790
|
-
|
|
7791
|
-
|
|
7792
|
-
|
|
7793
|
-
|
|
7978
|
+
}
|
|
7979
|
+
return result;
|
|
7980
|
+
}
|
|
7981
|
+
/**
|
|
7982
|
+
* Maps a single (key, value, metadata) triple into a GraphQL RtEntityAttributeInput, or null when the
|
|
7983
|
+
* attribute should be omitted from the payload entirely (typically: required scalar with no value).
|
|
7984
|
+
*
|
|
7985
|
+
* Single source of truth for empty / null / optional / type-conversion rules. Used by both the top-level
|
|
7986
|
+
* mapping and the recursive RECORD / RECORD_ARRAY mapping so nested attributes follow the exact same
|
|
7987
|
+
* contract. Branch order matters: BINARY_LINKED handling must come before the generic null/undefined
|
|
7988
|
+
* skip because cleared linked binaries are sent as explicit null (to detach the link on the backend).
|
|
7989
|
+
*/
|
|
7990
|
+
async mapSingleAttributeToInput(key, value, metadata) {
|
|
7991
|
+
const type = metadata?.attributeValueType;
|
|
7992
|
+
// type is set only when metadata exists, so the non-null assertion is safe inside these branches.
|
|
7993
|
+
if (type === "BINARY_LINKED") {
|
|
7994
|
+
return this.mapBinaryLinkedAttribute(key, value, metadata);
|
|
7995
|
+
}
|
|
7996
|
+
if (value === null || value === undefined) {
|
|
7997
|
+
return metadata?.isOptional ? { attributeName: key, value: null } : null;
|
|
7998
|
+
}
|
|
7999
|
+
if (type === "BINARY" && this.isOptionalEmptyBinary(metadata, value)) {
|
|
8000
|
+
return { attributeName: key, value: null };
|
|
8001
|
+
}
|
|
8002
|
+
// Empty RECORD (empty object) and RECORD_ARRAY (empty array): send null when optional, skip otherwise.
|
|
8003
|
+
if (type === "RECORD" && this.isValueEmpty(value)) {
|
|
8004
|
+
return metadata?.isOptional ? { attributeName: key, value: null } : null;
|
|
8005
|
+
}
|
|
8006
|
+
if (type === "RECORD_ARRAY" && Array.isArray(value) && value.length === 0) {
|
|
8007
|
+
return metadata?.isOptional ? { attributeName: key, value: null } : null;
|
|
8008
|
+
}
|
|
8009
|
+
if (metadata?.isOptional &&
|
|
8010
|
+
this.isOptionalEmptyScalarOrArray(value, metadata)) {
|
|
8011
|
+
return { attributeName: key, value: null };
|
|
8012
|
+
}
|
|
8013
|
+
const processedValue = await this.processAttributeValue(value, metadata);
|
|
8014
|
+
return { attributeName: key, value: processedValue };
|
|
8015
|
+
}
|
|
8016
|
+
/**
|
|
8017
|
+
* BINARY_LINKED has its own decision tree because synthetic reference Files (created by
|
|
8018
|
+
* parseBinaryLinkedForForm to display existing-file metadata) must NOT be re-uploaded — re-uploading
|
|
8019
|
+
* a synthetic File would overwrite the real binary with zero-filled placeholder content.
|
|
8020
|
+
* Cleared values (null / empty array) emit explicit null so the backend detaches the linked binary.
|
|
8021
|
+
*/
|
|
8022
|
+
async mapBinaryLinkedAttribute(key, value, metadata) {
|
|
8023
|
+
const processedValue = await this.processAttributeValue(value, metadata);
|
|
8024
|
+
if (processedValue instanceof File) {
|
|
8025
|
+
const isReference = processedValue[BINARY_LINKED_REFERENCE_FLAG] === true;
|
|
8026
|
+
if (isReference) {
|
|
8027
|
+
return null;
|
|
7794
8028
|
}
|
|
7795
|
-
|
|
7796
|
-
|
|
7797
|
-
|
|
8029
|
+
return { attributeName: key, value: processedValue };
|
|
8030
|
+
}
|
|
8031
|
+
return { attributeName: key, value: null };
|
|
8032
|
+
}
|
|
8033
|
+
/**
|
|
8034
|
+
* Recursively maps a RECORD form value (flat object { subAttr: subVal, ... }) to the wire shape expected
|
|
8035
|
+
* by the backend mutation: a flat object { subAttr: processedSubVal, ... }.
|
|
8036
|
+
*
|
|
8037
|
+
* Important asymmetry between query response and mutation input: queries return RECORD as
|
|
8038
|
+
* { attributes: [{ attributeName, value }, ...] } (the GraphQL RtRecord type wraps it), but the mutation
|
|
8039
|
+
* input field RtEntityAttributeInput.value is SimpleScalar — opaque to GraphQL — so the backend reads
|
|
8040
|
+
* the raw dictionary directly and matches keys against CK sub-attribute names. Sending the wrapped
|
|
8041
|
+
* { attributes: [...] } shape resulted in ASSET1004 (mandatory attribute missing) because the backend
|
|
8042
|
+
* never iterated the wrapper.
|
|
8043
|
+
*
|
|
8044
|
+
* Fetches sub-attribute definitions for the given recordCkId via AttributeMetadataResolverService and
|
|
8045
|
+
* routes each entry through mapSingleAttributeToInput so type conversion (BINARY → byte[], GEO → GeoJSON,
|
|
8046
|
+
* TIME_SPAN → seconds, …) and empty/null/optional rules apply identically to nested attributes.
|
|
8047
|
+
* Sub-attribute keys are kept in their form-side camelCase form (matches the previously working code path).
|
|
8048
|
+
*/
|
|
8049
|
+
async mapRecordValueToGraphQL(value, recordCkId) {
|
|
8050
|
+
if (!this.isRecordValue(value)) {
|
|
8051
|
+
return {};
|
|
8052
|
+
}
|
|
8053
|
+
const subMetadataMap = await this.resolveSubMetadataMap(recordCkId);
|
|
8054
|
+
return this.mapRecordEntries(value, subMetadataMap);
|
|
8055
|
+
}
|
|
8056
|
+
/**
|
|
8057
|
+
* Resolves sub-attribute metadata for a given recordCkId. Returns an empty map (pass-through mode)
|
|
8058
|
+
* when recordCkId is missing or resolver fails — caller must preserve user values in that case.
|
|
8059
|
+
*/
|
|
8060
|
+
async resolveSubMetadataMap(recordCkId) {
|
|
8061
|
+
if (!recordCkId) {
|
|
8062
|
+
return new Map();
|
|
8063
|
+
}
|
|
8064
|
+
try {
|
|
8065
|
+
const rawDefinitions = await firstValueFrom(this.metadataResolver.getRawAttributes$(recordCkId, true));
|
|
8066
|
+
return new Map(rawDefinitions.map((meta) => {
|
|
8067
|
+
const subAttr = this.mapToFormAttribute(meta, undefined);
|
|
8068
|
+
return [subAttr.attributeName, subAttr];
|
|
8069
|
+
}));
|
|
8070
|
+
}
|
|
8071
|
+
catch (err) {
|
|
8072
|
+
// Resolver failure (network/auth/cache) must not abort the whole mapping pipeline. Falling back
|
|
8073
|
+
// to an empty map means sub-attributes are emitted with their form values without type conversion;
|
|
8074
|
+
// the backend will reject the payload with a meaningful error rather than the user seeing nothing.
|
|
8075
|
+
console.error(`AttributeMapperService: failed to resolve sub-attributes for record '${recordCkId}'`, err);
|
|
8076
|
+
return new Map();
|
|
8077
|
+
}
|
|
8078
|
+
}
|
|
8079
|
+
/**
|
|
8080
|
+
* Maps record entries to GraphQL payload using the resolved metadata map.
|
|
8081
|
+
* Pass-through mode (empty metadata map) preserves user values verbatim, including explicit
|
|
8082
|
+
* nulls — required so cleared nested fields still reach the backend.
|
|
8083
|
+
*/
|
|
8084
|
+
async mapRecordEntries(value, subMetadataMap) {
|
|
8085
|
+
const result = {};
|
|
8086
|
+
for (const [subKey, subValue] of Object.entries(value)) {
|
|
8087
|
+
if (!subKey)
|
|
7798
8088
|
continue;
|
|
7799
|
-
|
|
7800
|
-
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
if (metadata?.isOptional) {
|
|
7804
|
-
result.push({ attributeName: key, value: null });
|
|
7805
|
-
}
|
|
8089
|
+
const subMeta = subMetadataMap.get(subKey);
|
|
8090
|
+
if (!subMeta) {
|
|
8091
|
+
// Pass-through: no metadata available, preserve the value as-is (including nulls).
|
|
8092
|
+
result[subKey] = subValue;
|
|
7806
8093
|
continue;
|
|
7807
8094
|
}
|
|
7808
|
-
|
|
7809
|
-
|
|
7810
|
-
|
|
7811
|
-
if (metadata?.isOptional) {
|
|
7812
|
-
result.push({ attributeName: key, value: null });
|
|
7813
|
-
}
|
|
7814
|
-
continue;
|
|
8095
|
+
const mapped = await this.mapSingleAttributeToInput(subKey, subValue, subMeta);
|
|
8096
|
+
if (mapped !== null) {
|
|
8097
|
+
result[mapped.attributeName] = mapped.value;
|
|
7815
8098
|
}
|
|
7816
|
-
|
|
7817
|
-
|
|
8099
|
+
}
|
|
8100
|
+
return result;
|
|
8101
|
+
}
|
|
8102
|
+
/**
|
|
8103
|
+
* Recursively maps a RECORD_ARRAY form value (array of flat objects) to the wire shape expected by the
|
|
8104
|
+
* backend mutation: an array of flat objects [{ subAttr: subVal }, { subAttr: subVal }].
|
|
8105
|
+
*
|
|
8106
|
+
* Each item is a record sharing the same recordCkId; metadata is fetched (and Apollo-cached) once per item
|
|
8107
|
+
* via mapRecordValueToGraphQL.
|
|
8108
|
+
*/
|
|
8109
|
+
async mapRecordArrayValueToGraphQL(value, recordCkId) {
|
|
8110
|
+
if (!Array.isArray(value))
|
|
8111
|
+
return [];
|
|
8112
|
+
// Resolve metadata once for the whole array — items share the same recordCkId.
|
|
8113
|
+
const subMetadataMap = await this.resolveSubMetadataMap(recordCkId);
|
|
8114
|
+
const result = [];
|
|
8115
|
+
for (const item of value) {
|
|
8116
|
+
if (!this.isRecordValue(item)) {
|
|
8117
|
+
result.push({});
|
|
7818
8118
|
continue;
|
|
7819
8119
|
}
|
|
7820
|
-
|
|
7821
|
-
result.push({
|
|
7822
|
-
attributeName: key,
|
|
7823
|
-
value: processedValue,
|
|
7824
|
-
});
|
|
8120
|
+
result.push(await this.mapRecordEntries(item, subMetadataMap));
|
|
7825
8121
|
}
|
|
7826
8122
|
return result;
|
|
7827
8123
|
}
|
|
7828
8124
|
/** Processes a single attribute value for mutation payload (type-specific conversion). */
|
|
7829
|
-
async processAttributeValue(value,
|
|
8125
|
+
async processAttributeValue(value, metadata) {
|
|
8126
|
+
const attributeType = metadata?.attributeValueType;
|
|
7830
8127
|
switch (attributeType) {
|
|
7831
8128
|
case "RECORD":
|
|
7832
|
-
return value;
|
|
8129
|
+
return await this.mapRecordValueToGraphQL(value, metadata?.id?.ckId);
|
|
7833
8130
|
case "RECORD_ARRAY":
|
|
7834
|
-
return value;
|
|
8131
|
+
return await this.mapRecordArrayValueToGraphQL(value, metadata?.id?.ckId);
|
|
7835
8132
|
case "GEOSPATIAL_POINT":
|
|
7836
8133
|
return convertGeospatialPointToGeoJSON(value);
|
|
7837
8134
|
case "TIME_SPAN":
|
|
7838
8135
|
return this.convertTimeSpanToSeconds(value);
|
|
7839
|
-
case "BINARY":
|
|
8136
|
+
case "BINARY":
|
|
7840
8137
|
// MeshMakers expects byte[] (array of numbers). Accept File, ArrayBuffer, base64 string, or byte[].
|
|
7841
8138
|
return await this.convertBinaryToByteArray(value);
|
|
7842
|
-
|
|
7843
|
-
|
|
7844
|
-
|
|
7845
|
-
if (value instanceof File) {
|
|
7846
|
-
return value;
|
|
7847
|
-
}
|
|
7848
|
-
if (Array.isArray(value) && value[0] instanceof File) {
|
|
7849
|
-
return value[0];
|
|
7850
|
-
}
|
|
7851
|
-
if (typeof value === "string") {
|
|
7852
|
-
// base64 string
|
|
7853
|
-
return base64ToByteArray(value);
|
|
7854
|
-
}
|
|
7855
|
-
if (value instanceof ArrayBuffer) {
|
|
7856
|
-
return this.arrayBufferToByteArray(value);
|
|
7857
|
-
}
|
|
7858
|
-
if (Array.isArray(value) && typeof value[0] === "number") {
|
|
7859
|
-
return value;
|
|
7860
|
-
}
|
|
7861
|
-
return null;
|
|
7862
|
-
}
|
|
8139
|
+
case "BINARY_LINKED":
|
|
8140
|
+
// MeshMakers: prefer File for multipart upload; also accept base64 string, ArrayBuffer or byte[].
|
|
8141
|
+
return this.convertBinaryLinkedValue(value);
|
|
7863
8142
|
case "INTEGER_ARRAY":
|
|
7864
8143
|
return this.normalizePrimitiveArray(value, "number");
|
|
7865
8144
|
case "STRING_ARRAY":
|
|
@@ -7965,7 +8244,8 @@ class AttributeMapperService {
|
|
|
7965
8244
|
}
|
|
7966
8245
|
}
|
|
7967
8246
|
/**
|
|
7968
|
-
* Converts supported binary representations into byte arrays.
|
|
8247
|
+
* Converts supported binary representations into byte arrays. Returns the original value as a fallback
|
|
8248
|
+
* when the input shape is not recognized so the backend can produce a meaningful validation error.
|
|
7969
8249
|
*/
|
|
7970
8250
|
async convertBinaryToByteArray(value) {
|
|
7971
8251
|
if (Array.isArray(value) &&
|
|
@@ -7993,6 +8273,36 @@ class AttributeMapperService {
|
|
|
7993
8273
|
}
|
|
7994
8274
|
return value;
|
|
7995
8275
|
}
|
|
8276
|
+
/**
|
|
8277
|
+
* Normalizes a BINARY_LINKED form value to one of the wire shapes the backend accepts. Order matters:
|
|
8278
|
+
* a real File is preferred (multipart upload preserves filename and content type), with byte[] / base64
|
|
8279
|
+
* accepted as fallbacks for callers that already have raw bytes.
|
|
8280
|
+
*/
|
|
8281
|
+
convertBinaryLinkedValue(value) {
|
|
8282
|
+
if (value instanceof File)
|
|
8283
|
+
return value;
|
|
8284
|
+
if (Array.isArray(value) && value[0] instanceof File)
|
|
8285
|
+
return value[0];
|
|
8286
|
+
if (typeof value === "string") {
|
|
8287
|
+
try {
|
|
8288
|
+
return base64ToByteArray(value);
|
|
8289
|
+
}
|
|
8290
|
+
catch (e) {
|
|
8291
|
+
// Re-throw instead of returning null: a malformed base64 must not silently degrade
|
|
8292
|
+
// to null, which the backend may interpret as "clear/detach" the linked binary.
|
|
8293
|
+
// Surfacing the error lets the caller present a validation message to the user.
|
|
8294
|
+
console.error("Error converting BINARY_LINKED base64 to byte array:", e);
|
|
8295
|
+
throw new Error("Invalid base64 value for BINARY_LINKED attribute", { cause: e });
|
|
8296
|
+
}
|
|
8297
|
+
}
|
|
8298
|
+
if (value instanceof ArrayBuffer) {
|
|
8299
|
+
return this.arrayBufferToByteArray(value);
|
|
8300
|
+
}
|
|
8301
|
+
if (Array.isArray(value) && typeof value[0] === "number") {
|
|
8302
|
+
return value;
|
|
8303
|
+
}
|
|
8304
|
+
return null;
|
|
8305
|
+
}
|
|
7996
8306
|
// ─── Type recognition (single responsibility: attribute type checks) ─────────────
|
|
7997
8307
|
isEnum(attr) {
|
|
7998
8308
|
return attr.attributeValueType === "ENUM";
|
|
@@ -8364,10 +8674,10 @@ class AttributeMapperService {
|
|
|
8364
8674
|
}
|
|
8365
8675
|
return [];
|
|
8366
8676
|
}
|
|
8367
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
8368
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
8677
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeMapperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8678
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeMapperService, providedIn: "root" });
|
|
8369
8679
|
}
|
|
8370
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
8680
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeMapperService, decorators: [{
|
|
8371
8681
|
type: Injectable,
|
|
8372
8682
|
args: [{
|
|
8373
8683
|
providedIn: "root",
|
|
@@ -8375,25 +8685,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
8375
8685
|
}] });
|
|
8376
8686
|
|
|
8377
8687
|
/**
|
|
8378
|
-
*
|
|
8688
|
+
* Fetches form-ready attribute definitions and runtime entity values for the repository browser.
|
|
8379
8689
|
* Used by attributes-group (rxResource), create-editor and update-editor (firstValueFrom for mutations).
|
|
8690
|
+
*
|
|
8691
|
+
* Raw definition lookups are delegated to AttributeMetadataResolverService; this service
|
|
8692
|
+
* only adds the form-ready mapping (mapToFormAttribute) and required-first sort.
|
|
8380
8693
|
*/
|
|
8381
8694
|
class AttributeDataService {
|
|
8382
8695
|
mapper = inject(AttributeMapperService);
|
|
8383
|
-
|
|
8384
|
-
getCkRecordDetailedGQL = inject(GetCkRecordDetailedDtoGQL);
|
|
8696
|
+
resolver = inject(AttributeMetadataResolverService);
|
|
8385
8697
|
getRtEntityAttributesGQL = inject(GetRuntimeEntityByIdDtoGQL);
|
|
8386
8698
|
/** Observable of attribute list for a CK type or record. Sorted: required first, optional last. */
|
|
8387
8699
|
getAttributesDefinition$(ckTypeId, isRecord = false) {
|
|
8388
8700
|
if (!ckTypeId)
|
|
8389
8701
|
return of([]);
|
|
8390
|
-
|
|
8391
|
-
? this.fetchCkRecordAttributes(ckTypeId)
|
|
8392
|
-
: this.fetchCkAttributes(ckTypeId);
|
|
8393
|
-
return stream$.pipe(map$1((items) => this.sortAttributesByOptional(items.map((meta) => this.mapper.mapToFormAttribute(meta, undefined)))), catchError$1((err) => {
|
|
8394
|
-
console.error('Service error:', err);
|
|
8395
|
-
return of([]);
|
|
8396
|
-
}));
|
|
8702
|
+
return this.resolver.getRawAttributes$(ckTypeId, isRecord).pipe(map$1((items) => this.sortAttributesByOptional(items.map((meta) => this.mapper.mapToFormAttribute(meta, undefined)))));
|
|
8397
8703
|
}
|
|
8398
8704
|
/** Observable of initial attribute values for an existing entity (edit mode). */
|
|
8399
8705
|
getRtEntityValues$(rtId, ckTypeId) {
|
|
@@ -8411,18 +8717,6 @@ class AttributeDataService {
|
|
|
8411
8717
|
return a.isOptional ? 1 : -1;
|
|
8412
8718
|
});
|
|
8413
8719
|
}
|
|
8414
|
-
fetchCkAttributes(ckTypeId) {
|
|
8415
|
-
return this.getCkAttributesDetailedGQL
|
|
8416
|
-
.fetch({ variables: { ckId: ckTypeId } })
|
|
8417
|
-
.pipe(map$1((res) => (res.data?.constructionKit?.types?.items?.[0]?.attributes?.items ??
|
|
8418
|
-
[]).filter((item) => item != null)));
|
|
8419
|
-
}
|
|
8420
|
-
fetchCkRecordAttributes(ckRecordId) {
|
|
8421
|
-
return this.getCkRecordDetailedGQL
|
|
8422
|
-
.fetch({ variables: { ckId: ckRecordId } })
|
|
8423
|
-
.pipe(map$1((res) => (res.data?.constructionKit?.records?.items?.[0]?.attributes
|
|
8424
|
-
?.items ?? []).filter((item) => item != null)));
|
|
8425
|
-
}
|
|
8426
8720
|
/** Fetches runtime entity attribute items by rtId and ckTypeId; returns empty array when absent. */
|
|
8427
8721
|
fetchRtEntityAttributes(rtId, ckTypeId) {
|
|
8428
8722
|
return this.getRtEntityAttributesGQL
|
|
@@ -8438,10 +8732,10 @@ class AttributeDataService {
|
|
|
8438
8732
|
}));
|
|
8439
8733
|
}));
|
|
8440
8734
|
}
|
|
8441
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
8442
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
8735
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8736
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeDataService, providedIn: 'root' });
|
|
8443
8737
|
}
|
|
8444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
8738
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeDataService, decorators: [{
|
|
8445
8739
|
type: Injectable,
|
|
8446
8740
|
args: [{
|
|
8447
8741
|
providedIn: 'root',
|
|
@@ -8485,8 +8779,8 @@ class AttributeFieldComponent {
|
|
|
8485
8779
|
hasHint() {
|
|
8486
8780
|
return this.hintText() != null && this.hintText() !== "";
|
|
8487
8781
|
}
|
|
8488
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
8489
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
8782
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8783
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: AttributeFieldComponent, isStandalone: true, selector: "mm-attribute-field", inputs: { attribute: { classPropertyName: "attribute", publicName: "attribute", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: true, transformFunction: null }, baselineValue: { classPropertyName: "baselineValue", publicName: "baselineValue", isSignal: true, isRequired: false, transformFunction: null }, fieldId: { classPropertyName: "fieldId", publicName: "fieldId", isSignal: true, isRequired: false, transformFunction: null }, overrideLabelText: { classPropertyName: "overrideLabelText", publicName: "overrideLabelText", isSignal: true, isRequired: false, transformFunction: null }, showUndoButton: { classPropertyName: "showUndoButton", publicName: "showUndoButton", isSignal: true, isRequired: false, transformFunction: null }, undoButtonSize: { classPropertyName: "undoButtonSize", publicName: "undoButtonSize", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, hintText: { classPropertyName: "hintText", publicName: "hintText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { undo: "undo" }, ngImport: i0, template: `
|
|
8490
8784
|
<div class="k-form-field">
|
|
8491
8785
|
<kendo-label
|
|
8492
8786
|
[for]="fieldId()"
|
|
@@ -8523,7 +8817,7 @@ class AttributeFieldComponent {
|
|
|
8523
8817
|
</div>
|
|
8524
8818
|
`, isInline: true, styles: [".k-form-field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.field-input-container{display:flex;flex-direction:row;align-items:center;gap:8px}.field-input-container .input-wrapper{flex:1;min-width:0}.field-input-container .input-wrapper ::ng-deep .k-widget,.field-input-container .input-wrapper ::ng-deep .k-textbox,.field-input-container .input-wrapper ::ng-deep .k-numerictextbox,.field-input-container .input-wrapper ::ng-deep .k-dropdownlist{width:100%}.k-form-error{font-size:.75rem;margin-top:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: i1$4.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
|
|
8525
8819
|
}
|
|
8526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
8820
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributeFieldComponent, decorators: [{
|
|
8527
8821
|
type: Component,
|
|
8528
8822
|
args: [{ selector: "mm-attribute-field", standalone: true, imports: [CommonModule, ReactiveFormsModule, KENDO_LABEL, KENDO_BUTTONS], template: `
|
|
8529
8823
|
<div class="k-form-field">
|
|
@@ -8882,8 +9176,8 @@ class AttributesGroupComponent {
|
|
|
8882
9176
|
}
|
|
8883
9177
|
return EMPTY_INITIAL_VALUES;
|
|
8884
9178
|
}
|
|
8885
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
8886
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
9179
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributesGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9180
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: AttributesGroupComponent, isStandalone: true, selector: "mm-attributes-group", inputs: { ckId: { classPropertyName: "ckId", publicName: "ckId", isSignal: true, isRequired: true, transformFunction: null }, parentFormGroup: { classPropertyName: "parentFormGroup", publicName: "parentFormGroup", isSignal: true, isRequired: true, transformFunction: null }, isRecord: { classPropertyName: "isRecord", publicName: "isRecord", isSignal: true, isRequired: false, transformFunction: null }, initialValues: { classPropertyName: "initialValues", publicName: "initialValues", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
8887
9181
|
<div class="attributes-form-container" [formGroup]="parentFormGroup()">
|
|
8888
9182
|
<kendo-card [style.margin-bottom.px]="10">
|
|
8889
9183
|
<kendo-card-header>
|
|
@@ -9170,7 +9464,7 @@ class AttributesGroupComponent {
|
|
|
9170
9464
|
</div>
|
|
9171
9465
|
`, isInline: true, styles: [".attributes-form-container ::ng-deep kendo-card kendo-card-body{display:flex;flex-direction:column;gap:16px}.attributes-form-container ::ng-deep kendo-label{display:flex;flex-direction:column;gap:4px}.attributes-form-container ::ng-deep kendo-label label{text-transform:uppercase}.header-content{display:flex;flex-direction:column;gap:4px}.record-array-content,.tab-content-wrapper{display:flex;flex-direction:column;gap:16px}.record-actions-info{display:flex;flex-direction:column;gap:12px;padding:16px;background-color:var(--kendo-color-surface-alt, rgba(0, 0, 0, .05));border:1px solid var(--kendo-color-border, rgba(0, 0, 0, .1));border-radius:4px;margin-bottom:16px}.record-actions-description{margin:0;font-size:13px;color:var(--kendo-color-subtle, rgba(0, 0, 0, .6));line-height:1.5}.record-array-actions{display:flex;gap:8px;justify-content:flex-start;padding-top:0}.record-actions{margin-top:16px;display:flex;gap:8px;justify-content:flex-start;padding-top:0}.binary-linked-wrap{display:flex;flex-direction:column;gap:6px}.binary-linked-reference-hint{font-size:.75rem;color:var(--kendo-color-primary, #0f6dff);font-style:italic}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => AttributesGroupComponent), selector: "mm-attributes-group", inputs: ["ckId", "parentFormGroup", "isRecord", "initialValues"] }, { kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i1.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i1.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i1.FormControlName), selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i0.forwardRef(() => i1.FormGroupName), selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i0.forwardRef(() => i1$3.CardComponent), selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i0.forwardRef(() => i1$3.CardBodyComponent), selector: "kendo-card-body" }, { kind: "component", type: i0.forwardRef(() => i1$3.CardHeaderComponent), selector: "kendo-card-header" }, { kind: "component", type: i0.forwardRef(() => i1$3.ExpansionPanelComponent), selector: "kendo-expansionpanel", inputs: ["title", "subtitle", "disabled", "expanded", "svgExpandIcon", "svgCollapseIcon", "expandIcon", "collapseIcon", "animation"], outputs: ["expandedChange", "action", "expand", "collapse"], exportAs: ["kendoExpansionPanel"] }, { kind: "directive", type: i0.forwardRef(() => i1$3.ExpansionPanelTitleDirective), selector: "[kendoExpansionPanelTitleDirective]" }, { kind: "component", type: i0.forwardRef(() => i1$3.TabStripComponent), selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i0.forwardRef(() => i1$3.TabStripTabComponent), selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i0.forwardRef(() => i1$3.TabContentDirective), selector: "[kendoTabContent]" }, { kind: "component", type: i0.forwardRef(() => i5.TextBoxComponent), selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i0.forwardRef(() => i5.NumericTextBoxComponent), selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: i0.forwardRef(() => i5.SwitchComponent), selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { kind: "component", type: i0.forwardRef(() => i1$4.LabelComponent), selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i0.forwardRef(() => i3$1.ButtonComponent), selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i0.forwardRef(() => i4.DropDownListComponent), selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "component", type: i0.forwardRef(() => i4.MultiSelectComponent), selector: "kendo-multiselect", inputs: ["showStickyHeader", "focusableId", "autoClose", "loading", "data", "value", "valueField", "textField", "tabindex", "tabIndex", "size", "rounded", "fillMode", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "disabled", "itemDisabled", "checkboxes", "readonly", "filterable", "virtual", "popupSettings", "listHeight", "valuePrimitive", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "inputAttributes"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { kind: "component", type: i0.forwardRef(() => i7.DateTimePickerComponent), selector: "kendo-datetimepicker", inputs: ["focusableId", "weekDaysFormat", "showOtherMonthDays", "value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "adaptiveTitle", "adaptiveSubtitle", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "clearButton", "autoFill", "adaptiveMode", "inputAttributes", "defaultTab", "size", "rounded", "fillMode", "headerTemplate", "footerTemplate", "footer"], outputs: ["valueChange", "open", "close", "focus", "blur", "escape"], exportAs: ["kendo-datetimepicker"] }, { kind: "component", type: i0.forwardRef(() => i7.TimePickerComponent), selector: "kendo-timepicker", inputs: ["focusableId", "disabled", "readonly", "readOnlyInput", "clearButton", "format", "formatPlaceholder", "placeholder", "min", "max", "incompleteDateValidation", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "cancelButton", "nowButton", "steps", "popupSettings", "tabindex", "tabIndex", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "adaptiveMode", "value", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-timepicker"] }, { kind: "component", type: i0.forwardRef(() => i8.FileSelectComponent), selector: "kendo-fileselect", inputs: ["name"], outputs: ["valueChange"], exportAs: ["kendoFileSelect"] }, { kind: "component", type: i0.forwardRef(() => AttributeFieldComponent), selector: "mm-attribute-field", inputs: ["attribute", "control", "baselineValue", "fieldId", "overrideLabelText", "showUndoButton", "undoButtonSize", "errorMessage", "hintText"], outputs: ["undo"] }] });
|
|
9172
9466
|
}
|
|
9173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
9467
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AttributesGroupComponent, decorators: [{
|
|
9174
9468
|
type: Component,
|
|
9175
9469
|
args: [{ selector: "mm-attributes-group", standalone: true, imports: [
|
|
9176
9470
|
CommonModule,
|
|
@@ -9475,50 +9769,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
9475
9769
|
const EMPTY_INITIAL_VALUES = [];
|
|
9476
9770
|
|
|
9477
9771
|
/**
|
|
9478
|
-
* Shared utilities for create and update entity editors: mutation options (
|
|
9479
|
-
* and error notifications. Injected by both CreateEditorComponent and
|
|
9772
|
+
* Shared utilities for create and update entity editors: builds Apollo mutation options (with multipart
|
|
9773
|
+
* context for binary uploads) and shows error notifications. Injected by both CreateEditorComponent and
|
|
9774
|
+
* UpdateEditorComponent.
|
|
9480
9775
|
*/
|
|
9481
9776
|
class SharedEditor {
|
|
9482
9777
|
notificationService = inject(NotificationService);
|
|
9483
9778
|
/**
|
|
9484
|
-
* Builds Apollo mutation options for createEntities
|
|
9779
|
+
* Builds Apollo mutation options for createEntities. Multipart context is enabled when any attribute
|
|
9780
|
+
* value (top-level or nested in RECORD / RECORD_ARRAY) contains a File instance.
|
|
9485
9781
|
*/
|
|
9486
9782
|
prepareMutationOptions(entityInput) {
|
|
9487
|
-
|
|
9488
|
-
variables: { entities: [entityInput] },
|
|
9489
|
-
};
|
|
9490
|
-
// Use multipart for binary file uploads (BINARY_LINKED or BINARY)
|
|
9491
|
-
const hasBinaryFiles = entityInput.attributes?.some((attr) => {
|
|
9492
|
-
// BINARY_LINKED: File, BINARY: File or File[]
|
|
9493
|
-
if (attr?.value instanceof File)
|
|
9494
|
-
return true;
|
|
9495
|
-
if (Array.isArray(attr?.value) && attr?.value[0] instanceof File)
|
|
9496
|
-
return true;
|
|
9497
|
-
return false;
|
|
9498
|
-
}) ?? false;
|
|
9499
|
-
if (hasBinaryFiles) {
|
|
9500
|
-
mutationOptions.context = { useMultipart: true };
|
|
9501
|
-
}
|
|
9502
|
-
return mutationOptions;
|
|
9783
|
+
return this.buildMutationOptions({ entities: [entityInput] });
|
|
9503
9784
|
}
|
|
9504
9785
|
/**
|
|
9505
|
-
* Builds Apollo mutation options for updateRuntimeEntities
|
|
9786
|
+
* Builds Apollo mutation options for updateRuntimeEntities. Multipart context is enabled when any
|
|
9787
|
+
* attribute value (top-level or nested in RECORD / RECORD_ARRAY) contains a File instance.
|
|
9506
9788
|
*/
|
|
9507
9789
|
prepareUpdateMutationOptions(entities) {
|
|
9508
|
-
|
|
9509
|
-
variables: { entities },
|
|
9510
|
-
};
|
|
9511
|
-
const hasBinaryFiles = entities?.some((e) => e?.item?.attributes?.some((attr) => {
|
|
9512
|
-
if (attr?.value instanceof File)
|
|
9513
|
-
return true;
|
|
9514
|
-
if (Array.isArray(attr?.value) && attr?.value[0] instanceof File)
|
|
9515
|
-
return true;
|
|
9516
|
-
return false;
|
|
9517
|
-
})) ?? false;
|
|
9518
|
-
if (hasBinaryFiles) {
|
|
9519
|
-
mutationOptions.context = { useMultipart: true };
|
|
9520
|
-
}
|
|
9521
|
-
return mutationOptions;
|
|
9790
|
+
return this.buildMutationOptions({ entities });
|
|
9522
9791
|
}
|
|
9523
9792
|
/**
|
|
9524
9793
|
* Shows an error notification to the user.
|
|
@@ -9532,10 +9801,36 @@ class SharedEditor {
|
|
|
9532
9801
|
type: { style: "error", icon: true },
|
|
9533
9802
|
});
|
|
9534
9803
|
}
|
|
9535
|
-
|
|
9536
|
-
|
|
9804
|
+
/** Wraps variables with optional multipart context based on whether a File is present anywhere in the payload. */
|
|
9805
|
+
buildMutationOptions(variables) {
|
|
9806
|
+
const options = { variables };
|
|
9807
|
+
if (this.containsFile(variables)) {
|
|
9808
|
+
options.context = { useMultipart: true };
|
|
9809
|
+
}
|
|
9810
|
+
return options;
|
|
9811
|
+
}
|
|
9812
|
+
/**
|
|
9813
|
+
* Recursively checks whether the given value contains a File instance anywhere in its structure
|
|
9814
|
+
* (top-level, inside arrays or inside nested objects). Used to decide whether the mutation must
|
|
9815
|
+
* be sent as a multipart request so that nested BINARY_LINKED files are uploaded correctly.
|
|
9816
|
+
*/
|
|
9817
|
+
containsFile(value) {
|
|
9818
|
+
if (value == null)
|
|
9819
|
+
return false;
|
|
9820
|
+
if (value instanceof File)
|
|
9821
|
+
return true;
|
|
9822
|
+
if (Array.isArray(value)) {
|
|
9823
|
+
return value.some((item) => this.containsFile(item));
|
|
9824
|
+
}
|
|
9825
|
+
if (typeof value === "object") {
|
|
9826
|
+
return Object.values(value).some((v) => this.containsFile(v));
|
|
9827
|
+
}
|
|
9828
|
+
return false;
|
|
9829
|
+
}
|
|
9830
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: SharedEditor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9831
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: SharedEditor, providedIn: "root" });
|
|
9537
9832
|
}
|
|
9538
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
9833
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: SharedEditor, decorators: [{
|
|
9539
9834
|
type: Injectable,
|
|
9540
9835
|
args: [{
|
|
9541
9836
|
providedIn: "root",
|
|
@@ -9667,18 +9962,23 @@ class CreateEditorComponent {
|
|
|
9667
9962
|
hasValidMappedAttributes(mapped) {
|
|
9668
9963
|
return Array.isArray(mapped) && mapped.length > 0;
|
|
9669
9964
|
}
|
|
9670
|
-
/**
|
|
9965
|
+
/**
|
|
9966
|
+
* Builds the create mutation payload: ckTypeId, attributes, and an optional parent association.
|
|
9967
|
+
* The association role defaults to "parent" (Basic/TreeNode convention) and can be overridden via
|
|
9968
|
+
* CreateInput.parentRoleName for CK Types that expose the parent link under a different role name.
|
|
9969
|
+
*/
|
|
9671
9970
|
buildCreatePayload(attributes) {
|
|
9672
9971
|
const ckTypeId = this.selectedCkTypeId() ?? this.selectedRtCkTypeId();
|
|
9673
9972
|
const entity = {
|
|
9674
9973
|
ckTypeId: ckTypeId,
|
|
9675
9974
|
attributes,
|
|
9676
9975
|
};
|
|
9677
|
-
const
|
|
9976
|
+
const input = this.createInput();
|
|
9977
|
+
const parent = input?.parent;
|
|
9678
9978
|
if (parent?.ckTypeId && parent?.rtId) {
|
|
9679
9979
|
entity.associations = [
|
|
9680
9980
|
{
|
|
9681
|
-
roleName: "parent",
|
|
9981
|
+
roleName: input?.parentRoleName ?? "parent",
|
|
9682
9982
|
targets: [
|
|
9683
9983
|
{
|
|
9684
9984
|
modOption: AssociationModOptionsDto.CreateDto,
|
|
@@ -9715,8 +10015,8 @@ class CreateEditorComponent {
|
|
|
9715
10015
|
this.selectedRtCkTypeId.set(null);
|
|
9716
10016
|
this.selectedCkTypeId.set(null);
|
|
9717
10017
|
}
|
|
9718
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
9719
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
10018
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CreateEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10019
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: CreateEditorComponent, isStandalone: true, selector: "mm-create-editor-component", inputs: { createInput: { classPropertyName: "createInput", publicName: "createInput", isSignal: true, isRequired: true, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { createOutput: "createOutput", cancelRequested: "cancelRequested" }, ngImport: i0, template: `
|
|
9720
10020
|
<div class="entity-editor-container">
|
|
9721
10021
|
<kendo-card class="basic-info-card">
|
|
9722
10022
|
<kendo-card-header>
|
|
@@ -9783,7 +10083,7 @@ class CreateEditorComponent {
|
|
|
9783
10083
|
</div>
|
|
9784
10084
|
`, isInline: true, styles: [".entity-editor-container{display:flex;flex-direction:column;gap:16px;width:100%}.entity-editor-container ::ng-deep kendo-card{display:grid;grid-template-rows:auto 1fr;grid-template-columns:1fr 1fr;gap:16px;width:100%!important}.entity-editor-container ::ng-deep kendo-card kendo-card-header{grid-column:span 2;grid-row:1}.entity-editor-container ::ng-deep kendo-card kendo-card-body{grid-row:2;grid-column:span 2;display:grid;grid-template-columns:1fr 1fr;gap:16px}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item{display:flex;flex-direction:column}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item :first-child{grid-column:1}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item :nth-child(2){grid-column:2}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item label{color:var(--kendo-color-subtle, rgba(0, 0, 0, .7));margin-bottom:8px;text-transform:uppercase}.entity-editor-container .attributes-form-container ::ng-deep kendo-card:not(.basic-info-card) kendo-card-body{display:flex;flex-direction:column;gap:16px}.entity-editor-container .select-type-prompt{grid-column:span 2;text-transform:uppercase;color:var(--kendo-color-primary, #0f6dff);background-color:var(--kendo-color-surface-alt, rgba(0, 0, 0, .05));padding:16px;border-radius:8px;text-align:center;border:1px dashed var(--kendo-color-border, rgba(0, 0, 0, .1))}.entity-editor-container .entity-editor-actions{display:flex;flex-direction:row;gap:16px}.entity-editor-container .entity-editor-actions button:disabled{opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i1$3.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i1$3.CardBodyComponent, selector: "kendo-card-body" }, { kind: "component", type: i1$3.CardHeaderComponent, selector: "kendo-card-header" }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: AttributesGroupComponent, selector: "mm-attributes-group", inputs: ["ckId", "parentFormGroup", "isRecord", "initialValues"] }] });
|
|
9785
10085
|
}
|
|
9786
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
10086
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CreateEditorComponent, decorators: [{
|
|
9787
10087
|
type: Component,
|
|
9788
10088
|
args: [{ selector: "mm-create-editor-component", imports: [
|
|
9789
10089
|
ReactiveFormsModule,
|
|
@@ -9884,10 +10184,10 @@ class UpdateRuntimeEntitiesDtoGQL extends i1$2.Mutation {
|
|
|
9884
10184
|
constructor(apollo) {
|
|
9885
10185
|
super(apollo);
|
|
9886
10186
|
}
|
|
9887
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
9888
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
10187
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateRuntimeEntitiesDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
10188
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateRuntimeEntitiesDtoGQL, providedIn: 'root' });
|
|
9889
10189
|
}
|
|
9890
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
10190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateRuntimeEntitiesDtoGQL, decorators: [{
|
|
9891
10191
|
type: Injectable,
|
|
9892
10192
|
args: [{
|
|
9893
10193
|
providedIn: 'root'
|
|
@@ -10058,8 +10358,8 @@ class UpdateEditorComponent {
|
|
|
10058
10358
|
},
|
|
10059
10359
|
};
|
|
10060
10360
|
}
|
|
10061
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10062
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
10361
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10362
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: UpdateEditorComponent, isStandalone: true, selector: "mm-update-editor-component", inputs: { updateInput: { classPropertyName: "updateInput", publicName: "updateInput", isSignal: true, isRequired: true, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { updateOutput: "updateOutput", cancelRequested: "cancelRequested" }, ngImport: i0, template: `
|
|
10063
10363
|
<div class="entity-editor-container">
|
|
10064
10364
|
<kendo-card class="basic-info-card">
|
|
10065
10365
|
<kendo-card-header>
|
|
@@ -10136,7 +10436,7 @@ class UpdateEditorComponent {
|
|
|
10136
10436
|
</div>
|
|
10137
10437
|
`, isInline: true, styles: [".entity-editor-container{display:flex;flex-direction:column;gap:16px;width:100%}.entity-editor-container ::ng-deep kendo-card{display:grid;grid-template-rows:auto 1fr;grid-template-columns:1fr 1fr;gap:16px;width:100%!important}.entity-editor-container ::ng-deep kendo-card kendo-card-header{grid-column:span 2;grid-row:1}.entity-editor-container ::ng-deep kendo-card kendo-card-body{grid-row:2;grid-column:span 2;display:grid;grid-template-columns:1fr 1fr;gap:16px}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item{display:flex;flex-direction:column}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item :first-child{grid-column:1}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item :nth-child(2){grid-column:2}.entity-editor-container ::ng-deep kendo-card kendo-card-body .info-item label{color:var(--kendo-color-subtle, rgba(0, 0, 0, .7));margin-bottom:8px;text-transform:uppercase}.entity-editor-container .attributes-form-container ::ng-deep kendo-card:not(.basic-info-card) kendo-card-body{display:flex;flex-direction:column;gap:16px}.entity-editor-container .select-type-prompt{grid-column:span 2;text-transform:uppercase;color:var(--kendo-color-primary, #0f6dff);background-color:var(--kendo-color-surface-alt, rgba(0, 0, 0, .05));padding:16px;border-radius:8px;text-align:center;border:1px dashed var(--kendo-color-border, rgba(0, 0, 0, .1))}.entity-editor-container .entity-editor-actions{display:flex;flex-direction:row;gap:16px}.entity-editor-container .entity-editor-actions button:disabled{opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i1$3.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i1$3.CardBodyComponent, selector: "kendo-card-body" }, { kind: "component", type: i1$3.CardHeaderComponent, selector: "kendo-card-header" }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: AttributesGroupComponent, selector: "mm-attributes-group", inputs: ["ckId", "parentFormGroup", "isRecord", "initialValues"] }] });
|
|
10138
10438
|
}
|
|
10139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
10439
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateEditorComponent, decorators: [{
|
|
10140
10440
|
type: Component,
|
|
10141
10441
|
args: [{ selector: "mm-update-editor-component", imports: [
|
|
10142
10442
|
ReactiveFormsModule,
|
|
@@ -10541,8 +10841,8 @@ class RuntimeBrowserDetailsComponent {
|
|
|
10541
10841
|
this.createInput = undefined;
|
|
10542
10842
|
this.updateInput = undefined;
|
|
10543
10843
|
}
|
|
10544
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10545
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
10844
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10845
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: RuntimeBrowserDetailsComponent, isStandalone: true, selector: "mm-runtime-browser-details", inputs: { selectedItem: "selectedItem", messages: "messages" }, outputs: { entitySaved: "entitySaved" }, viewQueries: [{ propertyName: "dataSourceDirective", first: true, predicate: ["dir"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
10546
10846
|
<div class="runtime-browser-details">
|
|
10547
10847
|
@if (isCreateModeEnabled) {
|
|
10548
10848
|
<mm-create-editor-component
|
|
@@ -10674,7 +10974,7 @@ class RuntimeBrowserDetailsComponent {
|
|
|
10674
10974
|
</div>
|
|
10675
10975
|
`, isInline: true, styles: [":host{display:block;height:100%;width:100%}.runtime-browser-details{display:flex;flex-direction:column;flex:1;min-height:0;padding:24px;box-sizing:border-box;overflow-y:auto;background:linear-gradient(180deg,var(--surface-elevated) 0%,var(--deep-sea) 100%)}.runtime-browser-details .no-selection{display:flex;align-items:center;justify-content:center;flex:1;min-height:0}.runtime-browser-details .no-selection .placeholder-content{text-align:center;max-width:400px;padding:40px;background:linear-gradient(135deg,var(--iron-navy-80),var(--surface-elevated-90));border:1px solid var(--octo-mint-30);border-radius:8px 24px;box-shadow:0 0 30px var(--octo-mint-10),inset 0 0 40px var(--octo-mint-03)}.runtime-browser-details .no-selection .placeholder-content .placeholder-icon{margin-bottom:24px}.runtime-browser-details .no-selection .placeholder-content .placeholder-icon .k-icon{font-size:64px;color:var(--octo-mint-50);text-shadow:0 0 20px var(--octo-mint-50);animation:lcars-icon-pulse 3s ease-in-out infinite}.runtime-browser-details .no-selection .placeholder-content h3{margin:0 0 12px;font-family:Montserrat,sans-serif;font-size:1.4rem;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--octo-mint);text-shadow:0 0 15px var(--octo-mint-50)}.runtime-browser-details .no-selection .placeholder-content p{margin:0;font-family:Montserrat,sans-serif;font-size:.9rem;line-height:1.6;color:rgba(var(--octo-text-color),.7);letter-spacing:.5px}.runtime-browser-details .entity-details{height:100%;display:flex;flex-direction:column;overflow:hidden}.runtime-browser-details .entity-details .details-header{display:flex;align-items:center;gap:16px;padding:16px 20px 16px 24px;background:linear-gradient(180deg,var(--iron-navy),var(--surface-elevated));border:1px solid var(--octo-mint-30);border-radius:4px 16px;margin-bottom:20px;position:relative;box-shadow:0 4px 20px #0006,0 0 15px var(--octo-mint-08)}.runtime-browser-details .entity-details .details-header:before{content:\"\";position:absolute;top:0;left:0;width:4px;height:100%;background:linear-gradient(180deg,var(--octo-mint),var(--neo-cyan),var(--royal-violet));box-shadow:0 0 10px var(--octo-mint-50);border-radius:4px 0 0 4px}.runtime-browser-details .entity-details .details-header .entity-icon{font-size:28px;color:var(--octo-mint);text-shadow:0 0 10px var(--octo-mint-50)}.runtime-browser-details .entity-details .details-header .entity-title{flex:1}.runtime-browser-details .entity-details .details-header .entity-title h3{margin:0 0 6px;font-family:Montserrat,sans-serif;font-size:1.1rem;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--octo-text-color)}.runtime-browser-details .entity-details .details-header .entity-title .entity-type{margin:0;font-family:Roboto Mono,monospace;font-size:.8rem;color:var(--neo-cyan);background:var(--deep-sea-60);padding:4px 10px;border-radius:4px;border:1px solid var(--neo-cyan-30);display:inline-block}.runtime-browser-details .entity-details mm-entity-detail-view{flex:1;display:flex;flex-direction:column;overflow-y:auto}.runtime-browser-details .entity-details .ck-model-details,.runtime-browser-details .entity-details .ck-models-root{padding:24px;background:linear-gradient(180deg,var(--iron-navy),var(--surface-elevated));border:1px solid var(--octo-mint-30);border-radius:4px 16px;position:relative}.runtime-browser-details .entity-details .ck-model-details:before,.runtime-browser-details .entity-details .ck-models-root:before{content:\"\";position:absolute;top:0;left:0;width:4px;height:100%;background:linear-gradient(180deg,var(--octo-mint),var(--neo-cyan),var(--royal-violet));box-shadow:0 0 10px var(--octo-mint-50)}.runtime-browser-details .entity-details .ck-model-details h3,.runtime-browser-details .entity-details .ck-models-root h3{margin:0 0 20px;font-family:Montserrat,sans-serif;font-size:1.1rem;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--octo-text-color)}.runtime-browser-details .entity-details .ck-model-details p,.runtime-browser-details .entity-details .ck-models-root p{margin:0 0 12px;font-family:Roboto,sans-serif;font-size:.9rem;color:rgba(var(--octo-text-color),.85)}.runtime-browser-details .entity-details .ck-model-details p strong,.runtime-browser-details .entity-details .ck-models-root p strong{font-family:Montserrat,sans-serif;font-weight:600;font-size:.8rem;letter-spacing:.5px;text-transform:uppercase;color:var(--octo-mint-80);margin-right:12px}.runtime-browser-details .entity-details .ck-model-details p.info-text,.runtime-browser-details .entity-details .ck-models-root p.info-text{color:rgba(var(--octo-text-color),.6);font-style:italic;margin-top:24px;padding:16px 20px;background:linear-gradient(135deg,var(--neo-cyan-10),var(--neo-cyan-05));border:1px solid var(--neo-cyan-30);border-radius:4px 12px}.runtime-browser-details .entity-details .ck-type-details{display:flex;flex-direction:column;height:100%;padding:0}.runtime-browser-details .entity-details .ck-type-details .type-header{margin-bottom:20px;padding:20px 24px;background:linear-gradient(180deg,var(--iron-navy),var(--surface-elevated));border:1px solid var(--octo-mint-30);border-radius:4px 16px;position:relative}.runtime-browser-details .entity-details .ck-type-details .type-header:before{content:\"\";position:absolute;top:0;left:0;width:4px;height:100%;background:linear-gradient(180deg,var(--octo-mint),var(--neo-cyan),var(--royal-violet));box-shadow:0 0 10px var(--octo-mint-50)}.runtime-browser-details .entity-details .ck-type-details .type-header h3{margin:0 0 12px;font-family:Montserrat,sans-serif;font-size:1.1rem;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--octo-text-color)}.runtime-browser-details .entity-details .ck-type-details .type-header .type-metadata{display:flex;gap:10px;align-items:center}.runtime-browser-details .entity-details .ck-type-details .type-header .type-metadata .badge{padding:6px 14px;border-radius:4px;font-family:Montserrat,sans-serif;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.runtime-browser-details .entity-details .ck-type-details .type-header .type-metadata .badge.abstract{background:linear-gradient(135deg,var(--royal-violet-30),var(--royal-violet-15));border:1px solid var(--royal-violet-50);color:var(--royal-violet-light-20);box-shadow:0 0 10px var(--royal-violet-30)}.runtime-browser-details .entity-details .ck-type-details .type-header .type-metadata .badge.final{background:linear-gradient(135deg,var(--toffee-30),var(--toffee-15));border:1px solid var(--toffee-50);color:var(--toffee);box-shadow:0 0 10px var(--toffee-30)}.runtime-browser-details .entity-details .ck-type-details .type-header .type-metadata .base-type{font-family:Roboto Mono,monospace;font-size:.8rem;color:var(--neo-cyan);background:var(--deep-sea-60);padding:4px 10px;border-radius:4px;border:1px solid var(--neo-cyan-30)}.runtime-browser-details .entity-details .ck-type-details .entities-table{flex:1;display:flex;flex-direction:column;overflow:hidden;background:linear-gradient(180deg,var(--iron-navy),var(--surface-elevated));border:1px solid var(--octo-mint-30);border-radius:4px 16px;padding:20px}.runtime-browser-details .entity-details .ck-type-details .entities-table h4{margin:0 0 16px;font-family:Montserrat,sans-serif;font-size:1rem;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--octo-mint)}.runtime-browser-details .entity-details .ck-type-details .entities-table mm-list-view{flex:1;display:flex;flex-direction:column;overflow:hidden}@keyframes lcars-icon-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}@media(max-width:768px){.runtime-browser-details{padding:16px}.runtime-browser-details .no-selection .placeholder-content{padding:24px}.runtime-browser-details .no-selection .placeholder-content .placeholder-icon .k-icon{font-size:48px}.runtime-browser-details .no-selection .placeholder-content h3{font-size:1.1rem}.runtime-browser-details .entity-details .details-header{flex-direction:column;align-items:flex-start;gap:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: EntityDetailViewComponent, selector: "mm-entity-detail-view", inputs: ["entity", "loading", "error", "showHeader", "messages"], outputs: ["retry", "propertyChange", "navigateToEntity"] }, { kind: "component", type: ListViewComponent, selector: "mm-list-view", inputs: ["pageSize", "skip", "rowIsClickable", "showRowCheckBoxes", "showRowSelectAllCheckBox", "contextMenuType", "leftToolbarActions", "rightToolbarActions", "actionCommandItems", "contextMenuCommandItems", "excelExportFileName", "pdfExportFileName", "pageable", "sortable", "rowFilterEnabled", "searchTextBoxEnabled", "rowClass", "messages", "selectable", "columns"], outputs: ["rowClicked"] }, { kind: "directive", type: CkTypeEntitiesDataSourceDirective, selector: "[mmCkTypeEntitiesDataSource]", exportAs: ["mmCkTypeEntitiesDataSource"] }, { kind: "component", type: CreateEditorComponent, selector: "mm-create-editor-component", inputs: ["createInput", "messages"], outputs: ["createOutput", "cancelRequested"] }, { kind: "component", type: UpdateEditorComponent, selector: "mm-update-editor-component", inputs: ["updateInput", "messages"], outputs: ["updateOutput", "cancelRequested"] }] });
|
|
10676
10976
|
}
|
|
10677
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
10977
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserDetailsComponent, decorators: [{
|
|
10678
10978
|
type: Component,
|
|
10679
10979
|
args: [{ selector: "mm-runtime-browser-details", imports: [
|
|
10680
10980
|
CommonModule,
|
|
@@ -10841,10 +11141,10 @@ class DeleteEntitiesDtoGQL extends i1$2.Mutation {
|
|
|
10841
11141
|
constructor(apollo) {
|
|
10842
11142
|
super(apollo);
|
|
10843
11143
|
}
|
|
10844
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10845
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
11144
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: DeleteEntitiesDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11145
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: DeleteEntitiesDtoGQL, providedIn: 'root' });
|
|
10846
11146
|
}
|
|
10847
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: DeleteEntitiesDtoGQL, decorators: [{
|
|
10848
11148
|
type: Injectable,
|
|
10849
11149
|
args: [{
|
|
10850
11150
|
providedIn: 'root'
|
|
@@ -10884,10 +11184,10 @@ class GetCkModelsDtoGQL extends i1$2.Query {
|
|
|
10884
11184
|
constructor(apollo) {
|
|
10885
11185
|
super(apollo);
|
|
10886
11186
|
}
|
|
10887
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10888
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
11187
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkModelsDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11188
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkModelsDtoGQL, providedIn: 'root' });
|
|
10889
11189
|
}
|
|
10890
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetCkModelsDtoGQL, decorators: [{
|
|
10891
11191
|
type: Injectable,
|
|
10892
11192
|
args: [{
|
|
10893
11193
|
providedIn: 'root'
|
|
@@ -10940,10 +11240,10 @@ class GetTreeNodesDtoGQL extends i1$2.Query {
|
|
|
10940
11240
|
constructor(apollo) {
|
|
10941
11241
|
super(apollo);
|
|
10942
11242
|
}
|
|
10943
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10944
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
11243
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetTreeNodesDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11244
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetTreeNodesDtoGQL, providedIn: 'root' });
|
|
10945
11245
|
}
|
|
10946
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetTreeNodesDtoGQL, decorators: [{
|
|
10947
11247
|
type: Injectable,
|
|
10948
11248
|
args: [{
|
|
10949
11249
|
providedIn: 'root'
|
|
@@ -10982,10 +11282,10 @@ class GetTreesDtoGQL extends i1$2.Query {
|
|
|
10982
11282
|
constructor(apollo) {
|
|
10983
11283
|
super(apollo);
|
|
10984
11284
|
}
|
|
10985
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10986
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
11285
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetTreesDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11286
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetTreesDtoGQL, providedIn: 'root' });
|
|
10987
11287
|
}
|
|
10988
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11288
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: GetTreesDtoGQL, decorators: [{
|
|
10989
11289
|
type: Injectable,
|
|
10990
11290
|
args: [{
|
|
10991
11291
|
providedIn: 'root'
|
|
@@ -11008,10 +11308,10 @@ class UpdateTreeNodesDtoGQL extends i1$2.Mutation {
|
|
|
11008
11308
|
constructor(apollo) {
|
|
11009
11309
|
super(apollo);
|
|
11010
11310
|
}
|
|
11011
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
11012
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
11311
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateTreeNodesDtoGQL, deps: [{ token: i1$2.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11312
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateTreeNodesDtoGQL, providedIn: 'root' });
|
|
11013
11313
|
}
|
|
11014
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11314
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: UpdateTreeNodesDtoGQL, decorators: [{
|
|
11015
11315
|
type: Injectable,
|
|
11016
11316
|
args: [{
|
|
11017
11317
|
providedIn: 'root'
|
|
@@ -11026,6 +11326,7 @@ class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource {
|
|
|
11026
11326
|
getCkModelByIdDtoGQL = inject(GetCkModelByIdDtoGQL);
|
|
11027
11327
|
deleteEntitiesDtoGQL = inject(DeleteEntitiesDtoGQL);
|
|
11028
11328
|
getRuntimeEntityAssociationsByIdDtoGQL = inject(GetRuntimeEntityAssociationsByIdDtoGQL);
|
|
11329
|
+
updateRuntimeEntitiesDtoGQL = inject(UpdateRuntimeEntitiesDtoGQL);
|
|
11029
11330
|
updateTreeNodesDtoGQL = inject(UpdateTreeNodesDtoGQL);
|
|
11030
11331
|
typeHelperService = inject(TypeHelperService);
|
|
11031
11332
|
isCkModelsRoot(item) {
|
|
@@ -11304,6 +11605,70 @@ class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource {
|
|
|
11304
11605
|
}
|
|
11305
11606
|
return true;
|
|
11306
11607
|
}
|
|
11608
|
+
/**
|
|
11609
|
+
* Moves an entity to a new parent using the generic `runtimeEntities.update` mutation.
|
|
11610
|
+
* Works for any entity type (not just Basic/TreeNode).
|
|
11611
|
+
*
|
|
11612
|
+
* Uses the `associations` field on `RtEntityInputDto` with `roleName` set to
|
|
11613
|
+
* the navigation property name (e.g. "parent") and modOption CREATE/DELETE.
|
|
11614
|
+
*
|
|
11615
|
+
* @param srcObjRtId Runtime ID of the entity being moved.
|
|
11616
|
+
* @param srcObjCkTypeId CK type of the entity being moved.
|
|
11617
|
+
* @param navigationPropertyName Navigation property for the parent association (e.g. "parent").
|
|
11618
|
+
* @param oldParentCkTypeId CK type of the current parent.
|
|
11619
|
+
* @param oldParentRtId Runtime ID of the current parent.
|
|
11620
|
+
* @param newParentCkTypeId CK type of the new parent.
|
|
11621
|
+
* @param newParentRtId Runtime ID of the new parent.
|
|
11622
|
+
* @returns true if the move succeeded.
|
|
11623
|
+
*/
|
|
11624
|
+
async updateEntityAssociation(srcObjRtId, srcObjCkTypeId, navigationPropertyName, oldParentCkTypeId, oldParentRtId, newParentCkTypeId, newParentRtId) {
|
|
11625
|
+
const entitiesToUpdate = [
|
|
11626
|
+
{
|
|
11627
|
+
rtId: srcObjRtId,
|
|
11628
|
+
item: {
|
|
11629
|
+
ckTypeId: srcObjCkTypeId,
|
|
11630
|
+
attributes: [],
|
|
11631
|
+
associations: [
|
|
11632
|
+
{
|
|
11633
|
+
roleName: navigationPropertyName,
|
|
11634
|
+
targets: [
|
|
11635
|
+
{
|
|
11636
|
+
target: {
|
|
11637
|
+
rtId: oldParentRtId,
|
|
11638
|
+
ckTypeId: oldParentCkTypeId,
|
|
11639
|
+
},
|
|
11640
|
+
modOption: AssociationModOptionsDto.DeleteDto,
|
|
11641
|
+
},
|
|
11642
|
+
{
|
|
11643
|
+
target: {
|
|
11644
|
+
rtId: newParentRtId,
|
|
11645
|
+
ckTypeId: newParentCkTypeId,
|
|
11646
|
+
},
|
|
11647
|
+
modOption: AssociationModOptionsDto.CreateDto,
|
|
11648
|
+
},
|
|
11649
|
+
],
|
|
11650
|
+
},
|
|
11651
|
+
],
|
|
11652
|
+
},
|
|
11653
|
+
},
|
|
11654
|
+
];
|
|
11655
|
+
try {
|
|
11656
|
+
const response = await firstValueFrom(this.updateRuntimeEntitiesDtoGQL.mutate({
|
|
11657
|
+
variables: {
|
|
11658
|
+
entities: entitiesToUpdate,
|
|
11659
|
+
},
|
|
11660
|
+
fetchPolicy: 'network-only',
|
|
11661
|
+
}));
|
|
11662
|
+
if (response.error) {
|
|
11663
|
+
throw response.error;
|
|
11664
|
+
}
|
|
11665
|
+
return true;
|
|
11666
|
+
}
|
|
11667
|
+
catch (error) {
|
|
11668
|
+
console.error('Error on attempt to move entity by changing association', srcObjRtId, error);
|
|
11669
|
+
return false;
|
|
11670
|
+
}
|
|
11671
|
+
}
|
|
11307
11672
|
/**
|
|
11308
11673
|
* Returns ckTypeId and rtId of a parent of given runtime entity.
|
|
11309
11674
|
*
|
|
@@ -11430,10 +11795,10 @@ class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource {
|
|
|
11430
11795
|
return [];
|
|
11431
11796
|
}
|
|
11432
11797
|
}
|
|
11433
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
11434
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
11798
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserDataSource, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
11799
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserDataSource, providedIn: 'root' });
|
|
11435
11800
|
}
|
|
11436
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11801
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserDataSource, decorators: [{
|
|
11437
11802
|
type: Injectable,
|
|
11438
11803
|
args: [{
|
|
11439
11804
|
providedIn: 'root',
|
|
@@ -11450,6 +11815,7 @@ class RuntimeBrowserComponent {
|
|
|
11450
11815
|
stateService = inject(RuntimeBrowserStateService);
|
|
11451
11816
|
typeHelperService = inject(TypeHelperService);
|
|
11452
11817
|
notificationService = inject(NotificationService);
|
|
11818
|
+
associationValidationService = inject(AssociationValidationService);
|
|
11453
11819
|
isSelectedItemAnRtEntity = false;
|
|
11454
11820
|
isLoading = false;
|
|
11455
11821
|
isEditing = false;
|
|
@@ -11676,25 +12042,33 @@ class RuntimeBrowserComponent {
|
|
|
11676
12042
|
console.debug(msg, event);
|
|
11677
12043
|
return;
|
|
11678
12044
|
}
|
|
11679
|
-
const allowedSrcItemCkTypeIds = ['Basic/TreeNode'];
|
|
11680
|
-
if (allowedSrcItemCkTypeIds.indexOf(event.sourceItem.ckTypeId) === -1) {
|
|
11681
|
-
const msg = 'Moving item other than Basic/TreeNode is not supported';
|
|
11682
|
-
this._showWarningNotification(msg);
|
|
11683
|
-
console.debug(msg, event);
|
|
11684
|
-
return;
|
|
11685
|
-
}
|
|
11686
|
-
const allowedDstParentItemCkTypeIds = ['Basic/TreeNode', 'Basic/Tree'];
|
|
11687
|
-
if (allowedDstParentItemCkTypeIds.indexOf(event.destinationItem.ckTypeId) ===
|
|
11688
|
-
-1) {
|
|
11689
|
-
const msg = 'Moving item to given parent is not supported';
|
|
11690
|
-
this._showWarningNotification(msg);
|
|
11691
|
-
console.debug(msg, event);
|
|
11692
|
-
return;
|
|
11693
|
-
}
|
|
11694
12045
|
try {
|
|
12046
|
+
const validation = await this.associationValidationService.canMove(event.sourceItem.ckTypeId, event.destinationItem.ckTypeId);
|
|
12047
|
+
if (!validation.allowed || !validation.navigationPropertyName) {
|
|
12048
|
+
const msg = validation.reason ??
|
|
12049
|
+
`Moving "${event.sourceItem.ckTypeId}" to "${event.destinationItem.ckTypeId}" is not allowed`;
|
|
12050
|
+
this._showWarningNotification(msg);
|
|
12051
|
+
return;
|
|
12052
|
+
}
|
|
11695
12053
|
this.isLoading = true;
|
|
11696
12054
|
this.treeDetail.setEnabledState(false);
|
|
11697
|
-
|
|
12055
|
+
// Use legacy TreeNode-specific mutation for Basic/TreeNode, generic mutation for all others
|
|
12056
|
+
let updateSucceeded;
|
|
12057
|
+
if (event.sourceItem.ckTypeId === 'Basic/TreeNode') {
|
|
12058
|
+
updateSucceeded =
|
|
12059
|
+
await this.dataSource.updateParentChildAssociation(event.sourceItem.rtId, event.sourceParent.ckTypeId, event.sourceParent.rtId, event.destinationItem.ckTypeId, event.destinationItem.rtId);
|
|
12060
|
+
}
|
|
12061
|
+
else {
|
|
12062
|
+
// Resolve actual ParentChild parent from backend — the tree parent (event.sourceParent)
|
|
12063
|
+
// may differ if the entity was loaded via RelatedClassification instead of ParentChild.
|
|
12064
|
+
const actualParent = await this.dataSource.getRuntimeEntityParentData(event.sourceItem.ckTypeId, event.sourceItem.rtId);
|
|
12065
|
+
if (!actualParent) {
|
|
12066
|
+
this._showWarningNotification('Cannot move entity: no ParentChild parent found');
|
|
12067
|
+
return;
|
|
12068
|
+
}
|
|
12069
|
+
updateSucceeded =
|
|
12070
|
+
await this.dataSource.updateEntityAssociation(event.sourceItem.rtId, event.sourceItem.ckTypeId, validation.navigationPropertyName, actualParent.ckTypeId, actualParent.rtId, event.destinationItem.ckTypeId, event.destinationItem.rtId);
|
|
12071
|
+
}
|
|
11698
12072
|
// Update failed due to query / db error.
|
|
11699
12073
|
if (!updateSucceeded) {
|
|
11700
12074
|
console.debug('Cannot update association due to an error in the GraphQL request.');
|
|
@@ -11730,6 +12104,7 @@ class RuntimeBrowserComponent {
|
|
|
11730
12104
|
}
|
|
11731
12105
|
catch (error) {
|
|
11732
12106
|
console.error('Error updating tree node parent after drag-and-drop:', error);
|
|
12107
|
+
this._showWarningNotification('An error occurred while moving the entity');
|
|
11733
12108
|
}
|
|
11734
12109
|
finally {
|
|
11735
12110
|
this.treeDetail.setEnabledState(true);
|
|
@@ -12005,8 +12380,8 @@ class RuntimeBrowserComponent {
|
|
|
12005
12380
|
await this.treeDetail.refreshTree();
|
|
12006
12381
|
}
|
|
12007
12382
|
}
|
|
12008
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
12009
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.
|
|
12383
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12384
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.8", type: RuntimeBrowserComponent, isStandalone: true, selector: "mm-runtime-browser", inputs: { messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "treeDetail", first: true, predicate: ["treeDetail"], descendants: true }, { propertyName: "detailsPanel", first: true, predicate: ["detailsPanel"], descendants: true }], ngImport: i0, template: `
|
|
12010
12385
|
<div class="runtime-browser-container kendo-theme-provider">
|
|
12011
12386
|
<!-- LCARS Header -->
|
|
12012
12387
|
<div class="lcars-page-header">
|
|
@@ -12068,7 +12443,7 @@ class RuntimeBrowserComponent {
|
|
|
12068
12443
|
</div>
|
|
12069
12444
|
`, isInline: true, styles: [".runtime-browser-container{display:flex;flex-direction:column;height:100%;padding:16px;gap:16px}::ng-deep mm-base-tree-detail .k-splitter{background:transparent;border:none}::ng-deep mm-base-tree-detail .k-splitter .k-splitbar{background:linear-gradient(180deg,var(--octo-mint-30),transparent);width:4px!important}::ng-deep mm-base-tree-detail .k-splitter .k-splitbar:hover{background:linear-gradient(180deg,var(--octo-mint-50),var(--octo-mint-20))}::ng-deep mm-base-tree-detail kendo-treeview .k-treeview-item .k-treeview-leaf{font-family:Roboto,sans-serif;transition:all .2s ease;border-radius:4px}::ng-deep mm-base-tree-detail kendo-treeview .k-treeview-item .k-treeview-leaf:hover{background:var(--octo-mint-10);color:var(--octo-mint)}::ng-deep mm-base-tree-detail kendo-treeview .k-treeview-item .k-treeview-leaf.k-selected{background:linear-gradient(90deg,var(--octo-mint-20),transparent);color:var(--octo-mint);border-left:3px solid var(--octo-mint)}::ng-deep mm-base-tree-detail kendo-treeview .k-treeview-item .k-treeview-leaf.k-selected:hover{background:linear-gradient(90deg,var(--octo-mint-25),transparent)}::ng-deep mm-base-tree-detail .toolbar{background:linear-gradient(90deg,var(--octo-mint-05),transparent);border-bottom:1px solid var(--octo-mint-20)}::ng-deep mm-base-tree-detail .base-tree-detail-container{height:100%;display:flex;flex-direction:column}::ng-deep mm-base-tree-detail .base-tree-detail-container .k-splitter{flex:1;min-height:0}::ng-deep mm-base-tree-detail kendo-splitter-pane.detail-pane{display:flex!important;flex-direction:column!important;height:100%!important}::ng-deep mm-base-tree-detail kendo-splitter-pane.detail-pane>mm-runtime-browser-details{display:flex!important;flex:1!important;min-height:0!important;height:100%!important}::ng-deep mm-base-tree-detail kendo-splitter-pane.detail-pane>mm-runtime-browser-details>.runtime-browser-details{flex:1;display:flex;flex-direction:column;min-height:0}@media(max-width:1024px){.runtime-browser-container{padding:12px;gap:12px}}@media(max-width:768px){.runtime-browser-container{padding:8px;gap:10px}}\n"], dependencies: [{ kind: "component", type: BaseTreeDetailComponent, selector: "mm-base-tree-detail", inputs: ["treeDataSource", "leftPaneSize", "leftToolbarActions", "rightToolbarActions"], outputs: ["nodeSelected", "nodeDropped"] }, { kind: "component", type: RuntimeBrowserDetailsComponent, selector: "mm-runtime-browser-details", inputs: ["selectedItem", "messages"], outputs: ["entitySaved"] }] });
|
|
12070
12445
|
}
|
|
12071
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
12446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserComponent, decorators: [{
|
|
12072
12447
|
type: Component,
|
|
12073
12448
|
args: [{ selector: 'mm-runtime-browser', imports: [BaseTreeDetailComponent, RuntimeBrowserDetailsComponent], template: `
|
|
12074
12449
|
<div class="runtime-browser-container kendo-theme-provider">
|
|
@@ -12144,10 +12519,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
12144
12519
|
* Use as the parent component when mounting runtime browser routes as children.
|
|
12145
12520
|
*/
|
|
12146
12521
|
class RuntimeBrowserOutletComponent {
|
|
12147
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
12148
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
12522
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12523
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: RuntimeBrowserOutletComponent, isStandalone: true, selector: "mm-runtime-browser-outlet", ngImport: i0, template: `<router-outlet />`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
|
|
12149
12524
|
}
|
|
12150
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
12525
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserOutletComponent, decorators: [{
|
|
12151
12526
|
type: Component,
|
|
12152
12527
|
args: [{
|
|
12153
12528
|
selector: 'mm-runtime-browser-outlet',
|
|
@@ -12174,10 +12549,10 @@ class RuntimeBrowserPageComponent {
|
|
|
12174
12549
|
messages = this.injectedMessages
|
|
12175
12550
|
? this.injectedMessages
|
|
12176
12551
|
: DEFAULT_RUNTIME_BROWSER_MESSAGES;
|
|
12177
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
12178
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
12552
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12553
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: RuntimeBrowserPageComponent, isStandalone: true, selector: "mm-runtime-browser-page", ngImport: i0, template: `<mm-runtime-browser [messages]="messages" />`, isInline: true, dependencies: [{ kind: "component", type: RuntimeBrowserComponent, selector: "mm-runtime-browser", inputs: ["messages"] }] });
|
|
12179
12554
|
}
|
|
12180
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
12555
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RuntimeBrowserPageComponent, decorators: [{
|
|
12181
12556
|
type: Component,
|
|
12182
12557
|
args: [{
|
|
12183
12558
|
selector: 'mm-runtime-browser-page',
|
|
@@ -12289,8 +12664,8 @@ class TenantSwitcherComponent {
|
|
|
12289
12664
|
return ((this.anchor?.nativeElement.contains(target) ?? false) ||
|
|
12290
12665
|
(this.popup?.nativeElement.contains(target) ?? false));
|
|
12291
12666
|
}
|
|
12292
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
12293
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
12667
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TenantSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12668
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: TenantSwitcherComponent, isStandalone: true, selector: "mm-tenant-switcher", inputs: { currentTenantId: "currentTenantId", allowedTenants: "allowedTenants", isDenied: "isDenied" }, outputs: { tenantSelected: "tenantSelected", refreshRequested: "refreshRequested" }, host: { listeners: { "document:keydown": "onKeydown($event)", "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["badgeEl"], descendants: true, read: ElementRef }, { propertyName: "popup", first: true, predicate: ["popupContent"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
12294
12669
|
@if (currentTenantId) {
|
|
12295
12670
|
<div #badgeEl class="tenant-badge" [class.denied]="isDenied" (click)="onToggle()">
|
|
12296
12671
|
<span class="tenant-icon">{{ isDenied ? '\u26A0' : '\u25C6' }}</span>
|
|
@@ -12329,7 +12704,7 @@ class TenantSwitcherComponent {
|
|
|
12329
12704
|
}
|
|
12330
12705
|
`, isInline: true, styles: [":host{display:inline-flex;align-items:center}.tenant-badge{display:flex;align-items:center;gap:8px;padding:6px 14px;background:var(--mm-tenant-switcher-bg, var(--kendo-color-surface, transparent));border:1px solid var(--mm-tenant-switcher-border, var(--kendo-color-border, #dee2e6));border-radius:var(--mm-tenant-switcher-radius, 4px 16px 16px 4px);box-shadow:var(--mm-tenant-switcher-shadow, none);cursor:pointer;transition:all .2s ease}.tenant-badge:hover{background:var(--mm-tenant-switcher-bg-hover, var(--kendo-color-base-hover, rgba(0, 0, 0, .04)));box-shadow:var(--mm-tenant-switcher-shadow-hover, var(--mm-tenant-switcher-shadow, none))}.tenant-icon{font-size:.7rem;color:var(--mm-tenant-switcher-accent, var(--kendo-color-primary, #ff6358));animation:var(--mm-tenant-switcher-icon-animation, none)}.tenant-name{font-family:var(--mm-tenant-switcher-font, inherit);font-size:.85rem;font-weight:600;letter-spacing:1px;color:var(--mm-tenant-switcher-accent, var(--kendo-color-primary, #ff6358));text-transform:uppercase;text-shadow:var(--mm-tenant-switcher-text-shadow, none)}.denied{background:var(--mm-tenant-switcher-denied-bg, var(--mm-tenant-switcher-bg, var(--kendo-color-surface, transparent)));border-color:var(--mm-tenant-switcher-denied-border, var(--kendo-color-error, #d9534f));box-shadow:var(--mm-tenant-switcher-denied-shadow, none)}.denied .tenant-icon,.denied .tenant-name{color:var(--mm-tenant-switcher-denied-accent, var(--kendo-color-error, #d9534f));text-shadow:var(--mm-tenant-switcher-denied-text-shadow, none)}.denied-label{font-family:var(--mm-tenant-switcher-font, inherit);font-size:.55rem;font-weight:700;letter-spacing:1px;color:var(--mm-tenant-switcher-denied-accent, var(--kendo-color-error, #d9534f));background:var(--mm-tenant-switcher-denied-label-bg, color-mix(in srgb, var(--kendo-color-error, #d9534f) 15%, transparent));padding:2px 6px;border-radius:3px}.tenant-popup{min-width:220px;padding:8px 0;background:var(--kendo-color-surface, #fff);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.tenant-popup-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #666);border-bottom:1px solid var(--kendo-color-border, #dee2e6);margin-bottom:4px}.refresh-btn{padding:2px;min-width:unset}.spinning{animation:spin .8s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tenant-list{list-style:none;margin:0;padding:0}.tenant-list-item{display:flex;align-items:center;gap:10px;padding:8px 16px;cursor:pointer;font-size:.85rem;transition:background .15s ease}.tenant-list-item:hover{background:var(--kendo-color-base-hover, rgba(0, 0, 0, .04))}.tenant-list-item.active{color:var(--kendo-color-primary, #ff6358);font-weight:600}.tenant-list-icon{font-size:.5rem;color:var(--kendo-color-subtle, #666)}.tenant-list-item.active .tenant-list-icon{color:var(--kendo-color-primary, #ff6358)}@keyframes mm-icon-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.1)}}\n"], dependencies: [{ kind: "component", type: PopupComponent, selector: "kendo-popup", inputs: ["animate", "anchor", "anchorAlign", "collision", "popupAlign", "copyAnchorStyles", "popupClass", "positionMode", "offset", "margin"], outputs: ["anchorViewportLeave", "close", "open", "positionChange"], exportAs: ["kendo-popup"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }] });
|
|
12331
12706
|
}
|
|
12332
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
12707
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TenantSwitcherComponent, decorators: [{
|
|
12333
12708
|
type: Component,
|
|
12334
12709
|
args: [{ selector: 'mm-tenant-switcher', standalone: true, imports: [
|
|
12335
12710
|
PopupComponent,
|
|
@@ -12421,5 +12796,5 @@ function provideOctoUi() {
|
|
|
12421
12796
|
* Generated bundle index. Do not edit.
|
|
12422
12797
|
*/
|
|
12423
12798
|
|
|
12424
|
-
export { AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_RUNTIME_BROWSER_MESSAGES, DefaultPropertyCategory, EntityDetailComponent, EntityIdInfoComponent, FieldFilterEditorComponent, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RUNTIME_BROWSER_MESSAGES, RtEntityIdHelper, RuntimeBrowserComponent, RuntimeBrowserOutletComponent, RuntimeBrowserPageComponent, RuntimeBrowserStateService, RuntimeEntityVariableDialogComponent, RuntimeEntityVariableDialogService, TenantSwitcherComponent, account_tree, add, analytics, app_registration, article, botService, category, chat, checklist, code, component_exchange, computer, createRuntimeBrowserRoutes, customer, dashboard, event_list, graphic_eq, group, identityService, insert_link, manage_accounts, more_time, notifications, page_info, pages, person_search, playlist_add_check, pool, power, provideOctoUi, publicIcon, query_builder, schedule_send, settings, sort, storage, swagger, swagger_asset, swagger_bot, swagger_communication, swagger_identity, team_dashboard, tenancy, text_snippet, travel_explore, user_diagnostics, webhook, work };
|
|
12799
|
+
export { AssociationValidationService, AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_RUNTIME_BROWSER_MESSAGES, DefaultPropertyCategory, EntityDetailComponent, EntityIdInfoComponent, FieldFilterEditorComponent, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RUNTIME_BROWSER_MESSAGES, RtEntityIdHelper, RuntimeBrowserComponent, RuntimeBrowserOutletComponent, RuntimeBrowserPageComponent, RuntimeBrowserStateService, RuntimeEntityVariableDialogComponent, RuntimeEntityVariableDialogService, TenantSwitcherComponent, account_tree, add, analytics, app_registration, article, botService, category, chat, checklist, code, component_exchange, computer, createRuntimeBrowserRoutes, customer, dashboard, event_list, graphic_eq, group, identityService, insert_link, manage_accounts, more_time, notifications, page_info, pages, person_search, playlist_add_check, pool, power, provideOctoUi, publicIcon, query_builder, schedule_send, settings, sort, storage, swagger, swagger_asset, swagger_bot, swagger_communication, swagger_identity, team_dashboard, tenancy, text_snippet, travel_explore, user_diagnostics, webhook, work };
|
|
12425
12800
|
//# sourceMappingURL=meshmakers-octo-ui.mjs.map
|