@meshmakers/octo-process-diagrams 3.3.620 → 3.3.640

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.
@@ -3057,10 +3057,10 @@ class PrimitiveRendererRegistry {
3057
3057
  }
3058
3058
  return null;
3059
3059
  }
3060
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PrimitiveRendererRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3061
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PrimitiveRendererRegistry, providedIn: 'root' });
3060
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PrimitiveRendererRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3061
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PrimitiveRendererRegistry, providedIn: 'root' });
3062
3062
  }
3063
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PrimitiveRendererRegistry, decorators: [{
3063
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PrimitiveRendererRegistry, decorators: [{
3064
3064
  type: Injectable,
3065
3065
  args: [{
3066
3066
  providedIn: 'root'
@@ -3338,10 +3338,10 @@ class ExpressionEvaluatorService {
3338
3338
  clearCache() {
3339
3339
  this.expressionCache.clear();
3340
3340
  }
3341
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3342
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ExpressionEvaluatorService, providedIn: 'root' });
3341
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3342
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ExpressionEvaluatorService, providedIn: 'root' });
3343
3343
  }
3344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ExpressionEvaluatorService, decorators: [{
3344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ExpressionEvaluatorService, decorators: [{
3345
3345
  type: Injectable,
3346
3346
  args: [{
3347
3347
  providedIn: 'root'
@@ -3719,10 +3719,10 @@ class SymbolRenderer {
3719
3719
  }
3720
3720
  return result;
3721
3721
  }
3722
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3723
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolRenderer, providedIn: 'root' });
3722
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3723
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolRenderer, providedIn: 'root' });
3724
3724
  }
3725
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolRenderer, decorators: [{
3725
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolRenderer, decorators: [{
3726
3726
  type: Injectable,
3727
3727
  args: [{
3728
3728
  providedIn: 'root'
@@ -3815,10 +3815,10 @@ class GetSymbolLibrariesDtoGQL extends i1.Query {
3815
3815
  constructor(apollo) {
3816
3816
  super(apollo);
3817
3817
  }
3818
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolLibrariesDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3819
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolLibrariesDtoGQL, providedIn: 'root' });
3818
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolLibrariesDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3819
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolLibrariesDtoGQL, providedIn: 'root' });
3820
3820
  }
3821
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolLibrariesDtoGQL, decorators: [{
3821
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolLibrariesDtoGQL, decorators: [{
3822
3822
  type: Injectable,
3823
3823
  args: [{
3824
3824
  providedIn: 'root'
@@ -3873,10 +3873,10 @@ class GetSymbolLibraryDtoGQL extends i1.Query {
3873
3873
  constructor(apollo) {
3874
3874
  super(apollo);
3875
3875
  }
3876
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolLibraryDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3877
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolLibraryDtoGQL, providedIn: 'root' });
3876
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolLibraryDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3877
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolLibraryDtoGQL, providedIn: 'root' });
3878
3878
  }
3879
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolLibraryDtoGQL, decorators: [{
3879
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolLibraryDtoGQL, decorators: [{
3880
3880
  type: Injectable,
3881
3881
  args: [{
3882
3882
  providedIn: 'root'
@@ -3907,10 +3907,10 @@ class CreateSymbolLibraryDtoGQL extends i1.Mutation {
3907
3907
  constructor(apollo) {
3908
3908
  super(apollo);
3909
3909
  }
3910
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateSymbolLibraryDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3911
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateSymbolLibraryDtoGQL, providedIn: 'root' });
3910
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateSymbolLibraryDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3911
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateSymbolLibraryDtoGQL, providedIn: 'root' });
3912
3912
  }
3913
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateSymbolLibraryDtoGQL, decorators: [{
3913
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateSymbolLibraryDtoGQL, decorators: [{
3914
3914
  type: Injectable,
3915
3915
  args: [{
3916
3916
  providedIn: 'root'
@@ -3941,10 +3941,10 @@ class UpdateSymbolLibraryDtoGQL extends i1.Mutation {
3941
3941
  constructor(apollo) {
3942
3942
  super(apollo);
3943
3943
  }
3944
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateSymbolLibraryDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3945
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateSymbolLibraryDtoGQL, providedIn: 'root' });
3944
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateSymbolLibraryDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3945
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateSymbolLibraryDtoGQL, providedIn: 'root' });
3946
3946
  }
3947
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateSymbolLibraryDtoGQL, decorators: [{
3947
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateSymbolLibraryDtoGQL, decorators: [{
3948
3948
  type: Injectable,
3949
3949
  args: [{
3950
3950
  providedIn: 'root'
@@ -3985,10 +3985,10 @@ class GetSymbolDefinitionDtoGQL extends i1.Query {
3985
3985
  constructor(apollo) {
3986
3986
  super(apollo);
3987
3987
  }
3988
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3989
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolDefinitionDtoGQL, providedIn: 'root' });
3988
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
3989
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolDefinitionDtoGQL, providedIn: 'root' });
3990
3990
  }
3991
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolDefinitionDtoGQL, decorators: [{
3991
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolDefinitionDtoGQL, decorators: [{
3992
3992
  type: Injectable,
3993
3993
  args: [{
3994
3994
  providedIn: 'root'
@@ -4023,10 +4023,10 @@ class CreateSymbolDefinitionDtoGQL extends i1.Mutation {
4023
4023
  constructor(apollo) {
4024
4024
  super(apollo);
4025
4025
  }
4026
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
4027
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateSymbolDefinitionDtoGQL, providedIn: 'root' });
4026
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
4027
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateSymbolDefinitionDtoGQL, providedIn: 'root' });
4028
4028
  }
4029
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateSymbolDefinitionDtoGQL, decorators: [{
4029
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateSymbolDefinitionDtoGQL, decorators: [{
4030
4030
  type: Injectable,
4031
4031
  args: [{
4032
4032
  providedIn: 'root'
@@ -4061,10 +4061,10 @@ class UpdateSymbolDefinitionDtoGQL extends i1.Mutation {
4061
4061
  constructor(apollo) {
4062
4062
  super(apollo);
4063
4063
  }
4064
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
4065
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateSymbolDefinitionDtoGQL, providedIn: 'root' });
4064
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
4065
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateSymbolDefinitionDtoGQL, providedIn: 'root' });
4066
4066
  }
4067
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateSymbolDefinitionDtoGQL, decorators: [{
4067
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateSymbolDefinitionDtoGQL, decorators: [{
4068
4068
  type: Injectable,
4069
4069
  args: [{
4070
4070
  providedIn: 'root'
@@ -4085,10 +4085,10 @@ class DeleteSymbolDefinitionDtoGQL extends i1.Mutation {
4085
4085
  constructor(apollo) {
4086
4086
  super(apollo);
4087
4087
  }
4088
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DeleteSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
4089
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DeleteSymbolDefinitionDtoGQL, providedIn: 'root' });
4088
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteSymbolDefinitionDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
4089
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteSymbolDefinitionDtoGQL, providedIn: 'root' });
4090
4090
  }
4091
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DeleteSymbolDefinitionDtoGQL, decorators: [{
4091
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteSymbolDefinitionDtoGQL, decorators: [{
4092
4092
  type: Injectable,
4093
4093
  args: [{
4094
4094
  providedIn: 'root'
@@ -4551,10 +4551,10 @@ class SymbolLibraryService {
4551
4551
  return defaultValue;
4552
4552
  }
4553
4553
  }
4554
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4555
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryService, providedIn: 'root' });
4554
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4555
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryService, providedIn: 'root' });
4556
4556
  }
4557
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryService, decorators: [{
4557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryService, decorators: [{
4558
4558
  type: Injectable,
4559
4559
  args: [{
4560
4560
  providedIn: 'root'
@@ -5677,10 +5677,10 @@ class SvgImportService {
5677
5677
  return { x: pos.x, y: pos.y, width: 50, height: 50 };
5678
5678
  }
5679
5679
  }
5680
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SvgImportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5681
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SvgImportService, providedIn: 'root' });
5680
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SvgImportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5681
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SvgImportService, providedIn: 'root' });
5682
5682
  }
5683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SvgImportService, decorators: [{
5683
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SvgImportService, decorators: [{
5684
5684
  type: Injectable,
5685
5685
  args: [{
5686
5686
  providedIn: 'root'
@@ -5721,10 +5721,10 @@ class GetProcessDiagramDtoGQL extends i1.Query {
5721
5721
  constructor(apollo) {
5722
5722
  super(apollo);
5723
5723
  }
5724
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5725
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetProcessDiagramDtoGQL, providedIn: 'root' });
5724
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5725
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetProcessDiagramDtoGQL, providedIn: 'root' });
5726
5726
  }
5727
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetProcessDiagramDtoGQL, decorators: [{
5727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetProcessDiagramDtoGQL, decorators: [{
5728
5728
  type: Injectable,
5729
5729
  args: [{
5730
5730
  providedIn: 'root'
@@ -5756,10 +5756,10 @@ class GetProcessDiagramsDtoGQL extends i1.Query {
5756
5756
  constructor(apollo) {
5757
5757
  super(apollo);
5758
5758
  }
5759
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetProcessDiagramsDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5760
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetProcessDiagramsDtoGQL, providedIn: 'root' });
5759
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetProcessDiagramsDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5760
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetProcessDiagramsDtoGQL, providedIn: 'root' });
5761
5761
  }
5762
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetProcessDiagramsDtoGQL, decorators: [{
5762
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetProcessDiagramsDtoGQL, decorators: [{
5763
5763
  type: Injectable,
5764
5764
  args: [{
5765
5765
  providedIn: 'root'
@@ -5789,10 +5789,10 @@ class CreateProcessDiagramDtoGQL extends i1.Mutation {
5789
5789
  constructor(apollo) {
5790
5790
  super(apollo);
5791
5791
  }
5792
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5793
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateProcessDiagramDtoGQL, providedIn: 'root' });
5792
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5793
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateProcessDiagramDtoGQL, providedIn: 'root' });
5794
5794
  }
5795
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CreateProcessDiagramDtoGQL, decorators: [{
5795
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: CreateProcessDiagramDtoGQL, decorators: [{
5796
5796
  type: Injectable,
5797
5797
  args: [{
5798
5798
  providedIn: 'root'
@@ -5822,10 +5822,10 @@ class UpdateProcessDiagramDtoGQL extends i1.Mutation {
5822
5822
  constructor(apollo) {
5823
5823
  super(apollo);
5824
5824
  }
5825
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5826
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateProcessDiagramDtoGQL, providedIn: 'root' });
5825
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5826
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateProcessDiagramDtoGQL, providedIn: 'root' });
5827
5827
  }
5828
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: UpdateProcessDiagramDtoGQL, decorators: [{
5828
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: UpdateProcessDiagramDtoGQL, decorators: [{
5829
5829
  type: Injectable,
5830
5830
  args: [{
5831
5831
  providedIn: 'root'
@@ -5846,10 +5846,10 @@ class DeleteProcessDiagramDtoGQL extends i1.Mutation {
5846
5846
  constructor(apollo) {
5847
5847
  super(apollo);
5848
5848
  }
5849
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DeleteProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5850
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DeleteProcessDiagramDtoGQL, providedIn: 'root' });
5849
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteProcessDiagramDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
5850
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteProcessDiagramDtoGQL, providedIn: 'root' });
5851
5851
  }
5852
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DeleteProcessDiagramDtoGQL, decorators: [{
5852
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DeleteProcessDiagramDtoGQL, decorators: [{
5853
5853
  type: Injectable,
5854
5854
  args: [{
5855
5855
  providedIn: 'root'
@@ -6084,10 +6084,10 @@ class ProcessDiagramDataService {
6084
6084
  return defaultValue;
6085
6085
  }
6086
6086
  }
6087
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDiagramDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6088
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDiagramDataService, providedIn: 'root' });
6087
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDiagramDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6088
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDiagramDataService, providedIn: 'root' });
6089
6089
  }
6090
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDiagramDataService, decorators: [{
6090
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDiagramDataService, decorators: [{
6091
6091
  type: Injectable,
6092
6092
  args: [{
6093
6093
  providedIn: 'root'
@@ -6269,10 +6269,10 @@ class DockviewComponent {
6269
6269
  });
6270
6270
  this.disposables.push(() => willDropDisposable.dispose());
6271
6271
  }
6272
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DockviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6273
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: DockviewComponent, isStandalone: true, selector: "mm-dockview", inputs: { components: "components", tabComponents: "tabComponents", watermarkComponent: "watermarkComponent", defaultTabComponent: "defaultTabComponent", leftHeaderActionsComponent: "leftHeaderActionsComponent", rightHeaderActionsComponent: "rightHeaderActionsComponent", prefixHeaderActionsComponent: "prefixHeaderActionsComponent", className: "className", hideBorders: "hideBorders", locked: "locked", disableAutoResizing: "disableAutoResizing", disableFloatingGroups: "disableFloatingGroups" }, outputs: { ready: "ready", didDrop: "didDrop", willDrop: "willDrop" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["dockviewContainer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: '<div #dockviewContainer class="dv-dockview-container"></div>', isInline: true, styles: [".dv-scrollable{position:relative;overflow:hidden}.dv-scrollable .dv-scrollbar{position:absolute;border-radius:2px;background-color:transparent;will-change:background-color,transform;transform:translateZ(0);backface-visibility:hidden;transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:1s;transition-delay:0s}.dv-scrollable .dv-scrollbar-horizontal{bottom:0;left:0;height:4px}.dv-scrollable .dv-scrollbar-vertical{right:0;top:0;width:4px}.dv-scrollable:hover .dv-scrollbar,.dv-scrollable.dv-scrollable-resizing .dv-scrollbar,.dv-scrollable.dv-scrollable-scrolling .dv-scrollbar{background-color:var(--dv-scrollbar-background-color, rgba(255, 255, 255, .25))}.dv-svg{display:inline-block;fill:currentcolor;line-height:1;stroke:currentcolor;stroke-width:0}.dockview-theme-dark{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2)}.dockview-theme-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-light{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: white;--dv-tabs-and-actions-container-background-color: #f3f3f3;--dv-activegroup-visiblepanel-tab-background-color: white;--dv-activegroup-hiddenpanel-tab-background-color: #ececec;--dv-inactivegroup-visiblepanel-tab-background-color: white;--dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;--dv-tab-divider-color: white;--dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .35);--dv-separator-border: rgba(128, 128, 128, .35);--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-scrollbar-background-color: rgba(0, 0, 0, .25)}.dockview-theme-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-vs{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2);--dv-tabs-and-actions-container-background-color: #2d2d30;--dv-tabs-and-actions-container-height: 20px;--dv-tabs-and-actions-container-font-size: 11px;--dv-activegroup-visiblepanel-tab-background-color: #007acc;--dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: white;--dv-inactivegroup-visiblepanel-tab-color: white;--dv-inactivegroup-hiddenpanel-tab-color: white}.dockview-theme-vs .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-activegroup-hiddenpanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color)}.dockview-theme-abyss{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-color-abyss-dark: #000c18;--dv-color-abyss: #10192c;--dv-color-abyss-light: #1c1c2a;--dv-color-abyss-lighter: #2b2b4a;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var( --dv-color-abyss-light );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-activegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-inactivegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-tab-divider-color: var(--dv-color-abyss-lighter);--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .25);--dv-separator-border: var(--dv-color-abyss-lighter);--dv-paneview-header-border-color: var(--dv-color-abyss-lighter);--dv-paneview-active-outline-color: #596f99}.dockview-theme-abyss .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dracula{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #282a36;--dv-tabs-and-actions-container-background-color: #191a21;--dv-activegroup-visiblepanel-tab-background-color: #282a36;--dv-activegroup-hiddenpanel-tab-background-color: #21222c;--dv-inactivegroup-visiblepanel-tab-background-color: #282a36;--dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;--dv-tab-divider-color: #191a21;--dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);--dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);--dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, .5);--dv-separator-border: #bd93f9;--dv-paneview-header-border-color: #bd93f9;--dv-paneview-active-outline-color: #6272a4}.dockview-theme-dracula .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;top:0;content:\"\";width:100%;height:1px;background-color:#94527e;z-index:999}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:\"\";width:100%;height:1px;background-color:#5e3d5a;z-index:999}.dockview-theme-replit{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;box-sizing:border-box;padding:10px;background-color:#ebeced;--dv-group-view-background-color: #ebeced;--dv-tabs-and-actions-container-background-color: #fcfcfc;--dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;--dv-activegroup-hiddenpanel-tab-background-color: #fcfcfc;--dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;--dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);--dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-sash-color: #cfd1d3;--dv-active-sash-color: #babbbb}.dockview-theme-replit .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-replit .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-replit .dv-resize-container{border-radius:10px!important;border:none}.dockview-theme-replit .dv-groupview{overflow:hidden;border-radius:10px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container{border-bottom:1px solid rgba(128,128,128,.35)}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab{margin:4px;border-radius:8px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab:hover{background-color:#e4e5e6!important}.dockview-theme-replit .dv-groupview .dv-content-container{background-color:#fcfcfc}.dockview-theme-replit .dv-groupview.dv-active-group{border:1px solid rgba(128,128,128,.35)}.dockview-theme-replit .dv-groupview.dv-inactive-group{border:1px solid transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash{background-color:transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):after{content:\"\";height:4px;width:40px;border-radius:2px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--dv-sash-color);position:absolute}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):hover,.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):active{background-color:transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):hover:after,.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):active:after{background-color:var(--dv-active-sash-color)}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash{background-color:transparent}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):after{content:\"\";height:40px;width:4px;border-radius:2px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--dv-sash-color);position:absolute}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):hover,.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):active{background-color:transparent}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):hover:after,.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):active:after{background-color:var(--dv-active-sash-color)}.dockview-theme-abyss-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-tab-font-size: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-border-radius: 20px;box-sizing:border-box;--dv-color-abyss-dark: rgb(11, 6, 17);--dv-color-abyss: #16121f;--dv-color-abyss-light: #201d2b;--dv-color-abyss-lighter: #2a2837;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-drag-over-border: 2px solid var(--dv-color-abyss-accent);--dv-drag-over-background-color: \"\";--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var(--dv-color-abyss);--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: var(--dv-color-abyss-primary-text);--dv-activegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-inactivegroup-visiblepanel-tab-color: var( --dv-color-abyss-primary-text );--dv-inactivegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: var(--dv-color-abyss-accent);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, .5);padding:10px;background-color:var(--dv-color-abyss-dark)}.dockview-theme-abyss-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-abyss-spaced .dv-sash{border-radius:4px}.dockview-theme-abyss-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-abyss-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-abyss-spaced .dv-tabs-overflow-container,.dockview-theme-abyss-spaced .dv-tabs-overflow-dropdown-default{border-radius:8px;height:unset!important}.dockview-theme-abyss-spaced .dv-tab{border-radius:8px}.dockview-theme-abyss-spaced .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-abyss-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2)}.dockview-theme-abyss-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color)}.dockview-theme-abyss-spaced .dv-resize-container .dv-groupview{border:2px solid var(--dv-color-abyss-dark)}.dockview-theme-light-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-tab-font-size: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-border-radius: 20px;box-sizing:border-box;--dv-drag-over-border: 2px solid rgb(91, 30, 207);--dv-drag-over-background-color: \"\";--dv-group-view-background-color: #f6f5f9;--dv-tabs-and-actions-container-background-color: white;--dv-activegroup-visiblepanel-tab-background-color: #ededf0;--dv-activegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-inactivegroup-visiblepanel-tab-background-color: #ededf0;--dv-inactivegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-activegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-inactivegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-inactivegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: rgb(91, 30, 207);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, .1);padding:10px;background-color:#f6f5f9;--dv-scrollbar-background-color: rgba(0, 0, 0, .25)}.dockview-theme-light-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-light-spaced .dv-sash{border-radius:4px}.dockview-theme-light-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-light-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-light-spaced .dv-tabs-overflow-container,.dockview-theme-light-spaced .dv-tabs-overflow-dropdown-default{border-radius:8px;height:unset!important}.dockview-theme-light-spaced .dv-tab{border-radius:8px}.dockview-theme-light-spaced .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-light-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2)}.dockview-theme-light-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color)}.dockview-theme-light-spaced .dv-resize-container .dv-groupview{border:2px solid rgba(255,255,255,.1)}.dv-drop-target-container{position:absolute;z-index:9999;top:0;left:0;height:100%;width:100%;pointer-events:none;overflow:hidden;--dv-transition-duration: .3s}.dv-drop-target-container .dv-drop-target-anchor{position:relative;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);opacity:1;will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden;contain:layout paint;transition:opacity var(--dv-transition-duration) ease-in,transform var(--dv-transition-duration) ease-out}.dv-drop-target{position:relative;--dv-transition-duration: 70ms}.dv-drop-target>.dv-drop-target-dropzone{position:absolute;left:0;top:0;height:100%;width:100%;z-index:1000;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection{position:relative;box-sizing:border-box;height:100%;width:100%;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);transition:top var(--dv-transition-duration) ease-out,left var(--dv-transition-duration) ease-out,width var(--dv-transition-duration) ease-out,height var(--dv-transition-duration) ease-out,opacity var(--dv-transition-duration) ease-out;will-change:transform;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical{border-top:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical{border-bottom:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal{border-left:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal{border-right:1px solid var(--dv-drag-over-border-color)}.dv-dockview{position:relative;background-color:var(--dv-group-view-background-color);contain:layout}.dv-dockview .dv-watermark-container{position:absolute;top:0;left:0;height:100%;width:100%;z-index:1}.dv-dockview .dv-overlay-render-container{position:relative}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-inactivegroup-visiblepanel-tab-background-color);color:var(--dv-inactivegroup-visiblepanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-inactivegroup-hiddenpanel-tab-background-color);color:var(--dv-inactivegroup-hiddenpanel-tab-color)}.dv-tab.dv-tab-dragging{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview{display:flex;height:100%;background-color:var(--dv-group-view-background-color);overflow:hidden;flex-direction:column}.dv-groupview:focus{outline:none}.dv-groupview>.dv-content-container{flex-grow:1;min-height:0;outline:none}.dv-groupview.dv-groupview-header-bottom{flex-direction:column-reverse}.dv-groupview.dv-groupview-header-left{flex-direction:row}.dv-groupview.dv-groupview-header-right{flex-direction:row-reverse}.dv-root-wrapper,.dv-grid-view,.dv-branch-node{height:100%;width:100%}.dv-debug .dv-resize-container .dv-resize-handle-top{background-color:red}.dv-debug .dv-resize-container .dv-resize-handle-bottom{background-color:green}.dv-debug .dv-resize-container .dv-resize-handle-left{background-color:#ff0}.dv-debug .dv-resize-container .dv-resize-handle-right{background-color:#00f}.dv-debug .dv-resize-container .dv-resize-handle-topleft,.dv-debug .dv-resize-container .dv-resize-handle-topright,.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,.dv-debug .dv-resize-container .dv-resize-handle-bottomright{background-color:#0ff}.dv-resize-container{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:calc(var(--dv-overlay-z-index) - 2);border:1px solid var(--dv-tab-divider-color);box-shadow:var(--dv-floating-box-shadow);will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden}.dv-resize-container.dv-hidden{display:none}.dv-resize-container.dv-resize-container-dragging{opacity:.5;will-change:transform,opacity}.dv-resize-container .dv-resize-handle-top{height:4px;width:calc(100% - 8px);left:4px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-bottom{height:4px;width:calc(100% - 8px);left:4px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-left{height:calc(100% - 8px);width:4px;left:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-right{height:calc(100% - 8px);width:4px;right:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-topleft{height:4px;width:4px;top:-2px;left:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:nw-resize}.dv-resize-container .dv-resize-handle-topright{height:4px;width:4px;right:-2px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ne-resize}.dv-resize-container .dv-resize-handle-bottomleft{height:4px;width:4px;left:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:sw-resize}.dv-resize-container .dv-resize-handle-bottomright{height:4px;width:4px;right:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:se-resize}.dv-render-overlay{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:1;width:100%;height:100%;contain:layout paint;isolation:isolate;will-change:transform;transform:translateZ(0);backface-visibility:hidden}.dv-render-overlay.dv-render-overlay-float{z-index:calc(var(--dv-overlay-z-index) - 1)}.dv-debug .dv-render-overlay{outline:1px solid red;outline-offset:-1}.dv-pane-container{height:100%;width:100%}.dv-pane-container.dv-animated .dv-view{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-pane-container .dv-view{overflow:hidden;display:flex;flex-direction:column;padding:0!important}.dv-pane-container .dv-view:not(:first-child):before{background-color:transparent!important}.dv-pane-container .dv-view:not(:first-child) .dv-pane>.dv-pane-header{border-top:1px solid var(--dv-paneview-header-border-color)}.dv-pane-container .dv-view .dv-default-header{background-color:var(--dv-group-view-background-color);color:var(--dv-activegroup-visiblepanel-tab-color);display:flex;padding:0 8px;cursor:pointer}.dv-pane-container .dv-view .dv-default-header .dv-pane-header-icon{display:flex;justify-content:center;align-items:center}.dv-pane-container .dv-view .dv-default-header>span{padding-left:8px;flex-grow:1}.dv-pane-container:first-of-type>.dv-pane>.dv-pane-header{border-top:none!important}.dv-pane-container .dv-pane{display:flex;flex-direction:column;overflow:hidden;height:100%}.dv-pane-container .dv-pane .dv-pane-header{box-sizing:border-box;-webkit-user-select:none;user-select:none;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-header.dv-pane-draggable{cursor:pointer}.dv-pane-container .dv-pane .dv-pane-header:focus:before,.dv-pane-container .dv-pane .dv-pane-header:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:\"\";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-pane-container .dv-pane .dv-pane-body{overflow-y:auto;overflow-x:hidden;flex-grow:1;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-body:focus:before,.dv-pane-container .dv-pane .dv-pane-body:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:\"\";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-enabled{background-color:#000}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-disabled{background-color:orange}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-maximum{background-color:green}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-minimum{background-color:red}.dv-split-view-container{position:relative;overflow:hidden;height:100%;width:100%}.dv-split-view-container.dv-splitview-disabled>.dv-sash-container>.dv-sash{pointer-events:none}.dv-split-view-container.dv-animation .dv-view,.dv-split-view-container.dv-animation .dv-sash{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-split-view-container.dv-horizontal{height:100%}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash{height:100%;width:4px}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-enabled{cursor:ew-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-maximum{cursor:w-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-minimum{cursor:e-resize}.dv-split-view-container.dv-horizontal>.dv-view-container>.dv-view:not(:first-child):before{height:100%;width:1px}.dv-split-view-container.dv-vertical{width:100%}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash{width:100%;height:4px}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-enabled{cursor:ns-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-maximum{cursor:n-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-minimum{cursor:s-resize}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view{width:100%}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view:not(:first-child):before{height:1px;width:100%}.dv-split-view-container .dv-sash-container{height:100%;width:100%;position:absolute}.dv-split-view-container .dv-sash-container .dv-sash{position:absolute;z-index:99;outline:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;touch-action:none;background-color:var(--dv-sash-color, transparent)}.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):active,.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):hover{background-color:var(--dv-active-sash-color, transparent);transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:var(--dv-active-sash-transition-duration, .1s);transition-delay:var(--dv-active-sash-transition-delay, .5s)}.dv-split-view-container .dv-view-container{position:relative;height:100%;width:100%}.dv-split-view-container .dv-view-container .dv-view{height:100%;box-sizing:border-box;overflow:auto;position:absolute}.dv-split-view-container.dv-separator-border .dv-view:not(:first-child):before{content:\" \";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-separator-border)}.dv-dragged{transform:translateZ(0)}.dv-tab{flex-shrink:0}.dv-tab:focus-within,.dv-tab:focus{position:relative}.dv-tab:focus-within:after,.dv-tab:focus:after{position:absolute;content:\"\";height:100%;width:100%;top:0;left:0;pointer-events:none;outline:1px solid var(--dv-tab-divider-color)!important;outline-offset:-1px;z-index:5}.dv-tab.dv-tab-dragging .dv-default-tab-action{background-color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tab.dv-active-tab .dv-default-tab .dv-default-tab-action{visibility:visible}.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action{visibility:hidden}.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action{visibility:visible}.dv-tab .dv-default-tab{position:relative;height:100%;width:100%;display:flex;align-items:center;white-space:nowrap;text-overflow:ellipsis}.dv-tab .dv-default-tab .dv-default-tab-content{flex-grow:1;margin-right:4px}.dv-tab .dv-default-tab .dv-default-tab-action{padding:4px;display:flex;align-items:center;justify-content:center;box-sizing:border-box}.dv-tab .dv-default-tab .dv-default-tab-action:hover{border-radius:2px;background-color:var(--dv-icon-hover-background-color)}.dv-tabs-overflow-dropdown-default{height:100%;color:var(--dv-activegroup-hiddenpanel-tab-color);margin:var(--dv-tab-margin);display:flex;align-items:center;flex-shrink:0;padding:.25rem .5rem;cursor:pointer}.dv-tabs-overflow-dropdown-default>span{padding-left:.25rem}.dv-tabs-overflow-dropdown-default>svg{transform:rotate(90deg)}.dv-tabs-container{display:flex;height:100%;overflow:auto;scrollbar-width:thin;will-change:scroll-position;transform:translateZ(0)}.dv-tabs-container.dv-tabs-container-vertical{width:100%;height:fit-content;max-height:100%;writing-mode:vertical-rl}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before,.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{content:\" \";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-tab-divider-color)}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before{width:1px;height:100%}.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{width:100%;height:1px}.dv-tabs-container::-webkit-scrollbar{height:3px}.dv-tabs-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color)}.dv-scrollable>.dv-tabs-container{overflow:hidden}.dv-tab{-webkit-user-drag:element;outline:none;padding:.25rem .5rem;cursor:pointer;position:relative;box-sizing:border-box;font-size:var(--dv-tab-font-size);margin:var(--dv-tab-margin)}.dv-tabs-container-vertical .dv-tab{padding:.5rem .25rem}.dv-tabs-overflow-container{flex-direction:column;height:unset;max-height:min(50vh,400px);overflow-y:auto;border:1px solid var(--dv-tab-divider-color);background-color:var(--dv-group-view-background-color);scrollbar-width:thin}.dv-tabs-overflow-container::-webkit-scrollbar{width:6px}.dv-tabs-overflow-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-overflow-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color);border-radius:3px}.dv-tabs-overflow-container .dv-tab:not(:last-child){border-bottom:1px solid var(--dv-tab-divider-color)}.dv-tabs-overflow-container .dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tabs-overflow-container .dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-tabs-and-actions-container{display:flex;background-color:var(--dv-tabs-and-actions-container-background-color);flex-shrink:0;box-sizing:border-box;height:var(--dv-tabs-and-actions-container-height);font-size:var(--dv-tabs-and-actions-container-font-size)}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-scrollable,.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container{flex-grow:1}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab{flex-grow:1;padding:0}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-void-container{flex-grow:0}.dv-tabs-and-actions-container .dv-void-container{display:flex;flex-grow:1}.dv-tabs-and-actions-container .dv-void-container.dv-draggable{cursor:grab}.dv-tabs-and-actions-container .dv-right-actions-container{display:flex}.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical{flex-direction:column}.dv-tabs-and-actions-container.dv-groupview-header-vertical{flex-direction:column;height:auto;width:var(--dv-tabs-and-actions-container-height)}.dv-watermark{display:flex;height:100%}mm-dockview{display:block;width:100%;height:100%;position:relative}.dv-dockview-container{width:100%;height:100%;position:absolute;inset:0}.dv-dockview{width:100%;height:100%}.dv-dockview,.dv-grid-view{background-color:var(--dv-background-color, #fafafa);--dv-background-color: #fafafa;--dv-pane-background-color: #ffffff;--dv-tabs-and-actions-container-background-color: #f5f5f5;--dv-activegroup-visiblepanel-tab-background-color: #ffffff;--dv-activegroup-hiddenpanel-tab-background-color: #e8e8e8;--dv-inactivegroup-visiblepanel-tab-background-color: #f0f0f0;--dv-inactivegroup-hiddenpanel-tab-background-color: #e0e0e0;--dv-tab-divider-color: #e0e0e0;--dv-activegroup-visiblepanel-tab-color: #333333;--dv-activegroup-hiddenpanel-tab-color: #666666;--dv-inactivegroup-visiblepanel-tab-color: #666666;--dv-inactivegroup-hiddenpanel-tab-color: #999999;--dv-separator-border: 1px solid #e0e0e0;--dv-group-view-background-color: #ffffff;--dv-tabs-overflow-dropdown-background-color: #f5f5f5;--dv-icon-hover-background-color: #e0e0e0}.dv-tabs-overflow-container{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5);border:1px solid var(--dv-tab-divider-color, #e0e0e0);border-radius:4px;box-shadow:0 2px 8px #00000026}.dv-tabs-container{background-color:var(--dv-tabs-and-actions-container-background-color, #f5f5f5)}div[style*=--dv-overlay-z-index]{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5);border-radius:4px}div[style*=--dv-overlay-z-index] .dv-tabs-overflow-container{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5)}div[style*=--dv-overlay-z-index] .dv-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color, #e8e8e8);color:var(--dv-activegroup-hiddenpanel-tab-color, #666666)}div[style*=--dv-overlay-z-index] .dv-tab:hover{background-color:var(--dv-icon-hover-background-color, #d8d8d8)}div[style*=--dv-overlay-z-index] .dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color, #ffffff);color:var(--dv-activegroup-visiblepanel-tab-color, #333333)}div[style*=--dv-overlay-z-index] .dv-default-tab{background-color:transparent}.dv-tab{font-size:12px;font-weight:500;background-color:var(--dv-activegroup-hiddenpanel-tab-background-color, #e8e8e8);color:var(--dv-activegroup-hiddenpanel-tab-color, #666666)}.dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color, #ffffff);color:var(--dv-activegroup-visiblepanel-tab-color, #333333)}.dv-default-tab{display:flex;align-items:center}.dv-default-tab-content{flex:1}.dv-default-tab-action{flex-shrink:0;opacity:.5;transition:opacity .15s ease}.dv-default-tab-action:hover{opacity:1}.dv-sash{background:var(--dv-sash-color, #e0e0e0)}.dv-sash:hover,.dv-sash.dv-active{background:var(--dv-sash-hover-color, #1976d2)}.dv-drop-target-dropzone{background:var(--dv-drag-over-background-color, rgba(25, 118, 210, .15));border:2px dashed var(--dv-drag-over-border-color, #1976d2);border-radius:4px}.dv-floating-group{box-shadow:0 4px 20px #00000026;border-radius:4px;overflow:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6272
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DockviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6273
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: DockviewComponent, isStandalone: true, selector: "mm-dockview", inputs: { components: "components", tabComponents: "tabComponents", watermarkComponent: "watermarkComponent", defaultTabComponent: "defaultTabComponent", leftHeaderActionsComponent: "leftHeaderActionsComponent", rightHeaderActionsComponent: "rightHeaderActionsComponent", prefixHeaderActionsComponent: "prefixHeaderActionsComponent", className: "className", hideBorders: "hideBorders", locked: "locked", disableAutoResizing: "disableAutoResizing", disableFloatingGroups: "disableFloatingGroups" }, outputs: { ready: "ready", didDrop: "didDrop", willDrop: "willDrop" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["dockviewContainer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: '<div #dockviewContainer class="dv-dockview-container"></div>', isInline: true, styles: [".dv-scrollable{position:relative;overflow:hidden}.dv-scrollable .dv-scrollbar{position:absolute;border-radius:2px;background-color:transparent;will-change:background-color,transform;transform:translateZ(0);backface-visibility:hidden;transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:1s;transition-delay:0s}.dv-scrollable .dv-scrollbar-horizontal{bottom:0;left:0;height:4px}.dv-scrollable .dv-scrollbar-vertical{right:0;top:0;width:4px}.dv-scrollable:hover .dv-scrollbar,.dv-scrollable.dv-scrollable-resizing .dv-scrollbar,.dv-scrollable.dv-scrollable-scrolling .dv-scrollbar{background-color:var(--dv-scrollbar-background-color, rgba(255, 255, 255, .25))}.dv-svg{display:inline-block;fill:currentcolor;line-height:1;stroke:currentcolor;stroke-width:0}.dockview-theme-dark{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2)}.dockview-theme-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-light{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: white;--dv-tabs-and-actions-container-background-color: #f3f3f3;--dv-activegroup-visiblepanel-tab-background-color: white;--dv-activegroup-hiddenpanel-tab-background-color: #ececec;--dv-inactivegroup-visiblepanel-tab-background-color: white;--dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;--dv-tab-divider-color: white;--dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .35);--dv-separator-border: rgba(128, 128, 128, .35);--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-scrollbar-background-color: rgba(0, 0, 0, .25)}.dockview-theme-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-vs{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2);--dv-tabs-and-actions-container-background-color: #2d2d30;--dv-tabs-and-actions-container-height: 20px;--dv-tabs-and-actions-container-font-size: 11px;--dv-activegroup-visiblepanel-tab-background-color: #007acc;--dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: white;--dv-inactivegroup-visiblepanel-tab-color: white;--dv-inactivegroup-hiddenpanel-tab-color: white}.dockview-theme-vs .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-activegroup-hiddenpanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color)}.dockview-theme-abyss{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-color-abyss-dark: #000c18;--dv-color-abyss: #10192c;--dv-color-abyss-light: #1c1c2a;--dv-color-abyss-lighter: #2b2b4a;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var( --dv-color-abyss-light );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-activegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-inactivegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-tab-divider-color: var(--dv-color-abyss-lighter);--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .25);--dv-separator-border: var(--dv-color-abyss-lighter);--dv-paneview-header-border-color: var(--dv-color-abyss-lighter);--dv-paneview-active-outline-color: #596f99}.dockview-theme-abyss .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dracula{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #282a36;--dv-tabs-and-actions-container-background-color: #191a21;--dv-activegroup-visiblepanel-tab-background-color: #282a36;--dv-activegroup-hiddenpanel-tab-background-color: #21222c;--dv-inactivegroup-visiblepanel-tab-background-color: #282a36;--dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;--dv-tab-divider-color: #191a21;--dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);--dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);--dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, .5);--dv-separator-border: #bd93f9;--dv-paneview-header-border-color: #bd93f9;--dv-paneview-active-outline-color: #6272a4}.dockview-theme-dracula .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;top:0;content:\"\";width:100%;height:1px;background-color:#94527e;z-index:999}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:\"\";width:100%;height:1px;background-color:#5e3d5a;z-index:999}.dockview-theme-replit{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;box-sizing:border-box;padding:10px;background-color:#ebeced;--dv-group-view-background-color: #ebeced;--dv-tabs-and-actions-container-background-color: #fcfcfc;--dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;--dv-activegroup-hiddenpanel-tab-background-color: #fcfcfc;--dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;--dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);--dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-sash-color: #cfd1d3;--dv-active-sash-color: #babbbb}.dockview-theme-replit .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-replit .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-replit .dv-resize-container{border-radius:10px!important;border:none}.dockview-theme-replit .dv-groupview{overflow:hidden;border-radius:10px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container{border-bottom:1px solid rgba(128,128,128,.35)}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab{margin:4px;border-radius:8px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab:hover{background-color:#e4e5e6!important}.dockview-theme-replit .dv-groupview .dv-content-container{background-color:#fcfcfc}.dockview-theme-replit .dv-groupview.dv-active-group{border:1px solid rgba(128,128,128,.35)}.dockview-theme-replit .dv-groupview.dv-inactive-group{border:1px solid transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash{background-color:transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):after{content:\"\";height:4px;width:40px;border-radius:2px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--dv-sash-color);position:absolute}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):hover,.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):active{background-color:transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):hover:after,.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):active:after{background-color:var(--dv-active-sash-color)}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash{background-color:transparent}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):after{content:\"\";height:40px;width:4px;border-radius:2px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--dv-sash-color);position:absolute}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):hover,.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):active{background-color:transparent}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):hover:after,.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):active:after{background-color:var(--dv-active-sash-color)}.dockview-theme-abyss-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-tab-font-size: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-border-radius: 20px;box-sizing:border-box;--dv-color-abyss-dark: rgb(11, 6, 17);--dv-color-abyss: #16121f;--dv-color-abyss-light: #201d2b;--dv-color-abyss-lighter: #2a2837;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-drag-over-border: 2px solid var(--dv-color-abyss-accent);--dv-drag-over-background-color: \"\";--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var(--dv-color-abyss);--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: var(--dv-color-abyss-primary-text);--dv-activegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-inactivegroup-visiblepanel-tab-color: var( --dv-color-abyss-primary-text );--dv-inactivegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: var(--dv-color-abyss-accent);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, .5);padding:10px;background-color:var(--dv-color-abyss-dark)}.dockview-theme-abyss-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-abyss-spaced .dv-sash{border-radius:4px}.dockview-theme-abyss-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-abyss-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-abyss-spaced .dv-tabs-overflow-container,.dockview-theme-abyss-spaced .dv-tabs-overflow-dropdown-default{border-radius:8px;height:unset!important}.dockview-theme-abyss-spaced .dv-tab{border-radius:8px}.dockview-theme-abyss-spaced .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-abyss-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2)}.dockview-theme-abyss-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color)}.dockview-theme-abyss-spaced .dv-resize-container .dv-groupview{border:2px solid var(--dv-color-abyss-dark)}.dockview-theme-light-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-tab-font-size: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-border-radius: 20px;box-sizing:border-box;--dv-drag-over-border: 2px solid rgb(91, 30, 207);--dv-drag-over-background-color: \"\";--dv-group-view-background-color: #f6f5f9;--dv-tabs-and-actions-container-background-color: white;--dv-activegroup-visiblepanel-tab-background-color: #ededf0;--dv-activegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-inactivegroup-visiblepanel-tab-background-color: #ededf0;--dv-inactivegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-activegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-inactivegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-inactivegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: rgb(91, 30, 207);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, .1);padding:10px;background-color:#f6f5f9;--dv-scrollbar-background-color: rgba(0, 0, 0, .25)}.dockview-theme-light-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-light-spaced .dv-sash{border-radius:4px}.dockview-theme-light-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-light-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-light-spaced .dv-tabs-overflow-container,.dockview-theme-light-spaced .dv-tabs-overflow-dropdown-default{border-radius:8px;height:unset!important}.dockview-theme-light-spaced .dv-tab{border-radius:8px}.dockview-theme-light-spaced .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-light-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2)}.dockview-theme-light-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color)}.dockview-theme-light-spaced .dv-resize-container .dv-groupview{border:2px solid rgba(255,255,255,.1)}.dv-drop-target-container{position:absolute;z-index:9999;top:0;left:0;height:100%;width:100%;pointer-events:none;overflow:hidden;--dv-transition-duration: .3s}.dv-drop-target-container .dv-drop-target-anchor{position:relative;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);opacity:1;will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden;contain:layout paint;transition:opacity var(--dv-transition-duration) ease-in,transform var(--dv-transition-duration) ease-out}.dv-drop-target{position:relative;--dv-transition-duration: 70ms}.dv-drop-target>.dv-drop-target-dropzone{position:absolute;left:0;top:0;height:100%;width:100%;z-index:1000;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection{position:relative;box-sizing:border-box;height:100%;width:100%;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);transition:top var(--dv-transition-duration) ease-out,left var(--dv-transition-duration) ease-out,width var(--dv-transition-duration) ease-out,height var(--dv-transition-duration) ease-out,opacity var(--dv-transition-duration) ease-out;will-change:transform;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical{border-top:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical{border-bottom:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal{border-left:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal{border-right:1px solid var(--dv-drag-over-border-color)}.dv-dockview{position:relative;background-color:var(--dv-group-view-background-color);contain:layout}.dv-dockview .dv-watermark-container{position:absolute;top:0;left:0;height:100%;width:100%;z-index:1}.dv-dockview .dv-overlay-render-container{position:relative}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-inactivegroup-visiblepanel-tab-background-color);color:var(--dv-inactivegroup-visiblepanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-inactivegroup-hiddenpanel-tab-background-color);color:var(--dv-inactivegroup-hiddenpanel-tab-color)}.dv-tab.dv-tab-dragging{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview{display:flex;height:100%;background-color:var(--dv-group-view-background-color);overflow:hidden;flex-direction:column}.dv-groupview:focus{outline:none}.dv-groupview>.dv-content-container{flex-grow:1;min-height:0;outline:none}.dv-groupview.dv-groupview-header-bottom{flex-direction:column-reverse}.dv-groupview.dv-groupview-header-left{flex-direction:row}.dv-groupview.dv-groupview-header-right{flex-direction:row-reverse}.dv-root-wrapper,.dv-grid-view,.dv-branch-node{height:100%;width:100%}.dv-debug .dv-resize-container .dv-resize-handle-top{background-color:red}.dv-debug .dv-resize-container .dv-resize-handle-bottom{background-color:green}.dv-debug .dv-resize-container .dv-resize-handle-left{background-color:#ff0}.dv-debug .dv-resize-container .dv-resize-handle-right{background-color:#00f}.dv-debug .dv-resize-container .dv-resize-handle-topleft,.dv-debug .dv-resize-container .dv-resize-handle-topright,.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,.dv-debug .dv-resize-container .dv-resize-handle-bottomright{background-color:#0ff}.dv-resize-container{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:calc(var(--dv-overlay-z-index) - 2);border:1px solid var(--dv-tab-divider-color);box-shadow:var(--dv-floating-box-shadow);will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden}.dv-resize-container.dv-hidden{display:none}.dv-resize-container.dv-resize-container-dragging{opacity:.5;will-change:transform,opacity}.dv-resize-container .dv-resize-handle-top{height:4px;width:calc(100% - 8px);left:4px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-bottom{height:4px;width:calc(100% - 8px);left:4px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-left{height:calc(100% - 8px);width:4px;left:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-right{height:calc(100% - 8px);width:4px;right:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-topleft{height:4px;width:4px;top:-2px;left:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:nw-resize}.dv-resize-container .dv-resize-handle-topright{height:4px;width:4px;right:-2px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ne-resize}.dv-resize-container .dv-resize-handle-bottomleft{height:4px;width:4px;left:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:sw-resize}.dv-resize-container .dv-resize-handle-bottomright{height:4px;width:4px;right:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:se-resize}.dv-render-overlay{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:1;width:100%;height:100%;contain:layout paint;isolation:isolate;will-change:transform;transform:translateZ(0);backface-visibility:hidden}.dv-render-overlay.dv-render-overlay-float{z-index:calc(var(--dv-overlay-z-index) - 1)}.dv-debug .dv-render-overlay{outline:1px solid red;outline-offset:-1}.dv-pane-container{height:100%;width:100%}.dv-pane-container.dv-animated .dv-view{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-pane-container .dv-view{overflow:hidden;display:flex;flex-direction:column;padding:0!important}.dv-pane-container .dv-view:not(:first-child):before{background-color:transparent!important}.dv-pane-container .dv-view:not(:first-child) .dv-pane>.dv-pane-header{border-top:1px solid var(--dv-paneview-header-border-color)}.dv-pane-container .dv-view .dv-default-header{background-color:var(--dv-group-view-background-color);color:var(--dv-activegroup-visiblepanel-tab-color);display:flex;padding:0 8px;cursor:pointer}.dv-pane-container .dv-view .dv-default-header .dv-pane-header-icon{display:flex;justify-content:center;align-items:center}.dv-pane-container .dv-view .dv-default-header>span{padding-left:8px;flex-grow:1}.dv-pane-container:first-of-type>.dv-pane>.dv-pane-header{border-top:none!important}.dv-pane-container .dv-pane{display:flex;flex-direction:column;overflow:hidden;height:100%}.dv-pane-container .dv-pane .dv-pane-header{box-sizing:border-box;-webkit-user-select:none;user-select:none;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-header.dv-pane-draggable{cursor:pointer}.dv-pane-container .dv-pane .dv-pane-header:focus:before,.dv-pane-container .dv-pane .dv-pane-header:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:\"\";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-pane-container .dv-pane .dv-pane-body{overflow-y:auto;overflow-x:hidden;flex-grow:1;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-body:focus:before,.dv-pane-container .dv-pane .dv-pane-body:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:\"\";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-enabled{background-color:#000}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-disabled{background-color:orange}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-maximum{background-color:green}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-minimum{background-color:red}.dv-split-view-container{position:relative;overflow:hidden;height:100%;width:100%}.dv-split-view-container.dv-splitview-disabled>.dv-sash-container>.dv-sash{pointer-events:none}.dv-split-view-container.dv-animation .dv-view,.dv-split-view-container.dv-animation .dv-sash{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-split-view-container.dv-horizontal{height:100%}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash{height:100%;width:4px}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-enabled{cursor:ew-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-maximum{cursor:w-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-minimum{cursor:e-resize}.dv-split-view-container.dv-horizontal>.dv-view-container>.dv-view:not(:first-child):before{height:100%;width:1px}.dv-split-view-container.dv-vertical{width:100%}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash{width:100%;height:4px}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-enabled{cursor:ns-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-maximum{cursor:n-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-minimum{cursor:s-resize}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view{width:100%}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view:not(:first-child):before{height:1px;width:100%}.dv-split-view-container .dv-sash-container{height:100%;width:100%;position:absolute}.dv-split-view-container .dv-sash-container .dv-sash{position:absolute;z-index:99;outline:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;touch-action:none;background-color:var(--dv-sash-color, transparent)}.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):active,.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):hover{background-color:var(--dv-active-sash-color, transparent);transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:var(--dv-active-sash-transition-duration, .1s);transition-delay:var(--dv-active-sash-transition-delay, .5s)}.dv-split-view-container .dv-view-container{position:relative;height:100%;width:100%}.dv-split-view-container .dv-view-container .dv-view{height:100%;box-sizing:border-box;overflow:auto;position:absolute}.dv-split-view-container.dv-separator-border .dv-view:not(:first-child):before{content:\" \";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-separator-border)}.dv-dragged{transform:translateZ(0)}.dv-tab{flex-shrink:0}.dv-tab:focus-within,.dv-tab:focus{position:relative}.dv-tab:focus-within:after,.dv-tab:focus:after{position:absolute;content:\"\";height:100%;width:100%;top:0;left:0;pointer-events:none;outline:1px solid var(--dv-tab-divider-color)!important;outline-offset:-1px;z-index:5}.dv-tab.dv-tab-dragging .dv-default-tab-action{background-color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tab.dv-active-tab .dv-default-tab .dv-default-tab-action{visibility:visible}.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action{visibility:hidden}.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action{visibility:visible}.dv-tab .dv-default-tab{position:relative;height:100%;width:100%;display:flex;align-items:center;white-space:nowrap;text-overflow:ellipsis}.dv-tab .dv-default-tab .dv-default-tab-content{flex-grow:1;margin-right:4px}.dv-tab .dv-default-tab .dv-default-tab-action{padding:4px;display:flex;align-items:center;justify-content:center;box-sizing:border-box}.dv-tab .dv-default-tab .dv-default-tab-action:hover{border-radius:2px;background-color:var(--dv-icon-hover-background-color)}.dv-tabs-overflow-dropdown-default{height:100%;color:var(--dv-activegroup-hiddenpanel-tab-color);margin:var(--dv-tab-margin);display:flex;align-items:center;flex-shrink:0;padding:.25rem .5rem;cursor:pointer}.dv-tabs-overflow-dropdown-default>span{padding-left:.25rem}.dv-tabs-overflow-dropdown-default>svg{transform:rotate(90deg)}.dv-tabs-container{display:flex;height:100%;overflow:auto;scrollbar-width:thin;will-change:scroll-position;transform:translateZ(0)}.dv-tabs-container.dv-tabs-container-vertical{width:100%;height:fit-content;max-height:100%;writing-mode:vertical-rl}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before,.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{content:\" \";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-tab-divider-color)}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before{width:1px;height:100%}.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{width:100%;height:1px}.dv-tabs-container::-webkit-scrollbar{height:3px}.dv-tabs-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color)}.dv-scrollable>.dv-tabs-container{overflow:hidden}.dv-tab{-webkit-user-drag:element;outline:none;padding:.25rem .5rem;cursor:pointer;position:relative;box-sizing:border-box;font-size:var(--dv-tab-font-size);margin:var(--dv-tab-margin)}.dv-tabs-container-vertical .dv-tab{padding:.5rem .25rem}.dv-tabs-overflow-container{flex-direction:column;height:unset;max-height:min(50vh,400px);overflow-y:auto;border:1px solid var(--dv-tab-divider-color);background-color:var(--dv-group-view-background-color);scrollbar-width:thin}.dv-tabs-overflow-container::-webkit-scrollbar{width:6px}.dv-tabs-overflow-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-overflow-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color);border-radius:3px}.dv-tabs-overflow-container .dv-tab:not(:last-child){border-bottom:1px solid var(--dv-tab-divider-color)}.dv-tabs-overflow-container .dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tabs-overflow-container .dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-tabs-and-actions-container{display:flex;background-color:var(--dv-tabs-and-actions-container-background-color);flex-shrink:0;box-sizing:border-box;height:var(--dv-tabs-and-actions-container-height);font-size:var(--dv-tabs-and-actions-container-font-size)}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-scrollable,.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container{flex-grow:1}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab{flex-grow:1;padding:0}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-void-container{flex-grow:0}.dv-tabs-and-actions-container .dv-void-container{display:flex;flex-grow:1}.dv-tabs-and-actions-container .dv-void-container.dv-draggable{cursor:grab}.dv-tabs-and-actions-container .dv-right-actions-container{display:flex}.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical{flex-direction:column}.dv-tabs-and-actions-container.dv-groupview-header-vertical{flex-direction:column;height:auto;width:var(--dv-tabs-and-actions-container-height)}.dv-watermark{display:flex;height:100%}mm-dockview{display:block;width:100%;height:100%;position:relative}.dv-dockview-container{width:100%;height:100%;position:absolute;inset:0}.dv-dockview{width:100%;height:100%}.dv-dockview,.dv-grid-view{background-color:var(--dv-background-color, #fafafa);--dv-background-color: #fafafa;--dv-pane-background-color: #ffffff;--dv-tabs-and-actions-container-background-color: #f5f5f5;--dv-activegroup-visiblepanel-tab-background-color: #ffffff;--dv-activegroup-hiddenpanel-tab-background-color: #e8e8e8;--dv-inactivegroup-visiblepanel-tab-background-color: #f0f0f0;--dv-inactivegroup-hiddenpanel-tab-background-color: #e0e0e0;--dv-tab-divider-color: #e0e0e0;--dv-activegroup-visiblepanel-tab-color: #333333;--dv-activegroup-hiddenpanel-tab-color: #666666;--dv-inactivegroup-visiblepanel-tab-color: #666666;--dv-inactivegroup-hiddenpanel-tab-color: #999999;--dv-separator-border: 1px solid #e0e0e0;--dv-group-view-background-color: #ffffff;--dv-tabs-overflow-dropdown-background-color: #f5f5f5;--dv-icon-hover-background-color: #e0e0e0}.dv-tabs-overflow-container{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5);border:1px solid var(--dv-tab-divider-color, #e0e0e0);border-radius:4px;box-shadow:0 2px 8px #00000026}.dv-tabs-container{background-color:var(--dv-tabs-and-actions-container-background-color, #f5f5f5)}div[style*=--dv-overlay-z-index]{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5);border-radius:4px}div[style*=--dv-overlay-z-index] .dv-tabs-overflow-container{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5)}div[style*=--dv-overlay-z-index] .dv-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color, #e8e8e8);color:var(--dv-activegroup-hiddenpanel-tab-color, #666666)}div[style*=--dv-overlay-z-index] .dv-tab:hover{background-color:var(--dv-icon-hover-background-color, #d8d8d8)}div[style*=--dv-overlay-z-index] .dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color, #ffffff);color:var(--dv-activegroup-visiblepanel-tab-color, #333333)}div[style*=--dv-overlay-z-index] .dv-default-tab{background-color:transparent}.dv-tab{font-size:12px;font-weight:500;background-color:var(--dv-activegroup-hiddenpanel-tab-background-color, #e8e8e8);color:var(--dv-activegroup-hiddenpanel-tab-color, #666666)}.dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color, #ffffff);color:var(--dv-activegroup-visiblepanel-tab-color, #333333)}.dv-default-tab{display:flex;align-items:center}.dv-default-tab-content{flex:1}.dv-default-tab-action{flex-shrink:0;opacity:.5;transition:opacity .15s ease}.dv-default-tab-action:hover{opacity:1}.dv-sash{background:var(--dv-sash-color, #e0e0e0)}.dv-sash:hover,.dv-sash.dv-active{background:var(--dv-sash-hover-color, #1976d2)}.dv-drop-target-dropzone{background:var(--dv-drag-over-background-color, rgba(25, 118, 210, .15));border:2px dashed var(--dv-drag-over-border-color, #1976d2);border-radius:4px}.dv-floating-group{box-shadow:0 4px 20px #00000026;border-radius:4px;overflow:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6274
6274
  }
6275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DockviewComponent, decorators: [{
6275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DockviewComponent, decorators: [{
6276
6276
  type: Component,
6277
6277
  args: [{ selector: 'mm-dockview', standalone: true, template: '<div #dockviewContainer class="dv-dockview-container"></div>', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".dv-scrollable{position:relative;overflow:hidden}.dv-scrollable .dv-scrollbar{position:absolute;border-radius:2px;background-color:transparent;will-change:background-color,transform;transform:translateZ(0);backface-visibility:hidden;transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:1s;transition-delay:0s}.dv-scrollable .dv-scrollbar-horizontal{bottom:0;left:0;height:4px}.dv-scrollable .dv-scrollbar-vertical{right:0;top:0;width:4px}.dv-scrollable:hover .dv-scrollbar,.dv-scrollable.dv-scrollable-resizing .dv-scrollbar,.dv-scrollable.dv-scrollable-scrolling .dv-scrollbar{background-color:var(--dv-scrollbar-background-color, rgba(255, 255, 255, .25))}.dv-svg{display:inline-block;fill:currentcolor;line-height:1;stroke:currentcolor;stroke-width:0}.dockview-theme-dark{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2)}.dockview-theme-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-light{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: white;--dv-tabs-and-actions-container-background-color: #f3f3f3;--dv-activegroup-visiblepanel-tab-background-color: white;--dv-activegroup-hiddenpanel-tab-background-color: #ececec;--dv-inactivegroup-visiblepanel-tab-background-color: white;--dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;--dv-tab-divider-color: white;--dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .35);--dv-separator-border: rgba(128, 128, 128, .35);--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-scrollbar-background-color: rgba(0, 0, 0, .25)}.dockview-theme-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-vs{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2);--dv-tabs-and-actions-container-background-color: #2d2d30;--dv-tabs-and-actions-container-height: 20px;--dv-tabs-and-actions-container-font-size: 11px;--dv-activegroup-visiblepanel-tab-background-color: #007acc;--dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: white;--dv-inactivegroup-visiblepanel-tab-color: white;--dv-inactivegroup-hiddenpanel-tab-color: white}.dockview-theme-vs .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-activegroup-hiddenpanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color)}.dockview-theme-abyss{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-color-abyss-dark: #000c18;--dv-color-abyss: #10192c;--dv-color-abyss-light: #1c1c2a;--dv-color-abyss-lighter: #2b2b4a;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var( --dv-color-abyss-light );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-activegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-inactivegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-tab-divider-color: var(--dv-color-abyss-lighter);--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .25);--dv-separator-border: var(--dv-color-abyss-lighter);--dv-paneview-header-border-color: var(--dv-color-abyss-lighter);--dv-paneview-active-outline-color: #596f99}.dockview-theme-abyss .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dracula{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-group-view-background-color: #282a36;--dv-tabs-and-actions-container-background-color: #191a21;--dv-activegroup-visiblepanel-tab-background-color: #282a36;--dv-activegroup-hiddenpanel-tab-background-color: #21222c;--dv-inactivegroup-visiblepanel-tab-background-color: #282a36;--dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;--dv-tab-divider-color: #191a21;--dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);--dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);--dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, .5);--dv-separator-border: #bd93f9;--dv-paneview-header-border-color: #bd93f9;--dv-paneview-active-outline-color: #6272a4}.dockview-theme-dracula .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;top:0;content:\"\";width:100%;height:1px;background-color:#94527e;z-index:999}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:\"\";width:100%;height:1px;background-color:#5e3d5a;z-index:999}.dockview-theme-replit{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;box-sizing:border-box;padding:10px;background-color:#ebeced;--dv-group-view-background-color: #ebeced;--dv-tabs-and-actions-container-background-color: #fcfcfc;--dv-activegroup-visiblepanel-tab-background-color: #f0f1f2;--dv-activegroup-hiddenpanel-tab-background-color: #fcfcfc;--dv-inactivegroup-visiblepanel-tab-background-color: #f0f1f2;--dv-inactivegroup-hiddenpanel-tab-background-color: #fcfcfc;--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-activegroup-hiddenpanel-tab-color: rgb(51, 51, 51);--dv-inactivegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-inactivegroup-hiddenpanel-tab-color: rgb(51, 51, 51);--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-sash-color: #cfd1d3;--dv-active-sash-color: #babbbb}.dockview-theme-replit .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-replit .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-replit .dv-resize-container{border-radius:10px!important;border:none}.dockview-theme-replit .dv-groupview{overflow:hidden;border-radius:10px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container{border-bottom:1px solid rgba(128,128,128,.35)}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab{margin:4px;border-radius:8px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-replit .dv-groupview .dv-tabs-and-actions-container .dv-tab:hover{background-color:#e4e5e6!important}.dockview-theme-replit .dv-groupview .dv-content-container{background-color:#fcfcfc}.dockview-theme-replit .dv-groupview.dv-active-group{border:1px solid rgba(128,128,128,.35)}.dockview-theme-replit .dv-groupview.dv-inactive-group{border:1px solid transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash{background-color:transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):after{content:\"\";height:4px;width:40px;border-radius:2px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--dv-sash-color);position:absolute}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):hover,.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):active{background-color:transparent}.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):hover:after,.dockview-theme-replit .dv-vertical>.dv-sash-container>.dv-sash:not(.disabled):active:after{background-color:var(--dv-active-sash-color)}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash{background-color:transparent}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):after{content:\"\";height:40px;width:4px;border-radius:2px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--dv-sash-color);position:absolute}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):hover,.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):active{background-color:transparent}.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):hover:after,.dockview-theme-replit .dv-horizontal>.dv-sash-container>.dv-sash:not(.disabled):active:after{background-color:var(--dv-active-sash-color)}.dockview-theme-abyss-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-tab-font-size: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-border-radius: 20px;box-sizing:border-box;--dv-color-abyss-dark: rgb(11, 6, 17);--dv-color-abyss: #16121f;--dv-color-abyss-light: #201d2b;--dv-color-abyss-lighter: #2a2837;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-drag-over-border: 2px solid var(--dv-color-abyss-accent);--dv-drag-over-background-color: \"\";--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var(--dv-color-abyss);--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: var(--dv-color-abyss-primary-text);--dv-activegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-inactivegroup-visiblepanel-tab-color: var( --dv-color-abyss-primary-text );--dv-inactivegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: var(--dv-color-abyss-accent);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, .5);padding:10px;background-color:var(--dv-color-abyss-dark)}.dockview-theme-abyss-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-abyss-spaced .dv-sash{border-radius:4px}.dockview-theme-abyss-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-abyss-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-abyss-spaced .dv-tabs-overflow-container,.dockview-theme-abyss-spaced .dv-tabs-overflow-dropdown-default{border-radius:8px;height:unset!important}.dockview-theme-abyss-spaced .dv-tab{border-radius:8px}.dockview-theme-abyss-spaced .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-abyss-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2)}.dockview-theme-abyss-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color)}.dockview-theme-abyss-spaced .dv-resize-container .dv-groupview{border:2px solid var(--dv-color-abyss-dark)}.dockview-theme-light-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(83, 89, 93, .5);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-tab-font-size: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-border-radius: 20px;box-sizing:border-box;--dv-drag-over-border: 2px solid rgb(91, 30, 207);--dv-drag-over-background-color: \"\";--dv-group-view-background-color: #f6f5f9;--dv-tabs-and-actions-container-background-color: white;--dv-activegroup-visiblepanel-tab-background-color: #ededf0;--dv-activegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-inactivegroup-visiblepanel-tab-background-color: #ededf0;--dv-inactivegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-activegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-inactivegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-inactivegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: rgb(91, 30, 207);--dv-floating-box-shadow: 8px 8px 8px 0px rgba(0, 0, 0, .1);padding:10px;background-color:#f6f5f9;--dv-scrollbar-background-color: rgba(0, 0, 0, .25)}.dockview-theme-light-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-light-spaced .dv-sash{border-radius:4px}.dockview-theme-light-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-light-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-light-spaced .dv-tabs-overflow-container,.dockview-theme-light-spaced .dv-tabs-overflow-dropdown-default{border-radius:8px;height:unset!important}.dockview-theme-light-spaced .dv-tab{border-radius:8px}.dockview-theme-light-spaced .dv-tab .dv-svg{height:8px;width:8px}.dockview-theme-light-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2)}.dockview-theme-light-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color)}.dockview-theme-light-spaced .dv-resize-container .dv-groupview{border:2px solid rgba(255,255,255,.1)}.dv-drop-target-container{position:absolute;z-index:9999;top:0;left:0;height:100%;width:100%;pointer-events:none;overflow:hidden;--dv-transition-duration: .3s}.dv-drop-target-container .dv-drop-target-anchor{position:relative;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);opacity:1;will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden;contain:layout paint;transition:opacity var(--dv-transition-duration) ease-in,transform var(--dv-transition-duration) ease-out}.dv-drop-target{position:relative;--dv-transition-duration: 70ms}.dv-drop-target>.dv-drop-target-dropzone{position:absolute;left:0;top:0;height:100%;width:100%;z-index:1000;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection{position:relative;box-sizing:border-box;height:100%;width:100%;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);transition:top var(--dv-transition-duration) ease-out,left var(--dv-transition-duration) ease-out,width var(--dv-transition-duration) ease-out,height var(--dv-transition-duration) ease-out,opacity var(--dv-transition-duration) ease-out;will-change:transform;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical{border-top:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical{border-bottom:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal{border-left:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal{border-right:1px solid var(--dv-drag-over-border-color)}.dv-dockview{position:relative;background-color:var(--dv-group-view-background-color);contain:layout}.dv-dockview .dv-watermark-container{position:absolute;top:0;left:0;height:100%;width:100%;z-index:1}.dv-dockview .dv-overlay-render-container{position:relative}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-inactivegroup-visiblepanel-tab-background-color);color:var(--dv-inactivegroup-visiblepanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-inactivegroup-hiddenpanel-tab-background-color);color:var(--dv-inactivegroup-hiddenpanel-tab-color)}.dv-tab.dv-tab-dragging{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview{display:flex;height:100%;background-color:var(--dv-group-view-background-color);overflow:hidden;flex-direction:column}.dv-groupview:focus{outline:none}.dv-groupview>.dv-content-container{flex-grow:1;min-height:0;outline:none}.dv-groupview.dv-groupview-header-bottom{flex-direction:column-reverse}.dv-groupview.dv-groupview-header-left{flex-direction:row}.dv-groupview.dv-groupview-header-right{flex-direction:row-reverse}.dv-root-wrapper,.dv-grid-view,.dv-branch-node{height:100%;width:100%}.dv-debug .dv-resize-container .dv-resize-handle-top{background-color:red}.dv-debug .dv-resize-container .dv-resize-handle-bottom{background-color:green}.dv-debug .dv-resize-container .dv-resize-handle-left{background-color:#ff0}.dv-debug .dv-resize-container .dv-resize-handle-right{background-color:#00f}.dv-debug .dv-resize-container .dv-resize-handle-topleft,.dv-debug .dv-resize-container .dv-resize-handle-topright,.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,.dv-debug .dv-resize-container .dv-resize-handle-bottomright{background-color:#0ff}.dv-resize-container{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:calc(var(--dv-overlay-z-index) - 2);border:1px solid var(--dv-tab-divider-color);box-shadow:var(--dv-floating-box-shadow);will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden}.dv-resize-container.dv-hidden{display:none}.dv-resize-container.dv-resize-container-dragging{opacity:.5;will-change:transform,opacity}.dv-resize-container .dv-resize-handle-top{height:4px;width:calc(100% - 8px);left:4px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-bottom{height:4px;width:calc(100% - 8px);left:4px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-left{height:calc(100% - 8px);width:4px;left:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-right{height:calc(100% - 8px);width:4px;right:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-topleft{height:4px;width:4px;top:-2px;left:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:nw-resize}.dv-resize-container .dv-resize-handle-topright{height:4px;width:4px;right:-2px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ne-resize}.dv-resize-container .dv-resize-handle-bottomleft{height:4px;width:4px;left:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:sw-resize}.dv-resize-container .dv-resize-handle-bottomright{height:4px;width:4px;right:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:se-resize}.dv-render-overlay{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:1;width:100%;height:100%;contain:layout paint;isolation:isolate;will-change:transform;transform:translateZ(0);backface-visibility:hidden}.dv-render-overlay.dv-render-overlay-float{z-index:calc(var(--dv-overlay-z-index) - 1)}.dv-debug .dv-render-overlay{outline:1px solid red;outline-offset:-1}.dv-pane-container{height:100%;width:100%}.dv-pane-container.dv-animated .dv-view{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-pane-container .dv-view{overflow:hidden;display:flex;flex-direction:column;padding:0!important}.dv-pane-container .dv-view:not(:first-child):before{background-color:transparent!important}.dv-pane-container .dv-view:not(:first-child) .dv-pane>.dv-pane-header{border-top:1px solid var(--dv-paneview-header-border-color)}.dv-pane-container .dv-view .dv-default-header{background-color:var(--dv-group-view-background-color);color:var(--dv-activegroup-visiblepanel-tab-color);display:flex;padding:0 8px;cursor:pointer}.dv-pane-container .dv-view .dv-default-header .dv-pane-header-icon{display:flex;justify-content:center;align-items:center}.dv-pane-container .dv-view .dv-default-header>span{padding-left:8px;flex-grow:1}.dv-pane-container:first-of-type>.dv-pane>.dv-pane-header{border-top:none!important}.dv-pane-container .dv-pane{display:flex;flex-direction:column;overflow:hidden;height:100%}.dv-pane-container .dv-pane .dv-pane-header{box-sizing:border-box;-webkit-user-select:none;user-select:none;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-header.dv-pane-draggable{cursor:pointer}.dv-pane-container .dv-pane .dv-pane-header:focus:before,.dv-pane-container .dv-pane .dv-pane-header:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:\"\";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-pane-container .dv-pane .dv-pane-body{overflow-y:auto;overflow-x:hidden;flex-grow:1;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-body:focus:before,.dv-pane-container .dv-pane .dv-pane-body:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:\"\";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-enabled{background-color:#000}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-disabled{background-color:orange}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-maximum{background-color:green}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-minimum{background-color:red}.dv-split-view-container{position:relative;overflow:hidden;height:100%;width:100%}.dv-split-view-container.dv-splitview-disabled>.dv-sash-container>.dv-sash{pointer-events:none}.dv-split-view-container.dv-animation .dv-view,.dv-split-view-container.dv-animation .dv-sash{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-split-view-container.dv-horizontal{height:100%}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash{height:100%;width:4px}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-enabled{cursor:ew-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-maximum{cursor:w-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-minimum{cursor:e-resize}.dv-split-view-container.dv-horizontal>.dv-view-container>.dv-view:not(:first-child):before{height:100%;width:1px}.dv-split-view-container.dv-vertical{width:100%}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash{width:100%;height:4px}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-enabled{cursor:ns-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-maximum{cursor:n-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-minimum{cursor:s-resize}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view{width:100%}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view:not(:first-child):before{height:1px;width:100%}.dv-split-view-container .dv-sash-container{height:100%;width:100%;position:absolute}.dv-split-view-container .dv-sash-container .dv-sash{position:absolute;z-index:99;outline:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;touch-action:none;background-color:var(--dv-sash-color, transparent)}.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):active,.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):hover{background-color:var(--dv-active-sash-color, transparent);transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:var(--dv-active-sash-transition-duration, .1s);transition-delay:var(--dv-active-sash-transition-delay, .5s)}.dv-split-view-container .dv-view-container{position:relative;height:100%;width:100%}.dv-split-view-container .dv-view-container .dv-view{height:100%;box-sizing:border-box;overflow:auto;position:absolute}.dv-split-view-container.dv-separator-border .dv-view:not(:first-child):before{content:\" \";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-separator-border)}.dv-dragged{transform:translateZ(0)}.dv-tab{flex-shrink:0}.dv-tab:focus-within,.dv-tab:focus{position:relative}.dv-tab:focus-within:after,.dv-tab:focus:after{position:absolute;content:\"\";height:100%;width:100%;top:0;left:0;pointer-events:none;outline:1px solid var(--dv-tab-divider-color)!important;outline-offset:-1px;z-index:5}.dv-tab.dv-tab-dragging .dv-default-tab-action{background-color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tab.dv-active-tab .dv-default-tab .dv-default-tab-action{visibility:visible}.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action{visibility:hidden}.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action{visibility:visible}.dv-tab .dv-default-tab{position:relative;height:100%;width:100%;display:flex;align-items:center;white-space:nowrap;text-overflow:ellipsis}.dv-tab .dv-default-tab .dv-default-tab-content{flex-grow:1;margin-right:4px}.dv-tab .dv-default-tab .dv-default-tab-action{padding:4px;display:flex;align-items:center;justify-content:center;box-sizing:border-box}.dv-tab .dv-default-tab .dv-default-tab-action:hover{border-radius:2px;background-color:var(--dv-icon-hover-background-color)}.dv-tabs-overflow-dropdown-default{height:100%;color:var(--dv-activegroup-hiddenpanel-tab-color);margin:var(--dv-tab-margin);display:flex;align-items:center;flex-shrink:0;padding:.25rem .5rem;cursor:pointer}.dv-tabs-overflow-dropdown-default>span{padding-left:.25rem}.dv-tabs-overflow-dropdown-default>svg{transform:rotate(90deg)}.dv-tabs-container{display:flex;height:100%;overflow:auto;scrollbar-width:thin;will-change:scroll-position;transform:translateZ(0)}.dv-tabs-container.dv-tabs-container-vertical{width:100%;height:fit-content;max-height:100%;writing-mode:vertical-rl}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before,.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{content:\" \";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-tab-divider-color)}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before{width:1px;height:100%}.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{width:100%;height:1px}.dv-tabs-container::-webkit-scrollbar{height:3px}.dv-tabs-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color)}.dv-scrollable>.dv-tabs-container{overflow:hidden}.dv-tab{-webkit-user-drag:element;outline:none;padding:.25rem .5rem;cursor:pointer;position:relative;box-sizing:border-box;font-size:var(--dv-tab-font-size);margin:var(--dv-tab-margin)}.dv-tabs-container-vertical .dv-tab{padding:.5rem .25rem}.dv-tabs-overflow-container{flex-direction:column;height:unset;max-height:min(50vh,400px);overflow-y:auto;border:1px solid var(--dv-tab-divider-color);background-color:var(--dv-group-view-background-color);scrollbar-width:thin}.dv-tabs-overflow-container::-webkit-scrollbar{width:6px}.dv-tabs-overflow-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-overflow-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color);border-radius:3px}.dv-tabs-overflow-container .dv-tab:not(:last-child){border-bottom:1px solid var(--dv-tab-divider-color)}.dv-tabs-overflow-container .dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tabs-overflow-container .dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-tabs-and-actions-container{display:flex;background-color:var(--dv-tabs-and-actions-container-background-color);flex-shrink:0;box-sizing:border-box;height:var(--dv-tabs-and-actions-container-height);font-size:var(--dv-tabs-and-actions-container-font-size)}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-scrollable,.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container{flex-grow:1}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab{flex-grow:1;padding:0}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-void-container{flex-grow:0}.dv-tabs-and-actions-container .dv-void-container{display:flex;flex-grow:1}.dv-tabs-and-actions-container .dv-void-container.dv-draggable{cursor:grab}.dv-tabs-and-actions-container .dv-right-actions-container{display:flex}.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical{flex-direction:column}.dv-tabs-and-actions-container.dv-groupview-header-vertical{flex-direction:column;height:auto;width:var(--dv-tabs-and-actions-container-height)}.dv-watermark{display:flex;height:100%}mm-dockview{display:block;width:100%;height:100%;position:relative}.dv-dockview-container{width:100%;height:100%;position:absolute;inset:0}.dv-dockview{width:100%;height:100%}.dv-dockview,.dv-grid-view{background-color:var(--dv-background-color, #fafafa);--dv-background-color: #fafafa;--dv-pane-background-color: #ffffff;--dv-tabs-and-actions-container-background-color: #f5f5f5;--dv-activegroup-visiblepanel-tab-background-color: #ffffff;--dv-activegroup-hiddenpanel-tab-background-color: #e8e8e8;--dv-inactivegroup-visiblepanel-tab-background-color: #f0f0f0;--dv-inactivegroup-hiddenpanel-tab-background-color: #e0e0e0;--dv-tab-divider-color: #e0e0e0;--dv-activegroup-visiblepanel-tab-color: #333333;--dv-activegroup-hiddenpanel-tab-color: #666666;--dv-inactivegroup-visiblepanel-tab-color: #666666;--dv-inactivegroup-hiddenpanel-tab-color: #999999;--dv-separator-border: 1px solid #e0e0e0;--dv-group-view-background-color: #ffffff;--dv-tabs-overflow-dropdown-background-color: #f5f5f5;--dv-icon-hover-background-color: #e0e0e0}.dv-tabs-overflow-container{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5);border:1px solid var(--dv-tab-divider-color, #e0e0e0);border-radius:4px;box-shadow:0 2px 8px #00000026}.dv-tabs-container{background-color:var(--dv-tabs-and-actions-container-background-color, #f5f5f5)}div[style*=--dv-overlay-z-index]{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5);border-radius:4px}div[style*=--dv-overlay-z-index] .dv-tabs-overflow-container{background-color:var(--dv-tabs-overflow-dropdown-background-color, #f5f5f5)}div[style*=--dv-overlay-z-index] .dv-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color, #e8e8e8);color:var(--dv-activegroup-hiddenpanel-tab-color, #666666)}div[style*=--dv-overlay-z-index] .dv-tab:hover{background-color:var(--dv-icon-hover-background-color, #d8d8d8)}div[style*=--dv-overlay-z-index] .dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color, #ffffff);color:var(--dv-activegroup-visiblepanel-tab-color, #333333)}div[style*=--dv-overlay-z-index] .dv-default-tab{background-color:transparent}.dv-tab{font-size:12px;font-weight:500;background-color:var(--dv-activegroup-hiddenpanel-tab-background-color, #e8e8e8);color:var(--dv-activegroup-hiddenpanel-tab-color, #666666)}.dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color, #ffffff);color:var(--dv-activegroup-visiblepanel-tab-color, #333333)}.dv-default-tab{display:flex;align-items:center}.dv-default-tab-content{flex:1}.dv-default-tab-action{flex-shrink:0;opacity:.5;transition:opacity .15s ease}.dv-default-tab-action:hover{opacity:1}.dv-sash{background:var(--dv-sash-color, #e0e0e0)}.dv-sash:hover,.dv-sash.dv-active{background:var(--dv-sash-hover-color, #1976d2)}.dv-drop-target-dropzone{background:var(--dv-drag-over-background-color, rgba(25, 118, 210, .15));border:2px dashed var(--dv-drag-over-border-color, #1976d2);border-radius:4px}.dv-floating-group{box-shadow:0 4px 20px #00000026;border-radius:4px;overflow:hidden}\n"] }]
6278
6278
  }], propDecorators: { containerRef: [{
@@ -6436,8 +6436,8 @@ class ElementPaletteComponent {
6436
6436
  onDragEnd(_event, item) {
6437
6437
  this.elementDragEnd.emit(item);
6438
6438
  }
6439
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ElementPaletteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6440
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ElementPaletteComponent, isStandalone: true, selector: "mm-element-palette", outputs: { elementDragStart: "elementDragStart", elementDragEnd: "elementDragEnd" }, ngImport: i0, template: `
6439
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ElementPaletteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6440
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ElementPaletteComponent, isStandalone: true, selector: "mm-element-palette", outputs: { elementDragStart: "elementDragStart", elementDragEnd: "elementDragEnd" }, ngImport: i0, template: `
6441
6441
  <div class="element-palette" data-testid="element-palette">
6442
6442
  <div class="palette-search">
6443
6443
  <input type="text"
@@ -6514,7 +6514,7 @@ class ElementPaletteComponent {
6514
6514
  </div>
6515
6515
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.element-palette{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.palette-search{flex-shrink:0;padding:.5rem;border-bottom:1px solid #e0e0e0}.palette-search input{width:100%;padding:.5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px;box-sizing:border-box}.palette-search input:focus{outline:none;border-color:#1976d2}.palette-content{flex:1;min-height:0;overflow-y:auto;padding:.5rem}.palette-category{margin-bottom:.5rem}.category-header{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f5f5f5;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.category-header:hover{background:#eee}.category-icon{font-size:10px;color:#666}.category-name{font-size:12px;font-weight:500}.category-count{font-size:11px;color:#999}.category-elements{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem;padding:.5rem 0}.palette-element{display:flex;flex-direction:column;align-items:center;gap:.25rem;padding:.5rem;background:#fff;border:1px solid #e0e0e0;border-radius:4px;cursor:grab;transition:all .15s ease}.palette-element:hover{border-color:#1976d2;box-shadow:0 2px 4px #0000001a}.palette-element:active{cursor:grabbing}.element-preview{width:32px;height:28px;display:flex;align-items:center;justify-content:center}.preview-svg{width:100%;height:100%}.element-label{font-size:10px;text-align:center;color:#666}.no-results{padding:1rem;text-align:center;color:#999;font-size:12px}\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.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"] }] });
6516
6516
  }
6517
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ElementPaletteComponent, decorators: [{
6517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ElementPaletteComponent, decorators: [{
6518
6518
  type: Component,
6519
6519
  args: [{ selector: 'mm-element-palette', standalone: true, imports: [CommonModule, FormsModule], template: `
6520
6520
  <div class="element-palette" data-testid="element-palette">
@@ -6612,9 +6612,9 @@ class SymbolLibraryPanelComponent {
6612
6612
  searchTerm = '';
6613
6613
  expandedLibraries = new Set();
6614
6614
  // Signals
6615
- _libraries = signal([], ...(ngDevMode ? [{ debugName: "_libraries" }] : []));
6616
- _isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
6617
- _error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : []));
6615
+ _libraries = signal([], ...(ngDevMode ? [{ debugName: "_libraries" }] : /* istanbul ignore next */ []));
6616
+ _isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
6617
+ _error = signal(null, ...(ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []));
6618
6618
  isLoading = this._isLoading.asReadonly();
6619
6619
  error = this._error.asReadonly();
6620
6620
  filteredLibraries = computed(() => {
@@ -6633,7 +6633,7 @@ class SymbolLibraryPanelComponent {
6633
6633
  }))
6634
6634
  .filter(library => library.symbols.length > 0 ||
6635
6635
  library.name.toLowerCase().includes(term));
6636
- }, ...(ngDevMode ? [{ debugName: "filteredLibraries" }] : []));
6636
+ }, ...(ngDevMode ? [{ debugName: "filteredLibraries" }] : /* istanbul ignore next */ []));
6637
6637
  ngOnInit() {
6638
6638
  void this.loadLibraries();
6639
6639
  }
@@ -6784,8 +6784,8 @@ class SymbolLibraryPanelComponent {
6784
6784
  const style = this.resolveStyle(primitive, styleClasses);
6785
6785
  return style.stroke?.opacity ?? defaultOpacity;
6786
6786
  }
6787
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6788
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SymbolLibraryPanelComponent, isStandalone: true, selector: "mm-symbol-library-panel", outputs: { symbolDragStart: "symbolDragStart", symbolDragEnd: "symbolDragEnd" }, ngImport: i0, template: `
6787
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6788
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: SymbolLibraryPanelComponent, isStandalone: true, selector: "mm-symbol-library-panel", outputs: { symbolDragStart: "symbolDragStart", symbolDragEnd: "symbolDragEnd" }, ngImport: i0, template: `
6789
6789
  <div class="symbol-library-panel">
6790
6790
  <div class="panel-search">
6791
6791
  <input type="text"
@@ -6962,7 +6962,7 @@ class SymbolLibraryPanelComponent {
6962
6962
  </div>
6963
6963
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.symbol-library-panel{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.panel-search{flex-shrink:0;padding:.5rem;border-bottom:1px solid #e0e0e0}.panel-search input{width:100%;padding:.5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px;box-sizing:border-box}.panel-search input:focus{outline:none;border-color:#9c27b0}.panel-content{flex:1;min-height:0;overflow-y:auto;padding:.5rem}.loading{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:2rem 1rem;color:#666;font-size:12px}.loading-spinner{width:24px;height:24px;border:2px solid #e0e0e0;border-top-color:#9c27b0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1rem;color:#d32f2f;font-size:12px;text-align:center}.error-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:#ffebee;border-radius:50%;font-weight:700;font-size:18px}.retry-btn{padding:.25rem .75rem;background:#fff;border:1px solid #d32f2f;border-radius:4px;color:#d32f2f;font-size:12px;cursor:pointer}.retry-btn:hover{background:#ffebee}.library-section{margin-bottom:.5rem}.library-header{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f3e5f5;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.library-header:hover{background:#e1bee7}.expand-icon{font-size:10px;color:#7b1fa2}.library-name{font-size:12px;font-weight:500;color:#7b1fa2}.library-count{font-size:11px;color:#9c27b0}.library-symbols{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem;padding:.5rem 0}.symbol-item{display:flex;flex-direction:column;align-items:center;gap:.25rem;padding:.5rem;background:#fff;border:1px solid #e0e0e0;border-radius:4px;cursor:grab;transition:all .15s ease}.symbol-item:hover{border-color:#9c27b0;box-shadow:0 2px 4px #9c27b033}.symbol-item:active{cursor:grabbing}.symbol-preview{width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:#fafafa;border-radius:4px;overflow:hidden}.preview-image{max-width:100%;max-height:100%;object-fit:contain}.preview-svg{width:100%;height:100%}.symbol-label{font-size:10px;text-align:center;color:#666;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-library{grid-column:1 / -1;padding:1rem;text-align:center;color:#999;font-size:11px;font-style:italic}.no-results{padding:2rem 1rem;text-align:center;color:#999;font-size:12px}\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.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"] }] });
6964
6964
  }
6965
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryPanelComponent, decorators: [{
6965
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryPanelComponent, decorators: [{
6966
6966
  type: Component,
6967
6967
  args: [{ selector: 'mm-symbol-library-panel', standalone: true, imports: [CommonModule, FormsModule], template: `
6968
6968
  <div class="symbol-library-panel">
@@ -7303,8 +7303,8 @@ class PropertyInspectorComponent {
7303
7303
  // Reset input so same file can be selected again
7304
7304
  input.value = '';
7305
7305
  }
7306
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyInspectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7307
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: PropertyInspectorComponent, isStandalone: true, selector: "mm-property-inspector", inputs: { selectedElements: "selectedElements", selectedConnections: "selectedConnections", selectedPrimitives: "selectedPrimitives", selectedSymbolInstances: "selectedSymbolInstances", symbolDefinitions: "symbolDefinitions", availableStyleClasses: "availableStyleClasses" }, outputs: { propertyChange: "propertyChange" }, ngImport: i0, template: `
7306
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PropertyInspectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7307
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: PropertyInspectorComponent, isStandalone: true, selector: "mm-property-inspector", inputs: { selectedElements: "selectedElements", selectedConnections: "selectedConnections", selectedPrimitives: "selectedPrimitives", selectedSymbolInstances: "selectedSymbolInstances", symbolDefinitions: "symbolDefinitions", availableStyleClasses: "availableStyleClasses" }, outputs: { propertyChange: "propertyChange" }, ngImport: i0, template: `
7308
7308
  <div class="property-inspector">
7309
7309
  <div class="inspector-content">
7310
7310
  @if (selectedElements.length === 0 && selectedConnections.length === 0 && selectedPrimitives.length === 0 && selectedSymbolInstances.length === 0) {
@@ -8253,7 +8253,7 @@ class PropertyInspectorComponent {
8253
8253
  </div>
8254
8254
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.property-inspector{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.inspector-content{flex:1;min-height:0;overflow-y:auto;padding:.5rem}.no-selection,.multi-selection{padding:1rem;text-align:center;color:#666}.hint{font-size:12px;color:#999;margin-top:.5rem}.property-section{margin-bottom:1rem}.section-header{font-size:12px;font-weight:500;color:#666;padding:.5rem 0;border-bottom:1px solid #e0e0e0;margin-bottom:.5rem}.property-group{display:flex;flex-direction:column;gap:.5rem}.property-row{display:flex;align-items:center;gap:.5rem}.property-row label{flex:0 0 80px;font-size:11px;color:#666}.property-row input[type=text],.property-row input[type=number],.property-row select{flex:1;padding:.25rem .5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px}.property-row input[type=text]:focus,.property-row input[type=number]:focus,.property-row select:focus{outline:none;border-color:#1976d2}.property-row input[type=checkbox]{margin:0}.property-row input[type=color]{flex:1;height:28px;padding:2px;border:1px solid #e0e0e0;border-radius:4px}.color-with-opacity{display:flex;align-items:center;gap:.5rem;flex:1}.color-with-opacity input[type=color]{flex:0 0 40px;width:40px}.opacity-slider{flex:1;height:4px;-webkit-appearance:none;appearance:none;background:linear-gradient(to right,transparent,#333);border-radius:2px;cursor:pointer}.opacity-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;background:#1976d2;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0000004d}.opacity-slider::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#1976d2;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0000004d}.opacity-value{flex:0 0 36px;font-size:11px;color:#666;text-align:right}.line-type-select,.style-class-select{flex:1;height:28px;padding:0 .5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px;background:#fff;cursor:pointer}.style-class-select{width:100%}.line-preview{flex:0 0 60px;height:20px;background:#f5f5f5;border:1px solid #e0e0e0;border-radius:4px}.property-row.two-col{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.property-row.two-col>div{display:flex;flex-direction:column;gap:.25rem}.property-row.two-col label{flex:none}.type-badge{display:inline-block;padding:.125rem .5rem;background:#e3f2fd;border-radius:4px;font-size:11px;color:#1976d2}.type-badge.small{padding:.0625rem .375rem;font-size:10px}.exposed-property{flex-direction:column;align-items:flex-start;gap:.25rem}.exposed-property label{font-weight:500;color:#333}.exposed-value{display:flex;align-items:center;gap:.5rem}.default-value{font-size:12px;color:#666}.exposed-hint{font-size:11px;color:#888;margin:.5rem .75rem 0;padding:0;font-style:italic}.info-value{font-size:12px;color:#333}.image-preview-container{display:flex;justify-content:center;padding:.5rem;background:#f5f5f5;border:1px solid #e0e0e0;border-radius:4px;margin-bottom:.5rem}.image-preview{max-width:100%;max-height:100px;object-fit:contain}.file-upload-row{display:flex;align-items:center;gap:.5rem;flex:1}.file-input-hidden{display:none}.file-upload-button{padding:.25rem .75rem;font-size:12px;border:1px solid #1976d2;border-radius:4px;background:#e3f2fd;color:#1976d2;cursor:pointer;white-space:nowrap}.file-upload-button:hover{background:#bbdefb}.file-type-hint{font-size:10px;color:#999}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: InputsModule }, { kind: "ngmodule", type: DropDownsModule }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }] });
8255
8255
  }
8256
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertyInspectorComponent, decorators: [{
8256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PropertyInspectorComponent, decorators: [{
8257
8257
  type: Component,
8258
8258
  args: [{ selector: 'mm-property-inspector', standalone: true, imports: [CommonModule, FormsModule, InputsModule, DropDownsModule, DecimalPipe], template: `
8259
8259
  <div class="property-inspector">
@@ -9265,8 +9265,8 @@ class ContextMenuComponent {
9265
9265
  close() {
9266
9266
  this.closed.emit();
9267
9267
  }
9268
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContextMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9269
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ContextMenuComponent, isStandalone: true, selector: "mm-context-menu", inputs: { position: "position", items: "items" }, outputs: { action: "action", closed: "closed" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "style.left.px": "position.x", "style.top.px": "position.y" } }, ngImport: i0, template: `
9268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ContextMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9269
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ContextMenuComponent, isStandalone: true, selector: "mm-context-menu", inputs: { position: "position", items: "items" }, outputs: { action: "action", closed: "closed" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "style.left.px": "position.x", "style.top.px": "position.y" } }, ngImport: i0, template: `
9270
9270
  <div class="context-menu"
9271
9271
  (click)="$event.stopPropagation()">
9272
9272
  @for (item of items; track item.id) {
@@ -9290,7 +9290,7 @@ class ContextMenuComponent {
9290
9290
  </div>
9291
9291
  `, isInline: true, styles: [":host{position:fixed;z-index:10000}.context-menu{min-width:180px;background:var(--context-menu-bg, #1a2332);border:1px solid var(--context-menu-border, rgba(100, 206, 185, .3));border-radius:4px;box-shadow:0 4px 12px #0006;padding:4px 0;font-size:13px}.menu-item{display:flex;align-items:center;width:100%;padding:8px 12px;border:none;background:none;text-align:left;cursor:pointer;color:var(--context-menu-text, #e0e0e0);gap:8px}.menu-item:hover:not(.disabled){background:var(--context-menu-hover, rgba(100, 206, 185, .15))}.menu-item.disabled{color:var(--context-menu-disabled, #666);cursor:not-allowed}.menu-icon{width:20px;text-align:center;flex-shrink:0}.menu-label{flex:1}.menu-shortcut{color:var(--context-menu-shortcut, #888);font-size:11px;margin-left:16px}.menu-separator{height:1px;background:var(--context-menu-separator, rgba(100, 206, 185, .2));margin:4px 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
9292
9292
  }
9293
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContextMenuComponent, decorators: [{
9293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ContextMenuComponent, decorators: [{
9294
9294
  type: Component,
9295
9295
  args: [{ selector: 'mm-context-menu', standalone: true, imports: [CommonModule], host: {
9296
9296
  '[style.left.px]': 'position.x',
@@ -9345,9 +9345,9 @@ class PathEditorService {
9345
9345
  // ============================================================================
9346
9346
  // State
9347
9347
  // ============================================================================
9348
- _currentPath = signal(null, ...(ngDevMode ? [{ debugName: "_currentPath" }] : []));
9349
- _selectedNodeId = signal(null, ...(ngDevMode ? [{ debugName: "_selectedNodeId" }] : []));
9350
- _isDirty = signal(false, ...(ngDevMode ? [{ debugName: "_isDirty" }] : []));
9348
+ _currentPath = signal(null, ...(ngDevMode ? [{ debugName: "_currentPath" }] : /* istanbul ignore next */ []));
9349
+ _selectedNodeId = signal(null, ...(ngDevMode ? [{ debugName: "_selectedNodeId" }] : /* istanbul ignore next */ []));
9350
+ _isDirty = signal(false, ...(ngDevMode ? [{ debugName: "_isDirty" }] : /* istanbul ignore next */ []));
9351
9351
  /** Current parsed path */
9352
9352
  currentPath = this._currentPath.asReadonly();
9353
9353
  /** Currently selected node ID */
@@ -9355,16 +9355,16 @@ class PathEditorService {
9355
9355
  /** Whether the path has unsaved changes */
9356
9356
  isDirty = this._isDirty.asReadonly();
9357
9357
  /** Current segments */
9358
- segments = computed(() => this._currentPath()?.segments ?? [], ...(ngDevMode ? [{ debugName: "segments" }] : []));
9358
+ segments = computed(() => this._currentPath()?.segments ?? [], ...(ngDevMode ? [{ debugName: "segments" }] : /* istanbul ignore next */ []));
9359
9359
  /** Current nodes for visual editing */
9360
- nodes = computed(() => this._currentPath()?.nodes ?? [], ...(ngDevMode ? [{ debugName: "nodes" }] : []));
9360
+ nodes = computed(() => this._currentPath()?.nodes ?? [], ...(ngDevMode ? [{ debugName: "nodes" }] : /* istanbul ignore next */ []));
9361
9361
  /** Selected node */
9362
9362
  selectedNode = computed(() => {
9363
9363
  const nodeId = this._selectedNodeId();
9364
9364
  if (!nodeId)
9365
9365
  return null;
9366
9366
  return this.nodes().find(n => n.id === nodeId) ?? null;
9367
- }, ...(ngDevMode ? [{ debugName: "selectedNode" }] : []));
9367
+ }, ...(ngDevMode ? [{ debugName: "selectedNode" }] : /* istanbul ignore next */ []));
9368
9368
  // ============================================================================
9369
9369
  // Parsing
9370
9370
  // ============================================================================
@@ -10103,10 +10103,10 @@ class PathEditorService {
10103
10103
  return segment;
10104
10104
  }
10105
10105
  }
10106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PathEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10107
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PathEditorService, providedIn: 'root' });
10106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PathEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10107
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PathEditorService, providedIn: 'root' });
10108
10108
  }
10109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PathEditorService, decorators: [{
10109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PathEditorService, decorators: [{
10110
10110
  type: Injectable,
10111
10111
  args: [{
10112
10112
  providedIn: 'root'
@@ -10121,23 +10121,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
10121
10121
  */
10122
10122
  class PathEditorComponent {
10123
10123
  /** Input path data string */
10124
- pathData = input('', ...(ngDevMode ? [{ debugName: "pathData" }] : []));
10124
+ pathData = input('', ...(ngDevMode ? [{ debugName: "pathData" }] : /* istanbul ignore next */ []));
10125
10125
  /** Width of the editor viewport */
10126
- width = input(300, ...(ngDevMode ? [{ debugName: "width" }] : []));
10126
+ width = input(300, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
10127
10127
  /** Height of the editor viewport */
10128
- height = input(200, ...(ngDevMode ? [{ debugName: "height" }] : []));
10128
+ height = input(200, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
10129
10129
  /** Grid size for snapping (default 10) */
10130
- gridSize = input(10, ...(ngDevMode ? [{ debugName: "gridSize" }] : []));
10130
+ gridSize = input(10, ...(ngDevMode ? [{ debugName: "gridSize" }] : /* istanbul ignore next */ []));
10131
10131
  /** Whether to snap anchor points to grid */
10132
- snapToGrid = input(true, ...(ngDevMode ? [{ debugName: "snapToGrid" }] : []));
10132
+ snapToGrid = input(true, ...(ngDevMode ? [{ debugName: "snapToGrid" }] : /* istanbul ignore next */ []));
10133
10133
  /** Emits when path data changes */
10134
10134
  pathChange = output();
10135
10135
  /** Reference to SVG element */
10136
- svgElement = viewChild('svgElement', ...(ngDevMode ? [{ debugName: "svgElement" }] : []));
10136
+ svgElement = viewChild('svgElement', ...(ngDevMode ? [{ debugName: "svgElement" }] : /* istanbul ignore next */ []));
10137
10137
  /** Currently dragging node */
10138
- _draggingNode = signal(null, ...(ngDevMode ? [{ debugName: "_draggingNode" }] : []));
10138
+ _draggingNode = signal(null, ...(ngDevMode ? [{ debugName: "_draggingNode" }] : /* istanbul ignore next */ []));
10139
10139
  /** Text editor value (separate to avoid parsing loop) */
10140
- textEditorValue = signal('', ...(ngDevMode ? [{ debugName: "textEditorValue" }] : []));
10140
+ textEditorValue = signal('', ...(ngDevMode ? [{ debugName: "textEditorValue" }] : /* istanbul ignore next */ []));
10141
10141
  /** ViewBox bounds for SVG */
10142
10142
  viewBoxBounds = computed(() => {
10143
10143
  const nodes = this.pathService.nodes();
@@ -10156,12 +10156,12 @@ class PathEditorComponent {
10156
10156
  const width = Math.max(maxX - minX + padding * 2, 100);
10157
10157
  const height = Math.max(maxY - minY + padding * 2, 100);
10158
10158
  return { x: minX - padding, y: minY - padding, width, height };
10159
- }, ...(ngDevMode ? [{ debugName: "viewBoxBounds" }] : []));
10159
+ }, ...(ngDevMode ? [{ debugName: "viewBoxBounds" }] : /* istanbul ignore next */ []));
10160
10160
  /** ViewBox string for SVG */
10161
10161
  viewBox = computed(() => {
10162
10162
  const b = this.viewBoxBounds();
10163
10163
  return `${b.x} ${b.y} ${b.width} ${b.height}`;
10164
- }, ...(ngDevMode ? [{ debugName: "viewBox" }] : []));
10164
+ }, ...(ngDevMode ? [{ debugName: "viewBox" }] : /* istanbul ignore next */ []));
10165
10165
  /** Lines connecting control points to their anchor points */
10166
10166
  controlPointLines = computed(() => {
10167
10167
  const lines = [];
@@ -10253,7 +10253,7 @@ class PathEditorComponent {
10253
10253
  }
10254
10254
  }
10255
10255
  return lines;
10256
- }, ...(ngDevMode ? [{ debugName: "controlPointLines" }] : []));
10256
+ }, ...(ngDevMode ? [{ debugName: "controlPointLines" }] : /* istanbul ignore next */ []));
10257
10257
  pathService = inject(PathEditorService);
10258
10258
  /** Flag to prevent circular updates */
10259
10259
  _isUpdating = false;
@@ -10416,8 +10416,8 @@ class PathEditorComponent {
10416
10416
  emitChange() {
10417
10417
  this.pathChange.emit(this.pathService.getCurrentPathString());
10418
10418
  }
10419
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PathEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10420
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: PathEditorComponent, isStandalone: true, selector: "mm-path-editor", inputs: { pathData: { classPropertyName: "pathData", publicName: "pathData", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, gridSize: { classPropertyName: "gridSize", publicName: "gridSize", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pathChange: "pathChange" }, viewQueries: [{ propertyName: "svgElement", first: true, predicate: ["svgElement"], descendants: true, isSignal: true }], ngImport: i0, template: `
10419
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PathEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10420
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: PathEditorComponent, isStandalone: true, selector: "mm-path-editor", inputs: { pathData: { classPropertyName: "pathData", publicName: "pathData", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, gridSize: { classPropertyName: "gridSize", publicName: "gridSize", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pathChange: "pathChange" }, viewQueries: [{ propertyName: "svgElement", first: true, predicate: ["svgElement"], descendants: true, isSignal: true }], ngImport: i0, template: `
10421
10421
  <div class="path-editor">
10422
10422
  <!-- Visual Editor -->
10423
10423
  <div class="visual-editor">
@@ -10535,7 +10535,7 @@ class PathEditorComponent {
10535
10535
  </div>
10536
10536
  `, isInline: true, styles: [".path-editor{display:flex;flex-direction:column;gap:12px;padding:8px;background:#f5f5f5;border-radius:4px;height:100%}.visual-editor{flex:1;display:flex;flex-direction:column;min-height:200px;background:#fff;border:1px solid #ddd;border-radius:4px;overflow:hidden}.path-canvas{flex:1;width:100%;cursor:crosshair}.point-node{fill:#4caf50;stroke:#fff;stroke-width:2;cursor:move}.point-node:hover{fill:#2e7d32}.control-node{fill:#2196f3;stroke:#fff;stroke-width:1.5;cursor:move}.control-node:hover{fill:#1565c0}.selected{stroke:#ff9800;stroke-width:3}.toolbar{display:flex;align-items:center;gap:4px;padding:4px 8px;background:#f9f9f9;border-top:1px solid #ddd}.toolbar-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:1px solid #ccc;border-radius:4px;background:#fff;cursor:pointer;font-size:12px;font-weight:700;color:#333}.toolbar-btn:hover:not(:disabled){background:#e8e8e8}.toolbar-btn:disabled{opacity:.5;cursor:not-allowed}.separator{width:1px;height:20px;background:#ddd;margin:0 4px}.text-editor{display:flex;flex-direction:column;gap:4px}.text-editor label{font-size:12px;font-weight:500;color:#666}.path-textarea{font-family:Monaco,Consolas,monospace;font-size:12px;padding:8px;border:1px solid #ddd;border-radius:4px;resize:vertical;min-height:60px}.path-textarea:focus{outline:none;border-color:#2196f3}.text-editor-footer{display:flex;justify-content:space-between;font-size:11px;color:#888}.status.dirty{color:#ff9800}\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.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10537
10537
  }
10538
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PathEditorComponent, decorators: [{
10538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PathEditorComponent, decorators: [{
10539
10539
  type: Component,
10540
10540
  args: [{ selector: 'mm-path-editor', standalone: true, imports: [CommonModule, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
10541
10541
  <div class="path-editor">
@@ -10985,12 +10985,12 @@ class BindingEditorDialogComponent {
10985
10985
  // Store all bindings for filtering
10986
10986
  _allBindings = [];
10987
10987
  // Internal state
10988
- _visible = signal(false, ...(ngDevMode ? [{ debugName: "_visible" }] : []));
10989
- _property = signal(null, ...(ngDevMode ? [{ debugName: "_property" }] : []));
10990
- _bindings = signal([], ...(ngDevMode ? [{ debugName: "_bindings" }] : []));
10991
- _expandedIndex = signal(null, ...(ngDevMode ? [{ debugName: "_expandedIndex" }] : []));
10992
- _previewInputValue = signal(50, ...(ngDevMode ? [{ debugName: "_previewInputValue" }] : []));
10993
- _previewErrors = signal(new Map(), ...(ngDevMode ? [{ debugName: "_previewErrors" }] : []));
10988
+ _visible = signal(false, ...(ngDevMode ? [{ debugName: "_visible" }] : /* istanbul ignore next */ []));
10989
+ _property = signal(null, ...(ngDevMode ? [{ debugName: "_property" }] : /* istanbul ignore next */ []));
10990
+ _bindings = signal([], ...(ngDevMode ? [{ debugName: "_bindings" }] : /* istanbul ignore next */ []));
10991
+ _expandedIndex = signal(null, ...(ngDevMode ? [{ debugName: "_expandedIndex" }] : /* istanbul ignore next */ []));
10992
+ _previewInputValue = signal(50, ...(ngDevMode ? [{ debugName: "_previewInputValue" }] : /* istanbul ignore next */ []));
10993
+ _previewErrors = signal(new Map(), ...(ngDevMode ? [{ debugName: "_previewErrors" }] : /* istanbul ignore next */ []));
10994
10994
  /**
10995
10995
  * Filter bindings for the current property
10996
10996
  */
@@ -11007,11 +11007,11 @@ class BindingEditorDialogComponent {
11007
11007
  }
11008
11008
  }
11009
11009
  // Computed values
11010
- visible = computed(() => this._visible(), ...(ngDevMode ? [{ debugName: "visible" }] : []));
11011
- currentProperty = computed(() => this._property(), ...(ngDevMode ? [{ debugName: "currentProperty" }] : []));
11012
- bindings = computed(() => this._bindings(), ...(ngDevMode ? [{ debugName: "bindings" }] : []));
11013
- expandedIndex = computed(() => this._expandedIndex(), ...(ngDevMode ? [{ debugName: "expandedIndex" }] : []));
11014
- previewInputValue = computed(() => this._previewInputValue(), ...(ngDevMode ? [{ debugName: "previewInputValue" }] : []));
11010
+ visible = computed(() => this._visible(), ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
11011
+ currentProperty = computed(() => this._property(), ...(ngDevMode ? [{ debugName: "currentProperty" }] : /* istanbul ignore next */ []));
11012
+ bindings = computed(() => this._bindings(), ...(ngDevMode ? [{ debugName: "bindings" }] : /* istanbul ignore next */ []));
11013
+ expandedIndex = computed(() => this._expandedIndex(), ...(ngDevMode ? [{ debugName: "expandedIndex" }] : /* istanbul ignore next */ []));
11014
+ previewInputValue = computed(() => this._previewInputValue(), ...(ngDevMode ? [{ debugName: "previewInputValue" }] : /* istanbul ignore next */ []));
11015
11015
  // Effect type groups for the dropdown
11016
11016
  effectTypeGroups = [
11017
11017
  {
@@ -11085,14 +11085,14 @@ class BindingEditorDialogComponent {
11085
11085
  name: p.name ?? `${p.type}-${p.id.substring(0, 6)}`,
11086
11086
  type: 'primitive'
11087
11087
  }));
11088
- }, ...(ngDevMode ? [{ debugName: "primitiveTargets" }] : []));
11088
+ }, ...(ngDevMode ? [{ debugName: "primitiveTargets" }] : /* istanbul ignore next */ []));
11089
11089
  symbolInstanceTargets = computed(() => {
11090
11090
  return this.symbolInstances.map(s => ({
11091
11091
  id: s.id,
11092
11092
  name: s.name ?? `symbol-${s.id.substring(0, 6)}`,
11093
11093
  type: 'symbolInstance'
11094
11094
  }));
11095
- }, ...(ngDevMode ? [{ debugName: "symbolInstanceTargets" }] : []));
11095
+ }, ...(ngDevMode ? [{ debugName: "symbolInstanceTargets" }] : /* istanbul ignore next */ []));
11096
11096
  ngOnInit() {
11097
11097
  // Initialize with first binding expanded if any exist
11098
11098
  if (this._bindings().length > 0) {
@@ -11292,8 +11292,8 @@ class BindingEditorDialogComponent {
11292
11292
  this.saved.emit(mergedBindings);
11293
11293
  this._visible.set(false);
11294
11294
  }
11295
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: BindingEditorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11296
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: BindingEditorDialogComponent, isStandalone: true, selector: "mm-binding-editor-dialog", inputs: { show: "show", property: "property", existingBindings: "existingBindings", primitives: "primitives", symbolInstances: "symbolInstances", symbolDefinitions: "symbolDefinitions" }, outputs: { closed: "closed", saved: "saved" }, ngImport: i0, template: `
11295
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: BindingEditorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11296
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: BindingEditorDialogComponent, isStandalone: true, selector: "mm-binding-editor-dialog", inputs: { show: "show", property: "property", existingBindings: "existingBindings", primitives: "primitives", symbolInstances: "symbolInstances", symbolDefinitions: "symbolDefinitions" }, outputs: { closed: "closed", saved: "saved" }, ngImport: i0, template: `
11297
11297
  @if (visible()) {
11298
11298
  <kendo-dialog title="Bindings for: {{ currentProperty()?.name }}"
11299
11299
  [width]="550"
@@ -11475,7 +11475,7 @@ class BindingEditorDialogComponent {
11475
11475
  }
11476
11476
  `, isInline: true, styles: [".binding-editor-content{display:flex;flex-direction:column;height:100%;min-height:300px}.bindings-list{flex:1;overflow-y:auto}.list-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid #e0e0e0;margin-bottom:.5rem;font-weight:500;font-size:13px}.empty-state{padding:1.5rem;text-align:center;color:#666;background:#f9f9f9;border-radius:8px}.hint{font-size:12px;color:#999;margin-top:.5rem}.binding-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin-bottom:.5rem;overflow:hidden}.binding-card.expanded{border-color:#1976d2}.binding-header{display:flex;justify-content:space-between;align-items:center;padding:.75rem;cursor:pointer;background:#fafafa}.binding-header:hover{background:#f5f5f5}.binding-summary{display:flex;align-items:center;gap:.5rem}.target-name{font-weight:500;font-size:13px}.effect-badge{display:inline-block;padding:.125rem .5rem;background:#e8f5e9;border-radius:4px;font-size:10px;color:#2e7d32}.binding-actions{display:flex;gap:.25rem}.binding-form{padding:.75rem;border-top:1px solid #e0e0e0;display:flex;flex-direction:column;gap:.75rem}.form-row{display:flex;align-items:flex-start;gap:.5rem}.form-row label{flex:0 0 90px;font-size:11px;color:#666;padding-top:.5rem}.form-row select,.form-row input[type=text],.form-row input[type=number]{flex:1;padding:.375rem .5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px}.form-row select:focus,.form-row input:focus{outline:none;border-color:#1976d2}.expression-row{flex-direction:column;align-items:stretch}.expression-row label{flex:none;padding-top:0;margin-bottom:.25rem}.expression-input{width:100%}.expression-input input{width:100%;font-family:Consolas,Monaco,monospace}.expression-hint{font-size:10px;color:#999;margin-top:.25rem}.expression-hint code{background:#f5f5f5;padding:.125rem .25rem;border-radius:3px;font-family:Consolas,Monaco,monospace}.expression-preview{background:#f9f9f9;border-radius:6px;padding:.75rem}.expression-preview>label{display:block;font-size:11px;color:#666;margin-bottom:.5rem}.preview-content{display:flex;align-items:center;gap:.75rem}.preview-input,.preview-output{display:flex;align-items:center;gap:.5rem;font-size:12px}.preview-input input[type=number]{width:80px;padding:.25rem .5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px}.boolean-toggle{display:flex;align-items:center;gap:.5rem;cursor:pointer}.boolean-toggle input[type=checkbox]{width:16px;height:16px;cursor:pointer}.boolean-label{font-family:monospace;font-size:12px;color:#333}.preview-arrow{color:#666;font-size:16px}.preview-output .output-value{font-weight:500;color:#1976d2;font-family:Consolas,Monaco,monospace}.preview-output.error .output-value{color:#d32f2f}.anchor-row{align-items:flex-start}.anchor-selector{display:flex;align-items:center;gap:.75rem}.anchor-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;width:54px;height:54px;background:#e0e0e0;border-radius:4px;padding:2px}.anchor-point{display:flex;align-items:center;justify-content:center;background:#fff;border:none;cursor:pointer;padding:0;border-radius:2px}.anchor-point:hover{background:#e3f2fd}.anchor-point.selected{background:#1976d2}.anchor-dot{width:6px;height:6px;border-radius:50%;background:#999}.anchor-point.selected .anchor-dot{background:#fff}.anchor-point:hover .anchor-dot{background:#1976d2}.anchor-point.selected:hover .anchor-dot{background:#fff}.anchor-label{font-size:11px;color:#666}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "ngmodule", type: DropDownsModule }, { kind: "ngmodule", type: DialogsModule }, { kind: "component", type: i3.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: i3.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }] });
11477
11477
  }
11478
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: BindingEditorDialogComponent, decorators: [{
11478
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: BindingEditorDialogComponent, decorators: [{
11479
11479
  type: Component,
11480
11480
  args: [{ selector: 'mm-binding-editor-dialog', standalone: true, imports: [CommonModule, FormsModule, ButtonsModule, InputsModule, DropDownsModule, DialogsModule], template: `
11481
11481
  @if (visible()) {
@@ -11708,8 +11708,8 @@ class DesignerSelectionService {
11708
11708
  _selection = signal({
11709
11709
  elements: new Set(),
11710
11710
  connections: new Set()
11711
- }, ...(ngDevMode ? [{ debugName: "_selection" }] : []));
11712
- _selectionRect = signal(null, ...(ngDevMode ? [{ debugName: "_selectionRect" }] : []));
11711
+ }, ...(ngDevMode ? [{ debugName: "_selection" }] : /* istanbul ignore next */ []));
11712
+ _selectionRect = signal(null, ...(ngDevMode ? [{ debugName: "_selectionRect" }] : /* istanbul ignore next */ []));
11713
11713
  // Public readonly signals
11714
11714
  selection = this._selection.asReadonly();
11715
11715
  selectionRect = this._selectionRect.asReadonly();
@@ -11719,14 +11719,14 @@ class DesignerSelectionService {
11719
11719
  hasSelection = computed(() => {
11720
11720
  const sel = this._selection();
11721
11721
  return sel.elements.size > 0 || sel.connections.size > 0;
11722
- }, ...(ngDevMode ? [{ debugName: "hasSelection" }] : []));
11722
+ }, ...(ngDevMode ? [{ debugName: "hasSelection" }] : /* istanbul ignore next */ []));
11723
11723
  /**
11724
11724
  * Get the count of selected items
11725
11725
  */
11726
11726
  selectionCount = computed(() => {
11727
11727
  const sel = this._selection();
11728
11728
  return sel.elements.size + sel.connections.size;
11729
- }, ...(ngDevMode ? [{ debugName: "selectionCount" }] : []));
11729
+ }, ...(ngDevMode ? [{ debugName: "selectionCount" }] : /* istanbul ignore next */ []));
11730
11730
  // ============================================================================
11731
11731
  // Element Selection (also used for primitives and symbols)
11732
11732
  // ============================================================================
@@ -12045,10 +12045,10 @@ class DesignerSelectionService {
12045
12045
  setSelectionRect(rect) {
12046
12046
  this._selectionRect.set(rect);
12047
12047
  }
12048
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12049
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerSelectionService });
12048
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12049
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerSelectionService });
12050
12050
  }
12051
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerSelectionService, decorators: [{
12051
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerSelectionService, decorators: [{
12052
12052
  type: Injectable
12053
12053
  }] });
12054
12054
 
@@ -12084,9 +12084,9 @@ class DesignerHistoryService {
12084
12084
  /** Maximum number of history entries */
12085
12085
  maxHistorySize = 50;
12086
12086
  /** History stack */
12087
- _history = signal([], ...(ngDevMode ? [{ debugName: "_history" }] : []));
12087
+ _history = signal([], ...(ngDevMode ? [{ debugName: "_history" }] : /* istanbul ignore next */ []));
12088
12088
  /** Current position in history (-1 = empty, 0 = first entry, etc.) */
12089
- _currentIndex = signal(-1, ...(ngDevMode ? [{ debugName: "_currentIndex" }] : []));
12089
+ _currentIndex = signal(-1, ...(ngDevMode ? [{ debugName: "_currentIndex" }] : /* istanbul ignore next */ []));
12090
12090
  // ============================================================================
12091
12091
  // Public Signals
12092
12092
  // ============================================================================
@@ -12095,7 +12095,7 @@ class DesignerHistoryService {
12095
12095
  */
12096
12096
  canUndo = computed(() => {
12097
12097
  return this._currentIndex() > 0;
12098
- }, ...(ngDevMode ? [{ debugName: "canUndo" }] : []));
12098
+ }, ...(ngDevMode ? [{ debugName: "canUndo" }] : /* istanbul ignore next */ []));
12099
12099
  /**
12100
12100
  * Whether redo is available
12101
12101
  */
@@ -12103,13 +12103,13 @@ class DesignerHistoryService {
12103
12103
  const history = this._history();
12104
12104
  const index = this._currentIndex();
12105
12105
  return index >= 0 && index < history.length - 1;
12106
- }, ...(ngDevMode ? [{ debugName: "canRedo" }] : []));
12106
+ }, ...(ngDevMode ? [{ debugName: "canRedo" }] : /* istanbul ignore next */ []));
12107
12107
  /**
12108
12108
  * Current history length
12109
12109
  */
12110
12110
  historyLength = computed(() => {
12111
12111
  return this._history().length;
12112
- }, ...(ngDevMode ? [{ debugName: "historyLength" }] : []));
12112
+ }, ...(ngDevMode ? [{ debugName: "historyLength" }] : /* istanbul ignore next */ []));
12113
12113
  /**
12114
12114
  * Current position in history
12115
12115
  */
@@ -12215,10 +12215,10 @@ class DesignerHistoryService {
12215
12215
  deepClone(obj) {
12216
12216
  return JSON.parse(JSON.stringify(obj));
12217
12217
  }
12218
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12219
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerHistoryService });
12218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12219
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerHistoryService });
12220
12220
  }
12221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerHistoryService, decorators: [{
12221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerHistoryService, decorators: [{
12222
12222
  type: Injectable
12223
12223
  }] });
12224
12224
 
@@ -12257,7 +12257,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
12257
12257
  */
12258
12258
  class DesignerClipboardService {
12259
12259
  // Private clipboard state
12260
- _clipboard = signal(null, ...(ngDevMode ? [{ debugName: "_clipboard" }] : []));
12260
+ _clipboard = signal(null, ...(ngDevMode ? [{ debugName: "_clipboard" }] : /* istanbul ignore next */ []));
12261
12261
  // Public readonly signal
12262
12262
  clipboard = this._clipboard.asReadonly();
12263
12263
  /**
@@ -12270,7 +12270,7 @@ class DesignerClipboardService {
12270
12270
  return data.elements.length > 0 ||
12271
12271
  data.primitives.length > 0 ||
12272
12272
  data.symbolInstances.length > 0;
12273
- }, ...(ngDevMode ? [{ debugName: "hasContent" }] : []));
12273
+ }, ...(ngDevMode ? [{ debugName: "hasContent" }] : /* istanbul ignore next */ []));
12274
12274
  /**
12275
12275
  * Count of items in clipboard
12276
12276
  */
@@ -12282,7 +12282,7 @@ class DesignerClipboardService {
12282
12282
  data.primitives.length +
12283
12283
  data.symbolInstances.length +
12284
12284
  data.connections.length;
12285
- }, ...(ngDevMode ? [{ debugName: "itemCount" }] : []));
12285
+ }, ...(ngDevMode ? [{ debugName: "itemCount" }] : /* istanbul ignore next */ []));
12286
12286
  // ============================================================================
12287
12287
  // Clipboard Operations
12288
12288
  // ============================================================================
@@ -12432,10 +12432,10 @@ class DesignerClipboardService {
12432
12432
  deepClone(obj) {
12433
12433
  return JSON.parse(JSON.stringify(obj));
12434
12434
  }
12435
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerClipboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12436
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerClipboardService });
12435
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerClipboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12436
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerClipboardService });
12437
12437
  }
12438
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerClipboardService, decorators: [{
12438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerClipboardService, decorators: [{
12439
12439
  type: Injectable
12440
12440
  }] });
12441
12441
 
@@ -12467,14 +12467,14 @@ class DesignerStateService {
12467
12467
  // ============================================================================
12468
12468
  // Private Signals
12469
12469
  // ============================================================================
12470
- _mode = signal('select', ...(ngDevMode ? [{ debugName: "_mode" }] : []));
12471
- _zoom = signal(1, ...(ngDevMode ? [{ debugName: "_zoom" }] : []));
12472
- _panOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_panOffset" }] : []));
12473
- _showGrid = signal(true, ...(ngDevMode ? [{ debugName: "_showGrid" }] : []));
12474
- _snapToGrid = signal(true, ...(ngDevMode ? [{ debugName: "_snapToGrid" }] : []));
12475
- _gridSize = signal(20, ...(ngDevMode ? [{ debugName: "_gridSize" }] : []));
12476
- _showElementNames = signal(false, ...(ngDevMode ? [{ debugName: "_showElementNames" }] : []));
12477
- _hasChanges = signal(false, ...(ngDevMode ? [{ debugName: "_hasChanges" }] : []));
12470
+ _mode = signal('select', ...(ngDevMode ? [{ debugName: "_mode" }] : /* istanbul ignore next */ []));
12471
+ _zoom = signal(1, ...(ngDevMode ? [{ debugName: "_zoom" }] : /* istanbul ignore next */ []));
12472
+ _panOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_panOffset" }] : /* istanbul ignore next */ []));
12473
+ _showGrid = signal(true, ...(ngDevMode ? [{ debugName: "_showGrid" }] : /* istanbul ignore next */ []));
12474
+ _snapToGrid = signal(true, ...(ngDevMode ? [{ debugName: "_snapToGrid" }] : /* istanbul ignore next */ []));
12475
+ _gridSize = signal(20, ...(ngDevMode ? [{ debugName: "_gridSize" }] : /* istanbul ignore next */ []));
12476
+ _showElementNames = signal(false, ...(ngDevMode ? [{ debugName: "_showElementNames" }] : /* istanbul ignore next */ []));
12477
+ _hasChanges = signal(false, ...(ngDevMode ? [{ debugName: "_hasChanges" }] : /* istanbul ignore next */ []));
12478
12478
  // ============================================================================
12479
12479
  // Public Readonly Signals
12480
12480
  // ============================================================================
@@ -12498,7 +12498,7 @@ class DesignerStateService {
12498
12498
  // Computed Signals
12499
12499
  // ============================================================================
12500
12500
  /** Zoom level as percentage (e.g., 100, 150, 200) */
12501
- zoomPercentage = computed(() => Math.round(this._zoom() * 100), ...(ngDevMode ? [{ debugName: "zoomPercentage" }] : []));
12501
+ zoomPercentage = computed(() => Math.round(this._zoom() * 100), ...(ngDevMode ? [{ debugName: "zoomPercentage" }] : /* istanbul ignore next */ []));
12502
12502
  /** Cursor style based on current mode */
12503
12503
  canvasCursor = computed(() => {
12504
12504
  switch (this._mode()) {
@@ -12506,7 +12506,7 @@ class DesignerStateService {
12506
12506
  case 'connect': return 'crosshair';
12507
12507
  default: return 'default';
12508
12508
  }
12509
- }, ...(ngDevMode ? [{ debugName: "canvasCursor" }] : []));
12509
+ }, ...(ngDevMode ? [{ debugName: "canvasCursor" }] : /* istanbul ignore next */ []));
12510
12510
  // ============================================================================
12511
12511
  // Mode Operations
12512
12512
  // ============================================================================
@@ -12676,10 +12676,10 @@ class DesignerStateService {
12676
12676
  this._showElementNames.set(false);
12677
12677
  this._hasChanges.set(false);
12678
12678
  }
12679
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12680
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerStateService });
12679
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12680
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerStateService });
12681
12681
  }
12682
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerStateService, decorators: [{
12682
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerStateService, decorators: [{
12683
12683
  type: Injectable
12684
12684
  }] });
12685
12685
 
@@ -12940,10 +12940,10 @@ class DesignerCoordinateService {
12940
12940
  y: bounds.y + bounds.height / 2
12941
12941
  };
12942
12942
  }
12943
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerCoordinateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12944
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerCoordinateService });
12943
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerCoordinateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12944
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerCoordinateService });
12945
12945
  }
12946
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerCoordinateService, decorators: [{
12946
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerCoordinateService, decorators: [{
12947
12947
  type: Injectable
12948
12948
  }] });
12949
12949
 
@@ -13002,22 +13002,22 @@ class DesignerDragService {
13002
13002
  // ============================================================================
13003
13003
  // Private State
13004
13004
  // ============================================================================
13005
- _state = signal({ ...INITIAL_DRAG_STATE }, ...(ngDevMode ? [{ debugName: "_state" }] : []));
13005
+ _state = signal({ ...INITIAL_DRAG_STATE }, ...(ngDevMode ? [{ debugName: "_state" }] : /* istanbul ignore next */ []));
13006
13006
  // ============================================================================
13007
13007
  // Public Readonly Signals
13008
13008
  // ============================================================================
13009
13009
  /** Current drag state */
13010
13010
  state = this._state.asReadonly();
13011
13011
  /** Whether a drag operation is in progress */
13012
- isDragging = computed(() => this._state().isDragging, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
13012
+ isDragging = computed(() => this._state().isDragging, ...(ngDevMode ? [{ debugName: "isDragging" }] : /* istanbul ignore next */ []));
13013
13013
  /** ID of the item being dragged (or null) */
13014
- draggedItemId = computed(() => this._state().itemId, ...(ngDevMode ? [{ debugName: "draggedItemId" }] : []));
13014
+ draggedItemId = computed(() => this._state().itemId, ...(ngDevMode ? [{ debugName: "draggedItemId" }] : /* istanbul ignore next */ []));
13015
13015
  /** Type of item being dragged */
13016
- draggedItemType = computed(() => this._state().itemType, ...(ngDevMode ? [{ debugName: "draggedItemType" }] : []));
13016
+ draggedItemType = computed(() => this._state().itemType, ...(ngDevMode ? [{ debugName: "draggedItemType" }] : /* istanbul ignore next */ []));
13017
13017
  /** Whether dragging a group */
13018
- isDraggingGroup = computed(() => this._state().itemType === 'group', ...(ngDevMode ? [{ debugName: "isDraggingGroup" }] : []));
13018
+ isDraggingGroup = computed(() => this._state().itemType === 'group', ...(ngDevMode ? [{ debugName: "isDraggingGroup" }] : /* istanbul ignore next */ []));
13019
13019
  /** Whether dragging a primitive */
13020
- isDraggingPrimitive = computed(() => this._state().itemType === 'primitive' || this._state().itemType === 'group', ...(ngDevMode ? [{ debugName: "isDraggingPrimitive" }] : []));
13020
+ isDraggingPrimitive = computed(() => this._state().itemType === 'primitive' || this._state().itemType === 'group', ...(ngDevMode ? [{ debugName: "isDraggingPrimitive" }] : /* istanbul ignore next */ []));
13021
13021
  // ============================================================================
13022
13022
  // Drag Operations
13023
13023
  // ============================================================================
@@ -13194,10 +13194,10 @@ class DesignerDragService {
13194
13194
  hasMovedBeyondThreshold(threshold = 3) {
13195
13195
  return this.getDragDistance() > threshold;
13196
13196
  }
13197
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDragService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13198
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDragService });
13197
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDragService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13198
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDragService });
13199
13199
  }
13200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDragService, decorators: [{
13200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDragService, decorators: [{
13201
13201
  type: Injectable
13202
13202
  }] });
13203
13203
 
@@ -13259,22 +13259,22 @@ class DesignerResizeService {
13259
13259
  // ============================================================================
13260
13260
  // Private State
13261
13261
  // ============================================================================
13262
- _state = signal({ ...INITIAL_RESIZE_STATE }, ...(ngDevMode ? [{ debugName: "_state" }] : []));
13262
+ _state = signal({ ...INITIAL_RESIZE_STATE }, ...(ngDevMode ? [{ debugName: "_state" }] : /* istanbul ignore next */ []));
13263
13263
  // ============================================================================
13264
13264
  // Public Readonly Signals
13265
13265
  // ============================================================================
13266
13266
  /** Current resize state */
13267
13267
  state = this._state.asReadonly();
13268
13268
  /** Whether a resize operation is in progress */
13269
- isResizing = computed(() => this._state().isResizing, ...(ngDevMode ? [{ debugName: "isResizing" }] : []));
13269
+ isResizing = computed(() => this._state().isResizing, ...(ngDevMode ? [{ debugName: "isResizing" }] : /* istanbul ignore next */ []));
13270
13270
  /** ID of the item being resized (or null) */
13271
- resizingItemId = computed(() => this._state().itemId, ...(ngDevMode ? [{ debugName: "resizingItemId" }] : []));
13271
+ resizingItemId = computed(() => this._state().itemId, ...(ngDevMode ? [{ debugName: "resizingItemId" }] : /* istanbul ignore next */ []));
13272
13272
  /** Type of item being resized */
13273
- resizingItemType = computed(() => this._state().itemType, ...(ngDevMode ? [{ debugName: "resizingItemType" }] : []));
13273
+ resizingItemType = computed(() => this._state().itemType, ...(ngDevMode ? [{ debugName: "resizingItemType" }] : /* istanbul ignore next */ []));
13274
13274
  /** Current resize handle */
13275
- activeHandle = computed(() => this._state().handle, ...(ngDevMode ? [{ debugName: "activeHandle" }] : []));
13275
+ activeHandle = computed(() => this._state().handle, ...(ngDevMode ? [{ debugName: "activeHandle" }] : /* istanbul ignore next */ []));
13276
13276
  /** Whether resizing a group */
13277
- isResizingGroup = computed(() => this._state().itemType === 'group', ...(ngDevMode ? [{ debugName: "isResizingGroup" }] : []));
13277
+ isResizingGroup = computed(() => this._state().itemType === 'group', ...(ngDevMode ? [{ debugName: "isResizingGroup" }] : /* istanbul ignore next */ []));
13278
13278
  // ============================================================================
13279
13279
  // Resize Operations
13280
13280
  // ============================================================================
@@ -13582,10 +13582,10 @@ class DesignerResizeService {
13582
13582
  };
13583
13583
  return cursors[handle];
13584
13584
  }
13585
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerResizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13586
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerResizeService });
13585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerResizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13586
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerResizeService });
13587
13587
  }
13588
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerResizeService, decorators: [{
13588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerResizeService, decorators: [{
13589
13589
  type: Injectable
13590
13590
  }] });
13591
13591
 
@@ -13814,10 +13814,10 @@ class DesignerZOrderService {
13814
13814
  return true;
13815
13815
  return false;
13816
13816
  }
13817
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerZOrderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13818
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerZOrderService });
13817
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerZOrderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13818
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerZOrderService });
13819
13819
  }
13820
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerZOrderService, decorators: [{
13820
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerZOrderService, decorators: [{
13821
13821
  type: Injectable
13822
13822
  }] });
13823
13823
 
@@ -14062,10 +14062,10 @@ class DesignerDeletionService {
14062
14062
  const expanded = this.expandWithGroupChildren(diagram, itemIds);
14063
14063
  return expanded.size;
14064
14064
  }
14065
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDeletionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14066
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDeletionService });
14065
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDeletionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14066
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDeletionService });
14067
14067
  }
14068
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDeletionService, decorators: [{
14068
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDeletionService, decorators: [{
14069
14069
  type: Injectable
14070
14070
  }] });
14071
14071
 
@@ -14489,10 +14489,10 @@ class DesignerGroupingService {
14489
14489
  }
14490
14490
  return itemId;
14491
14491
  }
14492
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerGroupingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14493
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerGroupingService });
14492
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerGroupingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14493
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerGroupingService });
14494
14494
  }
14495
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerGroupingService, decorators: [{
14495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerGroupingService, decorators: [{
14496
14496
  type: Injectable
14497
14497
  }] });
14498
14498
 
@@ -14534,7 +14534,7 @@ class DesignerContextMenuService {
14534
14534
  visible: false,
14535
14535
  screenPosition: { x: 0, y: 0 },
14536
14536
  canvasPosition: null
14537
- }, ...(ngDevMode ? [{ debugName: "_state" }] : []));
14537
+ }, ...(ngDevMode ? [{ debugName: "_state" }] : /* istanbul ignore next */ []));
14538
14538
  _selectionState = signal({
14539
14539
  hasSelection: false,
14540
14540
  hasClipboard: false,
@@ -14543,7 +14543,7 @@ class DesignerContextMenuService {
14543
14543
  canBringForward: false,
14544
14544
  canSendBackward: false,
14545
14545
  selectedCount: 0
14546
- }, ...(ngDevMode ? [{ debugName: "_selectionState" }] : []));
14546
+ }, ...(ngDevMode ? [{ debugName: "_selectionState" }] : /* istanbul ignore next */ []));
14547
14547
  /** Current context menu state */
14548
14548
  state = this._state.asReadonly();
14549
14549
  /** Current selection state */
@@ -14551,7 +14551,7 @@ class DesignerContextMenuService {
14551
14551
  /** Computed menu items based on selection state */
14552
14552
  items = computed(() => {
14553
14553
  return this.buildMenuItems(this._selectionState());
14554
- }, ...(ngDevMode ? [{ debugName: "items" }] : []));
14554
+ }, ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
14555
14555
  // ============================================================================
14556
14556
  // State Management
14557
14557
  // ============================================================================
@@ -14866,10 +14866,10 @@ class DesignerContextMenuService {
14866
14866
  return baseItems;
14867
14867
  }
14868
14868
  }
14869
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerContextMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14870
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerContextMenuService });
14869
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerContextMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14870
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerContextMenuService });
14871
14871
  }
14872
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerContextMenuService, decorators: [{
14872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerContextMenuService, decorators: [{
14873
14873
  type: Injectable
14874
14874
  }] });
14875
14875
 
@@ -14907,13 +14907,13 @@ class DesignerKeyboardService {
14907
14907
  // ============================================================================
14908
14908
  // State
14909
14909
  // ============================================================================
14910
- _shortcuts = signal(new Map(), ...(ngDevMode ? [{ debugName: "_shortcuts" }] : []));
14910
+ _shortcuts = signal(new Map(), ...(ngDevMode ? [{ debugName: "_shortcuts" }] : /* istanbul ignore next */ []));
14911
14911
  _modifierKeys = signal({
14912
14912
  ctrl: false,
14913
14913
  shift: false,
14914
14914
  alt: false,
14915
14915
  meta: false
14916
- }, ...(ngDevMode ? [{ debugName: "_modifierKeys" }] : []));
14916
+ }, ...(ngDevMode ? [{ debugName: "_modifierKeys" }] : /* istanbul ignore next */ []));
14917
14917
  /** Current modifier keys state */
14918
14918
  modifierKeys = this._modifierKeys.asReadonly();
14919
14919
  // ============================================================================
@@ -15288,10 +15288,10 @@ class DesignerKeyboardService {
15288
15288
  }
15289
15289
  return lines.join('\n');
15290
15290
  }
15291
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerKeyboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15292
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerKeyboardService });
15291
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerKeyboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15292
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerKeyboardService });
15293
15293
  }
15294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerKeyboardService, decorators: [{
15294
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerKeyboardService, decorators: [{
15295
15295
  type: Injectable
15296
15296
  }], ctorParameters: () => [] });
15297
15297
 
@@ -15712,10 +15712,10 @@ class DesignerCreationService {
15712
15712
  PrimitiveType.Text
15713
15713
  ];
15714
15714
  }
15715
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerCreationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15716
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerCreationService });
15715
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerCreationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15716
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerCreationService });
15717
15717
  }
15718
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerCreationService, decorators: [{
15718
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerCreationService, decorators: [{
15719
15719
  type: Injectable
15720
15720
  }] });
15721
15721
 
@@ -16208,10 +16208,10 @@ class DesignerRenderingService {
16208
16208
  height: bounds.height + padding * 2
16209
16209
  };
16210
16210
  }
16211
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerRenderingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16212
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerRenderingService });
16211
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerRenderingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16212
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerRenderingService });
16213
16213
  }
16214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerRenderingService, decorators: [{
16214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerRenderingService, decorators: [{
16215
16215
  type: Injectable
16216
16216
  }] });
16217
16217
 
@@ -16362,10 +16362,10 @@ class GeometryUtilService {
16362
16362
  y: vector.x
16363
16363
  };
16364
16364
  }
16365
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GeometryUtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16366
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GeometryUtilService, providedIn: 'root' });
16365
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GeometryUtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16366
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GeometryUtilService, providedIn: 'root' });
16367
16367
  }
16368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GeometryUtilService, decorators: [{
16368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GeometryUtilService, decorators: [{
16369
16369
  type: Injectable,
16370
16370
  args: [{ providedIn: 'root' }]
16371
16371
  }] });
@@ -16378,15 +16378,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
16378
16378
  class DesignerDiagramService {
16379
16379
  _diagram;
16380
16380
  /** Read-only access to the current diagram */
16381
- diagram = computed(() => this._diagram(), ...(ngDevMode ? [{ debugName: "diagram" }] : []));
16381
+ diagram = computed(() => this._diagram(), ...(ngDevMode ? [{ debugName: "diagram" }] : /* istanbul ignore next */ []));
16382
16382
  /** Convenience accessors */
16383
- primitives = computed(() => this._diagram().primitives ?? [], ...(ngDevMode ? [{ debugName: "primitives" }] : []));
16384
- symbols = computed(() => this._diagram().symbolInstances ?? [], ...(ngDevMode ? [{ debugName: "symbols" }] : []));
16385
- elements = computed(() => this._diagram().elements ?? [], ...(ngDevMode ? [{ debugName: "elements" }] : []));
16386
- connections = computed(() => this._diagram().connections ?? [], ...(ngDevMode ? [{ debugName: "connections" }] : []));
16387
- canvas = computed(() => this._diagram().canvas, ...(ngDevMode ? [{ debugName: "canvas" }] : []));
16383
+ primitives = computed(() => this._diagram().primitives ?? [], ...(ngDevMode ? [{ debugName: "primitives" }] : /* istanbul ignore next */ []));
16384
+ symbols = computed(() => this._diagram().symbolInstances ?? [], ...(ngDevMode ? [{ debugName: "symbols" }] : /* istanbul ignore next */ []));
16385
+ elements = computed(() => this._diagram().elements ?? [], ...(ngDevMode ? [{ debugName: "elements" }] : /* istanbul ignore next */ []));
16386
+ connections = computed(() => this._diagram().connections ?? [], ...(ngDevMode ? [{ debugName: "connections" }] : /* istanbul ignore next */ []));
16387
+ canvas = computed(() => this._diagram().canvas, ...(ngDevMode ? [{ debugName: "canvas" }] : /* istanbul ignore next */ []));
16388
16388
  constructor() {
16389
- this._diagram = signal(this.createEmptyDiagram(), ...(ngDevMode ? [{ debugName: "_diagram" }] : []));
16389
+ this._diagram = signal(this.createEmptyDiagram(), ...(ngDevMode ? [{ debugName: "_diagram" }] : /* istanbul ignore next */ []));
16390
16390
  }
16391
16391
  // ============================================================================
16392
16392
  // Diagram-level operations
@@ -16731,10 +16731,10 @@ class DesignerDiagramService {
16731
16731
  reset() {
16732
16732
  this._diagram.set(this.createEmptyDiagram());
16733
16733
  }
16734
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDiagramService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16735
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDiagramService });
16734
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDiagramService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16735
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDiagramService });
16736
16736
  }
16737
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerDiagramService, decorators: [{
16737
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerDiagramService, decorators: [{
16738
16738
  type: Injectable
16739
16739
  }], ctorParameters: () => [] });
16740
16740
 
@@ -17391,10 +17391,10 @@ class DesignerPrimitiveService {
17391
17391
  isPath(type) {
17392
17392
  return type === PrimitiveType.Path;
17393
17393
  }
17394
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerPrimitiveService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17395
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerPrimitiveService });
17394
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerPrimitiveService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17395
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerPrimitiveService });
17396
17396
  }
17397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerPrimitiveService, decorators: [{
17397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerPrimitiveService, decorators: [{
17398
17398
  type: Injectable
17399
17399
  }], ctorParameters: () => [] });
17400
17400
 
@@ -17640,10 +17640,10 @@ class DesignerBoundsService {
17640
17640
  }
17641
17641
  return childIds;
17642
17642
  }
17643
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerBoundsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17644
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerBoundsService });
17643
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerBoundsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17644
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerBoundsService });
17645
17645
  }
17646
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerBoundsService, decorators: [{
17646
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerBoundsService, decorators: [{
17647
17647
  type: Injectable
17648
17648
  }] });
17649
17649
 
@@ -17927,10 +17927,10 @@ class DesignerAlignmentService {
17927
17927
  canDistribute(selectedIds) {
17928
17928
  return selectedIds.size >= 3;
17929
17929
  }
17930
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerAlignmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17931
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerAlignmentService });
17930
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerAlignmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17931
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerAlignmentService });
17932
17932
  }
17933
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerAlignmentService, decorators: [{
17933
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerAlignmentService, decorators: [{
17934
17934
  type: Injectable
17935
17935
  }] });
17936
17936
 
@@ -17969,7 +17969,7 @@ class DesignerAlignmentGuideService {
17969
17969
  /** Padding to extend guide lines beyond the items */
17970
17970
  GUIDE_PADDING = 10;
17971
17971
  // Private state
17972
- _guides = signal([], ...(ngDevMode ? [{ debugName: "_guides" }] : []));
17972
+ _guides = signal([], ...(ngDevMode ? [{ debugName: "_guides" }] : /* istanbul ignore next */ []));
17973
17973
  // Public readonly signal
17974
17974
  guides = this._guides.asReadonly();
17975
17975
  /**
@@ -18213,10 +18213,10 @@ class DesignerAlignmentGuideService {
18213
18213
  // Round to avoid floating point precision issues
18214
18214
  return Math.round(result);
18215
18215
  }
18216
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerAlignmentGuideService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18217
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerAlignmentGuideService });
18216
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerAlignmentGuideService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18217
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerAlignmentGuideService });
18218
18218
  }
18219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerAlignmentGuideService, decorators: [{
18219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerAlignmentGuideService, decorators: [{
18220
18220
  type: Injectable
18221
18221
  }] });
18222
18222
 
@@ -18345,10 +18345,10 @@ class DesignerLayoutService {
18345
18345
  const panels = isSymbolEditor ? this.symbolEditorDefaultPanels : this.defaultPanels;
18346
18346
  return panels.find(p => p.id === panelId);
18347
18347
  }
18348
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18349
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerLayoutService, providedIn: 'root' });
18348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18349
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerLayoutService, providedIn: 'root' });
18350
18350
  }
18351
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DesignerLayoutService, decorators: [{
18351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DesignerLayoutService, decorators: [{
18352
18352
  type: Injectable,
18353
18353
  args: [{ providedIn: 'root' }]
18354
18354
  }] });
@@ -18367,8 +18367,8 @@ class ElementsPanelComponent {
18367
18367
  onDragEnd(item) {
18368
18368
  this.params.onElementDragEnd?.(item);
18369
18369
  }
18370
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ElementsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18371
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: ElementsPanelComponent, isStandalone: true, selector: "mm-elements-panel", inputs: { params: "params" }, ngImport: i0, template: `
18370
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ElementsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18371
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: ElementsPanelComponent, isStandalone: true, selector: "mm-elements-panel", inputs: { params: "params" }, ngImport: i0, template: `
18372
18372
  <div class="panel-container">
18373
18373
  <mm-element-palette
18374
18374
  (elementDragStart)="onDragStart($event)"
@@ -18377,7 +18377,7 @@ class ElementsPanelComponent {
18377
18377
  </div>
18378
18378
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.panel-container{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;background:var(--dv-pane-background-color, #1f2e40)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ElementPaletteComponent, selector: "mm-element-palette", outputs: ["elementDragStart", "elementDragEnd"] }] });
18379
18379
  }
18380
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ElementsPanelComponent, decorators: [{
18380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ElementsPanelComponent, decorators: [{
18381
18381
  type: Component,
18382
18382
  args: [{ selector: 'mm-elements-panel', standalone: true, imports: [CommonModule, ElementPaletteComponent], template: `
18383
18383
  <div class="panel-container">
@@ -18405,8 +18405,8 @@ class SymbolsPanelComponent {
18405
18405
  onDragEnd() {
18406
18406
  this.params.onSymbolDragEnd?.();
18407
18407
  }
18408
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18409
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SymbolsPanelComponent, isStandalone: true, selector: "mm-symbols-panel", inputs: { params: "params" }, ngImport: i0, template: `
18408
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18409
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: SymbolsPanelComponent, isStandalone: true, selector: "mm-symbols-panel", inputs: { params: "params" }, ngImport: i0, template: `
18410
18410
  <div class="panel-container">
18411
18411
  <mm-symbol-library-panel
18412
18412
  (symbolDragStart)="onDragStart($event)"
@@ -18415,7 +18415,7 @@ class SymbolsPanelComponent {
18415
18415
  </div>
18416
18416
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.panel-container{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;background:var(--dv-pane-background-color, #1f2e40)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: SymbolLibraryPanelComponent, selector: "mm-symbol-library-panel", outputs: ["symbolDragStart", "symbolDragEnd"] }] });
18417
18417
  }
18418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolsPanelComponent, decorators: [{
18418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolsPanelComponent, decorators: [{
18419
18419
  type: Component,
18420
18420
  args: [{ selector: 'mm-symbols-panel', standalone: true, imports: [CommonModule, SymbolLibraryPanelComponent], template: `
18421
18421
  <div class="panel-container">
@@ -18438,17 +18438,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
18438
18438
  class PropertiesPanelComponent {
18439
18439
  cdr = inject(ChangeDetectorRef);
18440
18440
  // Use signal-based params to ensure reactivity when dockview sets params after init
18441
- _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : []));
18441
+ _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : /* istanbul ignore next */ []));
18442
18442
  set params(value) {
18443
18443
  this._params.set(value);
18444
18444
  }
18445
18445
  // Computed properties that safely access signals from params
18446
- selectedElements = computed(() => this._params().selectedElements?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedElements" }] : []));
18447
- selectedConnections = computed(() => this._params().selectedConnections?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedConnections" }] : []));
18448
- selectedPrimitives = computed(() => this._params().selectedPrimitives?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedPrimitives" }] : []));
18449
- selectedSymbolInstances = computed(() => this._params().selectedSymbolInstances?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedSymbolInstances" }] : []));
18450
- symbolDefinitions = computed(() => this._params().symbolDefinitions?.() ?? new Map(), ...(ngDevMode ? [{ debugName: "symbolDefinitions" }] : []));
18451
- availableStyleClasses = computed(() => this._params().availableStyleClasses?.() ?? [], ...(ngDevMode ? [{ debugName: "availableStyleClasses" }] : []));
18446
+ selectedElements = computed(() => this._params().selectedElements?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedElements" }] : /* istanbul ignore next */ []));
18447
+ selectedConnections = computed(() => this._params().selectedConnections?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedConnections" }] : /* istanbul ignore next */ []));
18448
+ selectedPrimitives = computed(() => this._params().selectedPrimitives?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedPrimitives" }] : /* istanbul ignore next */ []));
18449
+ selectedSymbolInstances = computed(() => this._params().selectedSymbolInstances?.() ?? [], ...(ngDevMode ? [{ debugName: "selectedSymbolInstances" }] : /* istanbul ignore next */ []));
18450
+ symbolDefinitions = computed(() => this._params().symbolDefinitions?.() ?? new Map(), ...(ngDevMode ? [{ debugName: "symbolDefinitions" }] : /* istanbul ignore next */ []));
18451
+ availableStyleClasses = computed(() => this._params().availableStyleClasses?.() ?? [], ...(ngDevMode ? [{ debugName: "availableStyleClasses" }] : /* istanbul ignore next */ []));
18452
18452
  // Effect to trigger change detection when signals update
18453
18453
  // This is needed because dockview creates components dynamically outside Angular's normal flow
18454
18454
  selectionEffect = effect(() => {
@@ -18461,12 +18461,12 @@ class PropertiesPanelComponent {
18461
18461
  this.availableStyleClasses();
18462
18462
  // Trigger change detection
18463
18463
  this.cdr.markForCheck();
18464
- }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : []));
18464
+ }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : /* istanbul ignore next */ []));
18465
18465
  onPropertyChange(event) {
18466
18466
  this._params().onPropertyChange?.(event);
18467
18467
  }
18468
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertiesPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18469
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: PropertiesPanelComponent, isStandalone: true, selector: "mm-properties-panel", inputs: { params: "params" }, ngImport: i0, template: `
18468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PropertiesPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18469
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: PropertiesPanelComponent, isStandalone: true, selector: "mm-properties-panel", inputs: { params: "params" }, ngImport: i0, template: `
18470
18470
  <div class="panel-container">
18471
18471
  <mm-property-inspector
18472
18472
  [selectedElements]="selectedElements()"
@@ -18480,7 +18480,7 @@ class PropertiesPanelComponent {
18480
18480
  </div>
18481
18481
  `, isInline: true, styles: [":host{display:block;height:100%}.panel-container{height:100%;overflow:hidden;background:var(--dv-pane-background-color, #1f2e40)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PropertyInspectorComponent, selector: "mm-property-inspector", inputs: ["selectedElements", "selectedConnections", "selectedPrimitives", "selectedSymbolInstances", "symbolDefinitions", "availableStyleClasses"], outputs: ["propertyChange"] }] });
18482
18482
  }
18483
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PropertiesPanelComponent, decorators: [{
18483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PropertiesPanelComponent, decorators: [{
18484
18484
  type: Component,
18485
18485
  args: [{ selector: 'mm-properties-panel', standalone: true, imports: [CommonModule, PropertyInspectorComponent], template: `
18486
18486
  <div class="panel-container">
@@ -18525,22 +18525,22 @@ class TransformPropertyEditorComponent {
18525
18525
  propertiesChange = new EventEmitter();
18526
18526
  openBindings = new EventEmitter();
18527
18527
  // Internal state
18528
- _properties = signal([], ...(ngDevMode ? [{ debugName: "_properties" }] : []));
18529
- _bindings = signal([], ...(ngDevMode ? [{ debugName: "_bindings" }] : []));
18530
- _editingPropertyId = signal(null, ...(ngDevMode ? [{ debugName: "_editingPropertyId" }] : []));
18531
- _editFormData = signal({}, ...(ngDevMode ? [{ debugName: "_editFormData" }] : []));
18528
+ _properties = signal([], ...(ngDevMode ? [{ debugName: "_properties" }] : /* istanbul ignore next */ []));
18529
+ _bindings = signal([], ...(ngDevMode ? [{ debugName: "_bindings" }] : /* istanbul ignore next */ []));
18530
+ _editingPropertyId = signal(null, ...(ngDevMode ? [{ debugName: "_editingPropertyId" }] : /* istanbul ignore next */ []));
18531
+ _editFormData = signal({}, ...(ngDevMode ? [{ debugName: "_editFormData" }] : /* istanbul ignore next */ []));
18532
18532
  // Computed values
18533
- properties = computed(() => this._properties(), ...(ngDevMode ? [{ debugName: "properties" }] : []));
18534
- bindings = computed(() => this._bindings(), ...(ngDevMode ? [{ debugName: "bindings" }] : []));
18535
- editingPropertyId = computed(() => this._editingPropertyId(), ...(ngDevMode ? [{ debugName: "editingPropertyId" }] : []));
18536
- editFormData = computed(() => this._editFormData(), ...(ngDevMode ? [{ debugName: "editFormData" }] : []));
18533
+ properties = computed(() => this._properties(), ...(ngDevMode ? [{ debugName: "properties" }] : /* istanbul ignore next */ []));
18534
+ bindings = computed(() => this._bindings(), ...(ngDevMode ? [{ debugName: "bindings" }] : /* istanbul ignore next */ []));
18535
+ editingPropertyId = computed(() => this._editingPropertyId(), ...(ngDevMode ? [{ debugName: "editingPropertyId" }] : /* istanbul ignore next */ []));
18536
+ editFormData = computed(() => this._editFormData(), ...(ngDevMode ? [{ debugName: "editFormData" }] : /* istanbul ignore next */ []));
18537
18537
  // Check if we're adding a new property (editing an ID that's not in the list)
18538
18538
  isAddingNew = computed(() => {
18539
18539
  const editingId = this._editingPropertyId();
18540
18540
  if (!editingId)
18541
18541
  return false;
18542
18542
  return !this._properties().some(p => p.id === editingId);
18543
- }, ...(ngDevMode ? [{ debugName: "isAddingNew" }] : []));
18543
+ }, ...(ngDevMode ? [{ debugName: "isAddingNew" }] : /* istanbul ignore next */ []));
18544
18544
  /**
18545
18545
  * Get binding count for a property
18546
18546
  */
@@ -18667,8 +18667,8 @@ class TransformPropertyEditorComponent {
18667
18667
  * Helper for template
18668
18668
  */
18669
18669
  String = String;
18670
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: TransformPropertyEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18671
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: TransformPropertyEditorComponent, isStandalone: true, selector: "mm-transform-property-editor", inputs: { transformProperties: "transformProperties", propertyBindings: "propertyBindings", primitives: "primitives", symbolInstances: "symbolInstances" }, outputs: { propertiesChange: "propertiesChange", openBindings: "openBindings" }, ngImport: i0, template: `
18670
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TransformPropertyEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18671
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: TransformPropertyEditorComponent, isStandalone: true, selector: "mm-transform-property-editor", inputs: { transformProperties: "transformProperties", propertyBindings: "propertyBindings", primitives: "primitives", symbolInstances: "symbolInstances" }, outputs: { propertiesChange: "propertiesChange", openBindings: "openBindings" }, ngImport: i0, template: `
18672
18672
  <div class="transform-property-editor">
18673
18673
  <div class="editor-toolbar">
18674
18674
  <button kendoButton [svgIcon]="plusIcon" look="flat" (click)="addProperty()">
@@ -18925,7 +18925,7 @@ class TransformPropertyEditorComponent {
18925
18925
  </div>
18926
18926
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.transform-property-editor{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.editor-toolbar{flex-shrink:0;display:flex;justify-content:flex-end;padding:.5rem;border-bottom:1px solid #e0e0e0}.properties-list{flex:1;min-height:0;overflow-y:auto;padding:.5rem}.empty-state{padding:1rem;text-align:center;color:#666}.hint{font-size:12px;color:#999;margin-top:.5rem}.property-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin-bottom:.5rem;padding:.75rem;transition:box-shadow .2s}.property-card:hover{box-shadow:0 2px 8px #00000014}.property-card.editing{border-color:#1976d2;box-shadow:0 2px 8px #1976d233}.property-header{display:flex;justify-content:space-between;align-items:center}.property-info{display:flex;align-items:center;gap:.5rem}.property-name{font-weight:500;font-size:13px}.property-type-badge{display:inline-block;padding:.125rem .5rem;background:#e3f2fd;border-radius:4px;font-size:10px;color:#1976d2;text-transform:uppercase}.property-unit{font-size:11px;color:#666}.property-actions{display:flex;gap:.25rem}.property-details{display:flex;gap:1rem;margin-top:.5rem;font-size:11px;color:#666}.detail{display:flex;align-items:center;gap:.25rem}.color-swatch{display:inline-block;width:14px;height:14px;border-radius:3px;border:1px solid #ccc}.bindings-count{padding:.125rem .5rem;background:#f5f5f5;border-radius:4px}.property-description{margin-top:.5rem;font-size:11px;color:#999;font-style:italic}.property-edit-form{display:flex;flex-direction:column;gap:.5rem}.form-row{display:flex;align-items:center;gap:.5rem}.form-row label{flex:0 0 80px;font-size:11px;color:#666}.form-row input[type=text],.form-row input[type=number],.form-row select{flex:1;padding:.375rem .5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px}.form-row input:focus,.form-row select:focus{outline:none;border-color:#1976d2}.form-row input[type=color]{flex:0 0 50px;height:32px;padding:2px;border:1px solid #e0e0e0;border-radius:4px}.form-row input[type=checkbox]{margin:0}.form-row.two-col{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.form-row.two-col>div{display:flex;flex-direction:column;gap:.25rem}.form-row.two-col label{flex:none}.form-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "ngmodule", type: DropDownsModule }] });
18927
18927
  }
18928
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: TransformPropertyEditorComponent, decorators: [{
18928
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TransformPropertyEditorComponent, decorators: [{
18929
18929
  type: Component,
18930
18930
  args: [{ selector: 'mm-transform-property-editor', standalone: true, imports: [CommonModule, FormsModule, ButtonsModule, InputsModule, DropDownsModule, DecimalPipe], template: `
18931
18931
  <div class="transform-property-editor">
@@ -19206,14 +19206,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
19206
19206
  class TransformPanelComponent {
19207
19207
  cdr = inject(ChangeDetectorRef);
19208
19208
  // Use signal-based params to ensure reactivity when dockview sets params after init
19209
- _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : []));
19209
+ _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : /* istanbul ignore next */ []));
19210
19210
  set params(value) {
19211
19211
  this._params.set(value);
19212
19212
  }
19213
- transformProperties = computed(() => this._params().transformProperties?.() ?? [], ...(ngDevMode ? [{ debugName: "transformProperties" }] : []));
19214
- propertyBindings = computed(() => this._params().propertyBindings?.() ?? [], ...(ngDevMode ? [{ debugName: "propertyBindings" }] : []));
19215
- primitives = computed(() => this._params().primitives?.() ?? [], ...(ngDevMode ? [{ debugName: "primitives" }] : []));
19216
- symbolInstances = computed(() => this._params().symbolInstances?.() ?? [], ...(ngDevMode ? [{ debugName: "symbolInstances" }] : []));
19213
+ transformProperties = computed(() => this._params().transformProperties?.() ?? [], ...(ngDevMode ? [{ debugName: "transformProperties" }] : /* istanbul ignore next */ []));
19214
+ propertyBindings = computed(() => this._params().propertyBindings?.() ?? [], ...(ngDevMode ? [{ debugName: "propertyBindings" }] : /* istanbul ignore next */ []));
19215
+ primitives = computed(() => this._params().primitives?.() ?? [], ...(ngDevMode ? [{ debugName: "primitives" }] : /* istanbul ignore next */ []));
19216
+ symbolInstances = computed(() => this._params().symbolInstances?.() ?? [], ...(ngDevMode ? [{ debugName: "symbolInstances" }] : /* istanbul ignore next */ []));
19217
19217
  // Effect to trigger change detection when signals update
19218
19218
  selectionEffect = effect(() => {
19219
19219
  this.transformProperties();
@@ -19221,15 +19221,15 @@ class TransformPanelComponent {
19221
19221
  this.primitives();
19222
19222
  this.symbolInstances();
19223
19223
  this.cdr.markForCheck();
19224
- }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : []));
19224
+ }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : /* istanbul ignore next */ []));
19225
19225
  onPropertyChange(event) {
19226
19226
  this._params().onPropertyChange?.(event);
19227
19227
  }
19228
19228
  onOpenBindings(property) {
19229
19229
  this._params().onOpenBindings?.(property);
19230
19230
  }
19231
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: TransformPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19232
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: TransformPanelComponent, isStandalone: true, selector: "mm-transform-panel", inputs: { params: "params" }, ngImport: i0, template: `
19231
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TransformPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19232
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: TransformPanelComponent, isStandalone: true, selector: "mm-transform-panel", inputs: { params: "params" }, ngImport: i0, template: `
19233
19233
  <div class="panel-container">
19234
19234
  <mm-transform-property-editor
19235
19235
  [transformProperties]="transformProperties()"
@@ -19242,7 +19242,7 @@ class TransformPanelComponent {
19242
19242
  </div>
19243
19243
  `, isInline: true, styles: [":host{display:block;height:100%}.panel-container{height:100%;overflow:hidden;background:var(--dv-pane-background-color, #1f2e40)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TransformPropertyEditorComponent, selector: "mm-transform-property-editor", inputs: ["transformProperties", "propertyBindings", "primitives", "symbolInstances"], outputs: ["propertiesChange", "openBindings"] }] });
19244
19244
  }
19245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: TransformPanelComponent, decorators: [{
19245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TransformPanelComponent, decorators: [{
19246
19246
  type: Component,
19247
19247
  args: [{ selector: 'mm-transform-panel', standalone: true, imports: [CommonModule, TransformPropertyEditorComponent], template: `
19248
19248
  <div class="panel-container">
@@ -19283,11 +19283,11 @@ class AnimationEditorComponent {
19283
19283
  /** Emitted when animations change */
19284
19284
  animationsChange = new EventEmitter();
19285
19285
  // State
19286
- _editingAnimationId = signal(null, ...(ngDevMode ? [{ debugName: "_editingAnimationId" }] : []));
19287
- _showingPresetPicker = signal(false, ...(ngDevMode ? [{ debugName: "_showingPresetPicker" }] : []));
19286
+ _editingAnimationId = signal(null, ...(ngDevMode ? [{ debugName: "_editingAnimationId" }] : /* istanbul ignore next */ []));
19287
+ _showingPresetPicker = signal(false, ...(ngDevMode ? [{ debugName: "_showingPresetPicker" }] : /* istanbul ignore next */ []));
19288
19288
  // Computed
19289
- editingAnimationId = computed(() => this._editingAnimationId(), ...(ngDevMode ? [{ debugName: "editingAnimationId" }] : []));
19290
- showingPresetPicker = computed(() => this._showingPresetPicker(), ...(ngDevMode ? [{ debugName: "showingPresetPicker" }] : []));
19289
+ editingAnimationId = computed(() => this._editingAnimationId(), ...(ngDevMode ? [{ debugName: "editingAnimationId" }] : /* istanbul ignore next */ []));
19290
+ showingPresetPicker = computed(() => this._showingPresetPicker(), ...(ngDevMode ? [{ debugName: "showingPresetPicker" }] : /* istanbul ignore next */ []));
19291
19291
  // Options
19292
19292
  animationTypes = [
19293
19293
  { value: 'animate', label: 'Attribute Animation' },
@@ -19563,8 +19563,8 @@ class AnimationEditorComponent {
19563
19563
  const unit = match[2] || 's';
19564
19564
  return unit === 'ms' ? value / 1000 : value;
19565
19565
  }
19566
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AnimationEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19567
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: AnimationEditorComponent, isStandalone: true, selector: "mm-animation-editor", inputs: { primitiveId: "primitiveId", animations: "animations", availableProperties: "availableProperties", availablePaths: "availablePaths" }, outputs: { animationsChange: "animationsChange" }, ngImport: i0, template: `
19566
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AnimationEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19567
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AnimationEditorComponent, isStandalone: true, selector: "mm-animation-editor", inputs: { primitiveId: "primitiveId", animations: "animations", availableProperties: "availableProperties", availablePaths: "availablePaths" }, outputs: { animationsChange: "animationsChange" }, ngImport: i0, template: `
19568
19568
  <div class="animation-editor">
19569
19569
  <!-- Toolbar -->
19570
19570
  <div class="editor-toolbar">
@@ -19863,7 +19863,7 @@ class AnimationEditorComponent {
19863
19863
  </div>
19864
19864
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.animation-editor{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;border:1px solid #e0e0e0;border-radius:4px;background:#fafafa}.editor-toolbar{flex-shrink:0;display:flex;justify-content:flex-end;padding:.5rem;border-bottom:1px solid #e0e0e0}.section-content{flex:1;min-height:0;overflow-y:auto;padding:.5rem}.empty-state{text-align:center;padding:1rem;color:#666}.empty-state p{margin:0 0 .5rem;font-size:12px}.animation-item{background:#fff;border:1px solid #e0e0e0;border-radius:4px;margin-bottom:.5rem}.animation-item:last-child{margin-bottom:0}.item-header{display:flex;align-items:center;gap:.5rem;padding:.5rem;cursor:pointer}.item-header:hover{background:#f5f5f5}.item-icon{font-size:14px}.item-name{font-size:12px;font-weight:500;flex:1}.item-info{font-size:11px;color:#666}.item-actions{display:flex;gap:.25rem;opacity:0;transition:opacity .15s}.item-header:hover .item-actions{opacity:1}.item-edit-form{padding:.75rem;border-top:1px solid #e0e0e0;background:#fafafa}.form-row{margin-bottom:.75rem}.form-row:last-child{margin-bottom:0}.form-row label{display:block;font-size:11px;color:#666;margin-bottom:.25rem}.form-row input[type=checkbox]{margin-right:.5rem}.form-row-group{display:flex;gap:.5rem}.form-row.half{flex:1}.form-row.hint-row{background:#e3f2fd;padding:.5rem;border-radius:4px;margin-top:.5rem}.hint-text{font-size:11px;color:#1565c0;line-height:1.4}.input-with-unit{display:flex;align-items:center;gap:.25rem}.input-with-unit .unit{font-size:11px;color:#666}.anchor-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;width:72px}.anchor-point{width:20px;height:20px;border:1px solid #ccc;border-radius:2px;background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}.anchor-point:hover{border-color:#1976d2}.anchor-point.selected{border-color:#1976d2;background:#e3f2fd}.anchor-dot{width:6px;height:6px;border-radius:50%;background:#666}.anchor-point.selected .anchor-dot{background:#1976d2}.preset-picker{background:#fff;border:1px solid #1976d2;border-radius:4px;margin-top:.5rem}.preset-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem;background:#e3f2fd;border-bottom:1px solid #1976d2;font-size:12px;font-weight:500}.preset-groups{padding:.5rem;max-height:200px;overflow-y:auto}.preset-group{margin-bottom:.75rem}.preset-group:last-child{margin-bottom:0}.group-name{font-size:10px;text-transform:uppercase;color:#666;margin-bottom:.25rem}.group-presets{display:flex;flex-wrap:wrap;gap:.25rem}.preset-button{font-size:11px;padding:.25rem .5rem;border:1px solid #e0e0e0;border-radius:3px;background:#fff;cursor:pointer}.preset-button:hover{border-color:#1976d2;background:#e3f2fd}.path-textarea{width:100%;min-height:60px;font-family:monospace;font-size:11px;padding:.5rem;border:1px solid #ccc;border-radius:4px;resize:vertical;line-height:1.4;box-sizing:border-box}.path-preview{margin:.5rem 0}.motion-path-preview{width:100%;height:60px;background:#f5f5f5;border:1px solid #e0e0e0;border-radius:4px}.path-select{width:100%;padding:.5rem;border:1px solid #ccc;border-radius:4px;font-size:12px;background:#fff}.flow-particles-hint{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#e8f5e9;border-radius:4px;margin-bottom:.75rem;font-size:11px;color:#2e7d32}.hint-icon{font-size:14px}.color-input{width:40px;height:24px;border:1px solid #ccc;border-radius:4px;cursor:pointer;padding:0}.color-hint{font-size:10px;color:#666;margin-left:.5rem}:host ::ng-deep .k-dropdownlist,:host ::ng-deep .k-textbox,:host ::ng-deep .k-numerictextbox{width:100%}:host ::ng-deep .k-input-sm{font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "directive", type: i3$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: i3$1.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: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: IconsModule }] });
19865
19865
  }
19866
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AnimationEditorComponent, decorators: [{
19866
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AnimationEditorComponent, decorators: [{
19867
19867
  type: Component,
19868
19868
  args: [{ selector: 'mm-animation-editor', standalone: true, imports: [
19869
19869
  CommonModule,
@@ -20191,15 +20191,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
20191
20191
  class AnimationsPanelComponent {
20192
20192
  cdr = inject(ChangeDetectorRef);
20193
20193
  // Use signal-based params to ensure reactivity when dockview sets params after init
20194
- _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : []));
20194
+ _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : /* istanbul ignore next */ []));
20195
20195
  set params(value) {
20196
20196
  this._params.set(value);
20197
20197
  }
20198
- primitiveId = computed(() => this._params().primitiveId?.() ?? '', ...(ngDevMode ? [{ debugName: "primitiveId" }] : []));
20199
- animations = computed(() => this._params().animations?.() ?? [], ...(ngDevMode ? [{ debugName: "animations" }] : []));
20200
- availableProperties = computed(() => this._params().availableProperties?.() ?? [], ...(ngDevMode ? [{ debugName: "availableProperties" }] : []));
20201
- availablePaths = computed(() => this._params().availablePaths?.() ?? [], ...(ngDevMode ? [{ debugName: "availablePaths" }] : []));
20202
- supportsAnimations = computed(() => this._params().supportsAnimations?.() ?? true, ...(ngDevMode ? [{ debugName: "supportsAnimations" }] : []));
20198
+ primitiveId = computed(() => this._params().primitiveId?.() ?? '', ...(ngDevMode ? [{ debugName: "primitiveId" }] : /* istanbul ignore next */ []));
20199
+ animations = computed(() => this._params().animations?.() ?? [], ...(ngDevMode ? [{ debugName: "animations" }] : /* istanbul ignore next */ []));
20200
+ availableProperties = computed(() => this._params().availableProperties?.() ?? [], ...(ngDevMode ? [{ debugName: "availableProperties" }] : /* istanbul ignore next */ []));
20201
+ availablePaths = computed(() => this._params().availablePaths?.() ?? [], ...(ngDevMode ? [{ debugName: "availablePaths" }] : /* istanbul ignore next */ []));
20202
+ supportsAnimations = computed(() => this._params().supportsAnimations?.() ?? true, ...(ngDevMode ? [{ debugName: "supportsAnimations" }] : /* istanbul ignore next */ []));
20203
20203
  // Effect to trigger change detection when signals update
20204
20204
  selectionEffect = effect(() => {
20205
20205
  this.primitiveId();
@@ -20208,12 +20208,12 @@ class AnimationsPanelComponent {
20208
20208
  this.availablePaths();
20209
20209
  this.supportsAnimations();
20210
20210
  this.cdr.markForCheck();
20211
- }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : []));
20211
+ }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : /* istanbul ignore next */ []));
20212
20212
  onAnimationsChange(event) {
20213
20213
  this._params().onAnimationsChange?.(event);
20214
20214
  }
20215
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AnimationsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20216
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: AnimationsPanelComponent, isStandalone: true, selector: "mm-animations-panel", inputs: { params: "params" }, ngImport: i0, template: `
20215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AnimationsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: AnimationsPanelComponent, isStandalone: true, selector: "mm-animations-panel", inputs: { params: "params" }, ngImport: i0, template: `
20217
20217
  <div class="panel-container">
20218
20218
  @if (primitiveId()) {
20219
20219
  @if (supportsAnimations()) {
@@ -20239,7 +20239,7 @@ class AnimationsPanelComponent {
20239
20239
  </div>
20240
20240
  `, isInline: true, styles: [":host{display:block;height:100%}.panel-container{height:100%;overflow:hidden;background:var(--dv-pane-background-color, #1f2e40)}.no-selection,.not-supported{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:1rem;text-align:center;color:var(--text-secondary, #9292a6)}.no-selection p,.not-supported p{margin:0}.no-selection .hint,.not-supported .hint{margin-top:.5rem;font-size:.85rem;opacity:.7}.not-supported{color:var(--text-muted, #6c757d)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AnimationEditorComponent, selector: "mm-animation-editor", inputs: ["primitiveId", "animations", "availableProperties", "availablePaths"], outputs: ["animationsChange"] }] });
20241
20241
  }
20242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AnimationsPanelComponent, decorators: [{
20242
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: AnimationsPanelComponent, decorators: [{
20243
20243
  type: Component,
20244
20244
  args: [{ selector: 'mm-animations-panel', standalone: true, imports: [CommonModule, AnimationEditorComponent], template: `
20245
20245
  <div class="panel-container">
@@ -20287,7 +20287,7 @@ class SimulationPanelComponent {
20287
20287
  valueChange = new EventEmitter();
20288
20288
  resetValues = new EventEmitter();
20289
20289
  // Internal state
20290
- _localValues = signal({}, ...(ngDevMode ? [{ debugName: "_localValues" }] : []));
20290
+ _localValues = signal({}, ...(ngDevMode ? [{ debugName: "_localValues" }] : /* istanbul ignore next */ []));
20291
20291
  /**
20292
20292
  * Check if there are any properties to display
20293
20293
  */
@@ -20343,8 +20343,8 @@ class SimulationPanelComponent {
20343
20343
  this._localValues.set({});
20344
20344
  this.resetValues.emit();
20345
20345
  }
20346
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SimulationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20347
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SimulationPanelComponent, isStandalone: true, selector: "mm-simulation-panel", inputs: { properties: "properties", values: "values" }, outputs: { valueChange: "valueChange", resetValues: "resetValues" }, ngImport: i0, template: `
20346
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SimulationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20347
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: SimulationPanelComponent, isStandalone: true, selector: "mm-simulation-panel", inputs: { properties: "properties", values: "values" }, outputs: { valueChange: "valueChange", resetValues: "resetValues" }, ngImport: i0, template: `
20348
20348
  @if (hasProperties()) {
20349
20349
  <div class="simulation-panel" data-testid="simulation-panel">
20350
20350
  <div class="panel-toolbar">
@@ -20437,7 +20437,7 @@ class SimulationPanelComponent {
20437
20437
  }
20438
20438
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.simulation-panel{background:#fff;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.panel-toolbar{flex-shrink:0;display:flex;justify-content:flex-end;padding:.5rem;border-bottom:1px solid #e0e0e0}.panel-content{padding:1rem;flex:1;min-height:0;overflow-y:auto}.properties-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}.property-control{position:relative;background:#fafafa;border:1px solid #e0e0e0;border-radius:8px;padding:.75rem 2rem .75rem .75rem}.property-control:hover{border-color:#bdbdbd}.property-control.color-type{min-width:180px}.control-header{display:flex;align-items:baseline;gap:.25rem;margin-bottom:.5rem}.property-name{font-size:12px;font-weight:500;color:#333}.property-unit{font-size:10px;color:#666}.number-control{display:flex;align-items:center;gap:.5rem;min-width:0}.value-slider{flex:1;min-width:0;height:6px;-webkit-appearance:none;appearance:none;background:linear-gradient(to right,#e3f2fd,#1976d2);border-radius:3px;cursor:pointer}.value-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:#1976d2;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 4px #0000004d}.value-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#1976d2;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 4px #0000004d}.value-input{flex:0 0 50px;width:50px;padding:.25rem .375rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px;text-align:right;box-sizing:border-box}.value-input:focus{outline:none;border-color:#1976d2}.value-range{display:flex;justify-content:space-between;font-size:9px;color:#999;margin-top:.25rem}.color-control{display:flex;align-items:center;gap:.5rem}.color-control input[type=color]{width:40px;height:32px;padding:2px;border:1px solid #e0e0e0;border-radius:4px;cursor:pointer}.color-input{flex:1;padding:.25rem .5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:11px;font-family:Consolas,Monaco,monospace}.color-input:focus{outline:none;border-color:#1976d2}.boolean-control{display:flex;align-items:center}.toggle-label{display:flex;align-items:center;gap:.5rem;cursor:pointer}.toggle-label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.toggle-text{font-size:12px;color:#666}.string-control input{width:100%;padding:.375rem .5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:12px}.string-control input:focus{outline:none;border-color:#1976d2}.reset-button{position:absolute;top:.5rem;right:.25rem;opacity:0;transition:opacity .15s}.property-control:hover .reset-button{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }] });
20439
20439
  }
20440
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SimulationPanelComponent, decorators: [{
20440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SimulationPanelComponent, decorators: [{
20441
20441
  type: Component,
20442
20442
  args: [{ selector: 'mm-simulation-panel', standalone: true, imports: [CommonModule, FormsModule, ButtonsModule, InputsModule, DecimalPipe], template: `
20443
20443
  @if (hasProperties()) {
@@ -20550,26 +20550,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
20550
20550
  class SimulationPanelWrapperComponent {
20551
20551
  cdr = inject(ChangeDetectorRef);
20552
20552
  // Use signal-based params to ensure reactivity when dockview sets params after init
20553
- _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : []));
20553
+ _params = signal({}, ...(ngDevMode ? [{ debugName: "_params" }] : /* istanbul ignore next */ []));
20554
20554
  set params(value) {
20555
20555
  this._params.set(value);
20556
20556
  }
20557
- properties = computed(() => this._params().properties?.() ?? [], ...(ngDevMode ? [{ debugName: "properties" }] : []));
20558
- values = computed(() => this._params().values?.() ?? {}, ...(ngDevMode ? [{ debugName: "values" }] : []));
20557
+ properties = computed(() => this._params().properties?.() ?? [], ...(ngDevMode ? [{ debugName: "properties" }] : /* istanbul ignore next */ []));
20558
+ values = computed(() => this._params().values?.() ?? {}, ...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
20559
20559
  // Effect to trigger change detection when signals update
20560
20560
  selectionEffect = effect(() => {
20561
20561
  this.properties();
20562
20562
  this.values();
20563
20563
  this.cdr.markForCheck();
20564
- }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : []));
20564
+ }, ...(ngDevMode ? [{ debugName: "selectionEffect" }] : /* istanbul ignore next */ []));
20565
20565
  onValueChange(event) {
20566
20566
  this._params().onValueChange?.(event);
20567
20567
  }
20568
20568
  onResetValues() {
20569
20569
  this._params().onResetValues?.();
20570
20570
  }
20571
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SimulationPanelWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20572
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SimulationPanelWrapperComponent, isStandalone: true, selector: "mm-simulation-panel-wrapper", inputs: { params: "params" }, ngImport: i0, template: `
20571
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SimulationPanelWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20572
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: SimulationPanelWrapperComponent, isStandalone: true, selector: "mm-simulation-panel-wrapper", inputs: { params: "params" }, ngImport: i0, template: `
20573
20573
  <div class="panel-container">
20574
20574
  @if (properties().length > 0) {
20575
20575
  <mm-simulation-panel
@@ -20587,7 +20587,7 @@ class SimulationPanelWrapperComponent {
20587
20587
  </div>
20588
20588
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.panel-container{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;background:var(--dv-pane-background-color, #1f2e40)}.no-properties{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:1rem;text-align:center;color:var(--text-secondary, #9292a6)}.no-properties p{margin:0}.no-properties .hint{margin-top:.5rem;font-size:.85rem;opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: SimulationPanelComponent, selector: "mm-simulation-panel", inputs: ["properties", "values"], outputs: ["valueChange", "resetValues"] }] });
20589
20589
  }
20590
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SimulationPanelWrapperComponent, decorators: [{
20590
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SimulationPanelWrapperComponent, decorators: [{
20591
20591
  type: Component,
20592
20592
  args: [{ selector: 'mm-simulation-panel-wrapper', standalone: true, imports: [CommonModule, SimulationPanelComponent], template: `
20593
20593
  <div class="panel-container">
@@ -20633,8 +20633,8 @@ class SettingsPanelComponent {
20633
20633
  this.onSettingsChange(key, value);
20634
20634
  }
20635
20635
  }
20636
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SettingsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20637
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SettingsPanelComponent, isStandalone: true, selector: "mm-settings-panel", ngImport: i0, template: `
20636
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SettingsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20637
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: SettingsPanelComponent, isStandalone: true, selector: "mm-settings-panel", ngImport: i0, template: `
20638
20638
  <div class="panel-container">
20639
20639
  <div class="settings-section">
20640
20640
  <h4>Symbol</h4>
@@ -20709,7 +20709,7 @@ class SettingsPanelComponent {
20709
20709
  </div>
20710
20710
  `, isInline: true, styles: [".panel-container{padding:.5rem;background:#fff}.settings-section{margin-bottom:1rem;padding-bottom:.75rem;border-bottom:1px solid #e0e0e0}.settings-section:last-child{border-bottom:none;margin-bottom:0}.settings-section h4{font-size:11px;font-weight:600;text-transform:uppercase;color:#666;margin:0 0 .5rem;letter-spacing:.5px}.form-group{margin-bottom:.5rem}.form-group label{display:block;font-size:11px;color:#666;margin-bottom:.25rem}.form-group input,.form-group textarea,.form-group kendo-numerictextbox{width:100%}.form-row{display:flex;gap:.5rem}.form-row .form-group{flex:1}\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.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: InputsModule }, { kind: "directive", type: i3$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: i3$1.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$1.TextAreaDirective, selector: "textarea[kendoTextArea]", inputs: ["autoSize", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: NumericTextBoxModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20711
20711
  }
20712
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SettingsPanelComponent, decorators: [{
20712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SettingsPanelComponent, decorators: [{
20713
20713
  type: Component,
20714
20714
  args: [{ selector: 'mm-settings-panel', standalone: true, imports: [CommonModule, FormsModule, InputsModule, NumericTextBoxModule], template: `
20715
20715
  <div class="panel-container">
@@ -20815,7 +20815,7 @@ class StylesPanelComponent {
20815
20815
  return this._params;
20816
20816
  }
20817
20817
  // Local state for selected style
20818
- _selectedStyleId = signal(null, ...(ngDevMode ? [{ debugName: "_selectedStyleId" }] : []));
20818
+ _selectedStyleId = signal(null, ...(ngDevMode ? [{ debugName: "_selectedStyleId" }] : /* istanbul ignore next */ []));
20819
20819
  // Store reference to the styleClasses signal for proper tracking
20820
20820
  _styleClassesSignal = null;
20821
20821
  // Effect to trigger change detection when styleClasses signal updates
@@ -20829,7 +20829,7 @@ class StylesPanelComponent {
20829
20829
  this._selectedStyleId();
20830
20830
  // Trigger change detection
20831
20831
  this.cdr.markForCheck();
20832
- }, ...(ngDevMode ? [{ debugName: "styleClassesEffect" }] : []));
20832
+ }, ...(ngDevMode ? [{ debugName: "styleClassesEffect" }] : /* istanbul ignore next */ []));
20833
20833
  /**
20834
20834
  * Get style classes from params (can be a signal or plain array).
20835
20835
  */
@@ -21018,8 +21018,8 @@ class StylesPanelComponent {
21018
21018
  setTimeout(() => document.body.removeChild(preview), 0);
21019
21019
  }
21020
21020
  }
21021
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StylesPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21022
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StylesPanelComponent, isStandalone: true, selector: "mm-styles-panel", ngImport: i0, template: `
21021
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StylesPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21022
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: StylesPanelComponent, isStandalone: true, selector: "mm-styles-panel", ngImport: i0, template: `
21023
21023
  <div class="panel-container">
21024
21024
  <div class="panel-toolbar">
21025
21025
  <button class="add-button" (click)="addStyle()">+ Add Style</button>
@@ -21143,7 +21143,7 @@ class StylesPanelComponent {
21143
21143
  </div>
21144
21144
  `, isInline: true, styles: [":host{--panel-bg: var(--designer-panel-bg, #fff);--panel-bg-elevated: var(--designer-panel-bg-elevated, #fafafa);--panel-border: var(--designer-panel-border, #e0e0e0);--panel-text: var(--designer-panel-text, #333);--panel-text-secondary: var(--designer-panel-text-secondary, #666);--panel-text-muted: var(--designer-panel-text-muted, #999);--panel-accent: var(--designer-panel-accent, #1976d2);--panel-accent-hover-bg: var(--designer-panel-accent-hover-bg, #e3f2fd);--panel-input-bg: var(--designer-panel-input-bg, #fff);--panel-delete-hover-bg: var(--designer-panel-delete-hover-bg, #ffebee);--panel-delete-color: var(--designer-panel-delete-color, #d32f2f)}.panel-container{display:flex;flex-direction:column;height:100%;min-height:0;overflow-y:auto;background:var(--panel-bg)}.panel-toolbar{display:flex;padding:.5rem;border-bottom:1px solid var(--panel-border);flex-shrink:0}.add-button{flex:1;padding:.375rem .75rem;font-size:12px;border:1px dashed var(--panel-border);background:var(--panel-bg-elevated);border-radius:4px;cursor:pointer;color:var(--panel-text-secondary);transition:all .15s ease}.add-button:hover{border-color:var(--panel-accent);background:var(--panel-accent-hover-bg);color:var(--panel-accent)}.style-list{flex:0 0 auto;padding:.5rem}.style-item{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;border:1px solid var(--panel-border);border-radius:4px;margin-bottom:.375rem;cursor:grab;background:var(--panel-bg);transition:all .15s ease}.style-item:hover{border-color:var(--panel-accent);background:var(--panel-bg-elevated)}.style-item.selected{border-color:var(--panel-accent);background:var(--panel-accent-hover-bg)}.style-item:active{cursor:grabbing}.style-preview{width:24px;height:24px;flex-shrink:0;border-radius:3px;overflow:hidden;background:repeating-conic-gradient(#555 0% 25%,#333 0% 50%) 50% / 8px 8px}.style-preview svg{display:block;width:100%;height:100%}.style-name{flex:1;font-size:12px;color:var(--panel-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.delete-button{width:20px;height:20px;padding:0;border:none;background:transparent;cursor:pointer;color:var(--panel-text-muted);border-radius:3px;display:flex;align-items:center;justify-content:center;opacity:.5;transition:all .15s ease}.delete-button:hover{background:var(--panel-delete-hover-bg);color:var(--panel-delete-color);opacity:1}.empty-state{padding:1.5rem 1rem;text-align:center;color:var(--panel-text-muted)}.empty-state p{margin:0;font-size:12px}.empty-state .hint{margin-top:.25rem;font-size:11px}.style-editor{border-top:1px solid var(--panel-border);padding:.5rem;background:var(--panel-bg-elevated)}.editor-section h4{font-size:11px;font-weight:600;text-transform:uppercase;color:var(--panel-text-secondary);margin:0 0 .5rem;letter-spacing:.5px}.form-group{margin-bottom:.5rem}.form-group label{display:block;font-size:11px;color:var(--panel-text-secondary);margin-bottom:.25rem}.form-group input[type=text]{width:150px;padding:.25rem .5rem;border:1px solid var(--panel-border);border-radius:4px;font-size:12px;background:var(--panel-input-bg);color:var(--panel-text)}.form-group input[type=text]:focus{outline:none;border-color:var(--panel-accent)}.form-group input[type=number]{width:80px;padding:.25rem .5rem;border:1px solid var(--panel-border);border-radius:4px;font-size:12px;background:var(--panel-input-bg);color:var(--panel-text)}.form-group input[type=number]:focus{outline:none;border-color:var(--panel-accent)}.color-row{display:flex;align-items:center;gap:.5rem}.color-row input[type=color]{width:32px;height:24px;padding:2px;border:1px solid var(--panel-border);border-radius:4px;cursor:pointer}.opacity-slider{flex:1;height:4px;-webkit-appearance:none;appearance:none;background:linear-gradient(to right,transparent,var(--panel-accent));border-radius:2px;cursor:pointer}.opacity-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;background:var(--panel-accent);cursor:pointer;border:2px solid var(--panel-bg);box-shadow:0 1px 3px #0000004d}.opacity-slider::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--panel-accent);cursor:pointer;border:2px solid var(--panel-bg);box-shadow:0 1px 3px #0000004d}.opacity-value{width:36px;font-size:11px;color:var(--panel-text-secondary);text-align:right}.line-type-row{display:flex;align-items:center;gap:.5rem}.line-type-select{flex:1;padding:.25rem .5rem;border:1px solid var(--panel-border);border-radius:4px;font-size:12px;background:var(--panel-input-bg);color:var(--panel-text)}.line-type-select:focus{outline:none;border-color:var(--panel-accent)}.line-preview{width:50px;height:16px;border:1px solid var(--panel-border);border-radius:3px;background:var(--panel-input-bg)}.panel-footer{padding:.5rem;border-top:1px solid var(--panel-border);background:var(--panel-bg-elevated)}.panel-footer .hint{margin:0;font-size:10px;color:var(--panel-text-muted);text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: InputsModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
21145
21145
  }
21146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StylesPanelComponent, decorators: [{
21146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: StylesPanelComponent, decorators: [{
21147
21147
  type: Component,
21148
21148
  args: [{ selector: 'mm-styles-panel', standalone: true, imports: [CommonModule, FormsModule, InputsModule, ButtonsModule, DecimalPipe], template: `
21149
21149
  <div class="panel-container">
@@ -21348,7 +21348,7 @@ class ProcessDesignerComponent {
21348
21348
  * In symbol editor mode, these come from the symbol definition.
21349
21349
  * Stored as a signal for reactive updates in dockview panels.
21350
21350
  */
21351
- _transformPropertiesInput = signal([], ...(ngDevMode ? [{ debugName: "_transformPropertiesInput" }] : []));
21351
+ _transformPropertiesInput = signal([], ...(ngDevMode ? [{ debugName: "_transformPropertiesInput" }] : /* istanbul ignore next */ []));
21352
21352
  set transformProperties(value) {
21353
21353
  this._transformPropertiesInput.set(value);
21354
21354
  }
@@ -21361,7 +21361,7 @@ class ProcessDesignerComponent {
21361
21361
  * Used to evaluate animation enabled states based on expressions.
21362
21362
  * Stored as a signal for reactive updates in dockview panels.
21363
21363
  */
21364
- _propertyBindings = signal([], ...(ngDevMode ? [{ debugName: "_propertyBindings" }] : []));
21364
+ _propertyBindings = signal([], ...(ngDevMode ? [{ debugName: "_propertyBindings" }] : /* istanbul ignore next */ []));
21365
21365
  set propertyBindings(value) {
21366
21366
  this._propertyBindings.set(value);
21367
21367
  }
@@ -21374,7 +21374,7 @@ class ProcessDesignerComponent {
21374
21374
  * When set, these override default values for animation evaluation.
21375
21375
  * Stored as a signal for reactive animation enabled state evaluation.
21376
21376
  */
21377
- _simulationPropertyValues = signal({}, ...(ngDevMode ? [{ debugName: "_simulationPropertyValues" }] : []));
21377
+ _simulationPropertyValues = signal({}, ...(ngDevMode ? [{ debugName: "_simulationPropertyValues" }] : /* istanbul ignore next */ []));
21378
21378
  set simulationPropertyValues(value) {
21379
21379
  this._simulationPropertyValues.set(value);
21380
21380
  }
@@ -21389,22 +21389,22 @@ class ProcessDesignerComponent {
21389
21389
  * Diagram-level transform properties.
21390
21390
  * When editorMode='diagram', these are stored in the diagram itself.
21391
21391
  */
21392
- _diagramTransformProperties = signal([], ...(ngDevMode ? [{ debugName: "_diagramTransformProperties" }] : []));
21392
+ _diagramTransformProperties = signal([], ...(ngDevMode ? [{ debugName: "_diagramTransformProperties" }] : /* istanbul ignore next */ []));
21393
21393
  /**
21394
21394
  * Diagram-level property bindings.
21395
21395
  * When editorMode='diagram', these are stored in the diagram itself.
21396
21396
  */
21397
- _diagramPropertyBindings = signal([], ...(ngDevMode ? [{ debugName: "_diagramPropertyBindings" }] : []));
21397
+ _diagramPropertyBindings = signal([], ...(ngDevMode ? [{ debugName: "_diagramPropertyBindings" }] : /* istanbul ignore next */ []));
21398
21398
  /**
21399
21399
  * Diagram-level animations.
21400
21400
  * When editorMode='diagram', these are stored in the diagram itself.
21401
21401
  */
21402
- _diagramAnimations = signal([], ...(ngDevMode ? [{ debugName: "_diagramAnimations" }] : []));
21402
+ _diagramAnimations = signal([], ...(ngDevMode ? [{ debugName: "_diagramAnimations" }] : /* istanbul ignore next */ []));
21403
21403
  /**
21404
21404
  * Diagram-level simulation values for testing bindings.
21405
21405
  * Used to preview data binding effects in diagram mode.
21406
21406
  */
21407
- _diagramSimulationValues = signal({}, ...(ngDevMode ? [{ debugName: "_diagramSimulationValues" }] : []));
21407
+ _diagramSimulationValues = signal({}, ...(ngDevMode ? [{ debugName: "_diagramSimulationValues" }] : /* istanbul ignore next */ []));
21408
21408
  diagramChange = new EventEmitter();
21409
21409
  saveRequest = new EventEmitter();
21410
21410
  /**
@@ -21449,7 +21449,7 @@ class ProcessDesignerComponent {
21449
21449
  diagramService = inject(DesignerDiagramService);
21450
21450
  // State signals
21451
21451
  // Diagram is now owned by DesignerDiagramService - computed signal for reactivity
21452
- _diagram = computed(() => this.diagramService.diagram(), ...(ngDevMode ? [{ debugName: "_diagram" }] : []));
21452
+ _diagram = computed(() => this.diagramService.diagram(), ...(ngDevMode ? [{ debugName: "_diagram" }] : /* istanbul ignore next */ []));
21453
21453
  // Selection is now managed by DesignerSelectionService
21454
21454
  // Drag state is now managed by DesignerDragService - adapter for legacy interface
21455
21455
  // Resize state is now managed by DesignerResizeService - adapter for legacy interface
@@ -21467,21 +21467,21 @@ class ProcessDesignerComponent {
21467
21467
  isGroup: state.itemType === 'group',
21468
21468
  groupChildData: state.groupChildData ?? undefined
21469
21469
  };
21470
- }, ...(ngDevMode ? [{ debugName: "resizeState" }] : []));
21470
+ }, ...(ngDevMode ? [{ debugName: "resizeState" }] : /* istanbul ignore next */ []));
21471
21471
  _panState = signal({
21472
21472
  isPanning: false,
21473
21473
  startMousePosition: null,
21474
21474
  startPanOffset: null
21475
- }, ...(ngDevMode ? [{ debugName: "_panState" }] : []));
21475
+ }, ...(ngDevMode ? [{ debugName: "_panState" }] : /* istanbul ignore next */ []));
21476
21476
  // selectionRect is now managed by DesignerSelectionService
21477
21477
  // hasChanges is now managed by DesignerStateService
21478
21478
  // Panel visibility state
21479
- _showLeftPanel = signal(true, ...(ngDevMode ? [{ debugName: "_showLeftPanel" }] : []));
21480
- _showRightPanel = signal(true, ...(ngDevMode ? [{ debugName: "_showRightPanel" }] : []));
21479
+ _showLeftPanel = signal(true, ...(ngDevMode ? [{ debugName: "_showLeftPanel" }] : /* istanbul ignore next */ []));
21480
+ _showRightPanel = signal(true, ...(ngDevMode ? [{ debugName: "_showRightPanel" }] : /* istanbul ignore next */ []));
21481
21481
  // Dockview layout state
21482
21482
  layoutService = inject(DesignerLayoutService);
21483
21483
  dockviewApi = null;
21484
- _dockviewReady = signal(false, ...(ngDevMode ? [{ debugName: "_dockviewReady" }] : []));
21484
+ _dockviewReady = signal(false, ...(ngDevMode ? [{ debugName: "_dockviewReady" }] : /* istanbul ignore next */ []));
21485
21485
  dockviewReady = this._dockviewReady.asReadonly();
21486
21486
  // Dockview panel visibility tracking
21487
21487
  _panelVisibility = signal({
@@ -21493,16 +21493,16 @@ class ProcessDesignerComponent {
21493
21493
  simulation: true,
21494
21494
  settings: true,
21495
21495
  styles: true
21496
- }, ...(ngDevMode ? [{ debugName: "_panelVisibility" }] : []));
21496
+ }, ...(ngDevMode ? [{ debugName: "_panelVisibility" }] : /* istanbul ignore next */ []));
21497
21497
  panelVisibility = this._panelVisibility.asReadonly();
21498
21498
  // Dockview panel width (resizable)
21499
- _dockviewPanelWidth = signal(400, ...(ngDevMode ? [{ debugName: "_dockviewPanelWidth" }] : []));
21499
+ _dockviewPanelWidth = signal(400, ...(ngDevMode ? [{ debugName: "_dockviewPanelWidth" }] : /* istanbul ignore next */ []));
21500
21500
  dockviewPanelWidth = this._dockviewPanelWidth.asReadonly();
21501
21501
  _isResizingDockview = false;
21502
21502
  _resizeStartX = 0;
21503
21503
  _resizeStartWidth = 400;
21504
21504
  // View menu state
21505
- _viewMenuOpen = signal(false, ...(ngDevMode ? [{ debugName: "_viewMenuOpen" }] : []));
21505
+ _viewMenuOpen = signal(false, ...(ngDevMode ? [{ debugName: "_viewMenuOpen" }] : /* istanbul ignore next */ []));
21506
21506
  viewMenuOpen = this._viewMenuOpen.asReadonly();
21507
21507
  /**
21508
21508
  * View menu items for dropdown button
@@ -21520,7 +21520,7 @@ class ProcessDesignerComponent {
21520
21520
  click: () => this.resetDockviewLayout()
21521
21521
  });
21522
21522
  return items;
21523
- }, ...(ngDevMode ? [{ debugName: "viewMenuItems" }] : []));
21523
+ }, ...(ngDevMode ? [{ debugName: "viewMenuItems" }] : /* istanbul ignore next */ []));
21524
21524
  /**
21525
21525
  * Handle view menu item click
21526
21526
  */
@@ -21546,7 +21546,7 @@ class ProcessDesignerComponent {
21546
21546
  * Style classes for the symbol (only used in symbol mode with dockview)
21547
21547
  * Stored as signal for reactivity in dockview panels
21548
21548
  */
21549
- _styleClasses = signal([], ...(ngDevMode ? [{ debugName: "_styleClasses" }] : []));
21549
+ _styleClasses = signal([], ...(ngDevMode ? [{ debugName: "_styleClasses" }] : /* istanbul ignore next */ []));
21550
21550
  set styleClasses(value) {
21551
21551
  this._styleClasses.set(value);
21552
21552
  }
@@ -21560,7 +21560,7 @@ class ProcessDesignerComponent {
21560
21560
  */
21561
21561
  styleClassesChange = new EventEmitter();
21562
21562
  // Container dimensions for effective zoom calculation
21563
- _containerDimensions = signal({ width: 1, height: 1 }, ...(ngDevMode ? [{ debugName: "_containerDimensions" }] : []));
21563
+ _containerDimensions = signal({ width: 1, height: 1 }, ...(ngDevMode ? [{ debugName: "_containerDimensions" }] : /* istanbul ignore next */ []));
21564
21564
  resizeObserver = null;
21565
21565
  // History service for undo/redo
21566
21566
  historyService = inject((DesignerHistoryService));
@@ -21588,25 +21588,25 @@ class ProcessDesignerComponent {
21588
21588
  position: state.screenPosition,
21589
21589
  canvasPosition: state.canvasPosition
21590
21590
  };
21591
- }, ...(ngDevMode ? [{ debugName: "contextMenu" }] : []));
21591
+ }, ...(ngDevMode ? [{ debugName: "contextMenu" }] : /* istanbul ignore next */ []));
21592
21592
  // Sidebar tab state
21593
- _activeSidebarTab = signal('elements', ...(ngDevMode ? [{ debugName: "_activeSidebarTab" }] : []));
21593
+ _activeSidebarTab = signal('elements', ...(ngDevMode ? [{ debugName: "_activeSidebarTab" }] : /* istanbul ignore next */ []));
21594
21594
  activeSidebarTab = this._activeSidebarTab.asReadonly();
21595
21595
  // Path editor state
21596
- _pathEditorVisible = signal(false, ...(ngDevMode ? [{ debugName: "_pathEditorVisible" }] : []));
21597
- _editingPathId = signal(null, ...(ngDevMode ? [{ debugName: "_editingPathId" }] : []));
21596
+ _pathEditorVisible = signal(false, ...(ngDevMode ? [{ debugName: "_pathEditorVisible" }] : /* istanbul ignore next */ []));
21597
+ _editingPathId = signal(null, ...(ngDevMode ? [{ debugName: "_editingPathId" }] : /* istanbul ignore next */ []));
21598
21598
  pathEditorVisible = this._pathEditorVisible.asReadonly();
21599
21599
  // Line endpoint drag state
21600
- _lineEndpointDrag = signal({ isDragging: false, lineId: null, endpoint: null }, ...(ngDevMode ? [{ debugName: "_lineEndpointDrag" }] : []));
21600
+ _lineEndpointDrag = signal({ isDragging: false, lineId: null, endpoint: null }, ...(ngDevMode ? [{ debugName: "_lineEndpointDrag" }] : /* istanbul ignore next */ []));
21601
21601
  // Polyline/Polygon point drag state
21602
- _polyPointDrag = signal({ isDragging: false, primitiveId: null, pointIndex: null }, ...(ngDevMode ? [{ debugName: "_polyPointDrag" }] : []));
21602
+ _polyPointDrag = signal({ isDragging: false, primitiveId: null, pointIndex: null }, ...(ngDevMode ? [{ debugName: "_polyPointDrag" }] : /* istanbul ignore next */ []));
21603
21603
  // Binding editor dialog state
21604
- _showBindingEditor = signal(false, ...(ngDevMode ? [{ debugName: "_showBindingEditor" }] : []));
21605
- _editingBindingProperty = signal(null, ...(ngDevMode ? [{ debugName: "_editingBindingProperty" }] : []));
21604
+ _showBindingEditor = signal(false, ...(ngDevMode ? [{ debugName: "_showBindingEditor" }] : /* istanbul ignore next */ []));
21605
+ _editingBindingProperty = signal(null, ...(ngDevMode ? [{ debugName: "_editingBindingProperty" }] : /* istanbul ignore next */ []));
21606
21606
  showBindingEditor = this._showBindingEditor.asReadonly();
21607
21607
  editingBindingProperty = this._editingBindingProperty.asReadonly();
21608
21608
  // Currently selected polyline point (for deletion with Delete key)
21609
- _selectedPolyPoint = signal(null, ...(ngDevMode ? [{ debugName: "_selectedPolyPoint" }] : []));
21609
+ _selectedPolyPoint = signal(null, ...(ngDevMode ? [{ debugName: "_selectedPolyPoint" }] : /* istanbul ignore next */ []));
21610
21610
  selectedPolyPoint = this._selectedPolyPoint.asReadonly();
21611
21611
  /** The path data string of the currently editing path primitive */
21612
21612
  editingPathData = computed(() => {
@@ -21617,7 +21617,7 @@ class ProcessDesignerComponent {
21617
21617
  if (!primitive || primitive.type !== PrimitiveType.Path)
21618
21618
  return '';
21619
21619
  return primitive.config.d;
21620
- }, ...(ngDevMode ? [{ debugName: "editingPathData" }] : []));
21620
+ }, ...(ngDevMode ? [{ debugName: "editingPathData" }] : /* istanbul ignore next */ []));
21621
21621
  /** Check if exactly one path primitive is selected */
21622
21622
  canEditPath = computed(() => {
21623
21623
  const sel = this.selectionService.selection();
@@ -21627,7 +21627,7 @@ class ProcessDesignerComponent {
21627
21627
  const selectedId = Array.from(sel.elements)[0];
21628
21628
  const primitive = primitives.find(p => p.id === selectedId);
21629
21629
  return primitive?.type === PrimitiveType.Path;
21630
- }, ...(ngDevMode ? [{ debugName: "canEditPath" }] : []));
21630
+ }, ...(ngDevMode ? [{ debugName: "canEditPath" }] : /* istanbul ignore next */ []));
21631
21631
  /** Check if exactly one polyline/polygon is selected */
21632
21632
  isPolylineSelected = computed(() => {
21633
21633
  const sel = this.selectionService.selection();
@@ -21637,7 +21637,7 @@ class ProcessDesignerComponent {
21637
21637
  const selectedId = Array.from(sel.elements)[0];
21638
21638
  const primitive = primitives.find(p => p.id === selectedId);
21639
21639
  return primitive?.type === PrimitiveType.Polyline || primitive?.type === PrimitiveType.Polygon;
21640
- }, ...(ngDevMode ? [{ debugName: "isPolylineSelected" }] : []));
21640
+ }, ...(ngDevMode ? [{ debugName: "isPolylineSelected" }] : /* istanbul ignore next */ []));
21641
21641
  /** Check if a polyline point is selected and can be deleted */
21642
21642
  canDeletePolyPoint = computed(() => {
21643
21643
  const selected = this._selectedPolyPoint();
@@ -21650,7 +21650,7 @@ class ProcessDesignerComponent {
21650
21650
  const polyPrim = primitive;
21651
21651
  const minPoints = primitive.type === PrimitiveType.Polygon ? 3 : 2;
21652
21652
  return polyPrim.config.points.length > minPoints;
21653
- }, ...(ngDevMode ? [{ debugName: "canDeletePolyPoint" }] : []));
21653
+ }, ...(ngDevMode ? [{ debugName: "canDeletePolyPoint" }] : /* istanbul ignore next */ []));
21654
21654
  // Context menu items based on current selection
21655
21655
  contextMenuItems = computed(() => {
21656
21656
  const hasSelection = this.hasSelection();
@@ -21684,7 +21684,7 @@ class ProcessDesignerComponent {
21684
21684
  items.push({ id: 'distributeHorizontally', label: 'Distribute H', icon: '⇿', disabled: selectedCount < 3 }, { id: 'distributeVertically', label: 'Distribute V', icon: '⇵', disabled: selectedCount < 3 }, { id: 'separator6', label: '', separator: true });
21685
21685
  items.push({ id: 'selectAll', label: 'Select All', icon: '☐', shortcut: 'Ctrl+A' });
21686
21686
  return items;
21687
- }, ...(ngDevMode ? [{ debugName: "contextMenuItems" }] : []));
21687
+ }, ...(ngDevMode ? [{ debugName: "contextMenuItems" }] : /* istanbul ignore next */ []));
21688
21688
  // Public readonly signals - delegated to DesignerStateService
21689
21689
  get mode() { return this.stateService.mode; }
21690
21690
  get zoom() { return this.stateService.zoom; }
@@ -21705,7 +21705,7 @@ class ProcessDesignerComponent {
21705
21705
  isPrimitive: state.itemType === 'primitive' || state.itemType === 'group',
21706
21706
  isGroup: state.itemType === 'group'
21707
21707
  };
21708
- }, ...(ngDevMode ? [{ debugName: "dragState" }] : []));
21708
+ }, ...(ngDevMode ? [{ debugName: "dragState" }] : /* istanbul ignore next */ []));
21709
21709
  get selectionRect() { return this.selectionService.selectionRect; }
21710
21710
  get hasChanges() { return this.stateService.hasChanges; }
21711
21711
  /** Clear the hasChanges flag (e.g., after external save) */
@@ -21721,7 +21721,7 @@ class ProcessDesignerComponent {
21721
21721
  get zoomPercentage() { return this.stateService.zoomPercentage; }
21722
21722
  canvasConfig = computed(() => {
21723
21723
  return this._diagram().canvas;
21724
- }, ...(ngDevMode ? [{ debugName: "canvasConfig" }] : []));
21724
+ }, ...(ngDevMode ? [{ debugName: "canvasConfig" }] : /* istanbul ignore next */ []));
21725
21725
  /**
21726
21726
  * ViewBox is now fixed to canvas dimensions.
21727
21727
  * Zoom is handled by scaling the SVG element itself (Figma-style zoom).
@@ -21729,21 +21729,21 @@ class ProcessDesignerComponent {
21729
21729
  viewBox = computed(() => {
21730
21730
  const canvas = this.canvasConfig();
21731
21731
  return `0 0 ${canvas.width} ${canvas.height}`;
21732
- }, ...(ngDevMode ? [{ debugName: "viewBox" }] : []));
21732
+ }, ...(ngDevMode ? [{ debugName: "viewBox" }] : /* istanbul ignore next */ []));
21733
21733
  /**
21734
21734
  * Scaled canvas width based on zoom level.
21735
21735
  * At zoom 2.0, a 500px canvas becomes 1000px on screen.
21736
21736
  */
21737
21737
  scaledCanvasWidth = computed(() => {
21738
21738
  return this.canvasConfig().width * this.stateService.zoom();
21739
- }, ...(ngDevMode ? [{ debugName: "scaledCanvasWidth" }] : []));
21739
+ }, ...(ngDevMode ? [{ debugName: "scaledCanvasWidth" }] : /* istanbul ignore next */ []));
21740
21740
  /**
21741
21741
  * Scaled canvas height based on zoom level.
21742
21742
  * At zoom 2.0, a 300px canvas becomes 600px on screen.
21743
21743
  */
21744
21744
  scaledCanvasHeight = computed(() => {
21745
21745
  return this.canvasConfig().height * this.stateService.zoom();
21746
- }, ...(ngDevMode ? [{ debugName: "scaledCanvasHeight" }] : []));
21746
+ }, ...(ngDevMode ? [{ debugName: "scaledCanvasHeight" }] : /* istanbul ignore next */ []));
21747
21747
  canvasCursor = computed(() => {
21748
21748
  // Show grabbing cursor when actively panning
21749
21749
  if (this._panState().isPanning) {
@@ -21754,7 +21754,7 @@ class ProcessDesignerComponent {
21754
21754
  case 'connect': return 'crosshair';
21755
21755
  default: return 'default';
21756
21756
  }
21757
- }, ...(ngDevMode ? [{ debugName: "canvasCursor" }] : []));
21757
+ }, ...(ngDevMode ? [{ debugName: "canvasCursor" }] : /* istanbul ignore next */ []));
21758
21758
  // ============================================================================
21759
21759
  // Zoom-Scaled UI Element Sizes
21760
21760
  // These ensure UI elements (handles, strokes) maintain constant screen size
@@ -21765,44 +21765,44 @@ class ProcessDesignerComponent {
21765
21765
  */
21766
21766
  effectiveZoom = computed(() => {
21767
21767
  return Math.max(this.stateService.zoom(), 0.1);
21768
- }, ...(ngDevMode ? [{ debugName: "effectiveZoom" }] : []));
21768
+ }, ...(ngDevMode ? [{ debugName: "effectiveZoom" }] : /* istanbul ignore next */ []));
21769
21769
  /** Size of resize handles in canvas units (constant screen size) */
21770
- handleSize = computed(() => 8 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "handleSize" }] : []));
21770
+ handleSize = computed(() => 8 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "handleSize" }] : /* istanbul ignore next */ []));
21771
21771
  /** Offset for resize handles (half of handleSize) */
21772
- handleOffset = computed(() => 4 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "handleOffset" }] : []));
21772
+ handleOffset = computed(() => 4 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "handleOffset" }] : /* istanbul ignore next */ []));
21773
21773
  /** Stroke width for selection indicators */
21774
- selectionStrokeWidth = computed(() => 1 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "selectionStrokeWidth" }] : []));
21774
+ selectionStrokeWidth = computed(() => 1 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "selectionStrokeWidth" }] : /* istanbul ignore next */ []));
21775
21775
  /** Stroke width for selection highlights (thicker) */
21776
- selectionHighlightWidth = computed(() => 1.5 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "selectionHighlightWidth" }] : []));
21776
+ selectionHighlightWidth = computed(() => 1.5 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "selectionHighlightWidth" }] : /* istanbul ignore next */ []));
21777
21777
  /** Dash array for selection indicators */
21778
21778
  selectionDashArray = computed(() => {
21779
21779
  const scale = 1 / this.effectiveZoom();
21780
21780
  return `${4 * scale} ${2 * scale}`;
21781
- }, ...(ngDevMode ? [{ debugName: "selectionDashArray" }] : []));
21781
+ }, ...(ngDevMode ? [{ debugName: "selectionDashArray" }] : /* istanbul ignore next */ []));
21782
21782
  /** Radius for connection ports and point handles */
21783
- portRadius = computed(() => 5 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "portRadius" }] : []));
21783
+ portRadius = computed(() => 5 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "portRadius" }] : /* istanbul ignore next */ []));
21784
21784
  /** Padding around selection boxes */
21785
- selectionPadding = computed(() => 2 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "selectionPadding" }] : []));
21785
+ selectionPadding = computed(() => 2 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "selectionPadding" }] : /* istanbul ignore next */ []));
21786
21786
  /** Stroke width for alignment guide lines */
21787
- guideStrokeWidth = computed(() => 1 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "guideStrokeWidth" }] : []));
21787
+ guideStrokeWidth = computed(() => 1 / this.effectiveZoom(), ...(ngDevMode ? [{ debugName: "guideStrokeWidth" }] : /* istanbul ignore next */ []));
21788
21788
  /** Active alignment guides from the alignment guide service */
21789
21789
  alignmentGuides = this.alignmentGuideService.guides;
21790
21790
  selectedElements = computed(() => {
21791
21791
  return this.selectionService.getSelectedElements(this._diagram());
21792
- }, ...(ngDevMode ? [{ debugName: "selectedElements" }] : []));
21792
+ }, ...(ngDevMode ? [{ debugName: "selectedElements" }] : /* istanbul ignore next */ []));
21793
21793
  selectedConnections = computed(() => {
21794
21794
  return this.selectionService.getSelectedConnections(this._diagram());
21795
- }, ...(ngDevMode ? [{ debugName: "selectedConnections" }] : []));
21795
+ }, ...(ngDevMode ? [{ debugName: "selectedConnections" }] : /* istanbul ignore next */ []));
21796
21796
  selectedPrimitives = computed(() => {
21797
21797
  return this.selectionService.getSelectedPrimitives(this._diagram());
21798
- }, ...(ngDevMode ? [{ debugName: "selectedPrimitives" }] : []));
21798
+ }, ...(ngDevMode ? [{ debugName: "selectedPrimitives" }] : /* istanbul ignore next */ []));
21799
21799
  /**
21800
21800
  * ID of the first selected primitive (for animations panel).
21801
21801
  */
21802
21802
  firstSelectedPrimitiveId = computed(() => {
21803
21803
  const primitives = this.selectedPrimitives();
21804
21804
  return primitives.length > 0 ? primitives[0].id : '';
21805
- }, ...(ngDevMode ? [{ debugName: "firstSelectedPrimitiveId" }] : []));
21805
+ }, ...(ngDevMode ? [{ debugName: "firstSelectedPrimitiveId" }] : /* istanbul ignore next */ []));
21806
21806
  /**
21807
21807
  * Animations of the first selected primitive (for animations panel).
21808
21808
  */
@@ -21811,7 +21811,7 @@ class ProcessDesignerComponent {
21811
21811
  if (primitives.length === 0)
21812
21812
  return [];
21813
21813
  return primitives[0].animations ?? [];
21814
- }, ...(ngDevMode ? [{ debugName: "firstSelectedPrimitiveAnimations" }] : []));
21814
+ }, ...(ngDevMode ? [{ debugName: "firstSelectedPrimitiveAnimations" }] : /* istanbul ignore next */ []));
21815
21815
  /**
21816
21816
  * Primitive types that support animations.
21817
21817
  * Image and text primitives don't have animation rendering support.
@@ -21828,7 +21828,7 @@ class ProcessDesignerComponent {
21828
21828
  if (primitives.length === 0)
21829
21829
  return false;
21830
21830
  return this.animationSupportedTypes.has(primitives[0].type);
21831
- }, ...(ngDevMode ? [{ debugName: "firstSelectedPrimitiveSupportsAnimations" }] : []));
21831
+ }, ...(ngDevMode ? [{ debugName: "firstSelectedPrimitiveSupportsAnimations" }] : /* istanbul ignore next */ []));
21832
21832
  /**
21833
21833
  * Available transform properties for animation property linking.
21834
21834
  * In diagram mode, returns diagram-level properties.
@@ -21840,7 +21840,7 @@ class ProcessDesignerComponent {
21840
21840
  }
21841
21841
  // Use the signal directly for reactive tracking
21842
21842
  return this._transformPropertiesInput();
21843
- }, ...(ngDevMode ? [{ debugName: "availableTransformProperties" }] : []));
21843
+ }, ...(ngDevMode ? [{ debugName: "availableTransformProperties" }] : /* istanbul ignore next */ []));
21844
21844
  /**
21845
21845
  * Effective property bindings for the current mode.
21846
21846
  * In diagram mode, returns diagram-level bindings.
@@ -21851,7 +21851,7 @@ class ProcessDesignerComponent {
21851
21851
  return this._diagramPropertyBindings();
21852
21852
  }
21853
21853
  return this._propertyBindings();
21854
- }, ...(ngDevMode ? [{ debugName: "effectivePropertyBindings" }] : []));
21854
+ }, ...(ngDevMode ? [{ debugName: "effectivePropertyBindings" }] : /* istanbul ignore next */ []));
21855
21855
  /**
21856
21856
  * Effective simulation values for the current mode.
21857
21857
  * In diagram mode, returns diagram-level simulation values.
@@ -21862,7 +21862,7 @@ class ProcessDesignerComponent {
21862
21862
  return this._diagramSimulationValues();
21863
21863
  }
21864
21864
  return this._simulationPropertyValues();
21865
- }, ...(ngDevMode ? [{ debugName: "effectiveSimulationValues" }] : []));
21865
+ }, ...(ngDevMode ? [{ debugName: "effectiveSimulationValues" }] : /* istanbul ignore next */ []));
21866
21866
  /**
21867
21867
  * Computed animation enabled states.
21868
21868
  * Reactively evaluates animation bindings when simulation values or bindings change.
@@ -21914,7 +21914,7 @@ class ProcessDesignerComponent {
21914
21914
  }
21915
21915
  }
21916
21916
  return states;
21917
- }, ...(ngDevMode ? [{ debugName: "animationEnabledStates" }] : []));
21917
+ }, ...(ngDevMode ? [{ debugName: "animationEnabledStates" }] : /* istanbul ignore next */ []));
21918
21918
  /**
21919
21919
  * Computed property values for symbol instances.
21920
21920
  * Evaluates "Pass to child property" bindings and returns a map of
@@ -21972,7 +21972,7 @@ class ProcessDesignerComponent {
21972
21972
  }
21973
21973
  }
21974
21974
  return result;
21975
- }, ...(ngDevMode ? [{ debugName: "symbolInstancePropertyValues" }] : []));
21975
+ }, ...(ngDevMode ? [{ debugName: "symbolInstancePropertyValues" }] : /* istanbul ignore next */ []));
21976
21976
  /**
21977
21977
  * Computed direct effects for symbol instances.
21978
21978
  * Evaluates bindings that target symbol instances with direct effects like fillLevel, style changes, etc.
@@ -22030,7 +22030,7 @@ class ProcessDesignerComponent {
22030
22030
  }
22031
22031
  }
22032
22032
  return result;
22033
- }, ...(ngDevMode ? [{ debugName: "symbolInstanceDirectEffects" }] : []));
22033
+ }, ...(ngDevMode ? [{ debugName: "symbolInstanceDirectEffects" }] : /* istanbul ignore next */ []));
22034
22034
  /**
22035
22035
  * Available path primitives for motion animation.
22036
22036
  * Extracts path data from lines, polylines, and path primitives.
@@ -22047,14 +22047,14 @@ class ProcessDesignerComponent {
22047
22047
  pathData: this.extractPathData(p)
22048
22048
  }))
22049
22049
  .filter(p => p.pathData); // Only include primitives with valid path data
22050
- }, ...(ngDevMode ? [{ debugName: "availablePathPrimitives" }] : []));
22050
+ }, ...(ngDevMode ? [{ debugName: "availablePathPrimitives" }] : /* istanbul ignore next */ []));
22051
22051
  /**
22052
22052
  * All elements in their actual z-order (no sorting by selection).
22053
22053
  * Selection is shown via the overlay layer, not by rendering order.
22054
22054
  */
22055
22055
  orderedElements = computed(() => {
22056
22056
  return this._diagram().elements;
22057
- }, ...(ngDevMode ? [{ debugName: "orderedElements" }] : []));
22057
+ }, ...(ngDevMode ? [{ debugName: "orderedElements" }] : /* istanbul ignore next */ []));
22058
22058
  /**
22059
22059
  * IDs of children that belong to animated groups.
22060
22060
  * These are rendered inside the group's animation wrapper, not separately.
@@ -22071,7 +22071,7 @@ class ProcessDesignerComponent {
22071
22071
  }
22072
22072
  }
22073
22073
  return childIds;
22074
- }, ...(ngDevMode ? [{ debugName: "childrenOfAnimatedGroups" }] : []));
22074
+ }, ...(ngDevMode ? [{ debugName: "childrenOfAnimatedGroups" }] : /* istanbul ignore next */ []));
22075
22075
  /**
22076
22076
  * All primitives in their actual z-order (no sorting by selection).
22077
22077
  * Selection is shown via the overlay layer, not by rendering order.
@@ -22093,7 +22093,7 @@ class ProcessDesignerComponent {
22093
22093
  }
22094
22094
  }
22095
22095
  return primitives;
22096
- }, ...(ngDevMode ? [{ debugName: "orderedPrimitives" }] : []));
22096
+ }, ...(ngDevMode ? [{ debugName: "orderedPrimitives" }] : /* istanbul ignore next */ []));
22097
22097
  /**
22098
22098
  * All symbol instances in their z-order.
22099
22099
  * Excludes symbols that are children of animated groups.
@@ -22105,17 +22105,17 @@ class ProcessDesignerComponent {
22105
22105
  return symbols.filter(s => !excludeIds.has(s.id));
22106
22106
  }
22107
22107
  return symbols;
22108
- }, ...(ngDevMode ? [{ debugName: "orderedSymbols" }] : []));
22108
+ }, ...(ngDevMode ? [{ debugName: "orderedSymbols" }] : /* istanbul ignore next */ []));
22109
22109
  /**
22110
22110
  * Currently selected symbol instances.
22111
22111
  */
22112
22112
  selectedSymbols = computed(() => {
22113
22113
  return this.selectionService.getSelectedSymbols(this._diagram());
22114
- }, ...(ngDevMode ? [{ debugName: "selectedSymbols" }] : []));
22114
+ }, ...(ngDevMode ? [{ debugName: "selectedSymbols" }] : /* istanbul ignore next */ []));
22115
22115
  /**
22116
22116
  * Cached symbol definitions for rendering (mapped by rtId).
22117
22117
  */
22118
- _symbolDefinitions = signal(new Map(), ...(ngDevMode ? [{ debugName: "_symbolDefinitions" }] : []));
22118
+ _symbolDefinitions = signal(new Map(), ...(ngDevMode ? [{ debugName: "_symbolDefinitions" }] : /* istanbul ignore next */ []));
22119
22119
  /**
22120
22120
  * Public accessor for symbol definitions map (used by binding editor dialog).
22121
22121
  */
@@ -27241,8 +27241,8 @@ class ProcessDesignerComponent {
27241
27241
  return '';
27242
27242
  }
27243
27243
  }
27244
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27245
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ProcessDesignerComponent, isStandalone: true, selector: "mm-process-designer", inputs: { diagramConfig: "diagramConfig", editorMode: "editorMode", showSaveButtons: "showSaveButtons", transformProperties: "transformProperties", propertyBindings: "propertyBindings", simulationPropertyValues: "simulationPropertyValues", useDockview: "useDockview", symbolSettings: "symbolSettings", styleClasses: "styleClasses" }, outputs: { diagramChange: "diagramChange", saveRequest: "saveRequest", transformPropertiesChange: "transformPropertiesChange", simulationValueChange: "simulationValueChange", simulationReset: "simulationReset", symbolSettingsChange: "symbolSettingsChange", styleClassesChange: "styleClassesChange" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, providers: [
27244
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27245
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ProcessDesignerComponent, isStandalone: true, selector: "mm-process-designer", inputs: { diagramConfig: "diagramConfig", editorMode: "editorMode", showSaveButtons: "showSaveButtons", transformProperties: "transformProperties", propertyBindings: "propertyBindings", simulationPropertyValues: "simulationPropertyValues", useDockview: "useDockview", symbolSettings: "symbolSettings", styleClasses: "styleClasses" }, outputs: { diagramChange: "diagramChange", saveRequest: "saveRequest", transformPropertiesChange: "transformPropertiesChange", simulationValueChange: "simulationValueChange", simulationReset: "simulationReset", symbolSettingsChange: "symbolSettingsChange", styleClassesChange: "styleClassesChange" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, providers: [
27246
27246
  DesignerDiagramService,
27247
27247
  DesignerSelectionService,
27248
27248
  DesignerClipboardService,
@@ -27264,7 +27264,7 @@ class ProcessDesignerComponent {
27264
27264
  DesignerAlignmentGuideService
27265
27265
  ], viewQueries: [{ propertyName: "canvasContainerRef", first: true, predicate: ["canvasContainer"], descendants: true }, { propertyName: "svgFileInputRef", first: true, predicate: ["svgFileInput"], descendants: true }], ngImport: i0, template: "<div class=\"process-designer\" tabindex=\"0\" data-testid=\"process-designer\">\n <!-- Toolbar -->\n <kendo-toolbar class=\"designer-toolbar\">\n @if (showSaveButtons) {\n <kendo-toolbar-buttongroup>\n <kendo-toolbar-button [svgIcon]=\"saveIcon\" (click)=\"save()\" title=\"Save (Ctrl+S)\" [disabled]=\"!hasChanges()\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"fileTxtIcon\" (click)=\"saveAs()\" title=\"Save As...\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"pencilIcon\" (click)=\"rename()\" title=\"Rename...\"></kendo-toolbar-button>\n </kendo-toolbar-buttongroup>\n <kendo-toolbar-separator></kendo-toolbar-separator>\n }\n\n <kendo-toolbar-buttongroup>\n <kendo-toolbar-button [svgIcon]=\"undoIcon\" (click)=\"undo()\" title=\"Undo (Ctrl+Z)\" [disabled]=\"!canUndo()\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"redoIcon\" (click)=\"redo()\" title=\"Redo (Ctrl+Shift+Z)\" [disabled]=\"!canRedo()\"></kendo-toolbar-button>\n </kendo-toolbar-buttongroup>\n\n <kendo-toolbar-separator></kendo-toolbar-separator>\n\n <kendo-toolbar-buttongroup>\n <kendo-toolbar-button [svgIcon]=\"arrowsNoRepeatIcon\"\n [toggleable]=\"true\"\n [selected]=\"mode() === 'select'\"\n (click)=\"setMode('select')\"\n title=\"Select tool (V)\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"handIcon\"\n [toggleable]=\"true\"\n [selected]=\"mode() === 'pan'\"\n (click)=\"setMode('pan')\"\n title=\"Pan tool (H)\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"linkIcon\"\n [toggleable]=\"true\"\n [selected]=\"mode() === 'connect'\"\n (click)=\"setMode('connect')\"\n title=\"Connect tool (C)\"></kendo-toolbar-button>\n </kendo-toolbar-buttongroup>\n\n <kendo-toolbar-separator></kendo-toolbar-separator>\n\n <kendo-toolbar-buttongroup>\n <kendo-toolbar-button [svgIcon]=\"zoomInIcon\" (click)=\"zoomIn()\" title=\"Zoom in\"></kendo-toolbar-button>\n <span class=\"zoom-level\">{{ zoomPercentage() }}%</span>\n <kendo-toolbar-button [svgIcon]=\"zoomOutIcon\" (click)=\"zoomOut()\" title=\"Zoom out\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"zoomBestFitIcon\" (click)=\"fitToView()\" title=\"Fit content to view\"></kendo-toolbar-button>\n </kendo-toolbar-buttongroup>\n\n <kendo-toolbar-separator></kendo-toolbar-separator>\n\n <kendo-toolbar-buttongroup>\n <kendo-toolbar-button [svgIcon]=\"gridIcon\"\n [toggleable]=\"true\"\n [selected]=\"showGrid()\"\n (selectedChange)=\"toggleGrid()\"\n title=\"Show/hide grid\"></kendo-toolbar-button>\n <kendo-toolbar-button text=\"\u2316\"\n [toggleable]=\"true\"\n [selected]=\"snapToGrid()\"\n (selectedChange)=\"toggleSnapToGrid()\"\n title=\"Snap to grid\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"eyeIcon\"\n [toggleable]=\"true\"\n [selected]=\"showElementNames()\"\n (selectedChange)=\"toggleElementNames()\"\n title=\"Show element names\"></kendo-toolbar-button>\n </kendo-toolbar-buttongroup>\n\n <kendo-toolbar-separator></kendo-toolbar-separator>\n\n <kendo-toolbar-button [svgIcon]=\"uploadIcon\" (click)=\"onImportSvgClick()\" title=\"Import SVG file\"></kendo-toolbar-button>\n <input #svgFileInput\n type=\"file\"\n accept=\".svg,image/svg+xml\"\n style=\"display: none\"\n (change)=\"onSvgFileSelected($event)\"/>\n\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\n\n <kendo-toolbar-buttongroup>\n <kendo-toolbar-button [svgIcon]=\"groupIcon\" (click)=\"groupSelected()\" title=\"Group (Ctrl+G)\"\n [disabled]=\"!canGroup()\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"ungroupIcon\" (click)=\"ungroupSelected()\" title=\"Ungroup (Ctrl+Shift+G)\"\n [disabled]=\"!canUngroup()\"></kendo-toolbar-button>\n </kendo-toolbar-buttongroup>\n\n <kendo-toolbar-separator></kendo-toolbar-separator>\n\n <kendo-toolbar-button [svgIcon]=\"trashIcon\" (click)=\"deleteSelected()\" title=\"Delete selected\"\n [disabled]=\"!hasSelection()\"></kendo-toolbar-button>\n\n <kendo-toolbar-separator></kendo-toolbar-separator>\n\n @if (useDockview) {\n <!-- View menu for dockview panel controls -->\n <kendo-toolbar-dropdownbutton\n [svgIcon]=\"eyeIcon\"\n [data]=\"viewMenuItems()\"\n title=\"View panels\"\n (itemClick)=\"onViewMenuItemClick($event)\">\n </kendo-toolbar-dropdownbutton>\n } @else {\n <!-- Legacy panel toggle buttons -->\n <kendo-toolbar-buttongroup>\n <kendo-toolbar-button [svgIcon]=\"menuIcon\"\n [toggleable]=\"true\"\n [selected]=\"showLeftPanel()\"\n (selectedChange)=\"toggleLeftPanel()\"\n title=\"Toggle element palette (Alt+1)\"></kendo-toolbar-button>\n <kendo-toolbar-button [svgIcon]=\"gearsIcon\"\n [toggleable]=\"true\"\n [selected]=\"showRightPanel()\"\n (selectedChange)=\"toggleRightPanel()\"\n title=\"Toggle property inspector (Alt+2)\"></kendo-toolbar-button>\n </kendo-toolbar-buttongroup>\n }\n </kendo-toolbar>\n\n <!-- Main content area -->\n <div class=\"designer-content\" [class.dockview-enabled]=\"useDockview\"\n [style.display]=\"useDockview ? 'flex' : null\"\n [style.height]=\"useDockview ? '100%' : null\"\n [style.minHeight]=\"useDockview ? '0' : null\">\n <!-- Dockview panels container (when dockview enabled) -->\n @if (useDockview) {\n <div class=\"dockview-panels-container\"\n [style.width.px]=\"dockviewPanelWidth()\"\n [style.flex]=\"'0 0 ' + dockviewPanelWidth() + 'px'\">\n <mm-dockview\n class=\"designer-dockview\"\n [components]=\"panelComponents\"\n (ready)=\"onDockviewReady($event)\">\n </mm-dockview>\n </div>\n <!-- Resize handle for dockview panels -->\n <div class=\"dockview-resize-handle\"\n (mousedown)=\"onDockviewResizeStart($event)\"\n title=\"Drag to resize panels\">\n </div>\n }\n\n <!-- Legacy left sidebar (when dockview disabled) -->\n @if (!useDockview) {\n @if (showLeftPanel()) {\n <div class=\"designer-sidebar\">\n <div class=\"sidebar-header\">\n <div class=\"sidebar-tabs\">\n <button class=\"sidebar-tab\"\n [class.active]=\"activeSidebarTab() === 'elements'\"\n (click)=\"setActiveSidebarTab('elements')\">\n {{ editorMode === 'symbol' ? 'Primitives' : 'Elements' }}\n </button>\n <button class=\"sidebar-tab\"\n [class.active]=\"activeSidebarTab() === 'symbols'\"\n (click)=\"setActiveSidebarTab('symbols')\">\n Symbols\n </button>\n </div>\n <button class=\"sidebar-close\" (click)=\"toggleLeftPanel()\" title=\"Close panel\">\u00D7</button>\n </div>\n <div class=\"sidebar-content\">\n @if (activeSidebarTab() === 'elements') {\n <mm-element-palette\n (elementDragStart)=\"onPaletteDragStart($event)\"\n (elementDragEnd)=\"onPaletteDragEnd($event)\">\n </mm-element-palette>\n } @else {\n <mm-symbol-library-panel\n (symbolDragStart)=\"onSymbolDragStart($event)\"\n (symbolDragEnd)=\"onSymbolDragEnd()\">\n </mm-symbol-library-panel>\n }\n </div>\n </div>\n } @else {\n <div class=\"sidebar-collapsed left\" (click)=\"toggleLeftPanel()\" title=\"Show element palette\">\n <span class=\"collapsed-icon\">\u2630</span>\n </div>\n }\n } <!-- End of legacy left sidebar -->\n\n <!-- Canvas area (always visible) -->\n <div class=\"designer-canvas-container\"\n #canvasContainer\n data-testid=\"designer-canvas-container\"\n (mousedown)=\"onCanvasMouseDown($event)\"\n (mousemove)=\"onCanvasMouseMove($event)\"\n (mouseup)=\"onCanvasMouseUp($event)\"\n (wheel)=\"onCanvasWheel($event)\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n (contextmenu)=\"onCanvasContextMenu($event)\">\n <svg class=\"designer-canvas\"\n data-testid=\"designer-canvas\"\n [attr.width]=\"scaledCanvasWidth()\"\n [attr.height]=\"scaledCanvasHeight()\"\n [attr.viewBox]=\"viewBox()\"\n preserveAspectRatio=\"xMinYMin meet\"\n [style.cursor]=\"canvasCursor()\"\n (mousedown)=\"onSvgMouseDown($event)\">\n\n <!-- Background (rendered first, behind everything) -->\n <!-- Canvas background color is set via CSS variable --designer-canvas-color for theme support -->\n <rect x=\"0\" y=\"0\"\n [attr.width]=\"canvasConfig().width\"\n [attr.height]=\"canvasConfig().height\"\n class=\"canvas-background\"\n pointer-events=\"none\"/>\n\n <!-- Grid (on top of background) -->\n <!-- Grid color is set via CSS variable --designer-grid-color for theme support -->\n @if (showGrid()) {\n <defs>\n <pattern id=\"designerGrid\" [attr.width]=\"gridSize()\" [attr.height]=\"gridSize()\"\n patternUnits=\"userSpaceOnUse\">\n <path [attr.d]=\"'M ' + gridSize() + ' 0 L 0 0 0 ' + gridSize()\"\n fill=\"none\" class=\"designer-grid-line\" stroke-width=\"0.5\"/>\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\"\n [attr.width]=\"canvasConfig().width\"\n [attr.height]=\"canvasConfig().height\"\n fill=\"url(#designerGrid)\"\n pointer-events=\"none\"/>\n }\n\n <!-- Invisible click capture layer (for clicking on empty canvas) -->\n <rect x=\"0\" y=\"0\"\n [attr.width]=\"canvasConfig().width\"\n [attr.height]=\"canvasConfig().height\"\n fill=\"transparent\"\n class=\"canvas-click-layer\"/>\n\n <!-- Connections (only in diagram mode) -->\n @if (editorMode === 'diagram') {\n @for (connection of diagram().connections; track connection.id) {\n <g class=\"connection\"\n [class.selected]=\"isConnectionSelected(connection.id)\"\n (mousedown)=\"onConnectionClick($event, connection)\">\n <path [attr.d]=\"getConnectionPath(connection)\"\n [attr.stroke]=\"connection.style.strokeColor\"\n [attr.stroke-width]=\"isConnectionSelected(connection.id) ? connection.style.strokeWidth + 2 : connection.style.strokeWidth\"\n fill=\"none\"\n stroke-linecap=\"round\"/>\n </g>\n }\n\n <!-- Elements in their actual z-order -->\n @for (element of orderedElements(); track element.id) {\n <g class=\"element\"\n [class.selected]=\"isElementSelected(element.id)\"\n [class.dragging]=\"dragState().isDragging && dragState().elementId === element.id\"\n [attr.transform]=\"getElementTransform(element)\"\n (mousedown)=\"onElementMouseDown($event, element)\"\n (contextmenu)=\"onElementContextMenu($event, element)\">\n\n <!-- Invisible hit area (larger than visual for easier clicking) -->\n <rect x=\"-4\" y=\"-4\"\n [attr.width]=\"element.size.width + 8\"\n [attr.height]=\"element.size.height + 8\"\n fill=\"transparent\"\n class=\"element-hit-area\"/>\n\n <!-- Element visual (simplified for designer) -->\n <rect x=\"0\" y=\"0\"\n [attr.width]=\"element.size.width\"\n [attr.height]=\"element.size.height\"\n [attr.fill]=\"getElementFill(element)\"\n [attr.stroke]=\"isElementSelected(element.id) ? '#1976d2' : getElementStroke(element)\"\n [attr.stroke-width]=\"isElementSelected(element.id) ? 2 : (element.style?.strokeWidth ?? 1)\"\n [attr.rx]=\"getElementRadius(element)\"\n [attr.opacity]=\"element.style?.opacity ?? 1\"\n pointer-events=\"none\"/>\n\n <!-- Element type icon/label -->\n <text class=\"element-label\"\n [attr.x]=\"element.size.width / 2\"\n [attr.y]=\"element.size.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"10\"\n fill=\"#666\">\n {{ getElementTypeLabel(element) }}\n </text>\n\n <!-- Element name -->\n @if (showElementNames()) {\n <text class=\"element-label\"\n [attr.x]=\"element.size.width / 2\"\n [attr.y]=\"element.size.height + 10\"\n text-anchor=\"middle\">\n {{ element.name }}\n </text>\n }\n\n <!-- Selection handles (zoom-scaled) -->\n @if (isElementSelected(element.id)) {\n <!-- Corner resize handles -->\n <rect class=\"resize-handle nw\" [attr.x]=\"-handleOffset()\" [attr.y]=\"-handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onResizeHandleMouseDown($event, element, 'nw')\"/>\n <rect class=\"resize-handle ne\" [attr.x]=\"element.size.width - handleOffset()\" [attr.y]=\"-handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onResizeHandleMouseDown($event, element, 'ne')\"/>\n <rect class=\"resize-handle sw\" [attr.x]=\"-handleOffset()\" [attr.y]=\"element.size.height - handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onResizeHandleMouseDown($event, element, 'sw')\"/>\n <rect class=\"resize-handle se\" [attr.x]=\"element.size.width - handleOffset()\" [attr.y]=\"element.size.height - handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onResizeHandleMouseDown($event, element, 'se')\"/>\n\n <!-- Connection ports -->\n <circle class=\"connection-port\" [attr.cx]=\"element.size.width / 2\" cy=\"0\" [attr.r]=\"portRadius()\" fill=\"#4caf50\"/>\n <circle class=\"connection-port\" [attr.cx]=\"element.size.width / 2\" [attr.cy]=\"element.size.height\" [attr.r]=\"portRadius()\" fill=\"#4caf50\"/>\n <circle class=\"connection-port\" cx=\"0\" [attr.cy]=\"element.size.height / 2\" [attr.r]=\"portRadius()\" fill=\"#4caf50\"/>\n <circle class=\"connection-port\" [attr.cx]=\"element.size.width\" [attr.cy]=\"element.size.height / 2\" [attr.r]=\"portRadius()\" fill=\"#4caf50\"/>\n }\n </g>\n }\n }\n\n <!-- Primitives in their actual z-order -->\n @for (primitive of orderedPrimitives(); track primitive.id) {\n <g class=\"primitive\"\n [attr.data-testid]=\"'primitive-' + primitive.type + '-' + primitive.id\"\n [class.selected]=\"isPrimitiveSelected(primitive.id)\"\n [class.dragging]=\"dragState().isDragging && dragState().elementId === primitive.id\"\n [attr.transform]=\"getPrimitiveTransform(primitive)\"\n (mousedown)=\"onPrimitiveMouseDown($event, primitive)\"\n (dblclick)=\"onPrimitiveDoubleClick(primitive)\"\n (contextmenu)=\"onPrimitiveContextMenu($event, primitive)\">\n\n <!-- Render based on primitive type -->\n <!-- Resolve style once for this primitive (class + inline merged) -->\n @let rs = resolveStyle(primitive);\n\n @switch (primitive.type) {\n @case ('rectangle') {\n @if (primitiveHasAnimations(primitive) || hasFillLevel(primitive)) {\n <!-- Rectangle with animations or fillLevel - use innerHTML for clip-path support -->\n <g [innerHTML]=\"getPrimitiveWithAnimationsSvg(primitive)\"></g>\n } @else {\n <rect [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n [attr.fill]=\"rs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"rs.fill?.opacity ?? 1\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : (rs.stroke?.color ?? 'none')\"\n [attr.stroke-opacity]=\"rs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? selectionHighlightWidth() : (rs.stroke?.width ?? 1)\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(rs.stroke?.dashArray)\"\n [attr.rx]=\"$any(primitive).config.cornerRadiusX ?? $any(primitive).config.cornerRadius ?? 0\"\n [attr.ry]=\"$any(primitive).config.cornerRadiusY ?? $any(primitive).config.cornerRadius ?? 0\"/>\n }\n }\n @case ('ellipse') {\n @if (primitiveHasAnimations(primitive)) {\n <!-- Ellipse with animations -->\n <g [innerHTML]=\"getPrimitiveWithAnimationsSvg(primitive)\"></g>\n } @else {\n <ellipse [attr.cx]=\"primitive.position.x\"\n [attr.cy]=\"primitive.position.y\"\n [attr.rx]=\"$any(primitive).config.radiusX\"\n [attr.ry]=\"$any(primitive).config.radiusY\"\n [attr.fill]=\"rs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"rs.fill?.opacity ?? 1\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : (rs.stroke?.color ?? 'none')\"\n [attr.stroke-opacity]=\"rs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? selectionHighlightWidth() : (rs.stroke?.width ?? 1)\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(rs.stroke?.dashArray)\"/>\n }\n }\n @case ('line') {\n @if (primitiveHasAnimations(primitive)) {\n <!-- Line with animations -->\n <g [innerHTML]=\"getPrimitiveWithAnimationsSvg(primitive)\"></g>\n } @else {\n <line [attr.x1]=\"$any(primitive).config.start.x + primitive.position.x\"\n [attr.y1]=\"$any(primitive).config.start.y + primitive.position.y\"\n [attr.x2]=\"$any(primitive).config.end.x + primitive.position.x\"\n [attr.y2]=\"$any(primitive).config.end.y + primitive.position.y\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : (rs.stroke?.color ?? 'none')\"\n [attr.stroke-opacity]=\"rs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? 3 : (rs.stroke?.width ?? 2)\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(rs.stroke?.dashArray)\"/>\n }\n }\n @case ('path') {\n @if (primitiveHasAnimations(primitive)) {\n <!-- Path with animations -->\n <g [innerHTML]=\"getPrimitiveWithAnimationsSvg(primitive)\"></g>\n } @else {\n <path [attr.d]=\"$any(primitive).config.d\"\n [attr.transform]=\"'translate(' + primitive.position.x + ',' + primitive.position.y + ')'\"\n [attr.fill]=\"rs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"rs.fill?.opacity ?? 1\"\n [attr.fill-rule]=\"$any(primitive).config.fillRule\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : (rs.stroke?.color ?? 'none')\"\n [attr.stroke-opacity]=\"rs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? selectionHighlightWidth() : (rs.stroke?.width ?? 1)\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(rs.stroke?.dashArray)\"/>\n }\n }\n @case ('polygon') {\n @if (primitiveHasAnimations(primitive)) {\n <!-- Polygon with animations -->\n <g [innerHTML]=\"getPrimitiveWithAnimationsSvg(primitive)\"></g>\n } @else {\n <polygon [attr.points]=\"getPolygonPoints($any(primitive))\"\n [attr.fill]=\"rs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"rs.fill?.opacity ?? 1\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : (rs.stroke?.color ?? 'none')\"\n [attr.stroke-opacity]=\"rs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? selectionHighlightWidth() : (rs.stroke?.width ?? 1)\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(rs.stroke?.dashArray)\"/>\n }\n }\n @case ('polyline') {\n @if (primitiveHasAnimations(primitive)) {\n <!-- Polyline with animations -->\n <g [innerHTML]=\"getPrimitiveWithAnimationsSvg(primitive)\"></g>\n } @else {\n <polyline [attr.points]=\"getPolylinePoints($any(primitive))\"\n fill=\"none\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : (rs.stroke?.color ?? '#333')\"\n [attr.stroke-opacity]=\"rs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? 3 : (rs.stroke?.width ?? 2)\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(rs.stroke?.dashArray)\"/>\n }\n }\n @case ('text') {\n <text [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.fill]=\"$any(primitive).config.textStyle?.color ?? '#333'\"\n [attr.font-size]=\"$any(primitive).config.textStyle?.fontSize ?? 14\"\n [attr.font-family]=\"$any(primitive).config.textStyle?.fontFamily ?? 'Arial, sans-serif'\">\n {{ $any(primitive).config.content }}\n </text>\n }\n @case ('image') {\n @if ($any(primitive).config.src) {\n <!-- Render actual image when src is available -->\n <image [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n [attr.href]=\"$any(primitive).config.src\"\n [attr.preserveAspectRatio]=\"$any(primitive).config.preserveAspectRatio !== false ? 'xMidYMid meet' : 'none'\"/>\n <!-- Selection border overlay -->\n @if (isPrimitiveSelected(primitive.id)) {\n <rect [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n fill=\"none\"\n stroke=\"#1976d2\"\n [attr.stroke-width]=\"selectionHighlightWidth()\"\n stroke-dasharray=\"4 2\"/>\n }\n } @else {\n <!-- Placeholder when no src -->\n <rect [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n fill=\"#f5f5f5\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : '#ccc'\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? selectionHighlightWidth() : 1\"\n stroke-dasharray=\"4 2\"/>\n <text class=\"primitive-label\"\n [attr.x]=\"primitive.position.x + $any(primitive).config.width / 2\"\n [attr.y]=\"primitive.position.y + $any(primitive).config.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"10\"\n fill=\"#999\">Image</text>\n }\n }\n @case ('group') {\n <!-- Groups render their fill/stroke if defined, children render separately -->\n @if (primitiveHasAnimations(primitive)) {\n <!-- Group with animations -->\n <g [innerHTML]=\"getPrimitiveWithAnimationsSvg(primitive)\"></g>\n } @else {\n @let groupBounds = getPrimitiveBoundingBox(primitive);\n <rect [attr.x]=\"groupBounds.x\"\n [attr.y]=\"groupBounds.y\"\n [attr.width]=\"groupBounds.width\"\n [attr.height]=\"groupBounds.height\"\n [attr.fill]=\"rs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"rs.fill?.opacity ?? 1\"\n [attr.stroke]=\"isPrimitiveSelected(primitive.id) ? '#1976d2' : (rs.stroke?.color ?? 'none')\"\n [attr.stroke-opacity]=\"rs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"isPrimitiveSelected(primitive.id) ? 1.5 : (rs.stroke?.width ?? 0)\"\n [attr.stroke-dasharray]=\"isPrimitiveSelected(primitive.id) ? '6 3' : (getStrokeDashArray(rs.stroke?.dashArray))\"\n pointer-events=\"all\"/>\n }\n }\n }\n\n <!-- Primitive name label -->\n @if (showElementNames() && primitive.name) {\n <text class=\"primitive-label\"\n [attr.x]=\"getPrimitiveBoundingBox(primitive).x + getPrimitiveBoundingBox(primitive).width / 2\"\n [attr.y]=\"getPrimitiveBoundingBox(primitive).y + getPrimitiveBoundingBox(primitive).height + 10\"\n text-anchor=\"middle\">\n {{ primitive.name }}\n </text>\n }\n\n <!-- Selection handles for primitives -->\n @if (isPrimitiveSelected(primitive.id)) {\n @let bbox = getPrimitiveBoundingBox(primitive);\n @if (primitive.type === 'line') {\n <!-- Line-specific endpoint handles -->\n @let lineConfig = $any(primitive).config;\n <!-- Start endpoint handle (zoom-scaled) -->\n <circle class=\"endpoint-handle\"\n [attr.cx]=\"lineConfig.start.x + primitive.position.x\"\n [attr.cy]=\"lineConfig.start.y + primitive.position.y\"\n [attr.r]=\"portRadius() + 1\"\n fill=\"#1976d2\"\n stroke=\"white\"\n [attr.stroke-width]=\"selectionHighlightWidth()\"\n (mousedown)=\"onLineEndpointMouseDown($event, primitive, 'start')\"/>\n <!-- End endpoint handle (zoom-scaled) -->\n <circle class=\"endpoint-handle\"\n [attr.cx]=\"lineConfig.end.x + primitive.position.x\"\n [attr.cy]=\"lineConfig.end.y + primitive.position.y\"\n [attr.r]=\"portRadius() + 1\"\n fill=\"#1976d2\"\n stroke=\"white\"\n [attr.stroke-width]=\"selectionHighlightWidth()\"\n (mousedown)=\"onLineEndpointMouseDown($event, primitive, 'end')\"/>\n } @else if (primitive.type === 'polyline' || primitive.type === 'polygon') {\n <!-- Polyline/Polygon point handles (zoom-scaled) -->\n @for (point of getPolyPoints(primitive); track point.index) {\n <circle class=\"endpoint-handle\"\n [class.selected]=\"isPolyPointSelected(primitive.id, point.index)\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n [attr.r]=\"portRadius()\"\n [attr.fill]=\"isPolyPointSelected(primitive.id, point.index) ? '#ff5722' : '#1976d2'\"\n stroke=\"white\"\n [attr.stroke-width]=\"selectionHighlightWidth()\"\n (mousedown)=\"onPolyPointMouseDown($event, primitive, point.index)\"/>\n }\n } @else {\n <!-- Selection outline (zoom-scaled) -->\n <rect [attr.x]=\"bbox.x - selectionPadding()\"\n [attr.y]=\"bbox.y - selectionPadding()\"\n [attr.width]=\"bbox.width + selectionPadding() * 2\"\n [attr.height]=\"bbox.height + selectionPadding() * 2\"\n fill=\"none\"\n stroke=\"#1976d2\"\n [attr.stroke-width]=\"selectionStrokeWidth()\"\n [attr.stroke-dasharray]=\"selectionDashArray()\"\n pointer-events=\"none\"/>\n <!-- Corner handles (zoom-scaled) -->\n <rect class=\"resize-handle nw\" [attr.x]=\"bbox.x - handleOffset()\" [attr.y]=\"bbox.y - handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onPrimitiveResizeHandleMouseDown($event, primitive, 'nw')\"/>\n <rect class=\"resize-handle ne\" [attr.x]=\"bbox.x + bbox.width - handleOffset()\" [attr.y]=\"bbox.y - handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onPrimitiveResizeHandleMouseDown($event, primitive, 'ne')\"/>\n <rect class=\"resize-handle sw\" [attr.x]=\"bbox.x - handleOffset()\" [attr.y]=\"bbox.y + bbox.height - handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onPrimitiveResizeHandleMouseDown($event, primitive, 'sw')\"/>\n <rect class=\"resize-handle se\" [attr.x]=\"bbox.x + bbox.width - handleOffset()\" [attr.y]=\"bbox.y + bbox.height - handleOffset()\" [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onPrimitiveResizeHandleMouseDown($event, primitive, 'se')\"/>\n\n <!-- Animation origin indicator (crosshair, zoom-scaled) -->\n @if (primitiveHasAnimations(primitive)) {\n @let origin = getAnimationOrigin(primitive);\n @if (origin) {\n <g class=\"animation-origin-indicator\" pointer-events=\"none\">\n <!-- Outer circle -->\n <circle [attr.cx]=\"origin.x\" [attr.cy]=\"origin.y\" [attr.r]=\"handleSize()\"\n fill=\"none\" stroke=\"#ff5722\" [attr.stroke-width]=\"selectionHighlightWidth()\" opacity=\"0.8\"/>\n <!-- Inner dot -->\n <circle [attr.cx]=\"origin.x\" [attr.cy]=\"origin.y\" [attr.r]=\"selectionPadding()\"\n fill=\"#ff5722\" opacity=\"0.9\"/>\n <!-- Crosshair lines -->\n <line [attr.x1]=\"origin.x - handleSize() * 1.5\" [attr.y1]=\"origin.y\"\n [attr.x2]=\"origin.x - portRadius()\" [attr.y2]=\"origin.y\"\n stroke=\"#ff5722\" [attr.stroke-width]=\"selectionHighlightWidth()\" opacity=\"0.8\"/>\n <line [attr.x1]=\"origin.x + portRadius()\" [attr.y1]=\"origin.y\"\n [attr.x2]=\"origin.x + handleSize() * 1.5\" [attr.y2]=\"origin.y\"\n stroke=\"#ff5722\" [attr.stroke-width]=\"selectionHighlightWidth()\" opacity=\"0.8\"/>\n <line [attr.x1]=\"origin.x\" [attr.y1]=\"origin.y - handleSize() * 1.5\"\n [attr.x2]=\"origin.x\" [attr.y2]=\"origin.y - portRadius()\"\n stroke=\"#ff5722\" [attr.stroke-width]=\"selectionHighlightWidth()\" opacity=\"0.8\"/>\n <line [attr.x1]=\"origin.x\" [attr.y1]=\"origin.y + portRadius()\"\n [attr.x2]=\"origin.x\" [attr.y2]=\"origin.y + handleSize() * 1.5\"\n stroke=\"#ff5722\" [attr.stroke-width]=\"selectionHighlightWidth()\" opacity=\"0.8\"/>\n </g>\n }\n }\n }\n }\n </g>\n }\n\n <!-- Symbol Instances -->\n @for (symbolInstance of orderedSymbols(); track symbolInstance.id) {\n @let symbolDef = getSymbolDefinition(symbolInstance);\n @let instanceDirectEffects = symbolInstanceDirectEffects().get(symbolInstance.id);\n @if (symbolDef) {\n <g class=\"symbol-instance\"\n [class.selected]=\"isSymbolSelected(symbolInstance.id)\"\n [class.dragging]=\"dragState().isDragging && dragState().elementId === symbolInstance.id\"\n [attr.transform]=\"getSymbolTransform(symbolInstance, symbolDef)\"\n [attr.opacity]=\"instanceDirectEffects?.['style.opacity'] ?? 1\"\n (mousedown)=\"onSymbolMouseDown($event, symbolInstance)\"\n (contextmenu)=\"onSymbolContextMenu($event, symbolInstance)\">\n\n <!-- Invisible hit area for easier selection -->\n <rect x=\"-4\" y=\"-4\"\n [attr.width]=\"symbolDef.bounds.width + 8\"\n [attr.height]=\"symbolDef.bounds.height + 8\"\n fill=\"transparent\"\n class=\"symbol-hit-area\"/>\n\n <!-- Render symbol primitives (including nested symbol instances) with direct effects applied -->\n @let symPropValues = symbolInstancePropertyValues().get(symbolInstance.id) ?? symbolInstance.propertyValues ?? {};\n @let symPrimitives = getSymbolPrimitivesWithDirectEffects(symbolInstance, symbolDef, symPropValues);\n @let animatedGroupChildIds = getAnimatedGroupChildIds(symbolDef);\n @for (primitive of symPrimitives; track primitive.id) {\n <!-- Skip invisible primitives and children of animated groups (rendered inside their group) -->\n @if (primitive.visible !== false && !animatedGroupChildIds.has(primitive.id)) {\n <!-- Check if primitive has animations - use innerHTML binding for animated primitives -->\n @if (symbolPrimitiveHasAnimations(primitive) || (primitive.fillLevel !== undefined && primitive.fillLevel >= 0 && primitive.fillLevel <= 1)) {\n <!-- Primitive with animations or fillLevel - use innerHTML for SVG animation support -->\n <g [attr.transform]=\"getPrimitiveTransform(primitive)\"\n [attr.opacity]=\"primitive.style?.opacity ?? 1\"\n [innerHTML]=\"getSymbolPrimitiveWithAnimationsSvg(primitive, symbolDef, symPropValues, symbolDef.styleClasses, symPrimitives)\"></g>\n } @else {\n <!-- Static primitive without animations -->\n <!-- Resolve style using symbol's styleClasses -->\n @let srs = resolveStyleWithClasses(primitive, symbolDef.styleClasses);\n <!-- Wrapper group for transform effects and overall opacity -->\n <g [attr.transform]=\"getPrimitiveTransform(primitive)\"\n [attr.opacity]=\"primitive.style?.opacity ?? 1\">\n @switch (primitive.type) {\n @case ('rectangle') {\n <!-- Standard rectangle without fillLevel -->\n <rect [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n [attr.fill]=\"srs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"srs.fill?.opacity ?? 1\"\n [attr.stroke]=\"srs.stroke?.color ?? 'none'\"\n [attr.stroke-opacity]=\"srs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"srs.stroke?.width ?? 1\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(srs.stroke?.dashArray)\"\n [attr.rx]=\"$any(primitive).config.cornerRadiusX ?? $any(primitive).config.cornerRadius ?? 0\"\n [attr.ry]=\"$any(primitive).config.cornerRadiusY ?? $any(primitive).config.cornerRadius ?? 0\"/>\n }\n @case ('ellipse') {\n <ellipse [attr.cx]=\"primitive.position.x\"\n [attr.cy]=\"primitive.position.y\"\n [attr.rx]=\"$any(primitive).config.radiusX\"\n [attr.ry]=\"$any(primitive).config.radiusY\"\n [attr.fill]=\"srs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"srs.fill?.opacity ?? 1\"\n [attr.stroke]=\"srs.stroke?.color ?? 'none'\"\n [attr.stroke-opacity]=\"srs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"srs.stroke?.width ?? 1\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(srs.stroke?.dashArray)\"/>\n }\n @case ('line') {\n <line [attr.x1]=\"$any(primitive).config.start.x + primitive.position.x\"\n [attr.y1]=\"$any(primitive).config.start.y + primitive.position.y\"\n [attr.x2]=\"$any(primitive).config.end.x + primitive.position.x\"\n [attr.y2]=\"$any(primitive).config.end.y + primitive.position.y\"\n [attr.stroke]=\"srs.stroke?.color ?? 'none'\"\n [attr.stroke-opacity]=\"srs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"srs.stroke?.width ?? 2\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(srs.stroke?.dashArray)\"/>\n }\n @case ('path') {\n <path [attr.d]=\"$any(primitive).config.d\"\n [attr.transform]=\"'translate(' + primitive.position.x + ',' + primitive.position.y + ')'\"\n [attr.fill]=\"srs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"srs.fill?.opacity ?? 1\"\n [attr.fill-rule]=\"$any(primitive).config.fillRule\"\n [attr.stroke]=\"srs.stroke?.color ?? 'none'\"\n [attr.stroke-opacity]=\"srs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"srs.stroke?.width ?? 1\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(srs.stroke?.dashArray)\"/>\n }\n @case ('polygon') {\n <polygon [attr.points]=\"getPolygonPoints($any(primitive))\"\n [attr.fill]=\"srs.fill?.color ?? 'none'\"\n [attr.fill-opacity]=\"srs.fill?.opacity ?? 1\"\n [attr.stroke]=\"srs.stroke?.color ?? 'none'\"\n [attr.stroke-opacity]=\"srs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"srs.stroke?.width ?? 1\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(srs.stroke?.dashArray)\"/>\n }\n @case ('polyline') {\n <polyline [attr.points]=\"getPolylinePoints($any(primitive))\"\n fill=\"none\"\n [attr.stroke]=\"srs.stroke?.color ?? 'none'\"\n [attr.stroke-opacity]=\"srs.stroke?.opacity ?? 1\"\n [attr.stroke-width]=\"srs.stroke?.width ?? 2\"\n [attr.stroke-dasharray]=\"getStrokeDashArray(srs.stroke?.dashArray)\"/>\n }\n @case ('text') {\n <text [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.fill]=\"$any(primitive).config.textStyle?.color ?? '#333'\"\n [attr.font-size]=\"$any(primitive).config.textStyle?.fontSize ?? 14\"\n [attr.font-family]=\"$any(primitive).config.textStyle?.fontFamily ?? 'Arial, sans-serif'\">\n {{ $any(primitive).config.content }}\n </text>\n }\n @case ('image') {\n @if ($any(primitive).config.src) {\n @if ($any(primitive).config.sourceType === 'svg') {\n <!-- SVG content embedded via foreignObject -->\n <foreignObject [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n [innerHTML]=\"getSafeHtml($any(primitive).config.src)\"></foreignObject>\n } @else {\n <!-- URL or data URL image -->\n <image [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n [attr.href]=\"$any(primitive).config.src\"\n [attr.preserveAspectRatio]=\"$any(primitive).config.preserveAspectRatio !== false ? 'xMidYMid meet' : 'none'\"/>\n }\n } @else {\n <!-- Placeholder when no src -->\n <rect [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config.width\"\n [attr.height]=\"$any(primitive).config.height\"\n fill=\"#f5f5f5\"\n stroke=\"#ccc\"\n stroke-width=\"1\"\n stroke-dasharray=\"4 2\"/>\n <text [attr.x]=\"primitive.position.x + $any(primitive).config.width / 2\"\n [attr.y]=\"primitive.position.y + $any(primitive).config.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"10\"\n fill=\"#999\">Image</text>\n }\n }\n }\n </g>\n }\n }\n }\n\n <!-- Symbol name label -->\n @if (showElementNames() && symbolInstance.name) {\n <text class=\"symbol-label\"\n [attr.x]=\"symbolDef.bounds.width / 2\"\n [attr.y]=\"symbolDef.bounds.height + 10\"\n text-anchor=\"middle\">\n {{ symbolInstance.name }}\n </text>\n }\n\n <!-- Selection handles for symbols (zoom-scaled) -->\n @if (isSymbolSelected(symbolInstance.id)) {\n <!-- Selection outline -->\n <rect [attr.x]=\"-selectionPadding()\" [attr.y]=\"-selectionPadding()\"\n [attr.width]=\"symbolDef.bounds.width + selectionPadding() * 2\"\n [attr.height]=\"symbolDef.bounds.height + selectionPadding() * 2\"\n fill=\"none\"\n stroke=\"#1976d2\"\n [attr.stroke-width]=\"selectionHighlightWidth()\"\n [attr.stroke-dasharray]=\"selectionDashArray()\"\n pointer-events=\"none\"/>\n <!-- Corner handles -->\n <rect class=\"resize-handle nw\" [attr.x]=\"-handleOffset()\" [attr.y]=\"-handleOffset()\"\n [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onSymbolResizeHandleMouseDown($event, symbolInstance, 'nw')\"/>\n <rect class=\"resize-handle ne\" [attr.x]=\"symbolDef.bounds.width - handleOffset()\" [attr.y]=\"-handleOffset()\"\n [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onSymbolResizeHandleMouseDown($event, symbolInstance, 'ne')\"/>\n <rect class=\"resize-handle sw\" [attr.x]=\"-handleOffset()\" [attr.y]=\"symbolDef.bounds.height - handleOffset()\"\n [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onSymbolResizeHandleMouseDown($event, symbolInstance, 'sw')\"/>\n <rect class=\"resize-handle se\" [attr.x]=\"symbolDef.bounds.width - handleOffset()\" [attr.y]=\"symbolDef.bounds.height - handleOffset()\"\n [attr.width]=\"handleSize()\" [attr.height]=\"handleSize()\" fill=\"#1976d2\"\n (mousedown)=\"onSymbolResizeHandleMouseDown($event, symbolInstance, 'se')\"/>\n }\n </g>\n }\n }\n\n <!-- Selection Overlay Layer (always on top for visual feedback, zoom-scaled) -->\n <g class=\"selection-overlay\" pointer-events=\"none\">\n <!-- Element selection indicators (only in diagram mode) -->\n @if (editorMode === 'diagram') {\n @for (element of selectedElements(); track element.id) {\n <rect [attr.x]=\"element.position.x - selectionPadding()\"\n [attr.y]=\"element.position.y - selectionPadding()\"\n [attr.width]=\"element.size.width + selectionPadding() * 2\"\n [attr.height]=\"element.size.height + selectionPadding() * 2\"\n fill=\"none\"\n stroke=\"#1976d2\"\n [attr.stroke-width]=\"selectionStrokeWidth()\"\n [attr.stroke-dasharray]=\"selectionDashArray()\"\n class=\"selection-indicator\"/>\n }\n }\n <!-- Primitive selection indicators -->\n @for (primitive of selectedPrimitives(); track primitive.id) {\n @let bbox = getPrimitiveBoundingBox(primitive);\n <rect [attr.x]=\"bbox.x - selectionPadding()\"\n [attr.y]=\"bbox.y - selectionPadding()\"\n [attr.width]=\"bbox.width + selectionPadding() * 2\"\n [attr.height]=\"bbox.height + selectionPadding() * 2\"\n fill=\"none\"\n stroke=\"#1976d2\"\n [attr.stroke-width]=\"selectionStrokeWidth()\"\n [attr.stroke-dasharray]=\"selectionDashArray()\"\n class=\"selection-indicator\"/>\n }\n <!-- Symbol selection indicators -->\n @for (symbolInstance of selectedSymbols(); track symbolInstance.id) {\n @let symbolDef = getSymbolDefinition(symbolInstance);\n @if (symbolDef) {\n @let bbox = getSymbolBoundingBox(symbolInstance, symbolDef);\n <rect [attr.x]=\"bbox.x - selectionPadding()\"\n [attr.y]=\"bbox.y - selectionPadding()\"\n [attr.width]=\"bbox.width + selectionPadding() * 2\"\n [attr.height]=\"bbox.height + selectionPadding() * 2\"\n fill=\"none\"\n stroke=\"#1976d2\"\n [attr.stroke-width]=\"selectionStrokeWidth()\"\n [attr.stroke-dasharray]=\"selectionDashArray()\"\n class=\"selection-indicator\"/>\n }\n }\n </g>\n\n <!-- Selection rectangle (for marquee selection, zoom-scaled) -->\n @if (selectionRect()) {\n <rect [attr.x]=\"selectionRect()!.x\"\n [attr.y]=\"selectionRect()!.y\"\n [attr.width]=\"selectionRect()!.width\"\n [attr.height]=\"selectionRect()!.height\"\n fill=\"rgba(25, 118, 210, 0.1)\"\n stroke=\"#1976d2\"\n [attr.stroke-width]=\"selectionStrokeWidth()\"\n [attr.stroke-dasharray]=\"selectionDashArray()\"/>\n }\n\n <!-- Alignment Guides (shown during drag) -->\n @for (guide of alignmentGuides(); track $index) {\n @if (guide.type === 'horizontal') {\n <line [attr.x1]=\"guide.start\"\n [attr.y1]=\"guide.position\"\n [attr.x2]=\"guide.end\"\n [attr.y2]=\"guide.position\"\n stroke=\"#ff4081\"\n [attr.stroke-width]=\"guideStrokeWidth()\"\n pointer-events=\"none\"/>\n } @else {\n <line [attr.x1]=\"guide.position\"\n [attr.y1]=\"guide.start\"\n [attr.x2]=\"guide.position\"\n [attr.y2]=\"guide.end\"\n stroke=\"#ff4081\"\n [attr.stroke-width]=\"guideStrokeWidth()\"\n pointer-events=\"none\"/>\n }\n }\n </svg>\n </div>\n\n <!-- Property Inspector (right sidebar - legacy mode only) -->\n @if (!useDockview) {\n @if (showRightPanel()) {\n <div class=\"designer-inspector-container\">\n <div class=\"inspector-header\">\n <span class=\"inspector-title\">Properties</span>\n <button class=\"sidebar-close\" (click)=\"toggleRightPanel()\" title=\"Close panel\">\u00D7</button>\n </div>\n <mm-property-inspector\n class=\"designer-inspector\"\n [selectedElements]=\"selectedElements()\"\n [selectedConnections]=\"selectedConnections()\"\n [selectedPrimitives]=\"selectedPrimitives()\"\n [selectedSymbolInstances]=\"selectedSymbols()\"\n [symbolDefinitions]=\"symbolDefinitionsMap()\"\n [availableStyleClasses]=\"styleClasses\"\n (propertyChange)=\"onPropertyChange($event)\">\n </mm-property-inspector>\n </div>\n } @else {\n <div class=\"sidebar-collapsed right\" (click)=\"toggleRightPanel()\" title=\"Show properties\">\n <span class=\"collapsed-icon\">\u2699</span>\n </div>\n }\n }\n </div>\n\n <!-- Context Menu -->\n @if (contextMenu().visible) {\n <mm-context-menu\n [position]=\"contextMenu().position\"\n [items]=\"contextMenuItems()\"\n (action)=\"onContextMenuAction($event)\"\n (closed)=\"closeContextMenu()\">\n </mm-context-menu>\n }\n\n <!-- Path Editor Dialog -->\n @if (pathEditorVisible()) {\n <kendo-dialog\n title=\"Edit Path\"\n [width]=\"500\"\n [height]=\"500\"\n (close)=\"closePathEditor()\">\n <mm-path-editor\n [pathData]=\"editingPathData()\"\n [width]=\"460\"\n [height]=\"280\"\n (pathChange)=\"onPathEditorChange($event)\">\n </mm-path-editor>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closePathEditor()\">Done</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n }\n\n <!-- Binding Editor Dialog -->\n <mm-binding-editor-dialog\n [show]=\"showBindingEditor()\"\n [property]=\"editingBindingProperty()\"\n [existingBindings]=\"effectivePropertyBindings()\"\n [primitives]=\"diagram().primitives ?? []\"\n [symbolInstances]=\"diagram().symbolInstances ?? []\"\n [symbolDefinitions]=\"symbolDefinitionsMap()\"\n (closed)=\"closeBindingEditor()\"\n (saved)=\"onBindingsSaved($event)\">\n </mm-binding-editor-dialog>\n\n <!-- Status bar -->\n <div class=\"designer-statusbar\">\n <span class=\"diagram-name\" title=\"Diagram name\">{{ diagram().name }}</span>\n <span class=\"statusbar-divider\">|</span>\n <span>Primitives: {{ (diagram().primitives ?? []).length }}</span>\n <span>Symbols: {{ (diagram().symbolInstances ?? []).length }}</span>\n @if (editorMode === 'diagram') {\n <span>Elements: {{ diagram().elements.length }}</span>\n <span>Connections: {{ diagram().connections.length }}</span>\n }\n <span>Selected: {{ selection().elements.size + selection().connections.size }}</span>\n @if (hasChanges()) {\n <span class=\"unsaved-indicator\">* Unsaved</span>\n }\n </div>\n</div>\n", styles: [":host{--designer-bg: #f5f5f5;--designer-surface: #ffffff;--designer-surface-alt: #f5f5f5;--designer-border: #e0e0e0;--designer-text: #333333;--designer-text-muted: #666666;--designer-accent: #1976d2;--designer-accent-secondary: #1565c0;--designer-canvas-bg: #e8e8e8;--designer-hover-bg: #eeeeee;--designer-canvas-color: #fafafa;--designer-grid-color: #e0e0e0;display:flex;flex-direction:column;flex:1;width:100%;height:100%;min-height:0;overflow:hidden}.process-designer{display:flex;flex-direction:column;flex:1;height:100%;min-height:0;background:var(--designer-bg);outline:none;overflow:hidden}.designer-toolbar{flex-shrink:0;border-bottom:1px solid var(--designer-border)}.zoom-level{min-width:40px;text-align:center;font-size:12px;padding:0 .25rem;color:var(--designer-text)}.k-menu-separator{height:1px;margin:4px 0;background-color:var(--designer-border)}.designer-content{display:flex;flex:1;height:100%;min-height:0;overflow:hidden}.designer-sidebar{width:220px;display:flex;flex-direction:column;border-right:1px solid var(--designer-border);background:var(--designer-surface)}.sidebar-header{display:flex;align-items:stretch;border-bottom:1px solid var(--designer-border)}.sidebar-tabs{display:flex;flex:1}.sidebar-tab{flex:1;padding:.5rem;background:var(--designer-surface-alt);border:none;border-bottom:2px solid transparent;font-size:12px;font-weight:500;color:var(--designer-text-muted);cursor:pointer;transition:all .15s ease}.sidebar-tab:hover{background:var(--designer-hover-bg);color:var(--designer-text)}.sidebar-tab.active{background:var(--designer-surface);border-bottom-color:var(--designer-accent);color:var(--designer-accent)}.sidebar-content{flex:1;overflow-y:auto}.sidebar-close{width:28px;background:transparent;border:none;border-left:1px solid var(--designer-border);cursor:pointer;font-size:16px;color:var(--designer-text-muted);display:flex;align-items:center;justify-content:center}.sidebar-close:hover{background:var(--designer-hover-bg);color:var(--designer-accent)}.sidebar-collapsed{width:28px;background:var(--designer-surface);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s ease;writing-mode:vertical-rl;text-orientation:mixed}.sidebar-collapsed.left{border-right:1px solid var(--designer-border)}.sidebar-collapsed.right{border-left:1px solid var(--designer-border)}.sidebar-collapsed:hover{background:var(--designer-surface-alt)}.sidebar-collapsed .collapsed-icon{font-size:14px;color:var(--designer-text-muted)}.designer-inspector-container{width:280px;display:flex;flex-direction:column;border-left:1px solid var(--designer-border);background:var(--designer-surface)}.inspector-header{display:flex;align-items:center;padding:0 .5rem;height:32px;border-bottom:1px solid var(--designer-border);background:var(--designer-surface-alt)}.inspector-header .inspector-title{flex:1;font-size:12px;font-weight:500;color:var(--designer-text)}.designer-canvas-container{flex:1 1 auto;min-width:0;min-height:0;height:100%;overflow:auto;background:var(--designer-canvas-bg);position:relative;box-sizing:border-box;display:flex;padding:20px}.designer-canvas{display:block;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;box-shadow:0 2px 8px #0000001a;margin:auto;flex-shrink:0}.designer-canvas .element-label,.designer-canvas .primitive-label,.designer-canvas .symbol-label{user-select:none;-webkit-user-select:none;pointer-events:none;fill:#aaa;font-size:8px}.canvas-background{cursor:default;fill:var(--designer-canvas-color)}.designer-grid-line{stroke:var(--designer-grid-color)}.designer-inspector{flex:1;overflow-y:auto}.element,.element.selected{cursor:move}.element.dragging{opacity:.7}.element.dragging .element-hit-area{cursor:grabbing}.element-hit-area,.primitive,.primitive.selected{cursor:move}.primitive.dragging{opacity:.7}.symbol-instance,.symbol-instance.selected{cursor:move}.symbol-instance.dragging{opacity:.7}.symbol-instance.dragging .symbol-hit-area{cursor:grabbing}.symbol-hit-area{cursor:move}.resize-handle{cursor:pointer}.resize-handle.nw,.resize-handle.se{cursor:nwse-resize}.resize-handle.ne,.resize-handle.sw{cursor:nesw-resize}.endpoint-handle{cursor:move;transition:r .15s ease,fill .15s ease}.endpoint-handle:hover{r:8}.endpoint-handle.selected{r:7}.connection-port{cursor:crosshair;opacity:.7}.connection-port:hover{opacity:1}.connection{cursor:pointer}.connection.selected path{stroke:#1976d2!important}.selection-overlay .selection-indicator{animation:marching-ants .5s linear infinite}@keyframes marching-ants{0%{stroke-dashoffset:0}to{stroke-dashoffset:6}}.designer-statusbar{flex-shrink:0;display:flex;gap:1rem;padding:.25rem .5rem;background:var(--designer-surface);border-top:1px solid var(--designer-border);font-size:11px;color:var(--designer-text-muted)}.diagram-name{font-weight:500;color:var(--designer-text)}.statusbar-divider{color:var(--designer-border)}.unsaved-indicator{color:#f57c00;font-weight:500}:host{--dv-background-color: var(--designer-bg, #f5f5f5);--dv-pane-background-color: var(--designer-surface, #ffffff);--dv-activegroup-visiblepanel-tab-background-color: var(--designer-surface, #ffffff);--dv-activegroup-hiddenpanel-tab-background-color: var(--designer-surface-alt, #f0f0f0);--dv-inactivegroup-visiblepanel-tab-background-color: var(--designer-surface-alt, #f5f5f5);--dv-inactivegroup-hiddenpanel-tab-background-color: #e8e8e8;--dv-activegroup-visiblepanel-tab-color: var(--designer-accent, #1976d2);--dv-activegroup-hiddenpanel-tab-color: var(--designer-text-muted, #666666);--dv-inactivegroup-visiblepanel-tab-color: var(--designer-text, #333333);--dv-inactivegroup-hiddenpanel-tab-color: #888888;--dv-separator-border: 1px solid var(--designer-border, #e0e0e0);--dv-tabs-and-actions-container-background-color: var(--designer-surface-alt, #f5f5f5);--dv-group-view-background-color: var(--designer-surface, #ffffff);--dv-tab-active-border-bottom: 2px solid var(--designer-accent, #1976d2);--dv-drag-over-background-color: rgba(25, 118, 210, .15);--dv-drag-over-border-color: var(--designer-accent, #1976d2);--dv-sash-color: var(--designer-border, #e0e0e0);--dv-sash-hover-color: var(--designer-accent, #1976d2)}.designer-content.dockview-enabled{display:flex;position:relative;height:100%;min-height:0}.dockview-panels-container{width:400px;min-width:280px;max-width:600px;flex:0 0 400px;height:100%;border-right:1px solid var(--designer-border);position:relative;overflow:hidden}.designer-dockview{position:absolute;inset:0;width:100%;height:100%}.dockview-resize-handle{width:6px;height:100%;cursor:ew-resize;background:transparent;position:relative;flex-shrink:0;z-index:10;transition:background-color .2s ease}.dockview-resize-handle:before{content:\"\";position:absolute;top:0;left:50%;transform:translate(-50%);width:2px;height:100%;background:var(--designer-border, rgba(100, 206, 185, .3));transition:background-color .2s ease,width .2s ease}.dockview-resize-handle:hover{background:#64ceb91a}.dockview-resize-handle:hover:before{width:4px;background:var(--octo-mint, #64ceb9)}.dockview-resize-handle:active{background:#64ceb926}.dockview-resize-handle:active:before{width:4px;background:var(--octo-mint, #64ceb9)}::ng-deep mm-elements-panel,::ng-deep mm-symbols-panel,::ng-deep mm-properties-panel,::ng-deep mm-transform-panel,::ng-deep mm-animations-panel,::ng-deep mm-styles-panel,::ng-deep mm-settings-panel,::ng-deep mm-simulation-panel-wrapper{display:block;height:100%;overflow:hidden}::ng-deep mm-elements-panel .panel-container,::ng-deep mm-symbols-panel .panel-container,::ng-deep mm-properties-panel .panel-container,::ng-deep mm-transform-panel .panel-container,::ng-deep mm-animations-panel .panel-container,::ng-deep mm-styles-panel .panel-container,::ng-deep mm-settings-panel .panel-container,::ng-deep mm-simulation-panel-wrapper .panel-container{height:100%;overflow:auto;background:var(--dv-pane-background-color, var(--designer-surface, #ffffff));color:var(--designer-text, #333333)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i2$2.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex", "showIcon", "showText"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: i2$2.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "rounded", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "component", type: i2$2.ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "fillMode", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { kind: "component", type: i2$2.ToolBarDropDownButtonComponent, selector: "kendo-toolbar-dropdownbutton", inputs: ["arrowIcon", "title", "showText", "showIcon", "text", "icon", "svgIcon", "iconClass", "imageUrl", "popupSettings", "look", "primary", "fillMode", "themeColor", "buttonClass", "textField", "disabled", "data"], outputs: ["itemClick", "open", "close"], exportAs: ["kendoToolBarDropDownButton"] }, { kind: "component", type: i2$2.ToolBarSeparatorComponent, selector: "kendo-toolbar-separator", exportAs: ["kendoToolBarSeparator"] }, { kind: "component", type: i2$2.ToolBarSpacerComponent, selector: "kendo-toolbar-spacer", exportAs: ["kendoToolBarSpacer"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "ngmodule", type: InputsModule }, { kind: "ngmodule", type: DropDownsModule }, { kind: "ngmodule", type: DialogsModule }, { kind: "component", type: i3.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: i3.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: ElementPaletteComponent, selector: "mm-element-palette", outputs: ["elementDragStart", "elementDragEnd"] }, { kind: "component", type: SymbolLibraryPanelComponent, selector: "mm-symbol-library-panel", outputs: ["symbolDragStart", "symbolDragEnd"] }, { kind: "component", type: PropertyInspectorComponent, selector: "mm-property-inspector", inputs: ["selectedElements", "selectedConnections", "selectedPrimitives", "selectedSymbolInstances", "symbolDefinitions", "availableStyleClasses"], outputs: ["propertyChange"] }, { kind: "component", type: ContextMenuComponent, selector: "mm-context-menu", inputs: ["position", "items"], outputs: ["action", "closed"] }, { kind: "component", type: PathEditorComponent, selector: "mm-path-editor", inputs: ["pathData", "width", "height", "gridSize", "snapToGrid"], outputs: ["pathChange"] }, { kind: "component", type: DockviewComponent, selector: "mm-dockview", inputs: ["components", "tabComponents", "watermarkComponent", "defaultTabComponent", "leftHeaderActionsComponent", "rightHeaderActionsComponent", "prefixHeaderActionsComponent", "className", "hideBorders", "locked", "disableAutoResizing", "disableFloatingGroups"], outputs: ["ready", "didDrop", "willDrop"] }, { kind: "component", type: BindingEditorDialogComponent, selector: "mm-binding-editor-dialog", inputs: ["show", "property", "existingBindings", "primitives", "symbolInstances", "symbolDefinitions"], outputs: ["closed", "saved"] }] });
27266
27266
  }
27267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDesignerComponent, decorators: [{
27267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDesignerComponent, decorators: [{
27268
27268
  type: Component,
27269
27269
  args: [{ selector: 'mm-process-designer', standalone: true, imports: [
27270
27270
  CommonModule,
@@ -27402,7 +27402,7 @@ class SymbolEditorComponent {
27402
27402
  /**
27403
27403
  * Internal diagram config derived from symbol
27404
27404
  */
27405
- diagramConfig = signal(null, ...(ngDevMode ? [{ debugName: "diagramConfig" }] : []));
27405
+ diagramConfig = signal(null, ...(ngDevMode ? [{ debugName: "diagramConfig" }] : /* istanbul ignore next */ []));
27406
27406
  /**
27407
27407
  * Initial visibility of the property editor panel
27408
27408
  */
@@ -27422,32 +27422,32 @@ class SymbolEditorComponent {
27422
27422
  */
27423
27423
  symbolSettingsChange = new EventEmitter();
27424
27424
  // Transform property editing state
27425
- _transformProperties = signal([], ...(ngDevMode ? [{ debugName: "_transformProperties" }] : []));
27426
- _propertyBindings = signal([], ...(ngDevMode ? [{ debugName: "_propertyBindings" }] : []));
27427
- _showBindingEditor = signal(false, ...(ngDevMode ? [{ debugName: "_showBindingEditor" }] : []));
27428
- _editingProperty = signal(null, ...(ngDevMode ? [{ debugName: "_editingProperty" }] : []));
27429
- _simulationValues = signal({}, ...(ngDevMode ? [{ debugName: "_simulationValues" }] : []));
27430
- _propertyPanelVisible = signal(true, ...(ngDevMode ? [{ debugName: "_propertyPanelVisible" }] : []));
27431
- _styleClasses = signal([], ...(ngDevMode ? [{ debugName: "_styleClasses" }] : []));
27425
+ _transformProperties = signal([], ...(ngDevMode ? [{ debugName: "_transformProperties" }] : /* istanbul ignore next */ []));
27426
+ _propertyBindings = signal([], ...(ngDevMode ? [{ debugName: "_propertyBindings" }] : /* istanbul ignore next */ []));
27427
+ _showBindingEditor = signal(false, ...(ngDevMode ? [{ debugName: "_showBindingEditor" }] : /* istanbul ignore next */ []));
27428
+ _editingProperty = signal(null, ...(ngDevMode ? [{ debugName: "_editingProperty" }] : /* istanbul ignore next */ []));
27429
+ _simulationValues = signal({}, ...(ngDevMode ? [{ debugName: "_simulationValues" }] : /* istanbul ignore next */ []));
27430
+ _propertyPanelVisible = signal(true, ...(ngDevMode ? [{ debugName: "_propertyPanelVisible" }] : /* istanbul ignore next */ []));
27431
+ _styleClasses = signal([], ...(ngDevMode ? [{ debugName: "_styleClasses" }] : /* istanbul ignore next */ []));
27432
27432
  /**
27433
27433
  * Loaded symbol definitions for nested symbol instances.
27434
27434
  * This signal is updated when nested symbols are loaded from the backend.
27435
27435
  */
27436
- _loadedSymbolDefinitions = signal(new Map(), ...(ngDevMode ? [{ debugName: "_loadedSymbolDefinitions" }] : []));
27436
+ _loadedSymbolDefinitions = signal(new Map(), ...(ngDevMode ? [{ debugName: "_loadedSymbolDefinitions" }] : /* istanbul ignore next */ []));
27437
27437
  /**
27438
27438
  * Base diagram config that tracks user edits (without simulation transforms).
27439
27439
  * This is updated when ProcessDesigner emits changes.
27440
27440
  */
27441
- _baseDiagramConfig = signal(null, ...(ngDevMode ? [{ debugName: "_baseDiagramConfig" }] : []));
27441
+ _baseDiagramConfig = signal(null, ...(ngDevMode ? [{ debugName: "_baseDiagramConfig" }] : /* istanbul ignore next */ []));
27442
27442
  // Computed values for template
27443
- transformProperties = computed(() => this._transformProperties(), ...(ngDevMode ? [{ debugName: "transformProperties" }] : []));
27444
- propertyBindings = computed(() => this._propertyBindings(), ...(ngDevMode ? [{ debugName: "propertyBindings" }] : []));
27445
- showBindingEditor = computed(() => this._showBindingEditor(), ...(ngDevMode ? [{ debugName: "showBindingEditor" }] : []));
27446
- editingProperty = computed(() => this._editingProperty(), ...(ngDevMode ? [{ debugName: "editingProperty" }] : []));
27447
- simulationValues = computed(() => this._simulationValues(), ...(ngDevMode ? [{ debugName: "simulationValues" }] : []));
27448
- propertyPanelVisible = computed(() => this._propertyPanelVisible(), ...(ngDevMode ? [{ debugName: "propertyPanelVisible" }] : []));
27449
- hasTransformProperties = computed(() => this._transformProperties().length > 0, ...(ngDevMode ? [{ debugName: "hasTransformProperties" }] : []));
27450
- styleClasses = computed(() => this._styleClasses(), ...(ngDevMode ? [{ debugName: "styleClasses" }] : []));
27443
+ transformProperties = computed(() => this._transformProperties(), ...(ngDevMode ? [{ debugName: "transformProperties" }] : /* istanbul ignore next */ []));
27444
+ propertyBindings = computed(() => this._propertyBindings(), ...(ngDevMode ? [{ debugName: "propertyBindings" }] : /* istanbul ignore next */ []));
27445
+ showBindingEditor = computed(() => this._showBindingEditor(), ...(ngDevMode ? [{ debugName: "showBindingEditor" }] : /* istanbul ignore next */ []));
27446
+ editingProperty = computed(() => this._editingProperty(), ...(ngDevMode ? [{ debugName: "editingProperty" }] : /* istanbul ignore next */ []));
27447
+ simulationValues = computed(() => this._simulationValues(), ...(ngDevMode ? [{ debugName: "simulationValues" }] : /* istanbul ignore next */ []));
27448
+ propertyPanelVisible = computed(() => this._propertyPanelVisible(), ...(ngDevMode ? [{ debugName: "propertyPanelVisible" }] : /* istanbul ignore next */ []));
27449
+ hasTransformProperties = computed(() => this._transformProperties().length > 0, ...(ngDevMode ? [{ debugName: "hasTransformProperties" }] : /* istanbul ignore next */ []));
27450
+ styleClasses = computed(() => this._styleClasses(), ...(ngDevMode ? [{ debugName: "styleClasses" }] : /* istanbul ignore next */ []));
27451
27451
  currentPrimitives = computed(() => {
27452
27452
  // Use diagramConfig for the most current primitives (includes unsaved changes)
27453
27453
  // Fall back to base config if diagramConfig is empty
@@ -27455,13 +27455,13 @@ class SymbolEditorComponent {
27455
27455
  const base = this._baseDiagramConfig();
27456
27456
  // Prefer current diagramConfig as it has the latest changes from process-designer
27457
27457
  return current?.primitives?.length ? current.primitives : (base?.primitives ?? []);
27458
- }, ...(ngDevMode ? [{ debugName: "currentPrimitives" }] : []));
27458
+ }, ...(ngDevMode ? [{ debugName: "currentPrimitives" }] : /* istanbul ignore next */ []));
27459
27459
  currentSymbolInstances = computed(() => {
27460
27460
  // Use diagramConfig for the most current symbol instances (includes unsaved changes)
27461
27461
  const current = this.diagramConfig();
27462
27462
  const base = this._baseDiagramConfig();
27463
27463
  return current?.symbolInstances?.length ? current.symbolInstances : (base?.symbolInstances ?? []);
27464
- }, ...(ngDevMode ? [{ debugName: "currentSymbolInstances" }] : []));
27464
+ }, ...(ngDevMode ? [{ debugName: "currentSymbolInstances" }] : /* istanbul ignore next */ []));
27465
27465
  symbolDefinitionsMap = computed(() => {
27466
27466
  // Use loaded definitions signal - this makes the computed reactive to symbol loading
27467
27467
  const loadedDefs = this._loadedSymbolDefinitions();
@@ -27475,7 +27475,7 @@ class SymbolEditorComponent {
27475
27475
  }
27476
27476
  }
27477
27477
  return map;
27478
- }, ...(ngDevMode ? [{ debugName: "symbolDefinitionsMap" }] : []));
27478
+ }, ...(ngDevMode ? [{ debugName: "symbolDefinitionsMap" }] : /* istanbul ignore next */ []));
27479
27479
  ngOnChanges(changes) {
27480
27480
  // Initialize panel visibility from input
27481
27481
  if (changes['showPropertyEditorPanel'] && changes['showPropertyEditorPanel'].isFirstChange()) {
@@ -28356,8 +28356,8 @@ class SymbolEditorComponent {
28356
28356
  clearChanges() {
28357
28357
  this.processDesigner?.clearChanges();
28358
28358
  }
28359
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28360
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SymbolEditorComponent, isStandalone: true, selector: "mm-symbol-editor", inputs: { symbol: "symbol", canvasWidth: "canvasWidth", canvasHeight: "canvasHeight", gridSize: "gridSize", showPropertyEditorPanel: "showPropertyEditorPanel", useDockview: "useDockview", symbolSettings: "symbolSettings" }, outputs: { symbolChange: "symbolChange", saveRequest: "saveRequest", symbolSettingsChange: "symbolSettingsChange" }, viewQueries: [{ propertyName: "processDesigner", first: true, predicate: ProcessDesignerComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
28359
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28360
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: SymbolEditorComponent, isStandalone: true, selector: "mm-symbol-editor", inputs: { symbol: "symbol", canvasWidth: "canvasWidth", canvasHeight: "canvasHeight", gridSize: "gridSize", showPropertyEditorPanel: "showPropertyEditorPanel", useDockview: "useDockview", symbolSettings: "symbolSettings" }, outputs: { symbolChange: "symbolChange", saveRequest: "saveRequest", symbolSettingsChange: "symbolSettingsChange" }, viewQueries: [{ propertyName: "processDesigner", first: true, predicate: ProcessDesignerComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
28361
28361
  <div class="symbol-editor-container" [class.dockview-enabled]="useDockview">
28362
28362
  <div class="editor-main">
28363
28363
  <div class="editor-canvas">
@@ -28436,7 +28436,7 @@ class SymbolEditorComponent {
28436
28436
  </mm-binding-editor-dialog>
28437
28437
  `, isInline: true, styles: [":host{--editor-bg: var(--designer-bg, #f5f5f5);--editor-surface: var(--designer-surface, #ffffff);--editor-surface-alt: var(--designer-surface-alt, #f5f5f5);--editor-border: var(--designer-border, #e0e0e0);--editor-text: var(--designer-text, #333333);--editor-text-muted: var(--designer-text-muted, #666666);--editor-accent: var(--designer-accent, #1976d2);--editor-hover-bg: var(--designer-hover-bg, #eeeeee);display:flex;flex-direction:column;flex:1;width:100%;height:100%;min-height:0;overflow:hidden}.symbol-editor-container{display:flex;flex-direction:column;flex:1;height:100%;min-height:0;overflow:hidden;background:var(--editor-bg)}.editor-main{display:flex;flex:1;height:100%;min-height:0;min-width:0;position:relative;overflow:hidden}.editor-canvas{display:flex;flex:1;height:100%;min-width:0;min-height:0;overflow:hidden}mm-process-designer{flex:1;height:100%;min-height:0;min-width:0}.properties-panel{width:300px;display:flex;flex-direction:column;border-left:1px solid var(--editor-border);background:var(--editor-surface)}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--editor-surface-alt);border-bottom:1px solid var(--editor-border);flex-shrink:0}.panel-title{font-size:13px;font-weight:500;color:var(--editor-text)}.panel-close{width:24px;height:24px;border:none;background:transparent;cursor:pointer;font-size:18px;color:var(--editor-text-muted);border-radius:4px;display:flex;align-items:center;justify-content:center;padding:0}.panel-close:hover{background:var(--editor-hover-bg);color:var(--editor-accent)}.panel-content{flex:1;overflow-y:auto;min-height:0}mm-transform-property-editor{display:block}.panel-collapsed{width:28px;background:var(--editor-surface-alt);border-left:1px solid var(--editor-border);display:flex;flex-direction:column;align-items:center;padding-top:12px;cursor:pointer;transition:background .15s ease}.panel-collapsed:hover{background:var(--editor-hover-bg)}.collapsed-icon{color:var(--editor-text-muted);margin-bottom:8px}.collapsed-label{writing-mode:vertical-rl;text-orientation:mixed;font-size:11px;font-weight:500;color:var(--editor-text-muted);letter-spacing:.5px}mm-simulation-panel{flex-shrink:0}.symbol-editor-container.dockview-enabled .editor-main,.symbol-editor-container.dockview-enabled .editor-canvas{flex:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ProcessDesignerComponent, selector: "mm-process-designer", inputs: ["diagramConfig", "editorMode", "showSaveButtons", "transformProperties", "propertyBindings", "simulationPropertyValues", "useDockview", "symbolSettings", "styleClasses"], outputs: ["diagramChange", "saveRequest", "transformPropertiesChange", "simulationValueChange", "simulationReset", "symbolSettingsChange", "styleClassesChange"] }, { kind: "component", type: TransformPropertyEditorComponent, selector: "mm-transform-property-editor", inputs: ["transformProperties", "propertyBindings", "primitives", "symbolInstances"], outputs: ["propertiesChange", "openBindings"] }, { kind: "component", type: BindingEditorDialogComponent, selector: "mm-binding-editor-dialog", inputs: ["show", "property", "existingBindings", "primitives", "symbolInstances", "symbolDefinitions"], outputs: ["closed", "saved"] }, { kind: "component", type: SimulationPanelComponent, selector: "mm-simulation-panel", inputs: ["properties", "values"], outputs: ["valueChange", "resetValues"] }] });
28438
28438
  }
28439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolEditorComponent, decorators: [{
28439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolEditorComponent, decorators: [{
28440
28440
  type: Component,
28441
28441
  args: [{ selector: 'mm-symbol-editor', standalone: true, imports: [
28442
28442
  CommonModule,
@@ -28558,18 +28558,18 @@ class SymbolLibraryAdminComponent {
28558
28558
  symbolLibraryService = inject(SymbolLibraryService);
28559
28559
  svgImportService = inject(SvgImportService);
28560
28560
  // State
28561
- _libraries = signal([], ...(ngDevMode ? [{ debugName: "_libraries" }] : []));
28562
- _selectedLibrary = signal(null, ...(ngDevMode ? [{ debugName: "_selectedLibrary" }] : []));
28563
- _selectedSymbol = signal(null, ...(ngDevMode ? [{ debugName: "_selectedSymbol" }] : []));
28564
- _editingSymbol = signal(null, ...(ngDevMode ? [{ debugName: "_editingSymbol" }] : []));
28565
- _isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
28566
- _isSaving = signal(false, ...(ngDevMode ? [{ debugName: "_isSaving" }] : []));
28567
- _isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "_isEditMode" }] : []));
28568
- _showLibraryDialog = signal(false, ...(ngDevMode ? [{ debugName: "_showLibraryDialog" }] : []));
28569
- _showSymbolDialog = signal(false, ...(ngDevMode ? [{ debugName: "_showSymbolDialog" }] : []));
28570
- _showDeleteDialog = signal(false, ...(ngDevMode ? [{ debugName: "_showDeleteDialog" }] : []));
28571
- _showSettingsPanel = signal(true, ...(ngDevMode ? [{ debugName: "_showSettingsPanel" }] : []));
28572
- _isDeleting = signal(false, ...(ngDevMode ? [{ debugName: "_isDeleting" }] : []));
28561
+ _libraries = signal([], ...(ngDevMode ? [{ debugName: "_libraries" }] : /* istanbul ignore next */ []));
28562
+ _selectedLibrary = signal(null, ...(ngDevMode ? [{ debugName: "_selectedLibrary" }] : /* istanbul ignore next */ []));
28563
+ _selectedSymbol = signal(null, ...(ngDevMode ? [{ debugName: "_selectedSymbol" }] : /* istanbul ignore next */ []));
28564
+ _editingSymbol = signal(null, ...(ngDevMode ? [{ debugName: "_editingSymbol" }] : /* istanbul ignore next */ []));
28565
+ _isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
28566
+ _isSaving = signal(false, ...(ngDevMode ? [{ debugName: "_isSaving" }] : /* istanbul ignore next */ []));
28567
+ _isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "_isEditMode" }] : /* istanbul ignore next */ []));
28568
+ _showLibraryDialog = signal(false, ...(ngDevMode ? [{ debugName: "_showLibraryDialog" }] : /* istanbul ignore next */ []));
28569
+ _showSymbolDialog = signal(false, ...(ngDevMode ? [{ debugName: "_showSymbolDialog" }] : /* istanbul ignore next */ []));
28570
+ _showDeleteDialog = signal(false, ...(ngDevMode ? [{ debugName: "_showDeleteDialog" }] : /* istanbul ignore next */ []));
28571
+ _showSettingsPanel = signal(true, ...(ngDevMode ? [{ debugName: "_showSettingsPanel" }] : /* istanbul ignore next */ []));
28572
+ _isDeleting = signal(false, ...(ngDevMode ? [{ debugName: "_isDeleting" }] : /* istanbul ignore next */ []));
28573
28573
  // Public signals
28574
28574
  libraries = this._libraries.asReadonly();
28575
28575
  selectedLibrary = this._selectedLibrary.asReadonly();
@@ -29452,8 +29452,8 @@ class SymbolLibraryAdminComponent {
29452
29452
  return { x: pos.x, y: pos.y, width: 50, height: 50 };
29453
29453
  }
29454
29454
  }
29455
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryAdminComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29456
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SymbolLibraryAdminComponent, isStandalone: true, selector: "mm-symbol-library-admin", viewQueries: [{ propertyName: "symbolEditor", first: true, predicate: ["symbolEditor"], descendants: true }, { propertyName: "svgFileInputRef", first: true, predicate: ["svgFileInput"], descendants: true }], ngImport: i0, template: `
29455
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryAdminComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29456
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: SymbolLibraryAdminComponent, isStandalone: true, selector: "mm-symbol-library-admin", viewQueries: [{ propertyName: "symbolEditor", first: true, predicate: ["symbolEditor"], descendants: true }, { propertyName: "svgFileInputRef", first: true, predicate: ["svgFileInput"], descendants: true }], ngImport: i0, template: `
29457
29457
  <div class="symbol-admin">
29458
29458
  <div class="admin-header">
29459
29459
  <h2>Symbol Library Admin</h2>
@@ -29940,7 +29940,7 @@ class SymbolLibraryAdminComponent {
29940
29940
  </div>
29941
29941
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;flex:1;height:100%;min-height:0;overflow:hidden}.symbol-admin{display:flex;flex-direction:column;flex:1;height:100%;min-height:0;overflow:hidden;background:#f5f5f5}.admin-header{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:1rem;background:#fff;border-bottom:1px solid #e0e0e0}.admin-header h2{margin:0;font-size:18px;font-weight:500}.header-actions{display:flex;align-items:center;gap:.75rem}.edit-label{font-size:14px;color:#666;margin-right:.5rem}.admin-content{display:flex;flex:1;overflow:hidden;gap:1px;background:#e0e0e0}.edit-mode-container{display:flex;flex:1;height:100%;min-height:0;overflow:hidden}.edit-settings{width:220px;background:#fff;border-right:1px solid #e0e0e0;overflow-y:auto;flex-shrink:0}.settings-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;background:#f5f5f5;border-bottom:1px solid #e0e0e0;font-size:12px;font-weight:600;color:#333}.settings-close{width:20px;height:20px;background:transparent;border:none;cursor:pointer;font-size:16px;color:#666;padding:0;display:flex;align-items:center;justify-content:center;border-radius:2px}.settings-close:hover{background:#e0e0e0;color:#333}.settings-collapsed{width:28px;background:#fff;border-right:1px solid #e0e0e0;display:flex;flex-direction:column;align-items:center;padding:.5rem 0;cursor:pointer;flex-shrink:0;writing-mode:vertical-rl;text-orientation:mixed}.settings-collapsed:hover{background:#f0f0f0}.settings-collapsed .collapsed-icon{font-size:14px;color:#666;margin-bottom:.5rem}.settings-collapsed .collapsed-label{font-size:11px;color:#666;font-weight:500}.settings-section{margin-bottom:1rem;padding:0 .75rem .75rem;border-bottom:1px solid #f0f0f0}.settings-section:first-of-type{padding-top:.75rem}.settings-section:last-child{border-bottom:none;margin-bottom:0}.settings-section h4{margin:0 0 .5rem;font-size:12px;font-weight:600;color:#666;text-transform:uppercase}.editor-container{flex:1;display:flex;height:100%;min-width:0;min-height:0}.libraries-panel,.symbols-panel,.editor-panel{display:flex;flex-direction:column;background:#fff}.libraries-panel{width:250px}.symbols-panel{width:300px}.editor-panel{flex:1}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem;border-bottom:1px solid #e0e0e0;background:#fafafa}.panel-header h3{margin:0;font-size:14px;font-weight:500}.panel-content{flex:1;overflow-y:auto;padding:.5rem}.loading,.empty-state{padding:2rem 1rem;text-align:center;color:#999;font-size:13px}.library-item{padding:.75rem;border:1px solid #e0e0e0;border-radius:4px;margin-bottom:.5rem;cursor:pointer;transition:all .15s ease}.library-item:hover{border-color:#1976d2;background:#f5f5f5}.library-item.selected{border-color:#1976d2;background:#e3f2fd}.library-name{font-weight:500;margin-bottom:.25rem}.library-info{font-size:11px;color:#666}.symbol-item{display:flex;align-items:center;gap:.75rem;padding:.5rem;border:1px solid #e0e0e0;border-radius:4px;margin-bottom:.5rem;cursor:pointer;transition:all .15s ease}.symbol-item:hover,.symbol-item.selected{border-color:#9c27b0;background:#f3e5f5}.symbol-preview{width:48px;height:48px;background:#fafafa;border-radius:4px;overflow:hidden;display:flex;align-items:center;justify-content:center}.symbol-preview img{max-width:100%;max-height:100%;object-fit:contain}.preview-svg{width:100%;height:100%}.symbol-info{flex:1}.symbol-name{font-weight:500;margin-bottom:.25rem}.symbol-size{font-size:11px;color:#666}.symbol-details{margin-bottom:1rem}.detail-row{display:flex;padding:.5rem 0;border-bottom:1px solid #f0f0f0}.detail-row label{width:100px;color:#666;font-size:12px}.detail-row span{flex:1;font-size:13px}.symbol-preview-large{background:#fafafa;border:1px solid #e0e0e0;border-radius:4px;padding:1rem;display:flex;align-items:center;justify-content:center;min-height:200px}.symbol-preview-large svg{max-width:100%;max-height:300px}.edit-form{display:flex;flex-direction:column;gap:.5rem}.dialog-content{padding:1rem}.form-group{margin-bottom:.75rem}.form-group label{display:block;margin-bottom:.25rem;font-size:12px;font-weight:500;color:#666}.form-group input,.form-group textarea,.form-group select{width:100%;box-sizing:border-box}.form-group textarea{min-height:40px}.form-row{display:flex;gap:.5rem}.form-row .form-group{flex:1}.template-select{padding:.5rem;border:1px solid #e0e0e0;border-radius:4px;font-size:14px}.svg-import-group{display:flex;flex-direction:column;gap:.5rem;padding:.75rem;background:#f5f5f5;border-radius:4px;margin-top:.5rem}.svg-filename{font-weight:500;color:#1976d2}.svg-info{font-size:12px;color:#666}.svg-scale-group{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;background:#e3f2fd;border-radius:4px;margin-top:.25rem}.svg-scale-group label{font-weight:500;margin:0}.scale-info{font-size:12px;color:#666;flex:1}.warning-text{color:#d32f2f;font-size:14px;margin-top:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "directive", type: i3$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: i3$1.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$1.TextAreaDirective, selector: "textarea[kendoTextArea]", inputs: ["autoSize", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: NumericTextBoxModule }, { kind: "ngmodule", type: DialogsModule }, { kind: "component", type: i3.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: i3.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: SymbolEditorComponent, selector: "mm-symbol-editor", inputs: ["symbol", "canvasWidth", "canvasHeight", "gridSize", "showPropertyEditorPanel", "useDockview", "symbolSettings"], outputs: ["symbolChange", "saveRequest", "symbolSettingsChange"] }] });
29942
29942
  }
29943
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryAdminComponent, decorators: [{
29943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryAdminComponent, decorators: [{
29944
29944
  type: Component,
29945
29945
  args: [{ selector: 'mm-symbol-library-admin', standalone: true, imports: [
29946
29946
  CommonModule,
@@ -30484,10 +30484,10 @@ class SymbolLibraryDataSourceDirective extends DataSourceBase {
30484
30484
  refresh() {
30485
30485
  this.fetchAgain();
30486
30486
  }
30487
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
30488
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: SymbolLibraryDataSourceDirective, isStandalone: true, selector: "[mmSymbolLibraryDataSource]", providers: [{ provide: DataSourceBase, useExisting: forwardRef(() => SymbolLibraryDataSourceDirective) }], exportAs: ["mmSymbolLibraryDataSource"], usesInheritance: true, ngImport: i0 });
30487
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
30488
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.5", type: SymbolLibraryDataSourceDirective, isStandalone: true, selector: "[mmSymbolLibraryDataSource]", providers: [{ provide: DataSourceBase, useExisting: forwardRef(() => SymbolLibraryDataSourceDirective) }], exportAs: ["mmSymbolLibraryDataSource"], usesInheritance: true, ngImport: i0 });
30489
30489
  }
30490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryDataSourceDirective, decorators: [{
30490
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryDataSourceDirective, decorators: [{
30491
30491
  type: Directive,
30492
30492
  args: [{
30493
30493
  selector: "[mmSymbolLibraryDataSource]",
@@ -30614,10 +30614,10 @@ class SymbolLibraryListComponent {
30614
30614
  }
30615
30615
  }
30616
30616
  };
30617
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30618
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SymbolLibraryListComponent, isStandalone: true, selector: "mm-symbol-library-list", viewQueries: [{ propertyName: "dataSource", first: true, predicate: ["dir"], descendants: true }], ngImport: i0, template: "<div class=\"symbol-library-list-container\">\n <mm-list-view\n mmSymbolLibraryDataSource\n #dir=\"mmSymbolLibraryDataSource\"\n [sortable]=\"true\"\n [searchTextBoxEnabled]=\"true\"\n [selectable]=\"{mode: 'multiple', enabled: true}\"\n [pageable]=\"{buttonCount: 3, pageSizes: [10, 20, 50, 100]}\"\n [pageSize]=\"20\"\n [columns]=\"[\n {field: 'name', displayName: 'Name', dataType: 'text'},\n {field: 'description', displayName: 'Description', dataType: 'text'},\n {field: 'symbolCount', displayName: 'Symbols', dataType: 'numeric'},\n {field: 'isReadOnly', displayName: 'Read Only', dataType: 'boolean'}\n ]\"\n [actionCommandItems]=\"[\n {id: 'view', type:'link', text: 'View Symbols', svgIcon: viewIcon, onClick: onViewClick}\n ]\"\n [leftToolbarActions]=\"[\n {id: 'new', type:'link', text: 'New Library', svgIcon: plusIcon, onClick: onNewLibrary}\n ]\"\n [contextMenuCommandItems]=\"[\n {id: 'delete', type:'link', text: 'Delete', onClick: onDeleteClick, svgIcon: deleteIcon}\n ]\"\n (rowClicked)=\"onRowClick($event)\">\n </mm-list-view>\n</div>\n", styles: [".symbol-library-list-container{display:flex;flex-direction:column;height:100%;padding:16px;gap:16px}\n"], dependencies: [{ kind: "directive", type: SymbolLibraryDataSourceDirective, selector: "[mmSymbolLibraryDataSource]", exportAs: ["mmSymbolLibraryDataSource"] }, { 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"] }] });
30617
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30618
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: SymbolLibraryListComponent, isStandalone: true, selector: "mm-symbol-library-list", viewQueries: [{ propertyName: "dataSource", first: true, predicate: ["dir"], descendants: true }], ngImport: i0, template: "<div class=\"symbol-library-list-container\">\n <mm-list-view\n mmSymbolLibraryDataSource\n #dir=\"mmSymbolLibraryDataSource\"\n [sortable]=\"true\"\n [searchTextBoxEnabled]=\"true\"\n [selectable]=\"{mode: 'multiple', enabled: true}\"\n [pageable]=\"{buttonCount: 3, pageSizes: [10, 20, 50, 100]}\"\n [pageSize]=\"20\"\n [columns]=\"[\n {field: 'name', displayName: 'Name', dataType: 'text'},\n {field: 'description', displayName: 'Description', dataType: 'text'},\n {field: 'symbolCount', displayName: 'Symbols', dataType: 'numeric'},\n {field: 'isReadOnly', displayName: 'Read Only', dataType: 'boolean'}\n ]\"\n [actionCommandItems]=\"[\n {id: 'view', type:'link', text: 'View Symbols', svgIcon: viewIcon, onClick: onViewClick}\n ]\"\n [leftToolbarActions]=\"[\n {id: 'new', type:'link', text: 'New Library', svgIcon: plusIcon, onClick: onNewLibrary}\n ]\"\n [contextMenuCommandItems]=\"[\n {id: 'delete', type:'link', text: 'Delete', onClick: onDeleteClick, svgIcon: deleteIcon}\n ]\"\n (rowClicked)=\"onRowClick($event)\">\n </mm-list-view>\n</div>\n", styles: [".symbol-library-list-container{display:flex;flex-direction:column;height:100%;padding:16px;gap:16px}\n"], dependencies: [{ kind: "directive", type: SymbolLibraryDataSourceDirective, selector: "[mmSymbolLibraryDataSource]", exportAs: ["mmSymbolLibraryDataSource"] }, { 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"] }] });
30619
30619
  }
30620
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryListComponent, decorators: [{
30620
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryListComponent, decorators: [{
30621
30621
  type: Component,
30622
30622
  args: [{ selector: 'mm-symbol-library-list', standalone: true, imports: [
30623
30623
  SymbolLibraryDataSourceDirective,
@@ -30654,12 +30654,12 @@ class SymbolLibraryDetailComponent {
30654
30654
  deleteIcon = trashIcon;
30655
30655
  backIcon = arrowLeftIcon;
30656
30656
  uploadIcon = uploadIcon;
30657
- library = signal(null, ...(ngDevMode ? [{ debugName: "library" }] : []));
30658
- isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
30659
- selectedSymbol = signal(null, ...(ngDevMode ? [{ debugName: "selectedSymbol" }] : []));
30657
+ library = signal(null, ...(ngDevMode ? [{ debugName: "library" }] : /* istanbul ignore next */ []));
30658
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
30659
+ selectedSymbol = signal(null, ...(ngDevMode ? [{ debugName: "selectedSymbol" }] : /* istanbul ignore next */ []));
30660
30660
  // Dialog state
30661
- showSymbolDialog = signal(false, ...(ngDevMode ? [{ debugName: "showSymbolDialog" }] : []));
30662
- showSvgImportDialog = signal(false, ...(ngDevMode ? [{ debugName: "showSvgImportDialog" }] : []));
30661
+ showSymbolDialog = signal(false, ...(ngDevMode ? [{ debugName: "showSymbolDialog" }] : /* istanbul ignore next */ []));
30662
+ showSvgImportDialog = signal(false, ...(ngDevMode ? [{ debugName: "showSvgImportDialog" }] : /* istanbul ignore next */ []));
30663
30663
  // New Symbol form data
30664
30664
  newSymbol = {
30665
30665
  name: '',
@@ -30677,8 +30677,8 @@ class SymbolLibraryDetailComponent {
30677
30677
  width: 100,
30678
30678
  height: 100
30679
30679
  };
30680
- libraryName = computed(() => this.library()?.name ?? 'Loading...', ...(ngDevMode ? [{ debugName: "libraryName" }] : []));
30681
- symbols = computed(() => this.library()?.symbols ?? [], ...(ngDevMode ? [{ debugName: "symbols" }] : []));
30680
+ libraryName = computed(() => this.library()?.name ?? 'Loading...', ...(ngDevMode ? [{ debugName: "libraryName" }] : /* istanbul ignore next */ []));
30681
+ symbols = computed(() => this.library()?.symbols ?? [], ...(ngDevMode ? [{ debugName: "symbols" }] : /* istanbul ignore next */ []));
30682
30682
  async ngOnInit() {
30683
30683
  const libraryId = this.activatedRoute.snapshot.paramMap.get('libraryId');
30684
30684
  if (libraryId) {
@@ -31153,10 +31153,10 @@ class SymbolLibraryDetailComponent {
31153
31153
  const style = this.resolveStyle(primitive, styleClasses);
31154
31154
  return style.stroke?.opacity ?? defaultOpacity;
31155
31155
  }
31156
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31157
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SymbolLibraryDetailComponent, isStandalone: true, selector: "mm-symbol-library-detail", viewQueries: [{ propertyName: "svgFileInputRef", first: true, predicate: ["svgFileInput"], descendants: true }], ngImport: i0, template: "<div class=\"symbol-library-detail-container\">\n @if (isLoading()) {\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <span>Loading library...</span>\n </div>\n } @else if (library()) {\n <!-- Header -->\n <div class=\"detail-header\">\n <div class=\"header-left\">\n <button kendoButton\n [svgIcon]=\"backIcon\"\n fillMode=\"flat\"\n title=\"Back to library list\"\n (click)=\"navigateBack()\">\n </button>\n <h2 class=\"library-title\">{{ libraryName() }}</h2>\n @if (library()?.isReadOnly) {\n <span class=\"readonly-badge\">Read Only</span>\n }\n </div>\n <div class=\"header-right\">\n <button kendoButton\n [svgIcon]=\"uploadIcon\"\n fillMode=\"outline\"\n title=\"Import SVG\"\n (click)=\"showSvgImportDialogFn()\"\n [disabled]=\"!!library()?.isReadOnly\">\n </button>\n <button kendoButton\n [svgIcon]=\"plusIcon\"\n themeColor=\"primary\"\n title=\"New Symbol\"\n (click)=\"showCreateSymbolDialog()\"\n [disabled]=\"!!library()?.isReadOnly\">\n </button>\n </div>\n </div>\n\n <!-- Symbols Grid -->\n <div class=\"symbols-grid\">\n @for (symbol of symbols(); track symbol.rtId) {\n <div class=\"symbol-card\"\n [class.selected]=\"selectedSymbol()?.rtId === symbol.rtId\"\n (click)=\"selectSymbol(symbol)\">\n <div class=\"symbol-preview\">\n <svg [attr.viewBox]=\"'0 0 ' + symbol.bounds.width + ' ' + symbol.bounds.height\" preserveAspectRatio=\"xMidYMid meet\">\n @for (primitive of symbol.primitives; track primitive.id) {\n @switch (primitive.type) {\n @case ('rectangle') {\n <rect\n [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config?.width\"\n [attr.height]=\"$any(primitive).config?.height\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses)\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n [attr.rx]=\"$any(primitive).config?.cornerRadius || 0\"\n [attr.ry]=\"$any(primitive).config?.cornerRadius || 0\"\n />\n }\n @case ('ellipse') {\n <ellipse\n [attr.cx]=\"primitive.position.x + ($any(primitive).config?.radiusX || 0)\"\n [attr.cy]=\"primitive.position.y + ($any(primitive).config?.radiusY || 0)\"\n [attr.rx]=\"$any(primitive).config?.radiusX\"\n [attr.ry]=\"$any(primitive).config?.radiusY\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses)\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('line') {\n <line\n [attr.x1]=\"$any(primitive).config?.start?.x\"\n [attr.y1]=\"$any(primitive).config?.start?.y\"\n [attr.x2]=\"$any(primitive).config?.end?.x\"\n [attr.y2]=\"$any(primitive).config?.end?.y\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('path') {\n <path\n [attr.d]=\"$any(primitive).config?.d\"\n [attr.transform]=\"'translate(' + primitive.position.x + ',' + primitive.position.y + ')'\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses, 'none')\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('text') {\n <text\n [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses, '#333333')\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.font-size]=\"$any(primitive).config?.fontSize || 12\"\n [attr.font-family]=\"$any(primitive).config?.fontFamily || 'sans-serif'\"\n >{{ $any(primitive).config?.text }}</text>\n }\n @case ('polyline') {\n <polyline\n [attr.points]=\"getPointsWithOffset(primitive)\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses, 'none')\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('polygon') {\n <polygon\n [attr.points]=\"getPointsWithOffset(primitive)\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses)\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n }\n }\n </svg>\n </div>\n <div class=\"symbol-info\">\n <span class=\"symbol-name\">{{ symbol.name }}</span>\n <div class=\"symbol-actions\">\n <button kendoButton [svgIcon]=\"editIcon\" fillMode=\"flat\" size=\"small\" (click)=\"editSymbol(symbol); $event.stopPropagation()\">\n </button>\n <button kendoButton [svgIcon]=\"deleteIcon\" fillMode=\"flat\" size=\"small\"\n [disabled]=\"!!library()?.isReadOnly\"\n (click)=\"deleteSymbol(symbol); $event.stopPropagation()\">\n </button>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"no-symbols\">\n <p>No symbols in this library</p>\n <button kendoButton [svgIcon]=\"plusIcon\" themeColor=\"primary\" (click)=\"showCreateSymbolDialog()\" [disabled]=\"!!library()?.isReadOnly\">\n Create First Symbol\n </button>\n </div>\n }\n </div>\n } @else {\n <div class=\"error-container\">\n <p>Library not found</p>\n <button kendoButton (click)=\"navigateBack()\">Go Back</button>\n </div>\n }\n</div>\n\n<!-- Create Symbol Dialog -->\n@if (showSymbolDialog()) {\n <kendo-dialog title=\"Create Symbol\" (close)=\"closeSymbolDialog()\" [width]=\"450\">\n <div class=\"dialog-content\">\n <div class=\"form-group\">\n <label>Name *</label>\n <input kendoTextBox [(ngModel)]=\"newSymbol.name\" placeholder=\"Symbol name\"/>\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"newSymbol.description\" placeholder=\"Optional description\" rows=\"2\"></textarea>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Width</label>\n <kendo-numerictextbox [(ngModel)]=\"newSymbol.width\" [min]=\"10\" [max]=\"2000\" [step]=\"10\" [format]=\"'n0'\"></kendo-numerictextbox>\n </div>\n <div class=\"form-group\">\n <label>Height</label>\n <kendo-numerictextbox [(ngModel)]=\"newSymbol.height\" [min]=\"10\" [max]=\"2000\" [step]=\"10\" [format]=\"'n0'\"></kendo-numerictextbox>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Category</label>\n <input kendoTextBox [(ngModel)]=\"newSymbol.category\" placeholder=\"e.g., Basic, Flow, Equipment\"/>\n </div>\n </div>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closeSymbolDialog()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" (click)=\"createSymbol()\" [disabled]=\"!newSymbol.name\">\n Create\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n\n<!-- Import SVG Dialog -->\n@if (showSvgImportDialog()) {\n <kendo-dialog title=\"Import Symbol from SVG\" (close)=\"closeSvgImportDialog()\" [width]=\"500\">\n <div class=\"dialog-content\">\n <!-- Hidden file input -->\n <input #svgFileInput\n type=\"file\"\n accept=\".svg,image/svg+xml\"\n style=\"display: none\"\n (change)=\"onSvgFileSelected($event)\"/>\n\n <!-- File Selection -->\n <div class=\"form-group svg-file-group\">\n <button kendoButton (click)=\"svgFileInputRef.nativeElement.click()\">\n {{ svgImport.svgFileName ? 'Change SVG file...' : 'Select SVG file...' }}\n </button>\n @if (svgImport.svgFileName) {\n <div class=\"svg-file-info\">\n <span class=\"svg-filename\">{{ svgImport.svgFileName }}</span>\n <span class=\"svg-stats\">\n {{ svgImport.svgPrimitives?.length || 0 }} elements\n @if (svgImport.styleClasses && svgImport.styleClasses.length > 0) {\n , {{ svgImport.styleClasses.length }} style(s)\n }\n </span>\n </div>\n }\n </div>\n\n @if (svgImport.svgPrimitives) {\n <!-- Scale Control -->\n <div class=\"form-group svg-scale-group\">\n <label>Scale:</label>\n <kendo-numerictextbox\n [(ngModel)]=\"svgImport.svgScale\"\n [min]=\"0.1\"\n [max]=\"10\"\n [step]=\"0.1\"\n [decimals]=\"1\"\n [format]=\"'n1'\"\n (valueChange)=\"onSvgScaleChange($event)\"\n style=\"width: 100px\">\n </kendo-numerictextbox>\n <span class=\"scale-info\">\n Original: {{ svgImport.svgOriginalWidth }}\u00D7{{ svgImport.svgOriginalHeight }}px\n \u2192 {{ svgImport.width }}\u00D7{{ svgImport.height }}px\n </span>\n <button kendoButton look=\"flat\" (click)=\"resetSvgScale()\" title=\"Reset to 1x\">\n Reset\n </button>\n </div>\n\n <!-- Symbol Properties -->\n <div class=\"form-group\">\n <label>Name *</label>\n <input kendoTextBox [(ngModel)]=\"svgImport.name\" placeholder=\"Symbol name\"/>\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"svgImport.description\" placeholder=\"Optional description\" rows=\"2\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Category</label>\n <input kendoTextBox [(ngModel)]=\"svgImport.category\" placeholder=\"e.g., Basic, Flow, Equipment\"/>\n </div>\n }\n </div>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closeSvgImportDialog()\">Cancel</button>\n <button kendoButton themeColor=\"primary\"\n (click)=\"createSymbolFromSvg()\"\n [disabled]=\"!svgImport.name || !svgImport.svgPrimitives?.length\">\n Import\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n", styles: [":host{--card-bg: var(--symbol-card-bg, #1a2332);--card-border: var(--symbol-card-border, rgba(100, 206, 185, .3));--card-hover-border: var(--symbol-card-hover-border, #64ceb9);--card-preview-bg: var(--symbol-card-preview-bg, #394555);--card-info-border: var(--symbol-card-info-border, rgba(100, 206, 185, .2));--text-primary: var(--symbol-text-primary, #e0e0e0);--text-secondary: var(--symbol-text-secondary, #999);--accent-color: var(--symbol-accent-color, #64ceb9)}.symbol-library-detail-container{display:flex;flex-direction:column;height:100%;padding:12px 16px;gap:12px}.loading-container,.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:16px}.loading-spinner{width:40px;height:40px;border:3px solid var(--card-border);border-top-color:var(--accent-color);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.detail-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:12px;border-bottom:1px solid var(--card-border)}.header-left{display:flex;align-items:center;gap:8px}.library-title{margin:0;font-size:1.25rem;font-weight:500;color:var(--text-primary)}.readonly-badge{padding:4px 8px;font-size:.75rem;background:var(--card-preview-bg);border:1px solid var(--card-border);border-radius:4px;color:var(--text-secondary)}.symbols-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;flex:1;overflow-y:auto;padding:4px;align-content:start}.symbol-card{display:flex;flex-direction:column;background:var(--card-bg);border:1px solid var(--card-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:border-color .2s,box-shadow .2s}.symbol-card:hover{border-color:var(--card-hover-border);box-shadow:0 2px 8px #0000004d}.symbol-card.selected{border-color:var(--accent-color);box-shadow:0 0 0 2px #64ceb94d}.symbol-preview{display:flex;align-items:center;justify-content:center;height:120px;padding:12px;background:var(--card-preview-bg)}.symbol-preview svg{width:100%;height:100%;max-width:120px;max-height:100px}.symbol-info{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-top:1px solid var(--card-info-border)}.symbol-name{font-size:.875rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary)}.symbol-actions{display:flex;gap:4px}.no-symbols{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;gap:16px;color:var(--text-secondary)}.header-right{display:flex;gap:4px}.dialog-content{padding:16px 0}.form-group{margin-bottom:16px}.form-group label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:#333}.form-group input,.form-group textarea,.form-group kendo-numerictextbox{width:100%}.form-row{display:flex;gap:16px}.form-row .form-group{flex:1}.svg-file-group{display:flex;flex-direction:column;gap:8px;padding:16px;background:#f5f5f5;border-radius:6px;margin-bottom:16px}.svg-file-info{display:flex;flex-direction:column;gap:4px}.svg-filename{font-weight:500;color:#1976d2}.svg-stats{font-size:12px;color:#666}.svg-scale-group{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#e3f2fd;border-radius:6px;margin-bottom:16px}.svg-scale-group label{font-weight:500;margin:0;white-space:nowrap}.svg-scale-group kendo-numerictextbox{width:100px}.svg-scale-group .scale-info{flex:1;font-size:12px;color:#666}\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.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$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "ngmodule", type: InputsModule }, { kind: "directive", type: i3$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: i3$1.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$1.TextAreaDirective, selector: "textarea[kendoTextArea]", inputs: ["autoSize", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: NumericTextBoxModule }, { kind: "ngmodule", type: DialogsModule }, { kind: "component", type: i3.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: i3.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }] });
31156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31157
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: SymbolLibraryDetailComponent, isStandalone: true, selector: "mm-symbol-library-detail", viewQueries: [{ propertyName: "svgFileInputRef", first: true, predicate: ["svgFileInput"], descendants: true }], ngImport: i0, template: "<div class=\"symbol-library-detail-container\">\n @if (isLoading()) {\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <span>Loading library...</span>\n </div>\n } @else if (library()) {\n <!-- Header -->\n <div class=\"detail-header\">\n <div class=\"header-left\">\n <button kendoButton\n [svgIcon]=\"backIcon\"\n fillMode=\"flat\"\n title=\"Back to library list\"\n (click)=\"navigateBack()\">\n </button>\n <h2 class=\"library-title\">{{ libraryName() }}</h2>\n @if (library()?.isReadOnly) {\n <span class=\"readonly-badge\">Read Only</span>\n }\n </div>\n <div class=\"header-right\">\n <button kendoButton\n [svgIcon]=\"uploadIcon\"\n fillMode=\"outline\"\n title=\"Import SVG\"\n (click)=\"showSvgImportDialogFn()\"\n [disabled]=\"!!library()?.isReadOnly\">\n </button>\n <button kendoButton\n [svgIcon]=\"plusIcon\"\n themeColor=\"primary\"\n title=\"New Symbol\"\n (click)=\"showCreateSymbolDialog()\"\n [disabled]=\"!!library()?.isReadOnly\">\n </button>\n </div>\n </div>\n\n <!-- Symbols Grid -->\n <div class=\"symbols-grid\">\n @for (symbol of symbols(); track symbol.rtId) {\n <div class=\"symbol-card\"\n [class.selected]=\"selectedSymbol()?.rtId === symbol.rtId\"\n (click)=\"selectSymbol(symbol)\">\n <div class=\"symbol-preview\">\n <svg [attr.viewBox]=\"'0 0 ' + symbol.bounds.width + ' ' + symbol.bounds.height\" preserveAspectRatio=\"xMidYMid meet\">\n @for (primitive of symbol.primitives; track primitive.id) {\n @switch (primitive.type) {\n @case ('rectangle') {\n <rect\n [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.width]=\"$any(primitive).config?.width\"\n [attr.height]=\"$any(primitive).config?.height\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses)\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n [attr.rx]=\"$any(primitive).config?.cornerRadius || 0\"\n [attr.ry]=\"$any(primitive).config?.cornerRadius || 0\"\n />\n }\n @case ('ellipse') {\n <ellipse\n [attr.cx]=\"primitive.position.x + ($any(primitive).config?.radiusX || 0)\"\n [attr.cy]=\"primitive.position.y + ($any(primitive).config?.radiusY || 0)\"\n [attr.rx]=\"$any(primitive).config?.radiusX\"\n [attr.ry]=\"$any(primitive).config?.radiusY\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses)\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('line') {\n <line\n [attr.x1]=\"$any(primitive).config?.start?.x\"\n [attr.y1]=\"$any(primitive).config?.start?.y\"\n [attr.x2]=\"$any(primitive).config?.end?.x\"\n [attr.y2]=\"$any(primitive).config?.end?.y\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('path') {\n <path\n [attr.d]=\"$any(primitive).config?.d\"\n [attr.transform]=\"'translate(' + primitive.position.x + ',' + primitive.position.y + ')'\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses, 'none')\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('text') {\n <text\n [attr.x]=\"primitive.position.x\"\n [attr.y]=\"primitive.position.y\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses, '#333333')\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.font-size]=\"$any(primitive).config?.fontSize || 12\"\n [attr.font-family]=\"$any(primitive).config?.fontFamily || 'sans-serif'\"\n >{{ $any(primitive).config?.text }}</text>\n }\n @case ('polyline') {\n <polyline\n [attr.points]=\"getPointsWithOffset(primitive)\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses, 'none')\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n @case ('polygon') {\n <polygon\n [attr.points]=\"getPointsWithOffset(primitive)\"\n [attr.fill]=\"getFillColor(primitive, symbol.styleClasses)\"\n [attr.stroke]=\"getStrokeColor(primitive, symbol.styleClasses)\"\n [attr.stroke-width]=\"getStrokeWidth(primitive, symbol.styleClasses)\"\n [attr.fill-opacity]=\"getFillOpacity(primitive, symbol.styleClasses)\"\n [attr.stroke-opacity]=\"getStrokeOpacity(primitive, symbol.styleClasses)\"\n />\n }\n }\n }\n </svg>\n </div>\n <div class=\"symbol-info\">\n <span class=\"symbol-name\">{{ symbol.name }}</span>\n <div class=\"symbol-actions\">\n <button kendoButton [svgIcon]=\"editIcon\" fillMode=\"flat\" size=\"small\" (click)=\"editSymbol(symbol); $event.stopPropagation()\">\n </button>\n <button kendoButton [svgIcon]=\"deleteIcon\" fillMode=\"flat\" size=\"small\"\n [disabled]=\"!!library()?.isReadOnly\"\n (click)=\"deleteSymbol(symbol); $event.stopPropagation()\">\n </button>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"no-symbols\">\n <p>No symbols in this library</p>\n <button kendoButton [svgIcon]=\"plusIcon\" themeColor=\"primary\" (click)=\"showCreateSymbolDialog()\" [disabled]=\"!!library()?.isReadOnly\">\n Create First Symbol\n </button>\n </div>\n }\n </div>\n } @else {\n <div class=\"error-container\">\n <p>Library not found</p>\n <button kendoButton (click)=\"navigateBack()\">Go Back</button>\n </div>\n }\n</div>\n\n<!-- Create Symbol Dialog -->\n@if (showSymbolDialog()) {\n <kendo-dialog title=\"Create Symbol\" (close)=\"closeSymbolDialog()\" [width]=\"450\">\n <div class=\"dialog-content\">\n <div class=\"form-group\">\n <label>Name *</label>\n <input kendoTextBox [(ngModel)]=\"newSymbol.name\" placeholder=\"Symbol name\"/>\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"newSymbol.description\" placeholder=\"Optional description\" rows=\"2\"></textarea>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Width</label>\n <kendo-numerictextbox [(ngModel)]=\"newSymbol.width\" [min]=\"10\" [max]=\"2000\" [step]=\"10\" [format]=\"'n0'\"></kendo-numerictextbox>\n </div>\n <div class=\"form-group\">\n <label>Height</label>\n <kendo-numerictextbox [(ngModel)]=\"newSymbol.height\" [min]=\"10\" [max]=\"2000\" [step]=\"10\" [format]=\"'n0'\"></kendo-numerictextbox>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Category</label>\n <input kendoTextBox [(ngModel)]=\"newSymbol.category\" placeholder=\"e.g., Basic, Flow, Equipment\"/>\n </div>\n </div>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closeSymbolDialog()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" (click)=\"createSymbol()\" [disabled]=\"!newSymbol.name\">\n Create\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n\n<!-- Import SVG Dialog -->\n@if (showSvgImportDialog()) {\n <kendo-dialog title=\"Import Symbol from SVG\" (close)=\"closeSvgImportDialog()\" [width]=\"500\">\n <div class=\"dialog-content\">\n <!-- Hidden file input -->\n <input #svgFileInput\n type=\"file\"\n accept=\".svg,image/svg+xml\"\n style=\"display: none\"\n (change)=\"onSvgFileSelected($event)\"/>\n\n <!-- File Selection -->\n <div class=\"form-group svg-file-group\">\n <button kendoButton (click)=\"svgFileInputRef.nativeElement.click()\">\n {{ svgImport.svgFileName ? 'Change SVG file...' : 'Select SVG file...' }}\n </button>\n @if (svgImport.svgFileName) {\n <div class=\"svg-file-info\">\n <span class=\"svg-filename\">{{ svgImport.svgFileName }}</span>\n <span class=\"svg-stats\">\n {{ svgImport.svgPrimitives?.length || 0 }} elements\n @if (svgImport.styleClasses && svgImport.styleClasses.length > 0) {\n , {{ svgImport.styleClasses.length }} style(s)\n }\n </span>\n </div>\n }\n </div>\n\n @if (svgImport.svgPrimitives) {\n <!-- Scale Control -->\n <div class=\"form-group svg-scale-group\">\n <label>Scale:</label>\n <kendo-numerictextbox\n [(ngModel)]=\"svgImport.svgScale\"\n [min]=\"0.1\"\n [max]=\"10\"\n [step]=\"0.1\"\n [decimals]=\"1\"\n [format]=\"'n1'\"\n (valueChange)=\"onSvgScaleChange($event)\"\n style=\"width: 100px\">\n </kendo-numerictextbox>\n <span class=\"scale-info\">\n Original: {{ svgImport.svgOriginalWidth }}\u00D7{{ svgImport.svgOriginalHeight }}px\n \u2192 {{ svgImport.width }}\u00D7{{ svgImport.height }}px\n </span>\n <button kendoButton look=\"flat\" (click)=\"resetSvgScale()\" title=\"Reset to 1x\">\n Reset\n </button>\n </div>\n\n <!-- Symbol Properties -->\n <div class=\"form-group\">\n <label>Name *</label>\n <input kendoTextBox [(ngModel)]=\"svgImport.name\" placeholder=\"Symbol name\"/>\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"svgImport.description\" placeholder=\"Optional description\" rows=\"2\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Category</label>\n <input kendoTextBox [(ngModel)]=\"svgImport.category\" placeholder=\"e.g., Basic, Flow, Equipment\"/>\n </div>\n }\n </div>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closeSvgImportDialog()\">Cancel</button>\n <button kendoButton themeColor=\"primary\"\n (click)=\"createSymbolFromSvg()\"\n [disabled]=\"!svgImport.name || !svgImport.svgPrimitives?.length\">\n Import\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n", styles: [":host{--card-bg: var(--symbol-card-bg, #1a2332);--card-border: var(--symbol-card-border, rgba(100, 206, 185, .3));--card-hover-border: var(--symbol-card-hover-border, #64ceb9);--card-preview-bg: var(--symbol-card-preview-bg, #394555);--card-info-border: var(--symbol-card-info-border, rgba(100, 206, 185, .2));--text-primary: var(--symbol-text-primary, #e0e0e0);--text-secondary: var(--symbol-text-secondary, #999);--accent-color: var(--symbol-accent-color, #64ceb9)}.symbol-library-detail-container{display:flex;flex-direction:column;height:100%;padding:12px 16px;gap:12px}.loading-container,.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:16px}.loading-spinner{width:40px;height:40px;border:3px solid var(--card-border);border-top-color:var(--accent-color);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.detail-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:12px;border-bottom:1px solid var(--card-border)}.header-left{display:flex;align-items:center;gap:8px}.library-title{margin:0;font-size:1.25rem;font-weight:500;color:var(--text-primary)}.readonly-badge{padding:4px 8px;font-size:.75rem;background:var(--card-preview-bg);border:1px solid var(--card-border);border-radius:4px;color:var(--text-secondary)}.symbols-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;flex:1;overflow-y:auto;padding:4px;align-content:start}.symbol-card{display:flex;flex-direction:column;background:var(--card-bg);border:1px solid var(--card-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:border-color .2s,box-shadow .2s}.symbol-card:hover{border-color:var(--card-hover-border);box-shadow:0 2px 8px #0000004d}.symbol-card.selected{border-color:var(--accent-color);box-shadow:0 0 0 2px #64ceb94d}.symbol-preview{display:flex;align-items:center;justify-content:center;height:120px;padding:12px;background:var(--card-preview-bg)}.symbol-preview svg{width:100%;height:100%;max-width:120px;max-height:100px}.symbol-info{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-top:1px solid var(--card-info-border)}.symbol-name{font-size:.875rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary)}.symbol-actions{display:flex;gap:4px}.no-symbols{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;gap:16px;color:var(--text-secondary)}.header-right{display:flex;gap:4px}.dialog-content{padding:16px 0}.form-group{margin-bottom:16px}.form-group label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:#333}.form-group input,.form-group textarea,.form-group kendo-numerictextbox{width:100%}.form-row{display:flex;gap:16px}.form-row .form-group{flex:1}.svg-file-group{display:flex;flex-direction:column;gap:8px;padding:16px;background:#f5f5f5;border-radius:6px;margin-bottom:16px}.svg-file-info{display:flex;flex-direction:column;gap:4px}.svg-filename{font-weight:500;color:#1976d2}.svg-stats{font-size:12px;color:#666}.svg-scale-group{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#e3f2fd;border-radius:6px;margin-bottom:16px}.svg-scale-group label{font-weight:500;margin:0;white-space:nowrap}.svg-scale-group kendo-numerictextbox{width:100px}.svg-scale-group .scale-info{flex:1;font-size:12px;color:#666}\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.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$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "ngmodule", type: InputsModule }, { kind: "directive", type: i3$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: i3$1.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$1.TextAreaDirective, selector: "textarea[kendoTextArea]", inputs: ["autoSize", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: NumericTextBoxModule }, { kind: "ngmodule", type: DialogsModule }, { kind: "component", type: i3.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: i3.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }] });
31158
31158
  }
31159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolLibraryDetailComponent, decorators: [{
31159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolLibraryDetailComponent, decorators: [{
31160
31160
  type: Component,
31161
31161
  args: [{ selector: 'mm-symbol-library-detail', standalone: true, imports: [
31162
31162
  CommonModule,
@@ -31192,10 +31192,10 @@ class SymbolEditorPageComponent {
31192
31192
  symbolEditor;
31193
31193
  backIcon = arrowLeftIcon;
31194
31194
  saveIcon = saveIcon;
31195
- library = signal(null, ...(ngDevMode ? [{ debugName: "library" }] : []));
31196
- symbol = signal(null, ...(ngDevMode ? [{ debugName: "symbol" }] : []));
31197
- isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
31198
- isSaving = signal(false, ...(ngDevMode ? [{ debugName: "isSaving" }] : []));
31195
+ library = signal(null, ...(ngDevMode ? [{ debugName: "library" }] : /* istanbul ignore next */ []));
31196
+ symbol = signal(null, ...(ngDevMode ? [{ debugName: "symbol" }] : /* istanbul ignore next */ []));
31197
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
31198
+ isSaving = signal(false, ...(ngDevMode ? [{ debugName: "isSaving" }] : /* istanbul ignore next */ []));
31199
31199
  _hasUnsavedChanges = false;
31200
31200
  _currentSymbol = null;
31201
31201
  /**
@@ -31222,7 +31222,7 @@ class SymbolEditorPageComponent {
31222
31222
  canvasHeight: sym.canvasSize?.height ?? sym.bounds?.height ?? 300,
31223
31223
  gridSize: sym.gridSize ?? 10
31224
31224
  };
31225
- }, ...(ngDevMode ? [{ debugName: "symbolSettings" }] : []));
31225
+ }, ...(ngDevMode ? [{ debugName: "symbolSettings" }] : /* istanbul ignore next */ []));
31226
31226
  // Implementation of HasUnsavedChanges interface
31227
31227
  hasUnsavedChanges() {
31228
31228
  return this._hasUnsavedChanges;
@@ -31390,12 +31390,12 @@ class SymbolEditorPageComponent {
31390
31390
  event.returnValue = '';
31391
31391
  }
31392
31392
  }
31393
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolEditorPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31394
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SymbolEditorPageComponent, isStandalone: true, selector: "mm-symbol-editor-page", host: { listeners: { "window:beforeunload": "handleBeforeUnload($event)" } }, providers: [
31393
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolEditorPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31394
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: SymbolEditorPageComponent, isStandalone: true, selector: "mm-symbol-editor-page", host: { listeners: { "window:beforeunload": "handleBeforeUnload($event)" } }, providers: [
31395
31395
  { provide: HAS_UNSAVED_CHANGES, useExisting: SymbolEditorPageComponent }
31396
31396
  ], viewQueries: [{ propertyName: "symbolEditor", first: true, predicate: SymbolEditorComponent, descendants: true }], ngImport: i0, template: "<div class=\"symbol-editor-page-container\">\n @if (isLoading()) {\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <span>Loading symbol editor...</span>\n </div>\n } @else if (symbol()) {\n <!-- Editor Header -->\n <div class=\"editor-header\">\n <div class=\"header-left\">\n <button kendoButton [svgIcon]=\"backIcon\" fillMode=\"flat\" (click)=\"navigateBack()\">\n Back\n </button>\n <div class=\"symbol-title\">\n <span class=\"library-name\">{{ library()?.name }}</span>\n <span class=\"separator\">/</span>\n <span class=\"symbol-name\">{{ symbol()?.name }}</span>\n @if (hasUnsavedChanges()) {\n <span class=\"unsaved-indicator\">*</span>\n }\n </div>\n </div>\n <div class=\"header-right\">\n <button kendoButton\n [svgIcon]=\"saveIcon\"\n themeColor=\"primary\"\n [disabled]=\"isSaving() || !hasUnsavedChanges()\"\n (click)=\"saveSymbol()\">\n {{ isSaving() ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n\n <!-- Symbol Editor -->\n <div class=\"editor-content\">\n <mm-symbol-editor\n [symbol]=\"symbol()\"\n [canvasWidth]=\"symbol()?.canvasSize?.width ?? symbol()?.bounds?.width ?? 400\"\n [canvasHeight]=\"symbol()?.canvasSize?.height ?? symbol()?.bounds?.height ?? 300\"\n [gridSize]=\"symbol()?.gridSize ?? 10\"\n [useDockview]=\"true\"\n [symbolSettings]=\"symbolSettings()\"\n (symbolChange)=\"onSymbolChange($event)\"\n (saveRequest)=\"onSaveRequest($event)\"\n (symbolSettingsChange)=\"onSymbolSettingsChange($event)\">\n </mm-symbol-editor>\n </div>\n } @else {\n <div class=\"error-container\">\n <p>Symbol not found</p>\n <button kendoButton (click)=\"navigateBack()\">Go Back</button>\n </div>\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex:1;height:100%;min-height:0;overflow:hidden;--editor-bg: var(--designer-bg, #f5f5f5);--editor-surface: var(--designer-surface, #ffffff);--editor-surface-alt: var(--designer-surface-alt, #f5f5f5);--editor-border: var(--designer-border, #e0e0e0);--editor-text: var(--designer-text, #333333);--editor-text-muted: var(--designer-text-muted, #666666);--editor-accent: var(--designer-accent, #1976d2)}.symbol-editor-page-container{display:flex;flex-direction:column;flex:1;height:100%;min-height:0;overflow:hidden;background:var(--editor-bg)}.loading-container,.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:16px;color:var(--editor-text)}.loading-spinner{width:40px;height:40px;border:3px solid var(--editor-border);border-top-color:var(--editor-accent);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.editor-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:var(--editor-surface);border-bottom:1px solid var(--editor-border);flex-shrink:0}.header-left{display:flex;align-items:center;gap:16px}.symbol-title{display:flex;align-items:center;gap:8px;font-size:1rem;color:var(--editor-text)}.library-name{color:var(--editor-text-muted)}.separator{color:var(--editor-border)}.symbol-name{font-weight:500;color:var(--editor-text)}.unsaved-indicator{color:#f44336;font-weight:700;font-size:1.2rem}.editor-content{display:flex;flex-direction:column;flex:1;overflow:hidden;min-height:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: SVGIconModule }, { kind: "component", type: SymbolEditorComponent, selector: "mm-symbol-editor", inputs: ["symbol", "canvasWidth", "canvasHeight", "gridSize", "showPropertyEditorPanel", "useDockview", "symbolSettings"], outputs: ["symbolChange", "saveRequest", "symbolSettingsChange"] }] });
31397
31397
  }
31398
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SymbolEditorPageComponent, decorators: [{
31398
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SymbolEditorPageComponent, decorators: [{
31399
31399
  type: Component,
31400
31400
  args: [{ selector: 'mm-symbol-editor-page', standalone: true, imports: [
31401
31401
  CommonModule,
@@ -31453,10 +31453,10 @@ class ProcessDiagramDataSourceDirective extends DataSourceBase {
31453
31453
  refresh() {
31454
31454
  this.fetchAgain();
31455
31455
  }
31456
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDiagramDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
31457
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ProcessDiagramDataSourceDirective, isStandalone: true, selector: "[mmProcessDiagramDataSource]", providers: [{ provide: DataSourceBase, useExisting: forwardRef(() => ProcessDiagramDataSourceDirective) }], exportAs: ["mmProcessDiagramDataSource"], usesInheritance: true, ngImport: i0 });
31456
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDiagramDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
31457
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.5", type: ProcessDiagramDataSourceDirective, isStandalone: true, selector: "[mmProcessDiagramDataSource]", providers: [{ provide: DataSourceBase, useExisting: forwardRef(() => ProcessDiagramDataSourceDirective) }], exportAs: ["mmProcessDiagramDataSource"], usesInheritance: true, ngImport: i0 });
31458
31458
  }
31459
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDiagramDataSourceDirective, decorators: [{
31459
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDiagramDataSourceDirective, decorators: [{
31460
31460
  type: Directive,
31461
31461
  args: [{
31462
31462
  selector: "[mmProcessDiagramDataSource]",
@@ -31582,10 +31582,10 @@ class ProcessDiagramListComponent {
31582
31582
  }
31583
31583
  }
31584
31584
  };
31585
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDiagramListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31586
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: ProcessDiagramListComponent, isStandalone: true, selector: "mm-process-diagram-list", viewQueries: [{ propertyName: "dataSource", first: true, predicate: ["dir"], descendants: true }], ngImport: i0, template: "<div class=\"process-diagram-list-container\">\n <mm-list-view\n mmProcessDiagramDataSource\n #dir=\"mmProcessDiagramDataSource\"\n [sortable]=\"true\"\n [searchTextBoxEnabled]=\"true\"\n [selectable]=\"{mode: 'multiple', enabled: true}\"\n [pageable]=\"{buttonCount: 3, pageSizes: [10, 20, 50, 100]}\"\n [pageSize]=\"20\"\n [columns]=\"[\n {field: 'name', displayName: 'Name', dataType: 'text'},\n {field: 'description', displayName: 'Description', dataType: 'text'},\n {field: 'version', displayName: 'Version', dataType: 'text'},\n {field: 'canvasWidth', displayName: 'Width', dataType: 'numeric'},\n {field: 'canvasHeight', displayName: 'Height', dataType: 'numeric'}\n ]\"\n [actionCommandItems]=\"[\n {id: 'edit', type:'link', text: 'Edit', svgIcon: editIcon, onClick: onEditClick}\n ]\"\n [leftToolbarActions]=\"[\n {id: 'new', type:'link', text: 'New Diagram', svgIcon: plusIcon, onClick: onNewDiagram}\n ]\"\n [contextMenuCommandItems]=\"[\n {id: 'delete', type:'link', text: 'Delete', onClick: onDeleteClick, svgIcon: deleteIcon}\n ]\"\n (rowClicked)=\"onRowClick($event)\">\n </mm-list-view>\n</div>\n", styles: [".process-diagram-list-container{display:flex;flex-direction:column;height:100%;padding:16px;gap:16px}\n"], dependencies: [{ kind: "directive", type: ProcessDiagramDataSourceDirective, selector: "[mmProcessDiagramDataSource]", exportAs: ["mmProcessDiagramDataSource"] }, { 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"] }] });
31585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDiagramListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31586
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: ProcessDiagramListComponent, isStandalone: true, selector: "mm-process-diagram-list", viewQueries: [{ propertyName: "dataSource", first: true, predicate: ["dir"], descendants: true }], ngImport: i0, template: "<div class=\"process-diagram-list-container\">\n <mm-list-view\n mmProcessDiagramDataSource\n #dir=\"mmProcessDiagramDataSource\"\n [sortable]=\"true\"\n [searchTextBoxEnabled]=\"true\"\n [selectable]=\"{mode: 'multiple', enabled: true}\"\n [pageable]=\"{buttonCount: 3, pageSizes: [10, 20, 50, 100]}\"\n [pageSize]=\"20\"\n [columns]=\"[\n {field: 'name', displayName: 'Name', dataType: 'text'},\n {field: 'description', displayName: 'Description', dataType: 'text'},\n {field: 'version', displayName: 'Version', dataType: 'text'},\n {field: 'canvasWidth', displayName: 'Width', dataType: 'numeric'},\n {field: 'canvasHeight', displayName: 'Height', dataType: 'numeric'}\n ]\"\n [actionCommandItems]=\"[\n {id: 'edit', type:'link', text: 'Edit', svgIcon: editIcon, onClick: onEditClick}\n ]\"\n [leftToolbarActions]=\"[\n {id: 'new', type:'link', text: 'New Diagram', svgIcon: plusIcon, onClick: onNewDiagram}\n ]\"\n [contextMenuCommandItems]=\"[\n {id: 'delete', type:'link', text: 'Delete', onClick: onDeleteClick, svgIcon: deleteIcon}\n ]\"\n (rowClicked)=\"onRowClick($event)\">\n </mm-list-view>\n</div>\n", styles: [".process-diagram-list-container{display:flex;flex-direction:column;height:100%;padding:16px;gap:16px}\n"], dependencies: [{ kind: "directive", type: ProcessDiagramDataSourceDirective, selector: "[mmProcessDiagramDataSource]", exportAs: ["mmProcessDiagramDataSource"] }, { 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"] }] });
31587
31587
  }
31588
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ProcessDiagramListComponent, decorators: [{
31588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ProcessDiagramListComponent, decorators: [{
31589
31589
  type: Component,
31590
31590
  args: [{ selector: 'mm-process-diagram-list', standalone: true, imports: [
31591
31591
  ProcessDiagramDataSourceDirective,
@@ -31624,10 +31624,10 @@ class GetSymbolDefinitionsDtoGQL extends i1.Query {
31624
31624
  constructor(apollo) {
31625
31625
  super(apollo);
31626
31626
  }
31627
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolDefinitionsDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
31628
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolDefinitionsDtoGQL, providedIn: 'root' });
31627
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolDefinitionsDtoGQL, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
31628
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolDefinitionsDtoGQL, providedIn: 'root' });
31629
31629
  }
31630
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GetSymbolDefinitionsDtoGQL, decorators: [{
31630
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GetSymbolDefinitionsDtoGQL, decorators: [{
31631
31631
  type: Injectable,
31632
31632
  args: [{
31633
31633
  providedIn: 'root'