@meshmakers/octo-meshboard 3.3.620 → 3.3.630
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.
|
@@ -79,10 +79,10 @@ class GetSystemPersistentQueriesDtoGQL extends i1.Query {
|
|
|
79
79
|
constructor(apollo) {
|
|
80
80
|
super(apollo);
|
|
81
81
|
}
|
|
82
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
83
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
82
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSystemPersistentQueriesDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
83
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSystemPersistentQueriesDtoGQL, providedIn: 'root' });
|
|
84
84
|
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSystemPersistentQueriesDtoGQL, decorators: [{
|
|
86
86
|
type: Injectable,
|
|
87
87
|
args: [{
|
|
88
88
|
providedIn: 'root'
|
|
@@ -276,8 +276,8 @@ class QuerySelectorComponent {
|
|
|
276
276
|
setDisabledState(isDisabled) {
|
|
277
277
|
this.disabled = isDisabled;
|
|
278
278
|
}
|
|
279
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
280
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
279
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: QuerySelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
280
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: QuerySelectorComponent, isStandalone: true, selector: "mm-query-selector", inputs: { placeholder: "placeholder", hint: "hint", disabled: "disabled" }, outputs: { querySelected: "querySelected", queriesLoaded: "queriesLoaded" }, providers: [
|
|
281
281
|
{
|
|
282
282
|
provide: NG_VALUE_ACCESSOR,
|
|
283
283
|
useExisting: forwardRef(() => QuerySelectorComponent),
|
|
@@ -303,7 +303,7 @@ class QuerySelectorComponent {
|
|
|
303
303
|
</div>
|
|
304
304
|
`, isInline: true, styles: [".query-selector{width:100%}.field-hint{font-size:.85em;margin-top:4px;opacity:.7}\n"], dependencies: [{ kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }] });
|
|
305
305
|
}
|
|
306
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
306
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: QuerySelectorComponent, decorators: [{
|
|
307
307
|
type: Component,
|
|
308
308
|
args: [{ selector: 'mm-query-selector', standalone: true, imports: [
|
|
309
309
|
EntitySelectInputComponent
|
|
@@ -382,10 +382,10 @@ class GetEntitiesByCkTypeDtoGQL extends i1.Query {
|
|
|
382
382
|
constructor(apollo) {
|
|
383
383
|
super(apollo);
|
|
384
384
|
}
|
|
385
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
386
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
385
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetEntitiesByCkTypeDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
386
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetEntitiesByCkTypeDtoGQL, providedIn: 'root' });
|
|
387
387
|
}
|
|
388
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetEntitiesByCkTypeDtoGQL, decorators: [{
|
|
389
389
|
type: Injectable,
|
|
390
390
|
args: [{
|
|
391
391
|
providedIn: 'root'
|
|
@@ -565,8 +565,8 @@ class RuntimeEntitySelectorComponent {
|
|
|
565
565
|
setDisabledState(isDisabled) {
|
|
566
566
|
this.disabled = isDisabled;
|
|
567
567
|
}
|
|
568
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
569
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
568
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: RuntimeEntitySelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
569
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: RuntimeEntitySelectorComponent, isStandalone: true, selector: "mm-runtime-entity-selector", inputs: { ckTypeLabel: "ckTypeLabel", ckTypePlaceholder: "ckTypePlaceholder", ckTypeDialogTitle: "ckTypeDialogTitle", ckTypeHint: "ckTypeHint", ckTypeRequired: "ckTypeRequired", entityLabel: "entityLabel", entityPlaceholder: "entityPlaceholder", entityDialogTitle: "entityDialogTitle", entityHint: "entityHint", entityRequired: "entityRequired", showEntitySelector: "showEntitySelector", disabled: "disabled" }, outputs: { ckTypeSelected: "ckTypeSelected", ckTypeCleared: "ckTypeCleared", entitySelected: "entitySelected", entityCleared: "entityCleared", valueChange: "valueChange" }, providers: [
|
|
570
570
|
{
|
|
571
571
|
provide: NG_VALUE_ACCESSOR,
|
|
572
572
|
useExisting: forwardRef(() => RuntimeEntitySelectorComponent),
|
|
@@ -621,7 +621,7 @@ class RuntimeEntitySelectorComponent {
|
|
|
621
621
|
</div>
|
|
622
622
|
`, isInline: true, styles: [".runtime-entity-selector{display:flex;flex-direction:column;gap:16px}.form-field{display:flex;flex-direction:column;gap:4px}.form-field label{font-weight:500}.form-field.disabled{opacity:.6}.field-hint{font-size:.85em;margin:0;opacity:.7}.required{color:#dc3545}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }] });
|
|
623
623
|
}
|
|
624
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
624
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: RuntimeEntitySelectorComponent, decorators: [{
|
|
625
625
|
type: Component,
|
|
626
626
|
args: [{ selector: 'mm-runtime-entity-selector', standalone: true, imports: [
|
|
627
627
|
CommonModule,
|
|
@@ -729,15 +729,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
729
729
|
* Used by all widget types when they are not properly configured.
|
|
730
730
|
*/
|
|
731
731
|
class WidgetNotConfiguredComponent {
|
|
732
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
733
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
732
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetNotConfiguredComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
733
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: WidgetNotConfiguredComponent, isStandalone: true, selector: "mm-widget-not-configured", ngImport: i0, template: `
|
|
734
734
|
<div class="widget-not-configured">
|
|
735
735
|
<span class="warning-icon">!</span>
|
|
736
736
|
<span class="message">Widget not configured</span>
|
|
737
737
|
</div>
|
|
738
738
|
`, isInline: true, styles: [".widget-not-configured{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px;color:var(--kendo-color-error, #dc3545)}.warning-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:#dc35451a;font-weight:700;font-size:1.25rem}.message{font-size:.875rem;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
739
739
|
}
|
|
740
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
740
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetNotConfiguredComponent, decorators: [{
|
|
741
741
|
type: Component,
|
|
742
742
|
args: [{ selector: 'mm-widget-not-configured', standalone: true, imports: [CommonModule], template: `
|
|
743
743
|
<div class="widget-not-configured">
|
|
@@ -773,10 +773,10 @@ class GetDashboardsDtoGQL extends i1.Query {
|
|
|
773
773
|
constructor(apollo) {
|
|
774
774
|
super(apollo);
|
|
775
775
|
}
|
|
776
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
777
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
776
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardsDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
777
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardsDtoGQL, providedIn: 'root' });
|
|
778
778
|
}
|
|
779
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
779
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardsDtoGQL, decorators: [{
|
|
780
780
|
type: Injectable,
|
|
781
781
|
args: [{
|
|
782
782
|
providedIn: 'root'
|
|
@@ -807,10 +807,10 @@ class CreateDashboardDtoGQL extends i1.Mutation {
|
|
|
807
807
|
constructor(apollo) {
|
|
808
808
|
super(apollo);
|
|
809
809
|
}
|
|
810
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
811
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
810
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateDashboardDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
811
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateDashboardDtoGQL, providedIn: 'root' });
|
|
812
812
|
}
|
|
813
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
813
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateDashboardDtoGQL, decorators: [{
|
|
814
814
|
type: Injectable,
|
|
815
815
|
args: [{
|
|
816
816
|
providedIn: 'root'
|
|
@@ -841,10 +841,10 @@ class UpdateDashboardDtoGQL extends i1.Mutation {
|
|
|
841
841
|
constructor(apollo) {
|
|
842
842
|
super(apollo);
|
|
843
843
|
}
|
|
844
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
845
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
844
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateDashboardDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
845
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateDashboardDtoGQL, providedIn: 'root' });
|
|
846
846
|
}
|
|
847
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
847
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateDashboardDtoGQL, decorators: [{
|
|
848
848
|
type: Injectable,
|
|
849
849
|
args: [{
|
|
850
850
|
providedIn: 'root'
|
|
@@ -879,10 +879,10 @@ class CreateDashboardWidgetDtoGQL extends i1.Mutation {
|
|
|
879
879
|
constructor(apollo) {
|
|
880
880
|
super(apollo);
|
|
881
881
|
}
|
|
882
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
883
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
882
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateDashboardWidgetDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
883
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateDashboardWidgetDtoGQL, providedIn: 'root' });
|
|
884
884
|
}
|
|
885
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
885
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateDashboardWidgetDtoGQL, decorators: [{
|
|
886
886
|
type: Injectable,
|
|
887
887
|
args: [{
|
|
888
888
|
providedIn: 'root'
|
|
@@ -917,10 +917,10 @@ class UpdateDashboardWidgetDtoGQL extends i1.Mutation {
|
|
|
917
917
|
constructor(apollo) {
|
|
918
918
|
super(apollo);
|
|
919
919
|
}
|
|
920
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
921
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
920
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateDashboardWidgetDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
921
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateDashboardWidgetDtoGQL, providedIn: 'root' });
|
|
922
922
|
}
|
|
923
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
923
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateDashboardWidgetDtoGQL, decorators: [{
|
|
924
924
|
type: Injectable,
|
|
925
925
|
args: [{
|
|
926
926
|
providedIn: 'root'
|
|
@@ -941,10 +941,10 @@ class DeleteEntitiesDtoGQL extends i1.Mutation {
|
|
|
941
941
|
constructor(apollo) {
|
|
942
942
|
super(apollo);
|
|
943
943
|
}
|
|
944
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
945
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
944
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteEntitiesDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
945
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteEntitiesDtoGQL, providedIn: 'root' });
|
|
946
946
|
}
|
|
947
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
947
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteEntitiesDtoGQL, decorators: [{
|
|
948
948
|
type: Injectable,
|
|
949
949
|
args: [{
|
|
950
950
|
providedIn: 'root'
|
|
@@ -994,10 +994,10 @@ class GetDashboardWithWidgetsDtoGQL extends i1.Query {
|
|
|
994
994
|
constructor(apollo) {
|
|
995
995
|
super(apollo);
|
|
996
996
|
}
|
|
997
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
998
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
997
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardWithWidgetsDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
998
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardWithWidgetsDtoGQL, providedIn: 'root' });
|
|
999
999
|
}
|
|
1000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardWithWidgetsDtoGQL, decorators: [{
|
|
1001
1001
|
type: Injectable,
|
|
1002
1002
|
args: [{
|
|
1003
1003
|
providedIn: 'root'
|
|
@@ -1300,10 +1300,10 @@ class WidgetRegistryService {
|
|
|
1300
1300
|
document.head.appendChild(style);
|
|
1301
1301
|
WidgetRegistryService.scrollbarStylesInjected = true;
|
|
1302
1302
|
}
|
|
1303
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1304
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1303
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1304
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetRegistryService, providedIn: 'root' });
|
|
1305
1305
|
}
|
|
1306
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1306
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetRegistryService, decorators: [{
|
|
1307
1307
|
type: Injectable,
|
|
1308
1308
|
args: [{
|
|
1309
1309
|
providedIn: 'root'
|
|
@@ -1694,10 +1694,10 @@ class MeshBoardPersistenceService {
|
|
|
1694
1694
|
return { description, variables: [] };
|
|
1695
1695
|
}
|
|
1696
1696
|
}
|
|
1697
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1698
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1697
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardPersistenceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1698
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardPersistenceService, providedIn: 'root' });
|
|
1699
1699
|
}
|
|
1700
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1700
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardPersistenceService, decorators: [{
|
|
1701
1701
|
type: Injectable,
|
|
1702
1702
|
args: [{
|
|
1703
1703
|
providedIn: 'root'
|
|
@@ -1839,10 +1839,10 @@ class MeshBoardGridService {
|
|
|
1839
1839
|
}
|
|
1840
1840
|
return { col: 1, row: maxRow };
|
|
1841
1841
|
}
|
|
1842
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1843
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1842
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardGridService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1843
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardGridService, providedIn: 'root' });
|
|
1844
1844
|
}
|
|
1845
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1845
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardGridService, decorators: [{
|
|
1846
1846
|
type: Injectable,
|
|
1847
1847
|
args: [{
|
|
1848
1848
|
providedIn: 'root'
|
|
@@ -1863,25 +1863,25 @@ class MeshBoardStateService {
|
|
|
1863
1863
|
persistenceService = inject(MeshBoardPersistenceService);
|
|
1864
1864
|
gridService = inject(MeshBoardGridService);
|
|
1865
1865
|
// Reactive state signals
|
|
1866
|
-
_meshBoardConfig = signal(this.createDefaultConfig(), ...(ngDevMode ? [{ debugName: "_meshBoardConfig" }] : []));
|
|
1867
|
-
_persistedMeshBoardId = signal(null, ...(ngDevMode ? [{ debugName: "_persistedMeshBoardId" }] : []));
|
|
1866
|
+
_meshBoardConfig = signal(this.createDefaultConfig(), ...(ngDevMode ? [{ debugName: "_meshBoardConfig" }] : /* istanbul ignore next */ []));
|
|
1867
|
+
_persistedMeshBoardId = signal(null, ...(ngDevMode ? [{ debugName: "_persistedMeshBoardId" }] : /* istanbul ignore next */ []));
|
|
1868
1868
|
/** Stores the rtIds of widgets that exist in the backend */
|
|
1869
|
-
_existingWidgetRtIds = signal([], ...(ngDevMode ? [{ debugName: "_existingWidgetRtIds" }] : []));
|
|
1870
|
-
_availableMeshBoards = signal([], ...(ngDevMode ? [{ debugName: "_availableMeshBoards" }] : []));
|
|
1871
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
1872
|
-
_isModelAvailable = signal(null, ...(ngDevMode ? [{ debugName: "_isModelAvailable" }] : []));
|
|
1873
|
-
_variableResolutionErrors = signal([], ...(ngDevMode ? [{ debugName: "_variableResolutionErrors" }] : []));
|
|
1869
|
+
_existingWidgetRtIds = signal([], ...(ngDevMode ? [{ debugName: "_existingWidgetRtIds" }] : /* istanbul ignore next */ []));
|
|
1870
|
+
_availableMeshBoards = signal([], ...(ngDevMode ? [{ debugName: "_availableMeshBoards" }] : /* istanbul ignore next */ []));
|
|
1871
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
1872
|
+
_isModelAvailable = signal(null, ...(ngDevMode ? [{ debugName: "_isModelAvailable" }] : /* istanbul ignore next */ []));
|
|
1873
|
+
_variableResolutionErrors = signal([], ...(ngDevMode ? [{ debugName: "_variableResolutionErrors" }] : /* istanbul ignore next */ []));
|
|
1874
1874
|
// Public computed signals
|
|
1875
|
-
meshBoardConfig = computed(() => this._meshBoardConfig(), ...(ngDevMode ? [{ debugName: "meshBoardConfig" }] : []));
|
|
1876
|
-
persistedMeshBoardId = computed(() => this._persistedMeshBoardId(), ...(ngDevMode ? [{ debugName: "persistedMeshBoardId" }] : []));
|
|
1875
|
+
meshBoardConfig = computed(() => this._meshBoardConfig(), ...(ngDevMode ? [{ debugName: "meshBoardConfig" }] : /* istanbul ignore next */ []));
|
|
1876
|
+
persistedMeshBoardId = computed(() => this._persistedMeshBoardId(), ...(ngDevMode ? [{ debugName: "persistedMeshBoardId" }] : /* istanbul ignore next */ []));
|
|
1877
1877
|
/** @deprecated Use existingWidgetRtIds instead */
|
|
1878
|
-
existingWidgetIds = computed(() => this._existingWidgetRtIds(), ...(ngDevMode ? [{ debugName: "existingWidgetIds" }] : []));
|
|
1879
|
-
existingWidgetRtIds = computed(() => this._existingWidgetRtIds(), ...(ngDevMode ? [{ debugName: "existingWidgetRtIds" }] : []));
|
|
1880
|
-
availableMeshBoards = computed(() => this._availableMeshBoards(), ...(ngDevMode ? [{ debugName: "availableMeshBoards" }] : []));
|
|
1881
|
-
isLoading = computed(() => this._isLoading(), ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
1882
|
-
widgets = computed(() => this._meshBoardConfig().widgets, ...(ngDevMode ? [{ debugName: "widgets" }] : []));
|
|
1883
|
-
isModelAvailable = computed(() => this._isModelAvailable(), ...(ngDevMode ? [{ debugName: "isModelAvailable" }] : []));
|
|
1884
|
-
variableResolutionErrors = computed(() => this._variableResolutionErrors(), ...(ngDevMode ? [{ debugName: "variableResolutionErrors" }] : []));
|
|
1878
|
+
existingWidgetIds = computed(() => this._existingWidgetRtIds(), ...(ngDevMode ? [{ debugName: "existingWidgetIds" }] : /* istanbul ignore next */ []));
|
|
1879
|
+
existingWidgetRtIds = computed(() => this._existingWidgetRtIds(), ...(ngDevMode ? [{ debugName: "existingWidgetRtIds" }] : /* istanbul ignore next */ []));
|
|
1880
|
+
availableMeshBoards = computed(() => this._availableMeshBoards(), ...(ngDevMode ? [{ debugName: "availableMeshBoards" }] : /* istanbul ignore next */ []));
|
|
1881
|
+
isLoading = computed(() => this._isLoading(), ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
1882
|
+
widgets = computed(() => this._meshBoardConfig().widgets, ...(ngDevMode ? [{ debugName: "widgets" }] : /* istanbul ignore next */ []));
|
|
1883
|
+
isModelAvailable = computed(() => this._isModelAvailable(), ...(ngDevMode ? [{ debugName: "isModelAvailable" }] : /* istanbul ignore next */ []));
|
|
1884
|
+
variableResolutionErrors = computed(() => this._variableResolutionErrors(), ...(ngDevMode ? [{ debugName: "variableResolutionErrors" }] : /* istanbul ignore next */ []));
|
|
1885
1885
|
// Deprecated aliases for backward compatibility
|
|
1886
1886
|
/** @deprecated Use meshBoardConfig instead */
|
|
1887
1887
|
dashboardConfig = this.meshBoardConfig;
|
|
@@ -2430,10 +2430,10 @@ class MeshBoardStateService {
|
|
|
2430
2430
|
const currentVars = this.getVariables().filter(v => !(v.source === 'entitySelector' && v.entitySelectorId === selectorId));
|
|
2431
2431
|
this.updateVariables(currentVars);
|
|
2432
2432
|
}
|
|
2433
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2434
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2433
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2434
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardStateService, providedIn: 'root' });
|
|
2435
2435
|
}
|
|
2436
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2436
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardStateService, decorators: [{
|
|
2437
2437
|
type: Injectable,
|
|
2438
2438
|
args: [{
|
|
2439
2439
|
providedIn: 'root'
|
|
@@ -2478,10 +2478,10 @@ class GetDashboardEntityDtoGQL extends i1.Query {
|
|
|
2478
2478
|
constructor(apollo) {
|
|
2479
2479
|
super(apollo);
|
|
2480
2480
|
}
|
|
2481
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2482
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2481
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardEntityDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2482
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardEntityDtoGQL, providedIn: 'root' });
|
|
2483
2483
|
}
|
|
2484
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2484
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetDashboardEntityDtoGQL, decorators: [{
|
|
2485
2485
|
type: Injectable,
|
|
2486
2486
|
args: [{
|
|
2487
2487
|
providedIn: 'root'
|
|
@@ -2511,10 +2511,10 @@ class GetCkModelsWithStateDtoGQL extends i1.Query {
|
|
|
2511
2511
|
constructor(apollo) {
|
|
2512
2512
|
super(apollo);
|
|
2513
2513
|
}
|
|
2514
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2515
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkModelsWithStateDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2515
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkModelsWithStateDtoGQL, providedIn: 'root' });
|
|
2516
2516
|
}
|
|
2517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2517
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkModelsWithStateDtoGQL, decorators: [{
|
|
2518
2518
|
type: Injectable,
|
|
2519
2519
|
args: [{
|
|
2520
2520
|
providedIn: 'root'
|
|
@@ -2562,10 +2562,10 @@ class ExecuteRuntimeQueryDtoGQL extends i1.Query {
|
|
|
2562
2562
|
constructor(apollo) {
|
|
2563
2563
|
super(apollo);
|
|
2564
2564
|
}
|
|
2565
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2566
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2565
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ExecuteRuntimeQueryDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2566
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ExecuteRuntimeQueryDtoGQL, providedIn: 'root' });
|
|
2567
2567
|
}
|
|
2568
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2568
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ExecuteRuntimeQueryDtoGQL, decorators: [{
|
|
2569
2569
|
type: Injectable,
|
|
2570
2570
|
args: [{
|
|
2571
2571
|
providedIn: 'root'
|
|
@@ -2608,10 +2608,10 @@ class GetAssociationTargetsDtoGQL extends i1.Query {
|
|
|
2608
2608
|
constructor(apollo) {
|
|
2609
2609
|
super(apollo);
|
|
2610
2610
|
}
|
|
2611
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2612
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2611
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetAssociationTargetsDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2612
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetAssociationTargetsDtoGQL, providedIn: 'root' });
|
|
2613
2613
|
}
|
|
2614
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2614
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetAssociationTargetsDtoGQL, decorators: [{
|
|
2615
2615
|
type: Injectable,
|
|
2616
2616
|
args: [{
|
|
2617
2617
|
providedIn: 'root'
|
|
@@ -2640,10 +2640,10 @@ class GetCkTypeAttributesForMeshboardDtoGQL extends i1.Query {
|
|
|
2640
2640
|
constructor(apollo) {
|
|
2641
2641
|
super(apollo);
|
|
2642
2642
|
}
|
|
2643
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2644
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2643
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkTypeAttributesForMeshboardDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2644
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkTypeAttributesForMeshboardDtoGQL, providedIn: 'root' });
|
|
2645
2645
|
}
|
|
2646
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2646
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkTypeAttributesForMeshboardDtoGQL, decorators: [{
|
|
2647
2647
|
type: Injectable,
|
|
2648
2648
|
args: [{
|
|
2649
2649
|
providedIn: 'root'
|
|
@@ -2830,10 +2830,10 @@ class MeshBoardVariableService {
|
|
|
2830
2830
|
defaultValue
|
|
2831
2831
|
};
|
|
2832
2832
|
}
|
|
2833
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
2834
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2833
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardVariableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2834
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardVariableService, providedIn: 'root' });
|
|
2835
2835
|
}
|
|
2836
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2836
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardVariableService, decorators: [{
|
|
2837
2837
|
type: Injectable,
|
|
2838
2838
|
args: [{
|
|
2839
2839
|
providedIn: 'root'
|
|
@@ -3267,10 +3267,10 @@ class MeshBoardDataService {
|
|
|
3267
3267
|
value
|
|
3268
3268
|
}));
|
|
3269
3269
|
}
|
|
3270
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3271
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
3270
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3271
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardDataService, providedIn: 'root' });
|
|
3272
3272
|
}
|
|
3273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardDataService, decorators: [{
|
|
3274
3274
|
type: Injectable,
|
|
3275
3275
|
args: [{
|
|
3276
3276
|
providedIn: 'root'
|
|
@@ -3317,10 +3317,10 @@ class WidgetFactoryService {
|
|
|
3317
3317
|
getDefaultSize(type) {
|
|
3318
3318
|
return this.registry.getDefaultSize(type);
|
|
3319
3319
|
}
|
|
3320
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3321
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
3320
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetFactoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3321
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetFactoryService, providedIn: 'root' });
|
|
3322
3322
|
}
|
|
3323
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3323
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetFactoryService, decorators: [{
|
|
3324
3324
|
type: Injectable,
|
|
3325
3325
|
args: [{
|
|
3326
3326
|
providedIn: 'root'
|
|
@@ -3333,12 +3333,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
3333
3333
|
*/
|
|
3334
3334
|
class EditModeStateService {
|
|
3335
3335
|
// Reactive signals for state
|
|
3336
|
-
_isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "_isEditMode" }] : []));
|
|
3337
|
-
_isSaving = signal(false, ...(ngDevMode ? [{ debugName: "_isSaving" }] : []));
|
|
3336
|
+
_isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "_isEditMode" }] : /* istanbul ignore next */ []));
|
|
3337
|
+
_isSaving = signal(false, ...(ngDevMode ? [{ debugName: "_isSaving" }] : /* istanbul ignore next */ []));
|
|
3338
3338
|
snapshot = null;
|
|
3339
3339
|
// Public computed signals
|
|
3340
|
-
isEditMode = computed(() => this._isEditMode(), ...(ngDevMode ? [{ debugName: "isEditMode" }] : []));
|
|
3341
|
-
isSaving = computed(() => this._isSaving(), ...(ngDevMode ? [{ debugName: "isSaving" }] : []));
|
|
3340
|
+
isEditMode = computed(() => this._isEditMode(), ...(ngDevMode ? [{ debugName: "isEditMode" }] : /* istanbul ignore next */ []));
|
|
3341
|
+
isSaving = computed(() => this._isSaving(), ...(ngDevMode ? [{ debugName: "isSaving" }] : /* istanbul ignore next */ []));
|
|
3342
3342
|
/**
|
|
3343
3343
|
* Enters edit mode and creates a snapshot of the provided data.
|
|
3344
3344
|
* @param data The data to snapshot for potential restoration
|
|
@@ -3431,10 +3431,10 @@ class EditModeStateService {
|
|
|
3431
3431
|
this._isSaving.set(false);
|
|
3432
3432
|
this.snapshot = null;
|
|
3433
3433
|
}
|
|
3434
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3435
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
3434
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EditModeStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3435
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EditModeStateService, providedIn: 'root' });
|
|
3436
3436
|
}
|
|
3437
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3437
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EditModeStateService, decorators: [{
|
|
3438
3438
|
type: Injectable,
|
|
3439
3439
|
args: [{
|
|
3440
3440
|
providedIn: 'root'
|
|
@@ -3445,9 +3445,9 @@ class EntityCardWidgetComponent {
|
|
|
3445
3445
|
dataService = inject(DashboardDataService);
|
|
3446
3446
|
config;
|
|
3447
3447
|
// Widget state signals
|
|
3448
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
3449
|
-
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : []));
|
|
3450
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
3448
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
3449
|
+
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
|
|
3450
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
3451
3451
|
isLoading = this._isLoading.asReadonly();
|
|
3452
3452
|
data = this._data.asReadonly();
|
|
3453
3453
|
error = this._error.asReadonly();
|
|
@@ -3474,11 +3474,11 @@ class EntityCardWidgetComponent {
|
|
|
3474
3474
|
return 'Unknown';
|
|
3475
3475
|
const parts = data.ckTypeId.split('/');
|
|
3476
3476
|
return parts[parts.length - 1];
|
|
3477
|
-
}, ...(ngDevMode ? [{ debugName: "entityTypeName" }] : []));
|
|
3477
|
+
}, ...(ngDevMode ? [{ debugName: "entityTypeName" }] : /* istanbul ignore next */ []));
|
|
3478
3478
|
displayName = computed(() => {
|
|
3479
3479
|
const data = this._data();
|
|
3480
3480
|
return data?.rtWellKnownName || data?.rtId || 'No Name';
|
|
3481
|
-
}, ...(ngDevMode ? [{ debugName: "displayName" }] : []));
|
|
3481
|
+
}, ...(ngDevMode ? [{ debugName: "displayName" }] : /* istanbul ignore next */ []));
|
|
3482
3482
|
filteredAttributes = computed(() => {
|
|
3483
3483
|
const data = this._data();
|
|
3484
3484
|
if (!data?.attributes)
|
|
@@ -3487,7 +3487,7 @@ class EntityCardWidgetComponent {
|
|
|
3487
3487
|
return data.attributes.filter(attr => this.config.attributeFilter.includes(attr.attributeName));
|
|
3488
3488
|
}
|
|
3489
3489
|
return data.attributes;
|
|
3490
|
-
}, ...(ngDevMode ? [{ debugName: "filteredAttributes" }] : []));
|
|
3490
|
+
}, ...(ngDevMode ? [{ debugName: "filteredAttributes" }] : /* istanbul ignore next */ []));
|
|
3491
3491
|
ngOnInit() {
|
|
3492
3492
|
this.loadData();
|
|
3493
3493
|
}
|
|
@@ -3550,10 +3550,10 @@ class EntityCardWidgetComponent {
|
|
|
3550
3550
|
.replace(/^./, str => str.toUpperCase())
|
|
3551
3551
|
.trim();
|
|
3552
3552
|
}
|
|
3553
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3554
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
3553
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityCardWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3554
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: EntityCardWidgetComponent, isStandalone: true, selector: "mm-entity-card-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"entity-card\" [class.no-data]=\"!data()\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else if (isLoading()) {\n <div class=\"loading-indicator\">\n <span>Loading...</span>\n </div>\n } @else if (error()) {\n <div class=\"error-message\">\n <span>{{ error() }}</span>\n </div>\n } @else if (data()) {\n <!-- Header (like UML class name) -->\n @if (config.showHeader !== false) {\n <div class=\"entity-header\">\n <span class=\"entity-stereotype\">«{{ entityTypeName() }}»</span>\n <span class=\"entity-name\">{{ displayName() }}</span>\n </div>\n }\n\n <!-- Attributes Section (like UML attributes) -->\n @if (config.showAttributes !== false && filteredAttributes().length > 0) {\n <div class=\"entity-attributes\">\n @for (attr of filteredAttributes(); track attr.attributeName) {\n <div class=\"attribute-row\">\n <span class=\"attribute-name\">{{ formatAttributeName(attr.attributeName) }}</span>\n <span class=\"attribute-value\">{{ formatValue(attr.value) }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Metadata Footer -->\n <div class=\"entity-footer\">\n <span class=\"entity-id\" title=\"Runtime ID\">{{ data()!.rtId }}</span>\n </div>\n } @else {\n <mm-widget-not-configured></mm-widget-not-configured>\n }\n</div>\n", styles: [".entity-card{display:flex;flex-direction:column;height:100%;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;overflow:hidden;background:var(--kendo-color-surface, #fff)}.entity-card.no-data,.entity-card.loading,.entity-card.error{justify-content:center;align-items:center}.entity-card.loading{color:var(--kendo-color-primary, #0d6efd)}.entity-card.error{color:var(--kendo-color-error, #dc3545)}.loading-indicator{font-size:.875rem;font-style:italic}.error-message{font-size:.875rem;padding:12px;text-align:center}.entity-header{display:flex;flex-direction:column;align-items:center;padding:12px;background:var(--kendo-color-primary, #0d6efd);color:var(--kendo-color-on-primary, #fff);text-align:center}.entity-header .entity-stereotype{font-size:.75rem;font-style:italic;opacity:.9;margin-bottom:2px}.entity-header .entity-name{font-size:1rem;font-weight:600}.entity-attributes{flex:1;padding:8px 0;overflow-y:auto}.entity-attributes .attribute-row{display:flex;justify-content:space-between;padding:6px 12px;border-bottom:1px solid var(--kendo-color-border-alt, #e9ecef);font-size:.8125rem}.entity-attributes .attribute-row:last-child{border-bottom:none}.entity-attributes .attribute-row:hover{background:var(--kendo-color-surface-alt, #f8f9fa)}.entity-attributes .attribute-name{color:var(--kendo-color-subtle, #6c757d);flex-shrink:0;margin-right:12px}.entity-attributes .attribute-value{color:var(--kendo-color-on-surface, #212529);font-weight:500;text-align:right;word-break:break-word}.entity-footer{padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa);border-top:1px solid var(--kendo-color-border, #dee2e6)}.entity-footer .entity-id{font-size:.6875rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d)}.no-data-message{font-size:.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
3555
3555
|
}
|
|
3556
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityCardWidgetComponent, decorators: [{
|
|
3557
3557
|
type: Component,
|
|
3558
3558
|
args: [{ selector: 'mm-entity-card-widget', standalone: true, imports: [CommonModule, WidgetNotConfiguredComponent], template: "<div class=\"entity-card\" [class.no-data]=\"!data()\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else if (isLoading()) {\n <div class=\"loading-indicator\">\n <span>Loading...</span>\n </div>\n } @else if (error()) {\n <div class=\"error-message\">\n <span>{{ error() }}</span>\n </div>\n } @else if (data()) {\n <!-- Header (like UML class name) -->\n @if (config.showHeader !== false) {\n <div class=\"entity-header\">\n <span class=\"entity-stereotype\">«{{ entityTypeName() }}»</span>\n <span class=\"entity-name\">{{ displayName() }}</span>\n </div>\n }\n\n <!-- Attributes Section (like UML attributes) -->\n @if (config.showAttributes !== false && filteredAttributes().length > 0) {\n <div class=\"entity-attributes\">\n @for (attr of filteredAttributes(); track attr.attributeName) {\n <div class=\"attribute-row\">\n <span class=\"attribute-name\">{{ formatAttributeName(attr.attributeName) }}</span>\n <span class=\"attribute-value\">{{ formatValue(attr.value) }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Metadata Footer -->\n <div class=\"entity-footer\">\n <span class=\"entity-id\" title=\"Runtime ID\">{{ data()!.rtId }}</span>\n </div>\n } @else {\n <mm-widget-not-configured></mm-widget-not-configured>\n }\n</div>\n", styles: [".entity-card{display:flex;flex-direction:column;height:100%;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;overflow:hidden;background:var(--kendo-color-surface, #fff)}.entity-card.no-data,.entity-card.loading,.entity-card.error{justify-content:center;align-items:center}.entity-card.loading{color:var(--kendo-color-primary, #0d6efd)}.entity-card.error{color:var(--kendo-color-error, #dc3545)}.loading-indicator{font-size:.875rem;font-style:italic}.error-message{font-size:.875rem;padding:12px;text-align:center}.entity-header{display:flex;flex-direction:column;align-items:center;padding:12px;background:var(--kendo-color-primary, #0d6efd);color:var(--kendo-color-on-primary, #fff);text-align:center}.entity-header .entity-stereotype{font-size:.75rem;font-style:italic;opacity:.9;margin-bottom:2px}.entity-header .entity-name{font-size:1rem;font-weight:600}.entity-attributes{flex:1;padding:8px 0;overflow-y:auto}.entity-attributes .attribute-row{display:flex;justify-content:space-between;padding:6px 12px;border-bottom:1px solid var(--kendo-color-border-alt, #e9ecef);font-size:.8125rem}.entity-attributes .attribute-row:last-child{border-bottom:none}.entity-attributes .attribute-row:hover{background:var(--kendo-color-surface-alt, #f8f9fa)}.entity-attributes .attribute-name{color:var(--kendo-color-subtle, #6c757d);flex-shrink:0;margin-right:12px}.entity-attributes .attribute-value{color:var(--kendo-color-on-surface, #212529);font-weight:500;text-align:right;word-break:break-word}.entity-footer{padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa);border-top:1px solid var(--kendo-color-border, #dee2e6)}.entity-footer .entity-id{font-size:.6875rem;font-family:monospace;color:var(--kendo-color-subtle, #6c757d)}.no-data-message{font-size:.875rem}\n"] }]
|
|
3559
3559
|
}], propDecorators: { config: [{
|
|
@@ -3576,14 +3576,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
3576
3576
|
*/
|
|
3577
3577
|
class LoadingOverlayComponent {
|
|
3578
3578
|
loading = false;
|
|
3579
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3580
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
3579
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LoadingOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3580
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: LoadingOverlayComponent, isStandalone: true, selector: "mm-loading-overlay", inputs: { loading: "loading" }, host: { properties: { "class.active": "loading" } }, ngImport: i0, template: `
|
|
3581
3581
|
@if (loading) {
|
|
3582
3582
|
<kendo-loader type="pulsing" size="medium"></kendo-loader>
|
|
3583
3583
|
}
|
|
3584
3584
|
`, isInline: true, styles: [":host{display:none}:host.active{display:flex;position:absolute;inset:0;align-items:center;justify-content:center;z-index:100;background:var(--kendo-color-surface-alt, #f8f9fa)}\n"], dependencies: [{ kind: "ngmodule", type: LoaderModule }, { kind: "component", type: i1$2.LoaderComponent, selector: "kendo-loader", inputs: ["type", "themeColor", "size"] }] });
|
|
3585
3585
|
}
|
|
3586
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3586
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LoadingOverlayComponent, decorators: [{
|
|
3587
3587
|
type: Component,
|
|
3588
3588
|
args: [{ selector: 'mm-loading-overlay', standalone: true, imports: [LoaderModule], host: {
|
|
3589
3589
|
'[class.active]': 'loading',
|
|
@@ -3707,8 +3707,8 @@ class EntityCardConfigDialogComponent {
|
|
|
3707
3707
|
onCancel() {
|
|
3708
3708
|
this.windowRef.close();
|
|
3709
3709
|
}
|
|
3710
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
3711
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
3710
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityCardConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3711
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: EntityCardConfigDialogComponent, isStandalone: true, selector: "mm-entity-card-config-dialog", inputs: { initialCkTypeId: "initialCkTypeId", initialRtId: "initialRtId" }, viewQueries: [{ propertyName: "ckTypeSelectorInput", first: true, predicate: ["ckTypeSelector"], descendants: true }, { propertyName: "entitySelectorInput", first: true, predicate: ["entitySelector"], descendants: true }], ngImport: i0, template: `
|
|
3712
3712
|
<div class="config-container">
|
|
3713
3713
|
|
|
3714
3714
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -3777,7 +3777,7 @@ class EntityCardConfigDialogComponent {
|
|
|
3777
3777
|
</div>
|
|
3778
3778
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.config-form{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:20px;padding:16px;position:relative}.config-form.loading{pointer-events:none}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.disabled{opacity:.6}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.selection-preview{padding:12px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.selection-preview h4{margin:0 0 8px;font-size:.9rem;color:var(--kendo-color-primary, #0d6efd)}.preview-content p{margin:4px 0;font-size:.85rem}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.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: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
3779
3779
|
}
|
|
3780
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
3780
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityCardConfigDialogComponent, decorators: [{
|
|
3781
3781
|
type: Component,
|
|
3782
3782
|
args: [{ selector: 'mm-entity-card-config-dialog', standalone: true, imports: [
|
|
3783
3783
|
CommonModule,
|
|
@@ -3877,9 +3877,9 @@ class KpiWidgetComponent {
|
|
|
3877
3877
|
arrowDownIcon = arrowDownIcon;
|
|
3878
3878
|
minusIcon = minusIcon;
|
|
3879
3879
|
// Widget state signals
|
|
3880
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
3881
|
-
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : []));
|
|
3882
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
3880
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
3881
|
+
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
|
|
3882
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
3883
3883
|
isLoading = this._isLoading.asReadonly();
|
|
3884
3884
|
data = this._data.asReadonly();
|
|
3885
3885
|
error = this._error.asReadonly();
|
|
@@ -3933,7 +3933,7 @@ class KpiWidgetComponent {
|
|
|
3933
3933
|
if (!attr)
|
|
3934
3934
|
return '-';
|
|
3935
3935
|
return this.formatDisplayValue(attr.value);
|
|
3936
|
-
}, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
3936
|
+
}, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
3937
3937
|
/**
|
|
3938
3938
|
* Gets a system property value from RuntimeEntityData.
|
|
3939
3939
|
* System properties are top-level properties like rtId, ckTypeId, rtWellKnownName.
|
|
@@ -4004,21 +4004,21 @@ class KpiWidgetComponent {
|
|
|
4004
4004
|
}
|
|
4005
4005
|
}
|
|
4006
4006
|
return '';
|
|
4007
|
-
}, ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
4007
|
+
}, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
4008
4008
|
trendIcon = computed(() => {
|
|
4009
4009
|
switch (this.config?.trend) {
|
|
4010
4010
|
case 'up': return this.arrowUpIcon;
|
|
4011
4011
|
case 'down': return this.arrowDownIcon;
|
|
4012
4012
|
default: return this.minusIcon;
|
|
4013
4013
|
}
|
|
4014
|
-
}, ...(ngDevMode ? [{ debugName: "trendIcon" }] : []));
|
|
4014
|
+
}, ...(ngDevMode ? [{ debugName: "trendIcon" }] : /* istanbul ignore next */ []));
|
|
4015
4015
|
trendClass = computed(() => {
|
|
4016
4016
|
switch (this.config?.trend) {
|
|
4017
4017
|
case 'up': return 'trend-up';
|
|
4018
4018
|
case 'down': return 'trend-down';
|
|
4019
4019
|
default: return 'trend-neutral';
|
|
4020
4020
|
}
|
|
4021
|
-
}, ...(ngDevMode ? [{ debugName: "trendClass" }] : []));
|
|
4021
|
+
}, ...(ngDevMode ? [{ debugName: "trendClass" }] : /* istanbul ignore next */ []));
|
|
4022
4022
|
ngOnInit() {
|
|
4023
4023
|
this.loadData();
|
|
4024
4024
|
}
|
|
@@ -4264,10 +4264,10 @@ class KpiWidgetComponent {
|
|
|
4264
4264
|
const variables = this.stateService.getVariables();
|
|
4265
4265
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
4266
4266
|
}
|
|
4267
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
4268
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
4267
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: KpiWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4268
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: KpiWidgetComponent, isStandalone: true, selector: "mm-kpi-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"kpi-widget\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else if (isLoading()) {\n <div class=\"loading-indicator\">\n <span>...</span>\n </div>\n } @else if (error()) {\n <div class=\"error-message\">\n <span>{{ error() }}</span>\n </div>\n } @else {\n <div class=\"kpi-content\">\n <div class=\"kpi-value-container\">\n @if (config.prefix) {\n <span class=\"kpi-prefix\">{{ config.prefix }}</span>\n }\n <span class=\"kpi-value\">{{ value() }}</span>\n @if (config.suffix) {\n <span class=\"kpi-suffix\">{{ config.suffix }}</span>\n }\n </div>\n\n @if (label()) {\n <div class=\"kpi-label\">{{ label() }}</div>\n }\n </div>\n\n @if (config.trend) {\n <div class=\"kpi-trend\" [ngClass]=\"trendClass()\">\n <kendo-svg-icon [icon]=\"trendIcon()\" size=\"medium\"></kendo-svg-icon>\n </div>\n }\n }\n</div>\n", styles: [".kpi-widget{display:flex;align-items:center;justify-content:center;height:100%;padding:16px;gap:16px}.kpi-content{display:flex;flex-direction:column;align-items:center;text-align:center}.kpi-value-container{display:flex;align-items:baseline;gap:4px}.kpi-prefix,.kpi-suffix{font-size:1.25rem;font-weight:500;color:var(--kendo-color-subtle, #6c757d)}.kpi-value{font-size:2.5rem;font-weight:700;color:var(--kendo-color-on-surface, #212529);line-height:1}.kpi-label{margin-top:8px;font-size:.875rem;color:var(--kendo-color-subtle, #6c757d)}.kpi-trend{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%}.kpi-trend.trend-up{background:#28a74526;color:var(--kendo-color-success, #28a745)}.kpi-trend.trend-down{background:#dc354526;color:var(--kendo-color-error, #dc3545)}.kpi-trend.trend-neutral{background:#6c757d26;color:var(--kendo-color-subtle, #6c757d)}@media(max-width:768px){.kpi-value{font-size:1.75rem}.kpi-prefix,.kpi-suffix{font-size:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
4269
4269
|
}
|
|
4270
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
4270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: KpiWidgetComponent, decorators: [{
|
|
4271
4271
|
type: Component,
|
|
4272
4272
|
args: [{ selector: 'mm-kpi-widget', standalone: true, imports: [CommonModule, SVGIconModule, WidgetNotConfiguredComponent], template: "<div class=\"kpi-widget\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else if (isLoading()) {\n <div class=\"loading-indicator\">\n <span>...</span>\n </div>\n } @else if (error()) {\n <div class=\"error-message\">\n <span>{{ error() }}</span>\n </div>\n } @else {\n <div class=\"kpi-content\">\n <div class=\"kpi-value-container\">\n @if (config.prefix) {\n <span class=\"kpi-prefix\">{{ config.prefix }}</span>\n }\n <span class=\"kpi-value\">{{ value() }}</span>\n @if (config.suffix) {\n <span class=\"kpi-suffix\">{{ config.suffix }}</span>\n }\n </div>\n\n @if (label()) {\n <div class=\"kpi-label\">{{ label() }}</div>\n }\n </div>\n\n @if (config.trend) {\n <div class=\"kpi-trend\" [ngClass]=\"trendClass()\">\n <kendo-svg-icon [icon]=\"trendIcon()\" size=\"medium\"></kendo-svg-icon>\n </div>\n }\n }\n</div>\n", styles: [".kpi-widget{display:flex;align-items:center;justify-content:center;height:100%;padding:16px;gap:16px}.kpi-content{display:flex;flex-direction:column;align-items:center;text-align:center}.kpi-value-container{display:flex;align-items:baseline;gap:4px}.kpi-prefix,.kpi-suffix{font-size:1.25rem;font-weight:500;color:var(--kendo-color-subtle, #6c757d)}.kpi-value{font-size:2.5rem;font-weight:700;color:var(--kendo-color-on-surface, #212529);line-height:1}.kpi-label{margin-top:8px;font-size:.875rem;color:var(--kendo-color-subtle, #6c757d)}.kpi-trend{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%}.kpi-trend.trend-up{background:#28a74526;color:var(--kendo-color-success, #28a745)}.kpi-trend.trend-down{background:#dc354526;color:var(--kendo-color-error, #dc3545)}.kpi-trend.trend-neutral{background:#6c757d26;color:var(--kendo-color-subtle, #6c757d)}@media(max-width:768px){.kpi-value{font-size:1.75rem}.kpi-prefix,.kpi-suffix{font-size:1rem}}\n"] }]
|
|
4273
4273
|
}], propDecorators: { config: [{
|
|
@@ -4325,10 +4325,10 @@ class KpiConfigDialogComponent {
|
|
|
4325
4325
|
isLoadingQueryColumns = false;
|
|
4326
4326
|
isLoadingCategoryValues = false;
|
|
4327
4327
|
// Attribute selection
|
|
4328
|
-
isLoadingAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingAttributes" }] : []));
|
|
4329
|
-
availableAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableAttributes" }] : []));
|
|
4330
|
-
filteredValueAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredValueAttributes" }] : []));
|
|
4331
|
-
filteredLabelAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredLabelAttributes" }] : []));
|
|
4328
|
+
isLoadingAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingAttributes" }] : /* istanbul ignore next */ []));
|
|
4329
|
+
availableAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableAttributes" }] : /* istanbul ignore next */ []));
|
|
4330
|
+
filteredValueAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredValueAttributes" }] : /* istanbul ignore next */ []));
|
|
4331
|
+
filteredLabelAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredLabelAttributes" }] : /* istanbul ignore next */ []));
|
|
4332
4332
|
// Filter state
|
|
4333
4333
|
filters = [];
|
|
4334
4334
|
filterVariables = [];
|
|
@@ -4733,8 +4733,8 @@ class KpiConfigDialogComponent {
|
|
|
4733
4733
|
onFiltersChange(updatedFilters) {
|
|
4734
4734
|
this.filters = updatedFilters;
|
|
4735
4735
|
}
|
|
4736
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
4737
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
4736
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: KpiConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4737
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: KpiConfigDialogComponent, isStandalone: true, selector: "mm-kpi-config-dialog", inputs: { initialCkTypeId: "initialCkTypeId", initialRtId: "initialRtId", initialValueAttribute: "initialValueAttribute", initialLabelAttribute: "initialLabelAttribute", initialPrefix: "initialPrefix", initialSuffix: "initialSuffix", initialTrend: "initialTrend", initialDataSourceType: "initialDataSourceType", initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName", initialQueryMode: "initialQueryMode", initialQueryValueField: "initialQueryValueField", initialQueryCategoryField: "initialQueryCategoryField", initialQueryCategoryValue: "initialQueryCategoryValue", initialStaticValue: "initialStaticValue", initialFilters: "initialFilters" }, viewQueries: [{ propertyName: "ckTypeSelectorInput", first: true, predicate: ["ckTypeSelector"], descendants: true }, { propertyName: "entitySelectorInput", first: true, predicate: ["entitySelector"], descendants: true }, { propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
4738
4738
|
<div class="config-container">
|
|
4739
4739
|
|
|
4740
4740
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -5101,7 +5101,7 @@ class KpiConfigDialogComponent {
|
|
|
5101
5101
|
</div>
|
|
5102
5102
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;flex:1;overflow-y:auto;padding:16px;position:relative}.config-form.loading{pointer-events:none}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.disabled{opacity:.6}.form-field.flex-1{flex:1}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.form-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.form-section h4{margin:0 0 16px;font-size:.95rem;color:var(--kendo-color-primary, #0d6efd)}.section-hint{margin:0 0 12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.form-row{display:flex;gap:16px}.mode-toggle{display:flex;gap:8px}.mode-toggle button{flex:1}.attribute-item{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%}.attribute-path{flex:1}.attribute-type{font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);background:var(--kendo-color-surface-alt, #f8f9fa);padding:2px 6px;border-radius:3px}.required{color:var(--kendo-color-error, #dc3545)}.query-item{display:flex;flex-direction:column;gap:2px}.query-name{font-weight:500}.query-description{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.column-item{display:flex;justify-content:space-between;gap:16px}.column-path{font-weight:500}.column-type{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.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: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
5103
5103
|
}
|
|
5104
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5104
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: KpiConfigDialogComponent, decorators: [{
|
|
5105
5105
|
type: Component,
|
|
5106
5106
|
args: [{ selector: 'mm-kpi-config-dialog', standalone: true, imports: [
|
|
5107
5107
|
CommonModule,
|
|
@@ -5532,10 +5532,10 @@ class EntityDetailDialogComponent {
|
|
|
5532
5532
|
rtId;
|
|
5533
5533
|
ckTypeId;
|
|
5534
5534
|
closed = new EventEmitter();
|
|
5535
|
-
isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
5536
|
-
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
5537
|
-
rtWellKnownName = signal(null, ...(ngDevMode ? [{ debugName: "rtWellKnownName" }] : []));
|
|
5538
|
-
propertyGridData = signal([], ...(ngDevMode ? [{ debugName: "propertyGridData" }] : []));
|
|
5535
|
+
isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
5536
|
+
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
5537
|
+
rtWellKnownName = signal(null, ...(ngDevMode ? [{ debugName: "rtWellKnownName" }] : /* istanbul ignore next */ []));
|
|
5538
|
+
propertyGridData = signal([], ...(ngDevMode ? [{ debugName: "propertyGridData" }] : /* istanbul ignore next */ []));
|
|
5539
5539
|
propertyGridConfig = {
|
|
5540
5540
|
readOnlyMode: true,
|
|
5541
5541
|
showSearch: true,
|
|
@@ -5640,8 +5640,8 @@ class EntityDetailDialogComponent {
|
|
|
5640
5640
|
onClose() {
|
|
5641
5641
|
this.closed.emit();
|
|
5642
5642
|
}
|
|
5643
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
5644
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
5643
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityDetailDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5644
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: EntityDetailDialogComponent, isStandalone: true, selector: "mm-entity-detail-dialog", inputs: { rtId: "rtId", ckTypeId: "ckTypeId" }, outputs: { closed: "closed" }, ngImport: i0, template: `
|
|
5645
5645
|
<kendo-dialog
|
|
5646
5646
|
[title]="dialogTitle"
|
|
5647
5647
|
[minWidth]="600"
|
|
@@ -5690,7 +5690,7 @@ class EntityDetailDialogComponent {
|
|
|
5690
5690
|
</kendo-dialog>
|
|
5691
5691
|
`, isInline: true, styles: [".entity-detail-content{display:flex;flex-direction:column;gap:16px;min-height:400px}.loading-indicator,.error-message{display:flex;align-items:center;justify-content:center;height:200px;color:var(--kendo-color-subtle, #6c757d)}.error-message{color:var(--kendo-color-error, #dc3545)}.entity-header{padding:12px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.entity-info{display:flex;flex-direction:column;gap:6px}.info-row{display:flex;gap:8px;font-size:.875rem}.info-row .label{font-weight:600;color:var(--kendo-color-subtle, #6c757d);min-width:80px}.info-row .value{color:var(--kendo-color-on-surface, #212529);word-break:break-all}.attributes-section{flex:1;display:flex;flex-direction:column}.attributes-section h4{margin:0 0 8px;font-size:.9rem;color:var(--kendo-color-primary, #0d6efd)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DialogsModule }, { kind: "component", type: i1$4.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i1$4.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: PropertyGridComponent, selector: "mm-property-grid", inputs: ["data", "config", "showTypeColumn"], outputs: ["propertyChange", "saveRequested", "binaryDownload"] }] });
|
|
5692
5692
|
}
|
|
5693
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5693
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityDetailDialogComponent, decorators: [{
|
|
5694
5694
|
type: Component,
|
|
5695
5695
|
args: [{ selector: 'mm-entity-detail-dialog', standalone: true, imports: [
|
|
5696
5696
|
CommonModule,
|
|
@@ -5762,13 +5762,13 @@ class EntityAssociationsWidgetComponent {
|
|
|
5762
5762
|
chevronDownIcon = chevronDownIcon;
|
|
5763
5763
|
chevronRightIcon = chevronRightIcon;
|
|
5764
5764
|
// Widget state signals
|
|
5765
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
5766
|
-
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : []));
|
|
5767
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
5768
|
-
_expandedGroups = signal(new Set(), ...(ngDevMode ? [{ debugName: "_expandedGroups" }] : []));
|
|
5765
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
5766
|
+
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
|
|
5767
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
5768
|
+
_expandedGroups = signal(new Set(), ...(ngDevMode ? [{ debugName: "_expandedGroups" }] : /* istanbul ignore next */ []));
|
|
5769
5769
|
// Cache for target entity attributes per group (key = roleId_direction)
|
|
5770
|
-
_targetAttributesCache = signal(new Map(), ...(ngDevMode ? [{ debugName: "_targetAttributesCache" }] : []));
|
|
5771
|
-
_loadingTargetGroups = signal(new Set(), ...(ngDevMode ? [{ debugName: "_loadingTargetGroups" }] : []));
|
|
5770
|
+
_targetAttributesCache = signal(new Map(), ...(ngDevMode ? [{ debugName: "_targetAttributesCache" }] : /* istanbul ignore next */ []));
|
|
5771
|
+
_loadingTargetGroups = signal(new Set(), ...(ngDevMode ? [{ debugName: "_loadingTargetGroups" }] : /* istanbul ignore next */ []));
|
|
5772
5772
|
// Detail dialog state
|
|
5773
5773
|
showDetailDialog = false;
|
|
5774
5774
|
detailEntityRtId = '';
|
|
@@ -5798,16 +5798,16 @@ class EntityAssociationsWidgetComponent {
|
|
|
5798
5798
|
return 'Entity';
|
|
5799
5799
|
const parts = data.ckTypeId.split('/');
|
|
5800
5800
|
return parts[parts.length - 1];
|
|
5801
|
-
}, ...(ngDevMode ? [{ debugName: "entityName" }] : []));
|
|
5801
|
+
}, ...(ngDevMode ? [{ debugName: "entityName" }] : /* istanbul ignore next */ []));
|
|
5802
5802
|
entityRtId = computed(() => {
|
|
5803
5803
|
return this._data()?.rtId ?? '';
|
|
5804
|
-
}, ...(ngDevMode ? [{ debugName: "entityRtId" }] : []));
|
|
5804
|
+
}, ...(ngDevMode ? [{ debugName: "entityRtId" }] : /* istanbul ignore next */ []));
|
|
5805
5805
|
entityCkTypeId = computed(() => {
|
|
5806
5806
|
return this._data()?.ckTypeId ?? '';
|
|
5807
|
-
}, ...(ngDevMode ? [{ debugName: "entityCkTypeId" }] : []));
|
|
5807
|
+
}, ...(ngDevMode ? [{ debugName: "entityCkTypeId" }] : /* istanbul ignore next */ []));
|
|
5808
5808
|
displayMode = computed(() => {
|
|
5809
5809
|
return this.config?.displayMode ?? 'expandable';
|
|
5810
|
-
}, ...(ngDevMode ? [{ debugName: "displayMode" }] : []));
|
|
5810
|
+
}, ...(ngDevMode ? [{ debugName: "displayMode" }] : /* istanbul ignore next */ []));
|
|
5811
5811
|
/**
|
|
5812
5812
|
* Filtered source entity attributes based on configured entityAttributePaths
|
|
5813
5813
|
*/
|
|
@@ -5817,7 +5817,7 @@ class EntityAssociationsWidgetComponent {
|
|
|
5817
5817
|
if (!data?.attributes || !paths?.length)
|
|
5818
5818
|
return [];
|
|
5819
5819
|
return data.attributes.filter(a => paths.includes(a.attributeName));
|
|
5820
|
-
}, ...(ngDevMode ? [{ debugName: "filteredEntityAttributes" }] : []));
|
|
5820
|
+
}, ...(ngDevMode ? [{ debugName: "filteredEntityAttributes" }] : /* istanbul ignore next */ []));
|
|
5821
5821
|
groupedAssociations = computed(() => {
|
|
5822
5822
|
const data = this._data();
|
|
5823
5823
|
if (!data?.associations)
|
|
@@ -5870,10 +5870,10 @@ class EntityAssociationsWidgetComponent {
|
|
|
5870
5870
|
result = result.slice(0, this.config.maxAssociations);
|
|
5871
5871
|
}
|
|
5872
5872
|
return result;
|
|
5873
|
-
}, ...(ngDevMode ? [{ debugName: "groupedAssociations" }] : []));
|
|
5873
|
+
}, ...(ngDevMode ? [{ debugName: "groupedAssociations" }] : /* istanbul ignore next */ []));
|
|
5874
5874
|
totalAssociations = computed(() => {
|
|
5875
5875
|
return this.groupedAssociations().reduce((sum, g) => sum + g.count, 0);
|
|
5876
|
-
}, ...(ngDevMode ? [{ debugName: "totalAssociations" }] : []));
|
|
5876
|
+
}, ...(ngDevMode ? [{ debugName: "totalAssociations" }] : /* istanbul ignore next */ []));
|
|
5877
5877
|
ngOnInit() {
|
|
5878
5878
|
this.loadData();
|
|
5879
5879
|
}
|
|
@@ -6060,10 +6060,10 @@ class EntityAssociationsWidgetComponent {
|
|
|
6060
6060
|
.replace(/^./, str => str.toUpperCase())
|
|
6061
6061
|
.trim();
|
|
6062
6062
|
}
|
|
6063
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
6064
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
6063
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityAssociationsWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6064
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: EntityAssociationsWidgetComponent, isStandalone: true, selector: "mm-entity-associations-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"associations-widget\" [class.no-data]=\"!data()\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else if (isLoading()) {\n <div class=\"loading-indicator\">\n <span>Loading...</span>\n </div>\n } @else if (error()) {\n <div class=\"error-message\">\n <span>{{ error() }}</span>\n </div>\n } @else if (data()) {\n <!-- Entity Info Header -->\n <div class=\"entity-header\">\n <div class=\"entity-box\">\n <span class=\"entity-name\">{{ entityName() }}</span>\n </div>\n <div class=\"entity-details\">\n <span class=\"entity-id\" title=\"{{ entityCkTypeId() }}\">{{ entityRtId() }}</span>\n </div>\n </div>\n\n <!-- Entity Attributes (Source) -->\n @if (filteredEntityAttributes().length > 0) {\n <div class=\"entity-attributes\">\n @for (attr of filteredEntityAttributes(); track attr.attributeName) {\n <div class=\"attribute-row\">\n <span class=\"attribute-name\">{{ formatAttributeName(attr.attributeName) }}</span>\n <span class=\"attribute-value\">{{ formatValue(attr.value) }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Associations List -->\n <div class=\"associations-container\">\n @for (group of groupedAssociations(); track group.roleId + group.direction) {\n <div class=\"association-group\" [class.expanded]=\"isGroupExpanded(group)\">\n <!-- Group Header -->\n <div class=\"group-header\"\n [class.clickable]=\"displayMode() === 'expandable'\"\n (click)=\"toggleGroup(group)\">\n <div class=\"direction-indicator\">\n @if (group.direction === 'out') {\n <kendo-svg-icon [icon]=\"arrowRightIcon\" size=\"small\"></kendo-svg-icon>\n } @else {\n <kendo-svg-icon [icon]=\"arrowLeftIcon\" size=\"small\"></kendo-svg-icon>\n }\n </div>\n <div class=\"group-info\">\n <span class=\"role-name\">{{ group.roleName }}</span>\n <span class=\"target-type\">{{ group.targetType }}</span>\n <span class=\"count-badge\">{{ group.count }}</span>\n </div>\n @if (displayMode() === 'expandable') {\n <div class=\"expand-icon\">\n @if (isGroupExpanded(group)) {\n <kendo-svg-icon [icon]=\"chevronDownIcon\" size=\"small\"></kendo-svg-icon>\n } @else {\n <kendo-svg-icon [icon]=\"chevronRightIcon\" size=\"small\"></kendo-svg-icon>\n }\n </div>\n }\n </div>\n\n <!-- Expanded Target List -->\n @if (displayMode() === 'expandable' && isGroupExpanded(group)) {\n <div class=\"target-list\">\n @if (isLoadingTargets(group)) {\n <div class=\"target-loading\">Loading attributes...</div>\n }\n @for (target of getTargetEntities(group); track target.rtId) {\n <div class=\"target-entry\">\n <div class=\"target-item\" (click)=\"onTargetClick(target)\">\n <span class=\"target-id\">{{ target.displayName }}</span>\n <span class=\"target-type-hint\" [title]=\"target.ckTypeId\">{{ target.ckTypeId }}</span>\n </div>\n @if (target.attributes?.length) {\n <div class=\"target-attributes\">\n @for (attr of target.attributes; track attr.attributeName) {\n <div class=\"target-attr-row\">\n <span class=\"target-attr-name\">{{ formatAttributeName(attr.attributeName) }}</span>\n <span class=\"target-attr-value\">{{ formatValue(attr.value) }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Summary Footer -->\n <div class=\"associations-summary\">\n <kendo-svg-icon [icon]=\"linkIcon\" size=\"small\"></kendo-svg-icon>\n <span>{{ totalAssociations() }} relationship(s)</span>\n </div>\n } @else {\n <mm-widget-not-configured></mm-widget-not-configured>\n }\n</div>\n\n<!-- Entity Detail Dialog -->\n@if (showDetailDialog) {\n <mm-entity-detail-dialog\n [rtId]=\"detailEntityRtId\"\n [ckTypeId]=\"detailEntityCkTypeId\"\n (closed)=\"onDetailDialogClosed()\">\n </mm-entity-detail-dialog>\n}\n", styles: [".associations-widget{display:flex;flex-direction:column;height:100%}.associations-widget.no-data{justify-content:center;align-items:center;color:var(--kendo-color-subtle, #6c757d)}.entity-header{display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa);border-bottom:1px solid var(--kendo-color-border, #dee2e6)}.entity-header .entity-box{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--kendo-color-primary, #0d6efd);color:var(--kendo-color-on-primary, #fff);border-radius:4px;font-weight:600;font-size:.875rem}.entity-header .entity-details{display:flex;flex-direction:column;gap:2px}.entity-header .entity-id{font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);font-family:monospace}.entity-attributes{padding:4px 12px 8px;border-bottom:1px solid var(--kendo-color-border, #dee2e6)}.entity-attributes .attribute-row{display:flex;justify-content:space-between;padding:2px 0;font-size:.8125rem}.entity-attributes .attribute-name{color:var(--kendo-color-subtle, #6c757d)}.entity-attributes .attribute-value{font-weight:500;color:var(--kendo-color-on-surface, #212529)}.associations-container{flex:1;overflow:auto;padding:8px;display:flex;flex-direction:column;gap:4px}.association-group{border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;overflow:hidden}.association-group.expanded .group-header{border-bottom:1px solid var(--kendo-color-border, #dee2e6)}.group-header{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa)}.group-header.clickable{cursor:pointer}.group-header.clickable:hover{background:var(--kendo-color-surface, #ffffff)}.direction-indicator{color:var(--kendo-color-subtle, #6c757d);display:flex;align-items:center;width:20px}.group-info{display:flex;align-items:center;gap:8px;flex:1;font-size:.8125rem}.group-info .role-name{color:var(--kendo-color-subtle, #6c757d);font-style:italic}.group-info .target-type{font-weight:500;color:var(--kendo-color-on-surface, #212529)}.group-info .count-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;background:var(--kendo-color-primary, #0d6efd);color:var(--kendo-color-on-primary, #fff);border-radius:10px;font-size:.6875rem;font-weight:600}.expand-icon{color:var(--kendo-color-subtle, #6c757d);display:flex;align-items:center}.target-list{padding:4px 0;max-height:200px;overflow-y:auto}.target-entry+.target-entry{border-top:1px solid var(--kendo-color-border, #dee2e6)}.target-item{display:flex;align-items:center;gap:8px;padding:6px 12px 6px 40px;cursor:pointer;font-size:.8125rem;transition:background .15s ease}.target-item:hover{background:var(--kendo-color-surface-alt, #f8f9fa)}.target-item .target-id{font-family:monospace;color:var(--kendo-color-on-surface, #212529);flex-shrink:0}.target-item .target-type-hint{font-size:.6875rem;color:var(--kendo-color-subtle, #6c757d);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex-shrink:1}.target-attributes{padding:2px 12px 6px 56px}.target-attributes .target-attr-row{display:flex;justify-content:space-between;padding:1px 0;font-size:.75rem}.target-attributes .target-attr-name{color:var(--kendo-color-subtle, #6c757d)}.target-attributes .target-attr-value{color:var(--kendo-color-on-surface, #212529);font-weight:500}.target-loading{padding:6px 12px 6px 40px;font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.associations-summary{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa);border-top:1px solid var(--kendo-color-border, #dee2e6);font-size:.75rem;color:var(--kendo-color-subtle, #6c757d)}.no-data-message{font-size:.875rem}.loading-indicator{display:flex;align-items:center;justify-content:center;height:100%;color:var(--kendo-color-subtle, #6c757d)}.error-message{display:flex;align-items:center;justify-content:center;height:100%;color:var(--kendo-color-error, #dc3545)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: EntityDetailDialogComponent, selector: "mm-entity-detail-dialog", inputs: ["rtId", "ckTypeId"], outputs: ["closed"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
6065
6065
|
}
|
|
6066
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
6066
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntityAssociationsWidgetComponent, decorators: [{
|
|
6067
6067
|
type: Component,
|
|
6068
6068
|
args: [{ selector: 'mm-entity-associations-widget', standalone: true, imports: [CommonModule, SVGIconModule, EntityDetailDialogComponent, WidgetNotConfiguredComponent], template: "<div class=\"associations-widget\" [class.no-data]=\"!data()\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else if (isLoading()) {\n <div class=\"loading-indicator\">\n <span>Loading...</span>\n </div>\n } @else if (error()) {\n <div class=\"error-message\">\n <span>{{ error() }}</span>\n </div>\n } @else if (data()) {\n <!-- Entity Info Header -->\n <div class=\"entity-header\">\n <div class=\"entity-box\">\n <span class=\"entity-name\">{{ entityName() }}</span>\n </div>\n <div class=\"entity-details\">\n <span class=\"entity-id\" title=\"{{ entityCkTypeId() }}\">{{ entityRtId() }}</span>\n </div>\n </div>\n\n <!-- Entity Attributes (Source) -->\n @if (filteredEntityAttributes().length > 0) {\n <div class=\"entity-attributes\">\n @for (attr of filteredEntityAttributes(); track attr.attributeName) {\n <div class=\"attribute-row\">\n <span class=\"attribute-name\">{{ formatAttributeName(attr.attributeName) }}</span>\n <span class=\"attribute-value\">{{ formatValue(attr.value) }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Associations List -->\n <div class=\"associations-container\">\n @for (group of groupedAssociations(); track group.roleId + group.direction) {\n <div class=\"association-group\" [class.expanded]=\"isGroupExpanded(group)\">\n <!-- Group Header -->\n <div class=\"group-header\"\n [class.clickable]=\"displayMode() === 'expandable'\"\n (click)=\"toggleGroup(group)\">\n <div class=\"direction-indicator\">\n @if (group.direction === 'out') {\n <kendo-svg-icon [icon]=\"arrowRightIcon\" size=\"small\"></kendo-svg-icon>\n } @else {\n <kendo-svg-icon [icon]=\"arrowLeftIcon\" size=\"small\"></kendo-svg-icon>\n }\n </div>\n <div class=\"group-info\">\n <span class=\"role-name\">{{ group.roleName }}</span>\n <span class=\"target-type\">{{ group.targetType }}</span>\n <span class=\"count-badge\">{{ group.count }}</span>\n </div>\n @if (displayMode() === 'expandable') {\n <div class=\"expand-icon\">\n @if (isGroupExpanded(group)) {\n <kendo-svg-icon [icon]=\"chevronDownIcon\" size=\"small\"></kendo-svg-icon>\n } @else {\n <kendo-svg-icon [icon]=\"chevronRightIcon\" size=\"small\"></kendo-svg-icon>\n }\n </div>\n }\n </div>\n\n <!-- Expanded Target List -->\n @if (displayMode() === 'expandable' && isGroupExpanded(group)) {\n <div class=\"target-list\">\n @if (isLoadingTargets(group)) {\n <div class=\"target-loading\">Loading attributes...</div>\n }\n @for (target of getTargetEntities(group); track target.rtId) {\n <div class=\"target-entry\">\n <div class=\"target-item\" (click)=\"onTargetClick(target)\">\n <span class=\"target-id\">{{ target.displayName }}</span>\n <span class=\"target-type-hint\" [title]=\"target.ckTypeId\">{{ target.ckTypeId }}</span>\n </div>\n @if (target.attributes?.length) {\n <div class=\"target-attributes\">\n @for (attr of target.attributes; track attr.attributeName) {\n <div class=\"target-attr-row\">\n <span class=\"target-attr-name\">{{ formatAttributeName(attr.attributeName) }}</span>\n <span class=\"target-attr-value\">{{ formatValue(attr.value) }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Summary Footer -->\n <div class=\"associations-summary\">\n <kendo-svg-icon [icon]=\"linkIcon\" size=\"small\"></kendo-svg-icon>\n <span>{{ totalAssociations() }} relationship(s)</span>\n </div>\n } @else {\n <mm-widget-not-configured></mm-widget-not-configured>\n }\n</div>\n\n<!-- Entity Detail Dialog -->\n@if (showDetailDialog) {\n <mm-entity-detail-dialog\n [rtId]=\"detailEntityRtId\"\n [ckTypeId]=\"detailEntityCkTypeId\"\n (closed)=\"onDetailDialogClosed()\">\n </mm-entity-detail-dialog>\n}\n", styles: [".associations-widget{display:flex;flex-direction:column;height:100%}.associations-widget.no-data{justify-content:center;align-items:center;color:var(--kendo-color-subtle, #6c757d)}.entity-header{display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa);border-bottom:1px solid var(--kendo-color-border, #dee2e6)}.entity-header .entity-box{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--kendo-color-primary, #0d6efd);color:var(--kendo-color-on-primary, #fff);border-radius:4px;font-weight:600;font-size:.875rem}.entity-header .entity-details{display:flex;flex-direction:column;gap:2px}.entity-header .entity-id{font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);font-family:monospace}.entity-attributes{padding:4px 12px 8px;border-bottom:1px solid var(--kendo-color-border, #dee2e6)}.entity-attributes .attribute-row{display:flex;justify-content:space-between;padding:2px 0;font-size:.8125rem}.entity-attributes .attribute-name{color:var(--kendo-color-subtle, #6c757d)}.entity-attributes .attribute-value{font-weight:500;color:var(--kendo-color-on-surface, #212529)}.associations-container{flex:1;overflow:auto;padding:8px;display:flex;flex-direction:column;gap:4px}.association-group{border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;overflow:hidden}.association-group.expanded .group-header{border-bottom:1px solid var(--kendo-color-border, #dee2e6)}.group-header{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa)}.group-header.clickable{cursor:pointer}.group-header.clickable:hover{background:var(--kendo-color-surface, #ffffff)}.direction-indicator{color:var(--kendo-color-subtle, #6c757d);display:flex;align-items:center;width:20px}.group-info{display:flex;align-items:center;gap:8px;flex:1;font-size:.8125rem}.group-info .role-name{color:var(--kendo-color-subtle, #6c757d);font-style:italic}.group-info .target-type{font-weight:500;color:var(--kendo-color-on-surface, #212529)}.group-info .count-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;background:var(--kendo-color-primary, #0d6efd);color:var(--kendo-color-on-primary, #fff);border-radius:10px;font-size:.6875rem;font-weight:600}.expand-icon{color:var(--kendo-color-subtle, #6c757d);display:flex;align-items:center}.target-list{padding:4px 0;max-height:200px;overflow-y:auto}.target-entry+.target-entry{border-top:1px solid var(--kendo-color-border, #dee2e6)}.target-item{display:flex;align-items:center;gap:8px;padding:6px 12px 6px 40px;cursor:pointer;font-size:.8125rem;transition:background .15s ease}.target-item:hover{background:var(--kendo-color-surface-alt, #f8f9fa)}.target-item .target-id{font-family:monospace;color:var(--kendo-color-on-surface, #212529);flex-shrink:0}.target-item .target-type-hint{font-size:.6875rem;color:var(--kendo-color-subtle, #6c757d);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex-shrink:1}.target-attributes{padding:2px 12px 6px 56px}.target-attributes .target-attr-row{display:flex;justify-content:space-between;padding:1px 0;font-size:.75rem}.target-attributes .target-attr-name{color:var(--kendo-color-subtle, #6c757d)}.target-attributes .target-attr-value{color:var(--kendo-color-on-surface, #212529);font-weight:500}.target-loading{padding:6px 12px 6px 40px;font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.associations-summary{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--kendo-color-surface-alt, #f8f9fa);border-top:1px solid var(--kendo-color-border, #dee2e6);font-size:.75rem;color:var(--kendo-color-subtle, #6c757d)}.no-data-message{font-size:.875rem}.loading-indicator{display:flex;align-items:center;justify-content:center;height:100%;color:var(--kendo-color-subtle, #6c757d)}.error-message{display:flex;align-items:center;justify-content:center;height:100%;color:var(--kendo-color-error, #dc3545)}\n"] }]
|
|
6069
6069
|
}], propDecorators: { config: [{
|
|
@@ -6118,10 +6118,10 @@ class GetCkTypeAssociationRolesDtoGQL extends i1.Query {
|
|
|
6118
6118
|
constructor(apollo) {
|
|
6119
6119
|
super(apollo);
|
|
6120
6120
|
}
|
|
6121
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
6122
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
6121
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6122
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, providedIn: 'root' });
|
|
6123
6123
|
}
|
|
6124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
6124
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetCkTypeAssociationRolesDtoGQL, decorators: [{
|
|
6125
6125
|
type: Injectable,
|
|
6126
6126
|
args: [{
|
|
6127
6127
|
providedIn: 'root'
|
|
@@ -6253,15 +6253,15 @@ class AssociationsConfigDialogComponent {
|
|
|
6253
6253
|
selectedEntityAttributes = [];
|
|
6254
6254
|
selectedTargetAttributes = [];
|
|
6255
6255
|
isLoadingInitial = false;
|
|
6256
|
-
isLoadingRoles = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingRoles" }] : []));
|
|
6257
|
-
availableRoles = signal([], ...(ngDevMode ? [{ debugName: "availableRoles" }] : []));
|
|
6258
|
-
filteredRoles = signal([], ...(ngDevMode ? [{ debugName: "filteredRoles" }] : []));
|
|
6259
|
-
isLoadingEntityAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingEntityAttributes" }] : []));
|
|
6260
|
-
availableEntityAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableEntityAttributes" }] : []));
|
|
6261
|
-
filteredEntityAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredEntityAttributes" }] : []));
|
|
6262
|
-
isLoadingTargetAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingTargetAttributes" }] : []));
|
|
6263
|
-
availableTargetAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableTargetAttributes" }] : []));
|
|
6264
|
-
filteredTargetAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredTargetAttributes" }] : []));
|
|
6256
|
+
isLoadingRoles = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingRoles" }] : /* istanbul ignore next */ []));
|
|
6257
|
+
availableRoles = signal([], ...(ngDevMode ? [{ debugName: "availableRoles" }] : /* istanbul ignore next */ []));
|
|
6258
|
+
filteredRoles = signal([], ...(ngDevMode ? [{ debugName: "filteredRoles" }] : /* istanbul ignore next */ []));
|
|
6259
|
+
isLoadingEntityAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingEntityAttributes" }] : /* istanbul ignore next */ []));
|
|
6260
|
+
availableEntityAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableEntityAttributes" }] : /* istanbul ignore next */ []));
|
|
6261
|
+
filteredEntityAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredEntityAttributes" }] : /* istanbul ignore next */ []));
|
|
6262
|
+
isLoadingTargetAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingTargetAttributes" }] : /* istanbul ignore next */ []));
|
|
6263
|
+
availableTargetAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableTargetAttributes" }] : /* istanbul ignore next */ []));
|
|
6264
|
+
filteredTargetAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredTargetAttributes" }] : /* istanbul ignore next */ []));
|
|
6265
6265
|
roleFilterText = '';
|
|
6266
6266
|
entityAttrFilterText = '';
|
|
6267
6267
|
targetAttrFilterText = '';
|
|
@@ -6541,8 +6541,8 @@ class AssociationsConfigDialogComponent {
|
|
|
6541
6541
|
onCancel() {
|
|
6542
6542
|
this.windowRef.close();
|
|
6543
6543
|
}
|
|
6544
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
6545
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
6544
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AssociationsConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6545
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AssociationsConfigDialogComponent, isStandalone: true, selector: "mm-associations-config-dialog", inputs: { initialCkTypeId: "initialCkTypeId", initialRtId: "initialRtId", initialShowIncoming: "initialShowIncoming", initialShowOutgoing: "initialShowOutgoing", initialRoleFilter: "initialRoleFilter", initialDisplayMode: "initialDisplayMode", initialEntityAttributePaths: "initialEntityAttributePaths", initialTargetAttributePaths: "initialTargetAttributePaths" }, ngImport: i0, template: `
|
|
6546
6546
|
<div class="config-container">
|
|
6547
6547
|
|
|
6548
6548
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -6719,7 +6719,7 @@ class AssociationsConfigDialogComponent {
|
|
|
6719
6719
|
</div>
|
|
6720
6720
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;flex:1;overflow-y:auto;gap:16px;padding:16px;position:relative}.config-form.loading{pointer-events:none}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.disabled{opacity:.6}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.checkbox-group,.radio-group{display:flex;gap:16px}.checkbox-label,.radio-label{display:flex;align-items:center;gap:6px;font-weight:400;cursor:pointer}.loading-roles{padding:8px;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.selection-preview{padding:12px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.selection-preview h4{margin:0 0 8px;font-size:.9rem;color:var(--kendo-color-primary, #0d6efd)}.preview-content p{margin:4px 0;font-size:.85rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: CheckBoxModule }, { kind: "ngmodule", type: DropDownsModule }, { kind: "component", type: i4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["showStickyHeader", "focusableId", "autoClose", "loading", "data", "value", "valueField", "textField", "tabindex", "tabIndex", "size", "rounded", "fillMode", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "disabled", "itemDisabled", "checkboxes", "readonly", "filterable", "virtual", "popupSettings", "listHeight", "valuePrimitive", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "inputAttributes"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
6721
6721
|
}
|
|
6722
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
6722
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AssociationsConfigDialogComponent, decorators: [{
|
|
6723
6723
|
type: Component,
|
|
6724
6724
|
args: [{ selector: 'mm-associations-config-dialog', standalone: true, imports: [
|
|
6725
6725
|
CommonModule,
|
|
@@ -6937,11 +6937,11 @@ class TableWidgetDataSourceDirective extends OctoGraphQlDataSource {
|
|
|
6937
6937
|
variableService = inject(MeshBoardVariableService);
|
|
6938
6938
|
_config = null;
|
|
6939
6939
|
/** Signal for dynamically derived columns from persistent query */
|
|
6940
|
-
_queryColumns = signal([], ...(ngDevMode ? [{ debugName: "_queryColumns" }] : []));
|
|
6940
|
+
_queryColumns = signal([], ...(ngDevMode ? [{ debugName: "_queryColumns" }] : /* istanbul ignore next */ []));
|
|
6941
6941
|
/** Exposed signal for reading derived columns */
|
|
6942
6942
|
queryColumns = this._queryColumns.asReadonly();
|
|
6943
6943
|
/** Derived TableColumn array from persistent query columns */
|
|
6944
|
-
derivedColumns = signal([], ...(ngDevMode ? [{ debugName: "derivedColumns" }] : []));
|
|
6944
|
+
derivedColumns = signal([], ...(ngDevMode ? [{ debugName: "derivedColumns" }] : /* istanbul ignore next */ []));
|
|
6945
6945
|
/** Event emitted when query columns are loaded from a persistent query */
|
|
6946
6946
|
queryColumnsLoaded = new EventEmitter();
|
|
6947
6947
|
set config(value) {
|
|
@@ -7179,15 +7179,15 @@ class TableWidgetDataSourceDirective extends OctoGraphQlDataSource {
|
|
|
7179
7179
|
const variables = this.stateService.getVariables();
|
|
7180
7180
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
7181
7181
|
}
|
|
7182
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7183
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
7182
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableWidgetDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
7183
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.5", type: TableWidgetDataSourceDirective, isStandalone: true, selector: "[mmTableWidgetDataSource]", inputs: { config: "config" }, outputs: { queryColumnsLoaded: "queryColumnsLoaded" }, providers: [
|
|
7184
7184
|
{
|
|
7185
7185
|
provide: DataSourceBase,
|
|
7186
7186
|
useExisting: forwardRef(() => TableWidgetDataSourceDirective)
|
|
7187
7187
|
}
|
|
7188
7188
|
], exportAs: ["mmTableWidgetDataSource"], usesInheritance: true, ngImport: i0 });
|
|
7189
7189
|
}
|
|
7190
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableWidgetDataSourceDirective, decorators: [{
|
|
7191
7191
|
type: Directive,
|
|
7192
7192
|
args: [{
|
|
7193
7193
|
selector: '[mmTableWidgetDataSource]',
|
|
@@ -7209,14 +7209,14 @@ class TableWidgetComponent {
|
|
|
7209
7209
|
config;
|
|
7210
7210
|
dataSource;
|
|
7211
7211
|
// Widget state signals
|
|
7212
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
7213
|
-
_data = signal([], ...(ngDevMode ? [{ debugName: "_data" }] : []));
|
|
7214
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
7212
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
7213
|
+
_data = signal([], ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
|
|
7214
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
7215
7215
|
isLoading = this._isLoading.asReadonly();
|
|
7216
7216
|
data = this._data.asReadonly();
|
|
7217
7217
|
error = this._error.asReadonly();
|
|
7218
7218
|
/** Signal to track query columns from data source (for persistent queries) */
|
|
7219
|
-
_queryColumnsForView = signal([], ...(ngDevMode ? [{ debugName: "_queryColumnsForView" }] : []));
|
|
7219
|
+
_queryColumnsForView = signal([], ...(ngDevMode ? [{ debugName: "_queryColumnsForView" }] : /* istanbul ignore next */ []));
|
|
7220
7220
|
/**
|
|
7221
7221
|
* Called when the data source emits queryColumnsLoaded event.
|
|
7222
7222
|
* Updates the view columns directly from the emitted columns.
|
|
@@ -7254,7 +7254,7 @@ class TableWidgetComponent {
|
|
|
7254
7254
|
dataType: 'text',
|
|
7255
7255
|
width: col.width
|
|
7256
7256
|
}));
|
|
7257
|
-
}, ...(ngDevMode ? [{ debugName: "listViewColumns" }] : []));
|
|
7257
|
+
}, ...(ngDevMode ? [{ debugName: "listViewColumns" }] : /* istanbul ignore next */ []));
|
|
7258
7258
|
/**
|
|
7259
7259
|
* Checks if the widget has a valid configuration.
|
|
7260
7260
|
* Supports both runtimeEntity and persistentQuery data sources.
|
|
@@ -7285,7 +7285,7 @@ class TableWidgetComponent {
|
|
|
7285
7285
|
}
|
|
7286
7286
|
// For runtime entity, columns come from config
|
|
7287
7287
|
return (this.config.columns?.length ?? 0) > 0;
|
|
7288
|
-
}, ...(ngDevMode ? [{ debugName: "columnsReady" }] : []));
|
|
7288
|
+
}, ...(ngDevMode ? [{ debugName: "columnsReady" }] : /* istanbul ignore next */ []));
|
|
7289
7289
|
formatColumnTitle(field) {
|
|
7290
7290
|
return field
|
|
7291
7291
|
.replace(/([A-Z])/g, ' $1')
|
|
@@ -7309,8 +7309,8 @@ class TableWidgetComponent {
|
|
|
7309
7309
|
this.dataSource.fetchAgain();
|
|
7310
7310
|
}
|
|
7311
7311
|
}
|
|
7312
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7313
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
7312
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7313
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: TableWidgetComponent, isStandalone: true, selector: "mm-table-widget", inputs: { config: "config" }, viewQueries: [{ propertyName: "dataSource", first: true, predicate: ["dataSource"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
7314
7314
|
<div class="table-widget">
|
|
7315
7315
|
@if (hasValidConfig()) {
|
|
7316
7316
|
<mm-list-view
|
|
@@ -7336,7 +7336,7 @@ class TableWidgetComponent {
|
|
|
7336
7336
|
</div>
|
|
7337
7337
|
`, isInline: true, styles: [".table-widget{height:100%;width:100%;display:flex;flex-direction:column}.no-config-overlay{display:flex;align-items:center;justify-content:center;height:100%;color:var(--kendo-color-subtle, #6c757d);font-style:italic}:host ::ng-deep mm-list-view{height:100%}:host ::ng-deep .k-grid{height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ListViewComponent, selector: "mm-list-view", inputs: ["pageSize", "skip", "rowIsClickable", "showRowCheckBoxes", "showRowSelectAllCheckBox", "contextMenuType", "leftToolbarActions", "rightToolbarActions", "actionCommandItems", "contextMenuCommandItems", "excelExportFileName", "pdfExportFileName", "pageable", "sortable", "rowFilterEnabled", "searchTextBoxEnabled", "messages", "selectable", "columns"], outputs: ["rowClicked"] }, { kind: "directive", type: TableWidgetDataSourceDirective, selector: "[mmTableWidgetDataSource]", inputs: ["config"], outputs: ["queryColumnsLoaded"], exportAs: ["mmTableWidgetDataSource"] }] });
|
|
7338
7338
|
}
|
|
7339
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7339
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableWidgetComponent, decorators: [{
|
|
7340
7340
|
type: Component,
|
|
7341
7341
|
args: [{ selector: 'mm-table-widget', standalone: true, imports: [
|
|
7342
7342
|
CommonModule,
|
|
@@ -7643,8 +7643,8 @@ class TableConfigDialogComponent {
|
|
|
7643
7643
|
onCancel() {
|
|
7644
7644
|
this.windowRef.close();
|
|
7645
7645
|
}
|
|
7646
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
7647
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
7646
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7647
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: TableConfigDialogComponent, isStandalone: true, selector: "mm-table-config-dialog", inputs: { initialDataSourceType: "initialDataSourceType", initialCkTypeId: "initialCkTypeId", initialColumns: "initialColumns", initialSorting: "initialSorting", initialFilters: "initialFilters", initialPageSize: "initialPageSize", initialSortable: "initialSortable", initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName" }, providers: [
|
|
7648
7648
|
AttributeSelectorDialogService,
|
|
7649
7649
|
AttributeSortSelectorDialogService
|
|
7650
7650
|
], viewQueries: [{ propertyName: "ckTypeSelectorInput", first: true, predicate: ["ckTypeSelector"], descendants: true }, { propertyName: "filterEditor", first: true, predicate: ["filterEditor"], descendants: true }, { propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
@@ -7849,7 +7849,7 @@ class TableConfigDialogComponent {
|
|
|
7849
7849
|
</div>
|
|
7850
7850
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:16px;flex:1;overflow-y:auto;padding:16px;position:relative}.config-form.loading{pointer-events:none}.form-field{display:flex;flex-direction:column;gap:6px}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.required{color:var(--kendo-color-error, #dc3545)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.config-card{padding:12px 16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.card-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.card-header kendo-svgicon{color:var(--kendo-color-primary, #0d6efd)}.card-title{font-weight:600;font-size:.95rem;color:var(--kendo-color-primary, #0d6efd)}.card-count{color:var(--kendo-color-subtle, #6c757d);font-size:.85rem}.card-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.config-summary{margin:0;font-size:.85rem;color:var(--kendo-color-on-app-surface, #212529);flex:1}.filters-card .card-content{flex-direction:column;align-items:stretch}.filter-content{width:100%}.options-card .options-content{display:flex;gap:24px;align-items:flex-end}.checkbox-field{flex-direction:row;align-items:center}.checkbox-field label{display:flex;align-items:center;gap:8px;cursor:pointer;color:var(--kendo-color-on-app-surface, #212529)}.data-source-type .radio-group{display:flex;gap:24px}.radio-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400;color:var(--kendo-color-on-app-surface, #212529)}.radio-label span{color:var(--kendo-color-on-app-surface, #212529)}.query-info{flex-direction:column;align-items:stretch;gap:8px}.info-row{display:flex;gap:8px}.info-label{font-weight:600;min-width:100px;color:var(--kendo-color-subtle, #6c757d)}.info-value{flex:1;color:var(--kendo-color-on-app-surface, #212529)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "directive", type: i3.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }, { kind: "ngmodule", type: NumericTextBoxModule }, { kind: "ngmodule", type: DropDownsModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
7851
7851
|
}
|
|
7852
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
7852
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableConfigDialogComponent, decorators: [{
|
|
7853
7853
|
type: Component,
|
|
7854
7854
|
args: [{ selector: 'mm-table-config-dialog', standalone: true, imports: [
|
|
7855
7855
|
CommonModule,
|
|
@@ -8117,9 +8117,9 @@ class GaugeWidgetComponent {
|
|
|
8117
8117
|
variableService = inject(MeshBoardVariableService);
|
|
8118
8118
|
config;
|
|
8119
8119
|
// Widget state signals
|
|
8120
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
8121
|
-
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : []));
|
|
8122
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
8120
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
8121
|
+
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
|
|
8122
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
8123
8123
|
isLoading = this._isLoading.asReadonly();
|
|
8124
8124
|
data = this._data.asReadonly();
|
|
8125
8125
|
error = this._error.asReadonly();
|
|
@@ -8155,14 +8155,14 @@ class GaugeWidgetComponent {
|
|
|
8155
8155
|
return 0;
|
|
8156
8156
|
const numValue = typeof attr.value === 'number' ? attr.value : parseFloat(String(attr.value));
|
|
8157
8157
|
return isNaN(numValue) ? 0 : numValue;
|
|
8158
|
-
}, ...(ngDevMode ? [{ debugName: "numericValue" }] : []));
|
|
8158
|
+
}, ...(ngDevMode ? [{ debugName: "numericValue" }] : /* istanbul ignore next */ []));
|
|
8159
8159
|
formattedValue = computed(() => {
|
|
8160
8160
|
const value = this.numericValue();
|
|
8161
8161
|
return value.toLocaleString('de-AT', {
|
|
8162
8162
|
minimumFractionDigits: value % 1 !== 0 ? 1 : 0,
|
|
8163
8163
|
maximumFractionDigits: 2
|
|
8164
8164
|
});
|
|
8165
|
-
}, ...(ngDevMode ? [{ debugName: "formattedValue" }] : []));
|
|
8165
|
+
}, ...(ngDevMode ? [{ debugName: "formattedValue" }] : /* istanbul ignore next */ []));
|
|
8166
8166
|
label = computed(() => {
|
|
8167
8167
|
const data = this._data();
|
|
8168
8168
|
if (this.config?.labelAttribute && data?.attributes) {
|
|
@@ -8172,7 +8172,7 @@ class GaugeWidgetComponent {
|
|
|
8172
8172
|
}
|
|
8173
8173
|
}
|
|
8174
8174
|
return '';
|
|
8175
|
-
}, ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
8175
|
+
}, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8176
8176
|
ngOnInit() {
|
|
8177
8177
|
this.loadData();
|
|
8178
8178
|
}
|
|
@@ -8351,8 +8351,8 @@ class GaugeWidgetComponent {
|
|
|
8351
8351
|
const variables = this.stateService.getVariables();
|
|
8352
8352
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
8353
8353
|
}
|
|
8354
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
8355
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
8354
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GaugeWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8355
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: GaugeWidgetComponent, isStandalone: true, selector: "mm-gauge-widget", inputs: { config: "config" }, providers: [CollectionChangesService], usesOnChanges: true, ngImport: i0, template: `
|
|
8356
8356
|
<div class="gauge-widget" [class.loading]="isLoading()" [class.error]="error()">
|
|
8357
8357
|
@if (isNotConfigured()) {
|
|
8358
8358
|
<mm-widget-not-configured></mm-widget-not-configured>
|
|
@@ -8523,7 +8523,7 @@ class GaugeWidgetComponent {
|
|
|
8523
8523
|
</div>
|
|
8524
8524
|
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.gauge-widget{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:8px;box-sizing:border-box;overflow:hidden}.gauge-widget.loading,.gauge-widget.error{opacity:.7}.loading-indicator,.error-message{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.loading-indicator span{font-size:1.5rem;color:var(--kendo-color-subtle, #6c757d)}.error-message span{color:var(--kendo-color-error, #dc3545);font-size:.875rem}.gauge-container{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%}.gauge-center-label{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.gauge-center-label .value-text{font-size:1.25rem;font-weight:600;color:var(--kendo-color-on-surface, #212529)}.gauge-center-label .label-text{font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);margin-top:2px}.gauge-value-label{display:flex;flex-direction:column;align-items:center;margin-top:8px;font-size:1.1rem;font-weight:600;color:var(--kendo-color-on-surface, #212529)}.gauge-value-label .label-text{font-size:.75rem;font-weight:400;color:var(--kendo-color-subtle, #6c757d);margin-top:2px}kendo-arcgauge,kendo-circulargauge,kendo-radialgauge{width:100%;max-width:200px;height:auto}.linear-gauge-wrapper{display:flex;flex-direction:row;align-items:center;justify-content:center;height:100%;width:100%;gap:8px}.linear-gauge-wrapper .gauge-value-label{margin-top:0;writing-mode:horizontal-tb}kendo-lineargauge{height:100%;max-height:180px;width:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: i1$5.ArcGaugeComponent, selector: "kendo-arcgauge", inputs: ["value", "color", "colors", "opacity", "scale"], exportAs: ["kendoArcGauge"] }, { kind: "directive", type: i1$5.ArcCenterTemplateDirective, selector: "[kendoArcGaugeCenterTemplate]" }, { kind: "component", type: i1$5.ArcScaleComponent, selector: "kendo-arcgauge-scale", inputs: ["labels", "rangeDistance", "rangeLineCap", "startAngle", "endAngle"] }, { kind: "component", type: i1$5.ColorsComponent, selector: "kendo-arcgauge-colors" }, { kind: "component", type: i1$5.ColorComponent, selector: "kendo-arcgauge-color", inputs: ["color", "opacity", "from", "to"] }, { kind: "component", type: i1$5.CircularGaugeComponent, selector: "kendo-circulargauge", inputs: ["scale"], exportAs: ["kendoCircularGauge"] }, { kind: "directive", type: i1$5.CircularGaugeCenterTemplateDirective, selector: "[kendoCircularGaugeCenterTemplate]" }, { kind: "component", type: i1$5.CircularGaugeScaleComponent, selector: "kendo-circulargauge-scale" }, { kind: "component", type: i1$5.LinearGaugeComponent, selector: "kendo-lineargauge", inputs: ["pointer", "scale"], exportAs: ["kendoLinearGauge"] }, { kind: "component", type: i1$5.LinearScaleComponent, selector: "kendo-lineargauge-scale", inputs: ["line", "ranges", "mirror", "vertical"] }, { kind: "component", type: i1$5.LinearLabelsComponent, selector: "kendo-lineargauge-scale-labels" }, { kind: "component", type: i1$5.LinearPointersComponent, selector: "kendo-lineargauge-pointers" }, { kind: "component", type: i1$5.LinearPointerComponent, selector: "kendo-lineargauge-pointer", inputs: ["border", "color", "margin", "opacity", "shape", "size", "value"] }, { kind: "component", type: i1$5.LinearRangeComponent, selector: "kendo-lineargauge-scale-range" }, { kind: "component", type: i1$5.LinearRangesComponent, selector: "kendo-lineargauge-scale-ranges" }, { kind: "component", type: i1$5.RadialGaugeComponent, selector: "kendo-radialgauge", inputs: ["pointer", "scale"], exportAs: ["kendoRadialGauge"] }, { kind: "component", type: i1$5.RadialScaleComponent, selector: "kendo-radialgauge-scale", inputs: ["labels", "rangeDistance", "ranges", "startAngle", "endAngle"] }, { kind: "component", type: i1$5.RadialPointerComponent, selector: "kendo-radialgauge-pointer", inputs: ["cap", "color", "length", "value"] }, { kind: "component", type: i1$5.RadialRangeComponent, selector: "kendo-radialgauge-scale-range" }, { kind: "component", type: i1$5.RadialRangesComponent, selector: "kendo-radialgauge-scale-ranges" }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
8525
8525
|
}
|
|
8526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
8526
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GaugeWidgetComponent, decorators: [{
|
|
8527
8527
|
type: Component,
|
|
8528
8528
|
args: [{ selector: 'mm-gauge-widget', standalone: true, imports: [
|
|
8529
8529
|
CommonModule,
|
|
@@ -8756,10 +8756,10 @@ class GaugeConfigDialogComponent {
|
|
|
8756
8756
|
isLoadingQueryColumns = false;
|
|
8757
8757
|
isLoadingCategoryValues = false;
|
|
8758
8758
|
// Attribute selection
|
|
8759
|
-
isLoadingAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingAttributes" }] : []));
|
|
8760
|
-
availableAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableAttributes" }] : []));
|
|
8761
|
-
filteredValueAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredValueAttributes" }] : []));
|
|
8762
|
-
filteredLabelAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredLabelAttributes" }] : []));
|
|
8759
|
+
isLoadingAttributes = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingAttributes" }] : /* istanbul ignore next */ []));
|
|
8760
|
+
availableAttributes = signal([], ...(ngDevMode ? [{ debugName: "availableAttributes" }] : /* istanbul ignore next */ []));
|
|
8761
|
+
filteredValueAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredValueAttributes" }] : /* istanbul ignore next */ []));
|
|
8762
|
+
filteredLabelAttributes = signal([], ...(ngDevMode ? [{ debugName: "filteredLabelAttributes" }] : /* istanbul ignore next */ []));
|
|
8763
8763
|
// Filter state
|
|
8764
8764
|
filters = [];
|
|
8765
8765
|
filterVariables = [];
|
|
@@ -9159,8 +9159,8 @@ class GaugeConfigDialogComponent {
|
|
|
9159
9159
|
onFiltersChange(updatedFilters) {
|
|
9160
9160
|
this.filters = updatedFilters;
|
|
9161
9161
|
}
|
|
9162
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
9163
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
9162
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GaugeConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9163
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: GaugeConfigDialogComponent, isStandalone: true, selector: "mm-gauge-config-dialog", inputs: { initialCkTypeId: "initialCkTypeId", initialRtId: "initialRtId", initialGaugeType: "initialGaugeType", initialValueAttribute: "initialValueAttribute", initialLabelAttribute: "initialLabelAttribute", initialMin: "initialMin", initialMax: "initialMax", initialRanges: "initialRanges", initialShowLabel: "initialShowLabel", initialPrefix: "initialPrefix", initialSuffix: "initialSuffix", initialReverse: "initialReverse", initialDataSourceType: "initialDataSourceType", initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName", initialQueryMode: "initialQueryMode", initialQueryValueField: "initialQueryValueField", initialQueryCategoryField: "initialQueryCategoryField", initialQueryCategoryValue: "initialQueryCategoryValue", initialFilters: "initialFilters" }, viewQueries: [{ propertyName: "ckTypeSelectorInput", first: true, predicate: ["ckTypeSelector"], descendants: true }, { propertyName: "entitySelectorInput", first: true, predicate: ["entitySelector"], descendants: true }, { propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
9164
9164
|
<div class="config-container">
|
|
9165
9165
|
|
|
9166
9166
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -9560,7 +9560,7 @@ class GaugeConfigDialogComponent {
|
|
|
9560
9560
|
</div>
|
|
9561
9561
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;padding:16px;position:relative;flex:1;overflow-y:auto}.config-form.loading{pointer-events:none}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.disabled{opacity:.6}.form-field.flex-1{flex:1}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.form-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.form-section h4{margin:0 0 16px;font-size:.95rem;color:var(--kendo-color-primary, #0d6efd)}.section-hint{margin:0 0 12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.form-row{display:flex;gap:16px}.checkbox-label{margin-left:8px;font-weight:400}.gauge-type-item{display:flex;flex-direction:column;gap:2px}.gauge-type-label{font-weight:500}.gauge-type-desc{font-size:.75rem;color:var(--kendo-color-subtle, #6c757d)}.attribute-item{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%}.attribute-path{flex:1}.attribute-type{font-size:.75rem;color:var(--kendo-color-subtle, #6c757d);background:var(--kendo-color-surface-alt, #f8f9fa);padding:2px 6px;border-radius:3px}.range-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.range-input{width:80px}.range-separator{color:var(--kendo-color-subtle, #6c757d)}.color-picker{width:40px;height:32px;padding:2px;border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;cursor:pointer}.mode-toggle{display:flex;gap:8px}.mode-toggle button{flex:1}.required{color:var(--kendo-color-error, #dc3545)}.query-item{display:flex;flex-direction:column;gap:2px}.query-name{font-weight:500}.query-description{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.column-item{display:flex;justify-content:space-between;gap:16px}.column-path{font-weight:500}.column-type{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
9562
9562
|
}
|
|
9563
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
9563
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GaugeConfigDialogComponent, decorators: [{
|
|
9564
9564
|
type: Component,
|
|
9565
9565
|
args: [{ selector: 'mm-gauge-config-dialog', standalone: true, imports: [
|
|
9566
9566
|
CommonModule,
|
|
@@ -10030,13 +10030,13 @@ class PieChartWidgetComponent {
|
|
|
10030
10030
|
variableService = inject(MeshBoardVariableService);
|
|
10031
10031
|
config;
|
|
10032
10032
|
// Widget state signals
|
|
10033
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
10034
|
-
_chartData = signal([], ...(ngDevMode ? [{ debugName: "_chartData" }] : []));
|
|
10035
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
10033
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
10034
|
+
_chartData = signal([], ...(ngDevMode ? [{ debugName: "_chartData" }] : /* istanbul ignore next */ []));
|
|
10035
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
10036
10036
|
isLoading = this._isLoading.asReadonly();
|
|
10037
10037
|
chartData = this._chartData.asReadonly();
|
|
10038
10038
|
error = this._error.asReadonly();
|
|
10039
|
-
data = computed(() => this._chartData(), ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
10039
|
+
data = computed(() => this._chartData(), ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
10040
10040
|
/**
|
|
10041
10041
|
* Check if widget is not configured (needs data source setup).
|
|
10042
10042
|
* This is a method (not computed) to ensure it re-evaluates when config changes via @Input.
|
|
@@ -10060,7 +10060,7 @@ class PieChartWidgetComponent {
|
|
|
10060
10060
|
_labelSettings = signal({
|
|
10061
10061
|
visible: false,
|
|
10062
10062
|
content: (e) => e.category
|
|
10063
|
-
}, ...(ngDevMode ? [{ debugName: "_labelSettings" }] : []));
|
|
10063
|
+
}, ...(ngDevMode ? [{ debugName: "_labelSettings" }] : /* istanbul ignore next */ []));
|
|
10064
10064
|
labelSettings = this._labelSettings.asReadonly();
|
|
10065
10065
|
updateLabelSettings() {
|
|
10066
10066
|
this._labelSettings.set({
|
|
@@ -10227,8 +10227,8 @@ class PieChartWidgetComponent {
|
|
|
10227
10227
|
const variables = this.stateService.getVariables();
|
|
10228
10228
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
10229
10229
|
}
|
|
10230
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10231
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
10230
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PieChartWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10231
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: PieChartWidgetComponent, isStandalone: true, selector: "mm-pie-chart-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: `
|
|
10232
10232
|
<div class="pie-chart-widget" [class.loading]="isLoading()" [class.error]="error()">
|
|
10233
10233
|
@if (isNotConfigured()) {
|
|
10234
10234
|
<mm-widget-not-configured></mm-widget-not-configured>
|
|
@@ -10268,7 +10268,7 @@ class PieChartWidgetComponent {
|
|
|
10268
10268
|
</div>
|
|
10269
10269
|
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.pie-chart-widget{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:8px;box-sizing:border-box;overflow:hidden}.pie-chart-widget.loading,.pie-chart-widget.error{opacity:.7}.loading-indicator,.error-message,.no-config-overlay{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.loading-indicator span{font-size:1.5rem;color:var(--kendo-color-subtle, #6c757d)}.error-message span{color:var(--kendo-color-error, #dc3545);font-size:.875rem}.no-config-overlay span{color:var(--kendo-color-subtle, #6c757d);font-style:italic}.chart-container{width:100%;height:100%}kendo-chart{width:100%;height:100%}.chart-tooltip{padding:4px 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ChartsModule }, { kind: "component", type: i1$6.ChartComponent, selector: "kendo-chart", inputs: ["pannable", "renderAs", "seriesColors", "subtitle", "title", "noData", "observeStyles", "transitions", "zoomable", "axisDefaults", "categoryAxis", "chartArea", "legend", "panes", "paneDefaults", "plotArea", "series", "seriesDefaults", "tooltip", "valueAxis", "xAxis", "yAxis", "resizeRateLimit", "popupSettings", "drilldownLevel"], outputs: ["axisLabelClick", "drag", "dragEnd", "dragStart", "legendItemHover", "legendItemLeave", "noteClick", "noteHover", "noteLeave", "paneRender", "plotAreaClick", "plotAreaHover", "plotAreaLeave", "render", "select", "selectEnd", "selectStart", "seriesClick", "drilldown", "seriesHover", "seriesOver", "seriesLeave", "zoom", "zoomEnd", "zoomStart", "legendItemClick", "drilldownLevelChange"], exportAs: ["kendoChart"] }, { kind: "directive", type: i1$6.SeriesTooltipTemplateDirective, selector: "[kendoChartSeriesTooltipTemplate]" }, { kind: "component", type: i1$6.LegendComponent, selector: "kendo-chart-legend", inputs: ["align", "background", "border", "height", "labels", "margin", "offsetX", "offsetY", "orientation", "padding", "position", "reverse", "visible", "width", "markers", "spacing", "inactiveItems", "item", "title", "focusHighlight"] }, { kind: "component", type: i1$6.PlotAreaComponent, selector: "kendo-chart-plot-area", inputs: ["background", "border", "margin", "opacity", "padding"] }, { kind: "component", type: i1$6.SeriesComponent, selector: "kendo-chart-series" }, { kind: "component", type: i1$6.SeriesItemComponent, selector: "kendo-chart-series-item", inputs: ["aggregate", "autoFit", "axis", "border", "categoryAxis", "categoryField", "closeField", "color", "colorField", "connectors", "currentField", "dashType", "data", "downColor", "downColorField", "drilldownField", "dynamicHeight", "dynamicSlope", "errorHighField", "errorLowField", "explodeField", "field", "fromField", "gap", "highField", "holeSize", "line", "lowField", "lowerField", "margin", "maxSize", "mean", "meanField", "median", "medianField", "minSize", "missingValues", "name", "neckRatio", "negativeColor", "negativeValues", "noteTextField", "opacity", "openField", "outliersField", "overlay", "padding", "q1Field", "q3Field", "segmentSpacing", "size", "sizeField", "spacing", "stack", "startAngle", "style", "summaryField", "target", "toField", "type", "upperField", "visible", "visibleInLegend", "visibleInLegendField", "visual", "width", "whiskers", "xAxis", "xErrorHighField", "xErrorLowField", "xField", "yAxis", "yErrorHighField", "yErrorLowField", "yField", "zIndex", "trendline", "for", "legendItem", "pattern", "patternField", "errorBars", "extremes", "highlight", "labels", "markers", "notes", "outliers", "tooltip"] }, { kind: "component", type: i1$6.TooltipComponent, selector: "kendo-chart-tooltip", inputs: ["background", "border", "color", "font", "format", "opacity", "padding", "shared", "visible"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
10270
10270
|
}
|
|
10271
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
10271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PieChartWidgetComponent, decorators: [{
|
|
10272
10272
|
type: Component,
|
|
10273
10273
|
args: [{ selector: 'mm-pie-chart-widget', standalone: true, imports: [
|
|
10274
10274
|
CommonModule,
|
|
@@ -10569,8 +10569,8 @@ class PieChartConfigDialogComponent {
|
|
|
10569
10569
|
onCancel() {
|
|
10570
10570
|
this.windowRef.close();
|
|
10571
10571
|
}
|
|
10572
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
10573
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
10572
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PieChartConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10573
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: PieChartConfigDialogComponent, isStandalone: true, selector: "mm-pie-chart-config-dialog", inputs: { initialDataSourceType: "initialDataSourceType", initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName", initialChartType: "initialChartType", initialCategoryField: "initialCategoryField", initialValueField: "initialValueField", initialShowLabels: "initialShowLabels", initialShowLegend: "initialShowLegend", initialLegendPosition: "initialLegendPosition", initialCkQueryTarget: "initialCkQueryTarget", initialCkGroupBy: "initialCkGroupBy", initialFilters: "initialFilters" }, viewQueries: [{ propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
10574
10574
|
<div class="config-container">
|
|
10575
10575
|
|
|
10576
10576
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -10770,7 +10770,7 @@ class PieChartConfigDialogComponent {
|
|
|
10770
10770
|
</div>
|
|
10771
10771
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;flex:1;overflow-y:auto;gap:20px;padding:16px;position:relative}.config-form.loading{pointer-events:none}.config-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.section-title{margin:0 0 16px;font-size:1rem;font-weight:600;color:var(--kendo-color-primary, #0d6efd)}.section-hint{margin:0 0 12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.form-field:last-child{margin-bottom:0}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.required{color:var(--kendo-color-error, #dc3545)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.radio-group{display:flex;gap:24px}.radio-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.query-item{display:flex;flex-direction:column;gap:2px}.query-name{font-weight:500}.query-description{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.column-item{display:flex;justify-content:space-between;gap:16px}.column-path{font-weight:500}.column-type{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: "directive", type: i3.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
10772
10772
|
}
|
|
10773
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
10773
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PieChartConfigDialogComponent, decorators: [{
|
|
10774
10774
|
type: Component,
|
|
10775
10775
|
args: [{ selector: 'mm-pie-chart-config-dialog', standalone: true, imports: [
|
|
10776
10776
|
CommonModule,
|
|
@@ -11024,15 +11024,15 @@ class BarChartWidgetComponent {
|
|
|
11024
11024
|
variableService = inject(MeshBoardVariableService);
|
|
11025
11025
|
config;
|
|
11026
11026
|
// Widget state signals
|
|
11027
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
11028
|
-
_categories = signal([], ...(ngDevMode ? [{ debugName: "_categories" }] : []));
|
|
11029
|
-
_seriesData = signal([], ...(ngDevMode ? [{ debugName: "_seriesData" }] : []));
|
|
11030
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
11027
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
11028
|
+
_categories = signal([], ...(ngDevMode ? [{ debugName: "_categories" }] : /* istanbul ignore next */ []));
|
|
11029
|
+
_seriesData = signal([], ...(ngDevMode ? [{ debugName: "_seriesData" }] : /* istanbul ignore next */ []));
|
|
11030
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
11031
11031
|
isLoading = this._isLoading.asReadonly();
|
|
11032
11032
|
categories = this._categories.asReadonly();
|
|
11033
11033
|
seriesData = this._seriesData.asReadonly();
|
|
11034
11034
|
error = this._error.asReadonly();
|
|
11035
|
-
data = computed(() => this._seriesData(), ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
11035
|
+
data = computed(() => this._seriesData(), ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
11036
11036
|
/**
|
|
11037
11037
|
* Check if widget is not configured (needs data source setup).
|
|
11038
11038
|
* This is a method (not computed) to ensure it re-evaluates when config changes via @Input.
|
|
@@ -11057,23 +11057,23 @@ class BarChartWidgetComponent {
|
|
|
11057
11057
|
kendoChartType = computed(() => {
|
|
11058
11058
|
const chartType = this.config?.chartType ?? 'column';
|
|
11059
11059
|
return CHART_TYPE_MAPPING[chartType]?.type ?? 'column';
|
|
11060
|
-
}, ...(ngDevMode ? [{ debugName: "kendoChartType" }] : []));
|
|
11060
|
+
}, ...(ngDevMode ? [{ debugName: "kendoChartType" }] : /* istanbul ignore next */ []));
|
|
11061
11061
|
stackConfig = computed(() => {
|
|
11062
11062
|
const chartType = this.config?.chartType ?? 'column';
|
|
11063
11063
|
return CHART_TYPE_MAPPING[chartType]?.stack ?? false;
|
|
11064
|
-
}, ...(ngDevMode ? [{ debugName: "stackConfig" }] : []));
|
|
11064
|
+
}, ...(ngDevMode ? [{ debugName: "stackConfig" }] : /* istanbul ignore next */ []));
|
|
11065
11065
|
labelRotation = computed(() => {
|
|
11066
11066
|
// Rotate labels for column charts if many categories
|
|
11067
11067
|
const isColumn = this.kendoChartType() === 'column';
|
|
11068
11068
|
const categoryCount = this._categories().length;
|
|
11069
11069
|
return isColumn && categoryCount > 5 ? -45 : 0;
|
|
11070
|
-
}, ...(ngDevMode ? [{ debugName: "labelRotation" }] : []));
|
|
11070
|
+
}, ...(ngDevMode ? [{ debugName: "labelRotation" }] : /* istanbul ignore next */ []));
|
|
11071
11071
|
/** Extra margin so long category axis labels are not clipped. */
|
|
11072
11072
|
plotAreaMargin = computed(() => {
|
|
11073
11073
|
const isBar = this.kendoChartType() === 'bar';
|
|
11074
11074
|
// Horizontal bar charts need more left margin for category labels on the Y-axis
|
|
11075
11075
|
return isBar ? { top: 0, right: 0, bottom: 0, left: 10 } : { top: 0, right: 0, bottom: 0, left: 0 };
|
|
11076
|
-
}, ...(ngDevMode ? [{ debugName: "plotAreaMargin" }] : []));
|
|
11076
|
+
}, ...(ngDevMode ? [{ debugName: "plotAreaMargin" }] : /* istanbul ignore next */ []));
|
|
11077
11077
|
/** Truncates long category axis labels to prevent overflow. */
|
|
11078
11078
|
categoryLabelContent = (e) => {
|
|
11079
11079
|
const maxLen = 18;
|
|
@@ -11309,8 +11309,8 @@ class BarChartWidgetComponent {
|
|
|
11309
11309
|
const variables = this.stateService.getVariables();
|
|
11310
11310
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
11311
11311
|
}
|
|
11312
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
11313
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
11312
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: BarChartWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11313
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: BarChartWidgetComponent, isStandalone: true, selector: "mm-bar-chart-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: `
|
|
11314
11314
|
<div class="bar-chart-widget" [class.loading]="isLoading()" [class.error]="error()">
|
|
11315
11315
|
@if (isNotConfigured()) {
|
|
11316
11316
|
<mm-widget-not-configured></mm-widget-not-configured>
|
|
@@ -11370,7 +11370,7 @@ class BarChartWidgetComponent {
|
|
|
11370
11370
|
</div>
|
|
11371
11371
|
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.bar-chart-widget{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:8px;box-sizing:border-box;overflow:hidden}.bar-chart-widget.loading,.bar-chart-widget.error{opacity:.7}.loading-indicator,.error-message,.no-config-overlay{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.loading-indicator span{font-size:1.5rem;color:var(--kendo-color-subtle, #6c757d)}.error-message span{color:var(--kendo-color-error, #dc3545);font-size:.875rem}.no-config-overlay span{color:var(--kendo-color-subtle, #6c757d);font-style:italic}.chart-container{width:100%;height:100%}kendo-chart{width:100%;height:100%}.chart-tooltip{padding:4px 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ChartsModule }, { kind: "component", type: i1$6.ChartComponent, selector: "kendo-chart", inputs: ["pannable", "renderAs", "seriesColors", "subtitle", "title", "noData", "observeStyles", "transitions", "zoomable", "axisDefaults", "categoryAxis", "chartArea", "legend", "panes", "paneDefaults", "plotArea", "series", "seriesDefaults", "tooltip", "valueAxis", "xAxis", "yAxis", "resizeRateLimit", "popupSettings", "drilldownLevel"], outputs: ["axisLabelClick", "drag", "dragEnd", "dragStart", "legendItemHover", "legendItemLeave", "noteClick", "noteHover", "noteLeave", "paneRender", "plotAreaClick", "plotAreaHover", "plotAreaLeave", "render", "select", "selectEnd", "selectStart", "seriesClick", "drilldown", "seriesHover", "seriesOver", "seriesLeave", "zoom", "zoomEnd", "zoomStart", "legendItemClick", "drilldownLevelChange"], exportAs: ["kendoChart"] }, { kind: "directive", type: i1$6.SeriesTooltipTemplateDirective, selector: "[kendoChartSeriesTooltipTemplate]" }, { kind: "component", type: i1$6.CategoryAxisComponent, selector: "kendo-chart-category-axis" }, { kind: "component", type: i1$6.CategoryAxisItemComponent, selector: "kendo-chart-category-axis-item", inputs: ["autoBaseUnitSteps", "axisCrossingValue", "background", "baseUnit", "baseUnitStep", "categories", "color", "justified", "line", "majorGridLines", "majorTicks", "max", "maxDateGroups", "maxDivisions", "min", "minorGridLines", "minorTicks", "name", "pane", "plotBands", "reverse", "roundToBaseUnit", "startAngle", "type", "visible", "weekStartDay", "crosshair", "labels", "notes", "select", "title", "rangeLabels"] }, { kind: "component", type: i1$6.CategoryAxisLabelsComponent, selector: "kendo-chart-category-axis-item-labels", inputs: ["background", "border", "color", "content", "culture", "dateFormats", "font", "format", "margin", "mirror", "padding", "position", "rotation", "skip", "step", "visible", "visual"] }, { kind: "component", type: i1$6.LegendComponent, selector: "kendo-chart-legend", inputs: ["align", "background", "border", "height", "labels", "margin", "offsetX", "offsetY", "orientation", "padding", "position", "reverse", "visible", "width", "markers", "spacing", "inactiveItems", "item", "title", "focusHighlight"] }, { kind: "component", type: i1$6.PlotAreaComponent, selector: "kendo-chart-plot-area", inputs: ["background", "border", "margin", "opacity", "padding"] }, { kind: "component", type: i1$6.SeriesComponent, selector: "kendo-chart-series" }, { kind: "component", type: i1$6.SeriesItemComponent, selector: "kendo-chart-series-item", inputs: ["aggregate", "autoFit", "axis", "border", "categoryAxis", "categoryField", "closeField", "color", "colorField", "connectors", "currentField", "dashType", "data", "downColor", "downColorField", "drilldownField", "dynamicHeight", "dynamicSlope", "errorHighField", "errorLowField", "explodeField", "field", "fromField", "gap", "highField", "holeSize", "line", "lowField", "lowerField", "margin", "maxSize", "mean", "meanField", "median", "medianField", "minSize", "missingValues", "name", "neckRatio", "negativeColor", "negativeValues", "noteTextField", "opacity", "openField", "outliersField", "overlay", "padding", "q1Field", "q3Field", "segmentSpacing", "size", "sizeField", "spacing", "stack", "startAngle", "style", "summaryField", "target", "toField", "type", "upperField", "visible", "visibleInLegend", "visibleInLegendField", "visual", "width", "whiskers", "xAxis", "xErrorHighField", "xErrorLowField", "xField", "yAxis", "yErrorHighField", "yErrorLowField", "yField", "zIndex", "trendline", "for", "legendItem", "pattern", "patternField", "errorBars", "extremes", "highlight", "labels", "markers", "notes", "outliers", "tooltip"] }, { kind: "component", type: i1$6.SeriesLabelsComponent, selector: "kendo-chart-series-item-labels", inputs: ["align", "background", "border", "color", "content", "ariaContent", "distance", "font", "format", "margin", "padding", "position", "rotation", "visible", "visual", "from", "to"] }, { kind: "component", type: i1$6.TooltipComponent, selector: "kendo-chart-tooltip", inputs: ["background", "border", "color", "font", "format", "opacity", "padding", "shared", "visible"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
11372
11372
|
}
|
|
11373
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11373
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: BarChartWidgetComponent, decorators: [{
|
|
11374
11374
|
type: Component,
|
|
11375
11375
|
args: [{ selector: 'mm-bar-chart-widget', standalone: true, imports: [
|
|
11376
11376
|
CommonModule,
|
|
@@ -11676,8 +11676,8 @@ class BarChartConfigDialogComponent {
|
|
|
11676
11676
|
onCancel() {
|
|
11677
11677
|
this.windowRef.close();
|
|
11678
11678
|
}
|
|
11679
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
11680
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
11679
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: BarChartConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11680
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: BarChartConfigDialogComponent, isStandalone: true, selector: "mm-bar-chart-config-dialog", inputs: { initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName", initialChartType: "initialChartType", initialCategoryField: "initialCategoryField", initialSeries: "initialSeries", initialSeriesGroupField: "initialSeriesGroupField", initialValueField: "initialValueField", initialShowLegend: "initialShowLegend", initialLegendPosition: "initialLegendPosition", initialShowDataLabels: "initialShowDataLabels", initialFilters: "initialFilters" }, viewQueries: [{ propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
11681
11681
|
<div class="config-container">
|
|
11682
11682
|
|
|
11683
11683
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -11922,7 +11922,7 @@ class BarChartConfigDialogComponent {
|
|
|
11922
11922
|
</div>
|
|
11923
11923
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;flex:1;overflow-y:auto;padding:16px;position:relative}.config-form.loading{pointer-events:none}.config-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.section-title{margin:0 0 16px;font-size:1rem;font-weight:600;color:var(--kendo-color-primary, #0d6efd)}.section-hint{margin:0 0 12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.form-field:last-child{margin-bottom:0}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.required{color:var(--kendo-color-error, #dc3545)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.chart-type-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.radio-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.form-row{display:flex;gap:24px}.checkbox-field{flex-direction:row;align-items:center}.checkbox-field label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.query-item{display:flex;flex-direction:column;gap:2px}.query-name{font-weight:500}.query-description{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.column-item{display:flex;justify-content:space-between;gap:16px}.column-path{font-weight:500}.column-type{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: "directive", type: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "directive", type: i3.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "component", type: i4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["showStickyHeader", "focusableId", "autoClose", "loading", "data", "value", "valueField", "textField", "tabindex", "tabIndex", "size", "rounded", "fillMode", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "disabled", "itemDisabled", "checkboxes", "readonly", "filterable", "virtual", "popupSettings", "listHeight", "valuePrimitive", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "inputAttributes"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
11924
11924
|
}
|
|
11925
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
11925
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: BarChartConfigDialogComponent, decorators: [{
|
|
11926
11926
|
type: Component,
|
|
11927
11927
|
args: [{ selector: 'mm-bar-chart-config-dialog', standalone: true, imports: [
|
|
11928
11928
|
CommonModule,
|
|
@@ -12211,25 +12211,25 @@ class LineChartWidgetComponent {
|
|
|
12211
12211
|
variableService = inject(MeshBoardVariableService);
|
|
12212
12212
|
config;
|
|
12213
12213
|
// Widget state signals
|
|
12214
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
12215
|
-
_categories = signal([], ...(ngDevMode ? [{ debugName: "_categories" }] : []));
|
|
12216
|
-
_seriesData = signal([], ...(ngDevMode ? [{ debugName: "_seriesData" }] : []));
|
|
12217
|
-
_valueAxes = signal([], ...(ngDevMode ? [{ debugName: "_valueAxes" }] : []));
|
|
12218
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
12219
|
-
_seriesUnitMap = signal(new Map(), ...(ngDevMode ? [{ debugName: "_seriesUnitMap" }] : []));
|
|
12214
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
12215
|
+
_categories = signal([], ...(ngDevMode ? [{ debugName: "_categories" }] : /* istanbul ignore next */ []));
|
|
12216
|
+
_seriesData = signal([], ...(ngDevMode ? [{ debugName: "_seriesData" }] : /* istanbul ignore next */ []));
|
|
12217
|
+
_valueAxes = signal([], ...(ngDevMode ? [{ debugName: "_valueAxes" }] : /* istanbul ignore next */ []));
|
|
12218
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
12219
|
+
_seriesUnitMap = signal(new Map(), ...(ngDevMode ? [{ debugName: "_seriesUnitMap" }] : /* istanbul ignore next */ []));
|
|
12220
12220
|
isLoading = this._isLoading.asReadonly();
|
|
12221
12221
|
categories = this._categories.asReadonly();
|
|
12222
12222
|
seriesData = this._seriesData.asReadonly();
|
|
12223
12223
|
valueAxes = this._valueAxes.asReadonly();
|
|
12224
12224
|
error = this._error.asReadonly();
|
|
12225
|
-
data = computed(() => this._seriesData(), ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
12225
|
+
data = computed(() => this._seriesData(), ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
12226
12226
|
chartType = computed(() => {
|
|
12227
12227
|
return this.config?.chartType ?? 'line';
|
|
12228
|
-
}, ...(ngDevMode ? [{ debugName: "chartType" }] : []));
|
|
12228
|
+
}, ...(ngDevMode ? [{ debugName: "chartType" }] : /* istanbul ignore next */ []));
|
|
12229
12229
|
labelRotation = computed(() => {
|
|
12230
12230
|
const categoryCount = this._categories().length;
|
|
12231
12231
|
return categoryCount > 5 ? -45 : 0;
|
|
12232
|
-
}, ...(ngDevMode ? [{ debugName: "labelRotation" }] : []));
|
|
12232
|
+
}, ...(ngDevMode ? [{ debugName: "labelRotation" }] : /* istanbul ignore next */ []));
|
|
12233
12233
|
/**
|
|
12234
12234
|
* Step for category axis labels to avoid overcrowding.
|
|
12235
12235
|
* Shows every Nth label depending on total count.
|
|
@@ -12243,7 +12243,7 @@ class LineChartWidgetComponent {
|
|
|
12243
12243
|
if (count <= 100)
|
|
12244
12244
|
return Math.ceil(count / 15);
|
|
12245
12245
|
return Math.ceil(count / 20);
|
|
12246
|
-
}, ...(ngDevMode ? [{ debugName: "labelStep" }] : []));
|
|
12246
|
+
}, ...(ngDevMode ? [{ debugName: "labelStep" }] : /* istanbul ignore next */ []));
|
|
12247
12247
|
isNotConfigured() {
|
|
12248
12248
|
const dataSource = this.config?.dataSource;
|
|
12249
12249
|
if (!dataSource)
|
|
@@ -12468,8 +12468,8 @@ class LineChartWidgetComponent {
|
|
|
12468
12468
|
const variables = this.stateService.getVariables();
|
|
12469
12469
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
12470
12470
|
}
|
|
12471
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
12472
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
12471
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LineChartWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12472
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: LineChartWidgetComponent, isStandalone: true, selector: "mm-line-chart-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: `
|
|
12473
12473
|
<div class="line-chart-widget" [class.loading]="isLoading()" [class.error]="error()">
|
|
12474
12474
|
@if (isNotConfigured()) {
|
|
12475
12475
|
<mm-widget-not-configured></mm-widget-not-configured>
|
|
@@ -12536,7 +12536,7 @@ class LineChartWidgetComponent {
|
|
|
12536
12536
|
</div>
|
|
12537
12537
|
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.line-chart-widget{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:8px;box-sizing:border-box;overflow:hidden}.line-chart-widget.loading,.line-chart-widget.error{opacity:.7}.loading-indicator,.error-message{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.loading-indicator span{font-size:1.5rem;color:var(--kendo-color-subtle, #6c757d)}.error-message span{color:var(--kendo-color-error, #dc3545);font-size:.875rem}.chart-container{width:100%;height:100%}kendo-chart{width:100%;height:100%}.chart-tooltip{padding:4px 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ChartsModule }, { kind: "component", type: i1$6.ChartComponent, selector: "kendo-chart", inputs: ["pannable", "renderAs", "seriesColors", "subtitle", "title", "noData", "observeStyles", "transitions", "zoomable", "axisDefaults", "categoryAxis", "chartArea", "legend", "panes", "paneDefaults", "plotArea", "series", "seriesDefaults", "tooltip", "valueAxis", "xAxis", "yAxis", "resizeRateLimit", "popupSettings", "drilldownLevel"], outputs: ["axisLabelClick", "drag", "dragEnd", "dragStart", "legendItemHover", "legendItemLeave", "noteClick", "noteHover", "noteLeave", "paneRender", "plotAreaClick", "plotAreaHover", "plotAreaLeave", "render", "select", "selectEnd", "selectStart", "seriesClick", "drilldown", "seriesHover", "seriesOver", "seriesLeave", "zoom", "zoomEnd", "zoomStart", "legendItemClick", "drilldownLevelChange"], exportAs: ["kendoChart"] }, { kind: "directive", type: i1$6.SeriesTooltipTemplateDirective, selector: "[kendoChartSeriesTooltipTemplate]" }, { kind: "component", type: i1$6.CategoryAxisComponent, selector: "kendo-chart-category-axis" }, { kind: "component", type: i1$6.CategoryAxisItemComponent, selector: "kendo-chart-category-axis-item", inputs: ["autoBaseUnitSteps", "axisCrossingValue", "background", "baseUnit", "baseUnitStep", "categories", "color", "justified", "line", "majorGridLines", "majorTicks", "max", "maxDateGroups", "maxDivisions", "min", "minorGridLines", "minorTicks", "name", "pane", "plotBands", "reverse", "roundToBaseUnit", "startAngle", "type", "visible", "weekStartDay", "crosshair", "labels", "notes", "select", "title", "rangeLabels"] }, { kind: "component", type: i1$6.CategoryAxisLabelsComponent, selector: "kendo-chart-category-axis-item-labels", inputs: ["background", "border", "color", "content", "culture", "dateFormats", "font", "format", "margin", "mirror", "padding", "position", "rotation", "skip", "step", "visible", "visual"] }, { kind: "component", type: i1$6.LegendComponent, selector: "kendo-chart-legend", inputs: ["align", "background", "border", "height", "labels", "margin", "offsetX", "offsetY", "orientation", "padding", "position", "reverse", "visible", "width", "markers", "spacing", "inactiveItems", "item", "title", "focusHighlight"] }, { kind: "component", type: i1$6.PlotAreaComponent, selector: "kendo-chart-plot-area", inputs: ["background", "border", "margin", "opacity", "padding"] }, { kind: "component", type: i1$6.SeriesComponent, selector: "kendo-chart-series" }, { kind: "component", type: i1$6.SeriesItemComponent, selector: "kendo-chart-series-item", inputs: ["aggregate", "autoFit", "axis", "border", "categoryAxis", "categoryField", "closeField", "color", "colorField", "connectors", "currentField", "dashType", "data", "downColor", "downColorField", "drilldownField", "dynamicHeight", "dynamicSlope", "errorHighField", "errorLowField", "explodeField", "field", "fromField", "gap", "highField", "holeSize", "line", "lowField", "lowerField", "margin", "maxSize", "mean", "meanField", "median", "medianField", "minSize", "missingValues", "name", "neckRatio", "negativeColor", "negativeValues", "noteTextField", "opacity", "openField", "outliersField", "overlay", "padding", "q1Field", "q3Field", "segmentSpacing", "size", "sizeField", "spacing", "stack", "startAngle", "style", "summaryField", "target", "toField", "type", "upperField", "visible", "visibleInLegend", "visibleInLegendField", "visual", "width", "whiskers", "xAxis", "xErrorHighField", "xErrorLowField", "xField", "yAxis", "yErrorHighField", "yErrorLowField", "yField", "zIndex", "trendline", "for", "legendItem", "pattern", "patternField", "errorBars", "extremes", "highlight", "labels", "markers", "notes", "outliers", "tooltip"] }, { kind: "component", type: i1$6.TooltipComponent, selector: "kendo-chart-tooltip", inputs: ["background", "border", "color", "font", "format", "opacity", "padding", "shared", "visible"] }, { kind: "component", type: i1$6.ValueAxisComponent, selector: "kendo-chart-value-axis" }, { kind: "component", type: i1$6.ValueAxisItemComponent, selector: "kendo-chart-value-axis-item", inputs: ["axisCrossingValue", "background", "color", "line", "majorGridLines", "majorTicks", "majorUnit", "max", "min", "minorGridLines", "minorTicks", "minorUnit", "name", "narrowRange", "pane", "plotBands", "reverse", "type", "visible", "crosshair", "labels", "notes", "title"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
12538
12538
|
}
|
|
12539
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
12539
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LineChartWidgetComponent, decorators: [{
|
|
12540
12540
|
type: Component,
|
|
12541
12541
|
args: [{ selector: 'mm-line-chart-widget', standalone: true, imports: [
|
|
12542
12542
|
CommonModule,
|
|
@@ -12791,8 +12791,8 @@ class LineChartConfigDialogComponent {
|
|
|
12791
12791
|
onCancel() {
|
|
12792
12792
|
this.windowRef.close();
|
|
12793
12793
|
}
|
|
12794
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
12795
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
12794
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LineChartConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12795
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: LineChartConfigDialogComponent, isStandalone: true, selector: "mm-line-chart-config-dialog", inputs: { initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName", initialChartType: "initialChartType", initialCategoryField: "initialCategoryField", initialSeriesGroupField: "initialSeriesGroupField", initialValueField: "initialValueField", initialUnitField: "initialUnitField", initialShowLegend: "initialShowLegend", initialLegendPosition: "initialLegendPosition", initialShowMarkers: "initialShowMarkers", initialFilters: "initialFilters" }, viewQueries: [{ propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
12796
12796
|
<div class="config-container">
|
|
12797
12797
|
|
|
12798
12798
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -12983,7 +12983,7 @@ class LineChartConfigDialogComponent {
|
|
|
12983
12983
|
</div>
|
|
12984
12984
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;flex:1;overflow-y:auto;padding:16px;position:relative}.config-form.loading{pointer-events:none}.config-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.section-title{margin:0 0 16px;font-size:1rem;font-weight:600;color:var(--kendo-color-primary, #0d6efd)}.section-hint{margin:0 0 12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.form-field:last-child{margin-bottom:0}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.required{color:var(--kendo-color-error, #dc3545)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.chart-type-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.radio-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.form-row{display:flex;gap:24px;align-items:center}.checkbox-field{flex-direction:row;align-items:center;margin-bottom:0}.checkbox-field label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.column-item{display:flex;justify-content:space-between;gap:16px}.column-path{font-weight:500}.column-type{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: "directive", type: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "directive", type: i3.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
12985
12985
|
}
|
|
12986
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
12986
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LineChartConfigDialogComponent, decorators: [{
|
|
12987
12987
|
type: Component,
|
|
12988
12988
|
args: [{ selector: 'mm-line-chart-config-dialog', standalone: true, imports: [
|
|
12989
12989
|
CommonModule,
|
|
@@ -13235,17 +13235,17 @@ class HeatmapWidgetComponent {
|
|
|
13235
13235
|
variableService = inject(MeshBoardVariableService);
|
|
13236
13236
|
config;
|
|
13237
13237
|
// Widget state signals
|
|
13238
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
13239
|
-
_heatmapData = signal([], ...(ngDevMode ? [{ debugName: "_heatmapData" }] : []));
|
|
13240
|
-
_xCategories = signal([], ...(ngDevMode ? [{ debugName: "_xCategories" }] : []));
|
|
13241
|
-
_yCategories = signal([], ...(ngDevMode ? [{ debugName: "_yCategories" }] : []));
|
|
13242
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
13238
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
13239
|
+
_heatmapData = signal([], ...(ngDevMode ? [{ debugName: "_heatmapData" }] : /* istanbul ignore next */ []));
|
|
13240
|
+
_xCategories = signal([], ...(ngDevMode ? [{ debugName: "_xCategories" }] : /* istanbul ignore next */ []));
|
|
13241
|
+
_yCategories = signal([], ...(ngDevMode ? [{ debugName: "_yCategories" }] : /* istanbul ignore next */ []));
|
|
13242
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
13243
13243
|
isLoading = this._isLoading.asReadonly();
|
|
13244
13244
|
heatmapData = this._heatmapData.asReadonly();
|
|
13245
13245
|
xCategories = this._xCategories.asReadonly();
|
|
13246
13246
|
yCategories = this._yCategories.asReadonly();
|
|
13247
13247
|
error = this._error.asReadonly();
|
|
13248
|
-
data = computed(() => this._heatmapData(), ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
13248
|
+
data = computed(() => this._heatmapData(), ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
13249
13249
|
/**
|
|
13250
13250
|
* Returns the color for a given value based on the color scheme ranges.
|
|
13251
13251
|
* Returns 'transparent' for zero/no-data values.
|
|
@@ -13609,8 +13609,8 @@ class HeatmapWidgetComponent {
|
|
|
13609
13609
|
const variables = this.stateService.getVariables();
|
|
13610
13610
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
13611
13611
|
}
|
|
13612
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
13613
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
13612
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: HeatmapWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13613
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: HeatmapWidgetComponent, isStandalone: true, selector: "mm-heatmap-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: `
|
|
13614
13614
|
<div class="heatmap-widget" [class.loading]="isLoading()" [class.error]="error()">
|
|
13615
13615
|
@if (isNotConfigured()) {
|
|
13616
13616
|
<mm-widget-not-configured></mm-widget-not-configured>
|
|
@@ -13669,7 +13669,7 @@ class HeatmapWidgetComponent {
|
|
|
13669
13669
|
</div>
|
|
13670
13670
|
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.heatmap-widget{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:8px;box-sizing:border-box;overflow:hidden}.heatmap-widget.loading,.heatmap-widget.error{opacity:.7}.loading-indicator,.error-message{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.loading-indicator span{font-size:1.5rem;color:var(--kendo-color-subtle, #6c757d)}.error-message span{color:var(--kendo-color-error, #dc3545);font-size:.875rem}.chart-container{width:100%;height:100%}kendo-chart{width:100%;height:100%}.chart-tooltip{padding:4px 8px;color:#212529;background:#fff;border-radius:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ChartsModule }, { kind: "component", type: i1$6.ChartComponent, selector: "kendo-chart", inputs: ["pannable", "renderAs", "seriesColors", "subtitle", "title", "noData", "observeStyles", "transitions", "zoomable", "axisDefaults", "categoryAxis", "chartArea", "legend", "panes", "paneDefaults", "plotArea", "series", "seriesDefaults", "tooltip", "valueAxis", "xAxis", "yAxis", "resizeRateLimit", "popupSettings", "drilldownLevel"], outputs: ["axisLabelClick", "drag", "dragEnd", "dragStart", "legendItemHover", "legendItemLeave", "noteClick", "noteHover", "noteLeave", "paneRender", "plotAreaClick", "plotAreaHover", "plotAreaLeave", "render", "select", "selectEnd", "selectStart", "seriesClick", "drilldown", "seriesHover", "seriesOver", "seriesLeave", "zoom", "zoomEnd", "zoomStart", "legendItemClick", "drilldownLevelChange"], exportAs: ["kendoChart"] }, { kind: "component", type: i1$6.XAxisComponent, selector: "kendo-chart-x-axis" }, { kind: "component", type: i1$6.XAxisItemComponent, selector: "kendo-chart-x-axis-item", inputs: ["axisCrossingValue", "background", "baseUnit", "categories", "color", "line", "majorGridLines", "majorTicks", "majorUnit", "max", "min", "minorGridLines", "minorTicks", "minorUnit", "name", "narrowRange", "pane", "plotBands", "reverse", "startAngle", "type", "visible", "weekStartDay", "crosshair", "labels", "notes", "title"] }, { kind: "component", type: i1$6.XAxisLabelsComponent, selector: "kendo-chart-x-axis-item-labels", inputs: ["background", "border", "color", "content", "culture", "dateFormats", "font", "format", "margin", "mirror", "padding", "position", "rotation", "skip", "step", "visible", "visual"] }, { kind: "component", type: i1$6.YAxisComponent, selector: "kendo-chart-y-axis" }, { kind: "component", type: i1$6.YAxisItemComponent, selector: "kendo-chart-y-axis-item", inputs: ["axisCrossingValue", "background", "baseUnit", "categories", "color", "line", "majorGridLines", "majorTicks", "majorUnit", "max", "min", "minorGridLines", "minorTicks", "minorUnit", "name", "narrowRange", "pane", "plotBands", "reverse", "type", "visible", "crosshair", "labels", "notes", "title"] }, { kind: "directive", type: i1$6.SeriesTooltipTemplateDirective, selector: "[kendoChartSeriesTooltipTemplate]" }, { kind: "component", type: i1$6.LegendComponent, selector: "kendo-chart-legend", inputs: ["align", "background", "border", "height", "labels", "margin", "offsetX", "offsetY", "orientation", "padding", "position", "reverse", "visible", "width", "markers", "spacing", "inactiveItems", "item", "title", "focusHighlight"] }, { kind: "component", type: i1$6.SeriesComponent, selector: "kendo-chart-series" }, { kind: "component", type: i1$6.SeriesItemComponent, selector: "kendo-chart-series-item", inputs: ["aggregate", "autoFit", "axis", "border", "categoryAxis", "categoryField", "closeField", "color", "colorField", "connectors", "currentField", "dashType", "data", "downColor", "downColorField", "drilldownField", "dynamicHeight", "dynamicSlope", "errorHighField", "errorLowField", "explodeField", "field", "fromField", "gap", "highField", "holeSize", "line", "lowField", "lowerField", "margin", "maxSize", "mean", "meanField", "median", "medianField", "minSize", "missingValues", "name", "neckRatio", "negativeColor", "negativeValues", "noteTextField", "opacity", "openField", "outliersField", "overlay", "padding", "q1Field", "q3Field", "segmentSpacing", "size", "sizeField", "spacing", "stack", "startAngle", "style", "summaryField", "target", "toField", "type", "upperField", "visible", "visibleInLegend", "visibleInLegendField", "visual", "width", "whiskers", "xAxis", "xErrorHighField", "xErrorLowField", "xField", "yAxis", "yErrorHighField", "yErrorLowField", "yField", "zIndex", "trendline", "for", "legendItem", "pattern", "patternField", "errorBars", "extremes", "highlight", "labels", "markers", "notes", "outliers", "tooltip"] }, { kind: "component", type: i1$6.SeriesLabelsComponent, selector: "kendo-chart-series-item-labels", inputs: ["align", "background", "border", "color", "content", "ariaContent", "distance", "font", "format", "margin", "padding", "position", "rotation", "visible", "visual", "from", "to"] }, { kind: "component", type: i1$6.TooltipComponent, selector: "kendo-chart-tooltip", inputs: ["background", "border", "color", "font", "format", "opacity", "padding", "shared", "visible"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
13671
13671
|
}
|
|
13672
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
13672
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: HeatmapWidgetComponent, decorators: [{
|
|
13673
13673
|
type: Component,
|
|
13674
13674
|
args: [{ selector: 'mm-heatmap-widget', standalone: true, imports: [
|
|
13675
13675
|
CommonModule,
|
|
@@ -13945,8 +13945,8 @@ class HeatmapConfigDialogComponent {
|
|
|
13945
13945
|
onCancel() {
|
|
13946
13946
|
this.windowRef.close();
|
|
13947
13947
|
}
|
|
13948
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
13949
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
13948
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: HeatmapConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13949
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: HeatmapConfigDialogComponent, isStandalone: true, selector: "mm-heatmap-config-dialog", inputs: { initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName", initialDateField: "initialDateField", initialDateEndField: "initialDateEndField", initialValueField: "initialValueField", initialAggregation: "initialAggregation", initialColorScheme: "initialColorScheme", initialShowLegend: "initialShowLegend", initialLegendPosition: "initialLegendPosition", initialDecimalPlaces: "initialDecimalPlaces", initialCompactNumbers: "initialCompactNumbers", initialValueMultiplier: "initialValueMultiplier", initialFilters: "initialFilters" }, viewQueries: [{ propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
13950
13950
|
<div class="config-container">
|
|
13951
13951
|
|
|
13952
13952
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -14157,7 +14157,7 @@ class HeatmapConfigDialogComponent {
|
|
|
14157
14157
|
</div>
|
|
14158
14158
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;flex:1;overflow-y:auto;padding:16px;position:relative}.config-form.loading{pointer-events:none}.config-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.section-title{margin:0 0 16px;font-size:1rem;font-weight:600;color:var(--kendo-color-primary, #0d6efd)}.section-hint{margin:0 0 12px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.form-field:last-child{margin-bottom:0}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.required{color:var(--kendo-color-error, #dc3545)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.color-scheme-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.radio-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.color-scheme-preview{display:flex;align-items:center;gap:6px}.color-swatch{display:inline-block;width:16px;height:16px;border-radius:3px;border:1px solid var(--kendo-color-border, #dee2e6)}.form-row{display:flex;gap:24px}.checkbox-field{flex-direction:row;align-items:center}.checkbox-field label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.column-item{display:flex;justify-content:space-between;gap:16px}.column-path{font-weight:500}.column-type{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "directive", type: i3.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
14159
14159
|
}
|
|
14160
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
14160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: HeatmapConfigDialogComponent, decorators: [{
|
|
14161
14161
|
type: Component,
|
|
14162
14162
|
args: [{ selector: 'mm-heatmap-config-dialog', standalone: true, imports: [
|
|
14163
14163
|
CommonModule,
|
|
@@ -14413,9 +14413,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
14413
14413
|
class StatsGridWidgetComponent {
|
|
14414
14414
|
dataService = inject(MeshBoardDataService);
|
|
14415
14415
|
config;
|
|
14416
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
14417
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
14418
|
-
_statValues = signal([], ...(ngDevMode ? [{ debugName: "_statValues" }] : []));
|
|
14416
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
14417
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
14418
|
+
_statValues = signal([], ...(ngDevMode ? [{ debugName: "_statValues" }] : /* istanbul ignore next */ []));
|
|
14419
14419
|
isLoading = this._isLoading.asReadonly();
|
|
14420
14420
|
error = this._error.asReadonly();
|
|
14421
14421
|
statValues = this._statValues.asReadonly();
|
|
@@ -14510,10 +14510,10 @@ class StatsGridWidgetComponent {
|
|
|
14510
14510
|
get gridColumns() {
|
|
14511
14511
|
return this.config?.columns ?? 3;
|
|
14512
14512
|
}
|
|
14513
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
14514
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
14513
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatsGridWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14514
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: StatsGridWidgetComponent, isStandalone: true, selector: "mm-stats-grid-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"stats-grid\" [style.--grid-columns]=\"gridColumns\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n }\n @for (stat of statValues(); track stat.label) {\n <div class=\"stat-card\" [class]=\"stat.color\">\n @if (stat.isLoading) {\n <div class=\"stat-value loading\">...</div>\n } @else {\n <div class=\"stat-value\">{{ formatValue(stat) }}</div>\n }\n <div class=\"stat-label\">{{ stat.label }}</div>\n </div>\n }\n\n @if (error()) {\n <div class=\"stats-error\">\n {{ error() }}\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;--mm-stat-mint-bg: rgba(152, 217, 194, .15);--mm-stat-mint-border: #98d9c2;--mm-stat-mint-text: #5ba88c;--mm-stat-mint-glow: none;--mm-stat-cyan-bg: rgba(91, 192, 190, .15);--mm-stat-cyan-border: #5bc0be;--mm-stat-cyan-text: #3a8a88;--mm-stat-cyan-glow: none;--mm-stat-violet-bg: rgba(155, 93, 229, .15);--mm-stat-violet-border: #9b5de5;--mm-stat-violet-text: #6b3baf;--mm-stat-violet-glow: none;--mm-stat-toffee-bg: rgba(244, 162, 97, .15);--mm-stat-toffee-border: #f4a261;--mm-stat-toffee-text: #c4723b;--mm-stat-toffee-glow: none;--mm-stat-lilac-bg: rgba(201, 177, 255, .15);--mm-stat-lilac-border: #c9b1ff;--mm-stat-lilac-text: #9981cf;--mm-stat-lilac-glow: none;--mm-stat-bubblegum-bg: rgba(255, 153, 200, .15);--mm-stat-bubblegum-border: #ff99c8;--mm-stat-bubblegum-text: #cf699a;--mm-stat-bubblegum-glow: none;--mm-stat-default-bg: rgba(108, 117, 125, .15);--mm-stat-default-border: #6c757d;--mm-stat-default-text: #4a5258;--mm-stat-default-glow: none}.stats-grid{display:grid;grid-template-columns:repeat(var(--grid-columns, 3),1fr);gap:12px;padding:8px;height:100%;align-content:center}.stat-card{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:16px 12px;border-radius:8px;background:#00000008;transition:transform .2s ease,box-shadow .2s ease}.stat-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.stat-card.stat-mint{background:var(--mm-stat-mint-bg);border-left:4px solid var(--mm-stat-mint-border)}.stat-card.stat-mint .stat-value{color:var(--mm-stat-mint-text);text-shadow:var(--mm-stat-mint-glow)}.stat-card.stat-cyan{background:var(--mm-stat-cyan-bg);border-left:4px solid var(--mm-stat-cyan-border)}.stat-card.stat-cyan .stat-value{color:var(--mm-stat-cyan-text);text-shadow:var(--mm-stat-cyan-glow)}.stat-card.stat-violet{background:var(--mm-stat-violet-bg);border-left:4px solid var(--mm-stat-violet-border)}.stat-card.stat-violet .stat-value{color:var(--mm-stat-violet-text);text-shadow:var(--mm-stat-violet-glow)}.stat-card.stat-toffee{background:var(--mm-stat-toffee-bg);border-left:4px solid var(--mm-stat-toffee-border)}.stat-card.stat-toffee .stat-value{color:var(--mm-stat-toffee-text);text-shadow:var(--mm-stat-toffee-glow)}.stat-card.stat-lilac{background:var(--mm-stat-lilac-bg);border-left:4px solid var(--mm-stat-lilac-border)}.stat-card.stat-lilac .stat-value{color:var(--mm-stat-lilac-text);text-shadow:var(--mm-stat-lilac-glow)}.stat-card.stat-bubblegum{background:var(--mm-stat-bubblegum-bg);border-left:4px solid var(--mm-stat-bubblegum-border)}.stat-card.stat-bubblegum .stat-value{color:var(--mm-stat-bubblegum-text);text-shadow:var(--mm-stat-bubblegum-glow)}.stat-card.stat-default{background:var(--mm-stat-default-bg);border-left:4px solid var(--mm-stat-default-border)}.stat-card.stat-default .stat-value{color:var(--mm-stat-default-text);text-shadow:var(--mm-stat-default-glow)}.stat-value{font-size:2rem;font-weight:700;line-height:1.2;text-align:center}.stat-value.loading{opacity:.5;animation:pulse 1.5s ease-in-out infinite}.stat-label{font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--kendo-color-subtle, #6c757d);margin-top:4px;text-align:center}.stats-error{grid-column:1/-1;text-align:center;padding:16px;color:var(--kendo-color-error, #dc3545);font-size:.875rem}@keyframes pulse{0%,to{opacity:.5}50%{opacity:.3}}@media(max-width:768px){.stats-grid{grid-template-columns:repeat(2,1fr);gap:8px}.stat-value{font-size:1.5rem}.stat-label{font-size:.65rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
14515
14515
|
}
|
|
14516
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
14516
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatsGridWidgetComponent, decorators: [{
|
|
14517
14517
|
type: Component,
|
|
14518
14518
|
args: [{ selector: 'mm-stats-grid-widget', standalone: true, imports: [CommonModule, WidgetNotConfiguredComponent], template: "<div class=\"stats-grid\" [style.--grid-columns]=\"gridColumns\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n }\n @for (stat of statValues(); track stat.label) {\n <div class=\"stat-card\" [class]=\"stat.color\">\n @if (stat.isLoading) {\n <div class=\"stat-value loading\">...</div>\n } @else {\n <div class=\"stat-value\">{{ formatValue(stat) }}</div>\n }\n <div class=\"stat-label\">{{ stat.label }}</div>\n </div>\n }\n\n @if (error()) {\n <div class=\"stats-error\">\n {{ error() }}\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;--mm-stat-mint-bg: rgba(152, 217, 194, .15);--mm-stat-mint-border: #98d9c2;--mm-stat-mint-text: #5ba88c;--mm-stat-mint-glow: none;--mm-stat-cyan-bg: rgba(91, 192, 190, .15);--mm-stat-cyan-border: #5bc0be;--mm-stat-cyan-text: #3a8a88;--mm-stat-cyan-glow: none;--mm-stat-violet-bg: rgba(155, 93, 229, .15);--mm-stat-violet-border: #9b5de5;--mm-stat-violet-text: #6b3baf;--mm-stat-violet-glow: none;--mm-stat-toffee-bg: rgba(244, 162, 97, .15);--mm-stat-toffee-border: #f4a261;--mm-stat-toffee-text: #c4723b;--mm-stat-toffee-glow: none;--mm-stat-lilac-bg: rgba(201, 177, 255, .15);--mm-stat-lilac-border: #c9b1ff;--mm-stat-lilac-text: #9981cf;--mm-stat-lilac-glow: none;--mm-stat-bubblegum-bg: rgba(255, 153, 200, .15);--mm-stat-bubblegum-border: #ff99c8;--mm-stat-bubblegum-text: #cf699a;--mm-stat-bubblegum-glow: none;--mm-stat-default-bg: rgba(108, 117, 125, .15);--mm-stat-default-border: #6c757d;--mm-stat-default-text: #4a5258;--mm-stat-default-glow: none}.stats-grid{display:grid;grid-template-columns:repeat(var(--grid-columns, 3),1fr);gap:12px;padding:8px;height:100%;align-content:center}.stat-card{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:16px 12px;border-radius:8px;background:#00000008;transition:transform .2s ease,box-shadow .2s ease}.stat-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.stat-card.stat-mint{background:var(--mm-stat-mint-bg);border-left:4px solid var(--mm-stat-mint-border)}.stat-card.stat-mint .stat-value{color:var(--mm-stat-mint-text);text-shadow:var(--mm-stat-mint-glow)}.stat-card.stat-cyan{background:var(--mm-stat-cyan-bg);border-left:4px solid var(--mm-stat-cyan-border)}.stat-card.stat-cyan .stat-value{color:var(--mm-stat-cyan-text);text-shadow:var(--mm-stat-cyan-glow)}.stat-card.stat-violet{background:var(--mm-stat-violet-bg);border-left:4px solid var(--mm-stat-violet-border)}.stat-card.stat-violet .stat-value{color:var(--mm-stat-violet-text);text-shadow:var(--mm-stat-violet-glow)}.stat-card.stat-toffee{background:var(--mm-stat-toffee-bg);border-left:4px solid var(--mm-stat-toffee-border)}.stat-card.stat-toffee .stat-value{color:var(--mm-stat-toffee-text);text-shadow:var(--mm-stat-toffee-glow)}.stat-card.stat-lilac{background:var(--mm-stat-lilac-bg);border-left:4px solid var(--mm-stat-lilac-border)}.stat-card.stat-lilac .stat-value{color:var(--mm-stat-lilac-text);text-shadow:var(--mm-stat-lilac-glow)}.stat-card.stat-bubblegum{background:var(--mm-stat-bubblegum-bg);border-left:4px solid var(--mm-stat-bubblegum-border)}.stat-card.stat-bubblegum .stat-value{color:var(--mm-stat-bubblegum-text);text-shadow:var(--mm-stat-bubblegum-glow)}.stat-card.stat-default{background:var(--mm-stat-default-bg);border-left:4px solid var(--mm-stat-default-border)}.stat-card.stat-default .stat-value{color:var(--mm-stat-default-text);text-shadow:var(--mm-stat-default-glow)}.stat-value{font-size:2rem;font-weight:700;line-height:1.2;text-align:center}.stat-value.loading{opacity:.5;animation:pulse 1.5s ease-in-out infinite}.stat-label{font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--kendo-color-subtle, #6c757d);margin-top:4px;text-align:center}.stats-error{grid-column:1/-1;text-align:center;padding:16px;color:var(--kendo-color-error, #dc3545);font-size:.875rem}@keyframes pulse{0%,to{opacity:.5}50%{opacity:.3}}@media(max-width:768px){.stats-grid{grid-template-columns:repeat(2,1fr);gap:8px}.stat-value{font-size:1.5rem}.stat-label{font-size:.65rem}}\n"] }]
|
|
14519
14519
|
}], propDecorators: { config: [{
|
|
@@ -14619,8 +14619,8 @@ class StatsGridConfigDialogComponent {
|
|
|
14619
14619
|
onCancel() {
|
|
14620
14620
|
this.windowRef.close();
|
|
14621
14621
|
}
|
|
14622
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
14623
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
14622
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatsGridConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14623
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: StatsGridConfigDialogComponent, isStandalone: true, selector: "mm-stats-grid-config-dialog", inputs: { initialStats: "initialStats", initialQueries: "initialQueries", initialColumns: "initialColumns" }, ngImport: i0, template: `
|
|
14624
14624
|
<div class="config-container">
|
|
14625
14625
|
|
|
14626
14626
|
<div class="config-form">
|
|
@@ -14756,7 +14756,7 @@ class StatsGridConfigDialogComponent {
|
|
|
14756
14756
|
</div>
|
|
14757
14757
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;padding:16px;flex:1;overflow-y:auto}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.flex-1{flex:1}.form-field.flex-2{flex:2}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.form-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.section-header h4{margin:0;font-size:.95rem;color:var(--kendo-color-primary, #0d6efd)}.form-row{display:flex;gap:16px}.required{color:var(--kendo-color-error, #dc3545)}.empty-state{text-align:center;padding:24px;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.stat-item{padding:16px;margin-bottom:12px;background:var(--kendo-color-surface, #ffffff);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.stat-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.stat-number{font-weight:600;color:var(--kendo-color-primary, #0d6efd)}.stat-form{display:flex;flex-direction:column;gap:12px}.color-item{display:flex;align-items:center;gap:8px}.color-swatch{width:16px;height:16px;border-radius:3px;border:1px solid rgba(0,0,0,.1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.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: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: i4.ValueTemplateDirective, selector: "[kendoDropDownListValueTemplate],[kendoDropDownTreeValueTemplate]" }] });
|
|
14758
14758
|
}
|
|
14759
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
14759
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatsGridConfigDialogComponent, decorators: [{
|
|
14760
14760
|
type: Component,
|
|
14761
14761
|
args: [{ selector: 'mm-stats-grid-config-dialog', standalone: true, imports: [
|
|
14762
14762
|
CommonModule,
|
|
@@ -14910,9 +14910,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
14910
14910
|
class StatusIndicatorWidgetComponent {
|
|
14911
14911
|
ckModelService = inject(CkModelService);
|
|
14912
14912
|
config;
|
|
14913
|
-
_isLoading = signal(true, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
14914
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
14915
|
-
_status = signal(null, ...(ngDevMode ? [{ debugName: "_status" }] : []));
|
|
14913
|
+
_isLoading = signal(true, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
14914
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
14915
|
+
_status = signal(null, ...(ngDevMode ? [{ debugName: "_status" }] : /* istanbul ignore next */ []));
|
|
14916
14916
|
isLoading = this._isLoading.asReadonly();
|
|
14917
14917
|
error = this._error.asReadonly();
|
|
14918
14918
|
status = this._status.asReadonly();
|
|
@@ -15001,10 +15001,10 @@ class StatusIndicatorWidgetComponent {
|
|
|
15001
15001
|
return this.config.falseColor ?? '#ef4444';
|
|
15002
15002
|
}
|
|
15003
15003
|
}
|
|
15004
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
15005
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
15004
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatusIndicatorWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15005
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: StatusIndicatorWidgetComponent, isStandalone: true, selector: "mm-status-indicator-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"status-indicator\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else {\n <div class=\"status-badge\" [style.background-color]=\"statusColor\">\n <span class=\"status-text\">{{ statusLabel }}</span>\n </div>\n\n @if (error()) {\n <div class=\"status-error\">\n {{ error() }}\n </div>\n }\n }\n</div>\n", styles: [":host{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.status-indicator{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;padding:16px}.status-indicator.loading .status-badge{opacity:.6;animation:pulse 1.5s ease-in-out infinite}.status-indicator.error .status-badge{background-color:var(--kendo-color-error, #dc3545)!important}.status-badge{display:inline-flex;align-items:center;justify-content:center;padding:8px 24px;border-radius:24px;min-width:120px;transition:background-color .3s ease,opacity .3s ease}.status-text{font-size:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.2)}.status-error{margin-top:8px;font-size:.75rem;color:var(--kendo-color-error, #dc3545);text-align:center}@keyframes pulse{0%,to{opacity:.6}50%{opacity:.3}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
15006
15006
|
}
|
|
15007
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
15007
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatusIndicatorWidgetComponent, decorators: [{
|
|
15008
15008
|
type: Component,
|
|
15009
15009
|
args: [{ selector: 'mm-status-indicator-widget', standalone: true, imports: [CommonModule, WidgetNotConfiguredComponent], template: "<div class=\"status-indicator\" [class.loading]=\"isLoading()\" [class.error]=\"error()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else {\n <div class=\"status-badge\" [style.background-color]=\"statusColor\">\n <span class=\"status-text\">{{ statusLabel }}</span>\n </div>\n\n @if (error()) {\n <div class=\"status-error\">\n {{ error() }}\n </div>\n }\n }\n</div>\n", styles: [":host{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.status-indicator{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;padding:16px}.status-indicator.loading .status-badge{opacity:.6;animation:pulse 1.5s ease-in-out infinite}.status-indicator.error .status-badge{background-color:var(--kendo-color-error, #dc3545)!important}.status-badge{display:inline-flex;align-items:center;justify-content:center;padding:8px 24px;border-radius:24px;min-width:120px;transition:background-color .3s ease,opacity .3s ease}.status-text{font-size:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.2)}.status-error{margin-top:8px;font-size:.75rem;color:var(--kendo-color-error, #dc3545);text-align:center}@keyframes pulse{0%,to{opacity:.6}50%{opacity:.3}}\n"] }]
|
|
15010
15010
|
}], propDecorators: { config: [{
|
|
@@ -15076,8 +15076,8 @@ class StatusIndicatorConfigDialogComponent {
|
|
|
15076
15076
|
onCancel() {
|
|
15077
15077
|
this.windowRef.close();
|
|
15078
15078
|
}
|
|
15079
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
15080
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
15079
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatusIndicatorConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15080
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: StatusIndicatorConfigDialogComponent, isStandalone: true, selector: "mm-status-indicator-config-dialog", inputs: { initialCallType: "initialCallType", initialModelName: "initialModelName", initialServiceType: "initialServiceType", initialTrueLabel: "initialTrueLabel", initialFalseLabel: "initialFalseLabel", initialTrueColor: "initialTrueColor", initialFalseColor: "initialFalseColor" }, ngImport: i0, template: `
|
|
15081
15081
|
<div class="config-container">
|
|
15082
15082
|
|
|
15083
15083
|
<div class="config-form">
|
|
@@ -15181,7 +15181,7 @@ class StatusIndicatorConfigDialogComponent {
|
|
|
15181
15181
|
</div>
|
|
15182
15182
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:20px;padding:16px}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.flex-1{flex:1}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.form-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.form-section h4{margin:0 0 16px;font-size:.95rem;color:var(--kendo-color-primary, #0d6efd)}.form-row{display:flex;gap:16px}.required{color:var(--kendo-color-error, #dc3545)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.ColorPickerComponent, selector: "kendo-colorpicker", inputs: ["views", "view", "adaptiveMode", "activeView", "readonly", "disabled", "format", "value", "popupSettings", "paletteSettings", "gradientSettings", "icon", "iconClass", "svgIcon", "adaptiveTitle", "adaptiveSubtitle", "clearButton", "tabindex", "preview", "actionsLayout", "size", "rounded", "fillMode"], outputs: ["valueChange", "open", "close", "focus", "blur", "cancel", "activeColorClick", "clearButtonClick", "activeViewChange"], exportAs: ["kendoColorPicker"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }] });
|
|
15183
15183
|
}
|
|
15184
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
15184
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StatusIndicatorConfigDialogComponent, decorators: [{
|
|
15185
15185
|
type: Component,
|
|
15186
15186
|
args: [{ selector: 'mm-status-indicator-config-dialog', standalone: true, imports: [
|
|
15187
15187
|
CommonModule,
|
|
@@ -15312,9 +15312,9 @@ class ServiceHealthWidgetComponent {
|
|
|
15312
15312
|
healthService = inject(HealthService);
|
|
15313
15313
|
router = inject(Router);
|
|
15314
15314
|
config;
|
|
15315
|
-
_healthStatus = signal('loading', ...(ngDevMode ? [{ debugName: "_healthStatus" }] : []));
|
|
15316
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
15317
|
-
_lastChecked = signal(null, ...(ngDevMode ? [{ debugName: "_lastChecked" }] : []));
|
|
15315
|
+
_healthStatus = signal('loading', ...(ngDevMode ? [{ debugName: "_healthStatus" }] : /* istanbul ignore next */ []));
|
|
15316
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
15317
|
+
_lastChecked = signal(null, ...(ngDevMode ? [{ debugName: "_lastChecked" }] : /* istanbul ignore next */ []));
|
|
15318
15318
|
healthStatus = this._healthStatus.asReadonly();
|
|
15319
15319
|
error = this._error.asReadonly();
|
|
15320
15320
|
lastChecked = this._lastChecked.asReadonly();
|
|
@@ -15429,10 +15429,10 @@ class ServiceHealthWidgetComponent {
|
|
|
15429
15429
|
get isClickable() {
|
|
15430
15430
|
return !!this.config.navigateOnClick && !!this.config.detailRoute;
|
|
15431
15431
|
}
|
|
15432
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
15433
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
15432
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ServiceHealthWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15433
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ServiceHealthWidgetComponent, isStandalone: true, selector: "mm-service-health-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "@if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n} @else {\n <div\n class=\"service-health\"\n [class.clickable]=\"isClickable\"\n [class.healthy]=\"healthStatus() === 'healthy'\"\n [class.unhealthy]=\"healthStatus() === 'unhealthy'\"\n [class.loading]=\"healthStatus() === 'loading'\"\n (click)=\"onClick()\">\n\n <div class=\"health-indicator\">\n <div class=\"pulse-ring\" [class.pulse-active]=\"showPulse\"></div>\n <div class=\"health-dot\" [class.pulse-dot]=\"showPulse\"></div>\n </div>\n\n <div class=\"health-info\">\n <div class=\"service-name\">{{ serviceName }}</div>\n <div class=\"health-status\">{{ statusLabel }}</div>\n @if (lastChecked()) {\n <div class=\"last-checked\">\n Last checked: {{ lastChecked() | date:'HH:mm:ss' }}\n </div>\n }\n </div>\n\n @if (error()) {\n <div class=\"health-error\">\n {{ error() }}\n </div>\n }\n </div>\n}\n", styles: [":host{display:block;width:100%;height:100%}.service-health{display:flex;align-items:center;gap:16px;padding:16px;height:100%;border-radius:8px;background:#00000008;transition:background .3s ease,box-shadow .3s ease}.service-health.clickable{cursor:pointer}.service-health.clickable:hover{background:#0000000f;box-shadow:0 2px 8px #0000001a}.service-health.healthy .health-dot{background:#10b981}.service-health.healthy .pulse-ring.pulse-active{border-color:#10b981}.service-health.unhealthy .health-dot{background:#ef4444}.service-health.unhealthy .pulse-ring{border-color:#ef4444}.service-health.loading .health-dot{background:#6b7280;animation:pulse-loading 1.5s ease-in-out infinite}.health-indicator{position:relative;width:48px;height:48px;display:flex;align-items:center;justify-content:center}.health-dot{width:16px;height:16px;border-radius:50%;background:#6b7280;z-index:1;transition:background .3s ease}.health-dot.pulse-dot{animation:pulse-dot 2s ease-in-out infinite}.pulse-ring{position:absolute;width:32px;height:32px;border:2px solid transparent;border-radius:50%;opacity:0}.pulse-ring.pulse-active{animation:pulse-ring 2s ease-out infinite}.health-info{flex:1;min-width:0}.service-name{font-size:1rem;font-weight:600;color:var(--kendo-color-on-app-surface, #1f2937);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.health-status{font-size:.875rem;font-weight:500;color:var(--kendo-color-subtle, #6b7280)}.healthy .health-status{color:#10b981}.unhealthy .health-status{color:#ef4444}.last-checked{font-size:.7rem;color:var(--kendo-color-subtle, #9ca3af);margin-top:4px}.health-error{font-size:.75rem;color:var(--kendo-color-error, #dc3545);margin-top:8px}@keyframes pulse-ring{0%{transform:scale(.8);opacity:.8}50%{transform:scale(1.2);opacity:.4}to{transform:scale(1.5);opacity:0}}@keyframes pulse-dot{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}}@keyframes pulse-loading{0%,to{opacity:1}50%{opacity:.4}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }] });
|
|
15434
15434
|
}
|
|
15435
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
15435
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ServiceHealthWidgetComponent, decorators: [{
|
|
15436
15436
|
type: Component,
|
|
15437
15437
|
args: [{ selector: 'mm-service-health-widget', standalone: true, imports: [CommonModule, WidgetNotConfiguredComponent], template: "@if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n} @else {\n <div\n class=\"service-health\"\n [class.clickable]=\"isClickable\"\n [class.healthy]=\"healthStatus() === 'healthy'\"\n [class.unhealthy]=\"healthStatus() === 'unhealthy'\"\n [class.loading]=\"healthStatus() === 'loading'\"\n (click)=\"onClick()\">\n\n <div class=\"health-indicator\">\n <div class=\"pulse-ring\" [class.pulse-active]=\"showPulse\"></div>\n <div class=\"health-dot\" [class.pulse-dot]=\"showPulse\"></div>\n </div>\n\n <div class=\"health-info\">\n <div class=\"service-name\">{{ serviceName }}</div>\n <div class=\"health-status\">{{ statusLabel }}</div>\n @if (lastChecked()) {\n <div class=\"last-checked\">\n Last checked: {{ lastChecked() | date:'HH:mm:ss' }}\n </div>\n }\n </div>\n\n @if (error()) {\n <div class=\"health-error\">\n {{ error() }}\n </div>\n }\n </div>\n}\n", styles: [":host{display:block;width:100%;height:100%}.service-health{display:flex;align-items:center;gap:16px;padding:16px;height:100%;border-radius:8px;background:#00000008;transition:background .3s ease,box-shadow .3s ease}.service-health.clickable{cursor:pointer}.service-health.clickable:hover{background:#0000000f;box-shadow:0 2px 8px #0000001a}.service-health.healthy .health-dot{background:#10b981}.service-health.healthy .pulse-ring.pulse-active{border-color:#10b981}.service-health.unhealthy .health-dot{background:#ef4444}.service-health.unhealthy .pulse-ring{border-color:#ef4444}.service-health.loading .health-dot{background:#6b7280;animation:pulse-loading 1.5s ease-in-out infinite}.health-indicator{position:relative;width:48px;height:48px;display:flex;align-items:center;justify-content:center}.health-dot{width:16px;height:16px;border-radius:50%;background:#6b7280;z-index:1;transition:background .3s ease}.health-dot.pulse-dot{animation:pulse-dot 2s ease-in-out infinite}.pulse-ring{position:absolute;width:32px;height:32px;border:2px solid transparent;border-radius:50%;opacity:0}.pulse-ring.pulse-active{animation:pulse-ring 2s ease-out infinite}.health-info{flex:1;min-width:0}.service-name{font-size:1rem;font-weight:600;color:var(--kendo-color-on-app-surface, #1f2937);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.health-status{font-size:.875rem;font-weight:500;color:var(--kendo-color-subtle, #6b7280)}.healthy .health-status{color:#10b981}.unhealthy .health-status{color:#ef4444}.last-checked{font-size:.7rem;color:var(--kendo-color-subtle, #9ca3af);margin-top:4px}.health-error{font-size:.75rem;color:var(--kendo-color-error, #dc3545);margin-top:8px}@keyframes pulse-ring{0%{transform:scale(.8);opacity:.8}50%{transform:scale(1.2);opacity:.4}to{transform:scale(1.5);opacity:0}}@keyframes pulse-dot{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}}@keyframes pulse-loading{0%,to{opacity:1}50%{opacity:.4}}\n"] }]
|
|
15438
15438
|
}], propDecorators: { config: [{
|
|
@@ -15496,8 +15496,8 @@ class ServiceHealthConfigDialogComponent {
|
|
|
15496
15496
|
onCancel() {
|
|
15497
15497
|
this.windowRef.close();
|
|
15498
15498
|
}
|
|
15499
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
15500
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
15499
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ServiceHealthConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15500
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ServiceHealthConfigDialogComponent, isStandalone: true, selector: "mm-service-health-config-dialog", inputs: { initialServiceType: "initialServiceType", initialCustomEndpoint: "initialCustomEndpoint", initialShowPulse: "initialShowPulse", initialNavigateOnClick: "initialNavigateOnClick", initialDetailRoute: "initialDetailRoute" }, ngImport: i0, template: `
|
|
15501
15501
|
<div class="config-container">
|
|
15502
15502
|
|
|
15503
15503
|
<div class="config-form">
|
|
@@ -15575,7 +15575,7 @@ class ServiceHealthConfigDialogComponent {
|
|
|
15575
15575
|
</div>
|
|
15576
15576
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;padding:16px;flex:1;overflow-y:auto}.form-field{display:flex;flex-direction:column;gap:6px}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.switch-label{font-weight:400!important;margin-left:8px}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.form-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.form-section h4{margin:0 0 16px;font-size:.95rem;color:var(--kendo-color-primary, #0d6efd)}.required{color:var(--kendo-color-error, #dc3545)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }] });
|
|
15577
15577
|
}
|
|
15578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
15578
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ServiceHealthConfigDialogComponent, decorators: [{
|
|
15579
15579
|
type: Component,
|
|
15580
15580
|
args: [{ selector: 'mm-service-health-config-dialog', standalone: true, imports: [
|
|
15581
15581
|
CommonModule,
|
|
@@ -15687,11 +15687,11 @@ class WidgetGroupComponent {
|
|
|
15687
15687
|
stateService = inject(MeshBoardStateService);
|
|
15688
15688
|
config;
|
|
15689
15689
|
// Signal mirror of the config input so computed() signals can track changes.
|
|
15690
|
-
_config = signal(undefined, ...(ngDevMode ? [{ debugName: "_config" }] : []));
|
|
15690
|
+
_config = signal(undefined, ...(ngDevMode ? [{ debugName: "_config" }] : /* istanbul ignore next */ []));
|
|
15691
15691
|
// Widget state signals
|
|
15692
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
15693
|
-
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : []));
|
|
15694
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
15692
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
15693
|
+
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
|
|
15694
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
15695
15695
|
isLoading = this._isLoading.asReadonly();
|
|
15696
15696
|
data = this._data.asReadonly();
|
|
15697
15697
|
error = this._error.asReadonly();
|
|
@@ -15706,7 +15706,7 @@ class WidgetGroupComponent {
|
|
|
15706
15706
|
if (dataSource.type !== 'repeaterQuery')
|
|
15707
15707
|
return true;
|
|
15708
15708
|
return !dataSource.queryRtId && !dataSource.ckTypeId;
|
|
15709
|
-
}, ...(ngDevMode ? [{ debugName: "isNotConfigured" }] : []));
|
|
15709
|
+
}, ...(ngDevMode ? [{ debugName: "isNotConfigured" }] : /* istanbul ignore next */ []));
|
|
15710
15710
|
/**
|
|
15711
15711
|
* Computed: Generate child widget configs from data items
|
|
15712
15712
|
*/
|
|
@@ -15715,7 +15715,7 @@ class WidgetGroupComponent {
|
|
|
15715
15715
|
if (!items || items.length === 0)
|
|
15716
15716
|
return [];
|
|
15717
15717
|
return items.map((item, index) => this.createChildConfig(item, index));
|
|
15718
|
-
}, ...(ngDevMode ? [{ debugName: "childConfigs" }] : []));
|
|
15718
|
+
}, ...(ngDevMode ? [{ debugName: "childConfigs" }] : /* istanbul ignore next */ []));
|
|
15719
15719
|
/**
|
|
15720
15720
|
* Computed: CSS grid template columns based on layout configuration
|
|
15721
15721
|
*/
|
|
@@ -15733,14 +15733,14 @@ class WidgetGroupComponent {
|
|
|
15733
15733
|
default:
|
|
15734
15734
|
return `repeat(${columns}, 1fr)`;
|
|
15735
15735
|
}
|
|
15736
|
-
}, ...(ngDevMode ? [{ debugName: "gridTemplateColumns" }] : []));
|
|
15736
|
+
}, ...(ngDevMode ? [{ debugName: "gridTemplateColumns" }] : /* istanbul ignore next */ []));
|
|
15737
15737
|
/**
|
|
15738
15738
|
* Computed: Layout CSS class
|
|
15739
15739
|
*/
|
|
15740
15740
|
layoutClass = computed(() => {
|
|
15741
15741
|
const cfg = this._config();
|
|
15742
15742
|
return `layout-${cfg?.layout ?? 'grid'}`;
|
|
15743
|
-
}, ...(ngDevMode ? [{ debugName: "layoutClass" }] : []));
|
|
15743
|
+
}, ...(ngDevMode ? [{ debugName: "layoutClass" }] : /* istanbul ignore next */ []));
|
|
15744
15744
|
/**
|
|
15745
15745
|
* Computed: Gap style
|
|
15746
15746
|
*/
|
|
@@ -15748,7 +15748,7 @@ class WidgetGroupComponent {
|
|
|
15748
15748
|
const cfg = this._config();
|
|
15749
15749
|
const gap = cfg?.gap ?? 8;
|
|
15750
15750
|
return `${gap}px`;
|
|
15751
|
-
}, ...(ngDevMode ? [{ debugName: "gapStyle" }] : []));
|
|
15751
|
+
}, ...(ngDevMode ? [{ debugName: "gapStyle" }] : /* istanbul ignore next */ []));
|
|
15752
15752
|
ngOnInit() {
|
|
15753
15753
|
this._config.set(this.config);
|
|
15754
15754
|
this.loadData();
|
|
@@ -15938,10 +15938,10 @@ class WidgetGroupComponent {
|
|
|
15938
15938
|
});
|
|
15939
15939
|
return resolved.trim();
|
|
15940
15940
|
}
|
|
15941
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
15942
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
15941
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15942
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: WidgetGroupComponent, isStandalone: true, selector: "mm-widget-group", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"widget-group\" [class]=\"layoutClass()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured></mm-widget-not-configured>\n } @else if (isLoading()) {\n <div class=\"loading-state\">\n <span class=\"loading-spinner\"></span>\n <span class=\"loading-text\">Loading...</span>\n </div>\n } @else if (error()) {\n <div class=\"error-state\">\n <span class=\"error-icon\">!</span>\n <span class=\"error-message\">{{ error() }}</span>\n </div>\n } @else if (childConfigs().length === 0) {\n <div class=\"empty-state\">\n <span class=\"empty-message\">{{ config.emptyMessage || 'No data available' }}</span>\n </div>\n } @else {\n <div\n class=\"widget-group-grid\"\n [style.grid-template-columns]=\"gridTemplateColumns()\"\n [style.gap]=\"gapStyle()\">\n @for (childConfig of childConfigs(); track childConfig.id) {\n <div class=\"widget-group-item\">\n <div class=\"widget-group-item-header\">\n <span class=\"widget-group-item-title\">{{ childConfig.title }}</span>\n </div>\n <div class=\"widget-group-item-content\">\n @switch (config.childTemplate.widgetType) {\n @case ('kpi') {\n <mm-kpi-widget [config]=\"$any(childConfig)\"></mm-kpi-widget>\n }\n @case ('gauge') {\n <mm-gauge-widget [config]=\"$any(childConfig)\"></mm-gauge-widget>\n }\n @case ('entityCard') {\n <mm-entity-card-widget [config]=\"$any(childConfig)\"></mm-entity-card-widget>\n }\n }\n </div>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".widget-group{display:flex;flex-direction:column;height:100%;padding:8px;overflow:auto}.widget-group-grid{display:grid;align-content:start;width:100%}.widget-group-item{display:flex;flex-direction:column;background:var(--kendo-color-surface-alt, rgba(0, 0, 0, .03));border:1px solid var(--kendo-color-border, rgba(0, 0, 0, .08));border-radius:4px;overflow:hidden;min-height:100px}.widget-group-item-header{display:flex;align-items:center;padding:6px 10px;background:var(--kendo-color-surface, rgba(0, 0, 0, .02));border-bottom:1px solid var(--kendo-color-border, rgba(0, 0, 0, .08))}.widget-group-item-title{font-size:.75rem;font-weight:600;color:var(--kendo-color-on-surface, #212529);text-transform:uppercase;letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-group-item-content{flex:1;display:flex;align-items:center;justify-content:center;padding:8px;min-height:80px}.loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:12px;color:var(--kendo-color-subtle, #6c757d)}.loading-spinner{width:24px;height:24px;border:2px solid var(--kendo-color-border, rgba(0, 0, 0, .08));border-top-color:var(--kendo-color-primary, #0d6efd);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-size:.875rem}.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px;color:var(--kendo-color-error, #dc3545)}.error-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:#dc35451a;font-weight:700;font-size:1.25rem}.error-message{font-size:.875rem;text-align:center}.empty-state{display:flex;align-items:center;justify-content:center;height:100%;color:var(--kendo-color-subtle, #6c757d)}.empty-message{font-size:.875rem;font-style:italic}.layout-horizontal .widget-group-grid{grid-auto-flow:column;grid-auto-columns:1fr}.layout-vertical .widget-group-grid{grid-auto-flow:row}.layout-vertical .widget-group-item{min-height:80px}@media(max-width:768px){.widget-group-item-content{min-height:60px;padding:4px}.widget-group-item-header{padding:4px 8px}.widget-group-item-title{font-size:.65rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: KpiWidgetComponent, selector: "mm-kpi-widget", inputs: ["config"] }, { kind: "component", type: GaugeWidgetComponent, selector: "mm-gauge-widget", inputs: ["config"] }, { kind: "component", type: EntityCardWidgetComponent, selector: "mm-entity-card-widget", inputs: ["config"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
15943
15943
|
}
|
|
15944
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
15944
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetGroupComponent, decorators: [{
|
|
15945
15945
|
type: Component,
|
|
15946
15946
|
args: [{ selector: 'mm-widget-group', standalone: true, imports: [
|
|
15947
15947
|
CommonModule,
|
|
@@ -16025,7 +16025,7 @@ class WidgetGroupConfigDialogComponent {
|
|
|
16025
16025
|
/**
|
|
16026
16026
|
* Computed: Filtered columns based on search
|
|
16027
16027
|
*/
|
|
16028
|
-
filteredColumns = signal([], ...(ngDevMode ? [{ debugName: "filteredColumns" }] : []));
|
|
16028
|
+
filteredColumns = signal([], ...(ngDevMode ? [{ debugName: "filteredColumns" }] : /* istanbul ignore next */ []));
|
|
16029
16029
|
get isValid() {
|
|
16030
16030
|
// Data source validation
|
|
16031
16031
|
if (this.dataSourceMode === 'persistentQuery' && !this.selectedPersistentQuery) {
|
|
@@ -16287,8 +16287,8 @@ class WidgetGroupConfigDialogComponent {
|
|
|
16287
16287
|
onCancel() {
|
|
16288
16288
|
this.windowRef.close();
|
|
16289
16289
|
}
|
|
16290
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
16291
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
16290
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetGroupConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16291
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: WidgetGroupConfigDialogComponent, isStandalone: true, selector: "mm-widget-group-config-dialog", inputs: { initialDataSourceMode: "initialDataSourceMode", initialQueryRtId: "initialQueryRtId", initialQueryName: "initialQueryName", initialCkTypeId: "initialCkTypeId", initialFilters: "initialFilters", initialMaxItems: "initialMaxItems", initialChildTemplate: "initialChildTemplate", initialLayout: "initialLayout", initialGridColumns: "initialGridColumns", initialMinChildWidth: "initialMinChildWidth", initialGap: "initialGap", initialEmptyMessage: "initialEmptyMessage" }, viewQueries: [{ propertyName: "querySelector", first: true, predicate: ["querySelector"], descendants: true }], ngImport: i0, template: `
|
|
16292
16292
|
<div class="config-container">
|
|
16293
16293
|
|
|
16294
16294
|
<div class="config-form" [class.loading]="isLoadingInitial">
|
|
@@ -16610,7 +16610,7 @@ class WidgetGroupConfigDialogComponent {
|
|
|
16610
16610
|
</div>
|
|
16611
16611
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:20px;padding:16px;position:relative;flex:1;overflow-y:auto}.config-form.loading{pointer-events:none}.form-section{padding:16px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.form-section h4{margin:0 0 16px;font-size:.95rem;color:var(--kendo-color-primary, #0d6efd)}.form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.form-field:last-child{margin-bottom:0}.form-field.flex-1{flex:1}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.form-row{display:flex;gap:16px}.mode-toggle{display:flex;gap:8px}.mode-toggle button{flex:1}.required{color:var(--kendo-color-error, #dc3545)}.query-item{display:flex;flex-direction:column;gap:2px}.query-name{font-weight:500}.query-description{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.column-item{display:flex;justify-content:space-between;gap:16px}.column-path{font-weight:500}.column-type{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.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: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: QuerySelectorComponent, selector: "mm-query-selector", inputs: ["placeholder", "hint", "disabled"], outputs: ["querySelected", "queriesLoaded"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
16612
16612
|
}
|
|
16613
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
16613
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WidgetGroupConfigDialogComponent, decorators: [{
|
|
16614
16614
|
type: Component,
|
|
16615
16615
|
args: [{ selector: 'mm-widget-group-config-dialog', standalone: true, imports: [
|
|
16616
16616
|
CommonModule,
|
|
@@ -16977,9 +16977,9 @@ class MarkdownWidgetComponent {
|
|
|
16977
16977
|
variableService = inject(MeshBoardVariableService);
|
|
16978
16978
|
config;
|
|
16979
16979
|
// Widget state signals
|
|
16980
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
16981
|
-
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : []));
|
|
16982
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
16980
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
16981
|
+
_data = signal(null, ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
|
|
16982
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
16983
16983
|
isLoading = this._isLoading.asReadonly();
|
|
16984
16984
|
data = this._data.asReadonly();
|
|
16985
16985
|
error = this._error.asReadonly();
|
|
@@ -17000,14 +17000,14 @@ class MarkdownWidgetComponent {
|
|
|
17000
17000
|
}
|
|
17001
17001
|
const variables = this.stateService.getVariables();
|
|
17002
17002
|
return this.variableService.resolveVariables(content, variables);
|
|
17003
|
-
}, ...(ngDevMode ? [{ debugName: "resolvedContent" }] : []));
|
|
17003
|
+
}, ...(ngDevMode ? [{ debugName: "resolvedContent" }] : /* istanbul ignore next */ []));
|
|
17004
17004
|
/**
|
|
17005
17005
|
* Style object for custom padding and alignment.
|
|
17006
17006
|
*/
|
|
17007
17007
|
containerStyle = computed(() => ({
|
|
17008
17008
|
padding: this.config?.padding ?? '16px',
|
|
17009
17009
|
textAlign: this.config?.textAlign ?? 'left'
|
|
17010
|
-
}), ...(ngDevMode ? [{ debugName: "containerStyle" }] : []));
|
|
17010
|
+
}), ...(ngDevMode ? [{ debugName: "containerStyle" }] : /* istanbul ignore next */ []));
|
|
17011
17011
|
ngOnInit() {
|
|
17012
17012
|
this._data.set(this.config?.content ?? '');
|
|
17013
17013
|
}
|
|
@@ -17020,10 +17020,10 @@ class MarkdownWidgetComponent {
|
|
|
17020
17020
|
// Markdown is static content, just re-resolve variables
|
|
17021
17021
|
this._data.set(this.config?.content ?? '');
|
|
17022
17022
|
}
|
|
17023
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
17024
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
17023
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MarkdownWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17024
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: MarkdownWidgetComponent, isStandalone: true, selector: "mm-markdown-widget", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"markdown-widget\"\n [class.loading]=\"isLoading()\"\n [class.error]=\"error()\"\n [ngStyle]=\"containerStyle()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured\n message=\"No markdown content configured.\">\n </mm-widget-not-configured>\n } @else {\n <div class=\"markdown-content mm-prose\">\n <markdown [data]=\"resolvedContent()\"></markdown>\n </div>\n }\n</div>\n", styles: [".markdown-widget{display:flex;flex-direction:column;height:100%;overflow:auto}.markdown-content{flex:1;overflow:auto}:host{--mm-prose-text: #333333;--mm-prose-heading: #1976d2;--mm-prose-link: #1565c0;--mm-prose-link-hover: #0d47a1;--mm-prose-code-bg: #f5f5f5;--mm-prose-code-text: #d32f2f;--mm-prose-pre-bg: #f5f5f5;--mm-prose-pre-border: #e0e0e0;--mm-prose-blockquote-border: #6c4da8;--mm-prose-blockquote-bg: rgba(108, 77, 168, .05);--mm-prose-table-header-bg: #f5f5f5;--mm-prose-table-header-text: #333333;--mm-prose-table-border: #e0e0e0;--mm-prose-table-row-even: rgba(0, 0, 0, .02);--mm-prose-strong: #111111;--mm-prose-em: #1565c0;--mm-prose-marker-ul: #1976d2;--mm-prose-marker-ol: #1565c0;--mm-prose-hr-start: #1976d2;--mm-prose-hr-end: #1565c0;--mm-prose-img-border: #e0e0e0;--mm-prose-font: \"Roboto\", sans-serif}:host ::ng-deep .mm-prose{color:var(--mm-prose-text);font-family:var(--mm-prose-font);line-height:1.6}:host ::ng-deep .mm-prose h1,:host ::ng-deep .mm-prose h2,:host ::ng-deep .mm-prose h3,:host ::ng-deep .mm-prose h4,:host ::ng-deep .mm-prose h5,:host ::ng-deep .mm-prose h6{color:var(--mm-prose-heading);font-weight:600;margin-top:1.5em;margin-bottom:.5em;letter-spacing:.5px}:host ::ng-deep .mm-prose h1:first-child,:host ::ng-deep .mm-prose h2:first-child,:host ::ng-deep .mm-prose h3:first-child,:host ::ng-deep .mm-prose h4:first-child,:host ::ng-deep .mm-prose h5:first-child,:host ::ng-deep .mm-prose h6:first-child{margin-top:0}:host ::ng-deep .mm-prose h1{font-size:1.75rem;border-bottom:2px solid var(--mm-prose-heading);padding-bottom:.25em}:host ::ng-deep .mm-prose h2{font-size:1.5rem;border-bottom:1px solid var(--mm-prose-table-border);padding-bottom:.2em}:host ::ng-deep .mm-prose h3{font-size:1.25rem}:host ::ng-deep .mm-prose h4{font-size:1.1rem}:host ::ng-deep .mm-prose h5,:host ::ng-deep .mm-prose h6{font-size:1rem}:host ::ng-deep .mm-prose p{margin-bottom:1em}:host ::ng-deep .mm-prose p:last-child{margin-bottom:0}:host ::ng-deep .mm-prose a{color:var(--mm-prose-link);text-decoration:none;border-bottom:1px solid transparent;transition:all .15s ease}:host ::ng-deep .mm-prose a:hover{color:var(--mm-prose-link-hover);border-bottom-color:var(--mm-prose-link-hover)}:host ::ng-deep .mm-prose ul,:host ::ng-deep .mm-prose ol{margin-bottom:1em;padding-left:1.5em}:host ::ng-deep .mm-prose li{margin-bottom:.25em}:host ::ng-deep .mm-prose ul li::marker{color:var(--mm-prose-marker-ul)}:host ::ng-deep .mm-prose ol li::marker{color:var(--mm-prose-marker-ol)}:host ::ng-deep .mm-prose code{font-family:Roboto Mono,monospace;background:var(--mm-prose-code-bg);color:var(--mm-prose-code-text);padding:.2em .4em;border-radius:4px;font-size:.9em}:host ::ng-deep .mm-prose pre{background:var(--mm-prose-pre-bg);border:1px solid var(--mm-prose-pre-border);border-radius:8px;padding:1em;overflow-x:auto;margin-bottom:1em}:host ::ng-deep .mm-prose pre code{background:transparent;padding:0;color:var(--mm-prose-text)}:host ::ng-deep .mm-prose blockquote{border-left:4px solid var(--mm-prose-blockquote-border);background:var(--mm-prose-blockquote-bg);padding:.75em 1em;margin:1em 0;border-radius:0 8px 8px 0}:host ::ng-deep .mm-prose blockquote p:last-child{margin-bottom:0}:host ::ng-deep .mm-prose table{width:100%;border-collapse:collapse;margin-bottom:1em}:host ::ng-deep .mm-prose th,:host ::ng-deep .mm-prose td{padding:.75em;border:1px solid var(--mm-prose-table-border);text-align:left}:host ::ng-deep .mm-prose th{background:var(--mm-prose-table-header-bg);color:var(--mm-prose-table-header-text);font-weight:600;text-transform:uppercase;font-size:.85em;letter-spacing:.5px}:host ::ng-deep .mm-prose tr:nth-child(2n){background:var(--mm-prose-table-row-even)}:host ::ng-deep .mm-prose hr{border:none;height:2px;background:linear-gradient(90deg,var(--mm-prose-hr-start),var(--mm-prose-hr-end),transparent);margin:1.5em 0}:host ::ng-deep .mm-prose img{max-width:100%;height:auto;border-radius:8px;border:1px solid var(--mm-prose-img-border)}:host ::ng-deep .mm-prose strong,:host ::ng-deep .mm-prose b{font-weight:600;color:var(--mm-prose-strong)}:host ::ng-deep .mm-prose em,:host ::ng-deep .mm-prose i{color:var(--mm-prose-em)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MarkdownModule }, { kind: "component", type: i2$2.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: WidgetNotConfiguredComponent, selector: "mm-widget-not-configured" }] });
|
|
17025
17025
|
}
|
|
17026
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
17026
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MarkdownWidgetComponent, decorators: [{
|
|
17027
17027
|
type: Component,
|
|
17028
17028
|
args: [{ selector: 'mm-markdown-widget', standalone: true, imports: [CommonModule, MarkdownModule, WidgetNotConfiguredComponent], template: "<div class=\"markdown-widget\"\n [class.loading]=\"isLoading()\"\n [class.error]=\"error()\"\n [ngStyle]=\"containerStyle()\">\n @if (isNotConfigured()) {\n <mm-widget-not-configured\n message=\"No markdown content configured.\">\n </mm-widget-not-configured>\n } @else {\n <div class=\"markdown-content mm-prose\">\n <markdown [data]=\"resolvedContent()\"></markdown>\n </div>\n }\n</div>\n", styles: [".markdown-widget{display:flex;flex-direction:column;height:100%;overflow:auto}.markdown-content{flex:1;overflow:auto}:host{--mm-prose-text: #333333;--mm-prose-heading: #1976d2;--mm-prose-link: #1565c0;--mm-prose-link-hover: #0d47a1;--mm-prose-code-bg: #f5f5f5;--mm-prose-code-text: #d32f2f;--mm-prose-pre-bg: #f5f5f5;--mm-prose-pre-border: #e0e0e0;--mm-prose-blockquote-border: #6c4da8;--mm-prose-blockquote-bg: rgba(108, 77, 168, .05);--mm-prose-table-header-bg: #f5f5f5;--mm-prose-table-header-text: #333333;--mm-prose-table-border: #e0e0e0;--mm-prose-table-row-even: rgba(0, 0, 0, .02);--mm-prose-strong: #111111;--mm-prose-em: #1565c0;--mm-prose-marker-ul: #1976d2;--mm-prose-marker-ol: #1565c0;--mm-prose-hr-start: #1976d2;--mm-prose-hr-end: #1565c0;--mm-prose-img-border: #e0e0e0;--mm-prose-font: \"Roboto\", sans-serif}:host ::ng-deep .mm-prose{color:var(--mm-prose-text);font-family:var(--mm-prose-font);line-height:1.6}:host ::ng-deep .mm-prose h1,:host ::ng-deep .mm-prose h2,:host ::ng-deep .mm-prose h3,:host ::ng-deep .mm-prose h4,:host ::ng-deep .mm-prose h5,:host ::ng-deep .mm-prose h6{color:var(--mm-prose-heading);font-weight:600;margin-top:1.5em;margin-bottom:.5em;letter-spacing:.5px}:host ::ng-deep .mm-prose h1:first-child,:host ::ng-deep .mm-prose h2:first-child,:host ::ng-deep .mm-prose h3:first-child,:host ::ng-deep .mm-prose h4:first-child,:host ::ng-deep .mm-prose h5:first-child,:host ::ng-deep .mm-prose h6:first-child{margin-top:0}:host ::ng-deep .mm-prose h1{font-size:1.75rem;border-bottom:2px solid var(--mm-prose-heading);padding-bottom:.25em}:host ::ng-deep .mm-prose h2{font-size:1.5rem;border-bottom:1px solid var(--mm-prose-table-border);padding-bottom:.2em}:host ::ng-deep .mm-prose h3{font-size:1.25rem}:host ::ng-deep .mm-prose h4{font-size:1.1rem}:host ::ng-deep .mm-prose h5,:host ::ng-deep .mm-prose h6{font-size:1rem}:host ::ng-deep .mm-prose p{margin-bottom:1em}:host ::ng-deep .mm-prose p:last-child{margin-bottom:0}:host ::ng-deep .mm-prose a{color:var(--mm-prose-link);text-decoration:none;border-bottom:1px solid transparent;transition:all .15s ease}:host ::ng-deep .mm-prose a:hover{color:var(--mm-prose-link-hover);border-bottom-color:var(--mm-prose-link-hover)}:host ::ng-deep .mm-prose ul,:host ::ng-deep .mm-prose ol{margin-bottom:1em;padding-left:1.5em}:host ::ng-deep .mm-prose li{margin-bottom:.25em}:host ::ng-deep .mm-prose ul li::marker{color:var(--mm-prose-marker-ul)}:host ::ng-deep .mm-prose ol li::marker{color:var(--mm-prose-marker-ol)}:host ::ng-deep .mm-prose code{font-family:Roboto Mono,monospace;background:var(--mm-prose-code-bg);color:var(--mm-prose-code-text);padding:.2em .4em;border-radius:4px;font-size:.9em}:host ::ng-deep .mm-prose pre{background:var(--mm-prose-pre-bg);border:1px solid var(--mm-prose-pre-border);border-radius:8px;padding:1em;overflow-x:auto;margin-bottom:1em}:host ::ng-deep .mm-prose pre code{background:transparent;padding:0;color:var(--mm-prose-text)}:host ::ng-deep .mm-prose blockquote{border-left:4px solid var(--mm-prose-blockquote-border);background:var(--mm-prose-blockquote-bg);padding:.75em 1em;margin:1em 0;border-radius:0 8px 8px 0}:host ::ng-deep .mm-prose blockquote p:last-child{margin-bottom:0}:host ::ng-deep .mm-prose table{width:100%;border-collapse:collapse;margin-bottom:1em}:host ::ng-deep .mm-prose th,:host ::ng-deep .mm-prose td{padding:.75em;border:1px solid var(--mm-prose-table-border);text-align:left}:host ::ng-deep .mm-prose th{background:var(--mm-prose-table-header-bg);color:var(--mm-prose-table-header-text);font-weight:600;text-transform:uppercase;font-size:.85em;letter-spacing:.5px}:host ::ng-deep .mm-prose tr:nth-child(2n){background:var(--mm-prose-table-row-even)}:host ::ng-deep .mm-prose hr{border:none;height:2px;background:linear-gradient(90deg,var(--mm-prose-hr-start),var(--mm-prose-hr-end),transparent);margin:1.5em 0}:host ::ng-deep .mm-prose img{max-width:100%;height:auto;border-radius:8px;border:1px solid var(--mm-prose-img-border)}:host ::ng-deep .mm-prose strong,:host ::ng-deep .mm-prose b{font-weight:600;color:var(--mm-prose-strong)}:host ::ng-deep .mm-prose em,:host ::ng-deep .mm-prose i{color:var(--mm-prose-em)}\n"] }]
|
|
17029
17029
|
}], propDecorators: { config: [{
|
|
@@ -17036,7 +17036,7 @@ class MarkdownConfigDialogComponent {
|
|
|
17036
17036
|
initialResolveVariables;
|
|
17037
17037
|
initialPadding;
|
|
17038
17038
|
initialTextAlign;
|
|
17039
|
-
showPreview = signal(false, ...(ngDevMode ? [{ debugName: "showPreview" }] : []));
|
|
17039
|
+
showPreview = signal(false, ...(ngDevMode ? [{ debugName: "showPreview" }] : /* istanbul ignore next */ []));
|
|
17040
17040
|
content = '';
|
|
17041
17041
|
resolveVariables = true;
|
|
17042
17042
|
padding = '16px';
|
|
@@ -17059,8 +17059,8 @@ class MarkdownConfigDialogComponent {
|
|
|
17059
17059
|
onCancel() {
|
|
17060
17060
|
this.windowRef.close();
|
|
17061
17061
|
}
|
|
17062
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
17063
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
17062
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MarkdownConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17063
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: MarkdownConfigDialogComponent, isStandalone: true, selector: "mm-markdown-config-dialog", inputs: { initialContent: "initialContent", initialResolveVariables: "initialResolveVariables", initialPadding: "initialPadding", initialTextAlign: "initialTextAlign" }, ngImport: i0, template: `
|
|
17064
17064
|
<div class="config-container">
|
|
17065
17065
|
|
|
17066
17066
|
<div class="config-form">
|
|
@@ -17161,7 +17161,7 @@ Variables: $variableName or \${variableName}">
|
|
|
17161
17161
|
</div>
|
|
17162
17162
|
`, isInline: true, styles: [":host{display:block;height:100%;--mm-prose-editor-bg: #f5f5f5;--mm-prose-editor-text: #333333;--mm-prose-editor-placeholder: #999999;--mm-prose-editor-border: #e0e0e0;--mm-prose-preview-border: #e0e0e0;--mm-prose-form-bg: #f5f5f5;--mm-prose-form-border: #e0e0e0;--mm-prose-label-text: #333333;--mm-prose-hint-text: #666666}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{display:flex;flex-direction:column;gap:16px;height:100%;flex:1;overflow-y:auto}.mode-toggle{display:flex;gap:8px}.editor-area{flex:1;min-height:300px;display:flex;flex-direction:column}.markdown-editor{flex:1;width:100%;font-family:Roboto Mono,monospace;font-size:.9rem;padding:12px;border:1px solid var(--mm-prose-editor-border);border-radius:4px;resize:none;background:var(--mm-prose-editor-bg);color:var(--mm-prose-editor-text)}.markdown-editor::placeholder{color:var(--mm-prose-editor-placeholder)}.markdown-preview{flex:1;padding:12px;border:1px solid var(--mm-prose-preview-border);border-radius:4px;overflow:auto;background:var(--mm-prose-editor-bg)}.form-section{padding:12px;background:var(--mm-prose-form-bg);border:1px solid var(--mm-prose-form-border);border-radius:4px}.form-row{display:flex;gap:16px;align-items:flex-start}.form-field{display:flex;flex-direction:column;gap:4px}.form-field label{font-weight:500;display:flex;align-items:center;gap:8px;color:var(--mm-prose-label-text)}.field-hint{margin:0;font-size:.8rem;color:var(--mm-prose-hint-text)}.mm-prose{color:var(--mm-prose-text, #333333);line-height:1.6}.mm-prose h1,.mm-prose h2,.mm-prose h3,.mm-prose h4,.mm-prose h5,.mm-prose h6{color:var(--mm-prose-heading, #1976d2);font-weight:600;margin-top:1em;margin-bottom:.5em}.mm-prose h1{font-size:1.5rem}.mm-prose h2{font-size:1.25rem}.mm-prose h3{font-size:1.1rem}.mm-prose p{margin-bottom:.75em}.mm-prose a{color:var(--mm-prose-link, #1565c0)}.mm-prose code{background:var(--mm-prose-code-bg, #f5f5f5);color:var(--mm-prose-code-text, #d32f2f);padding:.2em .4em;border-radius:4px}.mm-prose pre{background:var(--mm-prose-pre-bg, #f5f5f5);color:var(--mm-prose-text, #333333);padding:1em;border-radius:8px;overflow-x:auto}.mm-prose pre code{background:transparent;color:var(--mm-prose-text, #333333)}.mm-prose blockquote{border-left:4px solid var(--mm-prose-blockquote-border, #6c4da8);background:var(--mm-prose-blockquote-bg, rgba(108, 77, 168, .05));padding:.75em 1em;margin:1em 0;border-radius:0 8px 8px 0}.mm-prose strong,.mm-prose b{color:var(--mm-prose-strong, #111111);font-weight:600}.mm-prose em,.mm-prose i{color:var(--mm-prose-em, #1565c0)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i2.ButtonGroupComponent, selector: "kendo-buttongroup", inputs: ["disabled", "selection", "width", "tabIndex", "navigable"], outputs: ["navigate"], exportAs: ["kendoButtonGroup"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: MarkdownModule }, { kind: "component", type: i2$2.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }] });
|
|
17163
17163
|
}
|
|
17164
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
17164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MarkdownConfigDialogComponent, decorators: [{
|
|
17165
17165
|
type: Component,
|
|
17166
17166
|
args: [{ selector: 'mm-markdown-config-dialog', standalone: true, imports: [
|
|
17167
17167
|
CommonModule,
|
|
@@ -17847,10 +17847,10 @@ class ProcessDataService {
|
|
|
17847
17847
|
const variables = this.stateService.getVariables();
|
|
17848
17848
|
return this.variableService.convertToFieldFilterDto(filters, variables);
|
|
17849
17849
|
}
|
|
17850
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
17851
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
17850
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17851
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDataService });
|
|
17852
17852
|
}
|
|
17853
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
17853
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDataService, decorators: [{
|
|
17854
17854
|
type: Injectable
|
|
17855
17855
|
}] });
|
|
17856
17856
|
|
|
@@ -17889,16 +17889,16 @@ class ProcessWidgetComponent {
|
|
|
17889
17889
|
// Math reference for template
|
|
17890
17890
|
Math = Math;
|
|
17891
17891
|
// State signals
|
|
17892
|
-
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
|
|
17893
|
-
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
|
|
17894
|
-
_diagramConfig = signal(null, ...(ngDevMode ? [{ debugName: "_diagramConfig" }] : []));
|
|
17895
|
-
_runtimeState = signal(null, ...(ngDevMode ? [{ debugName: "_runtimeState" }] : []));
|
|
17896
|
-
_symbolDefinitions = signal(new Map(), ...(ngDevMode ? [{ debugName: "_symbolDefinitions" }] : []));
|
|
17897
|
-
_boundData = signal(null, ...(ngDevMode ? [{ debugName: "_boundData" }] : []));
|
|
17892
|
+
_isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
|
|
17893
|
+
_error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
|
|
17894
|
+
_diagramConfig = signal(null, ...(ngDevMode ? [{ debugName: "_diagramConfig" }] : /* istanbul ignore next */ []));
|
|
17895
|
+
_runtimeState = signal(null, ...(ngDevMode ? [{ debugName: "_runtimeState" }] : /* istanbul ignore next */ []));
|
|
17896
|
+
_symbolDefinitions = signal(new Map(), ...(ngDevMode ? [{ debugName: "_symbolDefinitions" }] : /* istanbul ignore next */ []));
|
|
17897
|
+
_boundData = signal(null, ...(ngDevMode ? [{ debugName: "_boundData" }] : /* istanbul ignore next */ []));
|
|
17898
17898
|
isLoading = this._isLoading.asReadonly();
|
|
17899
17899
|
error = this._error.asReadonly();
|
|
17900
17900
|
diagramConfig = this._diagramConfig.asReadonly();
|
|
17901
|
-
data = computed(() => this._runtimeState(), ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
17901
|
+
data = computed(() => this._runtimeState(), ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
17902
17902
|
/**
|
|
17903
17903
|
* Bound data from widget data binding configuration.
|
|
17904
17904
|
* Contains entity or query data that can be used for dynamic values in the diagram.
|
|
@@ -17910,17 +17910,17 @@ class ProcessWidgetComponent {
|
|
|
17910
17910
|
if (!diagram)
|
|
17911
17911
|
return '0 0 800 600';
|
|
17912
17912
|
return `0 0 ${diagram.canvas.width} ${diagram.canvas.height}`;
|
|
17913
|
-
}, ...(ngDevMode ? [{ debugName: "viewBox" }] : []));
|
|
17913
|
+
}, ...(ngDevMode ? [{ debugName: "viewBox" }] : /* istanbul ignore next */ []));
|
|
17914
17914
|
svgWidth = computed(() => {
|
|
17915
17915
|
if (this.config.fitToBounds !== false)
|
|
17916
17916
|
return '100%';
|
|
17917
17917
|
return this._diagramConfig()?.canvas.width ?? 800;
|
|
17918
|
-
}, ...(ngDevMode ? [{ debugName: "svgWidth" }] : []));
|
|
17918
|
+
}, ...(ngDevMode ? [{ debugName: "svgWidth" }] : /* istanbul ignore next */ []));
|
|
17919
17919
|
svgHeight = computed(() => {
|
|
17920
17920
|
if (this.config.fitToBounds !== false)
|
|
17921
17921
|
return '100%';
|
|
17922
17922
|
return this._diagramConfig()?.canvas.height ?? 600;
|
|
17923
|
-
}, ...(ngDevMode ? [{ debugName: "svgHeight" }] : []));
|
|
17923
|
+
}, ...(ngDevMode ? [{ debugName: "svgHeight" }] : /* istanbul ignore next */ []));
|
|
17924
17924
|
/**
|
|
17925
17925
|
* Computed animation enabled states.
|
|
17926
17926
|
* Evaluates animation bindings to determine which animations should be active.
|
|
@@ -17958,7 +17958,7 @@ class ProcessWidgetComponent {
|
|
|
17958
17958
|
states[key] = result.success && Boolean(result.value);
|
|
17959
17959
|
}
|
|
17960
17960
|
return states;
|
|
17961
|
-
}, ...(ngDevMode ? [{ debugName: "animationEnabledStates" }] : []));
|
|
17961
|
+
}, ...(ngDevMode ? [{ debugName: "animationEnabledStates" }] : /* istanbul ignore next */ []));
|
|
17962
17962
|
/**
|
|
17963
17963
|
* Primitives with runtime bindings applied.
|
|
17964
17964
|
* Uses property values built from bound data and the diagram's propertyBindings.
|
|
@@ -17977,7 +17977,7 @@ class ProcessWidgetComponent {
|
|
|
17977
17977
|
const propertyValues = this.buildPropertyValuesFromBoundData(diagram.transformProperties ?? [], this.config.propertyMappings ?? [], boundData);
|
|
17978
17978
|
// Apply bindings to primitives
|
|
17979
17979
|
return this.applyBindingsToPrimitives(diagram.primitives, diagram.propertyBindings, propertyValues);
|
|
17980
|
-
}, ...(ngDevMode ? [{ debugName: "boundPrimitives" }] : []));
|
|
17980
|
+
}, ...(ngDevMode ? [{ debugName: "boundPrimitives" }] : /* istanbul ignore next */ []));
|
|
17981
17981
|
ngOnInit() {
|
|
17982
17982
|
this.loadDiagram();
|
|
17983
17983
|
}
|
|
@@ -19437,8 +19437,8 @@ class ProcessWidgetComponent {
|
|
|
19437
19437
|
}
|
|
19438
19438
|
return primitive;
|
|
19439
19439
|
}
|
|
19440
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
19441
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
19440
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19441
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ProcessWidgetComponent, isStandalone: true, selector: "mm-process-widget", inputs: { config: "config" }, providers: [ProcessDataService, ExpressionEvaluatorService], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
19442
19442
|
<div class="process-widget"
|
|
19443
19443
|
[class.loading]="isLoading()"
|
|
19444
19444
|
[class.error]="error()"
|
|
@@ -20437,7 +20437,7 @@ class ProcessWidgetComponent {
|
|
|
20437
20437
|
</div>
|
|
20438
20438
|
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.process-widget{display:flex;align-items:center;justify-content:center;width:100%;height:100%;overflow:hidden;background-color:var(--process-bg, #fafafa)}.loading-overlay{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;color:var(--kendo-color-subtle, #666)}.loading-spinner{width:40px;height:40px;border:3px solid #e0e0e0;border-top-color:var(--kendo-color-primary, #1976d2);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-container{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1rem;color:var(--kendo-color-error, #d32f2f)}.error-icon{font-size:2rem}.error-message{font-size:.875rem;text-align:center}.no-config{display:flex;align-items:center;justify-content:center;color:var(--kendo-color-subtle, #999);font-style:italic}.diagram-container{position:relative;overflow:hidden}.diagram-container.fit-to-bounds{width:100%!important;height:100%!important}.process-svg{display:block}.diagram-container.fit-to-bounds .process-svg{width:100%;height:100%}.canvas-background{fill:var(--process-canvas-bg, #fafafa)}.element{cursor:default}.element.interactive{cursor:pointer}.element.interactive:hover{filter:brightness(1.1)}.tank-fill{transition:height .5s ease-out,y .5s ease-out}.tank-label{pointer-events:none;-webkit-user-select:none;user-select:none}.pump-element .rotating{animation:rotate 1s linear infinite;transform-origin:center}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.blinking{animation:blink 1s ease-in-out infinite}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}.connection-flow{animation:flow 2s linear infinite}@keyframes flow{0%{stroke-dashoffset:0}to{stroke-dashoffset:-40}}.digital-display-value{font-family:Courier New,monospace;letter-spacing:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
20439
20439
|
}
|
|
20440
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
20440
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessWidgetComponent, decorators: [{
|
|
20441
20441
|
type: Component,
|
|
20442
20442
|
args: [{ selector: 'mm-process-widget', standalone: true, imports: [CommonModule], providers: [ProcessDataService, ExpressionEvaluatorService], template: `
|
|
20443
20443
|
<div class="process-widget"
|
|
@@ -21587,7 +21587,7 @@ class ProcessConfigDialogComponent {
|
|
|
21587
21587
|
filterAttributes = [];
|
|
21588
21588
|
filterVariables = [];
|
|
21589
21589
|
// State - Attributes loading
|
|
21590
|
-
_isLoadingAttributes = signal(false, ...(ngDevMode ? [{ debugName: "_isLoadingAttributes" }] : []));
|
|
21590
|
+
_isLoadingAttributes = signal(false, ...(ngDevMode ? [{ debugName: "_isLoadingAttributes" }] : /* istanbul ignore next */ []));
|
|
21591
21591
|
isLoadingAttributes = this._isLoadingAttributes.asReadonly;
|
|
21592
21592
|
// State - Diagram exposed properties and mappings
|
|
21593
21593
|
diagramExposedProperties = [];
|
|
@@ -21982,8 +21982,8 @@ class ProcessConfigDialogComponent {
|
|
|
21982
21982
|
onCancel() {
|
|
21983
21983
|
this.windowRef.close();
|
|
21984
21984
|
}
|
|
21985
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
21986
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
21985
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessConfigDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21986
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ProcessConfigDialogComponent, isStandalone: true, selector: "mm-process-config-dialog", inputs: { initialProcessDiagramRtId: "initialProcessDiagramRtId", initialFitToBounds: "initialFitToBounds", initialAllowZoom: "initialAllowZoom", initialAllowPan: "initialAllowPan", initialShowToolbar: "initialShowToolbar", initialInitialZoom: "initialInitialZoom", initialDataBindingMode: "initialDataBindingMode", initialBindingCkTypeId: "initialBindingCkTypeId", initialBindingRtId: "initialBindingRtId", initialBindingQueryRtId: "initialBindingQueryRtId", initialBindingQueryName: "initialBindingQueryName", initialBindingFilters: "initialBindingFilters", initialPropertyMappings: "initialPropertyMappings" }, providers: [ProcessDataService], ngImport: i0, template: `
|
|
21987
21987
|
<div class="config-container">
|
|
21988
21988
|
|
|
21989
21989
|
<div class="config-form">
|
|
@@ -22305,7 +22305,7 @@ class ProcessConfigDialogComponent {
|
|
|
22305
22305
|
</div>
|
|
22306
22306
|
`, isInline: true, styles: [":host{display:block;height:100%}.config-container{display:flex;flex-direction:column;height:100%}.action-bar{display:flex;justify-content:flex-end;gap:8px;padding:8px 16px;border-top:1px solid var(--kendo-color-border, #dee2e6)}.config-form{flex:1;overflow-y:auto;padding:16px}.tab-content{padding:16px;min-height:200px;position:relative}.tab-content.loading{pointer-events:none}.section-hint{margin:0 0 16px;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.empty-hint{text-align:center;padding:24px;color:var(--kendo-color-subtle, #6c757d);font-style:italic}.form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.form-field:last-child{margin-bottom:0}.form-field.disabled{opacity:.6}.form-field label{font-weight:600;font-size:.9rem;color:var(--kendo-color-on-app-surface, #212529)}.required{color:var(--kendo-color-error, #dc3545)}.field-hint{margin:0;font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.field-hint.warning{color:var(--kendo-color-warning, #ffc107)}.form-row{display:flex;gap:24px;margin-bottom:12px}.form-row:last-child{margin-bottom:0}.mode-toggle{display:flex;gap:8px}.checkbox-field{flex-direction:row;align-items:flex-start}.checkbox-field label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:400}.checkbox-field .field-hint{margin-top:4px;margin-left:28px}.preview-section{margin-top:16px;padding:12px;background:var(--kendo-color-surface-alt, #f8f9fa);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px}.preview-info{display:flex;flex-direction:column;gap:6px}.preview-item{display:flex;justify-content:space-between;padding:6px 10px;background:var(--kendo-color-surface, #ffffff);border-radius:4px}.preview-label{font-weight:500;font-size:.85rem;color:var(--kendo-color-subtle, #6c757d)}.preview-value{font-weight:600;font-size:.85rem;color:var(--kendo-color-on-app-surface, #212529)}.diagram-item{display:flex;justify-content:space-between;gap:16px}.diagram-name{font-weight:500}.diagram-size{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.query-item{display:flex;flex-direction:column;gap:2px}.query-name{font-weight:500}.query-description{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.property-mappings-table{display:flex;flex-direction:column;gap:6px}.mapping-header{display:grid;grid-template-columns:minmax(80px,1fr) 55px 85px minmax(80px,1fr) minmax(90px,1.2fr);gap:6px;padding:6px 10px;background:var(--kendo-color-surface-alt, #f8f9fa);border-radius:4px;font-weight:600;font-size:.7rem;color:var(--kendo-color-subtle, #6c757d);text-transform:uppercase}.mapping-row{display:grid;grid-template-columns:minmax(80px,1fr) 55px 85px minmax(80px,1fr) minmax(90px,1.2fr);gap:6px;padding:6px 10px;background:var(--kendo-color-surface, #ffffff);border:1px solid var(--kendo-color-border, #dee2e6);border-radius:4px;align-items:center}.col-property{font-weight:500;font-size:.85rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-type.type-badge{font-size:.65rem;padding:2px 4px;background:var(--kendo-color-surface-alt, #f8f9fa);border-radius:10px;text-align:center;text-transform:uppercase;color:var(--kendo-color-subtle, #6c757d)}.col-expression kendo-textbox{font-family:Consolas,Monaco,monospace;font-size:.8rem}.expression-help{margin-top:12px}.expression-help code{background:var(--kendo-color-surface-alt, #f8f9fa);padding:1px 4px;border-radius:3px;font-size:.75rem}.loading-hint{font-style:italic;color:var(--kendo-color-subtle, #6c757d);padding:8px;text-align:center}:host ::ng-deep kendo-tabstrip{border:none}:host ::ng-deep .k-tabstrip-items-wrapper{border-bottom:1px solid var(--kendo-color-border, #dee2e6)}:host ::ng-deep .k-tabstrip-content{border:none;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2.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: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i4.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i4.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: LayoutModule }, { kind: "component", type: i5.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i5.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i5.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }, { kind: "component", type: FieldFilterEditorComponent, selector: "mm-field-filter-editor", inputs: ["availableAttributes", "ckTypeId", "hideNavigationProperties", "attributePaths", "enableVariables", "availableVariables", "filters"], outputs: ["filtersChange"] }, { kind: "component", type: LoadingOverlayComponent, selector: "mm-loading-overlay", inputs: ["loading"] }] });
|
|
22307
22307
|
}
|
|
22308
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
22308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessConfigDialogComponent, decorators: [{
|
|
22309
22309
|
type: Component,
|
|
22310
22310
|
args: [{ selector: 'mm-process-config-dialog', standalone: true, imports: [
|
|
22311
22311
|
CommonModule,
|
|
@@ -24832,10 +24832,10 @@ class EntitySelectorEditorComponent {
|
|
|
24832
24832
|
emitChange() {
|
|
24833
24833
|
this.entitySelectorsChange.emit([...this.entitySelectors]);
|
|
24834
24834
|
}
|
|
24835
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
24836
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: EntitySelectorEditorComponent, isStandalone: true, selector: "mm-entity-selector-editor", inputs: { entitySelectors: "entitySelectors", existingVariableNames: "existingVariableNames" }, outputs: { entitySelectorsChange: "entitySelectorsChange", editingStateChange: "editingStateChange" }, ngImport: i0, template: "<div class=\"entity-selector-editor\">\n @if (!isEditing) {\n <!-- Selector List -->\n <div class=\"selector-list\">\n @for (selector of entitySelectors; track selector.id; let i = $index) {\n <div class=\"selector-item\">\n <div class=\"selector-info\">\n <span class=\"selector-label\">{{ selector.label }}</span>\n <span class=\"selector-mode\">{{ getModeLabel(selector) }}</span>\n <span class=\"selector-ck-type\">{{ selector.ckTypeId }}</span>\n <span class=\"selector-mappings\">{{ getMappingSummary(selector) }}</span>\n </div>\n <div class=\"selector-actions\">\n <button\n kendoButton\n [svgIcon]=\"pencilIcon\"\n (click)=\"editSelector(i)\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Edit selector\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n (click)=\"removeSelector(i)\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Remove selector\"\n class=\"remove-btn\">\n </button>\n </div>\n </div>\n }\n\n @if (entitySelectors.length === 0) {\n <div class=\"empty-state\">\n No entity selectors configured. Add one to enable entity-based variables.\n </div>\n }\n </div>\n\n <div class=\"add-button-row\">\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"addSelector()\"\n themeColor=\"primary\">\n Add Entity Selector\n </button>\n </div>\n } @else {\n <!-- Edit Form -->\n <div class=\"edit-panel\">\n <div class=\"edit-panel-header\">\n {{ editingIndex !== null ? 'Edit Entity Selector' : 'New Entity Selector' }}\n </div>\n <div class=\"edit-form\">\n <div class=\"form-field\">\n <label class=\"field-label\">ID *</label>\n <kendo-textbox\n [(ngModel)]=\"editId\"\n placeholder=\"e.g., mp\"\n [readonly]=\"editingIndex !== null\">\n </kendo-textbox>\n @if (isDuplicateId(editId, editingIndex)) {\n <span class=\"field-error\">ID must be unique</span>\n }\n <span class=\"field-hint\">Used in URL parameters (es_<id>=<rtId>)</span>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">Label *</label>\n <kendo-textbox\n [(ngModel)]=\"editLabel\"\n placeholder=\"e.g., Metering Point\">\n </kendo-textbox>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">CK Type *</label>\n <mm-ck-type-selector-input\n [ngModel]=\"editCkTypeItem\"\n [placeholder]=\"'Select CK type...'\"\n (ckTypeSelected)=\"onCkTypeSelected($event)\"\n (ckTypeCleared)=\"onCkTypeCleared()\">\n </mm-ck-type-selector-input>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">Attribute Mappings *</label>\n <button\n kendoButton\n (click)=\"selectAttributes()\"\n [disabled]=\"!editCkTypeId\"\n fillMode=\"outline\"\n size=\"small\">\n Select Attributes...\n </button>\n\n @if (editMappings.length > 0) {\n <div class=\"mappings-list\">\n <div class=\"mappings-header\">\n <span class=\"mappings-header-attr\">Attribute</span>\n <span class=\"mappings-header-var\">Variable Name</span>\n </div>\n @for (mapping of editMappings; track mapping.attributePath; let j = $index) {\n <div class=\"mapping-item\">\n <span class=\"mapping-path\">{{ mapping.attributePath }}</span>\n <span class=\"mapping-arrow\">→</span>\n <div class=\"mapping-var-field\">\n <div class=\"mapping-var-input-wrapper\">\n <span class=\"mapping-var-prefix\">$</span>\n <kendo-textbox\n [(ngModel)]=\"mapping.variableName\"\n size=\"small\"\n class=\"mapping-var-input\"\n placeholder=\"variableName\"\n [class.invalid]=\"getVariableNameError(mapping)\">\n </kendo-textbox>\n </div>\n @if (getVariableNameError(mapping); as error) {\n <span class=\"field-error\">{{ error }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"form-field\">\n <div class=\"checkbox-row\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n [(ngModel)]=\"editShowInToolbar\"\n id=\"showInToolbar\" />\n <label class=\"field-label checkbox-label\" for=\"showInToolbar\">Show in Toolbar</label>\n </div>\n <span class=\"field-hint\">\n @if (editShowInToolbar) {\n Users can select an entity from a dropdown in the toolbar.\n } @else {\n Hidden selector \u2014 variables are resolved from the default entity below.\n }\n </span>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">Default Entity{{ !editShowInToolbar ? ' *' : '' }}</label>\n @if (defaultEntityDataSource) {\n <mm-entity-select-input\n [dataSource]=\"defaultEntityDataSource\"\n [dialogDataSource]=\"defaultEntityDialogDataSource!\"\n [placeholder]=\"'Select default entity...'\"\n [dialogTitle]=\"'Select Default ' + editLabel\"\n (entitySelected)=\"onDefaultEntitySelected($event)\"\n (entityCleared)=\"onDefaultEntityCleared()\">\n </mm-entity-select-input>\n } @else {\n <span class=\"field-hint\">Select a CK type first to pick a default entity.</span>\n }\n @if (editDefaultRtId) {\n <span class=\"field-hint\">Selected: {{ editDefaultRtId }}</span>\n }\n @if (!editShowInToolbar && !editDefaultRtId) {\n <span class=\"field-error\">A default entity is required when not shown in toolbar.</span>\n }\n <span class=\"field-hint\">\n @if (editShowInToolbar) {\n Optional \u2014 pre-selected entity when the MeshBoard loads.\n } @else {\n This entity's attributes will be used to populate the variables.\n }\n </span>\n </div>\n\n <div class=\"edit-actions mm-dialog-actions\">\n <button kendoButton (click)=\"cancelEdit()\" fillMode=\"flat\">\n Cancel\n </button>\n <button\n kendoButton\n (click)=\"saveEdit()\"\n [disabled]=\"!isEditValid()\"\n themeColor=\"primary\">\n {{ editingIndex !== null ? 'Update' : 'Add' }}\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [".entity-selector-editor{display:flex;flex-direction:column;gap:1.25rem}.selector-list{display:flex;flex-direction:column;gap:.5rem}.selector-item{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;background:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px}.selector-item .selector-info{display:flex;flex-direction:column;gap:.25rem;min-width:0;flex:1}.selector-item .selector-label{font-weight:500;color:var(--kendo-color-on-app-surface, #424242)}.selector-item .selector-mode{font-size:.75rem;font-weight:500;color:var(--kendo-color-info, #0288d1)}.selector-item .selector-ck-type{font-size:.8rem;color:var(--kendo-color-subtle, #757575);font-family:Consolas,Monaco,monospace}.selector-item .selector-mappings{font-size:.8rem;color:var(--kendo-color-primary, #3f51b5);font-family:Consolas,Monaco,monospace}.selector-item .selector-actions{display:flex;gap:.25rem;flex-shrink:0}.selector-item .remove-btn{color:var(--kendo-color-error, #f44336)}.empty-state{padding:1.5rem;text-align:center;color:var(--kendo-color-subtle, #757575);font-size:.875rem}.add-button-row{display:flex;justify-content:flex-start}.edit-panel{border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px;overflow:hidden}.edit-panel-header{padding:.625rem 1rem;font-weight:600;font-size:.875rem;color:var(--kendo-color-on-primary, #ffffff);background:var(--kendo-color-primary, #3f51b5)}.edit-form{display:flex;flex-direction:column;gap:1.25rem;padding:1.25rem}.edit-form .form-field{display:flex;flex-direction:column;gap:.5rem}.edit-form .field-label{font-weight:500;font-size:.875rem;text-transform:uppercase;color:var(--kendo-color-on-app-surface, #424242)}.edit-form .field-hint{font-size:.75rem;color:var(--kendo-color-subtle, #757575)}.edit-form .field-error{font-size:.75rem;color:var(--kendo-color-error, #f44336)}.edit-form .checkbox-row{display:flex;align-items:center;gap:.5rem}.edit-form .checkbox-row .checkbox-label{margin:0;cursor:pointer}.mappings-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;padding:.75rem;background:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px}.mappings-header{display:flex;align-items:center;gap:.5rem;font-size:.75rem;font-weight:600;color:var(--kendo-color-subtle, #757575);padding-bottom:.25rem;border-bottom:1px solid var(--kendo-color-border, #e0e0e0)}.mappings-header .mappings-header-attr{min-width:150px}.mappings-header .mappings-header-var{margin-left:1.75rem}.mapping-item{display:flex;align-items:flex-start;gap:.5rem}.mapping-item .mapping-path{font-size:.8rem;font-family:Consolas,Monaco,monospace;color:var(--kendo-color-subtle, #757575);min-width:150px;padding-top:5px}.mapping-item .mapping-arrow{color:var(--kendo-color-subtle, #757575);flex-shrink:0;padding-top:5px}.mapping-item .mapping-var-field{display:flex;flex-direction:column;gap:2px;flex:1;min-width:100px}.mapping-item .mapping-var-input-wrapper{display:flex;align-items:center;gap:0}.mapping-item .mapping-var-prefix{font-family:Consolas,Monaco,monospace;font-size:.875rem;font-weight:600;color:var(--kendo-color-primary, #3f51b5);padding-right:2px;flex-shrink:0}.mapping-item .mapping-var-input{flex:1}.mapping-item .mapping-var-input.invalid ::ng-deep .k-input{border-color:var(--kendo-color-error, #f44336)}.edit-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.5rem;padding-top:.75rem;border-top:1px solid var(--kendo-color-border, #e0e0e0)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: LabelModule }, { kind: "directive", type: i4$1.LabelDirective, selector: "label[for]", inputs: ["for", "labelClass"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }] });
|
|
24835
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntitySelectorEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
24836
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: EntitySelectorEditorComponent, isStandalone: true, selector: "mm-entity-selector-editor", inputs: { entitySelectors: "entitySelectors", existingVariableNames: "existingVariableNames" }, outputs: { entitySelectorsChange: "entitySelectorsChange", editingStateChange: "editingStateChange" }, ngImport: i0, template: "<div class=\"entity-selector-editor\">\n @if (!isEditing) {\n <!-- Selector List -->\n <div class=\"selector-list\">\n @for (selector of entitySelectors; track selector.id; let i = $index) {\n <div class=\"selector-item\">\n <div class=\"selector-info\">\n <span class=\"selector-label\">{{ selector.label }}</span>\n <span class=\"selector-mode\">{{ getModeLabel(selector) }}</span>\n <span class=\"selector-ck-type\">{{ selector.ckTypeId }}</span>\n <span class=\"selector-mappings\">{{ getMappingSummary(selector) }}</span>\n </div>\n <div class=\"selector-actions\">\n <button\n kendoButton\n [svgIcon]=\"pencilIcon\"\n (click)=\"editSelector(i)\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Edit selector\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n (click)=\"removeSelector(i)\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Remove selector\"\n class=\"remove-btn\">\n </button>\n </div>\n </div>\n }\n\n @if (entitySelectors.length === 0) {\n <div class=\"empty-state\">\n No entity selectors configured. Add one to enable entity-based variables.\n </div>\n }\n </div>\n\n <div class=\"add-button-row\">\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"addSelector()\"\n themeColor=\"primary\">\n Add Entity Selector\n </button>\n </div>\n } @else {\n <!-- Edit Form -->\n <div class=\"edit-panel\">\n <div class=\"edit-panel-header\">\n {{ editingIndex !== null ? 'Edit Entity Selector' : 'New Entity Selector' }}\n </div>\n <div class=\"edit-form\">\n <div class=\"form-field\">\n <label class=\"field-label\">ID *</label>\n <kendo-textbox\n [(ngModel)]=\"editId\"\n placeholder=\"e.g., mp\"\n [readonly]=\"editingIndex !== null\">\n </kendo-textbox>\n @if (isDuplicateId(editId, editingIndex)) {\n <span class=\"field-error\">ID must be unique</span>\n }\n <span class=\"field-hint\">Used in URL parameters (es_<id>=<rtId>)</span>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">Label *</label>\n <kendo-textbox\n [(ngModel)]=\"editLabel\"\n placeholder=\"e.g., Metering Point\">\n </kendo-textbox>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">CK Type *</label>\n <mm-ck-type-selector-input\n [ngModel]=\"editCkTypeItem\"\n [placeholder]=\"'Select CK type...'\"\n (ckTypeSelected)=\"onCkTypeSelected($event)\"\n (ckTypeCleared)=\"onCkTypeCleared()\">\n </mm-ck-type-selector-input>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">Attribute Mappings *</label>\n <button\n kendoButton\n (click)=\"selectAttributes()\"\n [disabled]=\"!editCkTypeId\"\n fillMode=\"outline\"\n size=\"small\">\n Select Attributes...\n </button>\n\n @if (editMappings.length > 0) {\n <div class=\"mappings-list\">\n <div class=\"mappings-header\">\n <span class=\"mappings-header-attr\">Attribute</span>\n <span class=\"mappings-header-var\">Variable Name</span>\n </div>\n @for (mapping of editMappings; track mapping.attributePath; let j = $index) {\n <div class=\"mapping-item\">\n <span class=\"mapping-path\">{{ mapping.attributePath }}</span>\n <span class=\"mapping-arrow\">→</span>\n <div class=\"mapping-var-field\">\n <div class=\"mapping-var-input-wrapper\">\n <span class=\"mapping-var-prefix\">$</span>\n <kendo-textbox\n [(ngModel)]=\"mapping.variableName\"\n size=\"small\"\n class=\"mapping-var-input\"\n placeholder=\"variableName\"\n [class.invalid]=\"getVariableNameError(mapping)\">\n </kendo-textbox>\n </div>\n @if (getVariableNameError(mapping); as error) {\n <span class=\"field-error\">{{ error }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"form-field\">\n <div class=\"checkbox-row\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n [(ngModel)]=\"editShowInToolbar\"\n id=\"showInToolbar\" />\n <label class=\"field-label checkbox-label\" for=\"showInToolbar\">Show in Toolbar</label>\n </div>\n <span class=\"field-hint\">\n @if (editShowInToolbar) {\n Users can select an entity from a dropdown in the toolbar.\n } @else {\n Hidden selector \u2014 variables are resolved from the default entity below.\n }\n </span>\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\">Default Entity{{ !editShowInToolbar ? ' *' : '' }}</label>\n @if (defaultEntityDataSource) {\n <mm-entity-select-input\n [dataSource]=\"defaultEntityDataSource\"\n [dialogDataSource]=\"defaultEntityDialogDataSource!\"\n [placeholder]=\"'Select default entity...'\"\n [dialogTitle]=\"'Select Default ' + editLabel\"\n (entitySelected)=\"onDefaultEntitySelected($event)\"\n (entityCleared)=\"onDefaultEntityCleared()\">\n </mm-entity-select-input>\n } @else {\n <span class=\"field-hint\">Select a CK type first to pick a default entity.</span>\n }\n @if (editDefaultRtId) {\n <span class=\"field-hint\">Selected: {{ editDefaultRtId }}</span>\n }\n @if (!editShowInToolbar && !editDefaultRtId) {\n <span class=\"field-error\">A default entity is required when not shown in toolbar.</span>\n }\n <span class=\"field-hint\">\n @if (editShowInToolbar) {\n Optional \u2014 pre-selected entity when the MeshBoard loads.\n } @else {\n This entity's attributes will be used to populate the variables.\n }\n </span>\n </div>\n\n <div class=\"edit-actions mm-dialog-actions\">\n <button kendoButton (click)=\"cancelEdit()\" fillMode=\"flat\">\n Cancel\n </button>\n <button\n kendoButton\n (click)=\"saveEdit()\"\n [disabled]=\"!isEditValid()\"\n themeColor=\"primary\">\n {{ editingIndex !== null ? 'Update' : 'Add' }}\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [".entity-selector-editor{display:flex;flex-direction:column;gap:1.25rem}.selector-list{display:flex;flex-direction:column;gap:.5rem}.selector-item{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;background:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px}.selector-item .selector-info{display:flex;flex-direction:column;gap:.25rem;min-width:0;flex:1}.selector-item .selector-label{font-weight:500;color:var(--kendo-color-on-app-surface, #424242)}.selector-item .selector-mode{font-size:.75rem;font-weight:500;color:var(--kendo-color-info, #0288d1)}.selector-item .selector-ck-type{font-size:.8rem;color:var(--kendo-color-subtle, #757575);font-family:Consolas,Monaco,monospace}.selector-item .selector-mappings{font-size:.8rem;color:var(--kendo-color-primary, #3f51b5);font-family:Consolas,Monaco,monospace}.selector-item .selector-actions{display:flex;gap:.25rem;flex-shrink:0}.selector-item .remove-btn{color:var(--kendo-color-error, #f44336)}.empty-state{padding:1.5rem;text-align:center;color:var(--kendo-color-subtle, #757575);font-size:.875rem}.add-button-row{display:flex;justify-content:flex-start}.edit-panel{border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px;overflow:hidden}.edit-panel-header{padding:.625rem 1rem;font-weight:600;font-size:.875rem;color:var(--kendo-color-on-primary, #ffffff);background:var(--kendo-color-primary, #3f51b5)}.edit-form{display:flex;flex-direction:column;gap:1.25rem;padding:1.25rem}.edit-form .form-field{display:flex;flex-direction:column;gap:.5rem}.edit-form .field-label{font-weight:500;font-size:.875rem;text-transform:uppercase;color:var(--kendo-color-on-app-surface, #424242)}.edit-form .field-hint{font-size:.75rem;color:var(--kendo-color-subtle, #757575)}.edit-form .field-error{font-size:.75rem;color:var(--kendo-color-error, #f44336)}.edit-form .checkbox-row{display:flex;align-items:center;gap:.5rem}.edit-form .checkbox-row .checkbox-label{margin:0;cursor:pointer}.mappings-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;padding:.75rem;background:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px}.mappings-header{display:flex;align-items:center;gap:.5rem;font-size:.75rem;font-weight:600;color:var(--kendo-color-subtle, #757575);padding-bottom:.25rem;border-bottom:1px solid var(--kendo-color-border, #e0e0e0)}.mappings-header .mappings-header-attr{min-width:150px}.mappings-header .mappings-header-var{margin-left:1.75rem}.mapping-item{display:flex;align-items:flex-start;gap:.5rem}.mapping-item .mapping-path{font-size:.8rem;font-family:Consolas,Monaco,monospace;color:var(--kendo-color-subtle, #757575);min-width:150px;padding-top:5px}.mapping-item .mapping-arrow{color:var(--kendo-color-subtle, #757575);flex-shrink:0;padding-top:5px}.mapping-item .mapping-var-field{display:flex;flex-direction:column;gap:2px;flex:1;min-width:100px}.mapping-item .mapping-var-input-wrapper{display:flex;align-items:center;gap:0}.mapping-item .mapping-var-prefix{font-family:Consolas,Monaco,monospace;font-size:.875rem;font-weight:600;color:var(--kendo-color-primary, #3f51b5);padding-right:2px;flex-shrink:0}.mapping-item .mapping-var-input{flex:1}.mapping-item .mapping-var-input.invalid ::ng-deep .k-input{border-color:var(--kendo-color-error, #f44336)}.edit-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.5rem;padding-top:.75rem;border-top:1px solid var(--kendo-color-border, #e0e0e0)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: i3.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: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: LabelModule }, { kind: "directive", type: i4$1.LabelDirective, selector: "label[for]", inputs: ["for", "labelClass"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: CkTypeSelectorInputComponent, selector: "mm-ck-type-selector-input", inputs: ["placeholder", "minSearchLength", "maxResults", "debounceMs", "ckModelIds", "allowAbstract", "dialogTitle", "advancedSearchLabel", "derivedFromRtCkTypeId", "disabled", "required"], outputs: ["ckTypeSelected", "ckTypeCleared"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }] });
|
|
24837
24837
|
}
|
|
24838
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
24838
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntitySelectorEditorComponent, decorators: [{
|
|
24839
24839
|
type: Component,
|
|
24840
24840
|
args: [{ selector: 'mm-entity-selector-editor', standalone: true, imports: [
|
|
24841
24841
|
CommonModule,
|
|
@@ -24917,10 +24917,10 @@ class EntitySelectorToolbarComponent {
|
|
|
24917
24917
|
this.selectorDialogDataSources.set(selector.id, this.dialogDataSourceCache.get(selector.ckTypeId));
|
|
24918
24918
|
}
|
|
24919
24919
|
}
|
|
24920
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
24921
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
24920
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntitySelectorToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
24921
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: EntitySelectorToolbarComponent, isStandalone: true, selector: "mm-entity-selector-toolbar", inputs: { entitySelectors: "entitySelectors" }, outputs: { entitySelected: "entitySelected", entityCleared: "entityCleared" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"entity-selector-toolbar\">\n @for (selector of entitySelectors; track selector.id) {\n @if (selector.showInToolbar !== false) {\n <div class=\"entity-selector-item\">\n <kendo-label [text]=\"selector.label\">\n <mm-entity-select-input\n [dataSource]=\"getDataSource(selector)\"\n [dialogDataSource]=\"getDialogDataSource(selector)\"\n [initialDisplayValue]=\"selector.selectedDisplayName\"\n [placeholder]=\"'Select ' + selector.label + '...'\"\n [dialogTitle]=\"'Select ' + selector.label\"\n (entitySelected)=\"onEntitySelected(selector.id, $event)\"\n (entityCleared)=\"onEntityCleared(selector.id)\">\n </mm-entity-select-input>\n </kendo-label>\n </div>\n }\n }\n</div>\n", styles: [".entity-selector-toolbar{display:flex;align-items:flex-end;gap:1rem;flex-wrap:wrap}.entity-selector-item{display:flex;flex-direction:column}.entity-selector-item kendo-label{display:flex;flex-direction:column;gap:.25rem}.entity-selector-item mm-entity-select-input{min-width:200px;max-width:300px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: i4$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: EntitySelectInputComponent, selector: "mm-entity-select-input", inputs: ["dataSource", "placeholder", "minSearchLength", "maxResults", "debounceMs", "prefix", "initialDisplayValue", "dialogDataSource", "dialogTitle", "multiSelect", "advancedSearchLabel", "dialogMessages", "messages", "disabled", "required"], outputs: ["entitySelected", "entityCleared", "entitiesSelected"] }] });
|
|
24922
24922
|
}
|
|
24923
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
24923
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EntitySelectorToolbarComponent, decorators: [{
|
|
24924
24924
|
type: Component,
|
|
24925
24925
|
args: [{ selector: 'mm-entity-selector-toolbar', standalone: true, imports: [
|
|
24926
24926
|
CommonModule,
|
|
@@ -25066,10 +25066,10 @@ class VariablesEditorComponent {
|
|
|
25066
25066
|
emitChange() {
|
|
25067
25067
|
this.variablesChange.emit([...this.variables]);
|
|
25068
25068
|
}
|
|
25069
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
25070
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: VariablesEditorComponent, isStandalone: true, selector: "mm-variables-editor", inputs: { variables: "variables" }, outputs: { variablesChange: "variablesChange" }, ngImport: i0, template: "<div class=\"variables-editor\">\n <div class=\"variables-header\">\n <span class=\"section-title\">Variables</span>\n <div class=\"header-actions\">\n <button\n kendoButton\n (click)=\"addVariable()\"\n [svgIcon]=\"plusIcon\"\n themeColor=\"primary\">\n Add Variable\n </button>\n </div>\n </div>\n\n @if (variables.length > 0) {\n <div class=\"variables-list\">\n <div class=\"list-header\">\n <span class=\"col-name\">Name</span>\n <span class=\"col-config\">Configuration</span>\n <span class=\"col-actions\"></span>\n </div>\n\n @for (variable of variables; track trackByIndex($index); let i = $index) {\n <div class=\"variable-row\">\n <!-- Name -->\n <div class=\"col-name\">\n <kendo-textbox\n [value]=\"variable.name\"\n (valueChange)=\"onNameChange(i, $event)\"\n placeholder=\"variableName\"\n [style.width.%]=\"100\">\n </kendo-textbox>\n @if (!isValidName(variable.name)) {\n <span class=\"error-text\">Invalid name</span>\n }\n @if (isDuplicateName(variable.name, i)) {\n <span class=\"error-text\">Duplicate</span>\n }\n </div>\n\n <!-- Configuration (type-specific) -->\n <div class=\"col-config\">\n <div class=\"static-config\">\n <div class=\"static-config-row\">\n <kendo-dropdownlist\n [data]=\"typeOptions\"\n [value]=\"getTypeOption(variable)\"\n (valueChange)=\"onTypeChange(i, $event.value)\"\n textField=\"label\"\n valueField=\"value\"\n class=\"type-dropdown\">\n </kendo-dropdownlist>\n\n @switch (variable.type) {\n @case ('number') {\n <kendo-numerictextbox\n [value]=\"getNumberValue(variable)\"\n (valueChange)=\"onNumberValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-numerictextbox>\n }\n @case ('boolean') {\n <kendo-dropdownlist\n [data]=\"booleanOptions\"\n [value]=\"variable.value\"\n (valueChange)=\"onValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-dropdownlist>\n }\n @case ('date') {\n <kendo-datepicker\n [value]=\"getDateValue(variable)\"\n (valueChange)=\"onDateValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-datepicker>\n }\n @case ('datetime') {\n <kendo-datetimepicker\n [value]=\"getDateValue(variable)\"\n (valueChange)=\"onDateValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-datetimepicker>\n }\n @default {\n <kendo-textbox\n [value]=\"variable.value\"\n (valueChange)=\"onValueChange(i, $event)\"\n placeholder=\"Value\"\n class=\"value-input\">\n </kendo-textbox>\n }\n }\n\n <kendo-textbox\n [value]=\"variable.defaultValue ?? ''\"\n (valueChange)=\"onDefaultValueChange(i, $event)\"\n placeholder=\"Default\"\n class=\"default-input\">\n </kendo-textbox>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"col-actions\">\n <button\n kendoButton\n (click)=\"removeVariable(i)\"\n [svgIcon]=\"trashIcon\"\n fillMode=\"flat\"\n themeColor=\"error\"\n title=\"Remove variable\">\n </button>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <p>No variables defined.</p>\n <p class=\"hint\">Click \"Add Variable\" to create one. Use Entity Selectors for entity-based variables.</p>\n </div>\n }\n\n <div class=\"usage-hint\">\n <strong>Usage:</strong> Reference variables in filter values as <code>{{ '${variableName}' }}</code>\n </div>\n</div>\n", styles: [".variables-editor{margin-top:1rem}.variables-editor .variables-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.variables-editor .variables-header .section-title{font-weight:600;font-size:14px;color:var(--kendo-color-on-app-surface, #424242)}.variables-editor .variables-header .header-actions{display:flex;gap:4px}.variables-editor .variables-list{border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px;background:var(--kendo-color-surface-alt, #fafafa)}.variables-editor .variables-list .list-header{display:grid;grid-template-columns:180px 1fr 40px;gap:.5rem;padding:.5rem .75rem;background:var(--kendo-color-surface, #f5f5f5);border-bottom:1px solid var(--kendo-color-border, #e0e0e0);font-size:12px;font-weight:600;color:var(--kendo-color-subtle, #666)}.variables-editor .variables-list .variable-row{display:grid;grid-template-columns:180px 1fr 40px;gap:.5rem;padding:.5rem .75rem;align-items:start;border-bottom:1px solid var(--kendo-color-border, #e0e0e0)}.variables-editor .variables-list .variable-row:last-child{border-bottom:none}.variables-editor .variables-list .variable-row .col-name{display:flex;flex-direction:column;gap:2px}.variables-editor .variables-list .variable-row .col-config{display:flex;flex-direction:column;gap:4px}.variables-editor .variables-list .variable-row .col-actions{display:flex;justify-content:center;gap:2px;padding-top:2px}.variables-editor .variables-list .variable-row .error-text{font-size:11px;color:var(--kendo-color-error, #f44336)}.variables-editor .variables-list .variable-row .static-config-row{display:flex;gap:.5rem;align-items:start}.variables-editor .variables-list .variable-row .static-config-row .type-dropdown{width:110px;flex-shrink:0}.variables-editor .variables-list .variable-row .static-config-row .value-input{flex:1;min-width:0}.variables-editor .variables-list .variable-row .static-config-row .default-input{width:120px;flex-shrink:0}.variables-editor .empty-state{padding:2rem;text-align:center;color:var(--kendo-color-subtle, #666);background:var(--kendo-color-surface-alt, #fafafa);border:1px dashed var(--kendo-color-border, #ccc);border-radius:4px}.variables-editor .empty-state p{margin:.25rem 0}.variables-editor .empty-state .hint{font-size:12px;color:var(--kendo-color-subtle, #999)}.variables-editor .usage-hint{margin-top:.75rem;padding:.5rem .75rem;background:var(--kendo-color-surface-alt, #e3f2fd);border:1px solid var(--kendo-color-border, transparent);border-radius:4px;font-size:12px;color:var(--kendo-color-subtle, #1565c0)}.variables-editor .usage-hint code{background:var(--kendo-color-base-subtle, #bbdefb);padding:2px 6px;border-radius:3px;font-family:Consolas,Monaco,monospace}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: DropDownListModule }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.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: NumericTextBoxModule }, { kind: "ngmodule", type: TextBoxModule }, { kind: "ngmodule", type: CheckBoxModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$2.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }, { kind: "ngmodule", type: DateTimePickerModule }, { kind: "component", type: i4$2.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: SVGIconModule }] });
|
|
25069
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: VariablesEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25070
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: VariablesEditorComponent, isStandalone: true, selector: "mm-variables-editor", inputs: { variables: "variables" }, outputs: { variablesChange: "variablesChange" }, ngImport: i0, template: "<div class=\"variables-editor\">\n <div class=\"variables-header\">\n <span class=\"section-title\">Variables</span>\n <div class=\"header-actions\">\n <button\n kendoButton\n (click)=\"addVariable()\"\n [svgIcon]=\"plusIcon\"\n themeColor=\"primary\">\n Add Variable\n </button>\n </div>\n </div>\n\n @if (variables.length > 0) {\n <div class=\"variables-list\">\n <div class=\"list-header\">\n <span class=\"col-name\">Name</span>\n <span class=\"col-config\">Configuration</span>\n <span class=\"col-actions\"></span>\n </div>\n\n @for (variable of variables; track trackByIndex($index); let i = $index) {\n <div class=\"variable-row\">\n <!-- Name -->\n <div class=\"col-name\">\n <kendo-textbox\n [value]=\"variable.name\"\n (valueChange)=\"onNameChange(i, $event)\"\n placeholder=\"variableName\"\n [style.width.%]=\"100\">\n </kendo-textbox>\n @if (!isValidName(variable.name)) {\n <span class=\"error-text\">Invalid name</span>\n }\n @if (isDuplicateName(variable.name, i)) {\n <span class=\"error-text\">Duplicate</span>\n }\n </div>\n\n <!-- Configuration (type-specific) -->\n <div class=\"col-config\">\n <div class=\"static-config\">\n <div class=\"static-config-row\">\n <kendo-dropdownlist\n [data]=\"typeOptions\"\n [value]=\"getTypeOption(variable)\"\n (valueChange)=\"onTypeChange(i, $event.value)\"\n textField=\"label\"\n valueField=\"value\"\n class=\"type-dropdown\">\n </kendo-dropdownlist>\n\n @switch (variable.type) {\n @case ('number') {\n <kendo-numerictextbox\n [value]=\"getNumberValue(variable)\"\n (valueChange)=\"onNumberValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-numerictextbox>\n }\n @case ('boolean') {\n <kendo-dropdownlist\n [data]=\"booleanOptions\"\n [value]=\"variable.value\"\n (valueChange)=\"onValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-dropdownlist>\n }\n @case ('date') {\n <kendo-datepicker\n [value]=\"getDateValue(variable)\"\n (valueChange)=\"onDateValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-datepicker>\n }\n @case ('datetime') {\n <kendo-datetimepicker\n [value]=\"getDateValue(variable)\"\n (valueChange)=\"onDateValueChange(i, $event)\"\n class=\"value-input\">\n </kendo-datetimepicker>\n }\n @default {\n <kendo-textbox\n [value]=\"variable.value\"\n (valueChange)=\"onValueChange(i, $event)\"\n placeholder=\"Value\"\n class=\"value-input\">\n </kendo-textbox>\n }\n }\n\n <kendo-textbox\n [value]=\"variable.defaultValue ?? ''\"\n (valueChange)=\"onDefaultValueChange(i, $event)\"\n placeholder=\"Default\"\n class=\"default-input\">\n </kendo-textbox>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"col-actions\">\n <button\n kendoButton\n (click)=\"removeVariable(i)\"\n [svgIcon]=\"trashIcon\"\n fillMode=\"flat\"\n themeColor=\"error\"\n title=\"Remove variable\">\n </button>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <p>No variables defined.</p>\n <p class=\"hint\">Click \"Add Variable\" to create one. Use Entity Selectors for entity-based variables.</p>\n </div>\n }\n\n <div class=\"usage-hint\">\n <strong>Usage:</strong> Reference variables in filter values as <code>{{ '${variableName}' }}</code>\n </div>\n</div>\n", styles: [".variables-editor{margin-top:1rem}.variables-editor .variables-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.variables-editor .variables-header .section-title{font-weight:600;font-size:14px;color:var(--kendo-color-on-app-surface, #424242)}.variables-editor .variables-header .header-actions{display:flex;gap:4px}.variables-editor .variables-list{border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px;background:var(--kendo-color-surface-alt, #fafafa)}.variables-editor .variables-list .list-header{display:grid;grid-template-columns:180px 1fr 40px;gap:.5rem;padding:.5rem .75rem;background:var(--kendo-color-surface, #f5f5f5);border-bottom:1px solid var(--kendo-color-border, #e0e0e0);font-size:12px;font-weight:600;color:var(--kendo-color-subtle, #666)}.variables-editor .variables-list .variable-row{display:grid;grid-template-columns:180px 1fr 40px;gap:.5rem;padding:.5rem .75rem;align-items:start;border-bottom:1px solid var(--kendo-color-border, #e0e0e0)}.variables-editor .variables-list .variable-row:last-child{border-bottom:none}.variables-editor .variables-list .variable-row .col-name{display:flex;flex-direction:column;gap:2px}.variables-editor .variables-list .variable-row .col-config{display:flex;flex-direction:column;gap:4px}.variables-editor .variables-list .variable-row .col-actions{display:flex;justify-content:center;gap:2px;padding-top:2px}.variables-editor .variables-list .variable-row .error-text{font-size:11px;color:var(--kendo-color-error, #f44336)}.variables-editor .variables-list .variable-row .static-config-row{display:flex;gap:.5rem;align-items:start}.variables-editor .variables-list .variable-row .static-config-row .type-dropdown{width:110px;flex-shrink:0}.variables-editor .variables-list .variable-row .static-config-row .value-input{flex:1;min-width:0}.variables-editor .variables-list .variable-row .static-config-row .default-input{width:120px;flex-shrink:0}.variables-editor .empty-state{padding:2rem;text-align:center;color:var(--kendo-color-subtle, #666);background:var(--kendo-color-surface-alt, #fafafa);border:1px dashed var(--kendo-color-border, #ccc);border-radius:4px}.variables-editor .empty-state p{margin:.25rem 0}.variables-editor .empty-state .hint{font-size:12px;color:var(--kendo-color-subtle, #999)}.variables-editor .usage-hint{margin-top:.75rem;padding:.5rem .75rem;background:var(--kendo-color-surface-alt, #e3f2fd);border:1px solid var(--kendo-color-border, transparent);border-radius:4px;font-size:12px;color:var(--kendo-color-subtle, #1565c0)}.variables-editor .usage-hint code{background:var(--kendo-color-base-subtle, #bbdefb);padding:2px 6px;border-radius:3px;font-family:Consolas,Monaco,monospace}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: DropDownListModule }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.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: NumericTextBoxModule }, { kind: "ngmodule", type: TextBoxModule }, { kind: "ngmodule", type: CheckBoxModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$2.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }, { kind: "ngmodule", type: DateTimePickerModule }, { kind: "component", type: i4$2.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: SVGIconModule }] });
|
|
25071
25071
|
}
|
|
25072
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
25072
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: VariablesEditorComponent, decorators: [{
|
|
25073
25073
|
type: Component,
|
|
25074
25074
|
args: [{ selector: 'mm-variables-editor', standalone: true, imports: [
|
|
25075
25075
|
CommonModule,
|
|
@@ -25207,10 +25207,10 @@ class MeshBoardSettingsDialogComponent {
|
|
|
25207
25207
|
cancel() {
|
|
25208
25208
|
this.windowRef.close();
|
|
25209
25209
|
}
|
|
25210
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
25211
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: MeshBoardSettingsDialogComponent, isStandalone: true, selector: "mm-meshboard-settings-dialog", ngImport: i0, template: "<div class=\"meshboard-settings-dialog\">\n <kendo-tabstrip [animate]=\"false\">\n <!-- General Tab -->\n <kendo-tabstrip-tab [title]=\"'General'\" [selected]=\"true\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <form class=\"settings-form\">\n <!-- Name Field -->\n <kendo-formfield>\n <kendo-label [for]=\"nameInput\" text=\"Name *\"></kendo-label>\n <kendo-textbox\n #nameInput\n [(ngModel)]=\"name\"\n name=\"name\"\n placeholder=\"Enter MeshBoard name\"\n required>\n </kendo-textbox>\n @if (name.trim().length === 0) {\n <kendo-formerror>Name is required</kendo-formerror>\n }\n </kendo-formfield>\n\n <!-- Description Field -->\n <kendo-formfield>\n <kendo-label [for]=\"descriptionInput\" text=\"Description\"></kendo-label>\n <kendo-textarea\n #descriptionInput\n [(ngModel)]=\"description\"\n name=\"description\"\n placeholder=\"Enter MeshBoard description (optional)\"\n [rows]=\"3\">\n </kendo-textarea>\n </kendo-formfield>\n\n <!-- Well-Known Name Field -->\n <kendo-formfield>\n <kendo-label [for]=\"wellKnownNameInput\" text=\"Well-Known Name\"></kendo-label>\n <kendo-textbox\n #wellKnownNameInput\n [(ngModel)]=\"rtWellKnownName\"\n name=\"rtWellKnownName\"\n placeholder=\"e.g., cockpit, dashboard-main\">\n </kendo-textbox>\n <kendo-formhint>Unique identifier for routing. Use lowercase with hyphens (e.g., 'cockpit', 'sales-dashboard').</kendo-formhint>\n </kendo-formfield>\n\n <!-- Layout Settings -->\n <div class=\"section-title\">Layout Settings</div>\n\n <!-- Columns Field -->\n <kendo-formfield>\n <kendo-label [for]=\"columnsInput\" text=\"Columns *\"></kendo-label>\n <kendo-numerictextbox\n #columnsInput\n [(ngModel)]=\"columns\"\n name=\"columns\"\n [min]=\"1\"\n [max]=\"12\"\n [decimals]=\"0\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n required>\n </kendo-numerictextbox>\n <kendo-formhint>Number of columns in the grid (1-12)</kendo-formhint>\n @if (columns < 1 || columns > 12) {\n <kendo-formerror>Columns must be between 1 and 12</kendo-formerror>\n }\n </kendo-formfield>\n\n <!-- Row Height Field -->\n <kendo-formfield>\n <kendo-label [for]=\"rowHeightInput\" text=\"Row Height *\"></kendo-label>\n <kendo-numerictextbox\n #rowHeightInput\n [(ngModel)]=\"rowHeight\"\n name=\"rowHeight\"\n [min]=\"100\"\n [max]=\"1000\"\n [decimals]=\"0\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n required>\n </kendo-numerictextbox>\n <kendo-formhint>Height of each row in pixels (100-1000)</kendo-formhint>\n @if (rowHeight < 100 || rowHeight > 1000) {\n <kendo-formerror>Row height must be between 100 and 1000</kendo-formerror>\n }\n </kendo-formfield>\n\n <!-- Gap Field -->\n <kendo-formfield>\n <kendo-label [for]=\"gapInput\" text=\"Gap *\"></kendo-label>\n <kendo-numerictextbox\n #gapInput\n [(ngModel)]=\"gap\"\n name=\"gap\"\n [min]=\"0\"\n [max]=\"100\"\n [decimals]=\"0\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n required>\n </kendo-numerictextbox>\n <kendo-formhint>Space between widgets in pixels (0-100)</kendo-formhint>\n @if (gap < 0 || gap > 100) {\n <kendo-formerror>Gap must be between 0 and 100</kendo-formerror>\n }\n </kendo-formfield>\n </form>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <!-- Variables Tab -->\n <kendo-tabstrip-tab [title]=\"'Variables'\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <mm-variables-editor\n [(variables)]=\"variables\">\n </mm-variables-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <!-- Time Filter Tab -->\n <kendo-tabstrip-tab [title]=\"'Time Filter'\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <form class=\"settings-form\">\n <kendo-formfield>\n <div class=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n #timeFilterCheckbox\n [(ngModel)]=\"timeFilterEnabled\"\n name=\"timeFilterEnabled\"\n id=\"timeFilterEnabled\"/>\n <kendo-label\n [for]=\"timeFilterCheckbox\"\n text=\"Enable Time Filter\"\n class=\"checkbox-label\">\n </kendo-label>\n </div>\n <kendo-formhint>\n Shows a time range picker in the toolbar. Sets $timeRangeFrom and $timeRangeTo variables.\n </kendo-formhint>\n </kendo-formfield>\n\n @if (timeFilterEnabled) {\n <kendo-formfield>\n <kendo-label text=\"Default Selection\"></kendo-label>\n <mm-time-range-picker\n [initialSelection]=\"initialDefaultSelection\"\n (selectionChange)=\"onDefaultSelectionChange($event)\">\n </mm-time-range-picker>\n <kendo-formhint>Initial time filter shown when no URL parameters are set. Note: User-selected filters override this default. Use the reset button in the toolbar to revert to the default.</kendo-formhint>\n </kendo-formfield>\n }\n </form>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <!-- Entity Selectors Tab -->\n <kendo-tabstrip-tab [title]=\"'Entity Selectors'\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <mm-entity-selector-editor\n [(entitySelectors)]=\"entitySelectors\"\n [existingVariableNames]=\"staticVariableNames\"\n (editingStateChange)=\"entitySelectorEditing = $event\">\n </mm-entity-selector-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n\n <!-- Dialog Actions -->\n @if (!entitySelectorEditing) {\n <div class=\"dialog-actions mm-dialog-actions\">\n <button kendoButton (click)=\"cancel()\" fillMode=\"flat\">\n Cancel\n </button>\n <button\n kendoButton\n (click)=\"save()\"\n [disabled]=\"!isValid\"\n themeColor=\"primary\">\n Save\n </button>\n </div>\n }\n</div>\n", styles: [".meshboard-settings-dialog{display:flex;flex-direction:column;height:100%;overflow:hidden}.meshboard-settings-dialog kendo-tabstrip{flex:1;min-height:0;display:flex;flex-direction:column}.meshboard-settings-dialog kendo-tabstrip ::ng-deep .k-tabstrip-content{flex:1;min-height:0;overflow:hidden}.meshboard-settings-dialog .tab-content{height:100%;overflow-y:auto;padding:1.5rem}.meshboard-settings-dialog .settings-form{display:flex;flex-direction:column;gap:1.25rem}.meshboard-settings-dialog .settings-form kendo-formfield{display:flex;flex-direction:column;gap:.5rem}.meshboard-settings-dialog .settings-form kendo-formfield kendo-label{font-weight:500;color:var(--kendo-color-on-app-surface, #424242)}.meshboard-settings-dialog .settings-form kendo-formfield kendo-textbox,.meshboard-settings-dialog .settings-form kendo-formfield kendo-textarea,.meshboard-settings-dialog .settings-form kendo-formfield kendo-numerictextbox{width:100%}.meshboard-settings-dialog .settings-form kendo-formfield kendo-formhint{font-size:.75rem;color:var(--kendo-color-subtle, #757575)}.meshboard-settings-dialog .settings-form kendo-formfield kendo-formerror{font-size:.75rem;color:var(--kendo-color-error, #f44336)}.meshboard-settings-dialog .settings-form .section-title{font-size:.875rem;font-weight:600;color:var(--kendo-color-on-app-surface, #424242);text-transform:uppercase;letter-spacing:.5px;margin-top:.5rem;padding-bottom:.5rem;border-bottom:1px solid var(--kendo-color-border, #e0e0e0)}.meshboard-settings-dialog .settings-form .checkbox-wrapper{display:flex;align-items:center;gap:.5rem}.meshboard-settings-dialog .settings-form .checkbox-wrapper .checkbox-label{font-weight:400;cursor:pointer}.meshboard-settings-dialog .dialog-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--kendo-color-border, #e0e0e0);flex-shrink:0;background-color:var(--kendo-color-surface-alt, white)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: i3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "directive", type: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "component", type: i3.FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors", "colSpan"] }, { kind: "component", type: i3.HintComponent, selector: "kendo-formhint", inputs: ["align"] }, { kind: "component", type: i3.ErrorComponent, selector: "kendo-formerror", inputs: ["align"] }, { kind: "ngmodule", type: CheckBoxModule }, { kind: "ngmodule", type: LabelModule }, { kind: "component", type: i4$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "ngmodule", type: FormFieldModule }, { kind: "ngmodule", type: TabStripModule }, { kind: "component", type: i5.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i5.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i5.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: VariablesEditorComponent, selector: "mm-variables-editor", inputs: ["variables"], outputs: ["variablesChange"] }, { kind: "component", type: EntitySelectorEditorComponent, selector: "mm-entity-selector-editor", inputs: ["entitySelectors", "existingVariableNames"], outputs: ["entitySelectorsChange", "editingStateChange"] }, { kind: "component", type: TimeRangePickerComponent, selector: "mm-time-range-picker", inputs: ["config", "labels", "initialSelection"], outputs: ["rangeChange", "rangeChangeISO", "selectionChange"] }] });
|
|
25210
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardSettingsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25211
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: MeshBoardSettingsDialogComponent, isStandalone: true, selector: "mm-meshboard-settings-dialog", ngImport: i0, template: "<div class=\"meshboard-settings-dialog\">\n <kendo-tabstrip [animate]=\"false\">\n <!-- General Tab -->\n <kendo-tabstrip-tab [title]=\"'General'\" [selected]=\"true\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <form class=\"settings-form\">\n <!-- Name Field -->\n <kendo-formfield>\n <kendo-label [for]=\"nameInput\" text=\"Name *\"></kendo-label>\n <kendo-textbox\n #nameInput\n [(ngModel)]=\"name\"\n name=\"name\"\n placeholder=\"Enter MeshBoard name\"\n required>\n </kendo-textbox>\n @if (name.trim().length === 0) {\n <kendo-formerror>Name is required</kendo-formerror>\n }\n </kendo-formfield>\n\n <!-- Description Field -->\n <kendo-formfield>\n <kendo-label [for]=\"descriptionInput\" text=\"Description\"></kendo-label>\n <kendo-textarea\n #descriptionInput\n [(ngModel)]=\"description\"\n name=\"description\"\n placeholder=\"Enter MeshBoard description (optional)\"\n [rows]=\"3\">\n </kendo-textarea>\n </kendo-formfield>\n\n <!-- Well-Known Name Field -->\n <kendo-formfield>\n <kendo-label [for]=\"wellKnownNameInput\" text=\"Well-Known Name\"></kendo-label>\n <kendo-textbox\n #wellKnownNameInput\n [(ngModel)]=\"rtWellKnownName\"\n name=\"rtWellKnownName\"\n placeholder=\"e.g., cockpit, dashboard-main\">\n </kendo-textbox>\n <kendo-formhint>Unique identifier for routing. Use lowercase with hyphens (e.g., 'cockpit', 'sales-dashboard').</kendo-formhint>\n </kendo-formfield>\n\n <!-- Layout Settings -->\n <div class=\"section-title\">Layout Settings</div>\n\n <!-- Columns Field -->\n <kendo-formfield>\n <kendo-label [for]=\"columnsInput\" text=\"Columns *\"></kendo-label>\n <kendo-numerictextbox\n #columnsInput\n [(ngModel)]=\"columns\"\n name=\"columns\"\n [min]=\"1\"\n [max]=\"12\"\n [decimals]=\"0\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n required>\n </kendo-numerictextbox>\n <kendo-formhint>Number of columns in the grid (1-12)</kendo-formhint>\n @if (columns < 1 || columns > 12) {\n <kendo-formerror>Columns must be between 1 and 12</kendo-formerror>\n }\n </kendo-formfield>\n\n <!-- Row Height Field -->\n <kendo-formfield>\n <kendo-label [for]=\"rowHeightInput\" text=\"Row Height *\"></kendo-label>\n <kendo-numerictextbox\n #rowHeightInput\n [(ngModel)]=\"rowHeight\"\n name=\"rowHeight\"\n [min]=\"100\"\n [max]=\"1000\"\n [decimals]=\"0\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n required>\n </kendo-numerictextbox>\n <kendo-formhint>Height of each row in pixels (100-1000)</kendo-formhint>\n @if (rowHeight < 100 || rowHeight > 1000) {\n <kendo-formerror>Row height must be between 100 and 1000</kendo-formerror>\n }\n </kendo-formfield>\n\n <!-- Gap Field -->\n <kendo-formfield>\n <kendo-label [for]=\"gapInput\" text=\"Gap *\"></kendo-label>\n <kendo-numerictextbox\n #gapInput\n [(ngModel)]=\"gap\"\n name=\"gap\"\n [min]=\"0\"\n [max]=\"100\"\n [decimals]=\"0\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n required>\n </kendo-numerictextbox>\n <kendo-formhint>Space between widgets in pixels (0-100)</kendo-formhint>\n @if (gap < 0 || gap > 100) {\n <kendo-formerror>Gap must be between 0 and 100</kendo-formerror>\n }\n </kendo-formfield>\n </form>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <!-- Variables Tab -->\n <kendo-tabstrip-tab [title]=\"'Variables'\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <mm-variables-editor\n [(variables)]=\"variables\">\n </mm-variables-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <!-- Time Filter Tab -->\n <kendo-tabstrip-tab [title]=\"'Time Filter'\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <form class=\"settings-form\">\n <kendo-formfield>\n <div class=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n #timeFilterCheckbox\n [(ngModel)]=\"timeFilterEnabled\"\n name=\"timeFilterEnabled\"\n id=\"timeFilterEnabled\"/>\n <kendo-label\n [for]=\"timeFilterCheckbox\"\n text=\"Enable Time Filter\"\n class=\"checkbox-label\">\n </kendo-label>\n </div>\n <kendo-formhint>\n Shows a time range picker in the toolbar. Sets $timeRangeFrom and $timeRangeTo variables.\n </kendo-formhint>\n </kendo-formfield>\n\n @if (timeFilterEnabled) {\n <kendo-formfield>\n <kendo-label text=\"Default Selection\"></kendo-label>\n <mm-time-range-picker\n [initialSelection]=\"initialDefaultSelection\"\n (selectionChange)=\"onDefaultSelectionChange($event)\">\n </mm-time-range-picker>\n <kendo-formhint>Initial time filter shown when no URL parameters are set. Note: User-selected filters override this default. Use the reset button in the toolbar to revert to the default.</kendo-formhint>\n </kendo-formfield>\n }\n </form>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <!-- Entity Selectors Tab -->\n <kendo-tabstrip-tab [title]=\"'Entity Selectors'\">\n <ng-template kendoTabContent>\n <div class=\"tab-content\">\n <mm-entity-selector-editor\n [(entitySelectors)]=\"entitySelectors\"\n [existingVariableNames]=\"staticVariableNames\"\n (editingStateChange)=\"entitySelectorEditing = $event\">\n </mm-entity-selector-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n\n <!-- Dialog Actions -->\n @if (!entitySelectorEditing) {\n <div class=\"dialog-actions mm-dialog-actions\">\n <button kendoButton (click)=\"cancel()\" fillMode=\"flat\">\n Cancel\n </button>\n <button\n kendoButton\n (click)=\"save()\"\n [disabled]=\"!isValid\"\n themeColor=\"primary\">\n Save\n </button>\n </div>\n }\n</div>\n", styles: [".meshboard-settings-dialog{display:flex;flex-direction:column;height:100%;overflow:hidden}.meshboard-settings-dialog kendo-tabstrip{flex:1;min-height:0;display:flex;flex-direction:column}.meshboard-settings-dialog kendo-tabstrip ::ng-deep .k-tabstrip-content{flex:1;min-height:0;overflow:hidden}.meshboard-settings-dialog .tab-content{height:100%;overflow-y:auto;padding:1.5rem}.meshboard-settings-dialog .settings-form{display:flex;flex-direction:column;gap:1.25rem}.meshboard-settings-dialog .settings-form kendo-formfield{display:flex;flex-direction:column;gap:.5rem}.meshboard-settings-dialog .settings-form kendo-formfield kendo-label{font-weight:500;color:var(--kendo-color-on-app-surface, #424242)}.meshboard-settings-dialog .settings-form kendo-formfield kendo-textbox,.meshboard-settings-dialog .settings-form kendo-formfield kendo-textarea,.meshboard-settings-dialog .settings-form kendo-formfield kendo-numerictextbox{width:100%}.meshboard-settings-dialog .settings-form kendo-formfield kendo-formhint{font-size:.75rem;color:var(--kendo-color-subtle, #757575)}.meshboard-settings-dialog .settings-form kendo-formfield kendo-formerror{font-size:.75rem;color:var(--kendo-color-error, #f44336)}.meshboard-settings-dialog .settings-form .section-title{font-size:.875rem;font-weight:600;color:var(--kendo-color-on-app-surface, #424242);text-transform:uppercase;letter-spacing:.5px;margin-top:.5rem;padding-bottom:.5rem;border-bottom:1px solid var(--kendo-color-border, #e0e0e0)}.meshboard-settings-dialog .settings-form .checkbox-wrapper{display:flex;align-items:center;gap:.5rem}.meshboard-settings-dialog .settings-form .checkbox-wrapper .checkbox-label{font-weight:400;cursor:pointer}.meshboard-settings-dialog .dialog-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--kendo-color-border, #e0e0e0);flex-shrink:0;background-color:var(--kendo-color-surface-alt, white)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: i3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "directive", type: i3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "component", type: i3.FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors", "colSpan"] }, { kind: "component", type: i3.HintComponent, selector: "kendo-formhint", inputs: ["align"] }, { kind: "component", type: i3.ErrorComponent, selector: "kendo-formerror", inputs: ["align"] }, { kind: "ngmodule", type: CheckBoxModule }, { kind: "ngmodule", type: LabelModule }, { kind: "component", type: i4$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "ngmodule", type: FormFieldModule }, { kind: "ngmodule", type: TabStripModule }, { kind: "component", type: i5.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i5.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i5.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: VariablesEditorComponent, selector: "mm-variables-editor", inputs: ["variables"], outputs: ["variablesChange"] }, { kind: "component", type: EntitySelectorEditorComponent, selector: "mm-entity-selector-editor", inputs: ["entitySelectors", "existingVariableNames"], outputs: ["entitySelectorsChange", "editingStateChange"] }, { kind: "component", type: TimeRangePickerComponent, selector: "mm-time-range-picker", inputs: ["config", "labels", "initialSelection"], outputs: ["rangeChange", "rangeChangeISO", "selectionChange"] }] });
|
|
25212
25212
|
}
|
|
25213
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
25213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardSettingsDialogComponent, decorators: [{
|
|
25214
25214
|
type: Component,
|
|
25215
25215
|
args: [{ selector: 'mm-meshboard-settings-dialog', standalone: true, imports: [
|
|
25216
25216
|
CommonModule,
|
|
@@ -25236,8 +25236,8 @@ class AddWidgetDialogComponent {
|
|
|
25236
25236
|
// Icons
|
|
25237
25237
|
checkCircleIcon = checkCircleIcon;
|
|
25238
25238
|
// State
|
|
25239
|
-
widgetTypes = signal([], ...(ngDevMode ? [{ debugName: "widgetTypes" }] : []));
|
|
25240
|
-
selectedType = signal(null, ...(ngDevMode ? [{ debugName: "selectedType" }] : []));
|
|
25239
|
+
widgetTypes = signal([], ...(ngDevMode ? [{ debugName: "widgetTypes" }] : /* istanbul ignore next */ []));
|
|
25240
|
+
selectedType = signal(null, ...(ngDevMode ? [{ debugName: "selectedType" }] : /* istanbul ignore next */ []));
|
|
25241
25241
|
ngOnInit() {
|
|
25242
25242
|
// Load available widget types from registry
|
|
25243
25243
|
const registeredWidgets = this.widgetRegistry.getRegisteredWidgets();
|
|
@@ -25354,10 +25354,10 @@ class AddWidgetDialogComponent {
|
|
|
25354
25354
|
cancel() {
|
|
25355
25355
|
this.dialogRef.close();
|
|
25356
25356
|
}
|
|
25357
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
25358
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
25357
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AddWidgetDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25358
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AddWidgetDialogComponent, isStandalone: true, selector: "mm-add-widget-dialog", ngImport: i0, template: "<div class=\"add-widget-dialog\">\n <div class=\"dialog-content\">\n <p class=\"dialog-description\">\n Select a widget type to add to your MeshBoard:\n </p>\n\n <div class=\"widget-types-list\">\n <div class=\"list-header\">Available Widgets</div>\n\n @for (item of widgetTypes(); track item.type) {\n <div\n class=\"widget-type-item\"\n [class.selected]=\"isSelected(item.type)\"\n (click)=\"selectType(item.type)\">\n <div class=\"widget-icon\">\n <kendo-svg-icon [icon]=\"item.icon\" size=\"large\"></kendo-svg-icon>\n </div>\n <div class=\"widget-info\">\n <h4 class=\"widget-label\">{{ item.label }}</h4>\n <p class=\"widget-description\">{{ item.description }}</p>\n </div>\n @if (isSelected(item.type)) {\n <div class=\"selected-indicator\">\n <kendo-svg-icon [icon]=\"checkCircleIcon\" size=\"medium\"></kendo-svg-icon>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Dialog Actions -->\n <div class=\"dialog-actions mm-dialog-actions\">\n <button kendoButton (click)=\"cancel()\" fillMode=\"flat\">\n Cancel\n </button>\n <button\n kendoButton\n (click)=\"add()\"\n [disabled]=\"!selectedType()\"\n themeColor=\"primary\">\n Add Widget\n </button>\n </div>\n</div>\n", styles: [".add-widget-dialog{display:flex;flex-direction:column;gap:.75rem;padding:.75rem;max-height:60vh;overflow:hidden}.add-widget-dialog .dialog-content{display:flex;flex-direction:column;gap:1rem;flex:1;min-height:0;overflow:hidden}.add-widget-dialog .dialog-content .dialog-description{margin:0;color:var(--kendo-color-subtle, #757575);font-size:.875rem}.add-widget-dialog .dialog-content .widget-types-list{flex:1;overflow-y:auto;border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px}.add-widget-dialog .dialog-content .widget-types-list .list-header{font-weight:600;font-size:.75rem;color:var(--kendo-color-on-app-surface, #424242);padding:.5rem .75rem;background-color:var(--kendo-color-surface-alt, #fafafa);border-bottom:1px solid var(--kendo-color-border, #e0e0e0);text-transform:uppercase;letter-spacing:.5px}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;cursor:pointer;border-bottom:1px solid var(--kendo-color-border, #e0e0e0);transition:background-color .2s,box-shadow .2s}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item:last-child{border-bottom:none}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item:hover{background-color:var(--kendo-color-base-hover, #f5f5f5)}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item.selected{background-color:var(--kendo-color-primary-subtle, #e8eaf6);box-shadow:inset 3px 0 0 var(--kendo-color-primary, #3f51b5)}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item .widget-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:4px;background-color:var(--kendo-color-surface-alt, #f5f5f5);color:var(--kendo-color-primary, #3f51b5)}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item .widget-icon kendo-svg-icon{color:inherit}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item .widget-info{flex:1;min-width:0}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item .widget-info .widget-label{margin:0 0 .125rem;font-size:.875rem;font-weight:500;color:var(--kendo-color-on-app-surface, #212121)}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item .widget-info .widget-description{margin:0;font-size:.75rem;color:var(--kendo-color-subtle, #757575);line-height:1.3}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item .selected-indicator{flex-shrink:0;color:var(--kendo-color-primary, #3f51b5)}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item .selected-indicator kendo-svg-icon{color:inherit}.add-widget-dialog .dialog-content .widget-types-list .widget-type-item.selected .widget-icon{background-color:var(--kendo-color-primary, #3f51b5);color:var(--kendo-color-on-primary, #ffffff)}.add-widget-dialog .dialog-actions{display:flex;justify-content:flex-end;gap:.5rem;padding-top:.5rem;border-top:1px solid var(--kendo-color-border, #e0e0e0);flex-shrink:0}.widget-types-list::-webkit-scrollbar{width:8px}.widget-types-list::-webkit-scrollbar-track{background:var(--kendo-color-surface-alt, #f5f5f5)}.widget-types-list::-webkit-scrollbar-thumb{background:var(--kendo-color-border, #e0e0e0);border-radius:4px}.widget-types-list::-webkit-scrollbar-thumb:hover{background:var(--kendo-color-subtle, #9e9e9e)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: DialogModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }] });
|
|
25359
25359
|
}
|
|
25360
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
25360
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AddWidgetDialogComponent, decorators: [{
|
|
25361
25361
|
type: Component,
|
|
25362
25362
|
args: [{ selector: 'mm-add-widget-dialog', standalone: true, imports: [
|
|
25363
25363
|
CommonModule,
|
|
@@ -25403,25 +25403,25 @@ class MeshBoardManagerDialogComponent {
|
|
|
25403
25403
|
uploadIcon = uploadIcon;
|
|
25404
25404
|
copyIcon = copyIcon;
|
|
25405
25405
|
// Export/Import/Duplicate state
|
|
25406
|
-
isExporting = signal(false, ...(ngDevMode ? [{ debugName: "isExporting" }] : []));
|
|
25407
|
-
isImporting = signal(false, ...(ngDevMode ? [{ debugName: "isImporting" }] : []));
|
|
25408
|
-
isDuplicating = signal(false, ...(ngDevMode ? [{ debugName: "isDuplicating" }] : []));
|
|
25406
|
+
isExporting = signal(false, ...(ngDevMode ? [{ debugName: "isExporting" }] : /* istanbul ignore next */ []));
|
|
25407
|
+
isImporting = signal(false, ...(ngDevMode ? [{ debugName: "isImporting" }] : /* istanbul ignore next */ []));
|
|
25408
|
+
isDuplicating = signal(false, ...(ngDevMode ? [{ debugName: "isDuplicating" }] : /* istanbul ignore next */ []));
|
|
25409
25409
|
// State - use computed to ensure reactivity
|
|
25410
|
-
meshBoards = computed(() => this.stateService.availableMeshBoards(), ...(ngDevMode ? [{ debugName: "meshBoards" }] : []));
|
|
25411
|
-
currentMeshBoardId = computed(() => this.stateService.persistedMeshBoardId(), ...(ngDevMode ? [{ debugName: "currentMeshBoardId" }] : []));
|
|
25412
|
-
isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
25410
|
+
meshBoards = computed(() => this.stateService.availableMeshBoards(), ...(ngDevMode ? [{ debugName: "meshBoards" }] : /* istanbul ignore next */ []));
|
|
25411
|
+
currentMeshBoardId = computed(() => this.stateService.persistedMeshBoardId(), ...(ngDevMode ? [{ debugName: "currentMeshBoardId" }] : /* istanbul ignore next */ []));
|
|
25412
|
+
isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
25413
25413
|
// Editing state
|
|
25414
|
-
editingId = signal(null, ...(ngDevMode ? [{ debugName: "editingId" }] : []));
|
|
25415
|
-
editingName = signal('', ...(ngDevMode ? [{ debugName: "editingName" }] : []));
|
|
25416
|
-
editingDescription = signal('', ...(ngDevMode ? [{ debugName: "editingDescription" }] : []));
|
|
25414
|
+
editingId = signal(null, ...(ngDevMode ? [{ debugName: "editingId" }] : /* istanbul ignore next */ []));
|
|
25415
|
+
editingName = signal('', ...(ngDevMode ? [{ debugName: "editingName" }] : /* istanbul ignore next */ []));
|
|
25416
|
+
editingDescription = signal('', ...(ngDevMode ? [{ debugName: "editingDescription" }] : /* istanbul ignore next */ []));
|
|
25417
25417
|
/** Preserved encoded suffix (variables/timeFilter) from the raw description */
|
|
25418
25418
|
editingEncodedSuffix = '';
|
|
25419
25419
|
// Create new state
|
|
25420
|
-
isCreating = signal(false, ...(ngDevMode ? [{ debugName: "isCreating" }] : []));
|
|
25421
|
-
newName = signal('', ...(ngDevMode ? [{ debugName: "newName" }] : []));
|
|
25422
|
-
newDescription = signal('', ...(ngDevMode ? [{ debugName: "newDescription" }] : []));
|
|
25420
|
+
isCreating = signal(false, ...(ngDevMode ? [{ debugName: "isCreating" }] : /* istanbul ignore next */ []));
|
|
25421
|
+
newName = signal('', ...(ngDevMode ? [{ debugName: "newName" }] : /* istanbul ignore next */ []));
|
|
25422
|
+
newDescription = signal('', ...(ngDevMode ? [{ debugName: "newDescription" }] : /* istanbul ignore next */ []));
|
|
25423
25423
|
// Computed
|
|
25424
|
-
hasMeshBoards = computed(() => this.meshBoards().length > 0, ...(ngDevMode ? [{ debugName: "hasMeshBoards" }] : []));
|
|
25424
|
+
hasMeshBoards = computed(() => this.meshBoards().length > 0, ...(ngDevMode ? [{ debugName: "hasMeshBoards" }] : /* istanbul ignore next */ []));
|
|
25425
25425
|
async ngOnInit() {
|
|
25426
25426
|
await this.refresh();
|
|
25427
25427
|
}
|
|
@@ -25734,10 +25734,10 @@ class MeshBoardManagerDialogComponent {
|
|
|
25734
25734
|
this.isImporting.set(false);
|
|
25735
25735
|
}
|
|
25736
25736
|
}
|
|
25737
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
25738
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: MeshBoardManagerDialogComponent, isStandalone: true, selector: "mm-meshboard-manager-dialog", ngImport: i0, template: "<div class=\"meshboard-manager-dialog\">\n <!-- Header with Create/Import Buttons -->\n <div class=\"dialog-header\">\n <p class=\"dialog-description\">Manage your MeshBoards</p>\n <div class=\"header-actions\">\n @if (canExport) {\n <button\n kendoButton\n [svgIcon]=\"uploadIcon\"\n (click)=\"triggerImport()\"\n [disabled]=\"isCreating() || isLoading() || isImporting()\"\n fillMode=\"outline\">\n Import\n </button>\n }\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"startCreate()\"\n [disabled]=\"isCreating() || isLoading()\"\n themeColor=\"primary\">\n New MeshBoard\n </button>\n </div>\n </div>\n\n <!-- Create New MeshBoard Form -->\n @if (isCreating()) {\n <div class=\"create-form\">\n <h4 class=\"form-title\">Create New MeshBoard</h4>\n <div class=\"form-fields\">\n <kendo-textbox\n [(ngModel)]=\"newName\"\n placeholder=\"MeshBoard name\"\n [disabled]=\"isLoading()\">\n </kendo-textbox>\n <kendo-textarea\n [(ngModel)]=\"newDescription\"\n placeholder=\"Description (optional)\"\n [rows]=\"2\"\n [disabled]=\"isLoading()\">\n </kendo-textarea>\n </div>\n <div class=\"form-actions\">\n <button\n kendoButton\n [svgIcon]=\"xIcon\"\n (click)=\"cancelCreate()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\">\n Cancel\n </button>\n <button\n kendoButton\n [svgIcon]=\"checkIcon\"\n (click)=\"create()\"\n [disabled]=\"newName().trim().length === 0 || isLoading()\"\n themeColor=\"primary\"\n size=\"small\">\n Create\n </button>\n </div>\n </div>\n }\n\n <!-- MeshBoards List -->\n <div class=\"meshboards-list\">\n @if (isLoading()) {\n <div class=\"loading-state\">\n <span class=\"k-loading-text\">Loading...</span>\n </div>\n } @else if (hasMeshBoards()) {\n @for (item of meshBoards(); track item.rtId) {\n <div\n class=\"meshboard-item\"\n [class.active]=\"isActive(item)\"\n [class.editing]=\"isEditing(item)\">\n\n @if (!isEditing(item)) {\n <!-- Display Mode -->\n <div class=\"item-content\" (click)=\"switchTo(item)\">\n <div class=\"item-icon\">\n <kendo-svg-icon [icon]=\"gridLayoutIcon\" size=\"large\"></kendo-svg-icon>\n </div>\n <div class=\"item-info\">\n <h4 class=\"item-name\">\n {{ item.name }}\n @if (isActive(item)) {\n <span class=\"active-badge\">Active</span>\n }\n </h4>\n @if (getDisplayDescription(item)) {\n <p class=\"item-description\">{{ getDisplayDescription(item) }}</p>\n }\n </div>\n <div class=\"item-actions\">\n @if (canExport) {\n <button\n kendoButton\n [svgIcon]=\"downloadIcon\"\n (click)=\"exportMeshBoard(item, $event)\"\n [disabled]=\"isLoading() || isExporting()\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Export\">\n </button>\n }\n <button\n kendoButton\n [svgIcon]=\"copyIcon\"\n (click)=\"duplicate(item); $event.stopPropagation()\"\n [disabled]=\"isLoading() || isDuplicating()\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Duplicate\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"pencilIcon\"\n (click)=\"startEdit(item); $event.stopPropagation()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Edit\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n (click)=\"delete(item); $event.stopPropagation()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\"\n themeColor=\"error\"\n title=\"Delete\">\n </button>\n </div>\n </div>\n } @else {\n <!-- Edit Mode -->\n <div class=\"item-edit\">\n <div class=\"edit-fields\">\n <kendo-textbox\n [(ngModel)]=\"editingName\"\n placeholder=\"MeshBoard name\"\n [disabled]=\"isLoading()\">\n </kendo-textbox>\n <kendo-textarea\n [(ngModel)]=\"editingDescription\"\n placeholder=\"Description (optional)\"\n [rows]=\"2\"\n [disabled]=\"isLoading()\">\n </kendo-textarea>\n </div>\n <div class=\"edit-actions mm-dialog-actions\">\n <button\n kendoButton\n [svgIcon]=\"xIcon\"\n (click)=\"cancelEdit()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\">\n Cancel\n </button>\n <button\n kendoButton\n [svgIcon]=\"checkIcon\"\n (click)=\"saveEdit()\"\n [disabled]=\"editingName().trim().length === 0 || isLoading()\"\n themeColor=\"primary\"\n size=\"small\">\n Save\n </button>\n </div>\n </div>\n }\n </div>\n }\n } @else {\n <div class=\"empty-state\">\n <kendo-svg-icon [icon]=\"gridLayoutIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h3>No MeshBoards</h3>\n <p>Create your first MeshBoard to get started.</p>\n </div>\n }\n </div>\n\n <!-- Dialog Actions -->\n <div class=\"dialog-actions mm-dialog-actions\">\n <button kendoButton (click)=\"close()\" fillMode=\"flat\">\n Close\n </button>\n </div>\n</div>\n", styles: [".meshboard-manager-dialog{display:flex;flex-direction:column;gap:.75rem;padding:.75rem .75rem 1.5rem;overflow:hidden}.meshboard-manager-dialog .dialog-header{display:flex;justify-content:space-between;align-items:center;gap:1rem}.meshboard-manager-dialog .dialog-header .dialog-description{margin:0;color:var(--kendo-color-subtle, #757575);font-size:.875rem;flex:1}.meshboard-manager-dialog .dialog-header .header-actions{display:flex;gap:.5rem}.meshboard-manager-dialog .create-form{padding:1rem;background-color:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px}.meshboard-manager-dialog .create-form .form-title{margin:0 0 1rem;font-size:1rem;font-weight:600;color:var(--kendo-color-on-app-surface, #424242)}.meshboard-manager-dialog .create-form .form-fields{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1rem}.meshboard-manager-dialog .create-form .form-fields kendo-textbox,.meshboard-manager-dialog .create-form .form-fields kendo-textarea{width:100%}.meshboard-manager-dialog .create-form .form-actions{display:flex;justify-content:flex-end;gap:.5rem}.meshboard-manager-dialog .meshboards-list{flex:1;min-height:250px;overflow-y:auto;border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px;background-color:var(--kendo-color-surface, #ffffff)}.meshboard-manager-dialog .meshboards-list .loading-state{display:flex;align-items:center;justify-content:center;padding:2rem;color:var(--kendo-color-subtle, #757575)}.meshboard-manager-dialog .meshboards-list .empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 2rem;text-align:center}.meshboard-manager-dialog .meshboards-list .empty-state kendo-svg-icon{color:var(--kendo-color-subtle, #9e9e9e);margin-bottom:1rem}.meshboard-manager-dialog .meshboards-list .empty-state h3{margin:.5rem 0;color:var(--kendo-color-on-app-surface, #424242);font-size:1.125rem;font-weight:500}.meshboard-manager-dialog .meshboards-list .empty-state p{margin:0;color:var(--kendo-color-subtle, #757575);font-size:.875rem}.meshboard-manager-dialog .meshboards-list .meshboard-item{border-bottom:1px solid var(--kendo-color-border, #e0e0e0);transition:background-color .2s,box-shadow .2s}.meshboard-manager-dialog .meshboards-list .meshboard-item:last-child{border-bottom:none}.meshboard-manager-dialog .meshboards-list .meshboard-item:not(.active):not(.editing):hover{background-color:var(--kendo-color-base-hover, #f5f5f5)}.meshboard-manager-dialog .meshboards-list .meshboard-item.active{background-color:var(--kendo-color-primary-subtle, #e8eaf6);box-shadow:inset 4px 0 0 var(--kendo-color-primary, #3f51b5)}.meshboard-manager-dialog .meshboards-list .meshboard-item.editing{background-color:var(--kendo-color-surface-alt, #fafafa)}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content{display:flex;align-items:center;gap:1rem;padding:1rem;cursor:pointer}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:8px;background-color:var(--kendo-color-surface-alt, #f5f5f5);color:var(--kendo-color-primary, #3f51b5)}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-icon kendo-svg-icon{color:inherit}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info{flex:1;min-width:0}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info .item-name{margin:0 0 .25rem;font-size:1rem;font-weight:500;color:var(--kendo-color-on-app-surface, #212121);display:flex;align-items:center;gap:.5rem}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info .item-name .active-badge{display:inline-block;padding:.125rem .5rem;font-size:.75rem;font-weight:600;color:var(--kendo-color-on-primary, #ffffff);background-color:var(--kendo-color-primary, #3f51b5);border-radius:12px}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info .item-description{margin:0;font-size:.875rem;color:var(--kendo-color-subtle, #757575);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-actions{flex-shrink:0;display:flex;gap:.25rem;opacity:.5;transition:opacity .2s}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content:hover .item-actions{opacity:1}.meshboard-manager-dialog .meshboards-list .meshboard-item.active .item-content .item-icon{background-color:var(--kendo-color-primary, #3f51b5);color:var(--kendo-color-on-primary, #ffffff)}.meshboard-manager-dialog .meshboards-list .meshboard-item:not(.active) .item-content:after{content:\"Click to switch\";font-size:.75rem;color:var(--kendo-color-subtle, #9e9e9e);opacity:0;transition:opacity .2s;white-space:nowrap}.meshboard-manager-dialog .meshboards-list .meshboard-item:not(.active):hover .item-content:after{opacity:1}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit{padding:1rem}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-fields{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.75rem}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-fields kendo-textbox,.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-fields kendo-textarea{width:100%}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-actions{display:flex;justify-content:flex-end;gap:.5rem}.meshboard-manager-dialog .dialog-actions{display:flex;justify-content:flex-end;gap:.5rem;padding-top:.75rem;border-top:1px solid var(--kendo-color-border, #e0e0e0);flex-shrink:0;margin-bottom:.5rem}.meshboards-list::-webkit-scrollbar{width:8px}.meshboards-list::-webkit-scrollbar-track{background:var(--kendo-color-surface-alt, #f5f5f5)}.meshboards-list::-webkit-scrollbar-thumb{background:var(--kendo-color-border, #e0e0e0);border-radius:4px}.meshboards-list::-webkit-scrollbar-thumb:hover{background:var(--kendo-color-subtle, #9e9e9e)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: DialogModule }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }] });
|
|
25737
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardManagerDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25738
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: MeshBoardManagerDialogComponent, isStandalone: true, selector: "mm-meshboard-manager-dialog", ngImport: i0, template: "<div class=\"meshboard-manager-dialog\">\n <!-- Header with Create/Import Buttons -->\n <div class=\"dialog-header\">\n <p class=\"dialog-description\">Manage your MeshBoards</p>\n <div class=\"header-actions\">\n @if (canExport) {\n <button\n kendoButton\n [svgIcon]=\"uploadIcon\"\n (click)=\"triggerImport()\"\n [disabled]=\"isCreating() || isLoading() || isImporting()\"\n fillMode=\"outline\">\n Import\n </button>\n }\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"startCreate()\"\n [disabled]=\"isCreating() || isLoading()\"\n themeColor=\"primary\">\n New MeshBoard\n </button>\n </div>\n </div>\n\n <!-- Create New MeshBoard Form -->\n @if (isCreating()) {\n <div class=\"create-form\">\n <h4 class=\"form-title\">Create New MeshBoard</h4>\n <div class=\"form-fields\">\n <kendo-textbox\n [(ngModel)]=\"newName\"\n placeholder=\"MeshBoard name\"\n [disabled]=\"isLoading()\">\n </kendo-textbox>\n <kendo-textarea\n [(ngModel)]=\"newDescription\"\n placeholder=\"Description (optional)\"\n [rows]=\"2\"\n [disabled]=\"isLoading()\">\n </kendo-textarea>\n </div>\n <div class=\"form-actions\">\n <button\n kendoButton\n [svgIcon]=\"xIcon\"\n (click)=\"cancelCreate()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\">\n Cancel\n </button>\n <button\n kendoButton\n [svgIcon]=\"checkIcon\"\n (click)=\"create()\"\n [disabled]=\"newName().trim().length === 0 || isLoading()\"\n themeColor=\"primary\"\n size=\"small\">\n Create\n </button>\n </div>\n </div>\n }\n\n <!-- MeshBoards List -->\n <div class=\"meshboards-list\">\n @if (isLoading()) {\n <div class=\"loading-state\">\n <span class=\"k-loading-text\">Loading...</span>\n </div>\n } @else if (hasMeshBoards()) {\n @for (item of meshBoards(); track item.rtId) {\n <div\n class=\"meshboard-item\"\n [class.active]=\"isActive(item)\"\n [class.editing]=\"isEditing(item)\">\n\n @if (!isEditing(item)) {\n <!-- Display Mode -->\n <div class=\"item-content\" (click)=\"switchTo(item)\">\n <div class=\"item-icon\">\n <kendo-svg-icon [icon]=\"gridLayoutIcon\" size=\"large\"></kendo-svg-icon>\n </div>\n <div class=\"item-info\">\n <h4 class=\"item-name\">\n {{ item.name }}\n @if (isActive(item)) {\n <span class=\"active-badge\">Active</span>\n }\n </h4>\n @if (getDisplayDescription(item)) {\n <p class=\"item-description\">{{ getDisplayDescription(item) }}</p>\n }\n </div>\n <div class=\"item-actions\">\n @if (canExport) {\n <button\n kendoButton\n [svgIcon]=\"downloadIcon\"\n (click)=\"exportMeshBoard(item, $event)\"\n [disabled]=\"isLoading() || isExporting()\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Export\">\n </button>\n }\n <button\n kendoButton\n [svgIcon]=\"copyIcon\"\n (click)=\"duplicate(item); $event.stopPropagation()\"\n [disabled]=\"isLoading() || isDuplicating()\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Duplicate\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"pencilIcon\"\n (click)=\"startEdit(item); $event.stopPropagation()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\"\n title=\"Edit\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n (click)=\"delete(item); $event.stopPropagation()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\"\n themeColor=\"error\"\n title=\"Delete\">\n </button>\n </div>\n </div>\n } @else {\n <!-- Edit Mode -->\n <div class=\"item-edit\">\n <div class=\"edit-fields\">\n <kendo-textbox\n [(ngModel)]=\"editingName\"\n placeholder=\"MeshBoard name\"\n [disabled]=\"isLoading()\">\n </kendo-textbox>\n <kendo-textarea\n [(ngModel)]=\"editingDescription\"\n placeholder=\"Description (optional)\"\n [rows]=\"2\"\n [disabled]=\"isLoading()\">\n </kendo-textarea>\n </div>\n <div class=\"edit-actions mm-dialog-actions\">\n <button\n kendoButton\n [svgIcon]=\"xIcon\"\n (click)=\"cancelEdit()\"\n [disabled]=\"isLoading()\"\n fillMode=\"flat\"\n size=\"small\">\n Cancel\n </button>\n <button\n kendoButton\n [svgIcon]=\"checkIcon\"\n (click)=\"saveEdit()\"\n [disabled]=\"editingName().trim().length === 0 || isLoading()\"\n themeColor=\"primary\"\n size=\"small\">\n Save\n </button>\n </div>\n </div>\n }\n </div>\n }\n } @else {\n <div class=\"empty-state\">\n <kendo-svg-icon [icon]=\"gridLayoutIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h3>No MeshBoards</h3>\n <p>Create your first MeshBoard to get started.</p>\n </div>\n }\n </div>\n\n <!-- Dialog Actions -->\n <div class=\"dialog-actions mm-dialog-actions\">\n <button kendoButton (click)=\"close()\" fillMode=\"flat\">\n Close\n </button>\n </div>\n</div>\n", styles: [".meshboard-manager-dialog{display:flex;flex-direction:column;gap:.75rem;padding:.75rem .75rem 1.5rem;overflow:hidden}.meshboard-manager-dialog .dialog-header{display:flex;justify-content:space-between;align-items:center;gap:1rem}.meshboard-manager-dialog .dialog-header .dialog-description{margin:0;color:var(--kendo-color-subtle, #757575);font-size:.875rem;flex:1}.meshboard-manager-dialog .dialog-header .header-actions{display:flex;gap:.5rem}.meshboard-manager-dialog .create-form{padding:1rem;background-color:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px}.meshboard-manager-dialog .create-form .form-title{margin:0 0 1rem;font-size:1rem;font-weight:600;color:var(--kendo-color-on-app-surface, #424242)}.meshboard-manager-dialog .create-form .form-fields{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1rem}.meshboard-manager-dialog .create-form .form-fields kendo-textbox,.meshboard-manager-dialog .create-form .form-fields kendo-textarea{width:100%}.meshboard-manager-dialog .create-form .form-actions{display:flex;justify-content:flex-end;gap:.5rem}.meshboard-manager-dialog .meshboards-list{flex:1;min-height:250px;overflow-y:auto;border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:4px;background-color:var(--kendo-color-surface, #ffffff)}.meshboard-manager-dialog .meshboards-list .loading-state{display:flex;align-items:center;justify-content:center;padding:2rem;color:var(--kendo-color-subtle, #757575)}.meshboard-manager-dialog .meshboards-list .empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 2rem;text-align:center}.meshboard-manager-dialog .meshboards-list .empty-state kendo-svg-icon{color:var(--kendo-color-subtle, #9e9e9e);margin-bottom:1rem}.meshboard-manager-dialog .meshboards-list .empty-state h3{margin:.5rem 0;color:var(--kendo-color-on-app-surface, #424242);font-size:1.125rem;font-weight:500}.meshboard-manager-dialog .meshboards-list .empty-state p{margin:0;color:var(--kendo-color-subtle, #757575);font-size:.875rem}.meshboard-manager-dialog .meshboards-list .meshboard-item{border-bottom:1px solid var(--kendo-color-border, #e0e0e0);transition:background-color .2s,box-shadow .2s}.meshboard-manager-dialog .meshboards-list .meshboard-item:last-child{border-bottom:none}.meshboard-manager-dialog .meshboards-list .meshboard-item:not(.active):not(.editing):hover{background-color:var(--kendo-color-base-hover, #f5f5f5)}.meshboard-manager-dialog .meshboards-list .meshboard-item.active{background-color:var(--kendo-color-primary-subtle, #e8eaf6);box-shadow:inset 4px 0 0 var(--kendo-color-primary, #3f51b5)}.meshboard-manager-dialog .meshboards-list .meshboard-item.editing{background-color:var(--kendo-color-surface-alt, #fafafa)}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content{display:flex;align-items:center;gap:1rem;padding:1rem;cursor:pointer}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:8px;background-color:var(--kendo-color-surface-alt, #f5f5f5);color:var(--kendo-color-primary, #3f51b5)}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-icon kendo-svg-icon{color:inherit}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info{flex:1;min-width:0}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info .item-name{margin:0 0 .25rem;font-size:1rem;font-weight:500;color:var(--kendo-color-on-app-surface, #212121);display:flex;align-items:center;gap:.5rem}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info .item-name .active-badge{display:inline-block;padding:.125rem .5rem;font-size:.75rem;font-weight:600;color:var(--kendo-color-on-primary, #ffffff);background-color:var(--kendo-color-primary, #3f51b5);border-radius:12px}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-info .item-description{margin:0;font-size:.875rem;color:var(--kendo-color-subtle, #757575);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content .item-actions{flex-shrink:0;display:flex;gap:.25rem;opacity:.5;transition:opacity .2s}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-content:hover .item-actions{opacity:1}.meshboard-manager-dialog .meshboards-list .meshboard-item.active .item-content .item-icon{background-color:var(--kendo-color-primary, #3f51b5);color:var(--kendo-color-on-primary, #ffffff)}.meshboard-manager-dialog .meshboards-list .meshboard-item:not(.active) .item-content:after{content:\"Click to switch\";font-size:.75rem;color:var(--kendo-color-subtle, #9e9e9e);opacity:0;transition:opacity .2s;white-space:nowrap}.meshboard-manager-dialog .meshboards-list .meshboard-item:not(.active):hover .item-content:after{opacity:1}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit{padding:1rem}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-fields{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.75rem}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-fields kendo-textbox,.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-fields kendo-textarea{width:100%}.meshboard-manager-dialog .meshboards-list .meshboard-item .item-edit .edit-actions{display:flex;justify-content:flex-end;gap:.5rem}.meshboard-manager-dialog .dialog-actions{display:flex;justify-content:flex-end;gap:.5rem;padding-top:.75rem;border-top:1px solid var(--kendo-color-border, #e0e0e0);flex-shrink:0;margin-bottom:.5rem}.meshboards-list::-webkit-scrollbar{width:8px}.meshboards-list::-webkit-scrollbar-track{background:var(--kendo-color-surface-alt, #f5f5f5)}.meshboards-list::-webkit-scrollbar-thumb{background:var(--kendo-color-border, #e0e0e0);border-radius:4px}.meshboards-list::-webkit-scrollbar-thumb:hover{background:var(--kendo-color-subtle, #9e9e9e)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: DialogModule }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }] });
|
|
25739
25739
|
}
|
|
25740
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
25740
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardManagerDialogComponent, decorators: [{
|
|
25741
25741
|
type: Component,
|
|
25742
25742
|
args: [{ selector: 'mm-meshboard-manager-dialog', standalone: true, imports: [
|
|
25743
25743
|
CommonModule,
|
|
@@ -25793,8 +25793,8 @@ class EditWidgetDialogComponent {
|
|
|
25793
25793
|
onCancel() {
|
|
25794
25794
|
this.cancelled.emit();
|
|
25795
25795
|
}
|
|
25796
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
25797
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
25796
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EditWidgetDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25797
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: EditWidgetDialogComponent, isStandalone: true, selector: "mm-edit-widget-dialog", inputs: { widget: "widget", widgets: "widgets", maxColumns: "maxColumns", gridService: "gridService" }, outputs: { save: "save", cancelled: "cancelled" }, ngImport: i0, template: `
|
|
25798
25798
|
<kendo-dialog
|
|
25799
25799
|
title="Edit Widget"
|
|
25800
25800
|
[minWidth]="350"
|
|
@@ -25877,7 +25877,7 @@ class EditWidgetDialogComponent {
|
|
|
25877
25877
|
</kendo-dialog>
|
|
25878
25878
|
`, isInline: true, styles: [".edit-widget-form{display:flex;flex-direction:column;gap:16px;padding:8px 0}.form-field{display:flex;flex-direction:column;gap:4px}.form-field label{font-weight:500;font-size:.875rem;color:var(--kendo-color-on-app-surface, #212529)}.form-row{display:flex;gap:16px}.form-row .form-field{flex:1}.form-error{color:var(--kendo-color-error, #dc3545);font-size:.875rem;padding:8px;background:var(--kendo-color-error-subtle, rgba(220, 53, 69, .1));border-radius:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1$4.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i1$4.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i3.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: ButtonsModule }, { kind: "component", type: i2.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"] }] });
|
|
25879
25879
|
}
|
|
25880
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
25880
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: EditWidgetDialogComponent, decorators: [{
|
|
25881
25881
|
type: Component,
|
|
25882
25882
|
args: [{ selector: 'mm-edit-widget-dialog', standalone: true, imports: [
|
|
25883
25883
|
CommonModule,
|
|
@@ -26030,15 +26030,15 @@ class MeshBoardViewComponent {
|
|
|
26030
26030
|
isLoading = this.stateService.isLoading;
|
|
26031
26031
|
isModelAvailable = this.stateService.isModelAvailable;
|
|
26032
26032
|
// Local UI state
|
|
26033
|
-
_isInitialized = signal(false, ...(ngDevMode ? [{ debugName: "_isInitialized" }] : []));
|
|
26033
|
+
_isInitialized = signal(false, ...(ngDevMode ? [{ debugName: "_isInitialized" }] : /* istanbul ignore next */ []));
|
|
26034
26034
|
isInitialized = this._isInitialized.asReadonly();
|
|
26035
|
-
_notFoundError = signal(null, ...(ngDevMode ? [{ debugName: "_notFoundError" }] : []));
|
|
26035
|
+
_notFoundError = signal(null, ...(ngDevMode ? [{ debugName: "_notFoundError" }] : /* istanbul ignore next */ []));
|
|
26036
26036
|
notFoundError = this._notFoundError.asReadonly();
|
|
26037
|
-
_isReadonly = signal(false, ...(ngDevMode ? [{ debugName: "_isReadonly" }] : []));
|
|
26037
|
+
_isReadonly = signal(false, ...(ngDevMode ? [{ debugName: "_isReadonly" }] : /* istanbul ignore next */ []));
|
|
26038
26038
|
isReadonly = this._isReadonly.asReadonly();
|
|
26039
|
-
_hideEntitySelectors = signal(false, ...(ngDevMode ? [{ debugName: "_hideEntitySelectors" }] : []));
|
|
26039
|
+
_hideEntitySelectors = signal(false, ...(ngDevMode ? [{ debugName: "_hideEntitySelectors" }] : /* istanbul ignore next */ []));
|
|
26040
26040
|
hideEntitySelectors = this._hideEntitySelectors.asReadonly();
|
|
26041
|
-
timeRangeLabels = signal({}, ...(ngDevMode ? [{ debugName: "timeRangeLabels" }] : []));
|
|
26041
|
+
timeRangeLabels = signal({}, ...(ngDevMode ? [{ debugName: "timeRangeLabels" }] : /* istanbul ignore next */ []));
|
|
26042
26042
|
// Computed link to MeshBoard page with tenant
|
|
26043
26043
|
meshBoardPageLink = computed(() => {
|
|
26044
26044
|
// Get tenant from route parameters (synchronously from snapshot)
|
|
@@ -26046,14 +26046,14 @@ class MeshBoardViewComponent {
|
|
|
26046
26046
|
|| this.route.parent?.snapshot.paramMap.get('tenantId')
|
|
26047
26047
|
|| this.route.root.firstChild?.snapshot.paramMap.get('tenantId');
|
|
26048
26048
|
return tenantId ? `/${tenantId}/ui/meshboards` : '/ui/meshboards';
|
|
26049
|
-
}, ...(ngDevMode ? [{ debugName: "meshBoardPageLink" }] : []));
|
|
26049
|
+
}, ...(ngDevMode ? [{ debugName: "meshBoardPageLink" }] : /* istanbul ignore next */ []));
|
|
26050
26050
|
// Computed
|
|
26051
|
-
hasWidgets = computed(() => this.config().widgets.length > 0, ...(ngDevMode ? [{ debugName: "hasWidgets" }] : []));
|
|
26052
|
-
canSave = computed(() => this.isEditMode() && !this.isSaving(), ...(ngDevMode ? [{ debugName: "canSave" }] : []));
|
|
26051
|
+
hasWidgets = computed(() => this.config().widgets.length > 0, ...(ngDevMode ? [{ debugName: "hasWidgets" }] : /* istanbul ignore next */ []));
|
|
26052
|
+
canSave = computed(() => this.isEditMode() && !this.isSaving(), ...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
|
|
26053
26053
|
// Time Filter computed signals
|
|
26054
|
-
isTimeFilterEnabled = computed(() => this.stateService.isTimeFilterEnabled(), ...(ngDevMode ? [{ debugName: "isTimeFilterEnabled" }] : []));
|
|
26055
|
-
timeFilterConfig = computed(() => this.stateService.getTimeFilterConfig(), ...(ngDevMode ? [{ debugName: "timeFilterConfig" }] : []));
|
|
26056
|
-
_urlTimeSelection = signal(null, ...(ngDevMode ? [{ debugName: "_urlTimeSelection" }] : []));
|
|
26054
|
+
isTimeFilterEnabled = computed(() => this.stateService.isTimeFilterEnabled(), ...(ngDevMode ? [{ debugName: "isTimeFilterEnabled" }] : /* istanbul ignore next */ []));
|
|
26055
|
+
timeFilterConfig = computed(() => this.stateService.getTimeFilterConfig(), ...(ngDevMode ? [{ debugName: "timeFilterConfig" }] : /* istanbul ignore next */ []));
|
|
26056
|
+
_urlTimeSelection = signal(null, ...(ngDevMode ? [{ debugName: "_urlTimeSelection" }] : /* istanbul ignore next */ []));
|
|
26057
26057
|
initialTimeSelection = computed(() => {
|
|
26058
26058
|
// Priority: URL selection > stored selection > default selection
|
|
26059
26059
|
const urlSelection = this._urlTimeSelection();
|
|
@@ -26066,16 +26066,16 @@ class MeshBoardViewComponent {
|
|
|
26066
26066
|
customFrom: selection.customFrom ? new Date(selection.customFrom) : undefined,
|
|
26067
26067
|
customTo: selection.customTo ? new Date(selection.customTo) : undefined
|
|
26068
26068
|
};
|
|
26069
|
-
}, ...(ngDevMode ? [{ debugName: "initialTimeSelection" }] : []));
|
|
26069
|
+
}, ...(ngDevMode ? [{ debugName: "initialTimeSelection" }] : /* istanbul ignore next */ []));
|
|
26070
26070
|
// Entity Selector computed signals
|
|
26071
|
-
entitySelectorsConfig = computed(() => this.stateService.getEntitySelectors(), ...(ngDevMode ? [{ debugName: "entitySelectorsConfig" }] : []));
|
|
26072
|
-
hasEntitySelectors = computed(() => !this.hideEntitySelectors() && (this.entitySelectorsConfig()?.some(es => es.showInToolbar !== false) ?? false), ...(ngDevMode ? [{ debugName: "hasEntitySelectors" }] : []));
|
|
26071
|
+
entitySelectorsConfig = computed(() => this.stateService.getEntitySelectors(), ...(ngDevMode ? [{ debugName: "entitySelectorsConfig" }] : /* istanbul ignore next */ []));
|
|
26072
|
+
hasEntitySelectors = computed(() => !this.hideEntitySelectors() && (this.entitySelectorsConfig()?.some(es => es.showInToolbar !== false) ?? false), ...(ngDevMode ? [{ debugName: "hasEntitySelectors" }] : /* istanbul ignore next */ []));
|
|
26073
26073
|
unselectedToolbarSelectors = computed(() => {
|
|
26074
26074
|
if (this.hideEntitySelectors())
|
|
26075
26075
|
return [];
|
|
26076
26076
|
const selectors = this.entitySelectorsConfig() ?? [];
|
|
26077
26077
|
return selectors.filter(es => es.showInToolbar !== false && !es.selectedRtId);
|
|
26078
|
-
}, ...(ngDevMode ? [{ debugName: "unselectedToolbarSelectors" }] : []));
|
|
26078
|
+
}, ...(ngDevMode ? [{ debugName: "unselectedToolbarSelectors" }] : /* istanbul ignore next */ []));
|
|
26079
26079
|
/**
|
|
26080
26080
|
* Whether the time filter can be reset to the default selection.
|
|
26081
26081
|
* True when a default selection is configured and the stored selection differs from it.
|
|
@@ -26087,7 +26087,7 @@ class MeshBoardViewComponent {
|
|
|
26087
26087
|
if (!config.selection)
|
|
26088
26088
|
return false;
|
|
26089
26089
|
return !this.isSelectionEqual(config.selection, config.defaultSelection);
|
|
26090
|
-
}, ...(ngDevMode ? [{ debugName: "canResetTimeFilter" }] : []));
|
|
26090
|
+
}, ...(ngDevMode ? [{ debugName: "canResetTimeFilter" }] : /* istanbul ignore next */ []));
|
|
26091
26091
|
constructor() {
|
|
26092
26092
|
// Effect to sync URL when dashboard changes (after initial load)
|
|
26093
26093
|
effect(() => {
|
|
@@ -26994,10 +26994,10 @@ class MeshBoardViewComponent {
|
|
|
26994
26994
|
return false;
|
|
26995
26995
|
}
|
|
26996
26996
|
}
|
|
26997
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
26998
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: MeshBoardViewComponent, isStandalone: true, selector: "mm-meshboard-view", providers: [{ provide: HAS_UNSAVED_CHANGES, useExisting: MeshBoardViewComponent }], hostDirectives: [{ directive: i1$7.UnsavedChangesDirective }], ngImport: i0, template: "<div class=\"meshboard-view\">\n @if (isLoading()) {\n <div class=\"loading-container\">\n <div class=\"k-loading-mask\">\n <span class=\"k-loading-text\">Loading MeshBoard...</span>\n <div class=\"k-loading-image\"></div>\n <div class=\"k-loading-color\"></div>\n </div>\n </div>\n } @else if (isModelAvailable() === false) {\n <div class=\"model-unavailable\">\n <div class=\"message-card\">\n <kendo-svg-icon [icon]=\"xIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h2>MeshBoard Not Available</h2>\n <p>The MeshBoard feature requires the CK model 'System.UI' version 1.0.1 or higher.</p>\n <p>Please install the required model in your tenant to use this feature.</p>\n </div>\n </div>\n } @else if (notFoundError()) {\n <div class=\"model-unavailable\">\n <div class=\"message-card\">\n <kendo-svg-icon [icon]=\"xIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h2>MeshBoard Not Found</h2>\n <p>{{ notFoundError() }}</p>\n <p>To create a MeshBoard with a Well-Known Name:</p>\n <ol>\n <li>Go to the <a [routerLink]=\"meshBoardPageLink()\">MeshBoard</a> page</li>\n <li>Open Settings</li>\n <li>Set the \"Well-Known Name\" field</li>\n <li>Save the MeshBoard</li>\n </ol>\n </div>\n </div>\n } @else if (isInitialized()) {\n <!-- Toolbar -->\n <div class=\"meshboard-toolbar\">\n <div class=\"toolbar-left\">\n <h2 class=\"meshboard-title\">{{ config().name }}</h2>\n @if (config().description) {\n <span class=\"meshboard-description\">{{ config().description }}</span>\n }\n </div>\n\n <!-- Time Filter (center) -->\n @if (isTimeFilterEnabled()) {\n <div class=\"toolbar-center\">\n <mm-time-range-picker\n [config]=\"timeFilterConfig()?.pickerConfig ?? {}\"\n [labels]=\"timeRangeLabels()\"\n [initialSelection]=\"initialTimeSelection()\"\n (rangeChange)=\"onTimeRangeChange($event)\"\n (selectionChange)=\"onTimeSelectionChange($event)\">\n </mm-time-range-picker>\n @if (canResetTimeFilter()) {\n <button\n kendoButton\n [svgIcon]=\"undoIcon\"\n (click)=\"resetTimeFilterToDefault()\"\n title=\"Reset to default time filter\"\n fillMode=\"flat\"\n size=\"small\">\n </button>\n }\n </div>\n }\n\n <!-- Entity Selectors -->\n @if (hasEntitySelectors()) {\n @if (isTimeFilterEnabled()) {\n <div class=\"toolbar-separator\"></div>\n }\n <div class=\"toolbar-entity-selectors\">\n <mm-entity-selector-toolbar\n [entitySelectors]=\"entitySelectorsConfig()\"\n (entitySelected)=\"onEntitySelectorSelected($event)\"\n (entityCleared)=\"onEntitySelectorCleared($event)\">\n </mm-entity-selector-toolbar>\n </div>\n }\n\n @if (isTimeFilterEnabled() || hasEntitySelectors()) {\n <div class=\"toolbar-separator\"></div>\n }\n <div class=\"toolbar-right mm-toolbar-actions\">\n @if (!isReadonly()) {\n <!-- Manager Button (icon only) -->\n <button\n kendoButton\n [svgIcon]=\"gridLayoutIcon\"\n (click)=\"openManager()\"\n title=\"Manage MeshBoards\"\n fillMode=\"flat\">\n </button>\n\n <!-- Settings Button (icon only) -->\n <button\n kendoButton\n [svgIcon]=\"gearIcon\"\n (click)=\"openSettings()\"\n title=\"MeshBoard Settings\"\n fillMode=\"flat\">\n </button>\n }\n\n <!-- Refresh Button (icon only) -->\n <button\n kendoButton\n [svgIcon]=\"arrowRotateCwIcon\"\n (click)=\"refresh()\"\n title=\"Refresh All Widgets\"\n fillMode=\"flat\">\n </button>\n\n @if (!isReadonly()) {\n <!-- Edit Mode Toggle (icon only) -->\n @if (!isEditMode()) {\n <button\n kendoButton\n [svgIcon]=\"pencilIcon\"\n (click)=\"toggleEditMode()\"\n title=\"Enter Edit Mode\"\n fillMode=\"flat\">\n </button>\n } @else {\n <button\n kendoButton\n [svgIcon]=\"xIcon\"\n (click)=\"cancelEdit()\"\n title=\"Cancel Edit Mode\"\n fillMode=\"flat\">\n </button>\n }\n\n <!-- Add Widget Button (with text) -->\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"openAddWidget()\"\n title=\"Add Widget\"\n themeColor=\"primary\">\n Add Widget\n </button>\n\n <!-- Save Button (with text) -->\n @if (canSave()) {\n <button\n kendoButton\n [svgIcon]=\"saveIcon\"\n (click)=\"save()\"\n [disabled]=\"isSaving()\"\n title=\"Save MeshBoard\"\n themeColor=\"primary\">\n {{ isSaving() ? 'Saving...' : 'Save' }}\n </button>\n }\n }\n </div>\n </div>\n\n <!-- Entity Selector Hint -->\n @if (unselectedToolbarSelectors().length > 0) {\n <div class=\"entity-selector-hint\">\n <kendo-svg-icon [icon]=\"infoCircleIcon\" size=\"medium\"></kendo-svg-icon>\n <span>\n Please select\n @for (selector of unselectedToolbarSelectors(); track selector.id; let last = $last) {\n <strong>{{ selector.label }}</strong>@if (!last) {, }\n }\n to display dashboard data.\n </span>\n </div>\n }\n\n <!-- Variable Resolution Errors -->\n @if (variableResolutionErrors().length > 0) {\n <div class=\"variable-resolution-errors\">\n <strong>Variable resolution errors:</strong>\n @for (error of variableResolutionErrors(); track error.variableName) {\n <span class=\"error-item\">{{ error.variableName }}: {{ error.message }}</span>\n }\n </div>\n }\n\n <!-- MeshBoard Grid -->\n @if (hasWidgets()) {\n <kendo-tilelayout\n [columns]=\"config().columns\"\n [rowHeight]=\"config().rowHeight\"\n [gap]=\"config().gap\"\n [resizable]=\"isEditMode()\"\n [reorderable]=\"isEditMode()\"\n (reorder)=\"onReorder($event)\"\n (resize)=\"onResize($event)\">\n @for (widget of config().widgets; track trackByWidgetId($index, widget)) {\n <kendo-tilelayout-item\n [col]=\"widget.col\"\n [row]=\"widget.row\"\n [colSpan]=\"widget.colSpan\"\n [rowSpan]=\"widget.rowSpan\">\n <kendo-tilelayout-item-header>\n <div class=\"widget-header\" [class.unconfigured]=\"isWidgetUnconfigured(widget)\">\n <span class=\"widget-title\">{{ widget.title }}</span>\n @if (isWidgetUnconfigured(widget) && !isEditMode()) {\n <span class=\"unconfigured-badge\" title=\"Widget needs configuration\">!</span>\n }\n @if (isEditMode()) {\n <div class=\"widget-actions\" (pointerdown)=\"$event.stopPropagation()\">\n @if (supportsConfiguration(widget)) {\n <button\n kendoButton\n [svgIcon]=\"linkIcon\"\n (click)=\"openWidgetConfig(widget)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"config-widget-btn\"\n [class.needs-config]=\"isWidgetUnconfigured(widget)\"\n [title]=\"isWidgetUnconfigured(widget) ? 'Configure data source (required)' : 'Configure data source'\">\n </button>\n }\n <button\n kendoButton\n [svgIcon]=\"gearIcon\"\n (click)=\"openEditWidgetDialog(widget)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"edit-widget-btn\"\n title=\"Edit position\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"copyIcon\"\n (click)=\"duplicateWidget(widget)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"duplicate-widget-btn\"\n title=\"Duplicate widget\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n (click)=\"removeWidget(widget.id)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"remove-widget-btn\"\n title=\"Delete widget\">\n </button>\n </div>\n }\n </div>\n </kendo-tilelayout-item-header>\n <kendo-tilelayout-item-body>\n @if (getWidgetComponentType(widget.type); as componentType) {\n <ng-container *ngComponentOutlet=\"componentType; inputs: { config: widget }\"></ng-container>\n } @else {\n <div class=\"widget-error\">\n <p>Unknown widget type: {{ widget.type }}</p>\n </div>\n }\n </kendo-tilelayout-item-body>\n </kendo-tilelayout-item>\n }\n </kendo-tilelayout>\n } @else {\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <kendo-svg-icon [icon]=\"plusIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h3>No Widgets</h3>\n <p>Get started by adding widgets to your MeshBoard.</p>\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"openAddWidget()\"\n themeColor=\"primary\">\n Add Your First Widget\n </button>\n </div>\n </div>\n }\n\n <!-- Edit Widget Dialog -->\n @if (showEditWidgetDialog && editingWidget) {\n <mm-edit-widget-dialog\n [widget]=\"editingWidget\"\n [widgets]=\"config().widgets\"\n [maxColumns]=\"config().columns\"\n [gridService]=\"gridService\"\n (save)=\"onEditWidgetSave($event)\"\n (cancelled)=\"closeEditWidgetDialog()\">\n </mm-edit-widget-dialog>\n }\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0;height:100%;width:100%}.meshboard-view{display:flex;flex-direction:column;flex:1;min-height:0;width:100%;background-color:var(--kendo-color-surface, #f5f5f5)}.loading-container{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.entity-selector-hint{display:flex;align-items:center;gap:8px;padding:10px 16px;margin-bottom:8px;background:color-mix(in srgb,var(--kendo-color-info, #2196f3) 10%,var(--kendo-color-surface-alt, #fafafa));border:1px solid color-mix(in srgb,var(--kendo-color-info, #2196f3) 40%,transparent);border-radius:4px;font-size:13px;color:var(--kendo-color-on-app-surface, #424242)}.entity-selector-hint strong{color:var(--kendo-color-info, #2196f3)}.variable-resolution-errors{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;margin-bottom:8px;background:color-mix(in srgb,var(--kendo-color-error, #f44336) 10%,var(--kendo-color-surface-alt, #fafafa));border:1px solid var(--kendo-color-error, #f44336);border-radius:4px;font-size:13px;color:var(--kendo-color-on-app-surface, #424242)}.variable-resolution-errors strong{color:var(--kendo-color-error, #f44336)}.variable-resolution-errors .error-item{padding:2px 8px;background:color-mix(in srgb,var(--kendo-color-error, #f44336) 8%,transparent);border-radius:3px;font-family:Consolas,Monaco,monospace;font-size:12px}.model-unavailable{display:flex;align-items:center;justify-content:center;height:100%;width:100%;padding:2rem;overflow:hidden;box-sizing:border-box}.model-unavailable .message-card{text-align:center;max-width:500px;padding:2rem;background:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:8px;overflow:hidden}.model-unavailable .message-card kendo-svg-icon{color:var(--kendo-color-warning, #ff9800);margin-bottom:1rem}.model-unavailable .message-card h2{margin:1rem 0;color:var(--kendo-color-on-app-surface, #424242)}.model-unavailable .message-card p{margin:.5rem 0;color:var(--kendo-color-subtle, #757575);line-height:1.5}.model-unavailable .message-card ol{text-align:left;margin:1rem 0;padding-left:1.5rem;color:var(--kendo-color-subtle, #757575);line-height:1.8}.model-unavailable .message-card ol li{margin:.25rem 0}.model-unavailable .message-card ol a{color:var(--kendo-color-primary, #3f51b5);text-decoration:none}.model-unavailable .message-card ol a:hover{text-decoration:underline}.meshboard-toolbar{display:flex;justify-content:space-between;align-items:flex-end;padding:1rem 1.5rem;background-color:var(--kendo-color-surface-alt, white);border-bottom:1px solid var(--kendo-color-border, #e0e0e0);gap:1rem;flex-shrink:0}.meshboard-toolbar .toolbar-left{display:flex;align-items:baseline;gap:1rem;flex:1;min-width:0;align-self:center}.meshboard-toolbar .toolbar-left .meshboard-title{margin:0;font-size:1.5rem;font-weight:500;color:var(--kendo-color-on-app-surface, #212121);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meshboard-toolbar .toolbar-left .meshboard-description{color:var(--kendo-color-subtle, #757575);font-size:.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meshboard-toolbar .toolbar-center{display:flex;justify-content:center;align-items:flex-end;flex-shrink:0}.meshboard-toolbar .toolbar-center mm-time-range-picker ::ng-deep .time-range-picker{gap:.5rem}.meshboard-toolbar .toolbar-separator{width:1px;align-self:stretch;background-color:var(--kendo-color-border, #e0e0e0);flex-shrink:0}.meshboard-toolbar .toolbar-entity-selectors{display:flex;align-items:flex-end;flex-shrink:0}.meshboard-toolbar .toolbar-right{display:flex;gap:.5rem;align-items:center;flex-shrink:0}.empty-state{display:flex;align-items:flex-start;justify-content:center;height:calc(100% - 80px);width:100%;padding-top:4rem}.empty-state .empty-state-content{text-align:center;padding:2rem}.empty-state .empty-state-content kendo-svg-icon{color:var(--kendo-color-subtle, #9e9e9e);margin-bottom:1rem}.empty-state .empty-state-content h3{margin:1rem 0 .5rem;color:var(--kendo-color-on-app-surface, #424242);font-size:1.25rem;font-weight:500}.empty-state .empty-state-content p{margin:0 0 1.5rem;color:var(--kendo-color-subtle, #757575)}kendo-tilelayout{padding:1.5rem;overflow:auto;flex:1;min-height:0}.widget-header{display:flex;justify-content:space-between;align-items:center;width:100%;gap:.5rem}.widget-header.unconfigured{background-color:#ff98001a}.widget-header .widget-title{flex:1;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.widget-header .unconfigured-badge{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background-color:var(--kendo-color-warning, #ff9800);color:#fff;font-size:12px;font-weight:700;flex-shrink:0}.widget-header .widget-actions{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.widget-header .config-widget-btn,.widget-header .edit-widget-btn,.widget-header .remove-widget-btn{opacity:.6;transition:opacity .2s}.widget-header .config-widget-btn:hover,.widget-header .edit-widget-btn:hover,.widget-header .remove-widget-btn:hover{opacity:1}.widget-header .config-widget-btn.needs-config{color:var(--kendo-color-warning, #ff9800);opacity:1}.widget-header .remove-widget-btn{color:var(--kendo-color-error, #f44336)}.widget-error{display:flex;align-items:center;justify-content:center;height:100%;padding:1rem;color:var(--kendo-color-error, #f44336);text-align:center}.meshboard-view.edit-mode kendo-tilelayout-item:hover{box-shadow:0 0 0 2px var(--kendo-color-primary, #3f51b5)}@media(max-width:768px){.meshboard-toolbar{flex-direction:column;align-items:stretch;gap:.75rem}.meshboard-toolbar .toolbar-left{flex-direction:column;align-items:flex-start;gap:.25rem}.meshboard-toolbar .toolbar-right{flex-wrap:wrap;justify-content:flex-end}kendo-tilelayout{padding:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: TileLayoutModule }, { kind: "component", type: i5.TileLayoutComponent, selector: "kendo-tilelayout", inputs: ["columns", "columnWidth", "gap", "reorderable", "resizable", "rowHeight", "autoFlow", "navigable"], outputs: ["reorder", "resize"] }, { kind: "component", type: i5.TileLayoutItemBodyComponent, selector: "kendo-tilelayout-item-body" }, { kind: "component", type: i5.TileLayoutItemComponent, selector: "kendo-tilelayout-item", inputs: ["title", "rowSpan", "colSpan", "order", "col", "row", "reorderable", "resizable"] }, { kind: "component", type: i5.TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header" }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: DialogModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: EditWidgetDialogComponent, selector: "mm-edit-widget-dialog", inputs: ["widget", "widgets", "maxColumns", "gridService"], outputs: ["save", "cancelled"] }, { kind: "component", type: TimeRangePickerComponent, selector: "mm-time-range-picker", inputs: ["config", "labels", "initialSelection"], outputs: ["rangeChange", "rangeChangeISO", "selectionChange"] }, { kind: "component", type: EntitySelectorToolbarComponent, selector: "mm-entity-selector-toolbar", inputs: ["entitySelectors"], outputs: ["entitySelected", "entityCleared"] }] });
|
|
26997
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
26998
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: MeshBoardViewComponent, isStandalone: true, selector: "mm-meshboard-view", providers: [{ provide: HAS_UNSAVED_CHANGES, useExisting: MeshBoardViewComponent }], hostDirectives: [{ directive: i1$7.UnsavedChangesDirective }], ngImport: i0, template: "<div class=\"meshboard-view\">\n @if (isLoading()) {\n <div class=\"loading-container\">\n <div class=\"k-loading-mask\">\n <span class=\"k-loading-text\">Loading MeshBoard...</span>\n <div class=\"k-loading-image\"></div>\n <div class=\"k-loading-color\"></div>\n </div>\n </div>\n } @else if (isModelAvailable() === false) {\n <div class=\"model-unavailable\">\n <div class=\"message-card\">\n <kendo-svg-icon [icon]=\"xIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h2>MeshBoard Not Available</h2>\n <p>The MeshBoard feature requires the CK model 'System.UI' version 1.0.1 or higher.</p>\n <p>Please install the required model in your tenant to use this feature.</p>\n </div>\n </div>\n } @else if (notFoundError()) {\n <div class=\"model-unavailable\">\n <div class=\"message-card\">\n <kendo-svg-icon [icon]=\"xIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h2>MeshBoard Not Found</h2>\n <p>{{ notFoundError() }}</p>\n <p>To create a MeshBoard with a Well-Known Name:</p>\n <ol>\n <li>Go to the <a [routerLink]=\"meshBoardPageLink()\">MeshBoard</a> page</li>\n <li>Open Settings</li>\n <li>Set the \"Well-Known Name\" field</li>\n <li>Save the MeshBoard</li>\n </ol>\n </div>\n </div>\n } @else if (isInitialized()) {\n <!-- Toolbar -->\n <div class=\"meshboard-toolbar\">\n <div class=\"toolbar-left\">\n <h2 class=\"meshboard-title\">{{ config().name }}</h2>\n @if (config().description) {\n <span class=\"meshboard-description\">{{ config().description }}</span>\n }\n </div>\n\n <!-- Time Filter (center) -->\n @if (isTimeFilterEnabled()) {\n <div class=\"toolbar-center\">\n <mm-time-range-picker\n [config]=\"timeFilterConfig()?.pickerConfig ?? {}\"\n [labels]=\"timeRangeLabels()\"\n [initialSelection]=\"initialTimeSelection()\"\n (rangeChange)=\"onTimeRangeChange($event)\"\n (selectionChange)=\"onTimeSelectionChange($event)\">\n </mm-time-range-picker>\n @if (canResetTimeFilter()) {\n <button\n kendoButton\n [svgIcon]=\"undoIcon\"\n (click)=\"resetTimeFilterToDefault()\"\n title=\"Reset to default time filter\"\n fillMode=\"flat\"\n size=\"small\">\n </button>\n }\n </div>\n }\n\n <!-- Entity Selectors -->\n @if (hasEntitySelectors()) {\n @if (isTimeFilterEnabled()) {\n <div class=\"toolbar-separator\"></div>\n }\n <div class=\"toolbar-entity-selectors\">\n <mm-entity-selector-toolbar\n [entitySelectors]=\"entitySelectorsConfig()\"\n (entitySelected)=\"onEntitySelectorSelected($event)\"\n (entityCleared)=\"onEntitySelectorCleared($event)\">\n </mm-entity-selector-toolbar>\n </div>\n }\n\n @if (isTimeFilterEnabled() || hasEntitySelectors()) {\n <div class=\"toolbar-separator\"></div>\n }\n <div class=\"toolbar-right mm-toolbar-actions\">\n @if (!isReadonly()) {\n <!-- Manager Button (icon only) -->\n <button\n kendoButton\n [svgIcon]=\"gridLayoutIcon\"\n (click)=\"openManager()\"\n title=\"Manage MeshBoards\"\n fillMode=\"flat\">\n </button>\n\n <!-- Settings Button (icon only) -->\n <button\n kendoButton\n [svgIcon]=\"gearIcon\"\n (click)=\"openSettings()\"\n title=\"MeshBoard Settings\"\n fillMode=\"flat\">\n </button>\n }\n\n <!-- Refresh Button (icon only) -->\n <button\n kendoButton\n [svgIcon]=\"arrowRotateCwIcon\"\n (click)=\"refresh()\"\n title=\"Refresh All Widgets\"\n fillMode=\"flat\">\n </button>\n\n @if (!isReadonly()) {\n <!-- Edit Mode Toggle (icon only) -->\n @if (!isEditMode()) {\n <button\n kendoButton\n [svgIcon]=\"pencilIcon\"\n (click)=\"toggleEditMode()\"\n title=\"Enter Edit Mode\"\n fillMode=\"flat\">\n </button>\n } @else {\n <button\n kendoButton\n [svgIcon]=\"xIcon\"\n (click)=\"cancelEdit()\"\n title=\"Cancel Edit Mode\"\n fillMode=\"flat\">\n </button>\n }\n\n <!-- Add Widget Button (with text) -->\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"openAddWidget()\"\n title=\"Add Widget\"\n themeColor=\"primary\">\n Add Widget\n </button>\n\n <!-- Save Button (with text) -->\n @if (canSave()) {\n <button\n kendoButton\n [svgIcon]=\"saveIcon\"\n (click)=\"save()\"\n [disabled]=\"isSaving()\"\n title=\"Save MeshBoard\"\n themeColor=\"primary\">\n {{ isSaving() ? 'Saving...' : 'Save' }}\n </button>\n }\n }\n </div>\n </div>\n\n <!-- Entity Selector Hint -->\n @if (unselectedToolbarSelectors().length > 0) {\n <div class=\"entity-selector-hint\">\n <kendo-svg-icon [icon]=\"infoCircleIcon\" size=\"medium\"></kendo-svg-icon>\n <span>\n Please select\n @for (selector of unselectedToolbarSelectors(); track selector.id; let last = $last) {\n <strong>{{ selector.label }}</strong>@if (!last) {, }\n }\n to display dashboard data.\n </span>\n </div>\n }\n\n <!-- Variable Resolution Errors -->\n @if (variableResolutionErrors().length > 0) {\n <div class=\"variable-resolution-errors\">\n <strong>Variable resolution errors:</strong>\n @for (error of variableResolutionErrors(); track error.variableName) {\n <span class=\"error-item\">{{ error.variableName }}: {{ error.message }}</span>\n }\n </div>\n }\n\n <!-- MeshBoard Grid -->\n @if (hasWidgets()) {\n <kendo-tilelayout\n [columns]=\"config().columns\"\n [rowHeight]=\"config().rowHeight\"\n [gap]=\"config().gap\"\n [resizable]=\"isEditMode()\"\n [reorderable]=\"isEditMode()\"\n (reorder)=\"onReorder($event)\"\n (resize)=\"onResize($event)\">\n @for (widget of config().widgets; track trackByWidgetId($index, widget)) {\n <kendo-tilelayout-item\n [col]=\"widget.col\"\n [row]=\"widget.row\"\n [colSpan]=\"widget.colSpan\"\n [rowSpan]=\"widget.rowSpan\">\n <kendo-tilelayout-item-header>\n <div class=\"widget-header\" [class.unconfigured]=\"isWidgetUnconfigured(widget)\">\n <span class=\"widget-title\">{{ widget.title }}</span>\n @if (isWidgetUnconfigured(widget) && !isEditMode()) {\n <span class=\"unconfigured-badge\" title=\"Widget needs configuration\">!</span>\n }\n @if (isEditMode()) {\n <div class=\"widget-actions\" (pointerdown)=\"$event.stopPropagation()\">\n @if (supportsConfiguration(widget)) {\n <button\n kendoButton\n [svgIcon]=\"linkIcon\"\n (click)=\"openWidgetConfig(widget)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"config-widget-btn\"\n [class.needs-config]=\"isWidgetUnconfigured(widget)\"\n [title]=\"isWidgetUnconfigured(widget) ? 'Configure data source (required)' : 'Configure data source'\">\n </button>\n }\n <button\n kendoButton\n [svgIcon]=\"gearIcon\"\n (click)=\"openEditWidgetDialog(widget)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"edit-widget-btn\"\n title=\"Edit position\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"copyIcon\"\n (click)=\"duplicateWidget(widget)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"duplicate-widget-btn\"\n title=\"Duplicate widget\">\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n (click)=\"removeWidget(widget.id)\"\n fillMode=\"flat\"\n size=\"small\"\n class=\"remove-widget-btn\"\n title=\"Delete widget\">\n </button>\n </div>\n }\n </div>\n </kendo-tilelayout-item-header>\n <kendo-tilelayout-item-body>\n @if (getWidgetComponentType(widget.type); as componentType) {\n <ng-container *ngComponentOutlet=\"componentType; inputs: { config: widget }\"></ng-container>\n } @else {\n <div class=\"widget-error\">\n <p>Unknown widget type: {{ widget.type }}</p>\n </div>\n }\n </kendo-tilelayout-item-body>\n </kendo-tilelayout-item>\n }\n </kendo-tilelayout>\n } @else {\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <kendo-svg-icon [icon]=\"plusIcon\" size=\"xlarge\"></kendo-svg-icon>\n <h3>No Widgets</h3>\n <p>Get started by adding widgets to your MeshBoard.</p>\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n (click)=\"openAddWidget()\"\n themeColor=\"primary\">\n Add Your First Widget\n </button>\n </div>\n </div>\n }\n\n <!-- Edit Widget Dialog -->\n @if (showEditWidgetDialog && editingWidget) {\n <mm-edit-widget-dialog\n [widget]=\"editingWidget\"\n [widgets]=\"config().widgets\"\n [maxColumns]=\"config().columns\"\n [gridService]=\"gridService\"\n (save)=\"onEditWidgetSave($event)\"\n (cancelled)=\"closeEditWidgetDialog()\">\n </mm-edit-widget-dialog>\n }\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0;height:100%;width:100%}.meshboard-view{display:flex;flex-direction:column;flex:1;min-height:0;width:100%;background-color:var(--kendo-color-surface, #f5f5f5)}.loading-container{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.entity-selector-hint{display:flex;align-items:center;gap:8px;padding:10px 16px;margin-bottom:8px;background:color-mix(in srgb,var(--kendo-color-info, #2196f3) 10%,var(--kendo-color-surface-alt, #fafafa));border:1px solid color-mix(in srgb,var(--kendo-color-info, #2196f3) 40%,transparent);border-radius:4px;font-size:13px;color:var(--kendo-color-on-app-surface, #424242)}.entity-selector-hint strong{color:var(--kendo-color-info, #2196f3)}.variable-resolution-errors{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;margin-bottom:8px;background:color-mix(in srgb,var(--kendo-color-error, #f44336) 10%,var(--kendo-color-surface-alt, #fafafa));border:1px solid var(--kendo-color-error, #f44336);border-radius:4px;font-size:13px;color:var(--kendo-color-on-app-surface, #424242)}.variable-resolution-errors strong{color:var(--kendo-color-error, #f44336)}.variable-resolution-errors .error-item{padding:2px 8px;background:color-mix(in srgb,var(--kendo-color-error, #f44336) 8%,transparent);border-radius:3px;font-family:Consolas,Monaco,monospace;font-size:12px}.model-unavailable{display:flex;align-items:center;justify-content:center;height:100%;width:100%;padding:2rem;overflow:hidden;box-sizing:border-box}.model-unavailable .message-card{text-align:center;max-width:500px;padding:2rem;background:var(--kendo-color-surface-alt, #fafafa);border:1px solid var(--kendo-color-border, #e0e0e0);border-radius:8px;overflow:hidden}.model-unavailable .message-card kendo-svg-icon{color:var(--kendo-color-warning, #ff9800);margin-bottom:1rem}.model-unavailable .message-card h2{margin:1rem 0;color:var(--kendo-color-on-app-surface, #424242)}.model-unavailable .message-card p{margin:.5rem 0;color:var(--kendo-color-subtle, #757575);line-height:1.5}.model-unavailable .message-card ol{text-align:left;margin:1rem 0;padding-left:1.5rem;color:var(--kendo-color-subtle, #757575);line-height:1.8}.model-unavailable .message-card ol li{margin:.25rem 0}.model-unavailable .message-card ol a{color:var(--kendo-color-primary, #3f51b5);text-decoration:none}.model-unavailable .message-card ol a:hover{text-decoration:underline}.meshboard-toolbar{display:flex;justify-content:space-between;align-items:flex-end;padding:1rem 1.5rem;background-color:var(--kendo-color-surface-alt, white);border-bottom:1px solid var(--kendo-color-border, #e0e0e0);gap:1rem;flex-shrink:0}.meshboard-toolbar .toolbar-left{display:flex;align-items:baseline;gap:1rem;flex:1;min-width:0;align-self:center}.meshboard-toolbar .toolbar-left .meshboard-title{margin:0;font-size:1.5rem;font-weight:500;color:var(--kendo-color-on-app-surface, #212121);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meshboard-toolbar .toolbar-left .meshboard-description{color:var(--kendo-color-subtle, #757575);font-size:.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meshboard-toolbar .toolbar-center{display:flex;justify-content:center;align-items:flex-end;flex-shrink:0}.meshboard-toolbar .toolbar-center mm-time-range-picker ::ng-deep .time-range-picker{gap:.5rem}.meshboard-toolbar .toolbar-separator{width:1px;align-self:stretch;background-color:var(--kendo-color-border, #e0e0e0);flex-shrink:0}.meshboard-toolbar .toolbar-entity-selectors{display:flex;align-items:flex-end;flex-shrink:0}.meshboard-toolbar .toolbar-right{display:flex;gap:.5rem;align-items:center;flex-shrink:0}.empty-state{display:flex;align-items:flex-start;justify-content:center;height:calc(100% - 80px);width:100%;padding-top:4rem}.empty-state .empty-state-content{text-align:center;padding:2rem}.empty-state .empty-state-content kendo-svg-icon{color:var(--kendo-color-subtle, #9e9e9e);margin-bottom:1rem}.empty-state .empty-state-content h3{margin:1rem 0 .5rem;color:var(--kendo-color-on-app-surface, #424242);font-size:1.25rem;font-weight:500}.empty-state .empty-state-content p{margin:0 0 1.5rem;color:var(--kendo-color-subtle, #757575)}kendo-tilelayout{padding:1.5rem;overflow:auto;flex:1;min-height:0}.widget-header{display:flex;justify-content:space-between;align-items:center;width:100%;gap:.5rem}.widget-header.unconfigured{background-color:#ff98001a}.widget-header .widget-title{flex:1;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.widget-header .unconfigured-badge{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background-color:var(--kendo-color-warning, #ff9800);color:#fff;font-size:12px;font-weight:700;flex-shrink:0}.widget-header .widget-actions{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.widget-header .config-widget-btn,.widget-header .edit-widget-btn,.widget-header .remove-widget-btn{opacity:.6;transition:opacity .2s}.widget-header .config-widget-btn:hover,.widget-header .edit-widget-btn:hover,.widget-header .remove-widget-btn:hover{opacity:1}.widget-header .config-widget-btn.needs-config{color:var(--kendo-color-warning, #ff9800);opacity:1}.widget-header .remove-widget-btn{color:var(--kendo-color-error, #f44336)}.widget-error{display:flex;align-items:center;justify-content:center;height:100%;padding:1rem;color:var(--kendo-color-error, #f44336);text-align:center}.meshboard-view.edit-mode kendo-tilelayout-item:hover{box-shadow:0 0 0 2px var(--kendo-color-primary, #3f51b5)}@media(max-width:768px){.meshboard-toolbar{flex-direction:column;align-items:stretch;gap:.75rem}.meshboard-toolbar .toolbar-left{flex-direction:column;align-items:flex-start;gap:.25rem}.meshboard-toolbar .toolbar-right{flex-wrap:wrap;justify-content:flex-end}kendo-tilelayout{padding:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: TileLayoutModule }, { kind: "component", type: i5.TileLayoutComponent, selector: "kendo-tilelayout", inputs: ["columns", "columnWidth", "gap", "reorderable", "resizable", "rowHeight", "autoFlow", "navigable"], outputs: ["reorder", "resize"] }, { kind: "component", type: i5.TileLayoutItemBodyComponent, selector: "kendo-tilelayout-item-body" }, { kind: "component", type: i5.TileLayoutItemComponent, selector: "kendo-tilelayout-item", inputs: ["title", "rowSpan", "colSpan", "order", "col", "row", "reorderable", "resizable"] }, { kind: "component", type: i5.TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header" }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.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: DialogModule }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: i2$1.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: EditWidgetDialogComponent, selector: "mm-edit-widget-dialog", inputs: ["widget", "widgets", "maxColumns", "gridService"], outputs: ["save", "cancelled"] }, { kind: "component", type: TimeRangePickerComponent, selector: "mm-time-range-picker", inputs: ["config", "labels", "initialSelection"], outputs: ["rangeChange", "rangeChangeISO", "selectionChange"] }, { kind: "component", type: EntitySelectorToolbarComponent, selector: "mm-entity-selector-toolbar", inputs: ["entitySelectors"], outputs: ["entitySelected", "entityCleared"] }] });
|
|
26999
26999
|
}
|
|
27000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
27000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: MeshBoardViewComponent, decorators: [{
|
|
27001
27001
|
type: Component,
|
|
27002
27002
|
args: [{ selector: 'mm-meshboard-view', standalone: true, imports: [
|
|
27003
27003
|
CommonModule,
|