@meshmakers/octo-ui 3.3.460 → 3.3.470

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Component, Injectable, EventEmitter, Output, Input, forwardRef, ViewChild, makeEnvironmentProviders } from '@angular/core';
3
- import { AttributeSelectorService, CkTypeAttributeService, CkTypeSelectorService, SearchFilterTypesDto, SortOrdersDto, FieldFilterOperatorsDto, AttributeValueTypeDto as AttributeValueTypeDto$1, provideOctoServices } from '@meshmakers/octo-services';
3
+ import { AttributeSelectorService, AttributeValueTypeDto as AttributeValueTypeDto$1, CkTypeAttributeService, CkTypeSelectorService, SearchFilterTypesDto, SortOrdersDto, FieldFilterOperatorsDto, provideOctoServices } from '@meshmakers/octo-services';
4
4
  import { DataSourceTyped, HierarchyDataSourceBase, NotificationDisplayService, provideMmSharedUi } from '@meshmakers/shared-ui';
5
5
  import { provideMmSharedAuth } from '@meshmakers/shared-auth';
6
6
  import * as i1 from '@angular/common';
@@ -15,11 +15,11 @@ import * as i5 from '@progress/kendo-angular-inputs';
15
15
  import { InputsModule } from '@progress/kendo-angular-inputs';
16
16
  import * as i3$1 from '@progress/kendo-angular-dropdowns';
17
17
  import { DropDownListModule, DropDownsModule, AutoCompleteModule } from '@progress/kendo-angular-dropdowns';
18
- import * as i5$2 from '@progress/kendo-angular-icons';
18
+ import * as i5$1 from '@progress/kendo-angular-icons';
19
19
  import { IconsModule, SVGIconModule } from '@progress/kendo-angular-icons';
20
20
  import { searchIcon, sortAscSmallIcon, sortDescSmallIcon, chevronRightIcon, chevronDownIcon, downloadIcon, fileIcon, folderIcon, calendarIcon, checkboxCheckedIcon, listUnorderedIcon, filterClearIcon, arrowRightIcon, arrowLeftIcon, chevronDoubleRightIcon, chevronDoubleLeftIcon, arrowUpIcon, arrowDownIcon, plusIcon, minusIcon, trashIcon, dollarIcon, copyIcon } from '@progress/kendo-svg-icons';
21
- import * as i5$1 from '@progress/kendo-angular-dialog';
22
- import { DialogContentBase, DialogRef, DialogModule, DialogService } from '@progress/kendo-angular-dialog';
21
+ import * as i7 from '@progress/kendo-angular-dialog';
22
+ import { WindowRef, WindowModule, WindowService, WindowCloseResult, DialogContentBase, DialogRef, DialogModule, DialogService } from '@progress/kendo-angular-dialog';
23
23
  import { Subject, firstValueFrom, of, forkJoin, Subscription } from 'rxjs';
24
24
  import { debounceTime, distinctUntilChanged, switchMap, map, tap, catchError } from 'rxjs/operators';
25
25
  import { LoaderModule } from '@progress/kendo-angular-indicators';
@@ -29,16 +29,16 @@ import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
29
29
  import { PopupModule } from '@progress/kendo-angular-popup';
30
30
  import { IntlModule } from '@progress/kendo-angular-intl';
31
31
 
