@meshmakers/octo-ui 3.4.1070 → 3.4.1090
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/meshmakers-octo-ui-branding-settings.mjs +3 -3
- package/fesm2022/meshmakers-octo-ui-branding-settings.mjs.map +1 -1
- package/fesm2022/meshmakers-octo-ui-branding.mjs +25 -25
- package/fesm2022/meshmakers-octo-ui-branding.mjs.map +1 -1
- package/fesm2022/meshmakers-octo-ui-tree-navigation-settings.mjs +3 -3
- package/fesm2022/meshmakers-octo-ui-tree-navigation-settings.mjs.map +1 -1
- package/fesm2022/meshmakers-octo-ui.mjs +480 -456
- package/fesm2022/meshmakers-octo-ui.mjs.map +1 -1
- package/package.json +2 -2
- package/types/meshmakers-octo-ui-branding.d.ts +2 -3
- package/types/meshmakers-octo-ui.d.ts +4 -3
|
@@ -250,8 +250,8 @@ class AttributeSortSelectorDialogComponent {
|
|
|
250
250
|
onCancel() {
|
|
251
251
|
this.windowRef.close();
|
|
252
252
|
}
|
|
253
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
254
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
253
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSortSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
254
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: AttributeSortSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-sort-selector-dialog", host: { attributes: { "data-component": "attribute-sort-selector" } }, ngImport: i0, template: `
|
|
255
255
|
<div class="attribute-sort-selector-container">
|
|
256
256
|
<!-- Filter Section -->
|
|
257
257
|
<div class="filter-container">
|
|
@@ -421,7 +421,7 @@ class AttributeSortSelectorDialogComponent {
|
|
|
421
421
|
</div>
|
|
422
422
|
`, 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", "pinnable", "pinnedTopRows", "pinnedBottomRows", "isRowPinnable"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "rowPinChange", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], 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: i3$1.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 }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
423
423
|
}
|
|
424
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
424
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSortSelectorDialogComponent, decorators: [{
|
|
425
425
|
type: Component,
|
|
426
426
|
args: [{ selector: 'mm-attribute-sort-selector-dialog', standalone: true, host: { 'data-component': 'attribute-sort-selector' }, imports: [
|
|
427
427
|
CommonModule,
|
|
@@ -670,10 +670,10 @@ class AttributeSortSelectorDialogService {
|
|
|
670
670
|
};
|
|
671
671
|
}
|
|
672
672
|
}
|
|
673
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
674
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
673
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSortSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
674
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSortSelectorDialogService });
|
|
675
675
|
}
|
|
676
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
676
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSortSelectorDialogService, decorators: [{
|
|
677
677
|
type: Injectable
|
|
678
678
|
}] });
|
|
679
679
|
|
|
@@ -894,8 +894,8 @@ class CkTypeSelectorDialogComponent {
|
|
|
894
894
|
this.windowRef.close(result);
|
|
895
895
|
}
|
|
896
896
|
}
|
|
897
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
898
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
897
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
898
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: CkTypeSelectorDialogComponent, isStandalone: true, selector: "mm-ck-type-selector-dialog", inputs: { messages: "messages" }, ngImport: i0, template: `
|
|
899
899
|
<div class="ck-type-selector-container">
|
|
900
900
|
<div class="filter-container">
|
|
901
901
|
<div class="filter-row">
|
|
@@ -988,7 +988,7 @@ class CkTypeSelectorDialogComponent {
|
|
|
988
988
|
</div>
|
|
989
989
|
`, 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$2.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", "pinnable", "pinnedTopRows", "pinnedBottomRows", "isRowPinnable"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "rowPinChange", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.CustomMessagesComponent, selector: "kendo-grid-messages" }, { 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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], 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: i3$1.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 }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
990
990
|
}
|
|
991
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
991
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeSelectorDialogComponent, decorators: [{
|
|
992
992
|
type: Component,
|
|
993
993
|
args: [{ selector: 'mm-ck-type-selector-dialog', standalone: true, imports: [
|
|
994
994
|
CommonModule,
|
|
@@ -1169,10 +1169,10 @@ class CkTypeSelectorDialogService {
|
|
|
1169
1169
|
};
|
|
1170
1170
|
}
|
|
1171
1171
|
}
|
|
1172
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
1173
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
1172
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1173
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeSelectorDialogService });
|
|
1174
1174
|
}
|
|
1175
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
1175
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeSelectorDialogService, decorators: [{
|
|
1176
1176
|
type: Injectable
|
|
1177
1177
|
}] });
|
|
1178
1178
|
|
|
@@ -1556,10 +1556,10 @@ class PropertyConverterService {
|
|
|
1556
1556
|
const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
|
|
1557
1557
|
return isoDateRegex.test(value) && !isNaN(Date.parse(value));
|
|
1558
1558
|
}
|
|
1559
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
1560
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
1559
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PropertyConverterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1560
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PropertyConverterService, providedIn: 'root' });
|
|
1561
1561
|
}
|
|
1562
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
1562
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PropertyConverterService, decorators: [{
|
|
1563
1563
|
type: Injectable,
|
|
1564
1564
|
args: [{
|
|
1565
1565
|
providedIn: 'root'
|
|
@@ -1822,8 +1822,8 @@ class RecordDetailDialogComponent {
|
|
|
1822
1822
|
.replace(/^./, str => str.toUpperCase())
|
|
1823
1823
|
.trim();
|
|
1824
1824
|
}
|
|
1825
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
1826
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
1825
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RecordDetailDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1826
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: RecordDetailDialogComponent, isStandalone: true, selector: "mm-record-detail-dialog", inputs: { attributeName: "attributeName", value: "value", type: "type" }, outputs: { closed: "closed" }, ngImport: i0, template: `
|
|
1827
1827
|
<div class="record-detail-content">
|
|
1828
1828
|
@if (isRecordArray && recordItems.length > 1) {
|
|
1829
1829
|
<div class="record-toolbar">
|
|
@@ -1932,7 +1932,7 @@ class RecordDetailDialogComponent {
|
|
|
1932
1932
|
</div>
|
|
1933
1933
|
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}.record-detail-content{display:flex;flex-direction:column;height:100%;gap:8px;padding:12px 16px;box-sizing:border-box;overflow:hidden}.record-toolbar{display:flex;align-items:center;gap:8px;flex-shrink:0;padding-bottom:4px;border-bottom:1px solid var(--kendo-color-border, #dee2e6)}.toolbar-spacer{flex:1}.search-input{flex:0 1 220px;min-width:0;padding:4px 8px;font:inherit;color:var(--kendo-color-on-app-surface, #1d1b20);background:color-mix(in srgb,var(--kendo-color-on-app-surface, #1d1b20) 6%,transparent);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:3px;outline:none}.search-input::placeholder{color:var(--kendo-color-subtle, #6c757d)}.search-input:focus{border-color:var(--kendo-color-primary, #0d6efd)}.search-clear{flex-shrink:0;width:22px;height:22px;padding:0;background:transparent;border:none;cursor:pointer;font-size:1.1em;line-height:1;color:var(--kendo-color-subtle, #6c757d);border-radius:3px}.search-clear:hover{color:var(--kendo-color-on-app-surface, #1d1b20);background:color-mix(in srgb,var(--kendo-color-on-app-surface, #1d1b20) 8%,transparent)}.match-count{flex-shrink:0;font-size:.8em;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.no-matches{padding:16px;text-align:center;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.record-array-list{display:flex;flex-direction:column;gap:8px;overflow-y:auto;flex:1;min-height:0}.record-array-item{display:block;flex-shrink:0;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;overflow:hidden}.array-item-header{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--kendo-color-surface-alt, #f8f9fa);transition:background-color .15s ease}.array-item-header:hover{background:color-mix(in srgb,var(--kendo-color-on-app-surface, #1d1b20) 6%,transparent)}.record-chevron{width:14px;height:14px;color:var(--kendo-color-subtle);flex-shrink:0}.array-item-index{font-family:Roboto Mono,monospace;font-size:.8em;font-weight:600;color:var(--kendo-color-primary, #0d6efd)}.array-item-label{font-size:.85em;color:var(--kendo-color-on-app-surface, #1d1b20);font-weight:500}.array-item-summary{margin-left:auto;font-size:.75em;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.detail-grid{display:block!important;height:auto!important;border:none;border-top:1px solid var(--kendo-color-border, #dee2e6)}:host ::ng-deep .detail-grid .k-grid-aria-root{height:auto}.property-name-cell{display:flex;align-items:center;gap:8px}.type-icon{width:16px;height:16px;opacity:.7}.property-name{font-weight:500}.property-value{word-break:break-word;white-space:pre-wrap}.type-badge{font-size:.75em;padding:2px 6px;border-radius:3px;text-transform:uppercase;font-weight:500;background:color-mix(in srgb,var(--kendo-color-on-app-surface, #1d1b20) 12%,transparent);color:var(--kendo-color-on-app-surface, #1d1b20)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { 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", "pinnable", "pinnedTopRows", "pinnedBottomRows", "isRowPinnable"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "rowPinChange", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "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: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
1934
1934
|
}
|
|
1935
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
1935
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RecordDetailDialogComponent, decorators: [{
|
|
1936
1936
|
type: Component,
|
|
1937
1937
|
args: [{ selector: 'mm-record-detail-dialog', standalone: true, imports: [CommonModule, ButtonModule, GridModule, SVGIconModule], template: `
|
|
1938
1938
|
<div class="record-detail-content">
|
|
@@ -2085,8 +2085,15 @@ class PropertyValueDisplayComponent {
|
|
|
2085
2085
|
recordArrayRows = [];
|
|
2086
2086
|
/** Hard cap so we don't render a horizontally-unmanageable table. */
|
|
2087
2087
|
static MAX_TABLE_COLUMNS = 12;
|
|
2088
|
-
|
|
2089
|
-
|
|
2088
|
+
// Exposed to the template through a getter, not a `readonly X = X` field: Vite's
|
|
2089
|
+
// module-runner transform (used by the Vitest unit-test builder) snapshots a class
|
|
2090
|
+
// field whose initialiser is a bare imported identifier at module-evaluation time,
|
|
2091
|
+
// which is before esbuild's lazily-initialised shared chunk has assigned the export,
|
|
2092
|
+
// so the field would be `undefined`.
|
|
2093
|
+
// A getter body is rewritten to a live read. Test-runner-only: production and
|
|
2094
|
+
// ng-packagr builds do not use the module runner and are unaffected.
|
|
2095
|
+
get PropertyDisplayMode() { return PropertyDisplayMode; }
|
|
2096
|
+
get AttributeValueTypeDto() { return AttributeValueTypeDto; }
|
|
2090
2097
|
Array = Array;
|
|
2091
2098
|
chevronRightIcon = chevronRightIcon;
|
|
2092
2099
|
chevronDownIcon = chevronDownIcon;
|
|
@@ -2504,8 +2511,8 @@ class PropertyValueDisplayComponent {
|
|
|
2504
2511
|
this.binaryDownload.emit(event);
|
|
2505
2512
|
}
|
|
2506
2513
|
}
|
|
2507
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
2508
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
2514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PropertyValueDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2515
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: PropertyValueDisplayComponent, isStandalone: true, selector: "mm-property-value-display", inputs: { value: "value", type: "type", displayMode: "displayMode", attributeName: "attributeName" }, outputs: { binaryDownload: "binaryDownload" }, usesOnChanges: true, ngImport: i0, template: `
|
|
2509
2516
|
<div class="property-value-display" [ngClass]="'type-' + type.toLowerCase()">
|
|
2510
2517
|
|
|
2511
2518
|
@if (expandableRecord) {
|
|
@@ -2650,7 +2657,7 @@ class PropertyValueDisplayComponent {
|
|
|
2650
2657
|
</div>
|
|
2651
2658
|
`, 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:color-mix(in srgb,var(--kendo-color-on-app-surface, #1d1b20) 12%,transparent);border-radius:3px;color:var(--kendo-color-on-app-surface, #1d1b20);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}.detail-button{flex-shrink:0;opacity:.6;transition:opacity .15s ease}.detail-button:hover{opacity:1}.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)}.record-array-list{max-height:320px;overflow-y:auto}.record-table-container{max-height:320px;overflow:auto;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:3px;margin-top:4px}.record-table{width:100%;border-collapse:collapse;font-size:.85em;table-layout:auto}.record-table th{position:sticky;top:0;z-index:1;background:var(--kendo-color-surface-alt, #f8f9fa);color:var(--kendo-color-subtle);text-align:left;padding:4px 8px;border-bottom:1px solid var(--kendo-color-border, #dee2e6);font-weight:500;font-size:.85em;white-space:nowrap}.record-table td{padding:3px 8px;border-bottom:1px solid color-mix(in srgb,var(--kendo-color-on-app-surface, #1d1b20) 8%,transparent);vertical-align:top;word-break:break-word}.record-table tr:last-child td{border-bottom:none}.record-table tr:hover td{background:color-mix(in srgb,var(--kendo-color-on-app-surface, #1d1b20) 6%,transparent)}.record-table .row-index{color:var(--kendo-color-subtle);font-family:Roboto Mono,monospace;font-size:.85em;text-align:right;width:1px;white-space:nowrap}.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", "attributeName"], outputs: ["binaryDownload"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2652
2659
|
}
|
|
2653
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
2660
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PropertyValueDisplayComponent, decorators: [{
|
|
2654
2661
|
type: Component,
|
|
2655
2662
|
args: [{ selector: 'mm-property-value-display', standalone: true, imports: [CommonModule, SVGIconModule, ButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
2656
2663
|
<div class="property-value-display" [ngClass]="'type-' + type.toLowerCase()">
|
|
@@ -2834,7 +2841,14 @@ class PropertyGridComponent {
|
|
|
2834
2841
|
checkboxCheckedIcon = checkboxCheckedIcon;
|
|
2835
2842
|
listUnorderedIcon = listUnorderedIcon;
|
|
2836
2843
|
// Enum reference
|
|
2837
|
-
|
|
2844
|
+
// Exposed to the template through a getter, not a `readonly X = X` field: Vite's
|
|
2845
|
+
// module-runner transform (used by the Vitest unit-test builder) snapshots a class
|
|
2846
|
+
// field whose initialiser is a bare imported identifier at module-evaluation time,
|
|
2847
|
+
// which is before esbuild's lazily-initialised shared chunk has assigned the export,
|
|
2848
|
+
// so the field would be `undefined`.
|
|
2849
|
+
// A getter body is rewritten to a live read. Test-runner-only: production and
|
|
2850
|
+
// ng-packagr builds do not use the module runner and are unaffected.
|
|
2851
|
+
get AttributeValueTypeDto() { return AttributeValueTypeDto; }
|
|
2838
2852
|
ngOnInit() {
|
|
2839
2853
|
this.updateFilteredData();
|
|
2840
2854
|
}
|
|
@@ -2954,8 +2968,8 @@ class PropertyGridComponent {
|
|
|
2954
2968
|
onBinaryDownload(event) {
|
|
2955
2969
|
this.binaryDownload.emit(event);
|
|
2956
2970
|
}
|
|
2957
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
2958
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
2971
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PropertyGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2972
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: PropertyGridComponent, isStandalone: true, selector: "mm-property-grid", inputs: { data: "data", config: "config", showTypeColumn: "showTypeColumn", messages: "messages" }, outputs: { propertyChange: "propertyChange", saveRequested: "saveRequested", binaryDownload: "binaryDownload" }, usesOnChanges: true, ngImport: i0, template: `
|
|
2959
2973
|
<div class="mm-property-grid" [style.height]="config.height || '400px'">
|
|
2960
2974
|
|
|
2961
2975
|
@if (config.showSearch) {
|
|
@@ -3040,7 +3054,7 @@ class PropertyGridComponent {
|
|
|
3040
3054
|
</div>
|
|
3041
3055
|
`, 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$2.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", "pinnable", "pinnedTopRows", "pinnedBottomRows", "isRowPinnable"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "rowPinChange", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "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", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: PropertyValueDisplayComponent, selector: "mm-property-value-display", inputs: ["value", "type", "displayMode", "attributeName"], outputs: ["binaryDownload"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
3042
3056
|
}
|
|
3043
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
3057
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PropertyGridComponent, decorators: [{
|
|
3044
3058
|
type: Component,
|
|
3045
3059
|
args: [{ selector: 'mm-property-grid', standalone: true, imports: [
|
|
3046
3060
|
CommonModule,
|
|
@@ -3446,8 +3460,8 @@ class CkTypeSelectorInputComponent {
|
|
|
3446
3460
|
this.selectCkType(result.selectedCkType);
|
|
3447
3461
|
}
|
|
3448
3462
|
}
|
|
3449
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
3450
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
3463
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeSelectorInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3464
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", 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", messages: "messages", dialogMessages: "dialogMessages", disabled: "disabled", required: "required" }, outputs: { ckTypeSelected: "ckTypeSelected", ckTypeCleared: "ckTypeCleared" }, providers: [
|
|
3451
3465
|
{
|
|
3452
3466
|
provide: NG_VALUE_ACCESSOR,
|
|
3453
3467
|
useExisting: forwardRef(() => CkTypeSelectorInputComponent),
|
|
@@ -3514,7 +3528,7 @@ class CkTypeSelectorInputComponent {
|
|
|
3514
3528
|
</div>
|
|
3515
3529
|
`, 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$2.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: i3$1.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: i3$1.FooterTemplateDirective, selector: "[kendoDropDownListFooterTemplate],[kendoComboBoxFooterTemplate],[kendoDropDownTreeFooterTemplate],[kendoMultiColumnComboBoxFooterTemplate],[kendoAutoCompleteFooterTemplate],[kendoMultiSelectFooterTemplate],[kendoMultiSelectTreeFooterTemplate]" }, { kind: "directive", type: i3$1.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "directive", type: i3$1.NoDataTemplateDirective, selector: "[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]" }, { kind: "ngmodule", type: LoaderModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: IconsModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: SVGIconModule }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
3516
3530
|
}
|
|
3517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
3531
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeSelectorInputComponent, decorators: [{
|
|
3518
3532
|
type: Component,
|
|
3519
3533
|
args: [{ selector: 'mm-ck-type-selector-input', standalone: true, imports: [
|
|
3520
3534
|
CommonModule,
|
|
@@ -4116,8 +4130,8 @@ class AttributeSelectorDialogComponent {
|
|
|
4116
4130
|
this.sortAvailableAttributes();
|
|
4117
4131
|
this.updateGrids();
|
|
4118
4132
|
}
|
|
4119
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
4120
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
4133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4134
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: AttributeSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-selector-dialog", ngImport: i0, template: `
|
|
4121
4135
|
<div class="attribute-selector-container">
|
|
4122
4136
|
<div class="filter-container">
|
|
4123
4137
|
<kendo-textbox
|
|
@@ -4396,7 +4410,7 @@ class AttributeSelectorDialogComponent {
|
|
|
4396
4410
|
</div>
|
|
4397
4411
|
`, 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}.selector-editor{display:flex;flex-direction:column;gap:8px;flex-shrink:0;padding:10px 12px;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.selector-editor-title{font-size:.8rem;font-weight:600}.selector-editor-title code{font-weight:400}.selector-editor-fields{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.selector-kind{width:190px;flex-shrink:0}.selector-field{min-width:180px;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$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[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", "pinnable", "pinnedTopRows", "pinnedBottomRows", "isRowPinnable"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "rowPinChange", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], 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: i3$1.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 }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
4398
4412
|
}
|
|
4399
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
4413
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSelectorDialogComponent, decorators: [{
|
|
4400
4414
|
type: Component,
|
|
4401
4415
|
args: [{ selector: 'mm-attribute-selector-dialog', standalone: true, imports: [
|
|
4402
4416
|
CommonModule,
|
|
@@ -4762,10 +4776,10 @@ class AttributeSelectorDialogService {
|
|
|
4762
4776
|
};
|
|
4763
4777
|
}
|
|
4764
4778
|
}
|
|
4765
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
4766
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
4779
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4780
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSelectorDialogService, providedIn: 'root' });
|
|
4767
4781
|
}
|
|
4768
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
4782
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeSelectorDialogService, decorators: [{
|
|
4769
4783
|
type: Injectable,
|
|
4770
4784
|
args: [{
|
|
4771
4785
|
providedIn: 'root'
|
|
@@ -4914,8 +4928,8 @@ class RuntimeEntityVariableDialogComponent {
|
|
|
4914
4928
|
return true;
|
|
4915
4929
|
return false;
|
|
4916
4930
|
}
|
|
4917
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
4918
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
4931
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeEntityVariableDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4932
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: RuntimeEntityVariableDialogComponent, isStandalone: true, selector: "mm-runtime-entity-variable-dialog", ngImport: i0, template: `
|
|
4919
4933
|
<div class="dialog-content">
|
|
4920
4934
|
<div class="form-row">
|
|
4921
4935
|
<label class="form-label">CK Type</label>
|
|
@@ -4997,7 +5011,7 @@ class RuntimeEntityVariableDialogComponent {
|
|
|
4997
5011
|
</div>
|
|
4998
5012
|
`, 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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], 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", "messages", "dialogMessages", "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"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
4999
5013
|
}
|
|
5000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5014
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeEntityVariableDialogComponent, decorators: [{
|
|
5001
5015
|
type: Component,
|
|
5002
5016
|
args: [{ selector: 'mm-runtime-entity-variable-dialog', standalone: true, imports: [
|
|
5003
5017
|
CommonModule,
|
|
@@ -5132,10 +5146,10 @@ class RuntimeEntityVariableDialogService {
|
|
|
5132
5146
|
return { confirmed: false };
|
|
5133
5147
|
}
|
|
5134
5148
|
}
|
|
5135
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5136
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
5149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeEntityVariableDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5150
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeEntityVariableDialogService, providedIn: 'root' });
|
|
5137
5151
|
}
|
|
5138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeEntityVariableDialogService, decorators: [{
|
|
5139
5153
|
type: Injectable,
|
|
5140
5154
|
args: [{
|
|
5141
5155
|
providedIn: 'root'
|
|
@@ -5175,10 +5189,10 @@ class GetRuntimeEntityByIdDtoGQL extends i1$3.Query {
|
|
|
5175
5189
|
constructor(apollo) {
|
|
5176
5190
|
super(apollo);
|
|
5177
5191
|
}
|
|
5178
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5179
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
5192
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntityByIdDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5193
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntityByIdDtoGQL, providedIn: 'root' });
|
|
5180
5194
|
}
|
|
5181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntityByIdDtoGQL, decorators: [{
|
|
5182
5196
|
type: Injectable,
|
|
5183
5197
|
args: [{
|
|
5184
5198
|
providedIn: 'root'
|
|
@@ -5370,10 +5384,10 @@ class DataPointResolverService {
|
|
|
5370
5384
|
return [{ name: DEFAULT_DATA_POINT }];
|
|
5371
5385
|
}
|
|
5372
5386
|
}
|
|
5373
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5374
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
5387
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataPointResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5388
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataPointResolverService, providedIn: 'root' });
|
|
5375
5389
|
}
|
|
5376
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5390
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataPointResolverService, decorators: [{
|
|
5377
5391
|
type: Injectable,
|
|
5378
5392
|
args: [{ providedIn: 'root' }]
|
|
5379
5393
|
}] });
|
|
@@ -5491,8 +5505,8 @@ class DataPointPickerComponent {
|
|
|
5491
5505
|
this.filter.set(filter);
|
|
5492
5506
|
this.filterChange.emit(filter);
|
|
5493
5507
|
}
|
|
5494
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5495
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
5508
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataPointPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5509
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: DataPointPickerComponent, isStandalone: true, selector: "mm-data-point-picker", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: false, transformFunction: null }, entityRtId: { classPropertyName: "entityRtId", publicName: "entityRtId", isSignal: true, isRequired: false, transformFunction: null }, entityCkTypeId: { classPropertyName: "entityCkTypeId", publicName: "entityCkTypeId", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", filterChange: "filterChange" }, ngImport: i0, template: `
|
|
5496
5510
|
<kendo-combobox
|
|
5497
5511
|
[data]="filteredOptions()"
|
|
5498
5512
|
[value]="value()"
|
|
@@ -5510,7 +5524,7 @@ class DataPointPickerComponent {
|
|
|
5510
5524
|
}
|
|
5511
5525
|
`, isInline: true, styles: [":host{display:inline-flex;align-items:center;gap:6px;width:100%}kendo-combobox{flex:1;min-width:0}.dpp-loading{font-size:.7rem;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--kendo-color-info, #0dcaf0) 18%,transparent);color:var(--kendo-color-info, #0dcaf0);font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i3$1.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5512
5526
|
}
|
|
5513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5527
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataPointPickerComponent, decorators: [{
|
|
5514
5528
|
type: Component,
|
|
5515
5529
|
args: [{ selector: 'mm-data-point-picker', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ComboBoxModule], template: `
|
|
5516
5530
|
<kendo-combobox
|
|
@@ -5649,9 +5663,9 @@ class OctoGraphQlDataSource extends DataSourceTyped {
|
|
|
5649
5663
|
case 'isnotnull':
|
|
5650
5664
|
return { operator: FieldFilterOperatorsDto.NotEqualsDto, value: null };
|
|
5651
5665
|
case 'isempty':
|
|
5652
|
-
return { operator: FieldFilterOperatorsDto.EqualsDto, value:
|
|
5666
|
+
return { operator: FieldFilterOperatorsDto.EqualsDto, value: '' };
|
|
5653
5667
|
case 'isnotempty':
|
|
5654
|
-
return { operator: FieldFilterOperatorsDto.NotEqualsDto, value:
|
|
5668
|
+
return { operator: FieldFilterOperatorsDto.NotEqualsDto, value: '' };
|
|
5655
5669
|
default:
|
|
5656
5670
|
throw new Error('The filter operator is not supported');
|
|
5657
5671
|
}
|
|
@@ -5728,8 +5742,8 @@ class EntityIdInfoComponent {
|
|
|
5728
5742
|
this.notificationService.showError('Failed to copy to clipboard');
|
|
5729
5743
|
}
|
|
5730
5744
|
}
|
|
5731
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5732
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
5745
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityIdInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5746
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: EntityIdInfoComponent, isStandalone: true, selector: "mm-entity-id-info", inputs: { rtId: "rtId", rtCkTypeId: "rtCkTypeId", ckTypeId: "ckTypeId" }, ngImport: i0, template: `
|
|
5733
5747
|
<kendo-dropdownbutton
|
|
5734
5748
|
[data]="copyOptions"
|
|
5735
5749
|
[svgIcon]="copyIcon"
|
|
@@ -5747,7 +5761,7 @@ class EntityIdInfoComponent {
|
|
|
5747
5761
|
</kendo-dropdownbutton>
|
|
5748
5762
|
`, 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: i1$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: i1$1.ButtonItemTemplateDirective, selector: "[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]" }, { kind: "ngmodule", type: SVGIconModule }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
5749
5763
|
}
|
|
5750
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5764
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityIdInfoComponent, decorators: [{
|
|
5751
5765
|
type: Component,
|
|
5752
5766
|
args: [{ selector: 'mm-entity-id-info', standalone: true, imports: [
|
|
5753
5767
|
CommonModule,
|
|
@@ -5794,10 +5808,10 @@ class DeleteEntitiesDtoGQL extends i1$3.Mutation {
|
|
|
5794
5808
|
constructor(apollo) {
|
|
5795
5809
|
super(apollo);
|
|
5796
5810
|
}
|
|
5797
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5798
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
5811
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DeleteEntitiesDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5812
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DeleteEntitiesDtoGQL, providedIn: 'root' });
|
|
5799
5813
|
}
|
|
5800
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5814
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DeleteEntitiesDtoGQL, decorators: [{
|
|
5801
5815
|
type: Injectable,
|
|
5802
5816
|
args: [{
|
|
5803
5817
|
providedIn: 'root'
|
|
@@ -5837,10 +5851,10 @@ class GetCkModelsDtoGQL extends i1$3.Query {
|
|
|
5837
5851
|
constructor(apollo) {
|
|
5838
5852
|
super(apollo);
|
|
5839
5853
|
}
|
|
5840
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5841
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
5854
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkModelsDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5855
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkModelsDtoGQL, providedIn: 'root' });
|
|
5842
5856
|
}
|
|
5843
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5857
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkModelsDtoGQL, decorators: [{
|
|
5844
5858
|
type: Injectable,
|
|
5845
5859
|
args: [{
|
|
5846
5860
|
providedIn: 'root'
|
|
@@ -5897,10 +5911,10 @@ class GetCkTypeAssociationRolesDtoGQL extends i1$3.Query {
|
|
|
5897
5911
|
constructor(apollo) {
|
|
5898
5912
|
super(apollo);
|
|
5899
5913
|
}
|
|
5900
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5901
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
5914
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5915
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, providedIn: 'root' });
|
|
5902
5916
|
}
|
|
5903
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, decorators: [{
|
|
5904
5918
|
type: Injectable,
|
|
5905
5919
|
args: [{
|
|
5906
5920
|
providedIn: 'root'
|
|
@@ -5945,10 +5959,10 @@ class GetRuntimeEntityAssociationsByIdDtoGQL extends i1$3.Query {
|
|
|
5945
5959
|
constructor(apollo) {
|
|
5946
5960
|
super(apollo);
|
|
5947
5961
|
}
|
|
5948
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5949
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
5962
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntityAssociationsByIdDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5963
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntityAssociationsByIdDtoGQL, providedIn: 'root' });
|
|
5950
5964
|
}
|
|
5951
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
5965
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntityAssociationsByIdDtoGQL, decorators: [{
|
|
5952
5966
|
type: Injectable,
|
|
5953
5967
|
args: [{
|
|
5954
5968
|
providedIn: 'root'
|
|
@@ -5986,10 +6000,10 @@ class GetTreeAssociationTargetsDtoGQL extends i1$3.Query {
|
|
|
5986
6000
|
constructor(apollo) {
|
|
5987
6001
|
super(apollo);
|
|
5988
6002
|
}
|
|
5989
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
5990
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
6003
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetTreeAssociationTargetsDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6004
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetTreeAssociationTargetsDtoGQL, providedIn: 'root' });
|
|
5991
6005
|
}
|
|
5992
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
6006
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetTreeAssociationTargetsDtoGQL, decorators: [{
|
|
5993
6007
|
type: Injectable,
|
|
5994
6008
|
args: [{
|
|
5995
6009
|
providedIn: 'root'
|
|
@@ -6024,10 +6038,10 @@ class GetTreesDtoGQL extends i1$3.Query {
|
|
|
6024
6038
|
constructor(apollo) {
|
|
6025
6039
|
super(apollo);
|
|
6026
6040
|
}
|
|
6027
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
6028
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
6041
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetTreesDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6042
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetTreesDtoGQL, providedIn: 'root' });
|
|
6029
6043
|
}
|
|
6030
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
6044
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetTreesDtoGQL, decorators: [{
|
|
6031
6045
|
type: Injectable,
|
|
6032
6046
|
args: [{
|
|
6033
6047
|
providedIn: 'root'
|
|
@@ -6056,10 +6070,10 @@ class UpdateRuntimeEntitiesDtoGQL extends i1$3.Mutation {
|
|
|
6056
6070
|
constructor(apollo) {
|
|
6057
6071
|
super(apollo);
|
|
6058
6072
|
}
|
|
6059
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
6060
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
6073
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateRuntimeEntitiesDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6074
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateRuntimeEntitiesDtoGQL, providedIn: 'root' });
|
|
6061
6075
|
}
|
|
6062
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
6076
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateRuntimeEntitiesDtoGQL, decorators: [{
|
|
6063
6077
|
type: Injectable,
|
|
6064
6078
|
args: [{
|
|
6065
6079
|
providedIn: 'root'
|
|
@@ -6082,10 +6096,10 @@ class UpdateTreeNodesDtoGQL extends i1$3.Mutation {
|
|
|
6082
6096
|
constructor(apollo) {
|
|
6083
6097
|
super(apollo);
|
|
6084
6098
|
}
|
|
6085
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
6086
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
6099
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateTreeNodesDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6100
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateTreeNodesDtoGQL, providedIn: 'root' });
|
|
6087
6101
|
}
|
|
6088
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
6102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateTreeNodesDtoGQL, decorators: [{
|
|
6089
6103
|
type: Injectable,
|
|
6090
6104
|
args: [{
|
|
6091
6105
|
providedIn: 'root'
|
|
@@ -6198,7 +6212,7 @@ const swagger_communication = {
|
|
|
6198
6212
|
viewBox: '0 0 192 192'
|
|
6199
6213
|
};
|
|
6200
6214
|
const swagger = {
|
|
6201
|
-
name:
|
|
6215
|
+
name: 'swagger',
|
|
6202
6216
|
content: '<path id="path1" class="st0" d="M96,0C43.1,0,0,43,0,96s43.1,96,96,96,96-43,96-96S148.9,0,96,0ZM96,9.2c48,0,86.8,38.9,86.8,86.8s-38.9,86.8-86.8,86.8S9.2,143.9,9.2,96,48,9.2,96,9.2ZM67,46.9h-3.4c-7.9.5-12.5,4.1-13.9,11.8-.9,5.4-.7,10.7-1.1,16.1,0,2.8-.4,5.5-.9,8.3-1,4.9-3.2,6.4-8.2,6.6-.7,0-1.3,0-2,.3v11.6c9.1.5,10.2,3.7,10.9,13,.3,3.4,0,6.9,0,10.3s.6,6.4,1.3,9.6c2,8.6,10.5,11.5,20.6,9.8v-10.3h-4.5c-3.4,0-4.7-.9-5-4.3-.4-4.3-.3-8.6-.6-13-.6-8-1.4-15.9-9.2-21,4-2.9,6.9-6.4,7.9-11.2.7-3.2,1-6.6,1.3-10s0-6.7,0-10c.4-5.4.9-7.5,7.2-7.3h2.9v-10.4h-3.6.4ZM127.6,47c-2.2,0-4.3,0-6.5.5v10.3h5c2.6,0,4.6,1.1,4.9,4,.3,2.6.3,5.4.6,8.1.6,5.4.9,10.7,1.7,16.1.9,4.3,3.7,7.7,7.5,10.3-6.6,4.4-8.5,10.7-8.8,17.8,0,4.9-.3,9.6-.6,14.5-.3,4.4-1.7,5.8-6.2,6h-3.9v10.4h7.5c7.5-.5,11.9-4.1,13.5-11.3.6-4,1-8,1.1-12.1.3-3.7.3-7.3.6-11,.6-5.7,3.2-8.1,8.9-8.4.6,0,1,0,1.6-.3v-11.6c-1,0-1.6,0-2.3-.3-4.3,0-6.5-1.7-7.5-5.7-.7-2.6-1-5.2-1.3-8-.3-4.9-.3-10-.6-14.9-.6-9.5-6.3-14.1-15.1-14.2,0,0-.3,0-.3,0ZM72.6,89.3c-3.7,0-6.8,3.1-6.8,6.7s2.6,6.4,6.2,6.7h.4c3.6,0,6.8-2.6,7-6.3v-.3c0-3.7-2.9-6.7-6.6-6.9,0,0-.3,0-.3,0ZM95.9,89.3c-3.6,0-6.6,2.6-6.6,6.3v.6c0,4,2.7,6.6,6.9,6.6s6.6-2.6,6.6-6.9-2.7-6.7-6.9-6.6h0ZM119.6,89.3c-3.7,0-6.9,2.9-7,6.7,0,3.8,3,6.7,6.8,6.7h0c3.4.6,6.8-2.8,7-6.6,0-3.7-3.2-6.9-6.9-6.9h.1Z"/>',
|
|
6203
6217
|
viewBox: '0 0 192 192'
|
|
6204
6218
|
};
|
|
@@ -6819,10 +6833,10 @@ class TreeNavigationConfigService {
|
|
|
6819
6833
|
return [];
|
|
6820
6834
|
}
|
|
6821
6835
|
}
|
|
6822
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
6823
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
6836
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TreeNavigationConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6837
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TreeNavigationConfigService, providedIn: 'root' });
|
|
6824
6838
|
}
|
|
6825
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
6839
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TreeNavigationConfigService, decorators: [{
|
|
6826
6840
|
type: Injectable,
|
|
6827
6841
|
args: [{
|
|
6828
6842
|
providedIn: 'root',
|
|
@@ -6849,10 +6863,10 @@ class TypeHelperService {
|
|
|
6849
6863
|
&& item.rtId
|
|
6850
6864
|
&& item.ckTypeId);
|
|
6851
6865
|
}
|
|
6852
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
6853
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
6866
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TypeHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6867
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TypeHelperService, providedIn: 'root' });
|
|
6854
6868
|
}
|
|
6855
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
6869
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TypeHelperService, decorators: [{
|
|
6856
6870
|
type: Injectable,
|
|
6857
6871
|
args: [{
|
|
6858
6872
|
providedIn: 'root',
|
|
@@ -7187,7 +7201,7 @@ class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource {
|
|
|
7187
7201
|
*/
|
|
7188
7202
|
async discoverEntityRoleGroups(rtId, ckTypeId, direction = GraphDirectionDto.InboundDto, excludeRtId) {
|
|
7189
7203
|
const outbound = direction === GraphDirectionDto.OutboundDto;
|
|
7190
|
-
let definitions
|
|
7204
|
+
let definitions;
|
|
7191
7205
|
try {
|
|
7192
7206
|
const response = await firstValueFrom(this.getRuntimeEntityAssociationsByIdDtoGQL.fetch({
|
|
7193
7207
|
variables: {
|
|
@@ -7822,10 +7836,10 @@ class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource {
|
|
|
7822
7836
|
return [];
|
|
7823
7837
|
}
|
|
7824
7838
|
}
|
|
7825
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
7826
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
7839
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserDataSource, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
7840
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserDataSource, providedIn: 'root' });
|
|
7827
7841
|
}
|
|
7828
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
7842
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserDataSource, decorators: [{
|
|
7829
7843
|
type: Injectable,
|
|
7830
7844
|
args: [{
|
|
7831
7845
|
providedIn: 'root',
|
|
@@ -7849,8 +7863,8 @@ class PerspectiveSwitcherComponent {
|
|
|
7849
7863
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
7850
7864
|
/** Emits the selected perspective key. */
|
|
7851
7865
|
perspectiveChange = output();
|
|
7852
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
7853
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
7866
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PerspectiveSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7867
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: PerspectiveSwitcherComponent, isStandalone: true, selector: "mm-perspective-switcher", inputs: { perspectives: { classPropertyName: "perspectives", publicName: "perspectives", isSignal: true, isRequired: false, transformFunction: null }, activeKey: { classPropertyName: "activeKey", publicName: "activeKey", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { perspectiveChange: "perspectiveChange" }, ngImport: i0, template: `
|
|
7854
7868
|
@if (perspectives().length > 1) {
|
|
7855
7869
|
<div class="perspective-switcher">
|
|
7856
7870
|
<span class="switcher-label">{{ label() }}</span>
|
|
@@ -7866,7 +7880,7 @@ class PerspectiveSwitcherComponent {
|
|
|
7866
7880
|
}
|
|
7867
7881
|
`, isInline: true, styles: [".perspective-switcher{display:flex;align-items:center;gap:8px;padding:4px 8px}.switcher-label{font-size:.85rem;font-weight:600;color:var(--kendo-color-subtle, #6c757d);white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: DropDownListModule }, { kind: "component", type: i3$1.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7868
7882
|
}
|
|
7869
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
7883
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PerspectiveSwitcherComponent, decorators: [{
|
|
7870
7884
|
type: Component,
|
|
7871
7885
|
args: [{ selector: 'mm-perspective-switcher', standalone: true, imports: [DropDownListModule], template: `
|
|
7872
7886
|
@if (perspectives().length > 1) {
|
|
@@ -7940,8 +7954,8 @@ class EntitySelectorDialogComponent {
|
|
|
7940
7954
|
onCancel() {
|
|
7941
7955
|
this.windowRef.close();
|
|
7942
7956
|
}
|
|
7943
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
7944
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
7957
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntitySelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7958
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: EntitySelectorDialogComponent, isStandalone: true, selector: "mm-entity-selector-dialog", providers: [RuntimeBrowserDataSource], viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true }], ngImport: i0, template: `
|
|
7945
7959
|
<div class="entity-selector">
|
|
7946
7960
|
<div class="entity-selector-body">
|
|
7947
7961
|
<mm-perspective-switcher
|
|
@@ -7988,7 +8002,7 @@ class EntitySelectorDialogComponent {
|
|
|
7988
8002
|
</div>
|
|
7989
8003
|
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.entity-selector{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;box-sizing:border-box}.entity-selector-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px}.tree-section{flex:1;min-height:0;overflow:auto;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;background:var(--kendo-color-surface, #ffffff)}.selection-preview{padding:10px 12px;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;background:var(--kendo-color-surface-alt, #f8f9fa);display:flex;flex-direction:column;gap:4px;flex-shrink:0}.preview-row{display:flex;gap:8px}.preview-row .preview-label{font-weight:600;min-width:45px;color:var(--kendo-color-subtle, #6c757d);font-size:.85rem}.preview-row .preview-value{font-size:.85rem}.preview-row .monospace{font-family:monospace}.selection-hint{text-align:center;padding:8px;color:var(--kendo-color-subtle, #6c757d);font-size:.85rem;flex-shrink:0}.dialog-actions{flex:0 0 auto;display:flex;gap:8px;justify-content:flex-end;padding:10px 14px;border-top:1px solid var(--kendo-color-border, #dee2e6);background:var(--kendo-color-surface, transparent)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: TreeComponent, selector: "mm-tree-view", inputs: ["dataSource"], outputs: ["nodeSelected", "nodeClick", "nodeDoubleClick", "nodeDrop", "expand", "collapse"] }, { kind: "component", type: PerspectiveSwitcherComponent, selector: "mm-perspective-switcher", inputs: ["perspectives", "activeKey", "label"], outputs: ["perspectiveChange"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
7990
8004
|
}
|
|
7991
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
8005
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntitySelectorDialogComponent, decorators: [{
|
|
7992
8006
|
type: Component,
|
|
7993
8007
|
args: [{ selector: 'mm-entity-selector-dialog', standalone: true, imports: [
|
|
7994
8008
|
CommonModule,
|
|
@@ -8091,10 +8105,10 @@ class EntitySelectorDialogService {
|
|
|
8091
8105
|
return { confirmed: false };
|
|
8092
8106
|
}
|
|
8093
8107
|
}
|
|
8094
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
8095
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
8108
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntitySelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8109
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntitySelectorDialogService, providedIn: 'root' });
|
|
8096
8110
|
}
|
|
8097
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
8111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntitySelectorDialogService, decorators: [{
|
|
8098
8112
|
type: Injectable,
|
|
8099
8113
|
args: [{
|
|
8100
8114
|
providedIn: 'root'
|
|
@@ -8595,8 +8609,8 @@ class FieldFilterEditorComponent {
|
|
|
8595
8609
|
}
|
|
8596
8610
|
return values;
|
|
8597
8611
|
}
|
|
8598
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
8599
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
8612
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: FieldFilterEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8613
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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: `
|
|
8600
8614
|
<div class="field-filter-editor">
|
|
8601
8615
|
@if (ckTypeId && !hideNavigationProperties) {
|
|
8602
8616
|
<div class="attribute-options">
|
|
@@ -8895,7 +8909,7 @@ class FieldFilterEditorComponent {
|
|
|
8895
8909
|
</div>
|
|
8896
8910
|
`, 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]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[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", "pinnable", "pinnedTopRows", "pinnedBottomRows", "isRowPinnable"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "rowPinChange", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i3$1.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i3$1.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: i3$1.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: i3$1.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 }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
8897
8911
|
}
|
|
8898
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
8912
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: FieldFilterEditorComponent, decorators: [{
|
|
8899
8913
|
type: Component,
|
|
8900
8914
|
args: [{ selector: 'mm-field-filter-editor', standalone: true, imports: [
|
|
8901
8915
|
CommonModule,
|
|
@@ -9240,8 +9254,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
9240
9254
|
*/
|
|
9241
9255
|
class OctoLoaderComponent {
|
|
9242
9256
|
size = 'medium';
|
|
9243
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
9244
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
9257
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: OctoLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9258
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: OctoLoaderComponent, isStandalone: true, selector: "mm-octo-loader", inputs: { size: "size" }, ngImport: i0, template: `
|
|
9245
9259
|
<div class="octo-loader" [class.octo-loader--small]="size === 'small'" [class.octo-loader--medium]="size === 'medium'">
|
|
9246
9260
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-22 -8 112 118" class="octo-loader__svg" overflow="visible">
|
|
9247
9261
|
<!-- Orbit track -->
|
|
@@ -9332,7 +9346,7 @@ class OctoLoaderComponent {
|
|
|
9332
9346
|
</div>
|
|
9333
9347
|
`, 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"], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
9334
9348
|
}
|
|
9335
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
9349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: OctoLoaderComponent, decorators: [{
|
|
9336
9350
|
type: Component,
|
|
9337
9351
|
args: [{ selector: 'mm-octo-loader', standalone: true, template: `
|
|
9338
9352
|
<div class="octo-loader" [class.octo-loader--small]="size === 'small'" [class.octo-loader--medium]="size === 'medium'">
|
|
@@ -9444,10 +9458,10 @@ class CreateEntitiesDtoGQL extends i1$3.Mutation {
|
|
|
9444
9458
|
constructor(apollo) {
|
|
9445
9459
|
super(apollo);
|
|
9446
9460
|
}
|
|
9447
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
9448
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
9461
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CreateEntitiesDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9462
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CreateEntitiesDtoGQL, providedIn: 'root' });
|
|
9449
9463
|
}
|
|
9450
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
9464
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CreateEntitiesDtoGQL, decorators: [{
|
|
9451
9465
|
type: Injectable,
|
|
9452
9466
|
args: [{
|
|
9453
9467
|
providedIn: 'root'
|
|
@@ -9479,10 +9493,10 @@ class GetBinaryInfoDtoGQL extends i1$3.Query {
|
|
|
9479
9493
|
constructor(apollo) {
|
|
9480
9494
|
super(apollo);
|
|
9481
9495
|
}
|
|
9482
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
9483
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
9496
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetBinaryInfoDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9497
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetBinaryInfoDtoGQL, providedIn: 'root' });
|
|
9484
9498
|
}
|
|
9485
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
9499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetBinaryInfoDtoGQL, decorators: [{
|
|
9486
9500
|
type: Injectable,
|
|
9487
9501
|
args: [{
|
|
9488
9502
|
providedIn: 'root'
|
|
@@ -9567,15 +9581,15 @@ class EntityAssociationsDataSourceDirective extends OctoGraphQlDataSource {
|
|
|
9567
9581
|
return new FetchResultTyped(transformedItems, totalCount);
|
|
9568
9582
|
}));
|
|
9569
9583
|
}
|
|
9570
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
9571
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
9584
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityAssociationsDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
9585
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.5", type: EntityAssociationsDataSourceDirective, isStandalone: true, selector: "[mmEntityAssociationsDataSource]", providers: [
|
|
9572
9586
|
{
|
|
9573
9587
|
provide: DataSourceBase,
|
|
9574
9588
|
useExisting: forwardRef(() => EntityAssociationsDataSourceDirective),
|
|
9575
9589
|
},
|
|
9576
9590
|
], exportAs: ["mmEntityAssociationsDataSource"], usesInheritance: true, ngImport: i0 });
|
|
9577
9591
|
}
|
|
9578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
9592
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityAssociationsDataSourceDirective, decorators: [{
|
|
9579
9593
|
type: Directive,
|
|
9580
9594
|
args: [{
|
|
9581
9595
|
selector: '[mmEntityAssociationsDataSource]',
|
|
@@ -9761,8 +9775,8 @@ class DataMappingListComponent {
|
|
|
9761
9775
|
plusIcon = plusIcon;
|
|
9762
9776
|
trashIcon = trashIcon;
|
|
9763
9777
|
linkIcon = hyperlinkOpenIcon;
|
|
9764
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
9765
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
9778
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataMappingListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9779
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: DataMappingListComponent, isStandalone: true, selector: "mm-data-mapping-list", inputs: { messages: "messages", mappings: "mappings", sourceEntity: "sourceEntity", expressionValidator: "expressionValidator" }, outputs: { addMapping: "addMapping", removeMapping: "removeMapping", selectTarget: "selectTarget", selectSourceAttribute: "selectSourceAttribute", selectTargetAttribute: "selectTargetAttribute", mappingChanged: "mappingChanged", navigateToTarget: "navigateToTarget", saveAll: "saveAll" }, ngImport: i0, template: `
|
|
9766
9780
|
<div class="mapping-list">
|
|
9767
9781
|
<div class="mapping-toolbar">
|
|
9768
9782
|
<button kendoButton themeColor="primary" size="small" [svgIcon]="plusIcon"
|
|
@@ -9856,7 +9870,7 @@ class DataMappingListComponent {
|
|
|
9856
9870
|
</div>
|
|
9857
9871
|
`, isInline: true, styles: [".mapping-list{display:flex;flex-direction:column;gap:12px}.mapping-toolbar{display:flex;justify-content:flex-end}.mapping-empty-hint{text-align:center;padding:16px;color:var(--kendo-color-subtle, #6c757d);font-size:.85rem}.mapping-card{border:1px solid var(--kendo-color-border, #dee2e6);border-radius:6px;overflow:hidden}.mapping-card-header{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-on-primary, #ffffff);background:var(--kendo-color-primary, #ff6358)}.mapping-card-header .mapping-name{flex:1}.mapping-card-body{padding:10px 12px;display:flex;flex-direction:column;gap:8px}.mapping-row{display:flex;flex-direction:column;gap:3px}.mapping-row label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #6c757d)}.target-display{display:flex;align-items:center;gap:8px;padding:4px 8px;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;background:var(--kendo-color-surface-alt, #f8f9fa);min-height:30px}.target-display .target-info{flex:1;font-size:.85rem;font-family:monospace}.mapping-actions{display:flex;justify-content:flex-end;padding-top:4px}.entity-info-display{display:flex;flex-direction:column;gap:2px;padding:4px 8px;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;background:var(--kendo-color-surface-alt, #f8f9fa)}.entity-info-main{display:flex;align-items:center;gap:4px}.entity-name{flex:1;font-size:.85rem;font-weight:600}.entity-info-details{display:flex;align-items:center;gap:2px;font-size:.7rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d)}.entity-detail-separator{color:var(--kendo-color-subtle, #6c757d)}.expression-feedback{font-size:.75rem;padding:2px 0;font-family:monospace}.expression-error{color:var(--kendo-color-error, #dc3545)}.expression-success{color:var(--kendo-color-success, #28a745)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { 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: "ngmodule", type: SVGIconModule }, { kind: "component", type: DataPointPickerComponent, selector: "mm-data-point-picker", inputs: ["entity", "entityRtId", "entityCkTypeId", "value", "placeholder", "disabled"], outputs: ["valueChange", "filterChange"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
9858
9872
|
}
|
|
9859
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
9873
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataMappingListComponent, decorators: [{
|
|
9860
9874
|
type: Component,
|
|
9861
9875
|
args: [{ selector: 'mm-data-mapping-list', standalone: true, imports: [
|
|
9862
9876
|
CommonModule,
|
|
@@ -10030,7 +10044,7 @@ class EntityDetailViewComponent {
|
|
|
10030
10044
|
propertyGridConfig = {
|
|
10031
10045
|
readOnlyMode: false,
|
|
10032
10046
|
showTypeIcons: true,
|
|
10033
|
-
height:
|
|
10047
|
+
height: '500px',
|
|
10034
10048
|
showSearch: true,
|
|
10035
10049
|
};
|
|
10036
10050
|
// Direction filter - use getter for current messages
|
|
@@ -10092,7 +10106,7 @@ class EntityDetailViewComponent {
|
|
|
10092
10106
|
});
|
|
10093
10107
|
}
|
|
10094
10108
|
ngOnChanges(changes) {
|
|
10095
|
-
if (changes[
|
|
10109
|
+
if (changes['entity'] && this.entity) {
|
|
10096
10110
|
this.updatePropertyGrid();
|
|
10097
10111
|
}
|
|
10098
10112
|
}
|
|
@@ -10112,7 +10126,7 @@ class EntityDetailViewComponent {
|
|
|
10112
10126
|
this.propertyGridItems = items;
|
|
10113
10127
|
},
|
|
10114
10128
|
error: (err) => {
|
|
10115
|
-
console.error(
|
|
10129
|
+
console.error('Error converting entity to properties:', err);
|
|
10116
10130
|
this.propertyGridItems = [];
|
|
10117
10131
|
},
|
|
10118
10132
|
});
|
|
@@ -10129,7 +10143,7 @@ class EntityDetailViewComponent {
|
|
|
10129
10143
|
};
|
|
10130
10144
|
}
|
|
10131
10145
|
normalizeDateValue(value) {
|
|
10132
|
-
if (typeof value ===
|
|
10146
|
+
if (typeof value === 'string') {
|
|
10133
10147
|
return value;
|
|
10134
10148
|
}
|
|
10135
10149
|
if (value instanceof Date) {
|
|
@@ -10184,7 +10198,7 @@ class EntityDetailViewComponent {
|
|
|
10184
10198
|
};
|
|
10185
10199
|
getEntityIdentifier() {
|
|
10186
10200
|
if (!this.entity?.ckTypeId || !this.entity?.rtId) {
|
|
10187
|
-
return
|
|
10201
|
+
return 'Unknown';
|
|
10188
10202
|
}
|
|
10189
10203
|
return `${this.entity.ckTypeId}@${this.entity.rtId}`;
|
|
10190
10204
|
}
|
|
@@ -10213,20 +10227,20 @@ class EntityDetailViewComponent {
|
|
|
10213
10227
|
.then(() => {
|
|
10214
10228
|
this.notificationService.show({
|
|
10215
10229
|
content: `${label} ${this._messages.copiedToClipboard}`,
|
|
10216
|
-
type: { style:
|
|
10217
|
-
position: { horizontal:
|
|
10230
|
+
type: { style: 'success', icon: true },
|
|
10231
|
+
position: { horizontal: 'right', vertical: 'top' },
|
|
10218
10232
|
hideAfter: 2000,
|
|
10219
|
-
animation: { type:
|
|
10233
|
+
animation: { type: 'fade', duration: 400 },
|
|
10220
10234
|
});
|
|
10221
10235
|
})
|
|
10222
10236
|
.catch((err) => {
|
|
10223
|
-
console.error(
|
|
10237
|
+
console.error('Failed to copy:', err);
|
|
10224
10238
|
this.notificationService.show({
|
|
10225
10239
|
content: this._messages.failedToCopyToClipboard,
|
|
10226
|
-
type: { style:
|
|
10227
|
-
position: { horizontal:
|
|
10240
|
+
type: { style: 'error', icon: true },
|
|
10241
|
+
position: { horizontal: 'right', vertical: 'top' },
|
|
10228
10242
|
hideAfter: 3000,
|
|
10229
|
-
animation: { type:
|
|
10243
|
+
animation: { type: 'fade', duration: 400 },
|
|
10230
10244
|
});
|
|
10231
10245
|
});
|
|
10232
10246
|
}
|
|
@@ -10236,7 +10250,7 @@ class EntityDetailViewComponent {
|
|
|
10236
10250
|
*/
|
|
10237
10251
|
async onBinaryDownload(_event) {
|
|
10238
10252
|
if (!this.entity?.rtId) {
|
|
10239
|
-
console.warn(
|
|
10253
|
+
console.warn('Cannot download: no entity rtId available');
|
|
10240
10254
|
return;
|
|
10241
10255
|
}
|
|
10242
10256
|
try {
|
|
@@ -10247,32 +10261,32 @@ class EntityDetailViewComponent {
|
|
|
10247
10261
|
const item = result.data?.runtime?.systemReportingFileSystemItem?.items?.[0];
|
|
10248
10262
|
if (item?.content?.downloadUri) {
|
|
10249
10263
|
// Open download in new tab
|
|
10250
|
-
window.open(item.content.downloadUri,
|
|
10264
|
+
window.open(item.content.downloadUri, '_blank', 'noopener,noreferrer');
|
|
10251
10265
|
}
|
|
10252
10266
|
else {
|
|
10253
|
-
console.warn(
|
|
10267
|
+
console.warn('No downloadUri found for binary');
|
|
10254
10268
|
this.notificationService.show({
|
|
10255
10269
|
content: this._messages.downloadNotAvailable,
|
|
10256
|
-
type: { style:
|
|
10257
|
-
position: { horizontal:
|
|
10270
|
+
type: { style: 'warning', icon: true },
|
|
10271
|
+
position: { horizontal: 'right', vertical: 'top' },
|
|
10258
10272
|
hideAfter: 3000,
|
|
10259
|
-
animation: { type:
|
|
10273
|
+
animation: { type: 'fade', duration: 400 },
|
|
10260
10274
|
});
|
|
10261
10275
|
}
|
|
10262
10276
|
}
|
|
10263
10277
|
catch (error) {
|
|
10264
|
-
console.error(
|
|
10278
|
+
console.error('Failed to load binary info:', error);
|
|
10265
10279
|
this.notificationService.show({
|
|
10266
10280
|
content: this._messages.failedToLoadDownloadInfo,
|
|
10267
|
-
type: { style:
|
|
10268
|
-
position: { horizontal:
|
|
10281
|
+
type: { style: 'error', icon: true },
|
|
10282
|
+
position: { horizontal: 'right', vertical: 'top' },
|
|
10269
10283
|
hideAfter: 3000,
|
|
10270
|
-
animation: { type:
|
|
10284
|
+
animation: { type: 'fade', duration: 400 },
|
|
10271
10285
|
});
|
|
10272
10286
|
}
|
|
10273
10287
|
}
|
|
10274
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
10275
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
10288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityDetailViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: EntityDetailViewComponent, isStandalone: true, selector: "mm-entity-detail-view", inputs: { entity: "entity", loading: "loading", error: "error", showHeader: "showHeader", messages: "messages", showDataMapping: "showDataMapping", dataMappings: "dataMappings", expressionValidator: "expressionValidator" }, outputs: { retry: "retry", propertyChange: "propertyChange", navigateToEntity: "navigateToEntity", addMappingRequested: "addMappingRequested", removeMappingRequested: "removeMappingRequested", selectMappingTarget: "selectMappingTarget", selectSourceAttributeRequested: "selectSourceAttributeRequested", selectTargetAttributeRequested: "selectTargetAttributeRequested", mappingChanged: "mappingChanged", saveAllMappingsRequested: "saveAllMappingsRequested" }, viewQueries: [{ propertyName: "associationsDataSource", first: true, predicate: ["associationsDir"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
10276
10290
|
@if (loading) {
|
|
10277
10291
|
<div class="loading-state">
|
|
10278
10292
|
<p>{{ _messages.loadingEntityDetails }}</p>
|
|
@@ -10510,9 +10524,9 @@ class EntityDetailViewComponent {
|
|
|
10510
10524
|
}
|
|
10511
10525
|
`, 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)}.entity-content .entity-tabs .tab-content.mapping-tab{padding:12px}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-empty{display:flex;flex-direction:column;align-items:center;padding:24px 20px;text-align:center}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-empty kendo-svgicon{font-size:36px;margin-bottom:10px;opacity:.5}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-empty p{margin:0 0 12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-config{display:flex;flex-direction:column;gap:20px}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-section{border:1px solid var(--kendo-color-border, #dee2e6);border-radius:6px;overflow:hidden}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-section .section-header{padding:8px 14px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--kendo-color-on-primary, #ffffff);background:var(--kendo-color-primary, #ff6358)}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-section .section-body{padding:12px 14px;display:flex;flex-direction:column;gap:10px}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-field{display:flex;flex-direction:column;gap:4px}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-field label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #6c757d)}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-target-display{display:flex;align-items:center;gap:8px}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-target-display .target-type{font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);font-family:monospace;padding:2px 6px;border-radius:3px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6)}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-target-display .target-name{font-weight:600;flex:1}.entity-content .entity-tabs .tab-content.mapping-tab .field-hint{font-size:.7rem;color:var(--kendo-color-subtle, #6c757d);font-style:italic;line-height:1.3}.entity-content .entity-tabs .tab-content.mapping-tab .attribute-picker{display:flex;align-items:center;gap:8px;padding:4px 10px;border-radius:4px;border:1px solid var(--kendo-color-border, #dee2e6);background:var(--kendo-color-surface-alt, #f8f9fa);min-height:32px}.entity-content .entity-tabs .tab-content.mapping-tab .attribute-picker .attribute-value{flex:1;font-family:monospace;font-size:.85rem}.entity-content .entity-tabs .tab-content.mapping-tab .mapping-actions{display:flex;gap:8px;justify-content:flex-end;padding-top:4px}@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$4.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$4.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i1$4.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i1$4.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i1$4.CardBodyComponent, selector: "kendo-card-body" }, { kind: "component", type: i1$4.CardHeaderComponent, selector: "kendo-card-header" }, { kind: "ngmodule", type: DropDownListModule }, { kind: "component", type: i3$1.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", "messages"], outputs: ["propertyChange", "saveRequested", "binaryDownload"] }, { kind: "component", type: ListViewComponent, selector: "mm-list-view", inputs: ["pageSize", "skip", "autoPageSize", "rowIsClickable", "showRowCheckBoxes", "showRowSelectAllCheckBox", "contextMenuType", "leftToolbarActions", "rightToolbarActions", "actionCommandItems", "contextMenuCommandItems", "excelExportFileName", "pdfExportFileName", "pageable", "sortable", "rowFilterEnabled", "searchTextBoxEnabled", "persistListState", "listStateKey", "resizable", "actionsColumnWidth", "hideCheckboxesBelow", "cardModeBelow", "rowClass", "messages", "selectable", "columns"], outputs: ["rowClicked", "resetFilters"] }, { kind: "directive", type: EntityAssociationsDataSourceDirective, selector: "[mmEntityAssociationsDataSource]", exportAs: ["mmEntityAssociationsDataSource"] }, { kind: "component", type: DataMappingListComponent, selector: "mm-data-mapping-list", inputs: ["messages", "mappings", "sourceEntity", "expressionValidator"], outputs: ["addMapping", "removeMapping", "selectTarget", "selectSourceAttribute", "selectTargetAttribute", "mappingChanged", "navigateToTarget", "saveAll"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
10512
10526
|
}
|
|
10513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
10527
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityDetailViewComponent, decorators: [{
|
|
10514
10528
|
type: Component,
|
|
10515
|
-
args: [{ selector:
|
|
10529
|
+
args: [{ selector: 'mm-entity-detail-view', standalone: true, imports: [
|
|
10516
10530
|
CommonModule,
|
|
10517
10531
|
TabStripModule,
|
|
10518
10532
|
ButtonModule,
|
|
@@ -10799,7 +10813,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
10799
10813
|
type: Output
|
|
10800
10814
|
}], associationsDataSource: [{
|
|
10801
10815
|
type: ViewChild,
|
|
10802
|
-
args: [
|
|
10816
|
+
args: ['associationsDir', { static: false }]
|
|
10803
10817
|
}] } });
|
|
10804
10818
|
|
|
10805
10819
|
class EntityDetailDataSource {
|
|
@@ -10837,10 +10851,10 @@ class EntityDetailDataSource {
|
|
|
10837
10851
|
throw error;
|
|
10838
10852
|
}
|
|
10839
10853
|
}
|
|
10840
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
10841
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
10854
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityDetailDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
10855
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityDetailDataSource, providedIn: 'root' });
|
|
10842
10856
|
}
|
|
10843
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
10857
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityDetailDataSource, decorators: [{
|
|
10844
10858
|
type: Injectable,
|
|
10845
10859
|
args: [{
|
|
10846
10860
|
providedIn: 'root',
|
|
@@ -10902,7 +10916,7 @@ class RtEntityIdHelper {
|
|
|
10902
10916
|
return { rtId, ckTypeId };
|
|
10903
10917
|
}
|
|
10904
10918
|
catch (error) {
|
|
10905
|
-
throw new Error(`Failed to decode entity ID: ${error}
|
|
10919
|
+
throw new Error(`Failed to decode entity ID: ${error}`, { cause: error });
|
|
10906
10920
|
}
|
|
10907
10921
|
}
|
|
10908
10922
|
/**
|
|
@@ -11255,8 +11269,8 @@ class EntityDetailComponent {
|
|
|
11255
11269
|
});
|
|
11256
11270
|
}
|
|
11257
11271
|
}
|
|
11258
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11259
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
11272
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11273
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: EntityDetailComponent, isStandalone: true, selector: "mm-entity-detail", inputs: { messages: "messages" }, ngImport: i0, template: `
|
|
11260
11274
|
<div class="entity-detail">
|
|
11261
11275
|
<div class="entity-detail-header">
|
|
11262
11276
|
<button
|
|
@@ -11300,7 +11314,7 @@ class EntityDetailComponent {
|
|
|
11300
11314
|
</div>
|
|
11301
11315
|
`, 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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: EntityDetailViewComponent, selector: "mm-entity-detail-view", inputs: ["entity", "loading", "error", "showHeader", "messages", "showDataMapping", "dataMappings", "expressionValidator"], outputs: ["retry", "propertyChange", "navigateToEntity", "addMappingRequested", "removeMappingRequested", "selectMappingTarget", "selectSourceAttributeRequested", "selectTargetAttributeRequested", "mappingChanged", "saveAllMappingsRequested"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
11302
11316
|
}
|
|
11303
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11317
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: EntityDetailComponent, decorators: [{
|
|
11304
11318
|
type: Component,
|
|
11305
11319
|
args: [{ selector: 'mm-entity-detail', imports: [
|
|
11306
11320
|
CommonModule,
|
|
@@ -11429,10 +11443,10 @@ class AssociationValidationService {
|
|
|
11429
11443
|
clearCache() {
|
|
11430
11444
|
this.outRolesCache.clear();
|
|
11431
11445
|
}
|
|
11432
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11433
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11446
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AssociationValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11447
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AssociationValidationService, providedIn: 'root' });
|
|
11434
11448
|
}
|
|
11435
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AssociationValidationService, decorators: [{
|
|
11436
11450
|
type: Injectable,
|
|
11437
11451
|
args: [{
|
|
11438
11452
|
providedIn: 'root',
|
|
@@ -11473,10 +11487,10 @@ class GetRuntimeEntitiesByTypeDtoGQL extends i1$3.Query {
|
|
|
11473
11487
|
constructor(apollo) {
|
|
11474
11488
|
super(apollo);
|
|
11475
11489
|
}
|
|
11476
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11477
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11490
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntitiesByTypeDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11491
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntitiesByTypeDtoGQL, providedIn: 'root' });
|
|
11478
11492
|
}
|
|
11479
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11493
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetRuntimeEntitiesByTypeDtoGQL, decorators: [{
|
|
11480
11494
|
type: Injectable,
|
|
11481
11495
|
args: [{
|
|
11482
11496
|
providedIn: 'root'
|
|
@@ -11537,15 +11551,15 @@ class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource {
|
|
|
11537
11551
|
return new FetchResultTyped(transformedItems, totalCount);
|
|
11538
11552
|
}));
|
|
11539
11553
|
}
|
|
11540
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11541
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
11554
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeEntitiesDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
11555
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.5", type: CkTypeEntitiesDataSourceDirective, isStandalone: true, selector: "[mmCkTypeEntitiesDataSource]", providers: [
|
|
11542
11556
|
{
|
|
11543
11557
|
provide: DataSourceBase,
|
|
11544
11558
|
useExisting: forwardRef(() => CkTypeEntitiesDataSourceDirective),
|
|
11545
11559
|
},
|
|
11546
11560
|
], exportAs: ["mmCkTypeEntitiesDataSource"], usesInheritance: true, ngImport: i0 });
|
|
11547
11561
|
}
|
|
11548
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11562
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CkTypeEntitiesDataSourceDirective, decorators: [{
|
|
11549
11563
|
type: Directive,
|
|
11550
11564
|
args: [{
|
|
11551
11565
|
selector: '[mmCkTypeEntitiesDataSource]',
|
|
@@ -11667,10 +11681,10 @@ class RuntimeBrowserStateService {
|
|
|
11667
11681
|
}
|
|
11668
11682
|
return item.text || 'unknown';
|
|
11669
11683
|
}
|
|
11670
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11671
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11684
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11685
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserStateService, providedIn: 'root' });
|
|
11672
11686
|
}
|
|
11673
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11687
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserStateService, decorators: [{
|
|
11674
11688
|
type: Injectable,
|
|
11675
11689
|
args: [{
|
|
11676
11690
|
providedIn: 'root',
|
|
@@ -11705,12 +11719,12 @@ class AttributeCoordinatorService {
|
|
|
11705
11719
|
markStructureAsReady() {
|
|
11706
11720
|
this.structureReady.set(true);
|
|
11707
11721
|
}
|
|
11708
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11709
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11722
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeCoordinatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11723
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeCoordinatorService, providedIn: 'root' });
|
|
11710
11724
|
}
|
|
11711
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11725
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeCoordinatorService, decorators: [{
|
|
11712
11726
|
type: Injectable,
|
|
11713
|
-
args: [{ providedIn:
|
|
11727
|
+
args: [{ providedIn: 'root' }]
|
|
11714
11728
|
}] });
|
|
11715
11729
|
|
|
11716
11730
|
const GetCkAttributesDetailedDocumentDto = gql `
|
|
@@ -11759,10 +11773,10 @@ class GetCkAttributesDetailedDtoGQL extends i1$3.Query {
|
|
|
11759
11773
|
constructor(apollo) {
|
|
11760
11774
|
super(apollo);
|
|
11761
11775
|
}
|
|
11762
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11763
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11776
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkAttributesDetailedDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11777
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkAttributesDetailedDtoGQL, providedIn: 'root' });
|
|
11764
11778
|
}
|
|
11765
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11779
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkAttributesDetailedDtoGQL, decorators: [{
|
|
11766
11780
|
type: Injectable,
|
|
11767
11781
|
args: [{
|
|
11768
11782
|
providedIn: 'root'
|
|
@@ -11816,10 +11830,10 @@ class GetCkRecordDetailedDtoGQL extends i1$3.Query {
|
|
|
11816
11830
|
constructor(apollo) {
|
|
11817
11831
|
super(apollo);
|
|
11818
11832
|
}
|
|
11819
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11820
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11833
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkRecordDetailedDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11834
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkRecordDetailedDtoGQL, providedIn: 'root' });
|
|
11821
11835
|
}
|
|
11822
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11836
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetCkRecordDetailedDtoGQL, decorators: [{
|
|
11823
11837
|
type: Injectable,
|
|
11824
11838
|
args: [{
|
|
11825
11839
|
providedIn: 'root'
|
|
@@ -11871,10 +11885,10 @@ class AttributeMetadataResolverService {
|
|
|
11871
11885
|
.pipe(map$1((res) => (res.data?.constructionKit?.records?.items?.[0]?.attributes
|
|
11872
11886
|
?.items ?? []).filter((item) => item != null)));
|
|
11873
11887
|
}
|
|
11874
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11875
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11888
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeMetadataResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11889
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeMetadataResolverService, providedIn: 'root' });
|
|
11876
11890
|
}
|
|
11877
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11891
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeMetadataResolverService, decorators: [{
|
|
11878
11892
|
type: Injectable,
|
|
11879
11893
|
args: [{
|
|
11880
11894
|
providedIn: 'root',
|
|
@@ -11883,51 +11897,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
11883
11897
|
|
|
11884
11898
|
class AttributeRecognitionService {
|
|
11885
11899
|
isString(attributeValueType) {
|
|
11886
|
-
return attributeValueType ===
|
|
11900
|
+
return attributeValueType === 'STRING';
|
|
11887
11901
|
}
|
|
11888
11902
|
isNumber(attributeValueType) {
|
|
11889
|
-
return [
|
|
11903
|
+
return ['INT', 'INTEGER', 'INTEGER_64', 'DOUBLE', 'NUMBER', 'LONG'].includes(attributeValueType);
|
|
11890
11904
|
}
|
|
11891
11905
|
isEnum(attributeValueType) {
|
|
11892
|
-
return attributeValueType ===
|
|
11906
|
+
return attributeValueType === 'ENUM';
|
|
11893
11907
|
}
|
|
11894
11908
|
isRecord(attributeValueType) {
|
|
11895
|
-
return attributeValueType ===
|
|
11909
|
+
return attributeValueType === 'RECORD';
|
|
11896
11910
|
}
|
|
11897
11911
|
isArray(attributeValueType) {
|
|
11898
|
-
return (attributeValueType.endsWith(
|
|
11899
|
-
attributeValueType !==
|
|
11912
|
+
return (attributeValueType.endsWith('_ARRAY') &&
|
|
11913
|
+
attributeValueType !== 'RECORD_ARRAY');
|
|
11900
11914
|
}
|
|
11901
11915
|
isDate(attributeValueType) {
|
|
11902
|
-
return [
|
|
11916
|
+
return ['DATE', 'DATE_TIME', 'DATE_TIME_OFFSET'].includes(attributeValueType);
|
|
11903
11917
|
}
|
|
11904
11918
|
isTime(attributeValueType) {
|
|
11905
|
-
return [
|
|
11919
|
+
return ['TIME_SPAN'].includes(attributeValueType);
|
|
11906
11920
|
}
|
|
11907
11921
|
isGeoSpatialPoint(attributeValueType) {
|
|
11908
|
-
return [
|
|
11922
|
+
return ['GEOSPATIAL_POINT'].includes(attributeValueType);
|
|
11909
11923
|
}
|
|
11910
11924
|
isBinary(attributeValueType) {
|
|
11911
|
-
return [
|
|
11925
|
+
return ['BINARY', 'BINARY_LINKED'].includes(attributeValueType);
|
|
11912
11926
|
}
|
|
11913
11927
|
isRecordArray(attributeValueType) {
|
|
11914
|
-
return attributeValueType ===
|
|
11928
|
+
return attributeValueType === 'RECORD_ARRAY';
|
|
11915
11929
|
}
|
|
11916
11930
|
isBoolean(attributeValueType) {
|
|
11917
|
-
return attributeValueType ===
|
|
11931
|
+
return attributeValueType === 'BOOLEAN';
|
|
11918
11932
|
}
|
|
11919
11933
|
isIntArray(attributeValueType) {
|
|
11920
|
-
return [
|
|
11934
|
+
return ['INT_ARRAY', 'INTEGER_ARRAY'].includes(attributeValueType);
|
|
11921
11935
|
}
|
|
11922
11936
|
isStringArray(attributeValueType) {
|
|
11923
|
-
return attributeValueType ===
|
|
11937
|
+
return attributeValueType === 'STRING_ARRAY';
|
|
11924
11938
|
}
|
|
11925
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
11926
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
11939
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeRecognitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11940
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeRecognitionService, providedIn: 'root' });
|
|
11927
11941
|
}
|
|
11928
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
11942
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeRecognitionService, decorators: [{
|
|
11929
11943
|
type: Injectable,
|
|
11930
|
-
args: [{ providedIn:
|
|
11944
|
+
args: [{ providedIn: 'root' }]
|
|
11931
11945
|
}] });
|
|
11932
11946
|
|
|
11933
11947
|
/**
|
|
@@ -11935,7 +11949,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
11935
11949
|
* Provides convertGeospatialPointToGeoJSON, fileToByteArray, getFileFromValue, base64ToByteArray.
|
|
11936
11950
|
*/
|
|
11937
11951
|
function isRecordValue(value) {
|
|
11938
|
-
return typeof value ===
|
|
11952
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
11939
11953
|
}
|
|
11940
11954
|
/**
|
|
11941
11955
|
* Converts a GeoJSON-like point control ({ longitude, latitude } or { type, longitude, latitude })
|
|
@@ -11945,16 +11959,16 @@ function convertGeospatialPointToGeoJSON(point) {
|
|
|
11945
11959
|
if (!isRecordValue(point)) {
|
|
11946
11960
|
return point;
|
|
11947
11961
|
}
|
|
11948
|
-
if (
|
|
11962
|
+
if ('longitude' in point && 'latitude' in point) {
|
|
11949
11963
|
return {
|
|
11950
|
-
type:
|
|
11951
|
-
coordinates: [point[
|
|
11964
|
+
type: 'Point',
|
|
11965
|
+
coordinates: [point['longitude'], point['latitude']],
|
|
11952
11966
|
};
|
|
11953
11967
|
}
|
|
11954
|
-
if (point[
|
|
11968
|
+
if (point['type'] === 'Point' && 'longitude' in point && 'latitude' in point) {
|
|
11955
11969
|
return {
|
|
11956
|
-
type:
|
|
11957
|
-
coordinates: [point[
|
|
11970
|
+
type: 'Point',
|
|
11971
|
+
coordinates: [point['longitude'], point['latitude']],
|
|
11958
11972
|
};
|
|
11959
11973
|
}
|
|
11960
11974
|
return point;
|
|
@@ -11987,9 +12001,9 @@ function base64ToByteArray(base64) {
|
|
|
11987
12001
|
}
|
|
11988
12002
|
|
|
11989
12003
|
/** Property set on synthetic BINARY_LINKED File objects (reference/mockup without content). Used by UI to show a preview indicator. */
|
|
11990
|
-
const BINARY_LINKED_REFERENCE_FLAG =
|
|
12004
|
+
const BINARY_LINKED_REFERENCE_FLAG = '__isBinaryLinkedReference';
|
|
11991
12005
|
/** Property set on BINARY File objects restored from base64 (content is real; filename is a placeholder). Used by UI to show a reference hint. */
|
|
11992
|
-
const BINARY_REFERENCE_FLAG =
|
|
12006
|
+
const BINARY_REFERENCE_FLAG = '__isBinaryFromBase64';
|
|
11993
12007
|
/**
|
|
11994
12008
|
* Maps between form model and GraphQL API: builds form attribute definitions from CK metadata and initial/default
|
|
11995
12009
|
* values, and maps form values to create/update mutation payloads (including RECORD, BINARY, GEOSPATIAL_POINT, etc.).
|
|
@@ -11998,10 +12012,10 @@ class AttributeMapperService {
|
|
|
11998
12012
|
recognition = inject(AttributeRecognitionService);
|
|
11999
12013
|
metadataResolver = inject(AttributeMetadataResolverService);
|
|
12000
12014
|
isRecordValue(value) {
|
|
12001
|
-
return typeof value ===
|
|
12015
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
12002
12016
|
}
|
|
12003
12017
|
isCkAttributeMetadata(attr) {
|
|
12004
|
-
return
|
|
12018
|
+
return 'attribute' in attr || 'ckAttributeId' in attr;
|
|
12005
12019
|
}
|
|
12006
12020
|
// ─── Form ← API: attribute definition + initial/default value ─────────────────────
|
|
12007
12021
|
/**
|
|
@@ -12009,8 +12023,8 @@ class AttributeMapperService {
|
|
|
12009
12023
|
* Value priority: 1. Initial (entity data), 2. Default (CK defaultValues), 3. Empty (placeholder).
|
|
12010
12024
|
*/
|
|
12011
12025
|
mapToFormAttribute(attr, rawInitialValue) {
|
|
12012
|
-
const attributeName = attr?.attributeName ??
|
|
12013
|
-
const type = attr?.attributeValueType ??
|
|
12026
|
+
const attributeName = attr?.attributeName ?? '';
|
|
12027
|
+
const type = attr?.attributeValueType ?? '';
|
|
12014
12028
|
let parsedValue;
|
|
12015
12029
|
const hasInitial = rawInitialValue !== undefined && rawInitialValue !== null;
|
|
12016
12030
|
if (hasInitial) {
|
|
@@ -12084,20 +12098,20 @@ class AttributeMapperService {
|
|
|
12084
12098
|
async mapSingleAttributeToInput(key, value, metadata) {
|
|
12085
12099
|
const type = metadata?.attributeValueType;
|
|
12086
12100
|
// type is set only when metadata exists, so the non-null assertion is safe inside these branches.
|
|
12087
|
-
if (type ===
|
|
12101
|
+
if (type === 'BINARY_LINKED') {
|
|
12088
12102
|
return this.mapBinaryLinkedAttribute(key, value, metadata);
|
|
12089
12103
|
}
|
|
12090
12104
|
if (value === null || value === undefined) {
|
|
12091
12105
|
return metadata?.isOptional ? { attributeName: key, value: null } : null;
|
|
12092
12106
|
}
|
|
12093
|
-
if (type ===
|
|
12107
|
+
if (type === 'BINARY' && this.isOptionalEmptyBinary(metadata, value)) {
|
|
12094
12108
|
return { attributeName: key, value: null };
|
|
12095
12109
|
}
|
|
12096
12110
|
// Empty RECORD (empty object) and RECORD_ARRAY (empty array): send null when optional, skip otherwise.
|
|
12097
|
-
if (type ===
|
|
12111
|
+
if (type === 'RECORD' && this.isValueEmpty(value)) {
|
|
12098
12112
|
return metadata?.isOptional ? { attributeName: key, value: null } : null;
|
|
12099
12113
|
}
|
|
12100
|
-
if (type ===
|
|
12114
|
+
if (type === 'RECORD_ARRAY' && Array.isArray(value) && value.length === 0) {
|
|
12101
12115
|
return metadata?.isOptional ? { attributeName: key, value: null } : null;
|
|
12102
12116
|
}
|
|
12103
12117
|
if (metadata?.isOptional &&
|
|
@@ -12219,26 +12233,26 @@ class AttributeMapperService {
|
|
|
12219
12233
|
async processAttributeValue(value, metadata) {
|
|
12220
12234
|
const attributeType = metadata?.attributeValueType;
|
|
12221
12235
|
switch (attributeType) {
|
|
12222
|
-
case
|
|
12236
|
+
case 'RECORD':
|
|
12223
12237
|
return await this.mapRecordValueToGraphQL(value, metadata?.id?.ckId);
|
|
12224
|
-
case
|
|
12238
|
+
case 'RECORD_ARRAY':
|
|
12225
12239
|
return await this.mapRecordArrayValueToGraphQL(value, metadata?.id?.ckId);
|
|
12226
|
-
case
|
|
12240
|
+
case 'GEOSPATIAL_POINT':
|
|
12227
12241
|
return convertGeospatialPointToGeoJSON(value);
|
|
12228
|
-
case
|
|
12242
|
+
case 'TIME_SPAN':
|
|
12229
12243
|
return this.convertTimeSpanToSeconds(value);
|
|
12230
|
-
case
|
|
12244
|
+
case 'BINARY':
|
|
12231
12245
|
// MeshMakers expects byte[] (array of numbers). Accept File, ArrayBuffer, base64 string, or byte[].
|
|
12232
12246
|
return await this.convertBinaryToByteArray(value);
|
|
12233
|
-
case
|
|
12247
|
+
case 'BINARY_LINKED':
|
|
12234
12248
|
// MeshMakers: prefer File for multipart upload; also accept base64 string, ArrayBuffer or byte[].
|
|
12235
12249
|
return this.convertBinaryLinkedValue(value);
|
|
12236
|
-
case
|
|
12237
|
-
return this.normalizePrimitiveArray(value,
|
|
12238
|
-
case
|
|
12239
|
-
return this.normalizePrimitiveArray(value,
|
|
12240
|
-
case
|
|
12241
|
-
case
|
|
12250
|
+
case 'INTEGER_ARRAY':
|
|
12251
|
+
return this.normalizePrimitiveArray(value, 'number');
|
|
12252
|
+
case 'STRING_ARRAY':
|
|
12253
|
+
return this.normalizePrimitiveArray(value, 'string');
|
|
12254
|
+
case 'DATE_TIME':
|
|
12255
|
+
case 'DATE_TIME_OFFSET':
|
|
12242
12256
|
if (value instanceof Date) {
|
|
12243
12257
|
if (isNaN(value.getTime())) {
|
|
12244
12258
|
return null;
|
|
@@ -12255,17 +12269,17 @@ class AttributeMapperService {
|
|
|
12255
12269
|
normalizePrimitiveArray(value, mode) {
|
|
12256
12270
|
if (!Array.isArray(value) || value.length === 0)
|
|
12257
12271
|
return null;
|
|
12258
|
-
if (mode ===
|
|
12272
|
+
if (mode === 'number') {
|
|
12259
12273
|
return value.map((v) => {
|
|
12260
|
-
if (this.isRecordValue(v) &&
|
|
12261
|
-
return Number(v[
|
|
12274
|
+
if (this.isRecordValue(v) && 'key' in v) {
|
|
12275
|
+
return Number(v['key']);
|
|
12262
12276
|
}
|
|
12263
12277
|
return Number(v);
|
|
12264
12278
|
});
|
|
12265
12279
|
}
|
|
12266
12280
|
return value.map((v) => {
|
|
12267
|
-
if (this.isRecordValue(v) &&
|
|
12268
|
-
return String(v[
|
|
12281
|
+
if (this.isRecordValue(v) && 'key' in v) {
|
|
12282
|
+
return String(v['key']);
|
|
12269
12283
|
}
|
|
12270
12284
|
return String(v);
|
|
12271
12285
|
});
|
|
@@ -12278,7 +12292,7 @@ class AttributeMapperService {
|
|
|
12278
12292
|
normalizeGeospatialPointForForm(value) {
|
|
12279
12293
|
if (value == null)
|
|
12280
12294
|
return { longitude: null, latitude: null };
|
|
12281
|
-
if (typeof value ===
|
|
12295
|
+
if (typeof value === 'string') {
|
|
12282
12296
|
try {
|
|
12283
12297
|
value = JSON.parse(value);
|
|
12284
12298
|
}
|
|
@@ -12289,17 +12303,17 @@ class AttributeMapperService {
|
|
|
12289
12303
|
if (!this.isRecordValue(value)) {
|
|
12290
12304
|
return { longitude: null, latitude: null };
|
|
12291
12305
|
}
|
|
12292
|
-
if (
|
|
12306
|
+
if ('longitude' in value && 'latitude' in value) {
|
|
12293
12307
|
return {
|
|
12294
|
-
longitude: value[
|
|
12295
|
-
latitude: value[
|
|
12308
|
+
longitude: value['longitude'] != null ? Number(value['longitude']) : null,
|
|
12309
|
+
latitude: value['latitude'] != null ? Number(value['latitude']) : null,
|
|
12296
12310
|
};
|
|
12297
12311
|
}
|
|
12298
|
-
if (Array.isArray(value[
|
|
12299
|
-
value[
|
|
12312
|
+
if (Array.isArray(value['coordinates']) &&
|
|
12313
|
+
value['coordinates'].length >= 2) {
|
|
12300
12314
|
return {
|
|
12301
|
-
longitude: Number(value[
|
|
12302
|
-
latitude: Number(value[
|
|
12315
|
+
longitude: Number(value['coordinates'][0]),
|
|
12316
|
+
latitude: Number(value['coordinates'][1]),
|
|
12303
12317
|
};
|
|
12304
12318
|
}
|
|
12305
12319
|
return { longitude: null, latitude: null };
|
|
@@ -12314,7 +12328,7 @@ class AttributeMapperService {
|
|
|
12314
12328
|
const seconds = value.getSeconds();
|
|
12315
12329
|
return hours * 3600 + minutes * 60 + seconds;
|
|
12316
12330
|
}
|
|
12317
|
-
if (typeof value ===
|
|
12331
|
+
if (typeof value === 'number') {
|
|
12318
12332
|
return value;
|
|
12319
12333
|
}
|
|
12320
12334
|
return 0;
|
|
@@ -12326,7 +12340,7 @@ class AttributeMapperService {
|
|
|
12326
12340
|
* Note: A base64 string carries only the raw bytes; it does not contain filename or other metadata.
|
|
12327
12341
|
* The filename (and contentType) must be supplied by the caller when known (e.g. from a BINARY_LINKED payload); for plain BINARY we use a default name.
|
|
12328
12342
|
*/
|
|
12329
|
-
base64ToFile(base64, filename =
|
|
12343
|
+
base64ToFile(base64, filename = 'file.bin', contentType = 'application/octet-stream') {
|
|
12330
12344
|
try {
|
|
12331
12345
|
const bytes = base64ToByteArray(base64);
|
|
12332
12346
|
const uint8 = new Uint8Array(bytes);
|
|
@@ -12343,7 +12357,7 @@ class AttributeMapperService {
|
|
|
12343
12357
|
*/
|
|
12344
12358
|
async convertBinaryToByteArray(value) {
|
|
12345
12359
|
if (Array.isArray(value) &&
|
|
12346
|
-
(value.length === 0 || typeof value[0] ===
|
|
12360
|
+
(value.length === 0 || typeof value[0] === 'number')) {
|
|
12347
12361
|
return value;
|
|
12348
12362
|
}
|
|
12349
12363
|
const fileValue = getFileFromValue(value);
|
|
@@ -12352,16 +12366,16 @@ class AttributeMapperService {
|
|
|
12352
12366
|
return await fileToByteArray(fileValue);
|
|
12353
12367
|
}
|
|
12354
12368
|
catch (e) {
|
|
12355
|
-
console.error(
|
|
12369
|
+
console.error('Error converting File to byte array:', e);
|
|
12356
12370
|
return value;
|
|
12357
12371
|
}
|
|
12358
12372
|
}
|
|
12359
|
-
if (typeof value ===
|
|
12373
|
+
if (typeof value === 'string') {
|
|
12360
12374
|
try {
|
|
12361
12375
|
return base64ToByteArray(value);
|
|
12362
12376
|
}
|
|
12363
12377
|
catch (e) {
|
|
12364
|
-
console.error(
|
|
12378
|
+
console.error('Error converting Base64 to byte array:', e);
|
|
12365
12379
|
return value;
|
|
12366
12380
|
}
|
|
12367
12381
|
}
|
|
@@ -12377,7 +12391,7 @@ class AttributeMapperService {
|
|
|
12377
12391
|
return value;
|
|
12378
12392
|
if (Array.isArray(value) && value[0] instanceof File)
|
|
12379
12393
|
return value[0];
|
|
12380
|
-
if (typeof value ===
|
|
12394
|
+
if (typeof value === 'string') {
|
|
12381
12395
|
try {
|
|
12382
12396
|
return base64ToByteArray(value);
|
|
12383
12397
|
}
|
|
@@ -12385,43 +12399,43 @@ class AttributeMapperService {
|
|
|
12385
12399
|
// Re-throw instead of returning null: a malformed base64 must not silently degrade
|
|
12386
12400
|
// to null, which the backend may interpret as "clear/detach" the linked binary.
|
|
12387
12401
|
// Surfacing the error lets the caller present a validation message to the user.
|
|
12388
|
-
console.error(
|
|
12389
|
-
throw new Error(
|
|
12402
|
+
console.error('Error converting BINARY_LINKED base64 to byte array:', e);
|
|
12403
|
+
throw new Error('Invalid base64 value for BINARY_LINKED attribute', { cause: e });
|
|
12390
12404
|
}
|
|
12391
12405
|
}
|
|
12392
12406
|
if (value instanceof ArrayBuffer) {
|
|
12393
12407
|
return this.arrayBufferToByteArray(value);
|
|
12394
12408
|
}
|
|
12395
|
-
if (Array.isArray(value) && typeof value[0] ===
|
|
12409
|
+
if (Array.isArray(value) && typeof value[0] === 'number') {
|
|
12396
12410
|
return value;
|
|
12397
12411
|
}
|
|
12398
12412
|
return null;
|
|
12399
12413
|
}
|
|
12400
12414
|
// ─── Type recognition (single responsibility: attribute type checks) ─────────────
|
|
12401
12415
|
isEnum(attr) {
|
|
12402
|
-
return attr.attributeValueType ===
|
|
12416
|
+
return attr.attributeValueType === 'ENUM';
|
|
12403
12417
|
}
|
|
12404
12418
|
/**
|
|
12405
12419
|
* Checks whether the attribute is a record type.
|
|
12406
12420
|
*/
|
|
12407
12421
|
isRecord(attr) {
|
|
12408
|
-
return attr.attributeValueType ===
|
|
12422
|
+
return attr.attributeValueType === 'RECORD';
|
|
12409
12423
|
}
|
|
12410
12424
|
/**
|
|
12411
12425
|
* Checks whether the attribute is a record array type.
|
|
12412
12426
|
*/
|
|
12413
12427
|
isRecordArray(attr) {
|
|
12414
|
-
return attr.attributeValueType ===
|
|
12428
|
+
return attr.attributeValueType === 'RECORD_ARRAY';
|
|
12415
12429
|
}
|
|
12416
12430
|
/**
|
|
12417
12431
|
* Checks whether the attribute is a geospatial point type.
|
|
12418
12432
|
*/
|
|
12419
12433
|
isGeospatialPoint(attr) {
|
|
12420
|
-
return attr.attributeValueType ===
|
|
12434
|
+
return attr.attributeValueType === 'GEOSPATIAL_POINT';
|
|
12421
12435
|
}
|
|
12422
12436
|
/** True when optional scalar/array is "cleared" (send null to remove value). */
|
|
12423
12437
|
isOptionalEmptyScalarOrArray(value, metadata) {
|
|
12424
|
-
if (value ===
|
|
12438
|
+
if (value === '' || value == null)
|
|
12425
12439
|
return true;
|
|
12426
12440
|
const t = metadata?.attributeValueType;
|
|
12427
12441
|
if (this.recognition.isArray(t) && Array.isArray(value) && value.length === 0)
|
|
@@ -12455,7 +12469,7 @@ class AttributeMapperService {
|
|
|
12455
12469
|
const val = value[key];
|
|
12456
12470
|
return (val === null ||
|
|
12457
12471
|
val === undefined ||
|
|
12458
|
-
val ===
|
|
12472
|
+
val === '' ||
|
|
12459
12473
|
(this.isRecordValue(val) && Object.keys(val).length === 0) ||
|
|
12460
12474
|
(Array.isArray(val) && val.length === 0));
|
|
12461
12475
|
});
|
|
@@ -12475,7 +12489,7 @@ class AttributeMapperService {
|
|
|
12475
12489
|
if (Array.isArray(value))
|
|
12476
12490
|
return value;
|
|
12477
12491
|
if (this.isRecordValue(value)) {
|
|
12478
|
-
const attrs = value[
|
|
12492
|
+
const attrs = value['attributes'];
|
|
12479
12493
|
return Array.isArray(attrs) ? attrs : [];
|
|
12480
12494
|
}
|
|
12481
12495
|
return [];
|
|
@@ -12488,7 +12502,7 @@ class AttributeMapperService {
|
|
|
12488
12502
|
if (Array.isArray(item))
|
|
12489
12503
|
return item; // Already parsed
|
|
12490
12504
|
if (this.isRecordValue(item)) {
|
|
12491
|
-
const attrs = item[
|
|
12505
|
+
const attrs = item['attributes'];
|
|
12492
12506
|
return Array.isArray(attrs) ? attrs : [];
|
|
12493
12507
|
}
|
|
12494
12508
|
return [];
|
|
@@ -12509,8 +12523,8 @@ class AttributeMapperService {
|
|
|
12509
12523
|
return this.parseTimeSpanForForm(value);
|
|
12510
12524
|
}
|
|
12511
12525
|
if (this.recognition.isDate(type)) {
|
|
12512
|
-
if (typeof value ===
|
|
12513
|
-
typeof value ===
|
|
12526
|
+
if (typeof value === 'string' ||
|
|
12527
|
+
typeof value === 'number' ||
|
|
12514
12528
|
value instanceof Date) {
|
|
12515
12529
|
const date = new Date(value);
|
|
12516
12530
|
return isNaN(date.getTime()) ? null : date;
|
|
@@ -12520,10 +12534,10 @@ class AttributeMapperService {
|
|
|
12520
12534
|
if (this.recognition.isGeoSpatialPoint(type)) {
|
|
12521
12535
|
return this.normalizeGeospatialPointForForm(value);
|
|
12522
12536
|
}
|
|
12523
|
-
if (type ===
|
|
12537
|
+
if (type === 'BINARY') {
|
|
12524
12538
|
return this.parseBinaryForForm(value);
|
|
12525
12539
|
}
|
|
12526
|
-
if (type ===
|
|
12540
|
+
if (type === 'BINARY_LINKED') {
|
|
12527
12541
|
return this.parseBinaryLinkedForForm(value);
|
|
12528
12542
|
}
|
|
12529
12543
|
return value;
|
|
@@ -12537,7 +12551,7 @@ class AttributeMapperService {
|
|
|
12537
12551
|
return null;
|
|
12538
12552
|
if (value instanceof Date)
|
|
12539
12553
|
return isNaN(value.getTime()) ? null : value;
|
|
12540
|
-
if (typeof value ===
|
|
12554
|
+
if (typeof value === 'number') {
|
|
12541
12555
|
const d = new Date(0);
|
|
12542
12556
|
d.setUTCHours(0, 0, 0, 0);
|
|
12543
12557
|
d.setUTCSeconds(value % 86400);
|
|
@@ -12559,15 +12573,15 @@ class AttributeMapperService {
|
|
|
12559
12573
|
* When a dot is present, the segment before the dot is always days (e.g. "44682.00:00:00" = 44682 days).
|
|
12560
12574
|
*/
|
|
12561
12575
|
parseTimeSpanStringToSeconds(s) {
|
|
12562
|
-
const parts = s.split(
|
|
12563
|
-
let timePart = parts[0] ??
|
|
12576
|
+
const parts = s.split('.');
|
|
12577
|
+
let timePart = parts[0] ?? '';
|
|
12564
12578
|
let days = 0;
|
|
12565
12579
|
if (parts.length >= 2) {
|
|
12566
12580
|
const firstNum = parseInt(parts[0], 10);
|
|
12567
12581
|
if (!Number.isNaN(firstNum)) {
|
|
12568
12582
|
days = firstNum;
|
|
12569
12583
|
}
|
|
12570
|
-
timePart = parts[1] ??
|
|
12584
|
+
timePart = parts[1] ?? '00:00:00';
|
|
12571
12585
|
}
|
|
12572
12586
|
const timeMatch = timePart.match(/^(\d+):(\d+):(\d+)(?:\.(\d+))?$/);
|
|
12573
12587
|
if (!timeMatch) {
|
|
@@ -12593,8 +12607,8 @@ class AttributeMapperService {
|
|
|
12593
12607
|
return [value];
|
|
12594
12608
|
if (Array.isArray(value) && value[0] instanceof File)
|
|
12595
12609
|
return value;
|
|
12596
|
-
if (typeof value ===
|
|
12597
|
-
const file = this.base64ToFile(value,
|
|
12610
|
+
if (typeof value === 'string') {
|
|
12611
|
+
const file = this.base64ToFile(value, 'file.bin', 'application/octet-stream');
|
|
12598
12612
|
if (file) {
|
|
12599
12613
|
file[BINARY_REFERENCE_FLAG] =
|
|
12600
12614
|
true;
|
|
@@ -12615,27 +12629,27 @@ class AttributeMapperService {
|
|
|
12615
12629
|
return [];
|
|
12616
12630
|
if (value instanceof File)
|
|
12617
12631
|
return [value];
|
|
12618
|
-
const filename = (typeof value[
|
|
12619
|
-
? value[
|
|
12620
|
-
: typeof value[
|
|
12621
|
-
? value[
|
|
12622
|
-
: null) ??
|
|
12623
|
-
const contentType = (typeof value[
|
|
12624
|
-
? value[
|
|
12625
|
-
: null) ??
|
|
12626
|
-
const base64 = typeof value[
|
|
12627
|
-
? value[
|
|
12628
|
-
: typeof value[
|
|
12629
|
-
? value[
|
|
12630
|
-
: typeof value[
|
|
12631
|
-
? value[
|
|
12632
|
+
const filename = (typeof value['filename'] === 'string'
|
|
12633
|
+
? value['filename']
|
|
12634
|
+
: typeof value['fileName'] === 'string'
|
|
12635
|
+
? value['fileName']
|
|
12636
|
+
: null) ?? 'document.bin';
|
|
12637
|
+
const contentType = (typeof value['contentType'] === 'string'
|
|
12638
|
+
? value['contentType']
|
|
12639
|
+
: null) ?? 'application/octet-stream';
|
|
12640
|
+
const base64 = typeof value['contentBase64'] === 'string'
|
|
12641
|
+
? value['contentBase64']
|
|
12642
|
+
: typeof value['data'] === 'string'
|
|
12643
|
+
? value['data']
|
|
12644
|
+
: typeof value['base64'] === 'string'
|
|
12645
|
+
? value['base64']
|
|
12632
12646
|
: null;
|
|
12633
12647
|
if (base64) {
|
|
12634
12648
|
const file = this.base64ToFile(base64, filename, contentType);
|
|
12635
12649
|
if (file)
|
|
12636
12650
|
return [file];
|
|
12637
12651
|
}
|
|
12638
|
-
const size = typeof value[
|
|
12652
|
+
const size = typeof value['size'] === 'number' ? Math.max(0, value['size']) : 0;
|
|
12639
12653
|
const blob = size > 0
|
|
12640
12654
|
? new Blob([new ArrayBuffer(size)], { type: contentType })
|
|
12641
12655
|
: new Blob([], { type: contentType });
|
|
@@ -12652,7 +12666,7 @@ class AttributeMapperService {
|
|
|
12652
12666
|
return [];
|
|
12653
12667
|
if (this.recognition.isGeoSpatialPoint(type))
|
|
12654
12668
|
return { longitude: null, latitude: null };
|
|
12655
|
-
if (type ===
|
|
12669
|
+
if (type === 'BINARY' || type === 'BINARY_LINKED')
|
|
12656
12670
|
return []; // FileSelect expects File[]
|
|
12657
12671
|
return null;
|
|
12658
12672
|
}
|
|
@@ -12665,22 +12679,22 @@ class AttributeMapperService {
|
|
|
12665
12679
|
}
|
|
12666
12680
|
if (this.recognition.isEnum(type)) {
|
|
12667
12681
|
const options = this.getEnumOptions(attrMetadata);
|
|
12668
|
-
const key = typeof rawDefault ===
|
|
12682
|
+
const key = typeof rawDefault === 'number' ? rawDefault : Number(rawDefault);
|
|
12669
12683
|
const found = options.find((opt) => opt.key === key);
|
|
12670
12684
|
return found ? found.key : key;
|
|
12671
12685
|
}
|
|
12672
12686
|
if (this.recognition.isNumber(type)) {
|
|
12673
|
-
return typeof rawDefault ===
|
|
12687
|
+
return typeof rawDefault === 'number' ? rawDefault : Number(rawDefault);
|
|
12674
12688
|
}
|
|
12675
12689
|
if (this.recognition.isString(type)) {
|
|
12676
12690
|
return String(rawDefault);
|
|
12677
12691
|
}
|
|
12678
12692
|
if (this.recognition.isBoolean(type)) {
|
|
12679
|
-
return rawDefault === true || rawDefault ===
|
|
12693
|
+
return rawDefault === true || rawDefault === 'true' || rawDefault === 1;
|
|
12680
12694
|
}
|
|
12681
12695
|
if (this.recognition.isDate(type)) {
|
|
12682
|
-
if (typeof rawDefault ===
|
|
12683
|
-
typeof rawDefault ===
|
|
12696
|
+
if (typeof rawDefault === 'string' ||
|
|
12697
|
+
typeof rawDefault === 'number' ||
|
|
12684
12698
|
rawDefault instanceof Date) {
|
|
12685
12699
|
const date = new Date(rawDefault);
|
|
12686
12700
|
return isNaN(date.getTime()) ? null : date;
|
|
@@ -12688,14 +12702,14 @@ class AttributeMapperService {
|
|
|
12688
12702
|
return null;
|
|
12689
12703
|
}
|
|
12690
12704
|
if (this.recognition.isTime(type)) {
|
|
12691
|
-
if (typeof rawDefault ===
|
|
12705
|
+
if (typeof rawDefault === 'number') {
|
|
12692
12706
|
const d = new Date(0);
|
|
12693
12707
|
d.setUTCHours(0, 0, 0, 0);
|
|
12694
12708
|
d.setSeconds(rawDefault);
|
|
12695
12709
|
return d;
|
|
12696
12710
|
}
|
|
12697
|
-
if (typeof rawDefault ===
|
|
12698
|
-
typeof rawDefault ===
|
|
12711
|
+
if (typeof rawDefault === 'string' ||
|
|
12712
|
+
typeof rawDefault === 'number' ||
|
|
12699
12713
|
rawDefault instanceof Date) {
|
|
12700
12714
|
const date = new Date(rawDefault);
|
|
12701
12715
|
return isNaN(date.getTime()) ? null : date;
|
|
@@ -12720,16 +12734,16 @@ class AttributeMapperService {
|
|
|
12720
12734
|
/** Returns primitive arrays for Kendo MultiSelect (valuePrimitive: true). */
|
|
12721
12735
|
parseArrayType(type, value) {
|
|
12722
12736
|
if (this.recognition.isStringArray(type)) {
|
|
12723
|
-
const source = this.isRecordValue(value) &&
|
|
12737
|
+
const source = this.isRecordValue(value) && '_v' in value ? value['_v'] : value;
|
|
12724
12738
|
if (!Array.isArray(source))
|
|
12725
12739
|
return [];
|
|
12726
|
-
return source.map((v) => this.isRecordValue(v) &&
|
|
12740
|
+
return source.map((v) => this.isRecordValue(v) && 'key' in v ? String(v['key']) : String(v));
|
|
12727
12741
|
}
|
|
12728
12742
|
if (this.recognition.isIntArray(type)) {
|
|
12729
|
-
const source = this.isRecordValue(value) &&
|
|
12743
|
+
const source = this.isRecordValue(value) && '_v' in value ? value['_v'] : value; // Handle _v wrapper format from upstream
|
|
12730
12744
|
if (!Array.isArray(source))
|
|
12731
12745
|
return [];
|
|
12732
|
-
return source.map((v) => this.isRecordValue(v) &&
|
|
12746
|
+
return source.map((v) => this.isRecordValue(v) && 'key' in v ? Number(v['key']) : Number(v));
|
|
12733
12747
|
}
|
|
12734
12748
|
return [];
|
|
12735
12749
|
}
|
|
@@ -12739,19 +12753,19 @@ class AttributeMapperService {
|
|
|
12739
12753
|
}
|
|
12740
12754
|
if (this.isEnum(attr)) {
|
|
12741
12755
|
return {
|
|
12742
|
-
ckId: attr.attribute?.ckEnum?.ckEnumId?.fullName ??
|
|
12756
|
+
ckId: attr.attribute?.ckEnum?.ckEnumId?.fullName ?? '',
|
|
12743
12757
|
rtId: null,
|
|
12744
12758
|
};
|
|
12745
12759
|
}
|
|
12746
12760
|
else if (this.isRecord(attr) || this.isRecordArray(attr)) {
|
|
12747
12761
|
return {
|
|
12748
|
-
ckId: attr.attribute?.ckRecord?.ckRecordId?.fullName ??
|
|
12762
|
+
ckId: attr.attribute?.ckRecord?.ckRecordId?.fullName ?? '',
|
|
12749
12763
|
rtId: null,
|
|
12750
12764
|
};
|
|
12751
12765
|
}
|
|
12752
12766
|
else {
|
|
12753
12767
|
return {
|
|
12754
|
-
ckId: attr.ckAttributeId?.fullName ??
|
|
12768
|
+
ckId: attr.ckAttributeId?.fullName ?? '',
|
|
12755
12769
|
rtId: null,
|
|
12756
12770
|
};
|
|
12757
12771
|
}
|
|
@@ -12768,13 +12782,13 @@ class AttributeMapperService {
|
|
|
12768
12782
|
}
|
|
12769
12783
|
return [];
|
|
12770
12784
|
}
|
|
12771
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
12772
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
12785
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeMapperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12786
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeMapperService, providedIn: 'root' });
|
|
12773
12787
|
}
|
|
12774
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
12788
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeMapperService, decorators: [{
|
|
12775
12789
|
type: Injectable,
|
|
12776
12790
|
args: [{
|
|
12777
|
-
providedIn:
|
|
12791
|
+
providedIn: 'root',
|
|
12778
12792
|
}]
|
|
12779
12793
|
}] });
|
|
12780
12794
|
|
|
@@ -12826,10 +12840,10 @@ class AttributeDataService {
|
|
|
12826
12840
|
}));
|
|
12827
12841
|
}));
|
|
12828
12842
|
}
|
|
12829
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
12830
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
12843
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12844
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeDataService, providedIn: 'root' });
|
|
12831
12845
|
}
|
|
12832
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
12846
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeDataService, decorators: [{
|
|
12833
12847
|
type: Injectable,
|
|
12834
12848
|
args: [{
|
|
12835
12849
|
providedIn: 'root',
|
|
@@ -12850,15 +12864,15 @@ class AttributeFieldComponent {
|
|
|
12850
12864
|
/** Value to restore on UNDO. If not set, UNDO resets to null. */
|
|
12851
12865
|
baselineValue = input(/* @ts-ignore */
|
|
12852
12866
|
...(ngDevMode ? [undefined, { debugName: "baselineValue" }] : /* istanbul ignore next */ []));
|
|
12853
|
-
fieldId = input(
|
|
12867
|
+
fieldId = input('', /* @ts-ignore */
|
|
12854
12868
|
...(ngDevMode ? [{ debugName: "fieldId" }] : /* istanbul ignore next */ []));
|
|
12855
12869
|
overrideLabelText = input(/* @ts-ignore */
|
|
12856
12870
|
...(ngDevMode ? [undefined, { debugName: "overrideLabelText" }] : /* istanbul ignore next */ []));
|
|
12857
12871
|
showUndoButton = input(true, /* @ts-ignore */
|
|
12858
12872
|
...(ngDevMode ? [{ debugName: "showUndoButton" }] : /* istanbul ignore next */ []));
|
|
12859
|
-
undoButtonSize = input(
|
|
12873
|
+
undoButtonSize = input('medium', /* @ts-ignore */
|
|
12860
12874
|
...(ngDevMode ? [{ debugName: "undoButtonSize" }] : /* istanbul ignore next */ []));
|
|
12861
|
-
errorMessage = input(
|
|
12875
|
+
errorMessage = input('This field is required or invalid.', /* @ts-ignore */
|
|
12862
12876
|
...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
12863
12877
|
hintText = input(/* @ts-ignore */
|
|
12864
12878
|
...(ngDevMode ? [undefined, { debugName: "hintText" }] : /* istanbul ignore next */ []));
|
|
@@ -12880,10 +12894,10 @@ class AttributeFieldComponent {
|
|
|
12880
12894
|
this.undo.emit();
|
|
12881
12895
|
}
|
|
12882
12896
|
hasHint() {
|
|
12883
|
-
return this.hintText() != null && this.hintText() !==
|
|
12897
|
+
return this.hintText() != null && this.hintText() !== '';
|
|
12884
12898
|
}
|
|
12885
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
12886
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
12899
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12900
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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: `
|
|
12887
12901
|
<div class="k-form-field">
|
|
12888
12902
|
<kendo-label
|
|
12889
12903
|
[for]="fieldId()"
|
|
@@ -12920,9 +12934,9 @@ class AttributeFieldComponent {
|
|
|
12920
12934
|
</div>
|
|
12921
12935
|
`, 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$5.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
12922
12936
|
}
|
|
12923
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
12937
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributeFieldComponent, decorators: [{
|
|
12924
12938
|
type: Component,
|
|
12925
|
-
args: [{ selector:
|
|
12939
|
+
args: [{ selector: 'mm-attribute-field', standalone: true, imports: [CommonModule, ReactiveFormsModule, KENDO_LABEL, KENDO_BUTTONS], template: `
|
|
12926
12940
|
<div class="k-form-field">
|
|
12927
12941
|
<kendo-label
|
|
12928
12942
|
[for]="fieldId()"
|
|
@@ -12976,7 +12990,7 @@ class AttributesGroupComponent {
|
|
|
12976
12990
|
recognition = inject(AttributeRecognitionService);
|
|
12977
12991
|
mapper = inject(AttributeMapperService);
|
|
12978
12992
|
isRecordValue(value) {
|
|
12979
|
-
return typeof value ===
|
|
12993
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
12980
12994
|
}
|
|
12981
12995
|
// ─── Inputs (public API for parent / template) ─────────────────────────────────────
|
|
12982
12996
|
ckId = input.required(/* @ts-ignore */
|
|
@@ -13090,8 +13104,8 @@ class AttributesGroupComponent {
|
|
|
13090
13104
|
}
|
|
13091
13105
|
const geoValue = this.isRecordValue(initialValue) ? initialValue : {};
|
|
13092
13106
|
const geoGroup = new FormGroup({
|
|
13093
|
-
longitude: new FormControl(geoValue[
|
|
13094
|
-
latitude: new FormControl(geoValue[
|
|
13107
|
+
longitude: new FormControl(geoValue['longitude'] ?? null, longitudeValidators),
|
|
13108
|
+
latitude: new FormControl(geoValue['latitude'] ?? null, latitudeValidators),
|
|
13095
13109
|
});
|
|
13096
13110
|
form.addControl(attr.attributeName, geoGroup);
|
|
13097
13111
|
this.setBaselineForAttr(attr, initialValue);
|
|
@@ -13111,8 +13125,8 @@ class AttributesGroupComponent {
|
|
|
13111
13125
|
const key = attr.attributeName;
|
|
13112
13126
|
if (this.recognition.isGeoSpatialPoint(attr.attributeValueType)) {
|
|
13113
13127
|
const v = this.isRecordValue(value) ? value : {};
|
|
13114
|
-
this.baselineValues.set(key +
|
|
13115
|
-
this.baselineValues.set(key +
|
|
13128
|
+
this.baselineValues.set(key + '.longitude', this.cloneForBaseline(v['longitude'] ?? null));
|
|
13129
|
+
this.baselineValues.set(key + '.latitude', this.cloneForBaseline(v['latitude'] ?? null));
|
|
13116
13130
|
}
|
|
13117
13131
|
else if (!this.recognition.isRecord(attr.attributeValueType) &&
|
|
13118
13132
|
!this.recognition.isRecordArray(attr.attributeValueType)) {
|
|
@@ -13124,7 +13138,7 @@ class AttributesGroupComponent {
|
|
|
13124
13138
|
return v;
|
|
13125
13139
|
if (v instanceof Date)
|
|
13126
13140
|
return new Date(v.getTime());
|
|
13127
|
-
if (typeof v ===
|
|
13141
|
+
if (typeof v === 'object' && v instanceof File)
|
|
13128
13142
|
return v;
|
|
13129
13143
|
if (Array.isArray(v))
|
|
13130
13144
|
return v.map((x) => this.cloneForBaseline(x));
|
|
@@ -13154,7 +13168,7 @@ class AttributesGroupComponent {
|
|
|
13154
13168
|
: !this.isRecordValue(value) || Object.keys(value).length === 0;
|
|
13155
13169
|
if (this.recognition.isGeoSpatialPoint(type)) {
|
|
13156
13170
|
const v = this.isRecordValue(value) ? value : {};
|
|
13157
|
-
return v[
|
|
13171
|
+
return v['longitude'] == null && v['latitude'] == null;
|
|
13158
13172
|
}
|
|
13159
13173
|
if (this.recognition.isArray(type))
|
|
13160
13174
|
return Array.isArray(value) && value.length === 0;
|
|
@@ -13162,12 +13176,12 @@ class AttributesGroupComponent {
|
|
|
13162
13176
|
}
|
|
13163
13177
|
isControlValueEmpty(control, type) {
|
|
13164
13178
|
const value = control.value;
|
|
13165
|
-
if (value === null || value === undefined || value ===
|
|
13179
|
+
if (value === null || value === undefined || value === '')
|
|
13166
13180
|
return true;
|
|
13167
13181
|
if (this.recognition.isRecordArray(type) || this.recognition.isRecord(type)) {
|
|
13168
13182
|
if (Array.isArray(value))
|
|
13169
13183
|
return value.length === 0;
|
|
13170
|
-
const obj = value && typeof value ===
|
|
13184
|
+
const obj = value && typeof value === 'object' ? value : {};
|
|
13171
13185
|
return Object.keys(obj).length === 0;
|
|
13172
13186
|
}
|
|
13173
13187
|
if (this.recognition.isGeoSpatialPoint(type)) {
|
|
@@ -13274,16 +13288,16 @@ class AttributesGroupComponent {
|
|
|
13274
13288
|
const item = raw[index]?.attributes ?? EMPTY_INITIAL_VALUES;
|
|
13275
13289
|
return Array.isArray(item) ? item : EMPTY_INITIAL_VALUES;
|
|
13276
13290
|
}
|
|
13277
|
-
if (this.isRecordValue(raw) && Array.isArray(raw[
|
|
13278
|
-
return raw[
|
|
13291
|
+
if (this.isRecordValue(raw) && Array.isArray(raw['attributes'])) {
|
|
13292
|
+
return raw['attributes'];
|
|
13279
13293
|
}
|
|
13280
13294
|
if (raw !== undefined && raw !== null && Array.isArray(raw)) {
|
|
13281
13295
|
return raw;
|
|
13282
13296
|
}
|
|
13283
13297
|
return EMPTY_INITIAL_VALUES;
|
|
13284
13298
|
}
|
|
13285
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
13286
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
13299
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributesGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13300
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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 }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
13287
13301
|
<div class="attributes-form-container" [formGroup]="parentFormGroup()">
|
|
13288
13302
|
<kendo-card [style.margin-bottom.px]="10">
|
|
13289
13303
|
<kendo-card-header>
|
|
@@ -13587,9 +13601,9 @@ class AttributesGroupComponent {
|
|
|
13587
13601
|
</div>
|
|
13588
13602
|
`, 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", "messages"] }, { 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$4.CardComponent), selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i0.forwardRef(() => i1$4.CardBodyComponent), selector: "kendo-card-body" }, { kind: "component", type: i0.forwardRef(() => i1$4.CardHeaderComponent), selector: "kendo-card-header" }, { kind: "component", type: i0.forwardRef(() => i1$4.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$4.ExpansionPanelTitleDirective), selector: "[kendoExpansionPanelTitleDirective]" }, { kind: "component", type: i0.forwardRef(() => i1$4.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$4.TabStripTabComponent), selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i0.forwardRef(() => i1$4.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$5.LabelComponent), selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i0.forwardRef(() => i1$1.ButtonComponent), selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i0.forwardRef(() => i3$1.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(() => i3$1.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(() => i8.CustomMessagesComponent), selector: "kendo-upload-messages, kendo-fileselect-messages, kendo-uploaddropzone-messages" }, { kind: "component", type: i0.forwardRef(() => AttributeFieldComponent), selector: "mm-attribute-field", inputs: ["attribute", "control", "baselineValue", "fieldId", "overrideLabelText", "showUndoButton", "undoButtonSize", "errorMessage", "hintText"], outputs: ["undo"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
13589
13603
|
}
|
|
13590
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
13604
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AttributesGroupComponent, decorators: [{
|
|
13591
13605
|
type: Component,
|
|
13592
|
-
args: [{ selector:
|
|
13606
|
+
args: [{ selector: 'mm-attributes-group', standalone: true, imports: [
|
|
13593
13607
|
CommonModule,
|
|
13594
13608
|
ReactiveFormsModule,
|
|
13595
13609
|
KENDO_LAYOUT,
|
|
@@ -13938,9 +13952,9 @@ class SharedEditor {
|
|
|
13938
13952
|
this.notificationService.show({
|
|
13939
13953
|
content: message,
|
|
13940
13954
|
hideAfter: 3000,
|
|
13941
|
-
position: { horizontal:
|
|
13942
|
-
animation: { type:
|
|
13943
|
-
type: { style:
|
|
13955
|
+
position: { horizontal: 'right', vertical: 'top' },
|
|
13956
|
+
animation: { type: 'fade', duration: 400 },
|
|
13957
|
+
type: { style: 'error', icon: true },
|
|
13944
13958
|
});
|
|
13945
13959
|
}
|
|
13946
13960
|
/** Wraps variables with optional multipart context based on whether a File is present anywhere in the payload. */
|
|
@@ -13964,18 +13978,18 @@ class SharedEditor {
|
|
|
13964
13978
|
if (Array.isArray(value)) {
|
|
13965
13979
|
return value.some((item) => this.containsFile(item));
|
|
13966
13980
|
}
|
|
13967
|
-
if (typeof value ===
|
|
13981
|
+
if (typeof value === 'object') {
|
|
13968
13982
|
return Object.values(value).some((v) => this.containsFile(v));
|
|
13969
13983
|
}
|
|
13970
13984
|
return false;
|
|
13971
13985
|
}
|
|
13972
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
13973
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
13986
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SharedEditor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
13987
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SharedEditor, providedIn: 'root' });
|
|
13974
13988
|
}
|
|
13975
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
13989
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SharedEditor, decorators: [{
|
|
13976
13990
|
type: Injectable,
|
|
13977
13991
|
args: [{
|
|
13978
|
-
providedIn:
|
|
13992
|
+
providedIn: 'root',
|
|
13979
13993
|
}]
|
|
13980
13994
|
}] });
|
|
13981
13995
|
|
|
@@ -14025,7 +14039,7 @@ class CreateEditorComponent {
|
|
|
14025
14039
|
const isDirty = this.formIsDifferentFromInitial();
|
|
14026
14040
|
return (!this.isCreating() &&
|
|
14027
14041
|
!this.isCanceling() &&
|
|
14028
|
-
status ===
|
|
14042
|
+
status === 'VALID' &&
|
|
14029
14043
|
isLoaded &&
|
|
14030
14044
|
isDirty);
|
|
14031
14045
|
}, /* @ts-ignore */
|
|
@@ -14044,7 +14058,7 @@ class CreateEditorComponent {
|
|
|
14044
14058
|
...(ngDevMode ? [{ debugName: "formIsDifferentFromInitial" }] : /* istanbul ignore next */ []));
|
|
14045
14059
|
formStatusSignal = toSignal(toObservable(this.form).pipe(switchMap$1((f) => {
|
|
14046
14060
|
if (!f)
|
|
14047
|
-
return of(
|
|
14061
|
+
return of('INVALID');
|
|
14048
14062
|
return f.statusChanges.pipe(startWith(f.status));
|
|
14049
14063
|
})));
|
|
14050
14064
|
formValueSignal = toSignal(toObservable(this.form).pipe(switchMap$1((f) => {
|
|
@@ -14097,7 +14111,7 @@ class CreateEditorComponent {
|
|
|
14097
14111
|
}
|
|
14098
14112
|
}
|
|
14099
14113
|
catch (error) {
|
|
14100
|
-
console.error(
|
|
14114
|
+
console.error('Error saving entity:', error);
|
|
14101
14115
|
this.sharedEditor.showErrorNotification(this.resolvedMessages().failedToCreateEntity);
|
|
14102
14116
|
}
|
|
14103
14117
|
finally {
|
|
@@ -14132,7 +14146,7 @@ class CreateEditorComponent {
|
|
|
14132
14146
|
if (parent?.ckTypeId && parent?.rtId) {
|
|
14133
14147
|
entity.associations = [
|
|
14134
14148
|
{
|
|
14135
|
-
roleName: input?.parentRoleName ??
|
|
14149
|
+
roleName: input?.parentRoleName ?? 'parent',
|
|
14136
14150
|
targets: [
|
|
14137
14151
|
{
|
|
14138
14152
|
modOption: AssociationModOptionsDto.CreateDto,
|
|
@@ -14169,8 +14183,8 @@ class CreateEditorComponent {
|
|
|
14169
14183
|
this.selectedRtCkTypeId.set(null);
|
|
14170
14184
|
this.selectedCkTypeId.set(null);
|
|
14171
14185
|
}
|
|
14172
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
14173
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
14186
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CreateEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14187
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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: `
|
|
14174
14188
|
<div class="entity-editor-container">
|
|
14175
14189
|
<kendo-card class="basic-info-card">
|
|
14176
14190
|
<kendo-card-header>
|
|
@@ -14239,9 +14253,9 @@ class CreateEditorComponent {
|
|
|
14239
14253
|
</div>
|
|
14240
14254
|
`, 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$4.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i1$4.CardBodyComponent, selector: "kendo-card-body" }, { kind: "component", type: i1$4.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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], 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", "messages", "dialogMessages", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: AttributesGroupComponent, selector: "mm-attributes-group", inputs: ["ckId", "parentFormGroup", "isRecord", "initialValues", "messages"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
14241
14255
|
}
|
|
14242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
14256
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CreateEditorComponent, decorators: [{
|
|
14243
14257
|
type: Component,
|
|
14244
|
-
args: [{ selector:
|
|
14258
|
+
args: [{ selector: 'mm-create-editor-component', imports: [
|
|
14245
14259
|
ReactiveFormsModule,
|
|
14246
14260
|
CardModule,
|
|
14247
14261
|
KENDO_INPUTS,
|
|
@@ -14368,7 +14382,7 @@ class UpdateEditorComponent {
|
|
|
14368
14382
|
const isDirty = this.formIsDifferentFromInitial();
|
|
14369
14383
|
return (!this.isUpdating() &&
|
|
14370
14384
|
!this.isCanceling() &&
|
|
14371
|
-
status ===
|
|
14385
|
+
status === 'VALID' &&
|
|
14372
14386
|
isLoaded &&
|
|
14373
14387
|
isDirty);
|
|
14374
14388
|
}, /* @ts-ignore */
|
|
@@ -14379,7 +14393,7 @@ class UpdateEditorComponent {
|
|
|
14379
14393
|
...(ngDevMode ? [{ debugName: "isCancelButtonEnabled" }] : /* istanbul ignore next */ []));
|
|
14380
14394
|
formStatusSignal = toSignal(toObservable(this.form).pipe(switchMap$1((f) => {
|
|
14381
14395
|
if (!f)
|
|
14382
|
-
return of(
|
|
14396
|
+
return of('INVALID');
|
|
14383
14397
|
return f.statusChanges.pipe(startWith(f.status));
|
|
14384
14398
|
})));
|
|
14385
14399
|
formValueSignal = toSignal(toObservable(this.form).pipe(switchMap$1((f) => {
|
|
@@ -14468,7 +14482,7 @@ class UpdateEditorComponent {
|
|
|
14468
14482
|
}
|
|
14469
14483
|
}
|
|
14470
14484
|
catch (error) {
|
|
14471
|
-
console.error(
|
|
14485
|
+
console.error('Error updating entity:', error);
|
|
14472
14486
|
this.sharedEditor.showErrorNotification(this.resolvedMessages().failedToUpdateEntity);
|
|
14473
14487
|
}
|
|
14474
14488
|
finally {
|
|
@@ -14497,8 +14511,8 @@ class UpdateEditorComponent {
|
|
|
14497
14511
|
},
|
|
14498
14512
|
};
|
|
14499
14513
|
}
|
|
14500
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
14501
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
14514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14515
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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: `
|
|
14502
14516
|
<div class="entity-editor-container">
|
|
14503
14517
|
<kendo-card class="basic-info-card">
|
|
14504
14518
|
<kendo-card-header>
|
|
@@ -14576,9 +14590,9 @@ class UpdateEditorComponent {
|
|
|
14576
14590
|
</div>
|
|
14577
14591
|
`, 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$4.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: i1$4.CardBodyComponent, selector: "kendo-card-body" }, { kind: "component", type: i1$4.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: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: AttributesGroupComponent, selector: "mm-attributes-group", inputs: ["ckId", "parentFormGroup", "isRecord", "initialValues", "messages"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
14578
14592
|
}
|
|
14579
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
14593
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UpdateEditorComponent, decorators: [{
|
|
14580
14594
|
type: Component,
|
|
14581
|
-
args: [{ selector:
|
|
14595
|
+
args: [{ selector: 'mm-update-editor-component', imports: [
|
|
14582
14596
|
ReactiveFormsModule,
|
|
14583
14597
|
CardModule,
|
|
14584
14598
|
KENDO_INPUTS,
|
|
@@ -14704,38 +14718,38 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14704
14718
|
get ckTypeColumns() {
|
|
14705
14719
|
return [
|
|
14706
14720
|
{
|
|
14707
|
-
field:
|
|
14721
|
+
field: 'rtId',
|
|
14708
14722
|
displayName: this._messages.runtimeId,
|
|
14709
|
-
dataType:
|
|
14723
|
+
dataType: 'text',
|
|
14710
14724
|
},
|
|
14711
14725
|
{
|
|
14712
|
-
field:
|
|
14726
|
+
field: 'ckTypeId',
|
|
14713
14727
|
displayName: this._messages.typeId,
|
|
14714
|
-
dataType:
|
|
14728
|
+
dataType: 'text',
|
|
14715
14729
|
},
|
|
14716
14730
|
{
|
|
14717
|
-
field:
|
|
14731
|
+
field: 'rtWellKnownName',
|
|
14718
14732
|
displayName: this._messages.wellKnownName,
|
|
14719
|
-
dataType:
|
|
14733
|
+
dataType: 'text',
|
|
14720
14734
|
},
|
|
14721
14735
|
{
|
|
14722
|
-
field:
|
|
14736
|
+
field: 'rtCreationDateTime',
|
|
14723
14737
|
displayName: this._messages.created,
|
|
14724
|
-
format:
|
|
14725
|
-
dataType:
|
|
14738
|
+
format: 'short',
|
|
14739
|
+
dataType: 'iso8601',
|
|
14726
14740
|
},
|
|
14727
14741
|
{
|
|
14728
|
-
field:
|
|
14742
|
+
field: 'rtChangedDateTime',
|
|
14729
14743
|
displayName: this._messages.modified,
|
|
14730
|
-
format:
|
|
14731
|
-
dataType:
|
|
14744
|
+
format: 'short',
|
|
14745
|
+
dataType: 'iso8601',
|
|
14732
14746
|
},
|
|
14733
14747
|
];
|
|
14734
14748
|
}
|
|
14735
14749
|
get ckTypeViewDetailsCommand() {
|
|
14736
14750
|
return {
|
|
14737
|
-
id:
|
|
14738
|
-
type:
|
|
14751
|
+
id: 'view',
|
|
14752
|
+
type: 'link',
|
|
14739
14753
|
text: this._messages.viewDetails,
|
|
14740
14754
|
svgIcon: this.detailsIcon,
|
|
14741
14755
|
onClick: this.onViewEntityDetails,
|
|
@@ -14751,26 +14765,26 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14751
14765
|
ngAfterViewInit() {
|
|
14752
14766
|
// If we have a pending CK type ID, set it now
|
|
14753
14767
|
if (this.pendingRtCkTypeId && this.dataSourceDirective) {
|
|
14754
|
-
console.debug(
|
|
14768
|
+
console.debug('AfterViewInit: Setting pending CK Type ID:', this.pendingRtCkTypeId);
|
|
14755
14769
|
this.dataSourceDirective.setRtCkTypeId(this.pendingRtCkTypeId);
|
|
14756
14770
|
this.pendingRtCkTypeId = null;
|
|
14757
14771
|
}
|
|
14758
14772
|
}
|
|
14759
14773
|
async ngOnChanges(changes) {
|
|
14760
|
-
if (changes[
|
|
14761
|
-
console.debug(
|
|
14774
|
+
if (changes['selectedItem'] && this.selectedItem) {
|
|
14775
|
+
console.debug('Selected item changed:', this.selectedItem);
|
|
14762
14776
|
// If it's a CK Type, update the data source with the type ID
|
|
14763
14777
|
if (this.isCkType(this.selectedItem.item)) {
|
|
14764
14778
|
const rtCkTypeId = this.getRtCkTypeId(this.selectedItem.item);
|
|
14765
|
-
console.debug(
|
|
14779
|
+
console.debug('Setting CK Type ID:', rtCkTypeId);
|
|
14766
14780
|
// Use setTimeout to ensure ViewChild is initialized
|
|
14767
14781
|
setTimeout(() => {
|
|
14768
14782
|
if (this.dataSourceDirective) {
|
|
14769
|
-
console.debug(
|
|
14783
|
+
console.debug('ngOnChanges: ViewChild ready, setting CK Type ID:', rtCkTypeId);
|
|
14770
14784
|
this.dataSourceDirective.setRtCkTypeId(rtCkTypeId);
|
|
14771
14785
|
}
|
|
14772
14786
|
else {
|
|
14773
|
-
console.debug(
|
|
14787
|
+
console.debug('ngOnChanges: ViewChild not ready, storing pending CK Type ID:', rtCkTypeId);
|
|
14774
14788
|
this.pendingRtCkTypeId = rtCkTypeId;
|
|
14775
14789
|
}
|
|
14776
14790
|
}, 0);
|
|
@@ -14784,7 +14798,7 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14784
14798
|
this.pendingRtCkTypeId = null;
|
|
14785
14799
|
}
|
|
14786
14800
|
}
|
|
14787
|
-
else if (changes[
|
|
14801
|
+
else if (changes['selectedItem'] && !this.selectedItem) {
|
|
14788
14802
|
this.fullEntity = null;
|
|
14789
14803
|
this.error = null;
|
|
14790
14804
|
this.pendingRtCkTypeId = null;
|
|
@@ -14821,7 +14835,7 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14821
14835
|
if (token !== this.loadRequestToken) {
|
|
14822
14836
|
return;
|
|
14823
14837
|
}
|
|
14824
|
-
console.error(
|
|
14838
|
+
console.error('Failed to load full entity details:', error);
|
|
14825
14839
|
this.error = this._messages.failedToLoadEntityDetails;
|
|
14826
14840
|
// Fall back to the basic entity data
|
|
14827
14841
|
this.fullEntity = runtimeEntity;
|
|
@@ -14841,16 +14855,16 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14841
14855
|
// Save current state before navigating
|
|
14842
14856
|
this.stateService.saveState(this.selectedItem);
|
|
14843
14857
|
const encodedId = RtEntityIdHelper.encode(runtimeEntity.rtId, runtimeEntity.ckTypeId);
|
|
14844
|
-
await this.router.navigate([
|
|
14858
|
+
await this.router.navigate(['entity', encodedId], {
|
|
14845
14859
|
relativeTo: this.route,
|
|
14846
14860
|
});
|
|
14847
14861
|
}
|
|
14848
14862
|
async navigateToEntity(rtId, ckTypeId) {
|
|
14849
|
-
if (!rtId || !ckTypeId || rtId ===
|
|
14863
|
+
if (!rtId || !ckTypeId || rtId === 'Unknown' || ckTypeId === 'Unknown') {
|
|
14850
14864
|
return;
|
|
14851
14865
|
}
|
|
14852
14866
|
const encodedId = RtEntityIdHelper.encode(rtId, ckTypeId);
|
|
14853
|
-
await this.router.navigate([
|
|
14867
|
+
await this.router.navigate(['entity', encodedId], {
|
|
14854
14868
|
relativeTo: this.route,
|
|
14855
14869
|
});
|
|
14856
14870
|
}
|
|
@@ -14865,50 +14879,50 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14865
14879
|
return null;
|
|
14866
14880
|
}
|
|
14867
14881
|
isCkModel(item) {
|
|
14868
|
-
return !!item &&
|
|
14882
|
+
return !!item && 'id' in item && !('rtId' in item) && !('ckTypeId' in item);
|
|
14869
14883
|
}
|
|
14870
14884
|
isCkType(item) {
|
|
14871
|
-
return !!item &&
|
|
14885
|
+
return !!item && 'ckTypeId' in item && !('rtId' in item) && !('id' in item);
|
|
14872
14886
|
}
|
|
14873
14887
|
isCkModelsRoot(item) {
|
|
14874
|
-
return !!item &&
|
|
14888
|
+
return !!item && 'isCkModelsRoot' in item;
|
|
14875
14889
|
}
|
|
14876
14890
|
// Helper methods to get CK Model properties
|
|
14877
14891
|
getCkModelIdFullName(item) {
|
|
14878
14892
|
if (!this.isCkModel(item))
|
|
14879
|
-
return
|
|
14880
|
-
return item.id.fullName ||
|
|
14893
|
+
return 'Unknown';
|
|
14894
|
+
return item.id.fullName || 'Unknown';
|
|
14881
14895
|
}
|
|
14882
14896
|
getCkModelIdName(item) {
|
|
14883
14897
|
if (!this.isCkModel(item))
|
|
14884
|
-
return
|
|
14885
|
-
return item.id.name ||
|
|
14898
|
+
return 'Unknown';
|
|
14899
|
+
return item.id.name || 'Unknown';
|
|
14886
14900
|
}
|
|
14887
14901
|
getCkModelIdVersion(item) {
|
|
14888
14902
|
if (!this.isCkModel(item))
|
|
14889
|
-
return
|
|
14890
|
-
return item.id.version ||
|
|
14903
|
+
return 'Unknown';
|
|
14904
|
+
return item.id.version || 'Unknown';
|
|
14891
14905
|
}
|
|
14892
14906
|
getCkModelIdSemanticName(item) {
|
|
14893
14907
|
if (!this.isCkModel(item))
|
|
14894
|
-
return
|
|
14895
|
-
return item.id.semanticVersionedFullName ||
|
|
14908
|
+
return 'Unknown';
|
|
14909
|
+
return item.id.semanticVersionedFullName || 'Unknown';
|
|
14896
14910
|
}
|
|
14897
14911
|
getCkModelState(item) {
|
|
14898
14912
|
if (!this.isCkModel(item))
|
|
14899
|
-
return
|
|
14900
|
-
return item.modelState ||
|
|
14913
|
+
return 'Unknown';
|
|
14914
|
+
return item.modelState || 'Unknown';
|
|
14901
14915
|
}
|
|
14902
14916
|
// Helper methods to get CK Type properties
|
|
14903
14917
|
getCkTypeId(item) {
|
|
14904
14918
|
if (!this.isCkType(item))
|
|
14905
|
-
return
|
|
14906
|
-
return item.ckTypeId.fullName ||
|
|
14919
|
+
return 'Unknown';
|
|
14920
|
+
return item.ckTypeId.fullName || 'Unknown';
|
|
14907
14921
|
}
|
|
14908
14922
|
getRtCkTypeId(item) {
|
|
14909
14923
|
if (!this.isCkType(item))
|
|
14910
|
-
return
|
|
14911
|
-
return item.rtCkTypeId ||
|
|
14924
|
+
return 'Unknown';
|
|
14925
|
+
return item.rtCkTypeId || 'Unknown';
|
|
14912
14926
|
}
|
|
14913
14927
|
isCkTypeAbstract(item) {
|
|
14914
14928
|
return this.isCkType(item) && item.isAbstract === true;
|
|
@@ -14938,7 +14952,7 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14938
14952
|
parent: {
|
|
14939
14953
|
ckTypeId: rtEntityDto?.item.ckTypeId,
|
|
14940
14954
|
rtId: rtEntityDto?.item.rtId,
|
|
14941
|
-
name: parentNode?.text ??
|
|
14955
|
+
name: parentNode?.text ?? '',
|
|
14942
14956
|
},
|
|
14943
14957
|
derivedFromRtCkTypeId,
|
|
14944
14958
|
};
|
|
@@ -14948,13 +14962,13 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14948
14962
|
}
|
|
14949
14963
|
enterEditMode(selectedItem, rtCkTypeId) {
|
|
14950
14964
|
const rtEntityDto = selectedItem;
|
|
14951
|
-
const rtId = rtEntityDto?.item?.rtId ??
|
|
14965
|
+
const rtId = rtEntityDto?.item?.rtId ?? '';
|
|
14952
14966
|
const ckTypeId = rtEntityDto?.item?.ckTypeId;
|
|
14953
14967
|
if (!rtId || !ckTypeId || !rtCkTypeId) {
|
|
14954
|
-
console.warn(
|
|
14968
|
+
console.warn('Enter edit mode skipped: missing rtId, ckTypeId or rtCkTypeId.', { rtId, ckTypeId, rtCkTypeId });
|
|
14955
14969
|
return;
|
|
14956
14970
|
}
|
|
14957
|
-
const name = rtEntityDto?.text ??
|
|
14971
|
+
const name = rtEntityDto?.text ?? '';
|
|
14958
14972
|
this.updateInput = {
|
|
14959
14973
|
name,
|
|
14960
14974
|
rtId,
|
|
@@ -14963,7 +14977,7 @@ class RuntimeBrowserDetailsComponent {
|
|
|
14963
14977
|
};
|
|
14964
14978
|
this.isCreateModeEnabled = false;
|
|
14965
14979
|
this.isUpdateModeEnabled = true;
|
|
14966
|
-
console.debug(
|
|
14980
|
+
console.debug('Entered update mode with input:', this.updateInput);
|
|
14967
14981
|
}
|
|
14968
14982
|
/**
|
|
14969
14983
|
* Handles the result of the save operation from the child component
|
|
@@ -15009,7 +15023,7 @@ class RuntimeBrowserDetailsComponent {
|
|
|
15009
15023
|
this.loadFullEntityDetails();
|
|
15010
15024
|
}
|
|
15011
15025
|
onCancel() {
|
|
15012
|
-
console.debug(
|
|
15026
|
+
console.debug('Creation or update cancelled, resetting state.');
|
|
15013
15027
|
this.isCreateModeEnabled = false;
|
|
15014
15028
|
this.isUpdateModeEnabled = false;
|
|
15015
15029
|
this.createInput = undefined;
|
|
@@ -15303,8 +15317,8 @@ class RuntimeBrowserDetailsComponent {
|
|
|
15303
15317
|
});
|
|
15304
15318
|
}
|
|
15305
15319
|
}
|
|
15306
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
15307
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
15320
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15321
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: RuntimeBrowserDetailsComponent, isStandalone: true, selector: "mm-runtime-browser-details", inputs: { selectedItem: "selectedItem", showDataMapping: "showDataMapping", messages: "messages", expressionValidator: "expressionValidator" }, outputs: { entitySaved: "entitySaved" }, viewQueries: [{ propertyName: "dataSourceDirective", first: true, predicate: ["dir"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
15308
15322
|
<div class="runtime-browser-details">
|
|
15309
15323
|
@if (isCreateModeEnabled) {
|
|
15310
15324
|
<mm-create-editor-component
|
|
@@ -15446,9 +15460,9 @@ class RuntimeBrowserDetailsComponent {
|
|
|
15446
15460
|
</div>
|
|
15447
15461
|
`, 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", "showDataMapping", "dataMappings", "expressionValidator"], outputs: ["retry", "propertyChange", "navigateToEntity", "addMappingRequested", "removeMappingRequested", "selectMappingTarget", "selectSourceAttributeRequested", "selectTargetAttributeRequested", "mappingChanged", "saveAllMappingsRequested"] }, { kind: "component", type: ListViewComponent, selector: "mm-list-view", inputs: ["pageSize", "skip", "autoPageSize", "rowIsClickable", "showRowCheckBoxes", "showRowSelectAllCheckBox", "contextMenuType", "leftToolbarActions", "rightToolbarActions", "actionCommandItems", "contextMenuCommandItems", "excelExportFileName", "pdfExportFileName", "pageable", "sortable", "rowFilterEnabled", "searchTextBoxEnabled", "persistListState", "listStateKey", "resizable", "actionsColumnWidth", "hideCheckboxesBelow", "cardModeBelow", "rowClass", "messages", "selectable", "columns"], outputs: ["rowClicked", "resetFilters"] }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
15448
15462
|
}
|
|
15449
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
15463
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserDetailsComponent, decorators: [{
|
|
15450
15464
|
type: Component,
|
|
15451
|
-
args: [{ selector:
|
|
15465
|
+
args: [{ selector: 'mm-runtime-browser-details', imports: [
|
|
15452
15466
|
CommonModule,
|
|
15453
15467
|
ButtonModule,
|
|
15454
15468
|
SVGIconModule,
|
|
@@ -15608,7 +15622,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
15608
15622
|
type: Output
|
|
15609
15623
|
}], dataSourceDirective: [{
|
|
15610
15624
|
type: ViewChild,
|
|
15611
|
-
args: [
|
|
15625
|
+
args: ['dir', { static: false }]
|
|
15612
15626
|
}], expressionValidator: [{
|
|
15613
15627
|
type: Input
|
|
15614
15628
|
}] } });
|
|
@@ -16220,8 +16234,8 @@ class RuntimeBrowserComponent {
|
|
|
16220
16234
|
await this.treeDetail.refreshTree();
|
|
16221
16235
|
}
|
|
16222
16236
|
}
|
|
16223
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
16224
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.
|
|
16237
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16238
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.5", type: RuntimeBrowserComponent, isStandalone: true, selector: "mm-runtime-browser", inputs: { messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, showDataMapping: { classPropertyName: "showDataMapping", publicName: "showDataMapping", isSignal: true, isRequired: false, transformFunction: null }, expressionValidator: { classPropertyName: "expressionValidator", publicName: "expressionValidator", 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: `
|
|
16225
16239
|
<div class="runtime-browser-container kendo-theme-provider">
|
|
16226
16240
|
<!-- LCARS Header -->
|
|
16227
16241
|
<div class="lcars-page-header">
|
|
@@ -16291,7 +16305,7 @@ class RuntimeBrowserComponent {
|
|
|
16291
16305
|
</div>
|
|
16292
16306
|
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}.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", "showDataMapping", "messages", "expressionValidator"], outputs: ["entitySaved"] }, { kind: "component", type: PerspectiveSwitcherComponent, selector: "mm-perspective-switcher", inputs: ["perspectives", "activeKey", "label"], outputs: ["perspectiveChange"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
16293
16307
|
}
|
|
16294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
16308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserComponent, decorators: [{
|
|
16295
16309
|
type: Component,
|
|
16296
16310
|
args: [{ selector: 'mm-runtime-browser', imports: [
|
|
16297
16311
|
BaseTreeDetailComponent,
|
|
@@ -16379,10 +16393,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
16379
16393
|
* Use as the parent component when mounting runtime browser routes as children.
|
|
16380
16394
|
*/
|
|
16381
16395
|
class RuntimeBrowserOutletComponent {
|
|
16382
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
16383
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
16396
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16397
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: RuntimeBrowserOutletComponent, isStandalone: true, selector: "mm-runtime-browser-outlet", ngImport: i0, template: `<router-outlet />`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
16384
16398
|
}
|
|
16385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
16399
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserOutletComponent, decorators: [{
|
|
16386
16400
|
type: Component,
|
|
16387
16401
|
args: [{ selector: 'mm-runtime-browser-outlet', standalone: true, imports: [RouterOutlet], changeDetection: ChangeDetectionStrategy.Eager, template: `<router-outlet />`, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}\n"] }]
|
|
16388
16402
|
}] });
|
|
@@ -16404,10 +16418,10 @@ class RuntimeBrowserPageComponent {
|
|
|
16404
16418
|
messages = this.injectedMessages
|
|
16405
16419
|
? this.injectedMessages
|
|
16406
16420
|
: DEFAULT_RUNTIME_BROWSER_MESSAGES;
|
|
16407
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
16408
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
16421
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16422
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: RuntimeBrowserPageComponent, isStandalone: true, selector: "mm-runtime-browser-page", ngImport: i0, template: `<mm-runtime-browser [messages]="messages" />`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}\n"], dependencies: [{ kind: "component", type: RuntimeBrowserComponent, selector: "mm-runtime-browser", inputs: ["messages", "showDataMapping", "expressionValidator"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
16409
16423
|
}
|
|
16410
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
16424
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RuntimeBrowserPageComponent, decorators: [{
|
|
16411
16425
|
type: Component,
|
|
16412
16426
|
args: [{ selector: 'mm-runtime-browser-page', standalone: true, imports: [RuntimeBrowserComponent], changeDetection: ChangeDetectionStrategy.Eager, template: `<mm-runtime-browser [messages]="messages" />`, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}\n"] }]
|
|
16413
16427
|
}] });
|
|
@@ -16620,10 +16634,10 @@ class MappingCoverageConfigService {
|
|
|
16620
16634
|
const exists = await firstValueFrom(this.apollo.query({ query: CONFIG_TYPE_EXISTS_QUERY, fetchPolicy: 'network-only' }));
|
|
16621
16635
|
return (exists.data?.constructionKit?.types?.items?.length ?? 0) > 0;
|
|
16622
16636
|
}
|
|
16623
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
16624
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
16637
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
16638
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageConfigService, providedIn: 'root' });
|
|
16625
16639
|
}
|
|
16626
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
16640
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageConfigService, decorators: [{
|
|
16627
16641
|
type: Injectable,
|
|
16628
16642
|
args: [{
|
|
16629
16643
|
providedIn: 'root',
|
|
@@ -16680,10 +16694,10 @@ class GetDataPointMappingsDtoGQL extends i1$3.Query {
|
|
|
16680
16694
|
constructor(apollo) {
|
|
16681
16695
|
super(apollo);
|
|
16682
16696
|
}
|
|
16683
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
16684
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
16697
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetDataPointMappingsDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
16698
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetDataPointMappingsDtoGQL, providedIn: 'root' });
|
|
16685
16699
|
}
|
|
16686
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
16700
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetDataPointMappingsDtoGQL, decorators: [{
|
|
16687
16701
|
type: Injectable,
|
|
16688
16702
|
args: [{
|
|
16689
16703
|
providedIn: 'root'
|
|
@@ -16914,8 +16928,8 @@ class DataMappingOverviewComponent {
|
|
|
16914
16928
|
this.mappings.set([...items]);
|
|
16915
16929
|
}
|
|
16916
16930
|
}
|
|
16917
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
16918
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
16931
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataMappingOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16932
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: DataMappingOverviewComponent, isStandalone: true, selector: "mm-data-mapping-overview", outputs: { navigateToEntity: "navigateToEntity" }, ngImport: i0, template: `
|
|
16919
16933
|
<div class="mapping-overview">
|
|
16920
16934
|
<!-- Summary Bar -->
|
|
16921
16935
|
<div class="summary-bar">
|
|
@@ -17083,7 +17097,7 @@ class DataMappingOverviewComponent {
|
|
|
17083
17097
|
</div>
|
|
17084
17098
|
`, isInline: true, styles: [".mapping-overview{display:flex;flex-direction:column;gap:12px;padding:16px}.summary-bar{display:flex;gap:16px;align-items:center;padding:8px 12px;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:6px;background:var(--kendo-color-surface-alt, #f8f9fa)}.summary-item{display:flex;flex-direction:column;align-items:center;min-width:60px}.summary-count{font-size:1.2rem;font-weight:700}.summary-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #6c757d)}.summary-valid .summary-count{color:var(--kendo-color-success, #28a745)}.summary-warnings .summary-count{color:var(--kendo-color-warning, #ffc107)}.summary-errors .summary-count{color:var(--kendo-color-error, #dc3545)}.summary-disabled .summary-count{color:var(--kendo-color-subtle, #6c757d)}.summary-spacer{flex:1}.status-valid{color:var(--kendo-color-success, #28a745)}.status-warning{color:var(--kendo-color-warning, #ffc107)}.status-error{color:var(--kendo-color-error, #dc3545)}.entity-ref{cursor:pointer;color:var(--kendo-color-primary, #ff6358);font-family:monospace;font-size:.85rem}.entity-ref:hover{text-decoration:underline}.no-target{color:var(--kendo-color-subtle, #6c757d);font-style:italic}.entity-type-hint{font-size:.7rem;color:var(--kendo-color-subtle, #6c757d);font-family:monospace}.expression-cell{font-size:.85rem;background:var(--kendo-color-surface-alt, #f8f9fa);padding:2px 4px;border-radius:3px}.detail-panel{border:1px solid var(--kendo-color-border, #dee2e6);border-radius:6px;padding:12px 16px}.detail-panel h4{margin:0 0 12px;font-size:.9rem;font-weight:600}.detail-grid{display:grid;grid-template-columns:120px 1fr;gap:6px 12px}.detail-row{display:contents}.detail-row label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #6c757d);padding-top:2px}.detail-row span,.detail-row code{font-size:.85rem}.validation-section{margin-top:12px;padding-top:8px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.validation-section h5{margin:0 0 6px;font-size:.8rem;font-weight:600}.validation-msg{font-size:.8rem;padding:2px 0}.validation-error{color:var(--kendo-color-error, #dc3545)}.validation-warning{color:var(--kendo-color-warning, #ffc107)}.validation-info{color:var(--kendo-color-info, #17a2b8)}.loading-overlay{text-align:center;padding:20px;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { 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", "pinnable", "pinnedTopRows", "pinnedBottomRows", "isRowPinnable"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "rowPinChange", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "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: BadgeModule }, { kind: "ngmodule", type: SwitchModule }, { kind: "component", type: i5.SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { kind: "pipe", type: i1$2.SlicePipe, name: "slice" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
17085
17099
|
}
|
|
17086
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
17100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: DataMappingOverviewComponent, decorators: [{
|
|
17087
17101
|
type: Component,
|
|
17088
17102
|
args: [{ selector: 'mm-data-mapping-overview', standalone: true, imports: [
|
|
17089
17103
|
CommonModule,
|
|
@@ -17300,10 +17314,10 @@ class GetLatestValidationExecutionDtoGQL extends i1$3.Query {
|
|
|
17300
17314
|
constructor(apollo) {
|
|
17301
17315
|
super(apollo);
|
|
17302
17316
|
}
|
|
17303
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
17304
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
17317
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetLatestValidationExecutionDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17318
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetLatestValidationExecutionDtoGQL, providedIn: 'root' });
|
|
17305
17319
|
}
|
|
17306
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
17320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetLatestValidationExecutionDtoGQL, decorators: [{
|
|
17307
17321
|
type: Injectable,
|
|
17308
17322
|
args: [{
|
|
17309
17323
|
providedIn: 'root'
|
|
@@ -17354,10 +17368,10 @@ class GetNodeMappingsDtoGQL extends i1$3.Query {
|
|
|
17354
17368
|
constructor(apollo) {
|
|
17355
17369
|
super(apollo);
|
|
17356
17370
|
}
|
|
17357
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
17358
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
17371
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetNodeMappingsDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17372
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetNodeMappingsDtoGQL, providedIn: 'root' });
|
|
17359
17373
|
}
|
|
17360
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
17374
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetNodeMappingsDtoGQL, decorators: [{
|
|
17361
17375
|
type: Injectable,
|
|
17362
17376
|
args: [{
|
|
17363
17377
|
providedIn: 'root'
|
|
@@ -17474,10 +17488,10 @@ class GetOrphanCandidatesDtoGQL extends i1$3.Query {
|
|
|
17474
17488
|
constructor(apollo) {
|
|
17475
17489
|
super(apollo);
|
|
17476
17490
|
}
|
|
17477
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
17478
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
17491
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetOrphanCandidatesDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17492
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetOrphanCandidatesDtoGQL, providedIn: 'root' });
|
|
17479
17493
|
}
|
|
17480
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
17494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetOrphanCandidatesDtoGQL, decorators: [{
|
|
17481
17495
|
type: Injectable,
|
|
17482
17496
|
args: [{
|
|
17483
17497
|
providedIn: 'root'
|
|
@@ -17681,8 +17695,8 @@ class BulkMappingDialogComponent {
|
|
|
17681
17695
|
this.targetAttributesLoading.set(false);
|
|
17682
17696
|
}
|
|
17683
17697
|
}
|
|
17684
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
17685
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
17698
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BulkMappingDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17699
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BulkMappingDialogComponent, isStandalone: true, selector: "mm-bulk-mapping-dialog", viewQueries: [{ propertyName: "sourcePicker", first: true, predicate: DataPointPickerComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
17686
17700
|
<div class="bulk-mapping">
|
|
17687
17701
|
<div class="bulk-mapping-body">
|
|
17688
17702
|
<div class="field-row">
|
|
@@ -17798,7 +17812,7 @@ class BulkMappingDialogComponent {
|
|
|
17798
17812
|
</div>
|
|
17799
17813
|
`, isInline: true, styles: [".bulk-mapping{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.bulk-mapping-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px 18px;display:flex;flex-direction:column;gap:14px}.field-row{display:flex;flex-direction:column;gap:4px}.field-row label{font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.field-row .hint{font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-style:italic}.field-row.inline{flex-direction:row;align-items:center;gap:8px}.source-summary{display:flex;flex-direction:column;gap:2px;padding:6px 10px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:4px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.source-summary .source-count{font-weight:600;font-size:.85rem}.source-summary .source-preview{font-size:.72rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.entity-display{display:flex;flex-direction:column;gap:2px;padding:6px 10px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:4px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.entity-display.empty{flex-direction:row;align-items:center;justify-content:space-between}.entity-main{display:flex;align-items:center;gap:8px}.entity-main .entity-name{flex:1;font-weight:600;font-size:.9rem}.entity-meta{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:.7rem;font-family:monospace;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));word-break:break-all}.entity-meta .sep{opacity:.7}.combo-row{display:flex;align-items:stretch;gap:4px}.combo-row kendo-combobox{flex:1}.loading-pill{margin-left:6px;font-size:.65rem;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--kendo-color-info, #0dcaf0) 18%,transparent);color:var(--kendo-color-info, #0dcaf0);text-transform:none;letter-spacing:0;font-style:italic}.expression-preview{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:4px 10px;border-radius:4px;font-size:.75rem;background:color-mix(in srgb,var(--kendo-color-success, #28a745) 10%,transparent)}.expression-preview.expression-preview-error{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 10%,transparent)}.expression-preview .preview-label{font-weight:600;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.expression-preview code{font-family:monospace}.expression-preview .preview-arrow{opacity:.7}.expression-preview .preview-note{font-style:italic;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.expression-preview .preview-error-text{color:var(--kendo-color-error, #dc3545)}.dialog-actions{flex:0 0 auto;display:flex;gap:8px;justify-content:flex-end;padding:10px 18px;border-top:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 70%,transparent)}\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: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i3$1.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: SwitchModule }, { kind: "component", type: i5.SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { 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: DataPointPickerComponent, selector: "mm-data-point-picker", inputs: ["entity", "entityRtId", "entityCkTypeId", "value", "placeholder", "disabled"], outputs: ["valueChange", "filterChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17800
17814
|
}
|
|
17801
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
17815
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BulkMappingDialogComponent, decorators: [{
|
|
17802
17816
|
type: Component,
|
|
17803
17817
|
args: [{ selector: 'mm-bulk-mapping-dialog', standalone: true, imports: [
|
|
17804
17818
|
CommonModule,
|
|
@@ -17965,10 +17979,10 @@ class BulkMappingDialogService {
|
|
|
17965
17979
|
return { confirmed: false };
|
|
17966
17980
|
}
|
|
17967
17981
|
}
|
|
17968
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
17969
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
17982
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BulkMappingDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17983
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BulkMappingDialogService, providedIn: 'root' });
|
|
17970
17984
|
}
|
|
17971
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
17985
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BulkMappingDialogService, decorators: [{
|
|
17972
17986
|
type: Injectable,
|
|
17973
17987
|
args: [{ providedIn: 'root' }]
|
|
17974
17988
|
}] });
|
|
@@ -18043,10 +18057,10 @@ class GetMappingCoverageNodeDtoGQL extends i1$3.Query {
|
|
|
18043
18057
|
constructor(apollo) {
|
|
18044
18058
|
super(apollo);
|
|
18045
18059
|
}
|
|
18046
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
18047
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
18060
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetMappingCoverageNodeDtoGQL, deps: [{ token: i1$3.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
18061
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetMappingCoverageNodeDtoGQL, providedIn: 'root' });
|
|
18048
18062
|
}
|
|
18049
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
18063
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: GetMappingCoverageNodeDtoGQL, decorators: [{
|
|
18050
18064
|
type: Injectable,
|
|
18051
18065
|
args: [{
|
|
18052
18066
|
providedIn: 'root'
|
|
@@ -18277,7 +18291,7 @@ class MappingCoverageTreeDataSource extends HierarchyDataSourceBase {
|
|
|
18277
18291
|
* direct tree parent (`excludeRtId`, back-edge suppression).
|
|
18278
18292
|
*/
|
|
18279
18293
|
async discoverRoleGroups(rtId, ckTypeId, excludeRtId) {
|
|
18280
|
-
let definitions
|
|
18294
|
+
let definitions;
|
|
18281
18295
|
try {
|
|
18282
18296
|
const response = await firstValueFrom(this.getEntityAssociationsGQL.fetch({
|
|
18283
18297
|
variables: {
|
|
@@ -18540,10 +18554,10 @@ class MappingCoverageTreeDataSource extends HierarchyDataSourceBase {
|
|
|
18540
18554
|
return null;
|
|
18541
18555
|
}
|
|
18542
18556
|
}
|
|
18543
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
18544
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
18557
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageTreeDataSource, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
18558
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageTreeDataSource });
|
|
18545
18559
|
}
|
|
18546
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
18560
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageTreeDataSource, decorators: [{
|
|
18547
18561
|
type: Injectable
|
|
18548
18562
|
}] });
|
|
18549
18563
|
/** Readable fallback label for a role id without a schema navigation name. */
|
|
@@ -18889,8 +18903,8 @@ class MappingEditDialogComponent {
|
|
|
18889
18903
|
targetAttributePath: '',
|
|
18890
18904
|
};
|
|
18891
18905
|
}
|
|
18892
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
18893
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
18906
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingEditDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18907
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: MappingEditDialogComponent, isStandalone: true, selector: "mm-mapping-edit-dialog", viewQueries: [{ propertyName: "sourcePicker", first: true, predicate: DataPointPickerComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
18894
18908
|
<div class="mapping-edit">
|
|
18895
18909
|
<div class="mapping-edit-body">
|
|
18896
18910
|
<div class="field-row">
|
|
@@ -19061,7 +19075,7 @@ class MappingEditDialogComponent {
|
|
|
19061
19075
|
</div>
|
|
19062
19076
|
`, isInline: true, styles: [".mapping-edit{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.mapping-edit-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px 18px;display:flex;flex-direction:column;gap:14px}.field-row{display:flex;flex-direction:column;gap:4px}.field-row label{font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.field-row .hint{font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-style:italic}.field-row.inline{flex-direction:row;align-items:center;gap:8px}.entity-display{display:flex;flex-direction:column;gap:2px;padding:6px 10px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:4px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.entity-display.empty{flex-direction:row;align-items:center;justify-content:space-between}.entity-main{display:flex;align-items:center;gap:8px}.entity-main .entity-name{flex:1;font-weight:600;font-size:.9rem}.entity-meta{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:.7rem;font-family:monospace;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));word-break:break-all}.entity-meta .sep{opacity:.7}.dialog-actions{flex:0 0 auto;display:flex;gap:8px;justify-content:flex-end;padding:10px 18px;border-top:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 70%,transparent)}.combo-row{display:flex;align-items:stretch;gap:4px}.combo-row kendo-combobox{flex:1}.attribute-option{display:flex;justify-content:space-between;align-items:center;width:100%;gap:8px}.attribute-option .attribute-path{flex:1;font-family:monospace;font-size:.85rem}.attribute-option .attribute-type{font-size:.7rem;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f0f0f0)) 80%,transparent);color:var(--theme-text-secondary, var(--kendo-color-subtle, #888))}.loading-pill{margin-left:6px;font-size:.65rem;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--kendo-color-info, #0dcaf0) 18%,transparent);color:var(--kendo-color-info, #0dcaf0);text-transform:none;letter-spacing:0;font-style:italic}.expression-preview{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:4px 10px;border-radius:4px;font-size:.75rem;background:color-mix(in srgb,var(--kendo-color-success, #28a745) 10%,transparent)}.expression-preview.expression-preview-error{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 10%,transparent)}.expression-preview .preview-label{font-weight:600;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.expression-preview code{font-family:monospace}.expression-preview .preview-arrow{opacity:.7}.expression-preview .preview-note{font-style:italic;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.expression-preview .preview-error-text{color:var(--kendo-color-error, #dc3545)}\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: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i3$1.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: "directive", type: i3$1.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "ngmodule", type: SVGIconModule }, { kind: "ngmodule", type: SwitchModule }, { kind: "component", type: i5.SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { 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: DataPointPickerComponent, selector: "mm-data-point-picker", inputs: ["entity", "entityRtId", "entityCkTypeId", "value", "placeholder", "disabled"], outputs: ["valueChange", "filterChange"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
19063
19077
|
}
|
|
19064
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
19078
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingEditDialogComponent, decorators: [{
|
|
19065
19079
|
type: Component,
|
|
19066
19080
|
args: [{ selector: 'mm-mapping-edit-dialog', standalone: true, imports: [
|
|
19067
19081
|
CommonModule,
|
|
@@ -19312,10 +19326,10 @@ class MappingEditDialogService {
|
|
|
19312
19326
|
return { confirmed: false };
|
|
19313
19327
|
}
|
|
19314
19328
|
}
|
|
19315
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
19316
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
19329
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingEditDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19330
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingEditDialogService, providedIn: 'root' });
|
|
19317
19331
|
}
|
|
19318
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
19332
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingEditDialogService, decorators: [{
|
|
19319
19333
|
type: Injectable,
|
|
19320
19334
|
args: [{ providedIn: 'root' }]
|
|
19321
19335
|
}] });
|
|
@@ -19390,7 +19404,14 @@ class MappingCoverageTreeComponent {
|
|
|
19390
19404
|
dataSource = inject(MappingCoverageTreeDataSource);
|
|
19391
19405
|
treeView;
|
|
19392
19406
|
/** Optional override for non-default hierarchies / mapping roles. */
|
|
19393
|
-
|
|
19407
|
+
// Assigned in the constructor rather than as a field initialiser: Vite's module-runner
|
|
19408
|
+
// transform (used by the Vitest unit-test builder) snapshots a class field whose
|
|
19409
|
+
// initialiser is a bare imported identifier at module-evaluation time, which is before
|
|
19410
|
+
// esbuild's lazily-initialised shared chunk has assigned the export, so the field would
|
|
19411
|
+
// be `undefined`. A constructor assignment is rewritten to a live read; a getter is not
|
|
19412
|
+
// an option here because Angular has to be able to set an @Input. Test-runner-only:
|
|
19413
|
+
// production and ng-packagr builds do not use the module runner and are unaffected.
|
|
19414
|
+
config;
|
|
19394
19415
|
/** Pre-select a root on first show (e.g. via route param). */
|
|
19395
19416
|
initialRoot = null;
|
|
19396
19417
|
/**
|
|
@@ -19669,6 +19690,9 @@ class MappingCoverageTreeComponent {
|
|
|
19669
19690
|
}
|
|
19670
19691
|
}
|
|
19671
19692
|
}
|
|
19693
|
+
constructor() {
|
|
19694
|
+
this.config = DEFAULT_MAPPING_COVERAGE_TREE_CONFIG;
|
|
19695
|
+
}
|
|
19672
19696
|
/**
|
|
19673
19697
|
* The Studio loads the per-tenant source-candidate CK types ASYNCHRONOUSLY
|
|
19674
19698
|
* (System.UI singleton) and re-emits the `config` input when they arrive —
|
|
@@ -20754,10 +20778,10 @@ class MappingCoverageTreeComponent {
|
|
|
20754
20778
|
});
|
|
20755
20779
|
this.mappings.set(next);
|
|
20756
20780
|
}
|
|
20757
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
20758
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: MappingCoverageTreeComponent, isStandalone: true, selector: "mm-mapping-coverage-tree", inputs: { config: "config", initialRoot: "initialRoot", tenantId: "tenantId", expressionEvaluator: "expressionEvaluator" }, outputs: { entitySelected: "entitySelected" }, providers: [MappingCoverageTreeDataSource], viewQueries: [{ propertyName: "treeView", first: true, predicate: TreeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"coverage-root\">\n @if (config.sourceCandidateCkTypeIds.length > 0) {\n <div class=\"coverage-tabs\" role=\"tablist\">\n <button class=\"coverage-tab\"\n [class.active]=\"activeTab() === 'coverage'\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === 'coverage'\"\n (click)=\"selectTab('coverage')\">Coverage Tree</button>\n <button class=\"coverage-tab\"\n [class.active]=\"activeTab() === 'orphans'\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === 'orphans'\"\n (click)=\"selectTab('orphans')\">\n Orphan Sources\n @if (orphanStats(); as s) {\n @if (s.unmapped > 0) { <span class=\"tab-badge\">{{ s.unmapped }}</span> }\n }\n </button>\n </div>\n }\n\n @if (activeTab() === 'coverage') {\n <div class=\"coverage-toolbar\">\n <mm-perspective-switcher\n [perspectives]=\"perspectives()\"\n [activeKey]=\"activePerspectiveKey()\"\n (perspectiveChange)=\"onPerspectiveChange($event)\"></mm-perspective-switcher>\n <label class=\"toolbar-label\">Tree:</label>\n <select class=\"root-select\"\n [value]=\"selectedRoot()?.rtId ?? ''\"\n (change)=\"onRootSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a {{ activeRootCkTypeId() }} \u2014</option>\n @for (root of rootCandidates(); track root.rtId) {\n <option [value]=\"root.rtId\" [title]=\"root.description\">{{ root.name }}</option>\n }\n </select>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n (click)=\"refreshRoots()\" title=\"Refresh tree list\"></button>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.folderOpen\"\n (click)=\"pickRoot()\" title=\"Browse for entity\">Browse...</button>\n\n @if (selectedRoot(); as root) {\n <div class=\"toolbar-spacer\"></div>\n <span class=\"toolbar-meta\">\n <span class=\"meta-name\">{{ root.name }}</span>\n <span class=\"meta-type\">{{ root.ckTypeId }}</span>\n </span>\n }\n </div>\n\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Validation:</label>\n <select class=\"root-select\"\n [value]=\"selectedPipeline()?.rtId ?? ''\"\n (change)=\"onPipelineSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a {{ config.validationPipelineCkTypeId }} \u2014</option>\n @for (p of validationPipelines(); track p.rtId) {\n <option [value]=\"p.rtId\">{{ p.name }}</option>\n }\n </select>\n @if (tenantId) {\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"!selectedPipeline() || validationRunning() || validationLoading()\"\n (click)=\"runValidation()\"\n [title]=\"validationRunning() ? 'Validation running\u2026' : 'Run pipeline + load report'\">\n @if (validationRunning()) { Running\u2026 } @else { Run }\n </button>\n }\n <button kendoButton fillMode=\"solid\" size=\"small\" [svgIcon]=\"icons.refresh\"\n [disabled]=\"!selectedPipeline() || validationLoading() || validationRunning()\"\n (click)=\"refreshValidation()\">Load Report</button>\n @if (validationSummary()) {\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"clearValidation()\">Clear</button>\n }\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (validationLoading()) {\n <span class=\"toolbar-meta\">Loading\u2026</span>\n } @else if (validationError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (validationSummary(); as s) {\n <span class=\"validation-summary\">\n <span class=\"badge badge-error\" title=\"error\">{{ s.error }} err</span>\n <span class=\"badge badge-warning\" title=\"warning\">{{ s.warning }} warn</span>\n <span class=\"badge badge-ok\" title=\"ok\">{{ s.ok }} ok</span>\n <span class=\"badge badge-info\" title=\"info / unscoped\">{{ s.info }} info</span>\n <span class=\"badge\">{{ s.total }} total</span>\n @if (validationExecutedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n }\n </div>\n\n @if (tenantId) {\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Generation:</label>\n <select class=\"root-select\"\n [value]=\"selectedGenerationPipeline()?.rtId ?? ''\"\n (change)=\"onGenerationSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick an auto-mapping pipeline \u2014</option>\n @for (p of validationPipelines(); track p.rtId) {\n <option [value]=\"p.rtId\">{{ p.name }}</option>\n }\n </select>\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"!selectedGenerationPipeline() || generationRunning()\"\n (click)=\"runGeneration()\"\n [title]=\"generationRunning() ? 'Generation running\u2026' : 'Run the auto-mapping pipeline and reload counts'\">\n @if (generationRunning()) { Running\u2026 } @else { Generate }\n </button>\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (generationRunning()) {\n <span class=\"toolbar-meta\">Generating mappings\u2026</span>\n } @else if (generationError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (generationStats(); as s) {\n <span class=\"validation-summary\">\n @if (s.totalSuggestions !== undefined) {\n <span class=\"badge badge-ok\" title=\"mapping suggestions produced\">{{ s.totalSuggestions }} mappings</span>\n }\n @if (s.matchedContainers !== undefined && s.totalContainers !== undefined) {\n <span class=\"badge\" title=\"containers (e.g. rooms) matched to a target\">\n {{ s.matchedContainers }}/{{ s.totalContainers }} matched\n </span>\n }\n @if (s.unmatchedContainers) {\n <span class=\"badge badge-warning\"\n [attr.title]=\"'Unmatched: ' + (s.unmatchedContainerNames ?? []).join(', ')\">\n {{ s.unmatchedContainers }} unmatched\n </span>\n }\n @if (generationCompletedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n } @else if (generationCompletedAt(); as ts) {\n <span class=\"toolbar-meta\">Completed {{ ts }} (no statistics in OutputData)</span>\n }\n </div>\n }\n\n @if (tenantId && (exportBackupPipeline() || importBackupPipeline())) {\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Backup:</label>\n <button kendoButton size=\"small\" [svgIcon]=\"icons.download\"\n [disabled]=\"!exportBackupPipeline() || backupRunning() !== null\"\n (click)=\"exportMappings()\"\n title=\"Run the export pipeline and download the mapping document as JSON\">\n @if (backupRunning() === 'export') { Exporting\u2026 } @else { Export }\n </button>\n <button kendoButton size=\"small\" [svgIcon]=\"icons.upload\"\n [disabled]=\"!importBackupPipeline() || backupRunning() !== null\"\n (click)=\"importFileInput.click()\"\n title=\"Import a previously exported mapping document (JSON)\">\n @if (backupRunning() === 'import') { Importing\u2026 } @else { Import\u2026 }\n </button>\n <input #importFileInput type=\"file\" accept=\".json,application/json\" hidden\n (change)=\"onImportFileSelected($event)\" />\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (backupRunning() === 'export') {\n <span class=\"toolbar-meta\">Exporting mappings\u2026</span>\n } @else if (backupRunning() === 'import') {\n <span class=\"toolbar-meta\">Importing mappings\u2026</span>\n } @else if (backupError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (importStats(); as s) {\n <span class=\"validation-summary\">\n @if (s.resolved !== undefined) {\n <span class=\"badge badge-ok\" title=\"mappings resolved and imported\">{{ s.resolved }} imported</span>\n }\n @if (s.unresolved) {\n <span class=\"badge badge-warning\"\n [attr.title]=\"'Unresolved: ' + unresolvedImportNames()\">\n {{ s.unresolved }} unresolved\n </span>\n }\n @if (s.total !== undefined) {\n <span class=\"badge\">{{ s.total }} total</span>\n }\n @if (importCompletedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n } @else if (importCompletedAt(); as ts) {\n <span class=\"toolbar-meta\">Import completed {{ ts }} (no statistics in OutputData)</span>\n }\n </div>\n }\n\n <div class=\"coverage-body\">\n <div class=\"coverage-tree-pane\">\n @if (selectedRoot()) {\n <mm-tree-view\n [dataSource]=\"dataSource\"\n (nodeSelected)=\"onNodeSelected($event)\">\n </mm-tree-view>\n } @else {\n <div class=\"empty-hint\">\n Select a tree to start. Counts in brackets show how many mappings\n point to that node.\n </div>\n }\n </div>\n\n <div class=\"coverage-detail-pane\">\n @if (selectedNode(); as node) {\n <div class=\"detail-header\">\n <div class=\"detail-titles\">\n <h3 class=\"detail-name\">{{ node.name }}</h3>\n <div class=\"detail-subtitle\">{{ node.ckTypeId }}@{{ node.rtId }}</div>\n </div>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n (click)=\"refreshSelected()\" title=\"Refresh\"></button>\n </div>\n\n <div class=\"detail-section-title\">\n <span>Mappings</span>\n @if (summaryLine(); as s) {\n <span class=\"detail-summary\">{{ s }}</span>\n }\n <span class=\"toolbar-spacer\"></span>\n <button kendoButton themeColor=\"primary\" size=\"small\" [svgIcon]=\"icons.plus\"\n (click)=\"addMapping()\">Add</button>\n </div>\n\n @if (mappingsLoading()) {\n <div class=\"empty-hint\">Loading mappings\u2026</div>\n } @else if (mappingsError(); as err) {\n <div class=\"error-hint\">{{ err }}</div>\n } @else if (mappings().length === 0) {\n <div class=\"empty-hint\">\n No mappings reference this node yet. Add one using the button above.\n </div>\n } @else {\n <ul class=\"mapping-list\">\n @for (mapping of mappings(); track trackByRtId($index, mapping)) {\n <li class=\"mapping-row\" [class.mapping-disabled]=\"!mapping.enabled\">\n <div class=\"mapping-line\">\n <span class=\"mapping-name\">\n {{ mapping.name || 'Mapping ' + ($index + 1) }}\n </span>\n @if (!mapping.enabled) {\n <span class=\"mapping-badge mapping-badge-off\">disabled</span>\n }\n </div>\n <div class=\"mapping-details\">\n <span class=\"kv\">\n <span class=\"kv-key\">Source:</span>\n <span class=\"kv-val\">\n {{ mapping.sourceName || mapping.sourceRtId || '\u2014 not linked \u2014' }}\n </span>\n </span>\n @if (mapping.sourceAttributePath) {\n <span class=\"kv\">\n <span class=\"kv-key\">Attr:</span>\n <span class=\"kv-val\">{{ mapping.sourceAttributePath }}</span>\n </span>\n }\n @if (mapping.mappingExpression) {\n <span class=\"kv\">\n <span class=\"kv-key\">Expr:</span>\n <code class=\"kv-val\">{{ mapping.mappingExpression }}</code>\n </span>\n }\n @if (mapping.targetAttributePath) {\n <span class=\"kv\">\n <span class=\"kv-key\">\u2192</span>\n <span class=\"kv-val\">{{ mapping.targetAttributePath }}</span>\n </span>\n }\n </div>\n <div class=\"mapping-actions\">\n <button kendoButton themeColor=\"primary\" fillMode=\"flat\" size=\"small\"\n [svgIcon]=\"icons.pencil\"\n (click)=\"editMapping(mapping)\"\n title=\"Edit mapping\">Edit\u2026</button>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.trash\"\n (click)=\"deleteMapping(mapping)\"\n title=\"Delete mapping\"></button>\n </div>\n </li>\n }\n </ul>\n }\n } @else {\n <div class=\"empty-hint\">\n Select a node from the tree to view and edit its mappings.\n </div>\n }\n </div>\n </div>\n }\n\n @if (activeTab() === 'orphans') {\n <div class=\"coverage-toolbar\">\n <label class=\"toolbar-label\">Source type:</label>\n <select class=\"root-select\"\n [value]=\"orphanCkType() ?? ''\"\n (change)=\"onOrphanCkTypeChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a source type \u2014</option>\n @for (ckType of config.sourceCandidateCkTypeIds; track ckType) {\n <option [value]=\"ckType\">{{ ckType }}</option>\n }\n </select>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n [disabled]=\"!orphanCkType() || orphanLoading()\"\n (click)=\"refreshOrphans()\" title=\"Reload\"></button>\n <span class=\"orphan-search-wrap\">\n <input type=\"text\" class=\"root-select orphan-search\"\n placeholder=\"Search name, room, description\u2026\"\n [value]=\"orphanSearchText()\"\n (input)=\"orphanSearchText.set($any($event.target).value)\" />\n @if (orphanSearchText()) {\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.x\"\n class=\"orphan-search-clear\"\n (click)=\"orphanSearchText.set('')\"\n title=\"Clear search\" aria-label=\"Clear search\"></button>\n }\n </span>\n <label class=\"orphan-toggle\">\n <input type=\"checkbox\" [checked]=\"orphanHideMapped()\" (change)=\"toggleOrphanHideMapped()\" />\n Hide already-mapped\n </label>\n <label class=\"toolbar-label\">Group by:</label>\n <select class=\"root-select\"\n [value]=\"orphanGroupParentType() ?? ''\"\n (change)=\"onOrphanGroupParentTypeChange($any($event.target).value)\">\n <option value=\"\">(no grouping)</option>\n @for (t of orphanAvailableParentTypes(); track t) {\n <option [value]=\"t\">{{ t }}</option>\n }\n </select>\n @if (orphanGroupParentType()) {\n <kendo-multiselect class=\"orphan-group-filter\"\n [data]=\"orphanAvailableGroupNames()\"\n [value]=\"orphanSelectedGroupNames()\"\n (valueChange)=\"onOrphanGroupNamesChange($event)\"\n [autoClose]=\"false\"\n [clearButton]=\"true\"\n size=\"small\"\n placeholder=\"Filter groups\u2026\"\n title=\"Show only the selected groups (e.g. specific categories)\">\n </kendo-multiselect>\n }\n\n <div class=\"toolbar-spacer\"></div>\n\n <button kendoButton size=\"small\" fillMode=\"flat\"\n [disabled]=\"orphanVisibleList().length === 0\"\n (click)=\"selectAllVisibleOrphans()\"\n title=\"Select every row visible under the current filter\">Select all</button>\n <button kendoButton size=\"small\" fillMode=\"flat\"\n [disabled]=\"orphanSelectedCount() === 0\"\n (click)=\"clearOrphanSelection()\">Clear</button>\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"orphanSelectedCount() === 0\"\n (click)=\"bulkMapSelected()\"\n title=\"Create one mapping per selected source (shared target + paths)\">\n Map {{ orphanSelectedCount() }} selected\u2026\n </button>\n\n @if (orphanStats(); as s) {\n <span class=\"validation-summary\">\n @if (orphanSearchText().trim() || orphanSelectedGroupNames().length > 0) {\n <span class=\"badge badge-info\" title=\"rows matching search + group filter\">{{ orphanVisibleList().length }} shown</span>\n }\n <span class=\"badge badge-error\" title=\"unmapped \u2014 no DataPointMapping yet\">{{ s.unmapped }} unmapped</span>\n <span class=\"badge badge-ok\" title=\"already covered by at least one mapping\">{{ s.mapped }} mapped</span>\n <span class=\"badge\">{{ s.total }} total</span>\n </span>\n }\n </div>\n\n <div class=\"orphan-body\">\n @if (orphanLoading()) {\n <div class=\"empty-hint\">Loading source candidates\u2026</div>\n } @else if (orphanError(); as err) {\n <div class=\"error-hint\">{{ err }}</div>\n } @else if (orphanVisibleList().length === 0) {\n <div class=\"empty-hint\">\n @if (orphanSelectedGroupNames().length > 0) {\n No entries in the selected group(s) match the current filters.\n } @else if (orphanSearchText().trim()) {\n No entries match \"{{ orphanSearchText() }}\".\n } @else if (orphanHideMapped()) {\n All {{ orphanCkType() }} entities are mapped at least once. \uD83C\uDF89\n } @else {\n No entities of type {{ orphanCkType() }} found.\n }\n </div>\n } @else if (orphanGroupParentType()) {\n @for (group of orphanGroupedList(); track group.key) {\n <div class=\"orphan-group\">\n <div class=\"orphan-group-header\">\n <span class=\"orphan-group-label\">{{ group.label }}</span>\n <span class=\"orphan-group-count\">{{ group.items.length }}</span>\n </div>\n <ul class=\"orphan-list\">\n @for (item of group.items; track trackOrphanByRtId($index, item)) {\n <ng-container *ngTemplateOutlet=\"orphanRowTpl; context: { $implicit: item }\"></ng-container>\n }\n </ul>\n </div>\n }\n } @else {\n <ul class=\"orphan-list\">\n @for (item of orphanVisibleList(); track trackOrphanByRtId($index, item)) {\n <ng-container *ngTemplateOutlet=\"orphanRowTpl; context: { $implicit: item }\"></ng-container>\n }\n </ul>\n }\n\n <ng-template #orphanRowTpl let-item>\n <li class=\"orphan-row\" [class.orphan-mapped]=\"item.mappingCount > 0\">\n <div class=\"orphan-line\">\n <input type=\"checkbox\" class=\"orphan-check\"\n [checked]=\"isOrphanSelected(item.rtId)\"\n (change)=\"toggleOrphanSelected(item.rtId)\"\n [attr.aria-label]=\"'Select ' + item.name\" />\n <span class=\"orphan-name\">{{ item.name }}</span>\n @if (item.mappingCount > 0) {\n <span class=\"orphan-badge orphan-badge-mapped\">\n {{ item.mappingCount }} mapping{{ item.mappingCount === 1 ? '' : 's' }}\n </span>\n } @else {\n <span class=\"orphan-badge orphan-badge-unmapped\">unmapped</span>\n }\n </div>\n @if (item.parentPath.length > 0) {\n <div class=\"orphan-breadcrumb\" [attr.title]=\"'Parent chain (root-first)'\">\n @for (parent of breadcrumbFor(item); track parent.rtId; let last = $last) {\n <span class=\"crumb\">{{ parent.name }}</span>\n @if (!last) { <span class=\"crumb-sep\">\u203A</span> }\n }\n </div>\n }\n <div class=\"orphan-meta\">\n <span class=\"kv-val\">{{ item.ckTypeId }}@{{ item.rtId }}</span>\n </div>\n @if (item.description) {\n <div class=\"orphan-description\">{{ item.description }}</div>\n }\n <div class=\"orphan-actions\">\n <button kendoButton themeColor=\"primary\" fillMode=\"flat\" size=\"small\"\n [svgIcon]=\"icons.plus\"\n (click)=\"createMappingFromOrphan(item)\"\n title=\"Create mapping pre-linked to this source\">\n Map\u2026\n </button>\n </div>\n </li>\n </ng-template>\n </div>\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.coverage-root{display:flex;flex-direction:column;flex:1;min-height:0;gap:12px}.coverage-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface-alt, #f8f9fa)) 70%,transparent)}.coverage-toolbar .toolbar-label{flex:0 0 96px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.coverage-toolbar .root-select{flex:0 0 280px;min-width:0;padding:4px 8px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:4px;background:var(--theme-bg-elevated, var(--kendo-color-surface, #fff));color:var(--theme-text-primary, inherit);font-size:.9rem;height:30px}.coverage-toolbar .orphan-search-wrap{display:inline-flex;align-items:center;gap:2px}.coverage-toolbar .orphan-search-wrap .orphan-search{flex:1 1 220px;min-width:140px}.coverage-toolbar .orphan-group-filter{flex:0 1 320px;min-width:160px}.coverage-toolbar .toolbar-spacer{flex:1}.coverage-toolbar .toolbar-meta{display:flex;flex-direction:column;align-items:flex-end;line-height:1.1}.coverage-toolbar .toolbar-meta .meta-name{font-size:.85rem;font-weight:600}.coverage-toolbar .toolbar-meta .meta-type{font-size:.7rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d)}.coverage-body{flex:1;display:flex;gap:12px;min-height:0}@media(max-width:900px){.coverage-body{flex-direction:column}.coverage-tree-pane{flex:0 0 38vh;min-width:0;min-height:180px}.coverage-detail-pane{min-height:180px}.coverage-toolbar .toolbar-label{flex:0 0 auto}.coverage-toolbar .root-select{flex:1 1 200px;max-width:100%}}.coverage-tree-pane{flex:0 0 40%;min-width:240px;display:flex;flex-direction:column;min-height:0;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);color:var(--theme-text-primary, inherit);overflow:auto}.coverage-detail-pane{flex:1;min-width:0;display:flex;flex-direction:column;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);color:var(--theme-text-primary, inherit);padding:12px 14px;gap:12px;overflow:auto}.detail-header{display:flex;align-items:flex-start;gap:8px}.detail-header .detail-titles{flex:1;min-width:0}.detail-header .detail-name{margin:0;font-size:1.05rem;font-weight:600;word-break:break-word}.detail-header .detail-subtitle{font-size:.72rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d);word-break:break-all}.detail-section-title{display:flex;align-items:center;gap:10px;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #6c757d)}.detail-section-title .toolbar-spacer{flex:1}.detail-section-title .detail-summary{text-transform:none;letter-spacing:0;font-weight:500;color:var(--kendo-color-on-app-surface, inherit);font-size:.78rem}.mapping-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.mapping-row{border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;padding:8px 10px;display:flex;flex-direction:column;gap:6px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.mapping-row.mapping-disabled{opacity:.55}.mapping-line{display:flex;align-items:center;gap:8px}.mapping-line .mapping-name{font-weight:600;font-size:.9rem}.mapping-badge{font-size:.65rem;text-transform:uppercase;letter-spacing:.5px;padding:1px 6px;border-radius:8px;border:1px solid var(--kendo-color-border, #dee2e6)}.mapping-badge.mapping-badge-off{color:var(--kendo-color-subtle, #6c757d)}.mapping-details{display:flex;flex-wrap:wrap;gap:10px;font-size:.8rem}.mapping-details .kv{display:inline-flex;align-items:baseline;gap:4px}.mapping-details .kv-key{font-weight:600;color:var(--kendo-color-subtle, #6c757d)}.mapping-details code.kv-val{font-family:monospace;background:var(--kendo-color-surface, transparent);padding:1px 4px;border-radius:3px}.mapping-actions{display:flex;gap:6px;justify-content:flex-end}.empty-hint,.error-hint{padding:12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d);text-align:center}.error-hint{color:var(--kendo-color-error, #dc3545)}.coverage-tabs{display:flex;gap:0;border-bottom:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6))}.coverage-tab{padding:8px 16px;border:none;background:transparent;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:6px}.coverage-tab:hover{color:var(--theme-text-primary, inherit)}.coverage-tab.active{color:var(--theme-text-accent, var(--kendo-color-primary, #ff6358));border-bottom-color:var(--theme-text-accent, var(--kendo-color-primary, #ff6358))}.coverage-tab .tab-badge{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 22%,transparent);color:var(--kendo-color-error, #dc3545);border-radius:10px;padding:1px 8px;font-size:.7rem;font-weight:700}.orphan-toggle{display:inline-flex;align-items:center;gap:6px;font-size:.8rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));cursor:pointer}.orphan-body{flex:1;min-height:0;overflow:auto;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);padding:8px}.orphan-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.orphan-row{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-left-width:3px;border-left-color:var(--kendo-color-error, #dc3545);border-radius:6px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.orphan-row.orphan-mapped{border-left-color:var(--kendo-color-success, #28a745);opacity:.7}.orphan-row .orphan-line{display:flex;align-items:center;gap:8px}.orphan-row .orphan-line .orphan-check{flex-shrink:0;margin:0;cursor:pointer;accent-color:var(--kendo-color-primary, #ff6358)}.orphan-row .orphan-line .orphan-name{flex:1;font-weight:600;font-size:.9rem}.orphan-row .orphan-badge{font-size:.7rem;padding:1px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}.orphan-row .orphan-badge-unmapped{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 22%,transparent);color:var(--kendo-color-error, #dc3545);border:1px solid var(--kendo-color-error, #dc3545)}.orphan-row .orphan-badge-mapped{background:color-mix(in srgb,var(--kendo-color-success, #28a745) 18%,transparent);color:var(--kendo-color-success, #28a745);border:1px solid var(--kendo-color-success, #28a745)}.orphan-row .orphan-meta{font-family:monospace;font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));word-break:break-all}.orphan-row .orphan-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:.75rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.orphan-row .orphan-breadcrumb .crumb{line-height:1.3}.orphan-row .orphan-breadcrumb .crumb-sep{opacity:.55;font-weight:600}.orphan-row .orphan-description{font-size:.78rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-style:italic}.orphan-row .orphan-actions{display:flex;gap:6px;justify-content:flex-end}.orphan-group{display:flex;flex-direction:column;gap:6px}.orphan-group+.orphan-group{margin-top:14px}.orphan-group .orphan-group-header{display:flex;align-items:baseline;gap:8px;padding:4px 8px;border-bottom:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));font-size:.85rem;font-weight:600;color:var(--theme-text-primary, inherit)}.orphan-group .orphan-group-header .orphan-group-label{flex:1}.orphan-group .orphan-group-header .orphan-group-count{font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f1f3f5)) 80%,transparent);border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:10px;padding:0 8px}.validation-summary{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.badge{font-size:.7rem;padding:2px 8px;border-radius:10px;background:var(--kendo-color-surface, #f1f3f5);border:1px solid var(--kendo-color-border, #dee2e6)}.badge-error{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 18%,transparent);border-color:var(--kendo-color-error, #dc3545);color:var(--kendo-color-error, #dc3545);font-weight:600}.badge-warning{background:color-mix(in srgb,var(--kendo-color-warning, #ffc107) 22%,transparent);border-color:var(--kendo-color-warning, #ffc107);color:var(--kendo-color-warning-on, #6b5500);font-weight:600}.badge-ok{background:color-mix(in srgb,var(--kendo-color-success, #28a745) 18%,transparent);border-color:var(--kendo-color-success, #28a745);color:var(--kendo-color-success, #28a745);font-weight:600}.badge-info{background:color-mix(in srgb,var(--kendo-color-info, #0dcaf0) 18%,transparent);border-color:var(--kendo-color-info, #0dcaf0);color:var(--kendo-color-info, #0dcaf0)}.validation-error-text{color:var(--kendo-color-error, #dc3545);font-size:.8rem}.validation-timestamp{font-size:.7rem;color:var(--kendo-color-subtle, #6c757d);margin-left:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: LayoutModule }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i3$1.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: "ngmodule", type: SVGIconModule }, { kind: "component", type: TreeComponent, selector: "mm-tree-view", inputs: ["dataSource"], outputs: ["nodeSelected", "nodeClick", "nodeDoubleClick", "nodeDrop", "expand", "collapse"] }, { kind: "component", type: PerspectiveSwitcherComponent, selector: "mm-perspective-switcher", inputs: ["perspectives", "activeKey", "label"], outputs: ["perspectiveChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20781
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20782
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: MappingCoverageTreeComponent, isStandalone: true, selector: "mm-mapping-coverage-tree", inputs: { config: "config", initialRoot: "initialRoot", tenantId: "tenantId", expressionEvaluator: "expressionEvaluator" }, outputs: { entitySelected: "entitySelected" }, providers: [MappingCoverageTreeDataSource], viewQueries: [{ propertyName: "treeView", first: true, predicate: TreeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"coverage-root\">\n @if (config.sourceCandidateCkTypeIds.length > 0) {\n <div class=\"coverage-tabs\" role=\"tablist\">\n <button class=\"coverage-tab\"\n [class.active]=\"activeTab() === 'coverage'\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === 'coverage'\"\n (click)=\"selectTab('coverage')\">Coverage Tree</button>\n <button class=\"coverage-tab\"\n [class.active]=\"activeTab() === 'orphans'\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === 'orphans'\"\n (click)=\"selectTab('orphans')\">\n Orphan Sources\n @if (orphanStats(); as s) {\n @if (s.unmapped > 0) { <span class=\"tab-badge\">{{ s.unmapped }}</span> }\n }\n </button>\n </div>\n }\n\n @if (activeTab() === 'coverage') {\n <div class=\"coverage-toolbar\">\n <mm-perspective-switcher\n [perspectives]=\"perspectives()\"\n [activeKey]=\"activePerspectiveKey()\"\n (perspectiveChange)=\"onPerspectiveChange($event)\"></mm-perspective-switcher>\n <label class=\"toolbar-label\">Tree:</label>\n <select class=\"root-select\"\n [value]=\"selectedRoot()?.rtId ?? ''\"\n (change)=\"onRootSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a {{ activeRootCkTypeId() }} \u2014</option>\n @for (root of rootCandidates(); track root.rtId) {\n <option [value]=\"root.rtId\" [title]=\"root.description\">{{ root.name }}</option>\n }\n </select>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n (click)=\"refreshRoots()\" title=\"Refresh tree list\"></button>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.folderOpen\"\n (click)=\"pickRoot()\" title=\"Browse for entity\">Browse...</button>\n\n @if (selectedRoot(); as root) {\n <div class=\"toolbar-spacer\"></div>\n <span class=\"toolbar-meta\">\n <span class=\"meta-name\">{{ root.name }}</span>\n <span class=\"meta-type\">{{ root.ckTypeId }}</span>\n </span>\n }\n </div>\n\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Validation:</label>\n <select class=\"root-select\"\n [value]=\"selectedPipeline()?.rtId ?? ''\"\n (change)=\"onPipelineSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a {{ config.validationPipelineCkTypeId }} \u2014</option>\n @for (p of validationPipelines(); track p.rtId) {\n <option [value]=\"p.rtId\">{{ p.name }}</option>\n }\n </select>\n @if (tenantId) {\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"!selectedPipeline() || validationRunning() || validationLoading()\"\n (click)=\"runValidation()\"\n [title]=\"validationRunning() ? 'Validation running\u2026' : 'Run pipeline + load report'\">\n @if (validationRunning()) { Running\u2026 } @else { Run }\n </button>\n }\n <button kendoButton fillMode=\"solid\" size=\"small\" [svgIcon]=\"icons.refresh\"\n [disabled]=\"!selectedPipeline() || validationLoading() || validationRunning()\"\n (click)=\"refreshValidation()\">Load Report</button>\n @if (validationSummary()) {\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"clearValidation()\">Clear</button>\n }\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (validationLoading()) {\n <span class=\"toolbar-meta\">Loading\u2026</span>\n } @else if (validationError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (validationSummary(); as s) {\n <span class=\"validation-summary\">\n <span class=\"badge badge-error\" title=\"error\">{{ s.error }} err</span>\n <span class=\"badge badge-warning\" title=\"warning\">{{ s.warning }} warn</span>\n <span class=\"badge badge-ok\" title=\"ok\">{{ s.ok }} ok</span>\n <span class=\"badge badge-info\" title=\"info / unscoped\">{{ s.info }} info</span>\n <span class=\"badge\">{{ s.total }} total</span>\n @if (validationExecutedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n }\n </div>\n\n @if (tenantId) {\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Generation:</label>\n <select class=\"root-select\"\n [value]=\"selectedGenerationPipeline()?.rtId ?? ''\"\n (change)=\"onGenerationSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick an auto-mapping pipeline \u2014</option>\n @for (p of validationPipelines(); track p.rtId) {\n <option [value]=\"p.rtId\">{{ p.name }}</option>\n }\n </select>\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"!selectedGenerationPipeline() || generationRunning()\"\n (click)=\"runGeneration()\"\n [title]=\"generationRunning() ? 'Generation running\u2026' : 'Run the auto-mapping pipeline and reload counts'\">\n @if (generationRunning()) { Running\u2026 } @else { Generate }\n </button>\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (generationRunning()) {\n <span class=\"toolbar-meta\">Generating mappings\u2026</span>\n } @else if (generationError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (generationStats(); as s) {\n <span class=\"validation-summary\">\n @if (s.totalSuggestions !== undefined) {\n <span class=\"badge badge-ok\" title=\"mapping suggestions produced\">{{ s.totalSuggestions }} mappings</span>\n }\n @if (s.matchedContainers !== undefined && s.totalContainers !== undefined) {\n <span class=\"badge\" title=\"containers (e.g. rooms) matched to a target\">\n {{ s.matchedContainers }}/{{ s.totalContainers }} matched\n </span>\n }\n @if (s.unmatchedContainers) {\n <span class=\"badge badge-warning\"\n [attr.title]=\"'Unmatched: ' + (s.unmatchedContainerNames ?? []).join(', ')\">\n {{ s.unmatchedContainers }} unmatched\n </span>\n }\n @if (generationCompletedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n } @else if (generationCompletedAt(); as ts) {\n <span class=\"toolbar-meta\">Completed {{ ts }} (no statistics in OutputData)</span>\n }\n </div>\n }\n\n @if (tenantId && (exportBackupPipeline() || importBackupPipeline())) {\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Backup:</label>\n <button kendoButton size=\"small\" [svgIcon]=\"icons.download\"\n [disabled]=\"!exportBackupPipeline() || backupRunning() !== null\"\n (click)=\"exportMappings()\"\n title=\"Run the export pipeline and download the mapping document as JSON\">\n @if (backupRunning() === 'export') { Exporting\u2026 } @else { Export }\n </button>\n <button kendoButton size=\"small\" [svgIcon]=\"icons.upload\"\n [disabled]=\"!importBackupPipeline() || backupRunning() !== null\"\n (click)=\"importFileInput.click()\"\n title=\"Import a previously exported mapping document (JSON)\">\n @if (backupRunning() === 'import') { Importing\u2026 } @else { Import\u2026 }\n </button>\n <input #importFileInput type=\"file\" accept=\".json,application/json\" hidden\n (change)=\"onImportFileSelected($event)\" />\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (backupRunning() === 'export') {\n <span class=\"toolbar-meta\">Exporting mappings\u2026</span>\n } @else if (backupRunning() === 'import') {\n <span class=\"toolbar-meta\">Importing mappings\u2026</span>\n } @else if (backupError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (importStats(); as s) {\n <span class=\"validation-summary\">\n @if (s.resolved !== undefined) {\n <span class=\"badge badge-ok\" title=\"mappings resolved and imported\">{{ s.resolved }} imported</span>\n }\n @if (s.unresolved) {\n <span class=\"badge badge-warning\"\n [attr.title]=\"'Unresolved: ' + unresolvedImportNames()\">\n {{ s.unresolved }} unresolved\n </span>\n }\n @if (s.total !== undefined) {\n <span class=\"badge\">{{ s.total }} total</span>\n }\n @if (importCompletedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n } @else if (importCompletedAt(); as ts) {\n <span class=\"toolbar-meta\">Import completed {{ ts }} (no statistics in OutputData)</span>\n }\n </div>\n }\n\n <div class=\"coverage-body\">\n <div class=\"coverage-tree-pane\">\n @if (selectedRoot()) {\n <mm-tree-view\n [dataSource]=\"dataSource\"\n (nodeSelected)=\"onNodeSelected($event)\">\n </mm-tree-view>\n } @else {\n <div class=\"empty-hint\">\n Select a tree to start. Counts in brackets show how many mappings\n point to that node.\n </div>\n }\n </div>\n\n <div class=\"coverage-detail-pane\">\n @if (selectedNode(); as node) {\n <div class=\"detail-header\">\n <div class=\"detail-titles\">\n <h3 class=\"detail-name\">{{ node.name }}</h3>\n <div class=\"detail-subtitle\">{{ node.ckTypeId }}@{{ node.rtId }}</div>\n </div>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n (click)=\"refreshSelected()\" title=\"Refresh\"></button>\n </div>\n\n <div class=\"detail-section-title\">\n <span>Mappings</span>\n @if (summaryLine(); as s) {\n <span class=\"detail-summary\">{{ s }}</span>\n }\n <span class=\"toolbar-spacer\"></span>\n <button kendoButton themeColor=\"primary\" size=\"small\" [svgIcon]=\"icons.plus\"\n (click)=\"addMapping()\">Add</button>\n </div>\n\n @if (mappingsLoading()) {\n <div class=\"empty-hint\">Loading mappings\u2026</div>\n } @else if (mappingsError(); as err) {\n <div class=\"error-hint\">{{ err }}</div>\n } @else if (mappings().length === 0) {\n <div class=\"empty-hint\">\n No mappings reference this node yet. Add one using the button above.\n </div>\n } @else {\n <ul class=\"mapping-list\">\n @for (mapping of mappings(); track trackByRtId($index, mapping)) {\n <li class=\"mapping-row\" [class.mapping-disabled]=\"!mapping.enabled\">\n <div class=\"mapping-line\">\n <span class=\"mapping-name\">\n {{ mapping.name || 'Mapping ' + ($index + 1) }}\n </span>\n @if (!mapping.enabled) {\n <span class=\"mapping-badge mapping-badge-off\">disabled</span>\n }\n </div>\n <div class=\"mapping-details\">\n <span class=\"kv\">\n <span class=\"kv-key\">Source:</span>\n <span class=\"kv-val\">\n {{ mapping.sourceName || mapping.sourceRtId || '\u2014 not linked \u2014' }}\n </span>\n </span>\n @if (mapping.sourceAttributePath) {\n <span class=\"kv\">\n <span class=\"kv-key\">Attr:</span>\n <span class=\"kv-val\">{{ mapping.sourceAttributePath }}</span>\n </span>\n }\n @if (mapping.mappingExpression) {\n <span class=\"kv\">\n <span class=\"kv-key\">Expr:</span>\n <code class=\"kv-val\">{{ mapping.mappingExpression }}</code>\n </span>\n }\n @if (mapping.targetAttributePath) {\n <span class=\"kv\">\n <span class=\"kv-key\">\u2192</span>\n <span class=\"kv-val\">{{ mapping.targetAttributePath }}</span>\n </span>\n }\n </div>\n <div class=\"mapping-actions\">\n <button kendoButton themeColor=\"primary\" fillMode=\"flat\" size=\"small\"\n [svgIcon]=\"icons.pencil\"\n (click)=\"editMapping(mapping)\"\n title=\"Edit mapping\">Edit\u2026</button>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.trash\"\n (click)=\"deleteMapping(mapping)\"\n title=\"Delete mapping\"></button>\n </div>\n </li>\n }\n </ul>\n }\n } @else {\n <div class=\"empty-hint\">\n Select a node from the tree to view and edit its mappings.\n </div>\n }\n </div>\n </div>\n }\n\n @if (activeTab() === 'orphans') {\n <div class=\"coverage-toolbar\">\n <label class=\"toolbar-label\">Source type:</label>\n <select class=\"root-select\"\n [value]=\"orphanCkType() ?? ''\"\n (change)=\"onOrphanCkTypeChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a source type \u2014</option>\n @for (ckType of config.sourceCandidateCkTypeIds; track ckType) {\n <option [value]=\"ckType\">{{ ckType }}</option>\n }\n </select>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n [disabled]=\"!orphanCkType() || orphanLoading()\"\n (click)=\"refreshOrphans()\" title=\"Reload\"></button>\n <span class=\"orphan-search-wrap\">\n <input type=\"text\" class=\"root-select orphan-search\"\n placeholder=\"Search name, room, description\u2026\"\n [value]=\"orphanSearchText()\"\n (input)=\"orphanSearchText.set($any($event.target).value)\" />\n @if (orphanSearchText()) {\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.x\"\n class=\"orphan-search-clear\"\n (click)=\"orphanSearchText.set('')\"\n title=\"Clear search\" aria-label=\"Clear search\"></button>\n }\n </span>\n <label class=\"orphan-toggle\">\n <input type=\"checkbox\" [checked]=\"orphanHideMapped()\" (change)=\"toggleOrphanHideMapped()\" />\n Hide already-mapped\n </label>\n <label class=\"toolbar-label\">Group by:</label>\n <select class=\"root-select\"\n [value]=\"orphanGroupParentType() ?? ''\"\n (change)=\"onOrphanGroupParentTypeChange($any($event.target).value)\">\n <option value=\"\">(no grouping)</option>\n @for (t of orphanAvailableParentTypes(); track t) {\n <option [value]=\"t\">{{ t }}</option>\n }\n </select>\n @if (orphanGroupParentType()) {\n <kendo-multiselect class=\"orphan-group-filter\"\n [data]=\"orphanAvailableGroupNames()\"\n [value]=\"orphanSelectedGroupNames()\"\n (valueChange)=\"onOrphanGroupNamesChange($event)\"\n [autoClose]=\"false\"\n [clearButton]=\"true\"\n size=\"small\"\n placeholder=\"Filter groups\u2026\"\n title=\"Show only the selected groups (e.g. specific categories)\">\n </kendo-multiselect>\n }\n\n <div class=\"toolbar-spacer\"></div>\n\n <button kendoButton size=\"small\" fillMode=\"flat\"\n [disabled]=\"orphanVisibleList().length === 0\"\n (click)=\"selectAllVisibleOrphans()\"\n title=\"Select every row visible under the current filter\">Select all</button>\n <button kendoButton size=\"small\" fillMode=\"flat\"\n [disabled]=\"orphanSelectedCount() === 0\"\n (click)=\"clearOrphanSelection()\">Clear</button>\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"orphanSelectedCount() === 0\"\n (click)=\"bulkMapSelected()\"\n title=\"Create one mapping per selected source (shared target + paths)\">\n Map {{ orphanSelectedCount() }} selected\u2026\n </button>\n\n @if (orphanStats(); as s) {\n <span class=\"validation-summary\">\n @if (orphanSearchText().trim() || orphanSelectedGroupNames().length > 0) {\n <span class=\"badge badge-info\" title=\"rows matching search + group filter\">{{ orphanVisibleList().length }} shown</span>\n }\n <span class=\"badge badge-error\" title=\"unmapped \u2014 no DataPointMapping yet\">{{ s.unmapped }} unmapped</span>\n <span class=\"badge badge-ok\" title=\"already covered by at least one mapping\">{{ s.mapped }} mapped</span>\n <span class=\"badge\">{{ s.total }} total</span>\n </span>\n }\n </div>\n\n <div class=\"orphan-body\">\n @if (orphanLoading()) {\n <div class=\"empty-hint\">Loading source candidates\u2026</div>\n } @else if (orphanError(); as err) {\n <div class=\"error-hint\">{{ err }}</div>\n } @else if (orphanVisibleList().length === 0) {\n <div class=\"empty-hint\">\n @if (orphanSelectedGroupNames().length > 0) {\n No entries in the selected group(s) match the current filters.\n } @else if (orphanSearchText().trim()) {\n No entries match \"{{ orphanSearchText() }}\".\n } @else if (orphanHideMapped()) {\n All {{ orphanCkType() }} entities are mapped at least once. \uD83C\uDF89\n } @else {\n No entities of type {{ orphanCkType() }} found.\n }\n </div>\n } @else if (orphanGroupParentType()) {\n @for (group of orphanGroupedList(); track group.key) {\n <div class=\"orphan-group\">\n <div class=\"orphan-group-header\">\n <span class=\"orphan-group-label\">{{ group.label }}</span>\n <span class=\"orphan-group-count\">{{ group.items.length }}</span>\n </div>\n <ul class=\"orphan-list\">\n @for (item of group.items; track trackOrphanByRtId($index, item)) {\n <ng-container *ngTemplateOutlet=\"orphanRowTpl; context: { $implicit: item }\"></ng-container>\n }\n </ul>\n </div>\n }\n } @else {\n <ul class=\"orphan-list\">\n @for (item of orphanVisibleList(); track trackOrphanByRtId($index, item)) {\n <ng-container *ngTemplateOutlet=\"orphanRowTpl; context: { $implicit: item }\"></ng-container>\n }\n </ul>\n }\n\n <ng-template #orphanRowTpl let-item>\n <li class=\"orphan-row\" [class.orphan-mapped]=\"item.mappingCount > 0\">\n <div class=\"orphan-line\">\n <input type=\"checkbox\" class=\"orphan-check\"\n [checked]=\"isOrphanSelected(item.rtId)\"\n (change)=\"toggleOrphanSelected(item.rtId)\"\n [attr.aria-label]=\"'Select ' + item.name\" />\n <span class=\"orphan-name\">{{ item.name }}</span>\n @if (item.mappingCount > 0) {\n <span class=\"orphan-badge orphan-badge-mapped\">\n {{ item.mappingCount }} mapping{{ item.mappingCount === 1 ? '' : 's' }}\n </span>\n } @else {\n <span class=\"orphan-badge orphan-badge-unmapped\">unmapped</span>\n }\n </div>\n @if (item.parentPath.length > 0) {\n <div class=\"orphan-breadcrumb\" [attr.title]=\"'Parent chain (root-first)'\">\n @for (parent of breadcrumbFor(item); track parent.rtId; let last = $last) {\n <span class=\"crumb\">{{ parent.name }}</span>\n @if (!last) { <span class=\"crumb-sep\">\u203A</span> }\n }\n </div>\n }\n <div class=\"orphan-meta\">\n <span class=\"kv-val\">{{ item.ckTypeId }}@{{ item.rtId }}</span>\n </div>\n @if (item.description) {\n <div class=\"orphan-description\">{{ item.description }}</div>\n }\n <div class=\"orphan-actions\">\n <button kendoButton themeColor=\"primary\" fillMode=\"flat\" size=\"small\"\n [svgIcon]=\"icons.plus\"\n (click)=\"createMappingFromOrphan(item)\"\n title=\"Create mapping pre-linked to this source\">\n Map\u2026\n </button>\n </div>\n </li>\n </ng-template>\n </div>\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.coverage-root{display:flex;flex-direction:column;flex:1;min-height:0;gap:12px}.coverage-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface-alt, #f8f9fa)) 70%,transparent)}.coverage-toolbar .toolbar-label{flex:0 0 96px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.coverage-toolbar .root-select{flex:0 0 280px;min-width:0;padding:4px 8px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:4px;background:var(--theme-bg-elevated, var(--kendo-color-surface, #fff));color:var(--theme-text-primary, inherit);font-size:.9rem;height:30px}.coverage-toolbar .orphan-search-wrap{display:inline-flex;align-items:center;gap:2px}.coverage-toolbar .orphan-search-wrap .orphan-search{flex:1 1 220px;min-width:140px}.coverage-toolbar .orphan-group-filter{flex:0 1 320px;min-width:160px}.coverage-toolbar .toolbar-spacer{flex:1}.coverage-toolbar .toolbar-meta{display:flex;flex-direction:column;align-items:flex-end;line-height:1.1}.coverage-toolbar .toolbar-meta .meta-name{font-size:.85rem;font-weight:600}.coverage-toolbar .toolbar-meta .meta-type{font-size:.7rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d)}.coverage-body{flex:1;display:flex;gap:12px;min-height:0}@media(max-width:900px){.coverage-body{flex-direction:column}.coverage-tree-pane{flex:0 0 38vh;min-width:0;min-height:180px}.coverage-detail-pane{min-height:180px}.coverage-toolbar .toolbar-label{flex:0 0 auto}.coverage-toolbar .root-select{flex:1 1 200px;max-width:100%}}.coverage-tree-pane{flex:0 0 40%;min-width:240px;display:flex;flex-direction:column;min-height:0;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);color:var(--theme-text-primary, inherit);overflow:auto}.coverage-detail-pane{flex:1;min-width:0;display:flex;flex-direction:column;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);color:var(--theme-text-primary, inherit);padding:12px 14px;gap:12px;overflow:auto}.detail-header{display:flex;align-items:flex-start;gap:8px}.detail-header .detail-titles{flex:1;min-width:0}.detail-header .detail-name{margin:0;font-size:1.05rem;font-weight:600;word-break:break-word}.detail-header .detail-subtitle{font-size:.72rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d);word-break:break-all}.detail-section-title{display:flex;align-items:center;gap:10px;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #6c757d)}.detail-section-title .toolbar-spacer{flex:1}.detail-section-title .detail-summary{text-transform:none;letter-spacing:0;font-weight:500;color:var(--kendo-color-on-app-surface, inherit);font-size:.78rem}.mapping-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.mapping-row{border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;padding:8px 10px;display:flex;flex-direction:column;gap:6px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.mapping-row.mapping-disabled{opacity:.55}.mapping-line{display:flex;align-items:center;gap:8px}.mapping-line .mapping-name{font-weight:600;font-size:.9rem}.mapping-badge{font-size:.65rem;text-transform:uppercase;letter-spacing:.5px;padding:1px 6px;border-radius:8px;border:1px solid var(--kendo-color-border, #dee2e6)}.mapping-badge.mapping-badge-off{color:var(--kendo-color-subtle, #6c757d)}.mapping-details{display:flex;flex-wrap:wrap;gap:10px;font-size:.8rem}.mapping-details .kv{display:inline-flex;align-items:baseline;gap:4px}.mapping-details .kv-key{font-weight:600;color:var(--kendo-color-subtle, #6c757d)}.mapping-details code.kv-val{font-family:monospace;background:var(--kendo-color-surface, transparent);padding:1px 4px;border-radius:3px}.mapping-actions{display:flex;gap:6px;justify-content:flex-end}.empty-hint,.error-hint{padding:12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d);text-align:center}.error-hint{color:var(--kendo-color-error, #dc3545)}.coverage-tabs{display:flex;gap:0;border-bottom:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6))}.coverage-tab{padding:8px 16px;border:none;background:transparent;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:6px}.coverage-tab:hover{color:var(--theme-text-primary, inherit)}.coverage-tab.active{color:var(--theme-text-accent, var(--kendo-color-primary, #ff6358));border-bottom-color:var(--theme-text-accent, var(--kendo-color-primary, #ff6358))}.coverage-tab .tab-badge{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 22%,transparent);color:var(--kendo-color-error, #dc3545);border-radius:10px;padding:1px 8px;font-size:.7rem;font-weight:700}.orphan-toggle{display:inline-flex;align-items:center;gap:6px;font-size:.8rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));cursor:pointer}.orphan-body{flex:1;min-height:0;overflow:auto;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);padding:8px}.orphan-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.orphan-row{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-left-width:3px;border-left-color:var(--kendo-color-error, #dc3545);border-radius:6px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.orphan-row.orphan-mapped{border-left-color:var(--kendo-color-success, #28a745);opacity:.7}.orphan-row .orphan-line{display:flex;align-items:center;gap:8px}.orphan-row .orphan-line .orphan-check{flex-shrink:0;margin:0;cursor:pointer;accent-color:var(--kendo-color-primary, #ff6358)}.orphan-row .orphan-line .orphan-name{flex:1;font-weight:600;font-size:.9rem}.orphan-row .orphan-badge{font-size:.7rem;padding:1px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}.orphan-row .orphan-badge-unmapped{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 22%,transparent);color:var(--kendo-color-error, #dc3545);border:1px solid var(--kendo-color-error, #dc3545)}.orphan-row .orphan-badge-mapped{background:color-mix(in srgb,var(--kendo-color-success, #28a745) 18%,transparent);color:var(--kendo-color-success, #28a745);border:1px solid var(--kendo-color-success, #28a745)}.orphan-row .orphan-meta{font-family:monospace;font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));word-break:break-all}.orphan-row .orphan-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:.75rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.orphan-row .orphan-breadcrumb .crumb{line-height:1.3}.orphan-row .orphan-breadcrumb .crumb-sep{opacity:.55;font-weight:600}.orphan-row .orphan-description{font-size:.78rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-style:italic}.orphan-row .orphan-actions{display:flex;gap:6px;justify-content:flex-end}.orphan-group{display:flex;flex-direction:column;gap:6px}.orphan-group+.orphan-group{margin-top:14px}.orphan-group .orphan-group-header{display:flex;align-items:baseline;gap:8px;padding:4px 8px;border-bottom:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));font-size:.85rem;font-weight:600;color:var(--theme-text-primary, inherit)}.orphan-group .orphan-group-header .orphan-group-label{flex:1}.orphan-group .orphan-group-header .orphan-group-count{font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f1f3f5)) 80%,transparent);border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:10px;padding:0 8px}.validation-summary{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.badge{font-size:.7rem;padding:2px 8px;border-radius:10px;background:var(--kendo-color-surface, #f1f3f5);border:1px solid var(--kendo-color-border, #dee2e6)}.badge-error{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 18%,transparent);border-color:var(--kendo-color-error, #dc3545);color:var(--kendo-color-error, #dc3545);font-weight:600}.badge-warning{background:color-mix(in srgb,var(--kendo-color-warning, #ffc107) 22%,transparent);border-color:var(--kendo-color-warning, #ffc107);color:var(--kendo-color-warning-on, #6b5500);font-weight:600}.badge-ok{background:color-mix(in srgb,var(--kendo-color-success, #28a745) 18%,transparent);border-color:var(--kendo-color-success, #28a745);color:var(--kendo-color-success, #28a745);font-weight:600}.badge-info{background:color-mix(in srgb,var(--kendo-color-info, #0dcaf0) 18%,transparent);border-color:var(--kendo-color-info, #0dcaf0);color:var(--kendo-color-info, #0dcaf0)}.validation-error-text{color:var(--kendo-color-error, #dc3545);font-size:.8rem}.validation-timestamp{font-size:.7rem;color:var(--kendo-color-subtle, #6c757d);margin-left:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: LayoutModule }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i3$1.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: "ngmodule", type: SVGIconModule }, { kind: "component", type: TreeComponent, selector: "mm-tree-view", inputs: ["dataSource"], outputs: ["nodeSelected", "nodeClick", "nodeDoubleClick", "nodeDrop", "expand", "collapse"] }, { kind: "component", type: PerspectiveSwitcherComponent, selector: "mm-perspective-switcher", inputs: ["perspectives", "activeKey", "label"], outputs: ["perspectiveChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20759
20783
|
}
|
|
20760
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
20784
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MappingCoverageTreeComponent, decorators: [{
|
|
20761
20785
|
type: Component,
|
|
20762
20786
|
args: [{ selector: 'mm-mapping-coverage-tree', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
20763
20787
|
CommonModule,
|
|
@@ -20769,7 +20793,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
20769
20793
|
TreeComponent,
|
|
20770
20794
|
PerspectiveSwitcherComponent,
|
|
20771
20795
|
], providers: [MappingCoverageTreeDataSource], template: "<div class=\"coverage-root\">\n @if (config.sourceCandidateCkTypeIds.length > 0) {\n <div class=\"coverage-tabs\" role=\"tablist\">\n <button class=\"coverage-tab\"\n [class.active]=\"activeTab() === 'coverage'\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === 'coverage'\"\n (click)=\"selectTab('coverage')\">Coverage Tree</button>\n <button class=\"coverage-tab\"\n [class.active]=\"activeTab() === 'orphans'\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === 'orphans'\"\n (click)=\"selectTab('orphans')\">\n Orphan Sources\n @if (orphanStats(); as s) {\n @if (s.unmapped > 0) { <span class=\"tab-badge\">{{ s.unmapped }}</span> }\n }\n </button>\n </div>\n }\n\n @if (activeTab() === 'coverage') {\n <div class=\"coverage-toolbar\">\n <mm-perspective-switcher\n [perspectives]=\"perspectives()\"\n [activeKey]=\"activePerspectiveKey()\"\n (perspectiveChange)=\"onPerspectiveChange($event)\"></mm-perspective-switcher>\n <label class=\"toolbar-label\">Tree:</label>\n <select class=\"root-select\"\n [value]=\"selectedRoot()?.rtId ?? ''\"\n (change)=\"onRootSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a {{ activeRootCkTypeId() }} \u2014</option>\n @for (root of rootCandidates(); track root.rtId) {\n <option [value]=\"root.rtId\" [title]=\"root.description\">{{ root.name }}</option>\n }\n </select>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n (click)=\"refreshRoots()\" title=\"Refresh tree list\"></button>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.folderOpen\"\n (click)=\"pickRoot()\" title=\"Browse for entity\">Browse...</button>\n\n @if (selectedRoot(); as root) {\n <div class=\"toolbar-spacer\"></div>\n <span class=\"toolbar-meta\">\n <span class=\"meta-name\">{{ root.name }}</span>\n <span class=\"meta-type\">{{ root.ckTypeId }}</span>\n </span>\n }\n </div>\n\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Validation:</label>\n <select class=\"root-select\"\n [value]=\"selectedPipeline()?.rtId ?? ''\"\n (change)=\"onPipelineSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a {{ config.validationPipelineCkTypeId }} \u2014</option>\n @for (p of validationPipelines(); track p.rtId) {\n <option [value]=\"p.rtId\">{{ p.name }}</option>\n }\n </select>\n @if (tenantId) {\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"!selectedPipeline() || validationRunning() || validationLoading()\"\n (click)=\"runValidation()\"\n [title]=\"validationRunning() ? 'Validation running\u2026' : 'Run pipeline + load report'\">\n @if (validationRunning()) { Running\u2026 } @else { Run }\n </button>\n }\n <button kendoButton fillMode=\"solid\" size=\"small\" [svgIcon]=\"icons.refresh\"\n [disabled]=\"!selectedPipeline() || validationLoading() || validationRunning()\"\n (click)=\"refreshValidation()\">Load Report</button>\n @if (validationSummary()) {\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"clearValidation()\">Clear</button>\n }\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (validationLoading()) {\n <span class=\"toolbar-meta\">Loading\u2026</span>\n } @else if (validationError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (validationSummary(); as s) {\n <span class=\"validation-summary\">\n <span class=\"badge badge-error\" title=\"error\">{{ s.error }} err</span>\n <span class=\"badge badge-warning\" title=\"warning\">{{ s.warning }} warn</span>\n <span class=\"badge badge-ok\" title=\"ok\">{{ s.ok }} ok</span>\n <span class=\"badge badge-info\" title=\"info / unscoped\">{{ s.info }} info</span>\n <span class=\"badge\">{{ s.total }} total</span>\n @if (validationExecutedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n }\n </div>\n\n @if (tenantId) {\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Generation:</label>\n <select class=\"root-select\"\n [value]=\"selectedGenerationPipeline()?.rtId ?? ''\"\n (change)=\"onGenerationSelectChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick an auto-mapping pipeline \u2014</option>\n @for (p of validationPipelines(); track p.rtId) {\n <option [value]=\"p.rtId\">{{ p.name }}</option>\n }\n </select>\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"!selectedGenerationPipeline() || generationRunning()\"\n (click)=\"runGeneration()\"\n [title]=\"generationRunning() ? 'Generation running\u2026' : 'Run the auto-mapping pipeline and reload counts'\">\n @if (generationRunning()) { Running\u2026 } @else { Generate }\n </button>\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (generationRunning()) {\n <span class=\"toolbar-meta\">Generating mappings\u2026</span>\n } @else if (generationError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (generationStats(); as s) {\n <span class=\"validation-summary\">\n @if (s.totalSuggestions !== undefined) {\n <span class=\"badge badge-ok\" title=\"mapping suggestions produced\">{{ s.totalSuggestions }} mappings</span>\n }\n @if (s.matchedContainers !== undefined && s.totalContainers !== undefined) {\n <span class=\"badge\" title=\"containers (e.g. rooms) matched to a target\">\n {{ s.matchedContainers }}/{{ s.totalContainers }} matched\n </span>\n }\n @if (s.unmatchedContainers) {\n <span class=\"badge badge-warning\"\n [attr.title]=\"'Unmatched: ' + (s.unmatchedContainerNames ?? []).join(', ')\">\n {{ s.unmatchedContainers }} unmatched\n </span>\n }\n @if (generationCompletedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n } @else if (generationCompletedAt(); as ts) {\n <span class=\"toolbar-meta\">Completed {{ ts }} (no statistics in OutputData)</span>\n }\n </div>\n }\n\n @if (tenantId && (exportBackupPipeline() || importBackupPipeline())) {\n <div class=\"coverage-toolbar coverage-toolbar-validation\">\n <label class=\"toolbar-label\">Backup:</label>\n <button kendoButton size=\"small\" [svgIcon]=\"icons.download\"\n [disabled]=\"!exportBackupPipeline() || backupRunning() !== null\"\n (click)=\"exportMappings()\"\n title=\"Run the export pipeline and download the mapping document as JSON\">\n @if (backupRunning() === 'export') { Exporting\u2026 } @else { Export }\n </button>\n <button kendoButton size=\"small\" [svgIcon]=\"icons.upload\"\n [disabled]=\"!importBackupPipeline() || backupRunning() !== null\"\n (click)=\"importFileInput.click()\"\n title=\"Import a previously exported mapping document (JSON)\">\n @if (backupRunning() === 'import') { Importing\u2026 } @else { Import\u2026 }\n </button>\n <input #importFileInput type=\"file\" accept=\".json,application/json\" hidden\n (change)=\"onImportFileSelected($event)\" />\n\n <div class=\"toolbar-spacer\"></div>\n\n @if (backupRunning() === 'export') {\n <span class=\"toolbar-meta\">Exporting mappings\u2026</span>\n } @else if (backupRunning() === 'import') {\n <span class=\"toolbar-meta\">Importing mappings\u2026</span>\n } @else if (backupError(); as err) {\n <span class=\"toolbar-meta validation-error-text\">{{ err }}</span>\n } @else if (importStats(); as s) {\n <span class=\"validation-summary\">\n @if (s.resolved !== undefined) {\n <span class=\"badge badge-ok\" title=\"mappings resolved and imported\">{{ s.resolved }} imported</span>\n }\n @if (s.unresolved) {\n <span class=\"badge badge-warning\"\n [attr.title]=\"'Unresolved: ' + unresolvedImportNames()\">\n {{ s.unresolved }} unresolved\n </span>\n }\n @if (s.total !== undefined) {\n <span class=\"badge\">{{ s.total }} total</span>\n }\n @if (importCompletedAt(); as ts) {\n <span class=\"validation-timestamp\">{{ ts }}</span>\n }\n </span>\n } @else if (importCompletedAt(); as ts) {\n <span class=\"toolbar-meta\">Import completed {{ ts }} (no statistics in OutputData)</span>\n }\n </div>\n }\n\n <div class=\"coverage-body\">\n <div class=\"coverage-tree-pane\">\n @if (selectedRoot()) {\n <mm-tree-view\n [dataSource]=\"dataSource\"\n (nodeSelected)=\"onNodeSelected($event)\">\n </mm-tree-view>\n } @else {\n <div class=\"empty-hint\">\n Select a tree to start. Counts in brackets show how many mappings\n point to that node.\n </div>\n }\n </div>\n\n <div class=\"coverage-detail-pane\">\n @if (selectedNode(); as node) {\n <div class=\"detail-header\">\n <div class=\"detail-titles\">\n <h3 class=\"detail-name\">{{ node.name }}</h3>\n <div class=\"detail-subtitle\">{{ node.ckTypeId }}@{{ node.rtId }}</div>\n </div>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n (click)=\"refreshSelected()\" title=\"Refresh\"></button>\n </div>\n\n <div class=\"detail-section-title\">\n <span>Mappings</span>\n @if (summaryLine(); as s) {\n <span class=\"detail-summary\">{{ s }}</span>\n }\n <span class=\"toolbar-spacer\"></span>\n <button kendoButton themeColor=\"primary\" size=\"small\" [svgIcon]=\"icons.plus\"\n (click)=\"addMapping()\">Add</button>\n </div>\n\n @if (mappingsLoading()) {\n <div class=\"empty-hint\">Loading mappings\u2026</div>\n } @else if (mappingsError(); as err) {\n <div class=\"error-hint\">{{ err }}</div>\n } @else if (mappings().length === 0) {\n <div class=\"empty-hint\">\n No mappings reference this node yet. Add one using the button above.\n </div>\n } @else {\n <ul class=\"mapping-list\">\n @for (mapping of mappings(); track trackByRtId($index, mapping)) {\n <li class=\"mapping-row\" [class.mapping-disabled]=\"!mapping.enabled\">\n <div class=\"mapping-line\">\n <span class=\"mapping-name\">\n {{ mapping.name || 'Mapping ' + ($index + 1) }}\n </span>\n @if (!mapping.enabled) {\n <span class=\"mapping-badge mapping-badge-off\">disabled</span>\n }\n </div>\n <div class=\"mapping-details\">\n <span class=\"kv\">\n <span class=\"kv-key\">Source:</span>\n <span class=\"kv-val\">\n {{ mapping.sourceName || mapping.sourceRtId || '\u2014 not linked \u2014' }}\n </span>\n </span>\n @if (mapping.sourceAttributePath) {\n <span class=\"kv\">\n <span class=\"kv-key\">Attr:</span>\n <span class=\"kv-val\">{{ mapping.sourceAttributePath }}</span>\n </span>\n }\n @if (mapping.mappingExpression) {\n <span class=\"kv\">\n <span class=\"kv-key\">Expr:</span>\n <code class=\"kv-val\">{{ mapping.mappingExpression }}</code>\n </span>\n }\n @if (mapping.targetAttributePath) {\n <span class=\"kv\">\n <span class=\"kv-key\">\u2192</span>\n <span class=\"kv-val\">{{ mapping.targetAttributePath }}</span>\n </span>\n }\n </div>\n <div class=\"mapping-actions\">\n <button kendoButton themeColor=\"primary\" fillMode=\"flat\" size=\"small\"\n [svgIcon]=\"icons.pencil\"\n (click)=\"editMapping(mapping)\"\n title=\"Edit mapping\">Edit\u2026</button>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.trash\"\n (click)=\"deleteMapping(mapping)\"\n title=\"Delete mapping\"></button>\n </div>\n </li>\n }\n </ul>\n }\n } @else {\n <div class=\"empty-hint\">\n Select a node from the tree to view and edit its mappings.\n </div>\n }\n </div>\n </div>\n }\n\n @if (activeTab() === 'orphans') {\n <div class=\"coverage-toolbar\">\n <label class=\"toolbar-label\">Source type:</label>\n <select class=\"root-select\"\n [value]=\"orphanCkType() ?? ''\"\n (change)=\"onOrphanCkTypeChange($any($event.target).value)\">\n <option value=\"\" disabled>\u2014 Pick a source type \u2014</option>\n @for (ckType of config.sourceCandidateCkTypeIds; track ckType) {\n <option [value]=\"ckType\">{{ ckType }}</option>\n }\n </select>\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.refresh\"\n [disabled]=\"!orphanCkType() || orphanLoading()\"\n (click)=\"refreshOrphans()\" title=\"Reload\"></button>\n <span class=\"orphan-search-wrap\">\n <input type=\"text\" class=\"root-select orphan-search\"\n placeholder=\"Search name, room, description\u2026\"\n [value]=\"orphanSearchText()\"\n (input)=\"orphanSearchText.set($any($event.target).value)\" />\n @if (orphanSearchText()) {\n <button kendoButton fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.x\"\n class=\"orphan-search-clear\"\n (click)=\"orphanSearchText.set('')\"\n title=\"Clear search\" aria-label=\"Clear search\"></button>\n }\n </span>\n <label class=\"orphan-toggle\">\n <input type=\"checkbox\" [checked]=\"orphanHideMapped()\" (change)=\"toggleOrphanHideMapped()\" />\n Hide already-mapped\n </label>\n <label class=\"toolbar-label\">Group by:</label>\n <select class=\"root-select\"\n [value]=\"orphanGroupParentType() ?? ''\"\n (change)=\"onOrphanGroupParentTypeChange($any($event.target).value)\">\n <option value=\"\">(no grouping)</option>\n @for (t of orphanAvailableParentTypes(); track t) {\n <option [value]=\"t\">{{ t }}</option>\n }\n </select>\n @if (orphanGroupParentType()) {\n <kendo-multiselect class=\"orphan-group-filter\"\n [data]=\"orphanAvailableGroupNames()\"\n [value]=\"orphanSelectedGroupNames()\"\n (valueChange)=\"onOrphanGroupNamesChange($event)\"\n [autoClose]=\"false\"\n [clearButton]=\"true\"\n size=\"small\"\n placeholder=\"Filter groups\u2026\"\n title=\"Show only the selected groups (e.g. specific categories)\">\n </kendo-multiselect>\n }\n\n <div class=\"toolbar-spacer\"></div>\n\n <button kendoButton size=\"small\" fillMode=\"flat\"\n [disabled]=\"orphanVisibleList().length === 0\"\n (click)=\"selectAllVisibleOrphans()\"\n title=\"Select every row visible under the current filter\">Select all</button>\n <button kendoButton size=\"small\" fillMode=\"flat\"\n [disabled]=\"orphanSelectedCount() === 0\"\n (click)=\"clearOrphanSelection()\">Clear</button>\n <button kendoButton themeColor=\"primary\" size=\"small\"\n [disabled]=\"orphanSelectedCount() === 0\"\n (click)=\"bulkMapSelected()\"\n title=\"Create one mapping per selected source (shared target + paths)\">\n Map {{ orphanSelectedCount() }} selected\u2026\n </button>\n\n @if (orphanStats(); as s) {\n <span class=\"validation-summary\">\n @if (orphanSearchText().trim() || orphanSelectedGroupNames().length > 0) {\n <span class=\"badge badge-info\" title=\"rows matching search + group filter\">{{ orphanVisibleList().length }} shown</span>\n }\n <span class=\"badge badge-error\" title=\"unmapped \u2014 no DataPointMapping yet\">{{ s.unmapped }} unmapped</span>\n <span class=\"badge badge-ok\" title=\"already covered by at least one mapping\">{{ s.mapped }} mapped</span>\n <span class=\"badge\">{{ s.total }} total</span>\n </span>\n }\n </div>\n\n <div class=\"orphan-body\">\n @if (orphanLoading()) {\n <div class=\"empty-hint\">Loading source candidates\u2026</div>\n } @else if (orphanError(); as err) {\n <div class=\"error-hint\">{{ err }}</div>\n } @else if (orphanVisibleList().length === 0) {\n <div class=\"empty-hint\">\n @if (orphanSelectedGroupNames().length > 0) {\n No entries in the selected group(s) match the current filters.\n } @else if (orphanSearchText().trim()) {\n No entries match \"{{ orphanSearchText() }}\".\n } @else if (orphanHideMapped()) {\n All {{ orphanCkType() }} entities are mapped at least once. \uD83C\uDF89\n } @else {\n No entities of type {{ orphanCkType() }} found.\n }\n </div>\n } @else if (orphanGroupParentType()) {\n @for (group of orphanGroupedList(); track group.key) {\n <div class=\"orphan-group\">\n <div class=\"orphan-group-header\">\n <span class=\"orphan-group-label\">{{ group.label }}</span>\n <span class=\"orphan-group-count\">{{ group.items.length }}</span>\n </div>\n <ul class=\"orphan-list\">\n @for (item of group.items; track trackOrphanByRtId($index, item)) {\n <ng-container *ngTemplateOutlet=\"orphanRowTpl; context: { $implicit: item }\"></ng-container>\n }\n </ul>\n </div>\n }\n } @else {\n <ul class=\"orphan-list\">\n @for (item of orphanVisibleList(); track trackOrphanByRtId($index, item)) {\n <ng-container *ngTemplateOutlet=\"orphanRowTpl; context: { $implicit: item }\"></ng-container>\n }\n </ul>\n }\n\n <ng-template #orphanRowTpl let-item>\n <li class=\"orphan-row\" [class.orphan-mapped]=\"item.mappingCount > 0\">\n <div class=\"orphan-line\">\n <input type=\"checkbox\" class=\"orphan-check\"\n [checked]=\"isOrphanSelected(item.rtId)\"\n (change)=\"toggleOrphanSelected(item.rtId)\"\n [attr.aria-label]=\"'Select ' + item.name\" />\n <span class=\"orphan-name\">{{ item.name }}</span>\n @if (item.mappingCount > 0) {\n <span class=\"orphan-badge orphan-badge-mapped\">\n {{ item.mappingCount }} mapping{{ item.mappingCount === 1 ? '' : 's' }}\n </span>\n } @else {\n <span class=\"orphan-badge orphan-badge-unmapped\">unmapped</span>\n }\n </div>\n @if (item.parentPath.length > 0) {\n <div class=\"orphan-breadcrumb\" [attr.title]=\"'Parent chain (root-first)'\">\n @for (parent of breadcrumbFor(item); track parent.rtId; let last = $last) {\n <span class=\"crumb\">{{ parent.name }}</span>\n @if (!last) { <span class=\"crumb-sep\">\u203A</span> }\n }\n </div>\n }\n <div class=\"orphan-meta\">\n <span class=\"kv-val\">{{ item.ckTypeId }}@{{ item.rtId }}</span>\n </div>\n @if (item.description) {\n <div class=\"orphan-description\">{{ item.description }}</div>\n }\n <div class=\"orphan-actions\">\n <button kendoButton themeColor=\"primary\" fillMode=\"flat\" size=\"small\"\n [svgIcon]=\"icons.plus\"\n (click)=\"createMappingFromOrphan(item)\"\n title=\"Create mapping pre-linked to this source\">\n Map\u2026\n </button>\n </div>\n </li>\n </ng-template>\n </div>\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.coverage-root{display:flex;flex-direction:column;flex:1;min-height:0;gap:12px}.coverage-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface-alt, #f8f9fa)) 70%,transparent)}.coverage-toolbar .toolbar-label{flex:0 0 96px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.coverage-toolbar .root-select{flex:0 0 280px;min-width:0;padding:4px 8px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:4px;background:var(--theme-bg-elevated, var(--kendo-color-surface, #fff));color:var(--theme-text-primary, inherit);font-size:.9rem;height:30px}.coverage-toolbar .orphan-search-wrap{display:inline-flex;align-items:center;gap:2px}.coverage-toolbar .orphan-search-wrap .orphan-search{flex:1 1 220px;min-width:140px}.coverage-toolbar .orphan-group-filter{flex:0 1 320px;min-width:160px}.coverage-toolbar .toolbar-spacer{flex:1}.coverage-toolbar .toolbar-meta{display:flex;flex-direction:column;align-items:flex-end;line-height:1.1}.coverage-toolbar .toolbar-meta .meta-name{font-size:.85rem;font-weight:600}.coverage-toolbar .toolbar-meta .meta-type{font-size:.7rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d)}.coverage-body{flex:1;display:flex;gap:12px;min-height:0}@media(max-width:900px){.coverage-body{flex-direction:column}.coverage-tree-pane{flex:0 0 38vh;min-width:0;min-height:180px}.coverage-detail-pane{min-height:180px}.coverage-toolbar .toolbar-label{flex:0 0 auto}.coverage-toolbar .root-select{flex:1 1 200px;max-width:100%}}.coverage-tree-pane{flex:0 0 40%;min-width:240px;display:flex;flex-direction:column;min-height:0;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);color:var(--theme-text-primary, inherit);overflow:auto}.coverage-detail-pane{flex:1;min-width:0;display:flex;flex-direction:column;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);color:var(--theme-text-primary, inherit);padding:12px 14px;gap:12px;overflow:auto}.detail-header{display:flex;align-items:flex-start;gap:8px}.detail-header .detail-titles{flex:1;min-width:0}.detail-header .detail-name{margin:0;font-size:1.05rem;font-weight:600;word-break:break-word}.detail-header .detail-subtitle{font-size:.72rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d);word-break:break-all}.detail-section-title{display:flex;align-items:center;gap:10px;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--kendo-color-subtle, #6c757d)}.detail-section-title .toolbar-spacer{flex:1}.detail-section-title .detail-summary{text-transform:none;letter-spacing:0;font-weight:500;color:var(--kendo-color-on-app-surface, inherit);font-size:.78rem}.mapping-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.mapping-row{border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;padding:8px 10px;display:flex;flex-direction:column;gap:6px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.mapping-row.mapping-disabled{opacity:.55}.mapping-line{display:flex;align-items:center;gap:8px}.mapping-line .mapping-name{font-weight:600;font-size:.9rem}.mapping-badge{font-size:.65rem;text-transform:uppercase;letter-spacing:.5px;padding:1px 6px;border-radius:8px;border:1px solid var(--kendo-color-border, #dee2e6)}.mapping-badge.mapping-badge-off{color:var(--kendo-color-subtle, #6c757d)}.mapping-details{display:flex;flex-wrap:wrap;gap:10px;font-size:.8rem}.mapping-details .kv{display:inline-flex;align-items:baseline;gap:4px}.mapping-details .kv-key{font-weight:600;color:var(--kendo-color-subtle, #6c757d)}.mapping-details code.kv-val{font-family:monospace;background:var(--kendo-color-surface, transparent);padding:1px 4px;border-radius:3px}.mapping-actions{display:flex;gap:6px;justify-content:flex-end}.empty-hint,.error-hint{padding:12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d);text-align:center}.error-hint{color:var(--kendo-color-error, #dc3545)}.coverage-tabs{display:flex;gap:0;border-bottom:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6))}.coverage-tab{padding:8px 16px;border:none;background:transparent;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:6px}.coverage-tab:hover{color:var(--theme-text-primary, inherit)}.coverage-tab.active{color:var(--theme-text-accent, var(--kendo-color-primary, #ff6358));border-bottom-color:var(--theme-text-accent, var(--kendo-color-primary, #ff6358))}.coverage-tab .tab-badge{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 22%,transparent);color:var(--kendo-color-error, #dc3545);border-radius:10px;padding:1px 8px;font-size:.7rem;font-weight:700}.orphan-toggle{display:inline-flex;align-items:center;gap:6px;font-size:.8rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));cursor:pointer}.orphan-body{flex:1;min-height:0;overflow:auto;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:6px;background:color-mix(in srgb,var(--theme-bg-surface, var(--kendo-color-surface, #fff)) 60%,transparent);padding:8px}.orphan-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.orphan-row{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-left-width:3px;border-left-color:var(--kendo-color-error, #dc3545);border-radius:6px;background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f8f9fa)) 65%,transparent)}.orphan-row.orphan-mapped{border-left-color:var(--kendo-color-success, #28a745);opacity:.7}.orphan-row .orphan-line{display:flex;align-items:center;gap:8px}.orphan-row .orphan-line .orphan-check{flex-shrink:0;margin:0;cursor:pointer;accent-color:var(--kendo-color-primary, #ff6358)}.orphan-row .orphan-line .orphan-name{flex:1;font-weight:600;font-size:.9rem}.orphan-row .orphan-badge{font-size:.7rem;padding:1px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}.orphan-row .orphan-badge-unmapped{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 22%,transparent);color:var(--kendo-color-error, #dc3545);border:1px solid var(--kendo-color-error, #dc3545)}.orphan-row .orphan-badge-mapped{background:color-mix(in srgb,var(--kendo-color-success, #28a745) 18%,transparent);color:var(--kendo-color-success, #28a745);border:1px solid var(--kendo-color-success, #28a745)}.orphan-row .orphan-meta{font-family:monospace;font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));word-break:break-all}.orphan-row .orphan-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:.75rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d))}.orphan-row .orphan-breadcrumb .crumb{line-height:1.3}.orphan-row .orphan-breadcrumb .crumb-sep{opacity:.55;font-weight:600}.orphan-row .orphan-description{font-size:.78rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));font-style:italic}.orphan-row .orphan-actions{display:flex;gap:6px;justify-content:flex-end}.orphan-group{display:flex;flex-direction:column;gap:6px}.orphan-group+.orphan-group{margin-top:14px}.orphan-group .orphan-group-header{display:flex;align-items:baseline;gap:8px;padding:4px 8px;border-bottom:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));font-size:.85rem;font-weight:600;color:var(--theme-text-primary, inherit)}.orphan-group .orphan-group-header .orphan-group-label{flex:1}.orphan-group .orphan-group-header .orphan-group-count{font-size:.7rem;color:var(--theme-text-secondary, var(--kendo-color-subtle, #6c757d));background:color-mix(in srgb,var(--theme-bg-elevated, var(--kendo-color-surface-alt, #f1f3f5)) 80%,transparent);border:1px solid var(--theme-border-subtle, var(--kendo-color-border, #dee2e6));border-radius:10px;padding:0 8px}.validation-summary{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.badge{font-size:.7rem;padding:2px 8px;border-radius:10px;background:var(--kendo-color-surface, #f1f3f5);border:1px solid var(--kendo-color-border, #dee2e6)}.badge-error{background:color-mix(in srgb,var(--kendo-color-error, #dc3545) 18%,transparent);border-color:var(--kendo-color-error, #dc3545);color:var(--kendo-color-error, #dc3545);font-weight:600}.badge-warning{background:color-mix(in srgb,var(--kendo-color-warning, #ffc107) 22%,transparent);border-color:var(--kendo-color-warning, #ffc107);color:var(--kendo-color-warning-on, #6b5500);font-weight:600}.badge-ok{background:color-mix(in srgb,var(--kendo-color-success, #28a745) 18%,transparent);border-color:var(--kendo-color-success, #28a745);color:var(--kendo-color-success, #28a745);font-weight:600}.badge-info{background:color-mix(in srgb,var(--kendo-color-info, #0dcaf0) 18%,transparent);border-color:var(--kendo-color-info, #0dcaf0);color:var(--kendo-color-info, #0dcaf0)}.validation-error-text{color:var(--kendo-color-error, #dc3545);font-size:.8rem}.validation-timestamp{font-size:.7rem;color:var(--kendo-color-subtle, #6c757d);margin-left:4px}\n"] }]
|
|
20772
|
-
}], propDecorators: { treeView: [{
|
|
20796
|
+
}], ctorParameters: () => [], propDecorators: { treeView: [{
|
|
20773
20797
|
type: ViewChild,
|
|
20774
20798
|
args: [TreeComponent, { static: false }]
|
|
20775
20799
|
}], config: [{
|
|
@@ -21040,8 +21064,8 @@ class TenantSwitcherComponent {
|
|
|
21040
21064
|
return ((this.anchor?.nativeElement.contains(target) ?? false) ||
|
|
21041
21065
|
(this.popup?.nativeElement.contains(target) ?? false));
|
|
21042
21066
|
}
|
|
21043
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
21044
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
21067
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TenantSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21068
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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: `
|
|
21045
21069
|
@if (currentTenantId) {
|
|
21046
21070
|
<div #badgeEl class="tenant-badge" [class.denied]="isDenied" (click)="onToggle()">
|
|
21047
21071
|
<span class="tenant-icon">{{ isDenied ? '\u26A0' : '\u25C6' }}</span>
|
|
@@ -21080,7 +21104,7 @@ class TenantSwitcherComponent {
|
|
|
21080
21104
|
}
|
|
21081
21105
|
`, 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", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
21082
21106
|
}
|
|
21083
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
21107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TenantSwitcherComponent, decorators: [{
|
|
21084
21108
|
type: Component,
|
|
21085
21109
|
args: [{ selector: 'mm-tenant-switcher', standalone: true, imports: [
|
|
21086
21110
|
PopupComponent,
|