32
- class AttributeSortSelectorDialogComponent extends DialogContentBase {
32
+ class AttributeSortSelectorDialogComponent {
33
+ windowRef = inject(WindowRef);
33
34
  attributeService = inject(AttributeSelectorService);
34
35
  searchSubject = new Subject();
35
- constructor() {
36
- super(inject(DialogRef));
37
- }
38
36
  // Dialog data
37
+ data;
39
38
  ckTypeId;
40
39
  searchText = '';
41
40
  currentSortOrder = 'standard';
41
+ selectedValueTypeFilter = null;
42
42
  // Grid data
43
43
  availableAttributes = [];
44
44
  selectedAttributes = [];
@@ -58,27 +58,31 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
58
58
  { text: 'Ascending', value: 'ascending' },
59
59
  { text: 'Descending', value: 'descending' }
60
60
  ];
61
+ valueTypeOptions = [
62
+ { text: 'All Types', value: null },
63
+ { text: 'String', value: AttributeValueTypeDto$1.StringDto },
64
+ { text: 'Integer', value: AttributeValueTypeDto$1.IntegerDto },
65
+ { text: 'Double', value: AttributeValueTypeDto$1.DoubleDto },
66
+ { text: 'Boolean', value: AttributeValueTypeDto$1.BooleanDto },
67
+ { text: 'DateTime', value: AttributeValueTypeDto$1.DateTimeDto },
68
+ { text: 'DateTimeOffset', value: AttributeValueTypeDto$1.DateTimeOffsetDto },
69
+ { text: 'Enum', value: AttributeValueTypeDto$1.EnumDto },
70
+ { text: 'TimeSpan', value: AttributeValueTypeDto$1.TimeSpanDto }
71
+ ];
61
72
  // Icons
62
73
  searchIcon = searchIcon;
63
74
  sortAscIcon = sortAscSmallIcon;
64
75
  sortDescIcon = sortDescSmallIcon;
65
76
  ngOnInit() {
66
77
  // Get dialog data
67
- const data = this.dialog.content?.instance?.data;
68
- console.log('ngOnInit - received data:', data);
69
- if (data) {
70
- this.ckTypeId = data.ckTypeId;
71
- this.dialogTitle = data.dialogTitle || 'Select Attributes with Sort Order';
72
- console.log('Set ckTypeId:', this.ckTypeId);
73
- if (data.selectedAttributes && data.selectedAttributes.length > 0) {
74
- this.selectedAttributes = [...data.selectedAttributes];
78
+ if (this.data) {
79
+ this.ckTypeId = this.data.ckTypeId;
80
+ this.dialogTitle = this.data.dialogTitle || 'Select Attributes with Sort Order';
81
+ if (this.data.selectedAttributes && this.data.selectedAttributes.length > 0) {
82
+ this.selectedAttributes = [...this.data.selectedAttributes];
75
83
  this.updateSelectedGrid();
76
- console.log('Pre-populated selectedAttributes:', this.selectedAttributes);
77
84
  }
78
85
  }
79
- else {
80
- console.warn('No dialog data received');
81
- }
82
86
  // Set up search debouncing
83
87
  this.searchSubject.pipe(debounceTime(300), distinctUntilChanged()).subscribe(searchText => {
84
88
  this.loadAvailableAttributes(searchText);
@@ -86,8 +90,8 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
86
90
  // Load initial data
87
91
  this.loadAvailableAttributes();
88
92
  }
89
- loadAvailableAttributes(filter) {
90
- this.attributeService.getAvailableAttributes(this.ckTypeId, filter).subscribe(result => {
93
+ loadAvailableAttributes(searchTerm) {
94
+ this.attributeService.getAvailableAttributes(this.ckTypeId, undefined, undefined, undefined, this.selectedValueTypeFilter || undefined, searchTerm || undefined).subscribe(result => {
91
95
  // Filter out already selected attributes
92
96
  const selectedPaths = new Set(this.selectedAttributes.map(a => a.attributePath));
93
97
  this.availableAttributes = result.items.filter(item => !selectedPaths.has(item.attributePath));
@@ -97,6 +101,9 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
97
101
  onSearchChange(value) {
98
102
  this.searchSubject.next(value);
99
103
  }
104
+ onValueTypeFilterChange(_value) {
105
+ this.loadAvailableAttributes(this.searchText || undefined);
106
+ }
100
107
  setSortOrder(order) {
101
108
  this.currentSortOrder = order;
102
109
  }
@@ -146,14 +153,12 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
146
153
  }
147
154
  }
148
155
  addAttributeToSelected(attribute) {
149
- console.log('Adding attribute to selected:', attribute, 'with sort order:', this.currentSortOrder);
150
156
  const sortItem = {
151
157
  attributePath: attribute.attributePath,
152
158
  attributeValueType: attribute.attributeValueType,
153
159
  sortOrder: this.currentSortOrder
154
160
  };
155
161
  this.selectedAttributes.push(sortItem);
156
- console.log('Selected attributes after add:', this.selectedAttributes);
157
162
  // Remove from available
158
163
  this.availableAttributes = this.availableAttributes.filter(item => item.attributePath !== attribute.attributePath);
159
164
  // Clear selections
@@ -202,31 +207,37 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
202
207
  };
203
208
  }
204
209
  onOk() {
205
- console.log('onOk called, selectedAttributes:', this.selectedAttributes);
206
210
  const result = {
207
211
  selectedAttributes: this.selectedAttributes
208
212
  };
209
- console.log('Closing dialog with result:', result);
210
- this.dialog.close(result);
213
+ this.windowRef.close(result);
211
214
  }
212
215
  onCancel() {
213
- console.log('onCancel called');
214
- this.dialog.close();
216
+ this.windowRef.close();
215
217
  }
216
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSortSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
217
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: AttributeSortSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-sort-selector-dialog", host: { attributes: { "data-component": "attribute-sort-selector" } }, usesInheritance: true, ngImport: i0, template: `
218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSortSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: AttributeSortSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-sort-selector-dialog", host: { attributes: { "data-component": "attribute-sort-selector" } }, ngImport: i0, template: `
218
220
  <div class="attribute-sort-selector-container">
219
- <!-- Search Section -->
220
- <div class="search-container">
221
+ <!-- Filter Section -->
222
+ <div class="filter-container">
221
223
  <kendo-textbox
222
224
  [(ngModel)]="searchText"
223
225
  (ngModelChange)="onSearchChange($event)"
224
- placeholder="Search attributes..."
226
+ placeholder="Search path & description..."
225
227
  class="search-input">
226
228
  <ng-template kendoTextBoxSuffixTemplate>
227
229
  <button kendoButton [svgIcon]="searchIcon" fillMode="clear"></button>
228
230
  </ng-template>
229
231
  </kendo-textbox>
232
+ <kendo-dropdownlist
233
+ [data]="valueTypeOptions"
234
+ [(ngModel)]="selectedValueTypeFilter"
235
+ (valueChange)="onValueTypeFilterChange($event)"
236
+ textField="text"
237
+ valueField="value"
238
+ [valuePrimitive]="true"
239
+ class="type-filter-dropdown">
240
+ </kendo-dropdownlist>
230
241
  </div>
231
242
 
232
243
  <!-- Main Content Area - All side by side -->
@@ -236,15 +247,16 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
236
247
  <h4>Available Attributes</h4>
237
248
  <kendo-grid
238
249
  [data]="availableGridData"
239
- [height]="350"
240
250
  [scrollable]="'scrollable'"
241
251
  [selectable]="{ mode: 'single', enabled: true }"
242
252
  [kendoGridSelectBy]="'attributePath'"
243
253
  [(selectedKeys)]="selectedAvailableKeys"
244
254
  (cellClick)="onAvailableCellClick($event)"
255
+ [resizable]="true"
245
256
  class="attribute-grid">
246
- <kendo-grid-column field="attributePath" title="Attribute Path" [width]="200"></kendo-grid-column>
247
- <kendo-grid-column field="attributeValueType" title="Type" [width]="140"></kendo-grid-column>
257
+ <kendo-grid-column field="attributePath" title="Attribute Path" [width]="250"></kendo-grid-column>
258
+ <kendo-grid-column field="attributeValueType" title="Type" [width]="100"></kendo-grid-column>
259
+ <kendo-grid-column field="description" title="Description"></kendo-grid-column>
248
260
  </kendo-grid>
249
261
  </div>
250
262
 
@@ -296,12 +308,12 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
296
308
  <h4>Selected ({{ selectedAttributes.length }})</h4>
297
309
  <kendo-grid
298
310
  [data]="selectedGridData"
299
- [height]="350"
300
311
  [scrollable]="'scrollable'"
301
312
  [selectable]="{ mode: 'single', enabled: true }"
302
313
  [kendoGridSelectBy]="'attributePath'"
303
314
  [(selectedKeys)]="selectedChosenKeys"
304
315
  (cellClick)="onSelectedCellClick($event)"
316
+ [resizable]="true"
305
317
  class="attribute-grid">
306
318
  <kendo-grid-column field="attributePath" title="Attribute Path" [width]="180"></kendo-grid-column>
307
319
  <kendo-grid-column field="sortOrder" title="Sort" [width]="100">
@@ -327,15 +339,16 @@ class AttributeSortSelectorDialogComponent extends DialogContentBase {
327
339
  </kendo-grid>
328
340
  </div>
329
341
  </div>
330
- </div>
331
342
 
332
- <kendo-dialog-actions>
333
- <button kendoButton (click)="onCancel()">Cancel</button>
334
- <button kendoButton themeColor="primary" (click)="onOk()">Apply</button>
335
- </kendo-dialog-actions>
336
- `, isInline: true, styles: [":host{display:block}.attribute-sort-selector-container{display:flex;flex-direction:column;padding:16px 20px;min-width:1000px;box-sizing:border-box;gap:16px}.search-container{flex-shrink:0}.search-input{width:100%}.lists-container{display:flex;gap:16px;align-items:flex-start}.list-section{flex:1;display:flex;flex-direction:column}.list-section h4,.sort-options-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600}.attribute-grid{border-radius:4px}.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)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: DropDownListModule }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i5$1.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }] });
343
+ <!-- Action Bar -->
344
+ <div class="action-bar">
345
+ <button kendoButton (click)="onCancel()">Cancel</button>
346
+ <button kendoButton themeColor="primary" (click)="onOk()">Apply</button>
347
+ </div>
348
+ </div>
349
+ `, 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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "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: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: DropDownListModule }, { kind: "component", type: 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 }] });
337
350
  }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSortSelectorDialogComponent, decorators: [{
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSortSelectorDialogComponent, decorators: [{
339
352
  type: Component,
340
353
  args: [{ selector: 'mm-attribute-sort-selector-dialog', standalone: true, host: { 'data-component': 'attribute-sort-selector' }, imports: [
341
354
  CommonModule,
@@ -345,20 +358,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
345
358
  InputsModule,
346
359
  DropDownListModule,
347
360
  IconsModule,
348
- DialogModule
361
+ WindowModule
349
362
  ], template: `
350
363
  <div class="attribute-sort-selector-container">
351
- <!-- Search Section -->
352
- <div class="search-container">
364
+ <!-- Filter Section -->
365
+ <div class="filter-container">
353
366
  <kendo-textbox
354
367
  [(ngModel)]="searchText"
355
368
  (ngModelChange)="onSearchChange($event)"
356
- placeholder="Search attributes..."
369
+ placeholder="Search path & description..."
357
370
  class="search-input">
358
371
  <ng-template kendoTextBoxSuffixTemplate>
359
372
  <button kendoButton [svgIcon]="searchIcon" fillMode="clear"></button>
360
373
  </ng-template>
361
374
  </kendo-textbox>
375
+ <kendo-dropdownlist
376
+ [data]="valueTypeOptions"
377
+ [(ngModel)]="selectedValueTypeFilter"
378
+ (valueChange)="onValueTypeFilterChange($event)"
379
+ textField="text"
380
+ valueField="value"
381
+ [valuePrimitive]="true"
382
+ class="type-filter-dropdown">
383
+ </kendo-dropdownlist>
362
384
  </div>
363
385
 
364
386
  <!-- Main Content Area - All side by side -->
@@ -368,15 +390,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
368
390
  <h4>Available Attributes</h4>
369
391
  <kendo-grid
370
392
  [data]="availableGridData"
371
- [height]="350"
372
393
  [scrollable]="'scrollable'"
373
394
  [selectable]="{ mode: 'single', enabled: true }"
374
395
  [kendoGridSelectBy]="'attributePath'"
375
396
  [(selectedKeys)]="selectedAvailableKeys"
376
397
  (cellClick)="onAvailableCellClick($event)"
398
+ [resizable]="true"
377
399
  class="attribute-grid">
378
- <kendo-grid-column field="attributePath" title="Attribute Path" [width]="200"></kendo-grid-column>
379
- <kendo-grid-column field="attributeValueType" title="Type" [width]="140"></kendo-grid-column>
400
+ <kendo-grid-column field="attributePath" title="Attribute Path" [width]="250"></kendo-grid-column>
401
+ <kendo-grid-column field="attributeValueType" title="Type" [width]="100"></kendo-grid-column>
402
+ <kendo-grid-column field="description" title="Description"></kendo-grid-column>
380
403
  </kendo-grid>
381
404
  </div>
382
405
 
@@ -428,12 +451,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
428
451
  <h4>Selected ({{ selectedAttributes.length }})</h4>
429
452
  <kendo-grid
430
453
  [data]="selectedGridData"
431
- [height]="350"
432
454
  [scrollable]="'scrollable'"
433
455
  [selectable]="{ mode: 'single', enabled: true }"
434
456
  [kendoGridSelectBy]="'attributePath'"
435
457
  [(selectedKeys)]="selectedChosenKeys"
436
458
  (cellClick)="onSelectedCellClick($event)"
459
+ [resizable]="true"
437
460
  class="attribute-grid">
438
461
  <kendo-grid-column field="attributePath" title="Attribute Path" [width]="180"></kendo-grid-column>
439
462
  <kendo-grid-column field="sortOrder" title="Sort" [width]="100">
@@ -459,17 +482,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
459
482
  </kendo-grid>
460
483
  </div>
461
484
  </div>
462
- </div>
463
485
 
464
- <kendo-dialog-actions>
465
- <button kendoButton (click)="onCancel()">Cancel</button>
466
- <button kendoButton themeColor="primary" (click)="onOk()">Apply</button>
467
- </kendo-dialog-actions>
468
- `, styles: [":host{display:block}.attribute-sort-selector-container{display:flex;flex-direction:column;padding:16px 20px;min-width:1000px;box-sizing:border-box;gap:16px}.search-container{flex-shrink:0}.search-input{width:100%}.lists-container{display:flex;gap:16px;align-items:flex-start}.list-section{flex:1;display:flex;flex-direction:column}.list-section h4,.sort-options-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600}.attribute-grid{border-radius:4px}.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)}\n"] }]
469
- }], ctorParameters: () => [] });
486
+ <!-- Action Bar -->
487
+ <div class="action-bar">
488
+ <button kendoButton (click)="onCancel()">Cancel</button>
489
+ <button kendoButton themeColor="primary" (click)="onOk()">Apply</button>
490
+ </div>
491
+ </div>
492
+ `, 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"] }]
493
+ }] });
470
494
 
471
495
  class AttributeSortSelectorDialogService {
472
- dialogService = inject(DialogService);
496
+ windowService = inject(WindowService);
473
497
  /**
474
498
  * Opens the attribute sort selector dialog
475
499
  * @param ckTypeId The CkType ID to fetch attributes for
@@ -483,20 +507,29 @@ class AttributeSortSelectorDialogService {
483
507
  selectedAttributes,
484
508
  dialogTitle
485
509
  };
486
- const dialogRef = this.dialogService.open({
510
+ const windowRef = this.windowService.open({
487
511
  content: AttributeSortSelectorDialogComponent,
488
- width: 1100,
512
+ width: 1200,
489
513
  height: 750,
490
514
  minWidth: 1050,
491
515
  minHeight: 700,
516
+ resizable: true,
492
517
  title: dialogTitle || 'Select Attributes with Sort Order'
493
518
  });
494
519
  // Pass data to the component
495
- if (dialogRef.content?.instance) {
496
- dialogRef.content.instance.data = data;
520
+ const contentRef = windowRef.content;
521
+ if (contentRef?.instance) {
522
+ contentRef.instance.data = data;
497
523
  }
498
524
  try {
499
- const result = await firstValueFrom(dialogRef.result);
525
+ const result = await firstValueFrom(windowRef.result);
526
+ if (result instanceof WindowCloseResult) {
527
+ // User closed the window via X button
528
+ return {
529
+ confirmed: false,
530
+ selectedAttributes: []
531
+ };
532
+ }
500
533
  if (result && typeof result === 'object' && 'selectedAttributes' in result) {
501
534
  // User clicked OK
502
535
  const dialogResult = result;
@@ -521,10 +554,10 @@ class AttributeSortSelectorDialogService {
521
554
  };
522
555
  }
523
556
  }
524
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSortSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
525
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSortSelectorDialogService });
557
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSortSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
558
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSortSelectorDialogService });
526
559
  }
527
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSortSelectorDialogService, decorators: [{
560
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSortSelectorDialogService, decorators: [{
528
561
  type: Injectable
529
562
  }] });
530
563
 
@@ -643,7 +676,7 @@ class PropertyConverterService {
643
676
  readOnly: true,
644
677
  description: 'Construction kit record identifier'
645
678
  });
646
- // Convert attributes with CK types
679
+ // Convert attributes with CK types (record.attributes is guaranteed non-null by the guard above)
647
680
  return this.convertAttributesWithCkTypes(record.attributes, ckAttributeMap).pipe(map(attributeProperties => {
648
681
  properties.push(...attributeProperties);
649
682
  return properties;
@@ -746,7 +779,7 @@ class PropertyConverterService {
746
779
  return of([]);
747
780
  }
748
781
  // Check if any attributes have nested records that need async conversion
749
- const hasNestedRecords = attributes.some(attr => attr?.value && typeof attr.value === 'object' && attr.value.attributes !== undefined);
782
+ const hasNestedRecords = attributes.some(attr => attr?.value && typeof attr.value === 'object' && attr.value !== null && 'attributes' in attr.value);
750
783
  if (!hasNestedRecords) {
751
784
  // No nested records - convert synchronously
752
785
  const items = attributes.map((attr, index) => this.convertSingleAttribute(attr, index, ckAttributeMap));
@@ -754,7 +787,7 @@ class PropertyConverterService {
754
787
  }
755
788
  // Has nested records - need to handle async conversion
756
789
  const conversionObservables = attributes.map((attr, index) => {
757
- if (attr?.value && typeof attr.value === 'object' && attr.value.attributes !== undefined) {
790
+ if (attr?.value && typeof attr.value === 'object' && attr.value !== null && 'attributes' in attr.value) {
758
791
  // Nested record - convert async
759
792
  return this.convertRtRecordToProperties(attr.value).pipe(map(nestedProperties => ({
760
793
  id: `attr_${index}_${attr?.attributeName || 'unknown'}`,
@@ -843,7 +876,7 @@ class PropertyConverterService {
843
876
  return value.map(v => this.convertRtEntityAttributeValueSync(v));
844
877
  }
845
878
  // For nested records, return as-is (will be handled by async conversion if needed)
846
- if (typeof value === 'object' && value.attributes !== undefined) {
879
+ if (typeof value === 'object' && 'attributes' in value) {
847
880
  return value;
848
881
  }
849
882
  return value;
@@ -900,10 +933,10 @@ class PropertyConverterService {
900
933
  const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
901
934
  return isoDateRegex.test(value) && !isNaN(Date.parse(value));
902
935
  }
903
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PropertyConverterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
904
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PropertyConverterService, providedIn: 'root' });
936
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyConverterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
937
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyConverterService, providedIn: 'root' });
905
938
  }
906
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PropertyConverterService, decorators: [{
939
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyConverterService, decorators: [{
907
940
  type: Injectable,
908
941
  args: [{
909
942
  providedIn: 'root'
@@ -1078,7 +1111,7 @@ class PropertyValueDisplayComponent {
1078
1111
  */
1079
1112
  formatDateTime(value) {
1080
1113
  try {
1081
- const date = value instanceof Date ? value : new Date(value);
1114
+ const date = value instanceof Date ? value : new Date(String(value));
1082
1115
  if (isNaN(date.getTime())) {
1083
1116
  return String(value);
1084
1117
  }
@@ -1110,15 +1143,16 @@ class PropertyValueDisplayComponent {
1110
1143
  if (typeof value !== 'object' || value === null) {
1111
1144
  return String(value);
1112
1145
  }
1113
- const keys = Object.keys(value);
1146
+ const obj = value;
1147
+ const keys = Object.keys(obj);
1114
1148
  if (keys.length === 0) {
1115
1149
  return '{}';
1116
1150
  }
1117
1151
  if (keys.length <= 2) {
1118
- const preview = keys.map(key => `${key}: ${this.truncateValue(value[key])}`).join(', ');
1152
+ const preview = keys.map(key => `${key}: ${this.truncateValue(obj[key])}`).join(', ');
1119
1153
  return `{${preview}}`;
1120
1154
  }
1121
- return `{${keys.slice(0, 2).map(key => `${key}: ${this.truncateValue(value[key])}`).join(', ')}, ... +${keys.length - 2} more}`;
1155
+ return `{${keys.slice(0, 2).map(key => `${key}: ${this.truncateValue(obj[key])}`).join(', ')}, ... +${keys.length - 2} more}`;
1122
1156
  }
1123
1157
  /**
1124
1158
  * Format binary data
@@ -1176,17 +1210,18 @@ class PropertyValueDisplayComponent {
1176
1210
  if (typeof obj !== 'object' || obj === null) {
1177
1211
  return [];
1178
1212
  }
1179
- if (Array.isArray(obj) && obj.length > 0 && obj[0].id === 'ckRecordId') {
1213
+ if (Array.isArray(obj) && obj.length > 0 && typeof obj[0] === 'object' && obj[0] !== null && 'id' in obj[0] && obj[0].id === 'ckRecordId') {
1180
1214
  // Handle array of records
1181
- return obj.map((item, _) => ({
1182
- key: item.name,
1183
- value: item.value
1215
+ return obj.map((item) => ({
1216
+ key: String(item['name']),
1217
+ value: item['value']
1184
1218
  }));
1185
1219
  }
1186
1220
  // Handle regular objects
1187
- return Object.keys(obj).map(key => ({
1221
+ const record = obj;
1222
+ return Object.keys(record).map(key => ({
1188
1223
  key,
1189
- value: obj[key]
1224
+ value: record[key]
1190
1225
  }));
1191
1226
  }
1192
1227
  /**
@@ -1210,7 +1245,7 @@ class PropertyValueDisplayComponent {
1210
1245
  return AttributeValueTypeDto.StringDto;
1211
1246
  }
1212
1247
  if (Array.isArray(value)) {
1213
- if (value.length > 0 && typeof value[0] === 'object' && value[0].id === 'ckRecordId') {
1248
+ if (value.length > 0 && typeof value[0] === 'object' && value[0] !== null && 'id' in value[0] && value[0].id === 'ckRecordId') {
1214
1249
  return AttributeValueTypeDto.RecordDto;
1215
1250
  }
1216
1251
  if (value.length > 0 && typeof value[0] === 'object') {
@@ -1235,7 +1270,7 @@ class PropertyValueDisplayComponent {
1235
1270
  return false;
1236
1271
  }
1237
1272
  // Check if value has binaryId or downloadUri (LargeBinaryInfo structure)
1238
- return this.value && typeof this.value === 'object' && ('binaryId' in this.value || 'downloadUri' in this.value);
1273
+ return !!this.value && typeof this.value === 'object' && ('binaryId' in this.value || 'downloadUri' in this.value);
1239
1274
  }
1240
1275
  /**
1241
1276
  * Get the filename from binary info
@@ -1288,17 +1323,18 @@ class PropertyValueDisplayComponent {
1288
1323
  console.warn('No binary value available');
1289
1324
  return;
1290
1325
  }
1326
+ const binaryValue = this.value;
1291
1327
  // If downloadUri is available, open directly
1292
- if (this.value.downloadUri) {
1293
- window.open(this.value.downloadUri, '_blank', 'noopener,noreferrer');
1328
+ if (binaryValue.downloadUri) {
1329
+ window.open(binaryValue.downloadUri, '_blank', 'noopener,noreferrer');
1294
1330
  return;
1295
1331
  }
1296
1332
  // Otherwise, emit event for parent to handle (needs to load downloadUri)
1297
- if (this.value.binaryId) {
1333
+ if (binaryValue.binaryId) {
1298
1334
  const event = {
1299
- binaryId: this.value.binaryId,
1300
- filename: this.value.filename,
1301
- contentType: this.value.contentType
1335
+ binaryId: binaryValue.binaryId,
1336
+ filename: binaryValue.filename,
1337
+ contentType: binaryValue.contentType
1302
1338
  };
1303
1339
  this.binaryDownload.emit(event);
1304
1340
  }
@@ -1306,8 +1342,8 @@ class PropertyValueDisplayComponent {
1306
1342
  console.warn('No binaryId or downloadUri available');
1307
1343
  }
1308
1344
  }
1309
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PropertyValueDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1310
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: PropertyValueDisplayComponent, isStandalone: true, selector: "mm-property-value-display", inputs: { value: "value", type: "type", displayMode: "displayMode" }, outputs: { binaryDownload: "binaryDownload" }, ngImport: i0, template: `
1345
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyValueDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1346
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: PropertyValueDisplayComponent, isStandalone: true, selector: "mm-property-value-display", inputs: { value: "value", type: "type", displayMode: "displayMode" }, outputs: { binaryDownload: "binaryDownload" }, ngImport: i0, template: `
1311
1347
  <div class="property-value-display" [ngClass]="'type-' + type.toLowerCase()">
1312
1348
 
1313
1349
  @if (isExpandableRecord()) {
@@ -1405,9 +1441,9 @@ class PropertyValueDisplayComponent {
1405
1441
  }
1406
1442
  }
1407
1443
  </div>
1408
- `, isInline: true, styles: [".property-value-display{display:flex;align-items:flex-start;gap:8px;min-height:20px;font-family:inherit;width:100%}.expandable-record{width:100%}.record-header{display:flex;align-items:center;gap:6px;cursor:pointer;padding:4px;border-radius:4px;transition:background-color .2s}.record-header:hover{background:var(--kendo-color-base-subtle)}.expand-icon{width:16px;height:16px;flex-shrink:0;transition:transform .2s}.record-summary{flex:1;font-size:.9em}.record-content{margin-left:22px;margin-top:8px;border-left:2px solid var(--kendo-color-border);padding-left:12px;background:var(--kendo-color-base-subtle);border-radius:0 4px 4px 0}.nested-properties{display:flex;flex-direction:column;gap:6px;padding:8px}.nested-property{display:flex;align-items:flex-start;gap:8px;min-height:24px}.property-key{font-weight:500;color:var(--kendo-color-primary);min-width:100px;flex-shrink:0;font-size:.9em}.array-item{border:1px solid var(--kendo-color-border);border-radius:4px;margin-bottom:8px;background:transparent}.array-index{display:inline-block;background:var(--kendo-color-primary);color:#fff;padding:2px 8px;font-size:.8em;font-weight:700;border-radius:4px 0;margin-bottom:4px}.json-display{font-family:Courier New,monospace;font-size:12px;margin:0;padding:4px 8px;background:var(--kendo-color-base-subtle);border-radius:4px;max-width:300px;overflow:auto}.text-display,.default-display{flex:1;word-break:break-word;overflow-wrap:anywhere}.type-boolean .default-display{font-weight:500}.type-boolean .default-display.value-true{color:#28a745}.type-boolean .default-display.value-false{color:#dc3545}:is(.type-datetime,.type-datetimeoffset) .default-display{font-family:monospace;font-size:.9em}:is(.type-int,.type-integer,.type-double) .default-display{font-family:monospace;text-align:right}.type-indicator{font-size:.75em;padding:2px 6px;background:var(--kendo-color-primary);color:#fff;border-radius:3px;text-transform:uppercase;font-weight:500;flex-shrink:0}.empty-value{color:var(--kendo-color-subtle);font-style:italic}.null-value{color:var(--kendo-color-error);font-style:italic}.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;color:var(--kendo-color-on-app-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size{font-size:.85em;color:var(--kendo-color-subtle);flex-shrink:0}.content-type{font-size:.75em;padding:2px 6px;background:var(--kendo-color-base-subtle);border-radius:3px;color:var(--kendo-color-subtle);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: PropertyValueDisplayComponent, selector: "mm-property-value-display", inputs: ["value", "type", "displayMode"], outputs: ["binaryDownload"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$2.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
1444
+ `, isInline: true, styles: [".property-value-display{display:flex;align-items:flex-start;gap:8px;min-height:20px;font-family:inherit;width:100%}.expandable-record{width:100%}.record-header{display:flex;align-items:center;gap:6px;cursor:pointer;padding:4px;border-radius:4px;transition:background-color .2s}.record-header:hover{background:var(--kendo-color-base-subtle)}.expand-icon{width:16px;height:16px;flex-shrink:0;transition:transform .2s}.record-summary{flex:1;font-size:.9em}.record-content{margin-left:22px;margin-top:8px;border-left:2px solid var(--kendo-color-border);padding-left:12px;background:var(--kendo-color-base-subtle);border-radius:0 4px 4px 0}.nested-properties{display:flex;flex-direction:column;gap:6px;padding:8px}.nested-property{display:flex;align-items:flex-start;gap:8px;min-height:24px}.property-key{font-weight:500;color:var(--kendo-color-primary);min-width:100px;flex-shrink:0;font-size:.9em}.array-item{border:1px solid var(--kendo-color-border);border-radius:4px;margin-bottom:8px;background:transparent}.array-index{display:inline-block;background:var(--kendo-color-primary);color:#fff;padding:2px 8px;font-size:.8em;font-weight:700;border-radius:4px 0;margin-bottom:4px}.json-display{font-family:Courier New,monospace;font-size:12px;margin:0;padding:4px 8px;background:var(--kendo-color-base-subtle);border-radius:4px;max-width:300px;overflow:auto}.text-display,.default-display{flex:1;word-break:break-word;overflow-wrap:anywhere}.type-boolean .default-display{font-weight:500}.type-boolean .default-display.value-true{color:#28a745}.type-boolean .default-display.value-false{color:#dc3545}:is(.type-datetime,.type-datetimeoffset) .default-display{font-family:monospace;font-size:.9em}:is(.type-int,.type-integer,.type-double) .default-display{font-family:monospace;text-align:right}.type-indicator{font-size:.75em;padding:2px 6px;background:var(--kendo-color-primary);color:#fff;border-radius:3px;text-transform:uppercase;font-weight:500;flex-shrink:0}.empty-value{color:var(--kendo-color-subtle);font-style:italic}.null-value{color:var(--kendo-color-error);font-style:italic}.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;color:var(--kendo-color-on-app-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size{font-size:.85em;color:var(--kendo-color-subtle);flex-shrink:0}.content-type{font-size:.75em;padding:2px 6px;background:var(--kendo-color-base-subtle);border-radius:3px;color:var(--kendo-color-subtle);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: PropertyValueDisplayComponent, selector: "mm-property-value-display", inputs: ["value", "type", "displayMode"], outputs: ["binaryDownload"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
1409
1445
  }
1410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PropertyValueDisplayComponent, decorators: [{
1446
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyValueDisplayComponent, decorators: [{
1411
1447
  type: Component,
1412
1448
  args: [{ selector: 'mm-property-value-display', standalone: true, imports: [CommonModule, SVGIconModule, ButtonModule], template: `
1413
1449
  <div class="property-value-display" [ngClass]="'type-' + type.toLowerCase()">
@@ -1660,8 +1696,8 @@ class PropertyGridComponent {
1660
1696
  onBinaryDownload(event) {
1661
1697
  this.binaryDownload.emit(event);
1662
1698
  }
1663
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PropertyGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1664
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: PropertyGridComponent, isStandalone: true, selector: "mm-property-grid", inputs: { data: "data", config: "config", showTypeColumn: "showTypeColumn" }, outputs: { propertyChange: "propertyChange", saveRequested: "saveRequested", binaryDownload: "binaryDownload" }, usesOnChanges: true, ngImport: i0, template: `
1699
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1700
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: PropertyGridComponent, isStandalone: true, selector: "mm-property-grid", inputs: { data: "data", config: "config", showTypeColumn: "showTypeColumn" }, outputs: { propertyChange: "propertyChange", saveRequested: "saveRequested", binaryDownload: "binaryDownload" }, usesOnChanges: true, ngImport: i0, template: `
1665
1701
  <div class="mm-property-grid" [style.height]="config.height || '400px'">
1666
1702
 
1667
1703
  @if (config.showSearch) {
@@ -1743,9 +1779,9 @@ class PropertyGridComponent {
1743
1779
 
1744
1780
  </kendo-grid>
1745
1781
  </div>
1746
- `, 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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i5$2.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: PropertyValueDisplayComponent, selector: "mm-property-value-display", inputs: ["value", "type", "displayMode"], outputs: ["binaryDownload"] }] });
1782
+ `, 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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "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"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: PropertyValueDisplayComponent, selector: "mm-property-value-display", inputs: ["value", "type", "displayMode"], outputs: ["binaryDownload"] }] });
1747
1783
  }
1748
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PropertyGridComponent, decorators: [{
1784
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyGridComponent, decorators: [{
1749
1785
  type: Component,
1750
1786
  args: [{ selector: 'mm-property-grid', standalone: true, imports: [
1751
1787
  CommonModule,
@@ -1991,8 +2027,8 @@ class CkTypeSelectorDialogComponent extends DialogContentBase {
1991
2027
  this.dialog.close(result);
1992
2028
  }
1993
2029
  }
1994
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CkTypeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1995
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: CkTypeSelectorDialogComponent, isStandalone: true, selector: "mm-ck-type-selector-dialog", usesInheritance: true, ngImport: i0, template: `
2030
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2031
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: CkTypeSelectorDialogComponent, isStandalone: true, selector: "mm-ck-type-selector-dialog", usesInheritance: true, ngImport: i0, template: `
1996
2032
  <div class="ck-type-selector-container">
1997
2033
  <div class="filter-container">
1998
2034
  <div class="filter-row">
@@ -2072,9 +2108,9 @@ class CkTypeSelectorDialogComponent extends DialogContentBase {
2072
2108
  <button kendoButton (click)="onCancel()">Cancel</button>
2073
2109
  <button kendoButton themeColor="primary" [disabled]="!selectedType || (selectedType.isAbstract && !allowAbstract)" (click)="onConfirm()">OK</button>
2074
2110
  </kendo-dialog-actions>
2075
- `, isInline: true, styles: [".ck-type-selector-container{display:flex;flex-direction:column;height:100%;padding:20px;min-width:700px;box-sizing:border-box}.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}.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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "component", type: 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: DialogModule }, { kind: "component", type: i5$1.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }] });
2111
+ `, isInline: true, styles: [".ck-type-selector-container{display:flex;flex-direction:column;height:100%;padding:20px;min-width:700px;box-sizing:border-box}.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}.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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "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: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "component", type: 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: DialogModule }, { kind: "component", type: i7.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }] });
2076
2112
  }
2077
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CkTypeSelectorDialogComponent, decorators: [{
2113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorDialogComponent, decorators: [{
2078
2114
  type: Component,
2079
2115
  args: [{ selector: 'mm-ck-type-selector-dialog', standalone: true, imports: [
2080
2116
  CommonModule,
@@ -2222,10 +2258,10 @@ class CkTypeSelectorDialogService {
2222
2258
  };
2223
2259
  }
2224
2260
  }
2225
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CkTypeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2226
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CkTypeSelectorDialogService });
2261
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2262
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorDialogService });
2227
2263
  }
2228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CkTypeSelectorDialogService, decorators: [{
2264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorDialogService, decorators: [{
2229
2265
  type: Injectable
2230
2266
  }] });
2231
2267
 
@@ -2341,12 +2377,10 @@ class OctoGraphQlDataSource extends DataSourceTyped {
2341
2377
  class OctoGraphQlHierarchyDataSource extends HierarchyDataSourceBase {
2342
2378
  }
2343
2379
 
2344
- class AttributeSelectorDialogComponent extends DialogContentBase {
2380
+ class AttributeSelectorDialogComponent {
2381
+ windowRef = inject(WindowRef);
2345
2382
  attributeService = inject(AttributeSelectorService);
2346
2383
  searchSubject = new Subject();
2347
- constructor() {
2348
- super(inject(DialogRef));
2349
- }
2350
2384
  arrowRightIcon = arrowRightIcon;
2351
2385
  arrowLeftIcon = arrowLeftIcon;
2352
2386
  chevronDoubleRightIcon = chevronDoubleRightIcon;
@@ -2354,34 +2388,50 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2354
2388
  searchIcon = searchIcon;
2355
2389
  arrowUpIcon = arrowUpIcon;
2356
2390
  arrowDownIcon = arrowDownIcon;
2391
+ data;
2357
2392
  dialogTitle = 'Select Attributes';
2358
2393
  rtCkTypeId;
2359
2394
  singleSelect = false;
2360
2395
  searchText = '';
2361
2396
  selectedSingleKey = [];
2397
+ selectedValueTypeFilter = null;
2398
+ includeNavigationProperties = true;
2399
+ maxDepth = null;
2362
2400
  availableAttributes = [];
2363
2401
  selectedAttributes = [];
2364
2402
  availableGridData = { data: [], total: 0 };
2365
2403
  selectedGridData = { data: [], total: 0 };
2366
2404
  selectedAvailableKeys = [];
2367
2405
  selectedChosenKeys = [];
2406
+ valueTypeOptions = [
2407
+ { text: 'All Types', value: null },
2408
+ { text: 'String', value: AttributeValueTypeDto$1.StringDto },
2409
+ { text: 'Integer', value: AttributeValueTypeDto$1.IntegerDto },
2410
+ { text: 'Double', value: AttributeValueTypeDto$1.DoubleDto },
2411
+ { text: 'Boolean', value: AttributeValueTypeDto$1.BooleanDto },
2412
+ { text: 'DateTime', value: AttributeValueTypeDto$1.DateTimeDto },
2413
+ { text: 'DateTimeOffset', value: AttributeValueTypeDto$1.DateTimeOffsetDto },
2414
+ { text: 'Enum', value: AttributeValueTypeDto$1.EnumDto },
2415
+ { text: 'TimeSpan', value: AttributeValueTypeDto$1.TimeSpanDto }
2416
+ ];
2368
2417
  // Double-click tracking
2369
2418
  lastClickTime = 0;
2370
2419
  lastClickedItem = null;
2371
2420
  doubleClickDelay = 300; // milliseconds
2372
2421
  ngOnInit() {
2373
- const data = this.dialog.content?.instance?.data;
2374
- if (data) {
2375
- this.rtCkTypeId = data.rtCkTypeId;
2376
- this.dialogTitle = data.dialogTitle || 'Select Attributes';
2377
- this.singleSelect = data.singleSelect ?? false;
2378
- if (data.selectedAttributes && data.selectedAttributes.length > 0) {
2422
+ if (this.data) {
2423
+ this.rtCkTypeId = this.data.rtCkTypeId;
2424
+ this.dialogTitle = this.data.dialogTitle || 'Select Attributes';
2425
+ this.singleSelect = this.data.singleSelect ?? false;
2426
+ this.includeNavigationProperties = this.data.includeNavigationProperties ?? true;
2427
+ this.maxDepth = this.data.maxDepth ?? null;
2428
+ if (this.data.selectedAttributes && this.data.selectedAttributes.length > 0) {
2379
2429
  if (this.singleSelect) {
2380
- this.selectedSingleKey = [data.selectedAttributes[0]];
2430
+ this.selectedSingleKey = [this.data.selectedAttributes[0]];
2381
2431
  }
2382
2432
  else {
2383
2433
  // Pre-populate selected attributes if provided
2384
- this.loadInitialSelectedAttributes(data.selectedAttributes);
2434
+ this.loadInitialSelectedAttributes(this.data.selectedAttributes);
2385
2435
  }
2386
2436
  }
2387
2437
  }
@@ -2392,8 +2442,8 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2392
2442
  // Load initial attributes
2393
2443
  this.loadAvailableAttributes();
2394
2444
  }
2395
- loadAvailableAttributes(filter) {
2396
- this.attributeService.getAvailableAttributes(this.rtCkTypeId, filter).subscribe(result => {
2445
+ loadAvailableAttributes(searchTerm) {
2446
+ this.attributeService.getAvailableAttributes(this.rtCkTypeId, undefined, undefined, undefined, this.selectedValueTypeFilter || undefined, searchTerm || undefined, this.includeNavigationProperties, this.maxDepth ?? undefined).subscribe(result => {
2397
2447
  // Filter out already selected attributes
2398
2448
  const selectedPaths = new Set(this.selectedAttributes.map(a => a.attributePath));
2399
2449
  this.availableAttributes = result.items.filter(item => !selectedPaths.has(item.attributePath));
@@ -2419,6 +2469,19 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2419
2469
  onSearchChange(value) {
2420
2470
  this.searchSubject.next(value);
2421
2471
  }
2472
+ onValueTypeFilterChange(_value) {
2473
+ this.loadAvailableAttributes(this.searchText || undefined);
2474
+ }
2475
+ onNavigationPropertiesChange() {
2476
+ if (!this.includeNavigationProperties) {
2477
+ this.maxDepth = null;
2478
+ }
2479
+ this.loadAvailableAttributes(this.searchText || undefined);
2480
+ }
2481
+ onMaxDepthChange(value) {
2482
+ this.maxDepth = value;
2483
+ this.loadAvailableAttributes(this.searchText || undefined);
2484
+ }
2422
2485
  addSelected() {
2423
2486
  const itemsToAdd = this.availableAttributes.filter(item => this.selectedAvailableKeys.includes(item.attributePath));
2424
2487
  this.selectedAttributes.push(...itemsToAdd);
@@ -2495,7 +2558,7 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2495
2558
  };
2496
2559
  }
2497
2560
  onCancel() {
2498
- this.dialog.close();
2561
+ this.windowRef.close();
2499
2562
  }
2500
2563
  onConfirm() {
2501
2564
  if (this.singleSelect) {
@@ -2503,13 +2566,13 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2503
2566
  const result = {
2504
2567
  selectedAttributes: selected ? [selected] : []
2505
2568
  };
2506
- this.dialog.close(result);
2569
+ this.windowRef.close(result);
2507
2570
  }
2508
2571
  else {
2509
2572
  const result = {
2510
2573
  selectedAttributes: this.selectedAttributes
2511
2574
  };
2512
- this.dialog.close(result);
2575
+ this.windowRef.close(result);
2513
2576
  }
2514
2577
  }
2515
2578
  /**
@@ -2606,19 +2669,46 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2606
2669
  this.sortAvailableAttributes();
2607
2670
  this.updateGrids();
2608
2671
  }
2609
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2610
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: AttributeSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-selector-dialog", usesInheritance: true, ngImport: i0, template: `
2672
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2673
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: AttributeSelectorDialogComponent, isStandalone: true, selector: "mm-attribute-selector-dialog", ngImport: i0, template: `
2611
2674
  <div class="attribute-selector-container">
2612
- <div class="search-container">
2675
+ <div class="filter-container">
2613
2676
  <kendo-textbox
2614
2677
  [(ngModel)]="searchText"
2615
2678
  (ngModelChange)="onSearchChange($event)"
2616
- placeholder="Search attributes..."
2679
+ placeholder="Search path & description..."
2617
2680
  class="search-input">
2618
2681
  <ng-template kendoTextBoxSuffixTemplate>
2619
2682
  <button kendoButton [svgIcon]="searchIcon" fillMode="clear"></button>
2620
2683
  </ng-template>
2621
2684
  </kendo-textbox>
2685
+ <kendo-dropdownlist
2686
+ [data]="valueTypeOptions"
2687
+ [(ngModel)]="selectedValueTypeFilter"
2688
+ (valueChange)="onValueTypeFilterChange($event)"
2689
+ textField="text"
2690
+ valueField="value"
2691
+ [valuePrimitive]="true"
2692
+ class="type-filter-dropdown">
2693
+ </kendo-dropdownlist>
2694
+ </div>
2695
+
2696
+ <div class="options-container">
2697
+ <input type="checkbox" kendoCheckBox
2698
+ [(ngModel)]="includeNavigationProperties"
2699
+ (ngModelChange)="onNavigationPropertiesChange()" />
2700
+ <label class="option-label">Include Navigation Properties</label>
2701
+
2702
+ <kendo-numerictextbox
2703
+ [(ngModel)]="maxDepth"
2704
+ [min]="1" [max]="5" [step]="1" [format]="'n0'"
2705
+ [placeholder]="'Depth'"
2706
+ [spinners]="true"
2707
+ [disabled]="!includeNavigationProperties"
2708
+ (valueChange)="onMaxDepthChange($event)"
2709
+ class="depth-input">
2710
+ </kendo-numerictextbox>
2711
+ <label class="option-label">Max Depth</label>
2622
2712
  </div>
2623
2713
 
2624
2714
  <div class="lists-container" *ngIf="!singleSelect">
@@ -2626,15 +2716,16 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2626
2716
  <h4>Available Attributes</h4>
2627
2717
  <kendo-grid
2628
2718
  [data]="availableGridData"
2629
- [height]="350"
2630
2719
  [scrollable]="'scrollable'"
2631
2720
  [selectable]="{ mode: 'multiple', enabled: true }"
2632
2721
  [kendoGridSelectBy]="'attributePath'"
2633
2722
  [(selectedKeys)]="selectedAvailableKeys"
2634
2723
  (cellClick)="onAvailableCellClick($event)"
2724
+ [resizable]="true"
2635
2725
  class="attribute-grid">
2636
- <kendo-grid-column field="attributePath" title="Attribute Path" [width]="200"></kendo-grid-column>
2726
+ <kendo-grid-column field="attributePath" title="Attribute Path" [width]="250"></kendo-grid-column>
2637
2727
  <kendo-grid-column field="attributeValueType" title="Type" [width]="100"></kendo-grid-column>
2728
+ <kendo-grid-column field="description" title="Description"></kendo-grid-column>
2638
2729
  </kendo-grid>
2639
2730
  </div>
2640
2731
 
@@ -2674,12 +2765,12 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2674
2765
  <h4>Selected Attributes ({{ selectedAttributes.length }})</h4>
2675
2766
  <kendo-grid
2676
2767
  [data]="selectedGridData"
2677
- [height]="350"
2678
2768
  [scrollable]="'scrollable'"
2679
2769
  [selectable]="{ mode: 'single', enabled: true }"
2680
2770
  [kendoGridSelectBy]="'attributePath'"
2681
2771
  [(selectedKeys)]="selectedChosenKeys"
2682
2772
  (cellClick)="onSelectedCellClick($event)"
2773
+ [resizable]="true"
2683
2774
  class="attribute-grid">
2684
2775
  <kendo-grid-column field="attributePath" title="Attribute Path" [width]="200">
2685
2776
  <ng-template kendoGridCellTemplate let-dataItem let-rowIndex="rowIndex">
@@ -2712,26 +2803,27 @@ class AttributeSelectorDialogComponent extends DialogContentBase {
2712
2803
  <div class="single-select-container" *ngIf="singleSelect">
2713
2804
  <kendo-grid
2714
2805
  [data]="availableGridData"
2715
- [height]="400"
2716
2806
  [scrollable]="'scrollable'"
2717
2807
  [selectable]="{ mode: 'single', enabled: true }"
2718
2808
  [kendoGridSelectBy]="'attributePath'"
2719
2809
  [(selectedKeys)]="selectedSingleKey"
2720
2810
  (cellClick)="onSingleSelectCellClick($event)"
2811
+ [resizable]="true"
2721
2812
  class="attribute-grid">
2722
2813
  <kendo-grid-column field="attributePath" title="Attribute Path" [width]="250"></kendo-grid-column>
2723
2814
  <kendo-grid-column field="attributeValueType" title="Type" [width]="100"></kendo-grid-column>
2815
+ <kendo-grid-column field="description" title="Description"></kendo-grid-column>
2724
2816
  </kendo-grid>
2725
2817
  </div>
2726
- </div>
2727
2818
 
2728
- <kendo-dialog-actions>
2729
- <button kendoButton (click)="onCancel()">Cancel</button>
2730
- <button kendoButton themeColor="primary" [disabled]="singleSelect && selectedSingleKey.length === 0" (click)="onConfirm()">OK</button>
2731
- </kendo-dialog-actions>
2732
- `, isInline: true, styles: [":host{display:block}.attribute-selector-container{display:flex;flex-direction:column;padding:16px 20px;min-width:800px;box-sizing:border-box;gap:16px}.search-container{flex-shrink:0}.search-input{width:100%}.lists-container{display:flex;gap:16px;align-items:flex-start}.list-section{flex:1;display:flex;flex-direction:column}.list-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600}.attribute-grid{border-radius:4px}.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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i5$1.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }] });
2819
+ <div class="action-bar">
2820
+ <button kendoButton (click)="onCancel()">Cancel</button>
2821
+ <button kendoButton themeColor="primary" [disabled]="singleSelect && selectedSingleKey.length === 0" (click)="onConfirm()">OK</button>
2822
+ </div>
2823
+ </div>
2824
+ `, isInline: true, styles: [":host{display:block;height:100%}.attribute-selector-container{display:flex;flex-direction:column;height:100%;padding:16px 20px;box-sizing:border-box;gap:16px}.filter-container{display:flex;gap:12px;flex-shrink:0}.search-input{flex:1}.type-filter-dropdown{width:160px;flex-shrink:0}.options-container{display:flex;align-items:center;gap:8px;font-size:.85rem;flex-shrink:0}.option-label{cursor:pointer}.depth-input{width:90px}.lists-container{display:flex;gap:16px;flex:1;min-height:0}.list-section{flex:1;display:flex;flex-direction:column;min-height:0}.list-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600;flex-shrink:0}.attribute-grid{border-radius:4px;flex:1;min-height:200px}.attribute-grid ::ng-deep .k-grid-table tbody tr{cursor:pointer}.action-buttons{display:flex;flex-direction:column;gap:8px;justify-content:center;padding:32px 8px 0}.separator{height:1px;background-color:var(--kendo-color-border, #dee2e6);margin:8px 0}.order-buttons{display:flex;flex-direction:column;gap:8px;justify-content:center;padding:32px 8px 0}.order-number{color:var(--kendo-color-primary, #ff6358);font-weight:600;margin-right:8px;min-width:24px;display:inline-block}.single-select-container{flex:1;min-height:0;display:flex;flex-direction:column}.single-select-container .attribute-grid{flex:1}.action-bar{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0;padding-top:8px;border-top:1px solid var(--kendo-color-border, #dee2e6)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "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: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: i5.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "directive", type: i5.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: DropDownListModule }, { kind: "component", type: 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 }] });
2733
2825
  }
2734
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSelectorDialogComponent, decorators: [{
2826
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSelectorDialogComponent, decorators: [{
2735
2827
  type: Component,
2736
2828
  args: [{ selector: 'mm-attribute-selector-dialog', standalone: true, imports: [
2737
2829
  CommonModule,
@@ -2739,20 +2831,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2739
2831
  GridModule,
2740
2832
  ButtonsModule,
2741
2833
  InputsModule,
2834
+ DropDownListModule,
2742
2835
  IconsModule,
2743
- DialogModule
2836
+ WindowModule
2744
2837
  ], template: `
2745
2838
  <div class="attribute-selector-container">
2746
- <div class="search-container">
2839
+ <div class="filter-container">
2747
2840
  <kendo-textbox
2748
2841
  [(ngModel)]="searchText"
2749
2842
  (ngModelChange)="onSearchChange($event)"
2750
- placeholder="Search attributes..."
2843
+ placeholder="Search path & description..."
2751
2844
  class="search-input">
2752
2845
  <ng-template kendoTextBoxSuffixTemplate>
2753
2846
  <button kendoButton [svgIcon]="searchIcon" fillMode="clear"></button>
2754
2847
  </ng-template>
2755
2848
  </kendo-textbox>
2849
+ <kendo-dropdownlist
2850
+ [data]="valueTypeOptions"
2851
+ [(ngModel)]="selectedValueTypeFilter"
2852
+ (valueChange)="onValueTypeFilterChange($event)"
2853
+ textField="text"
2854
+ valueField="value"
2855
+ [valuePrimitive]="true"
2856
+ class="type-filter-dropdown">
2857
+ </kendo-dropdownlist>
2858
+ </div>
2859
+
2860
+ <div class="options-container">
2861
+ <input type="checkbox" kendoCheckBox
2862
+ [(ngModel)]="includeNavigationProperties"
2863
+ (ngModelChange)="onNavigationPropertiesChange()" />
2864
+ <label class="option-label">Include Navigation Properties</label>
2865
+
2866
+ <kendo-numerictextbox
2867
+ [(ngModel)]="maxDepth"
2868
+ [min]="1" [max]="5" [step]="1" [format]="'n0'"
2869
+ [placeholder]="'Depth'"
2870
+ [spinners]="true"
2871
+ [disabled]="!includeNavigationProperties"
2872
+ (valueChange)="onMaxDepthChange($event)"
2873
+ class="depth-input">
2874
+ </kendo-numerictextbox>
2875
+ <label class="option-label">Max Depth</label>
2756
2876
  </div>
2757
2877
 
2758
2878
  <div class="lists-container" *ngIf="!singleSelect">
@@ -2760,15 +2880,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2760
2880
  <h4>Available Attributes</h4>
2761
2881
  <kendo-grid
2762
2882
  [data]="availableGridData"
2763
- [height]="350"
2764
2883
  [scrollable]="'scrollable'"
2765
2884
  [selectable]="{ mode: 'multiple', enabled: true }"
2766
2885
  [kendoGridSelectBy]="'attributePath'"
2767
2886
  [(selectedKeys)]="selectedAvailableKeys"
2768
2887
  (cellClick)="onAvailableCellClick($event)"
2888
+ [resizable]="true"
2769
2889
  class="attribute-grid">
2770
- <kendo-grid-column field="attributePath" title="Attribute Path" [width]="200"></kendo-grid-column>
2890
+ <kendo-grid-column field="attributePath" title="Attribute Path" [width]="250"></kendo-grid-column>
2771
2891
  <kendo-grid-column field="attributeValueType" title="Type" [width]="100"></kendo-grid-column>
2892
+ <kendo-grid-column field="description" title="Description"></kendo-grid-column>
2772
2893
  </kendo-grid>
2773
2894
  </div>
2774
2895
 
@@ -2808,12 +2929,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2808
2929
  <h4>Selected Attributes ({{ selectedAttributes.length }})</h4>
2809
2930
  <kendo-grid
2810
2931
  [data]="selectedGridData"
2811
- [height]="350"
2812
2932
  [scrollable]="'scrollable'"
2813
2933
  [selectable]="{ mode: 'single', enabled: true }"
2814
2934
  [kendoGridSelectBy]="'attributePath'"
2815
2935
  [(selectedKeys)]="selectedChosenKeys"
2816
2936
  (cellClick)="onSelectedCellClick($event)"
2937
+ [resizable]="true"
2817
2938
  class="attribute-grid">
2818
2939
  <kendo-grid-column field="attributePath" title="Attribute Path" [width]="200">
2819
2940
  <ng-template kendoGridCellTemplate let-dataItem let-rowIndex="rowIndex">
@@ -2846,33 +2967,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2846
2967
  <div class="single-select-container" *ngIf="singleSelect">
2847
2968
  <kendo-grid
2848
2969
  [data]="availableGridData"
2849
- [height]="400"
2850
2970
  [scrollable]="'scrollable'"
2851
2971
  [selectable]="{ mode: 'single', enabled: true }"
2852
2972
  [kendoGridSelectBy]="'attributePath'"
2853
2973
  [(selectedKeys)]="selectedSingleKey"
2854
2974
  (cellClick)="onSingleSelectCellClick($event)"
2975
+ [resizable]="true"
2855
2976
  class="attribute-grid">
2856
2977
  <kendo-grid-column field="attributePath" title="Attribute Path" [width]="250"></kendo-grid-column>
2857
2978
  <kendo-grid-column field="attributeValueType" title="Type" [width]="100"></kendo-grid-column>
2979
+ <kendo-grid-column field="description" title="Description"></kendo-grid-column>
2858
2980
  </kendo-grid>
2859
2981
  </div>
2860
- </div>
2861
2982
 
2862
- <kendo-dialog-actions>
2863
- <button kendoButton (click)="onCancel()">Cancel</button>
2864
- <button kendoButton themeColor="primary" [disabled]="singleSelect && selectedSingleKey.length === 0" (click)="onConfirm()">OK</button>
2865
- </kendo-dialog-actions>
2866
- `, styles: [":host{display:block}.attribute-selector-container{display:flex;flex-direction:column;padding:16px 20px;min-width:800px;box-sizing:border-box;gap:16px}.search-container{flex-shrink:0}.search-input{width:100%}.lists-container{display:flex;gap:16px;align-items:flex-start}.list-section{flex:1;display:flex;flex-direction:column}.list-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600}.attribute-grid{border-radius:4px}.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}\n"] }]
2867
- }], ctorParameters: () => [] });
2983
+ <div class="action-bar">
2984
+ <button kendoButton (click)="onCancel()">Cancel</button>
2985
+ <button kendoButton themeColor="primary" [disabled]="singleSelect && selectedSingleKey.length === 0" (click)="onConfirm()">OK</button>
2986
+ </div>
2987
+ </div>
2988
+ `, styles: [":host{display:block;height:100%}.attribute-selector-container{display:flex;flex-direction:column;height:100%;padding:16px 20px;box-sizing:border-box;gap:16px}.filter-container{display:flex;gap:12px;flex-shrink:0}.search-input{flex:1}.type-filter-dropdown{width:160px;flex-shrink:0}.options-container{display:flex;align-items:center;gap:8px;font-size:.85rem;flex-shrink:0}.option-label{cursor:pointer}.depth-input{width:90px}.lists-container{display:flex;gap:16px;flex:1;min-height:0}.list-section{flex:1;display:flex;flex-direction:column;min-height:0}.list-section h4{margin:0 0 10px;font-size:.85rem;font-weight:600;flex-shrink:0}.attribute-grid{border-radius:4px;flex:1;min-height:200px}.attribute-grid ::ng-deep .k-grid-table tbody tr{cursor:pointer}.action-buttons{display:flex;flex-direction:column;gap:8px;justify-content:center;padding:32px 8px 0}.separator{height:1px;background-color:var(--kendo-color-border, #dee2e6);margin:8px 0}.order-buttons{display:flex;flex-direction:column;gap:8px;justify-content:center;padding:32px 8px 0}.order-number{color:var(--kendo-color-primary, #ff6358);font-weight:600;margin-right:8px;min-width:24px;display:inline-block}.single-select-container{flex:1;min-height:0;display:flex;flex-direction:column}.single-select-container .attribute-grid{flex:1}.action-bar{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0;padding-top:8px;border-top:1px solid var(--kendo-color-border, #dee2e6)}\n"] }]
2989
+ }] });
2868
2990
 
2869
2991
  class AttributeSelectorDialogService {
2870
- dialogService = inject(DialogService);
2992
+ windowService = inject(WindowService);
2871
2993
  /**
2872
2994
  * Opens the attribute selector dialog
2873
2995
  * @param rtCkTypeId The RtCkType ID to fetch attributes for
2874
2996
  * @param selectedAttributes Optional array of pre-selected attribute paths
2875
2997
  * @param dialogTitle Optional custom dialog title
2998
+ * @param singleSelect Optional flag for single-select mode
2876
2999
  * @returns Promise that resolves with the result containing selected attributes and confirmation status
2877
3000
  */
2878
3001
  async openAttributeSelector(rtCkTypeId, selectedAttributes, dialogTitle, singleSelect) {
@@ -2882,20 +3005,29 @@ class AttributeSelectorDialogService {
2882
3005
  dialogTitle,
2883
3006
  singleSelect
2884
3007
  };
2885
- const dialogRef = this.dialogService.open({
3008
+ const windowRef = this.windowService.open({
2886
3009
  content: AttributeSelectorDialogComponent,
2887
- width: singleSelect ? 500 : 900,
2888
- height: singleSelect ? 600 : 700,
2889
- minWidth: singleSelect ? 400 : 800,
2890
- minHeight: singleSelect ? 500 : 650,
3010
+ width: singleSelect ? 550 : 1000,
3011
+ height: singleSelect ? 650 : 700,
3012
+ minWidth: singleSelect ? 450 : 850,
3013
+ minHeight: singleSelect ? 550 : 650,
3014
+ resizable: true,
2891
3015
  title: dialogTitle || 'Select Attributes'
2892
3016
  });
2893
3017
  // Pass data to the component
2894
- if (dialogRef.content?.instance) {
2895
- dialogRef.content.instance.data = data;
3018
+ const contentRef = windowRef.content;
3019
+ if (contentRef?.instance) {
3020
+ contentRef.instance.data = data;
2896
3021
  }
2897
3022
  try {
2898
- const result = await firstValueFrom(dialogRef.result);
3023
+ const result = await firstValueFrom(windowRef.result);
3024
+ if (result instanceof WindowCloseResult) {
3025
+ // User closed the window via X button
3026
+ return {
3027
+ confirmed: false,
3028
+ selectedAttributes: []
3029
+ };
3030
+ }
2899
3031
  if (result && typeof result === 'object' && 'selectedAttributes' in result) {
2900
3032
  // User clicked OK and we have a result
2901
3033
  const dialogResult = result;
@@ -2920,10 +3052,10 @@ class AttributeSelectorDialogService {
2920
3052
  };
2921
3053
  }
2922
3054
  }
2923
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2924
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSelectorDialogService });
3055
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSelectorDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3056
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSelectorDialogService });
2925
3057
  }
2926
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AttributeSelectorDialogService, decorators: [{
3058
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AttributeSelectorDialogService, decorators: [{
2927
3059
  type: Injectable
2928
3060
  }] });
2929
3061
 
@@ -3121,8 +3253,8 @@ class CkTypeSelectorInputComponent {
3121
3253
  this.selectCkType(result.selectedCkType);
3122
3254
  }
3123
3255
  }
3124
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CkTypeSelectorInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3125
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.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", disabled: "disabled", required: "required" }, outputs: { ckTypeSelected: "ckTypeSelected", ckTypeCleared: "ckTypeCleared" }, providers: [
3256
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: CkTypeSelectorInputComponent, isStandalone: true, selector: "mm-ck-type-selector-input", inputs: { placeholder: "placeholder", minSearchLength: "minSearchLength", maxResults: "maxResults", debounceMs: "debounceMs", ckModelIds: "ckModelIds", allowAbstract: "allowAbstract", dialogTitle: "dialogTitle", advancedSearchLabel: "advancedSearchLabel", derivedFromRtCkTypeId: "derivedFromRtCkTypeId", disabled: "disabled", required: "required" }, outputs: { ckTypeSelected: "ckTypeSelected", ckTypeCleared: "ckTypeCleared" }, providers: [
3126
3258
  {
3127
3259
  provide: NG_VALUE_ACCESSOR,
3128
3260
  useExisting: forwardRef(() => CkTypeSelectorInputComponent),
@@ -3186,9 +3318,9 @@ class CkTypeSelectorInputComponent {
3186
3318
  (click)="openDialog()">
3187
3319
  </button>
3188
3320
  </div>
3189
- `, 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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.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: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: IconsModule }, { kind: "component", type: i5$2.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: SVGIconModule }] });
3321
+ `, 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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.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: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: IconsModule }, { kind: "component", type: i5$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "ngmodule", type: SVGIconModule }] });
3190
3322
  }
3191
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CkTypeSelectorInputComponent, decorators: [{
3323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorInputComponent, decorators: [{
3192
3324
  type: Component,
3193
3325
  args: [{ selector: 'mm-ck-type-selector-input', standalone: true, imports: [
3194
3326
  CommonModule,
@@ -3684,8 +3816,8 @@ class FieldFilterEditorComponent {
3684
3816
  }
3685
3817
  return values;
3686
3818
  }
3687
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FieldFilterEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3688
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: FieldFilterEditorComponent, isStandalone: true, selector: "mm-field-filter-editor", inputs: { availableAttributes: "availableAttributes", enableVariables: "enableVariables", availableVariables: "availableVariables", filters: "filters" }, outputs: { filtersChange: "filtersChange" }, usesOnChanges: true, ngImport: i0, template: `
3819
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: FieldFilterEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3820
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: FieldFilterEditorComponent, isStandalone: true, selector: "mm-field-filter-editor", inputs: { availableAttributes: "availableAttributes", enableVariables: "enableVariables", availableVariables: "availableVariables", filters: "filters" }, outputs: { filtersChange: "filtersChange" }, usesOnChanges: true, ngImport: i0, template: `
3689
3821
  <div class="field-filter-editor">
3690
3822
  <div class="toolbar">
3691
3823
  <button
@@ -3914,9 +4046,9 @@ class FieldFilterEditorComponent {
3914
4046
  </div>
3915
4047
  }
3916
4048
  </div>
3917
- `, isInline: true, styles: [".field-filter-editor{display:flex;flex-direction:column;gap:10px}.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i3.HeaderTemplateDirective, selector: "[kendoGridHeaderTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i3$1.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { 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: "ngmodule", type: DateInputsModule }, { kind: "component", type: i6.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 }] });
4049
+ `, isInline: true, styles: [".field-filter-editor{display:flex;flex-direction:column;gap:10px}.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "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: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i3$1.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { 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: "ngmodule", type: DateInputsModule }, { kind: "component", type: i6.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 }] });
3918
4050
  }
3919
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FieldFilterEditorComponent, decorators: [{
4051
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: FieldFilterEditorComponent, decorators: [{
3920
4052
  type: Component,
3921
4053
  args: [{ selector: 'mm-field-filter-editor', standalone: true, imports: [
3922
4054
  CommonModule,
@@ -4238,8 +4370,8 @@ class EntityIdInfoComponent {
4238
4370
  this.notificationService.showError('Failed to copy to clipboard');
4239
4371
  }
4240
4372
  }
4241
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: EntityIdInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4242
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: EntityIdInfoComponent, isStandalone: true, selector: "mm-entity-id-info", inputs: { rtId: "rtId", rtCkTypeId: "rtCkTypeId", ckTypeId: "ckTypeId" }, ngImport: i0, template: `
4373
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: EntityIdInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4374
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: EntityIdInfoComponent, isStandalone: true, selector: "mm-entity-id-info", inputs: { rtId: "rtId", rtCkTypeId: "rtCkTypeId", ckTypeId: "ckTypeId" }, ngImport: i0, template: `
4243
4375
  <kendo-dropdownbutton
4244
4376
  [data]="copyOptions"
4245
4377
  [svgIcon]="copyIcon"
@@ -4257,7 +4389,7 @@ class EntityIdInfoComponent {
4257
4389
  </kendo-dropdownbutton>
4258
4390
  `, 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: i4.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: i4.ButtonItemTemplateDirective, selector: "[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]" }, { kind: "ngmodule", type: SVGIconModule }] });
4259
4391
  }
4260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: EntityIdInfoComponent, decorators: [{
4392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: EntityIdInfoComponent, decorators: [{
4261
4393
  type: Component,
4262
4394
  args: [{ selector: 'mm-entity-id-info', standalone: true, imports: [
4263
4395
  CommonModule,
@@ -4306,8 +4438,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4306
4438
  */
4307
4439
  class OctoLoaderComponent {
4308
4440
  size = 'medium';
4309
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: OctoLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4310
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: OctoLoaderComponent, isStandalone: true, selector: "mm-octo-loader", inputs: { size: "size" }, ngImport: i0, template: `
4441
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: OctoLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4442
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: OctoLoaderComponent, isStandalone: true, selector: "mm-octo-loader", inputs: { size: "size" }, ngImport: i0, template: `
4311
4443
  <div class="octo-loader" [class.octo-loader--small]="size === 'small'" [class.octo-loader--medium]="size === 'medium'">
4312
4444
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="-22 -8 112 118" class="octo-loader__svg" overflow="visible">
4313
4445
  <!-- Orbit track -->
@@ -4398,7 +4530,7 @@ class OctoLoaderComponent {
4398
4530
  </div>
4399
4531
  `, 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"] });
4400
4532
  }
4401
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: OctoLoaderComponent, decorators: [{
4533
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: OctoLoaderComponent, decorators: [{
4402
4534
  type: Component,
4403
4535
  args: [{ selector: 'mm-octo-loader', standalone: true, template: `
4404
4536
  <div class="octo-loader" [class.octo-loader--small]="size === 'small'" [class.octo-loader--medium]="size === 'medium'">