@feature23/ngx-mat-split-button 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,6 +37,8 @@ The `ngx-mat-split-button` component has the following inputs to customize its a
37
37
  | --- | --- | --- |
38
38
  | `color` | `'primary' \| 'accent' \| 'warn' \| undefined` | (Optional; default `undefined`) The color of the primary action button. (Material 2 themes only.) |
39
39
  | `buttonStyle` | `'raised' \| 'stroked' \| 'flat' \| 'basic'` | (Optional; default `'basic'`) The style of the primary action button. These map to the equivalent [Angular Material Button directives](https://material.angular.io/components/button/overview), with `raised` being slightly different in the DOM than the others due to needing a unified shadow. (`raised` style uses `mat-flat-button` internally with a `box-shadow`.) |
40
+ | `primaryDisabled` | `boolean` | (Optional; default `false`) Whether the primary action button should be disabled. |
41
+ | `menuTriggerDisabled` | `boolean` | (Optional; default `false`) Whether the dropdown menu trigger button should be disabled. |
40
42
 
41
43
  ## Events
42
44
 
@@ -45,5 +47,6 @@ The following output events are available to support interactivity:
45
47
  | Output | Event/Argument Type | Description |
46
48
  | --- | --- | --- |
47
49
  | `primaryClick` | `MouseEvent` | Emitted when the primary action button is clicked. |
50
+ | `menuTriggerClick` | `MouseEvent` | Emitted when the dropdown menu trigger button is clicked. |
48
51
 
49
52
  To handle clicks on the secondary action buttons, you can simply add `(click)="handler()"` to the buttons you provide inside the `ngx-mat-split-button` component.
@@ -11,54 +11,69 @@ import * as i2 from "@angular/material/menu";
11
11
  export class NgxMatSplitButton {
12
12
  color = input();
13
13
  buttonStyle = input('basic');
14
+ primaryDisabled = input();
15
+ menuTriggerDisabled = input();
14
16
  primaryClick = output();
17
+ menuTriggerClick = output();
15
18
  primaryAction = contentChild.required(NgxMatSplitPrimaryAction);
16
19
  constructor() {
17
20
  const service = inject(NgxMatSplitButtonService);
18
21
  service.initialize();
19
22
  }
20
23
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NgxMatSplitButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: NgxMatSplitButton, isStandalone: true, selector: "ngx-mat-split-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { primaryClick: "primaryClick" }, queries: [{ propertyName: "primaryAction", first: true, predicate: NgxMatSplitPrimaryAction, descendants: true, isSignal: true }], ngImport: i0, template: `
24
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: NgxMatSplitButton, isStandalone: true, selector: "ngx-mat-split-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null }, primaryDisabled: { classPropertyName: "primaryDisabled", publicName: "primaryDisabled", isSignal: true, isRequired: false, transformFunction: null }, menuTriggerDisabled: { classPropertyName: "menuTriggerDisabled", publicName: "menuTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { primaryClick: "primaryClick", menuTriggerClick: "menuTriggerClick" }, queries: [{ propertyName: "primaryAction", first: true, predicate: NgxMatSplitPrimaryAction, descendants: true, isSignal: true }], ngImport: i0, template: `
22
25
  @if (buttonStyle() === 'basic') {
23
26
  <button mat-button [color]="color()" (click)="primaryClick.emit($event)"
24
- class="ngx-mat-split-button-primary ngx-mat-split-button-basic">
27
+ class="ngx-mat-split-button-primary ngx-mat-split-button-basic"
28
+ [disabled]="primaryDisabled()">
25
29
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
26
30
  </button>
27
31
  <button mat-button [color]="color()" [matMenuTriggerFor]="menu"
28
32
  class="ngx-mat-split-button-trigger"
29
- aria-label="Toggle dropdown">
33
+ aria-label="Toggle menu"
34
+ [disabled]="menuTriggerDisabled()"
35
+ (click)="menuTriggerClick.emit($event)">
30
36
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
31
37
  </button>
32
38
  } @else if (buttonStyle() === 'raised') {
33
39
  <div class="ngx-mat-split-button-raised-wrapper">
34
40
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
35
- class="ngx-mat-split-button-primary ngx-mat-split-button-raised">
41
+ class="ngx-mat-split-button-primary ngx-mat-split-button-raised"
42
+ [disabled]="primaryDisabled()">
36
43
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
37
44
  </button>
38
45
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
39
46
  class="ngx-mat-split-button-trigger"
40
- aria-label="Toggle dropdown">
47
+ aria-label="Toggle menu"
48
+ [disabled]="menuTriggerDisabled()"
49
+ (click)="menuTriggerClick.emit($event)">
41
50
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
42
51
  </button>
43
52
  </div>
44
53
  } @else if (buttonStyle() === 'stroked') {
45
54
  <button mat-stroked-button [color]="color()" (click)="primaryClick.emit($event)"
46
- class="ngx-mat-split-button-primary ngx-mat-split-button-stroked">
55
+ class="ngx-mat-split-button-primary ngx-mat-split-button-stroked"
56
+ [disabled]="primaryDisabled()">
47
57
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
48
58
  </button>
49
59
  <button mat-stroked-button [color]="color()" [matMenuTriggerFor]="menu"
50
60
  class="ngx-mat-split-button-trigger"
51
- aria-label="Toggle dropdown">
61
+ aria-label="Toggle menu"
62
+ [disabled]="menuTriggerDisabled()"
63
+ (click)="menuTriggerClick.emit($event)">
52
64
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
53
65
  </button>
54
66
  } @else if (buttonStyle() === 'flat') {
55
67
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
56
- class="ngx-mat-split-button-primary ngx-mat-split-button-flat">
68
+ class="ngx-mat-split-button-primary ngx-mat-split-button-flat"
69
+ [disabled]="primaryDisabled()">
57
70
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
58
71
  </button>
59
72
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
60
73
  class="ngx-mat-split-button-trigger"
61
- aria-label="Toggle dropdown">
74
+ aria-label="Toggle menu"
75
+ [disabled]="menuTriggerDisabled()"
76
+ (click)="menuTriggerClick.emit($event)">
62
77
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
63
78
  </button>
64
79
  }
@@ -77,44 +92,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
77
92
  ], template: `
78
93
  @if (buttonStyle() === 'basic') {
79
94
  <button mat-button [color]="color()" (click)="primaryClick.emit($event)"
80
- class="ngx-mat-split-button-primary ngx-mat-split-button-basic">
95
+ class="ngx-mat-split-button-primary ngx-mat-split-button-basic"
96
+ [disabled]="primaryDisabled()">
81
97
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
82
98
  </button>
83
99
  <button mat-button [color]="color()" [matMenuTriggerFor]="menu"
84
100
  class="ngx-mat-split-button-trigger"
85
- aria-label="Toggle dropdown">
101
+ aria-label="Toggle menu"
102
+ [disabled]="menuTriggerDisabled()"
103
+ (click)="menuTriggerClick.emit($event)">
86
104
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
87
105
  </button>
88
106
  } @else if (buttonStyle() === 'raised') {
89
107
  <div class="ngx-mat-split-button-raised-wrapper">
90
108
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
91
- class="ngx-mat-split-button-primary ngx-mat-split-button-raised">
109
+ class="ngx-mat-split-button-primary ngx-mat-split-button-raised"
110
+ [disabled]="primaryDisabled()">
92
111
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
93
112
  </button>
94
113
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
95
114
  class="ngx-mat-split-button-trigger"
96
- aria-label="Toggle dropdown">
115
+ aria-label="Toggle menu"
116
+ [disabled]="menuTriggerDisabled()"
117
+ (click)="menuTriggerClick.emit($event)">
97
118
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
98
119
  </button>
99
120
  </div>
100
121
  } @else if (buttonStyle() === 'stroked') {
101
122
  <button mat-stroked-button [color]="color()" (click)="primaryClick.emit($event)"
102
- class="ngx-mat-split-button-primary ngx-mat-split-button-stroked">
123
+ class="ngx-mat-split-button-primary ngx-mat-split-button-stroked"
124
+ [disabled]="primaryDisabled()">
103
125
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
104
126
  </button>
105
127
  <button mat-stroked-button [color]="color()" [matMenuTriggerFor]="menu"
106
128
  class="ngx-mat-split-button-trigger"
107
- aria-label="Toggle dropdown">
129
+ aria-label="Toggle menu"
130
+ [disabled]="menuTriggerDisabled()"
131
+ (click)="menuTriggerClick.emit($event)">
108
132
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
109
133
  </button>
110
134
  } @else if (buttonStyle() === 'flat') {
111
135
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
112
- class="ngx-mat-split-button-primary ngx-mat-split-button-flat">
136
+ class="ngx-mat-split-button-primary ngx-mat-split-button-flat"
137
+ [disabled]="primaryDisabled()">
113
138
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
114
139
  </button>
115
140
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
116
141
  class="ngx-mat-split-button-trigger"
117
- aria-label="Toggle dropdown">
142
+ aria-label="Toggle menu"
143
+ [disabled]="menuTriggerDisabled()"
144
+ (click)="menuTriggerClick.emit($event)">
118
145
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
119
146
  </button>
120
147
  }
@@ -123,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
123
150
  </mat-menu>
124
151
  `, styles: [".ngx-mat-split-button-primary{border-top-right-radius:0;border-bottom-right-radius:0}.ngx-mat-split-button-trigger{border-top-left-radius:0;border-bottom-left-radius:0;border-left-width:0;min-width:3rem}.ngx-mat-split-button-trigger mat-icon{--mat-text-button-icon-spacing: 0;--mat-filled-button-icon-spacing: 0;--mat-protected-button-icon-spacing: 0;--mat-outlined-button-icon-spacing: 0}.ngx-mat-split-button-raised-wrapper{display:inline-block;border-radius:var(--mdc-filled-button-container-shape, var(--mat-app-corner-full));box-shadow:var(--mdc-protected-button-container-elevation-shadow, var(--mat-app-level1))}.ngx-mat-split-button-flat mat-icon svg{fill:var(--mdc-filled-button-label-text-color, var(--mat-app-on-primary))}\n"] }]
125
152
  }], ctorParameters: () => [] });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdC1zcGxpdC1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdC1zcGxpdC1idXR0b24vc3JjL2xpYi9uZ3gtbWF0LXNwbGl0LWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7O0FBMEZwRixNQUFNLE9BQU8saUJBQWlCO0lBQ2pCLEtBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN4QixXQUFXLEdBQUcsS0FBSyxDQUEwQyxPQUFPLENBQUMsQ0FBQztJQUV0RSxZQUFZLEdBQUcsTUFBTSxFQUFjLENBQUM7SUFFcEMsYUFBYSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUV6RTtRQUNJLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QixDQUFDO3dHQVhRLGlCQUFpQjs0RkFBakIsaUJBQWlCLG9iQU1xQix3QkFBd0IsZ0VBcEY3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ1gsd3lCQXJESyxZQUFZLHNNQUNaLFNBQVMsaUxBQ1QsT0FBTywwSUFDUCxhQUFhOzs0RkFpRlIsaUJBQWlCO2tCQXhGN0IsU0FBUzsrQkFDSSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxPQUFPO3dCQUNQLGFBQWE7cUJBQ2hCLFlBRVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29udGVudENoaWxkLCBpbmplY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBOZ3hNYXRTcGxpdEJ1dHRvblNlcnZpY2UgfSBmcm9tICcuL25neC1tYXQtc3BsaXQtYnV0dG9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd4TWF0U3BsaXRQcmltYXJ5QWN0aW9uIH0gZnJvbSAnLi9uZ3gtbWF0LXNwbGl0LXByaW1hcnktYWN0aW9uLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LW1hdC1zcGxpdC1idXR0b24nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbixcbiAgICAgICAgTWF0SWNvbixcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICBdLFxuICAgIC8vIE5PVEU6IHRoZSByZXBldGl0aXZlIGNvZGUgaGVyZSBpcyByZXF1aXJlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgYXBwZWFyIHRoYXQgeW91IGNhbiBjb25kaXRpb25hbGx5IGFkZCBkaXJlY3RpdmVzIGxpa2UgYG1hdC1idXR0b25gIHZzIGBtYXQtZmxhdC1idXR0b25gLlxuICAgIHRlbXBsYXRlOiBgXG4gICAgQGlmIChidXR0b25TdHlsZSgpID09PSAnYmFzaWMnKSB7XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbY29sb3JdPVwiY29sb3IoKVwiIChjbGljayk9XCJwcmltYXJ5Q2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibmd4LW1hdC1zcGxpdC1idXR0b24tcHJpbWFyeSBuZ3gtbWF0LXNwbGl0LWJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJwcmltYXJ5QWN0aW9uKCkudGVtcGxhdGVSZWZcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwibmd4LW1hdC1zcGxpdC1hcnJvdy1kb3duLWljb25cIiBhcmlhLWxhYmVsPVwiRG93biBhcnJvdyBpY29uXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgfSBAZWxzZSBpZiAoYnV0dG9uU3R5bGUoKSA9PT0gJ3JhaXNlZCcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5neC1tYXQtc3BsaXQtYnV0dG9uLXJhaXNlZC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBbY29sb3JdPVwiY29sb3IoKVwiIChjbGljayk9XCJwcmltYXJ5Q2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5neC1tYXQtc3BsaXQtYnV0dG9uLXByaW1hcnkgbmd4LW1hdC1zcGxpdC1idXR0b24tcmFpc2VkXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJwcmltYXJ5QWN0aW9uKCkudGVtcGxhdGVSZWZcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBbY29sb3JdPVwiY29sb3IoKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5neC1tYXQtc3BsaXQtYnV0dG9uLXRyaWdnZXJcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm5neC1tYXQtc3BsaXQtYXJyb3ctZG93bi1pY29uXCIgYXJpYS1sYWJlbD1cIkRvd24gYXJyb3cgaWNvblwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoYnV0dG9uU3R5bGUoKSA9PT0gJ3N0cm9rZWQnKSB7XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgKGNsaWNrKT1cInByaW1hcnlDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi1wcmltYXJ5IG5neC1tYXQtc3BsaXQtYnV0dG9uLXN0cm9rZWRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJpbWFyeUFjdGlvbigpLnRlbXBsYXRlUmVmXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwibmd4LW1hdC1zcGxpdC1hcnJvdy1kb3duLWljb25cIiBhcmlhLWxhYmVsPVwiRG93biBhcnJvdyBpY29uXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgfSBAZWxzZSBpZiAoYnV0dG9uU3R5bGUoKSA9PT0gJ2ZsYXQnKSB7XG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgKGNsaWNrKT1cInByaW1hcnlDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi1wcmltYXJ5IG5neC1tYXQtc3BsaXQtYnV0dG9uLWZsYXRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJpbWFyeUFjdGlvbigpLnRlbXBsYXRlUmVmXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwibmd4LW1hdC1zcGxpdC1hcnJvdy1kb3duLWljb25cIiBhcmlhLWxhYmVsPVwiRG93biBhcnJvdyBpY29uXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8L21hdC1tZW51PlxuICBgLFxuICAgIHN0eWxlczogYFxuICAgIC5uZ3gtbWF0LXNwbGl0LWJ1dHRvbi1wcmltYXJ5IHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgICAubmd4LW1hdC1zcGxpdC1idXR0b24tdHJpZ2dlciB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgICAgICBtaW4td2lkdGg6IDNyZW07XG5cbiAgICAgICAgbWF0LWljb24ge1xuICAgICAgICAgICAgLS1tYXQtdGV4dC1idXR0b24taWNvbi1zcGFjaW5nOiAwO1xuICAgICAgICAgICAgLS1tYXQtZmlsbGVkLWJ1dHRvbi1pY29uLXNwYWNpbmc6IDA7XG4gICAgICAgICAgICAtLW1hdC1wcm90ZWN0ZWQtYnV0dG9uLWljb24tc3BhY2luZzogMDtcbiAgICAgICAgICAgIC0tbWF0LW91dGxpbmVkLWJ1dHRvbi1pY29uLXNwYWNpbmc6IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLm5neC1tYXQtc3BsaXQtYnV0dG9uLXJhaXNlZC13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1hdC1hcHAtY29ybmVyLWZ1bGwpKTtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbi1zaGFkb3csIHZhcigtLW1hdC1hcHAtbGV2ZWwxKSk7XG4gICAgfVxuICAgIC5uZ3gtbWF0LXNwbGl0LWJ1dHRvbi1mbGF0IHtcbiAgICAgICAgbWF0LWljb24gc3ZnIHtcbiAgICAgICAgICAgIGZpbGw6IHZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIHZhcigtLW1hdC1hcHAtb24tcHJpbWFyeSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0U3BsaXRCdXR0b24ge1xuICAgIHJlYWRvbmx5IGNvbG9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICAgIHJlYWRvbmx5IGJ1dHRvblN0eWxlID0gaW5wdXQ8J2Jhc2ljJyB8ICdyYWlzZWQnIHwgJ3N0cm9rZWQnIHwgJ2ZsYXQnPignYmFzaWMnKTtcblxuICAgIHJlYWRvbmx5IHByaW1hcnlDbGljayA9IG91dHB1dDxNb3VzZUV2ZW50PigpO1xuXG4gICAgcmVhZG9ubHkgcHJpbWFyeUFjdGlvbiA9IGNvbnRlbnRDaGlsZC5yZXF1aXJlZChOZ3hNYXRTcGxpdFByaW1hcnlBY3Rpb24pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoTmd4TWF0U3BsaXRCdXR0b25TZXJ2aWNlKTtcbiAgICAgICAgc2VydmljZS5pbml0aWFsaXplKCk7XG4gICAgfVxufVxuIl19
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdC1zcGxpdC1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdC1zcGxpdC1idXR0b24vc3JjL2xpYi9uZ3gtbWF0LXNwbGl0LWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7O0FBc0dwRixNQUFNLE9BQU8saUJBQWlCO0lBQ2pCLEtBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN4QixXQUFXLEdBQUcsS0FBSyxDQUEwQyxPQUFPLENBQUMsQ0FBQztJQUN0RSxlQUFlLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDbkMsbUJBQW1CLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFFdkMsWUFBWSxHQUFHLE1BQU0sRUFBYyxDQUFDO0lBQ3BDLGdCQUFnQixHQUFHLE1BQU0sRUFBYyxDQUFDO0lBRXhDLGFBQWEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFekU7UUFDSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNqRCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0FkUSxpQkFBaUI7NEZBQWpCLGlCQUFpQixreEJBU3FCLHdCQUF3QixnRUFuRzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJEWCx3eUJBakVLLFlBQVksc01BQ1osU0FBUyxpTEFDVCxPQUFPLDBJQUNQLGFBQWE7OzRGQTZGUixpQkFBaUI7a0JBcEc3QixTQUFTOytCQUNJLHNCQUFzQixjQUNwQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixTQUFTO3dCQUNULE9BQU87d0JBQ1AsYUFBYTtxQkFDaEIsWUFFUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRFgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb250ZW50Q2hpbGQsIGluamVjdCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE5neE1hdFNwbGl0QnV0dG9uU2VydmljZSB9IGZyb20gJy4vbmd4LW1hdC1zcGxpdC1idXR0b24uc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hNYXRTcGxpdFByaW1hcnlBY3Rpb24gfSBmcm9tICcuL25neC1tYXQtc3BsaXQtcHJpbWFyeS1hY3Rpb24uZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtbWF0LXNwbGl0LWJ1dHRvbicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uLFxuICAgICAgICBNYXRJY29uLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgIF0sXG4gICAgLy8gTk9URTogdGhlIHJlcGV0aXRpdmUgY29kZSBoZXJlIGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgZG9lc24ndCBhcHBlYXIgdGhhdCB5b3UgY2FuIGNvbmRpdGlvbmFsbHkgYWRkIGRpcmVjdGl2ZXMgbGlrZSBgbWF0LWJ1dHRvbmAgdnMgYG1hdC1mbGF0LWJ1dHRvbmAuXG4gICAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGJ1dHRvblN0eWxlKCkgPT09ICdiYXNpYycpIHtcbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgKGNsaWNrKT1cInByaW1hcnlDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi1wcmltYXJ5IG5neC1tYXQtc3BsaXQtYnV0dG9uLWJhc2ljXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmltYXJ5RGlzYWJsZWQoKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJwcmltYXJ5QWN0aW9uKCkudGVtcGxhdGVSZWZcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgbWVudVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudVRyaWdnZXJEaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtZW51VHJpZ2dlckNsaWNrLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJuZ3gtbWF0LXNwbGl0LWFycm93LWRvd24taWNvblwiIGFyaWEtbGFiZWw9XCJEb3duIGFycm93IGljb25cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9IEBlbHNlIGlmIChidXR0b25TdHlsZSgpID09PSAncmFpc2VkJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibmd4LW1hdC1zcGxpdC1idXR0b24tcmFpc2VkLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgKGNsaWNrKT1cInByaW1hcnlDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibmd4LW1hdC1zcGxpdC1idXR0b24tcHJpbWFyeSBuZ3gtbWF0LXNwbGl0LWJ1dHRvbi1yYWlzZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmltYXJ5RGlzYWJsZWQoKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJpbWFyeUFjdGlvbigpLnRlbXBsYXRlUmVmXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gW2NvbG9yXT1cImNvbG9yKClcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVG9nZ2xlIG1lbnVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51VHJpZ2dlckRpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51VHJpZ2dlckNsaWNrLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwibmd4LW1hdC1zcGxpdC1hcnJvdy1kb3duLWljb25cIiBhcmlhLWxhYmVsPVwiRG93biBhcnJvdyBpY29uXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmIChidXR0b25TdHlsZSgpID09PSAnc3Ryb2tlZCcpIHtcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW2NvbG9yXT1cImNvbG9yKClcIiAoY2xpY2spPVwicHJpbWFyeUNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5neC1tYXQtc3BsaXQtYnV0dG9uLXByaW1hcnkgbmd4LW1hdC1zcGxpdC1idXR0b24tc3Ryb2tlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJpbWFyeURpc2FibGVkKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJpbWFyeUFjdGlvbigpLnRlbXBsYXRlUmVmXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgbWVudVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudVRyaWdnZXJEaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtZW51VHJpZ2dlckNsaWNrLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJuZ3gtbWF0LXNwbGl0LWFycm93LWRvd24taWNvblwiIGFyaWEtbGFiZWw9XCJEb3duIGFycm93IGljb25cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9IEBlbHNlIGlmIChidXR0b25TdHlsZSgpID09PSAnZmxhdCcpIHtcbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gW2NvbG9yXT1cImNvbG9yKClcIiAoY2xpY2spPVwicHJpbWFyeUNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5neC1tYXQtc3BsaXQtYnV0dG9uLXByaW1hcnkgbmd4LW1hdC1zcGxpdC1idXR0b24tZmxhdFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJpbWFyeURpc2FibGVkKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJpbWFyeUFjdGlvbigpLnRlbXBsYXRlUmVmXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFtjb2xvcl09XCJjb2xvcigpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgbWVudVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudVRyaWdnZXJEaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtZW51VHJpZ2dlckNsaWNrLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJuZ3gtbWF0LXNwbGl0LWFycm93LWRvd24taWNvblwiIGFyaWEtbGFiZWw9XCJEb3duIGFycm93IGljb25cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxuICAgICAgICA8bmctY29udGVudCAvPlxuICAgIDwvbWF0LW1lbnU+XG4gIGAsXG4gICAgc3R5bGVzOiBgXG4gICAgLm5neC1tYXQtc3BsaXQtYnV0dG9uLXByaW1hcnkge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuICAgIC5uZ3gtbWF0LXNwbGl0LWJ1dHRvbi10cmlnZ2VyIHtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgICAgIG1pbi13aWR0aDogM3JlbTtcblxuICAgICAgICBtYXQtaWNvbiB7XG4gICAgICAgICAgICAtLW1hdC10ZXh0LWJ1dHRvbi1pY29uLXNwYWNpbmc6IDA7XG4gICAgICAgICAgICAtLW1hdC1maWxsZWQtYnV0dG9uLWljb24tc3BhY2luZzogMDtcbiAgICAgICAgICAgIC0tbWF0LXByb3RlY3RlZC1idXR0b24taWNvbi1zcGFjaW5nOiAwO1xuICAgICAgICAgICAgLS1tYXQtb3V0bGluZWQtYnV0dG9uLWljb24tc3BhY2luZzogMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAubmd4LW1hdC1zcGxpdC1idXR0b24tcmFpc2VkLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWF0LWFwcC1jb3JuZXItZnVsbCkpO1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdywgdmFyKC0tbWF0LWFwcC1sZXZlbDEpKTtcbiAgICB9XG4gICAgLm5neC1tYXQtc3BsaXQtYnV0dG9uLWZsYXQge1xuICAgICAgICBtYXQtaWNvbiBzdmcge1xuICAgICAgICAgICAgZmlsbDogdmFyKC0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgdmFyKC0tbWF0LWFwcC1vbi1wcmltYXJ5KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXRTcGxpdEJ1dHRvbiB7XG4gICAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dDxzdHJpbmc+KCk7XG4gICAgcmVhZG9ubHkgYnV0dG9uU3R5bGUgPSBpbnB1dDwnYmFzaWMnIHwgJ3JhaXNlZCcgfCAnc3Ryb2tlZCcgfCAnZmxhdCc+KCdiYXNpYycpO1xuICAgIHJlYWRvbmx5IHByaW1hcnlEaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gICAgcmVhZG9ubHkgbWVudVRyaWdnZXJEaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgICByZWFkb25seSBwcmltYXJ5Q2xpY2sgPSBvdXRwdXQ8TW91c2VFdmVudD4oKTtcbiAgICByZWFkb25seSBtZW51VHJpZ2dlckNsaWNrID0gb3V0cHV0PE1vdXNlRXZlbnQ+KCk7XG5cbiAgICByZWFkb25seSBwcmltYXJ5QWN0aW9uID0gY29udGVudENoaWxkLnJlcXVpcmVkKE5neE1hdFNwbGl0UHJpbWFyeUFjdGlvbik7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZSA9IGluamVjdChOZ3hNYXRTcGxpdEJ1dHRvblNlcnZpY2UpO1xuICAgICAgICBzZXJ2aWNlLmluaXRpYWxpemUoKTtcbiAgICB9XG59XG4iXX0=
@@ -49,54 +49,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
49
49
  class NgxMatSplitButton {
50
50
  color = input();
51
51
  buttonStyle = input('basic');
52
+ primaryDisabled = input();
53
+ menuTriggerDisabled = input();
52
54
  primaryClick = output();
55
+ menuTriggerClick = output();
53
56
  primaryAction = contentChild.required(NgxMatSplitPrimaryAction);
54
57
  constructor() {
55
58
  const service = inject(NgxMatSplitButtonService);
56
59
  service.initialize();
57
60
  }
58
61
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NgxMatSplitButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
59
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: NgxMatSplitButton, isStandalone: true, selector: "ngx-mat-split-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { primaryClick: "primaryClick" }, queries: [{ propertyName: "primaryAction", first: true, predicate: NgxMatSplitPrimaryAction, descendants: true, isSignal: true }], ngImport: i0, template: `
62
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: NgxMatSplitButton, isStandalone: true, selector: "ngx-mat-split-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null }, primaryDisabled: { classPropertyName: "primaryDisabled", publicName: "primaryDisabled", isSignal: true, isRequired: false, transformFunction: null }, menuTriggerDisabled: { classPropertyName: "menuTriggerDisabled", publicName: "menuTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { primaryClick: "primaryClick", menuTriggerClick: "menuTriggerClick" }, queries: [{ propertyName: "primaryAction", first: true, predicate: NgxMatSplitPrimaryAction, descendants: true, isSignal: true }], ngImport: i0, template: `
60
63
  @if (buttonStyle() === 'basic') {
61
64
  <button mat-button [color]="color()" (click)="primaryClick.emit($event)"
62
- class="ngx-mat-split-button-primary ngx-mat-split-button-basic">
65
+ class="ngx-mat-split-button-primary ngx-mat-split-button-basic"
66
+ [disabled]="primaryDisabled()">
63
67
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
64
68
  </button>
65
69
  <button mat-button [color]="color()" [matMenuTriggerFor]="menu"
66
70
  class="ngx-mat-split-button-trigger"
67
- aria-label="Toggle dropdown">
71
+ aria-label="Toggle menu"
72
+ [disabled]="menuTriggerDisabled()"
73
+ (click)="menuTriggerClick.emit($event)">
68
74
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
69
75
  </button>
70
76
  } @else if (buttonStyle() === 'raised') {
71
77
  <div class="ngx-mat-split-button-raised-wrapper">
72
78
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
73
- class="ngx-mat-split-button-primary ngx-mat-split-button-raised">
79
+ class="ngx-mat-split-button-primary ngx-mat-split-button-raised"
80
+ [disabled]="primaryDisabled()">
74
81
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
75
82
  </button>
76
83
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
77
84
  class="ngx-mat-split-button-trigger"
78
- aria-label="Toggle dropdown">
85
+ aria-label="Toggle menu"
86
+ [disabled]="menuTriggerDisabled()"
87
+ (click)="menuTriggerClick.emit($event)">
79
88
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
80
89
  </button>
81
90
  </div>
82
91
  } @else if (buttonStyle() === 'stroked') {
83
92
  <button mat-stroked-button [color]="color()" (click)="primaryClick.emit($event)"
84
- class="ngx-mat-split-button-primary ngx-mat-split-button-stroked">
93
+ class="ngx-mat-split-button-primary ngx-mat-split-button-stroked"
94
+ [disabled]="primaryDisabled()">
85
95
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
86
96
  </button>
87
97
  <button mat-stroked-button [color]="color()" [matMenuTriggerFor]="menu"
88
98
  class="ngx-mat-split-button-trigger"
89
- aria-label="Toggle dropdown">
99
+ aria-label="Toggle menu"
100
+ [disabled]="menuTriggerDisabled()"
101
+ (click)="menuTriggerClick.emit($event)">
90
102
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
91
103
  </button>
92
104
  } @else if (buttonStyle() === 'flat') {
93
105
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
94
- class="ngx-mat-split-button-primary ngx-mat-split-button-flat">
106
+ class="ngx-mat-split-button-primary ngx-mat-split-button-flat"
107
+ [disabled]="primaryDisabled()">
95
108
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
96
109
  </button>
97
110
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
98
111
  class="ngx-mat-split-button-trigger"
99
- aria-label="Toggle dropdown">
112
+ aria-label="Toggle menu"
113
+ [disabled]="menuTriggerDisabled()"
114
+ (click)="menuTriggerClick.emit($event)">
100
115
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
101
116
  </button>
102
117
  }
@@ -115,44 +130,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
115
130
  ], template: `
116
131
  @if (buttonStyle() === 'basic') {
117
132
  <button mat-button [color]="color()" (click)="primaryClick.emit($event)"
118
- class="ngx-mat-split-button-primary ngx-mat-split-button-basic">
133
+ class="ngx-mat-split-button-primary ngx-mat-split-button-basic"
134
+ [disabled]="primaryDisabled()">
119
135
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
120
136
  </button>
121
137
  <button mat-button [color]="color()" [matMenuTriggerFor]="menu"
122
138
  class="ngx-mat-split-button-trigger"
123
- aria-label="Toggle dropdown">
139
+ aria-label="Toggle menu"
140
+ [disabled]="menuTriggerDisabled()"
141
+ (click)="menuTriggerClick.emit($event)">
124
142
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
125
143
  </button>
126
144
  } @else if (buttonStyle() === 'raised') {
127
145
  <div class="ngx-mat-split-button-raised-wrapper">
128
146
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
129
- class="ngx-mat-split-button-primary ngx-mat-split-button-raised">
147
+ class="ngx-mat-split-button-primary ngx-mat-split-button-raised"
148
+ [disabled]="primaryDisabled()">
130
149
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
131
150
  </button>
132
151
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
133
152
  class="ngx-mat-split-button-trigger"
134
- aria-label="Toggle dropdown">
153
+ aria-label="Toggle menu"
154
+ [disabled]="menuTriggerDisabled()"
155
+ (click)="menuTriggerClick.emit($event)">
135
156
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
136
157
  </button>
137
158
  </div>
138
159
  } @else if (buttonStyle() === 'stroked') {
139
160
  <button mat-stroked-button [color]="color()" (click)="primaryClick.emit($event)"
140
- class="ngx-mat-split-button-primary ngx-mat-split-button-stroked">
161
+ class="ngx-mat-split-button-primary ngx-mat-split-button-stroked"
162
+ [disabled]="primaryDisabled()">
141
163
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
142
164
  </button>
143
165
  <button mat-stroked-button [color]="color()" [matMenuTriggerFor]="menu"
144
166
  class="ngx-mat-split-button-trigger"
145
- aria-label="Toggle dropdown">
167
+ aria-label="Toggle menu"
168
+ [disabled]="menuTriggerDisabled()"
169
+ (click)="menuTriggerClick.emit($event)">
146
170
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
147
171
  </button>
148
172
  } @else if (buttonStyle() === 'flat') {
149
173
  <button mat-flat-button [color]="color()" (click)="primaryClick.emit($event)"
150
- class="ngx-mat-split-button-primary ngx-mat-split-button-flat">
174
+ class="ngx-mat-split-button-primary ngx-mat-split-button-flat"
175
+ [disabled]="primaryDisabled()">
151
176
  <ng-container [ngTemplateOutlet]="primaryAction().templateRef" />
152
177
  </button>
153
178
  <button mat-flat-button [color]="color()" [matMenuTriggerFor]="menu"
154
179
  class="ngx-mat-split-button-trigger"
155
- aria-label="Toggle dropdown">
180
+ aria-label="Toggle menu"
181
+ [disabled]="menuTriggerDisabled()"
182
+ (click)="menuTriggerClick.emit($event)">
156
183
  <mat-icon svgIcon="ngx-mat-split-arrow-down-icon" aria-label="Down arrow icon" />
157
184
  </button>
158
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"feature23-ngx-mat-split-button.mjs","sources":["../../../projects/ngx-mat-split-button/src/lib/ngx-mat-split-button.service.ts","../../../projects/ngx-mat-split-button/src/lib/ngx-mat-split-primary-action.directive.ts","../../../projects/ngx-mat-split-button/src/lib/ngx-mat-split-button.component.ts","../../../projects/ngx-mat-split-button/src/public-api.ts","../../../projects/ngx-mat-split-button/src/feature23-ngx-mat-split-button.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nconst ARROW_DOWN_ICON = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 10l5 5 5-5z\"/></svg>\n`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxMatSplitButtonService {\n\n constructor() {\n const iconRegistry = inject(MatIconRegistry);\n const sanitizer = inject(DomSanitizer);\n iconRegistry.addSvgIconLiteral('ngx-mat-split-arrow-down-icon', sanitizer.bypassSecurityTrustHtml(ARROW_DOWN_ICON));\n }\n\n initialize() {\n // noop, ensure service is injected and constructor run\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngx-mat-split-primary-action]',\n standalone: true,\n})\nexport class NgxMatSplitPrimaryAction {\n constructor(public templateRef: TemplateRef<unknown>) {\n }\n }\n","import { CommonModule } from '@angular/common';\nimport { Component, contentChild, inject, input, output } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { NgxMatSplitButtonService } from './ngx-mat-split-button.service';\nimport { NgxMatSplitPrimaryAction } from './ngx-mat-split-primary-action.directive';\n\n@Component({\n selector: 'ngx-mat-split-button',\n standalone: true,\n imports: [\n CommonModule,\n MatButton,\n MatIcon,\n MatMenuModule,\n ],\n // NOTE: the repetitive code here is required because it doesn't appear that you can conditionally add directives like `mat-button` vs `mat-flat-button`.\n template: `\n @if (buttonStyle() === 'basic') {\n <button mat-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-basic\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle dropdown\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n } @else if (buttonStyle() === 'raised') {\n <div class=\"ngx-mat-split-button-raised-wrapper\">\n <button mat-flat-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-raised\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-flat-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle dropdown\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n </div>\n } @else if (buttonStyle() === 'stroked') {\n <button mat-stroked-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-stroked\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-stroked-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle dropdown\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n } @else if (buttonStyle() === 'flat') {\n <button mat-flat-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-flat\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-flat-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle dropdown\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n }\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <ng-content />\n </mat-menu>\n `,\n styles: `\n .ngx-mat-split-button-primary {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .ngx-mat-split-button-trigger {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-left-width: 0;\n min-width: 3rem;\n\n mat-icon {\n --mat-text-button-icon-spacing: 0;\n --mat-filled-button-icon-spacing: 0;\n --mat-protected-button-icon-spacing: 0;\n --mat-outlined-button-icon-spacing: 0;\n }\n }\n .ngx-mat-split-button-raised-wrapper {\n display: inline-block;\n border-radius: var(--mdc-filled-button-container-shape, var(--mat-app-corner-full));\n box-shadow: var(--mdc-protected-button-container-elevation-shadow, var(--mat-app-level1));\n }\n .ngx-mat-split-button-flat {\n mat-icon svg {\n fill: var(--mdc-filled-button-label-text-color, var(--mat-app-on-primary));\n }\n }\n `\n})\nexport class NgxMatSplitButton {\n readonly color = input<string>();\n readonly buttonStyle = input<'basic' | 'raised' | 'stroked' | 'flat'>('basic');\n\n readonly primaryClick = output<MouseEvent>();\n\n readonly primaryAction = contentChild.required(NgxMatSplitPrimaryAction);\n\n constructor() {\n const service = inject(NgxMatSplitButtonService);\n service.initialize();\n }\n}\n","/*\n * Public API Surface of ngx-mat-split-button\n */\n\nexport * from './lib/ngx-mat-split-button.component';\nexport * from './lib/ngx-mat-split-primary-action.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature23-ngx-mat-split-button.mjs","sources":["../../../projects/ngx-mat-split-button/src/lib/ngx-mat-split-button.service.ts","../../../projects/ngx-mat-split-button/src/lib/ngx-mat-split-primary-action.directive.ts","../../../projects/ngx-mat-split-button/src/lib/ngx-mat-split-button.component.ts","../../../projects/ngx-mat-split-button/src/public-api.ts","../../../projects/ngx-mat-split-button/src/feature23-ngx-mat-split-button.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nconst ARROW_DOWN_ICON = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 10l5 5 5-5z\"/></svg>\n`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxMatSplitButtonService {\n\n constructor() {\n const iconRegistry = inject(MatIconRegistry);\n const sanitizer = inject(DomSanitizer);\n iconRegistry.addSvgIconLiteral('ngx-mat-split-arrow-down-icon', sanitizer.bypassSecurityTrustHtml(ARROW_DOWN_ICON));\n }\n\n initialize() {\n // noop, ensure service is injected and constructor run\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngx-mat-split-primary-action]',\n standalone: true,\n})\nexport class NgxMatSplitPrimaryAction {\n constructor(public templateRef: TemplateRef<unknown>) {\n }\n }\n","import { CommonModule } from '@angular/common';\nimport { Component, contentChild, inject, input, output } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { NgxMatSplitButtonService } from './ngx-mat-split-button.service';\nimport { NgxMatSplitPrimaryAction } from './ngx-mat-split-primary-action.directive';\n\n@Component({\n selector: 'ngx-mat-split-button',\n standalone: true,\n imports: [\n CommonModule,\n MatButton,\n MatIcon,\n MatMenuModule,\n ],\n // NOTE: the repetitive code here is required because it doesn't appear that you can conditionally add directives like `mat-button` vs `mat-flat-button`.\n template: `\n @if (buttonStyle() === 'basic') {\n <button mat-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-basic\"\n [disabled]=\"primaryDisabled()\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle menu\"\n [disabled]=\"menuTriggerDisabled()\"\n (click)=\"menuTriggerClick.emit($event)\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n } @else if (buttonStyle() === 'raised') {\n <div class=\"ngx-mat-split-button-raised-wrapper\">\n <button mat-flat-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-raised\"\n [disabled]=\"primaryDisabled()\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-flat-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle menu\"\n [disabled]=\"menuTriggerDisabled()\"\n (click)=\"menuTriggerClick.emit($event)\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n </div>\n } @else if (buttonStyle() === 'stroked') {\n <button mat-stroked-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-stroked\"\n [disabled]=\"primaryDisabled()\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-stroked-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle menu\"\n [disabled]=\"menuTriggerDisabled()\"\n (click)=\"menuTriggerClick.emit($event)\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n } @else if (buttonStyle() === 'flat') {\n <button mat-flat-button [color]=\"color()\" (click)=\"primaryClick.emit($event)\"\n class=\"ngx-mat-split-button-primary ngx-mat-split-button-flat\"\n [disabled]=\"primaryDisabled()\">\n <ng-container [ngTemplateOutlet]=\"primaryAction().templateRef\" />\n </button>\n <button mat-flat-button [color]=\"color()\" [matMenuTriggerFor]=\"menu\"\n class=\"ngx-mat-split-button-trigger\"\n aria-label=\"Toggle menu\"\n [disabled]=\"menuTriggerDisabled()\"\n (click)=\"menuTriggerClick.emit($event)\">\n <mat-icon svgIcon=\"ngx-mat-split-arrow-down-icon\" aria-label=\"Down arrow icon\" />\n </button>\n }\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <ng-content />\n </mat-menu>\n `,\n styles: `\n .ngx-mat-split-button-primary {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .ngx-mat-split-button-trigger {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-left-width: 0;\n min-width: 3rem;\n\n mat-icon {\n --mat-text-button-icon-spacing: 0;\n --mat-filled-button-icon-spacing: 0;\n --mat-protected-button-icon-spacing: 0;\n --mat-outlined-button-icon-spacing: 0;\n }\n }\n .ngx-mat-split-button-raised-wrapper {\n display: inline-block;\n border-radius: var(--mdc-filled-button-container-shape, var(--mat-app-corner-full));\n box-shadow: var(--mdc-protected-button-container-elevation-shadow, var(--mat-app-level1));\n }\n .ngx-mat-split-button-flat {\n mat-icon svg {\n fill: var(--mdc-filled-button-label-text-color, var(--mat-app-on-primary));\n }\n }\n `\n})\nexport class NgxMatSplitButton {\n readonly color = input<string>();\n readonly buttonStyle = input<'basic' | 'raised' | 'stroked' | 'flat'>('basic');\n readonly primaryDisabled = input<boolean>();\n readonly menuTriggerDisabled = input<boolean>();\n\n readonly primaryClick = output<MouseEvent>();\n readonly menuTriggerClick = output<MouseEvent>();\n\n readonly primaryAction = contentChild.required(NgxMatSplitPrimaryAction);\n\n constructor() {\n const service = inject(NgxMatSplitButtonService);\n service.initialize();\n }\n}\n","/*\n * Public API Surface of ngx-mat-split-button\n */\n\nexport * from './lib/ngx-mat-split-button.component';\nexport * from './lib/ngx-mat-split-primary-action.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;AAIA,MAAM,eAAe,GAAG,CAAA;;CAEvB,CAAC;MAKW,wBAAwB,CAAA;AAEjC,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAC7C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,YAAY,CAAC,iBAAiB,CAAC,+BAA+B,EAAE,SAAS,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC;KACvH;IAED,UAAU,GAAA;;KAET;wGAVQ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCJY,wBAAwB,CAAA;AACd,IAAA,WAAA,CAAA;AAAnB,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAsB;KACnD;wGAFQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;;MCuGY,iBAAiB,CAAA;IACjB,KAAK,GAAG,KAAK,EAAU,CAAC;AACxB,IAAA,WAAW,GAAG,KAAK,CAA0C,OAAO,CAAC,CAAC;IACtE,eAAe,GAAG,KAAK,EAAW,CAAC;IACnC,mBAAmB,GAAG,KAAK,EAAW,CAAC;IAEvC,YAAY,GAAG,MAAM,EAAc,CAAC;IACpC,gBAAgB,GAAG,MAAM,EAAc,CAAC;AAExC,IAAA,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAEzE,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACjD,OAAO,CAAC,UAAU,EAAE,CAAC;KACxB;wGAdQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EASqB,wBAAwB,EAnG7D,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iuBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjEK,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,0IACP,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA6FR,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApG7B,SAAS;+BACI,sBAAsB,EAAA,UAAA,EACpB,IAAI,EACP,OAAA,EAAA;wBACL,YAAY;wBACZ,SAAS;wBACT,OAAO;wBACP,aAAa;qBAChB,EAES,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DX,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,iuBAAA,CAAA,EAAA,CAAA;;;AC7EH;;AAEG;;ACFH;;AAEG;;;;"}
@@ -3,9 +3,12 @@ import * as i0 from "@angular/core";
3
3
  export declare class NgxMatSplitButton {
4
4
  readonly color: import("@angular/core").InputSignal<string | undefined>;
5
5
  readonly buttonStyle: import("@angular/core").InputSignal<"basic" | "raised" | "stroked" | "flat">;
6
+ readonly primaryDisabled: import("@angular/core").InputSignal<boolean | undefined>;
7
+ readonly menuTriggerDisabled: import("@angular/core").InputSignal<boolean | undefined>;
6
8
  readonly primaryClick: import("@angular/core").OutputEmitterRef<MouseEvent>;
9
+ readonly menuTriggerClick: import("@angular/core").OutputEmitterRef<MouseEvent>;
7
10
  readonly primaryAction: import("@angular/core").Signal<NgxMatSplitPrimaryAction>;
8
11
  constructor();
9
12
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatSplitButton, never>;
10
- static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatSplitButton, "ngx-mat-split-button", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "buttonStyle": { "alias": "buttonStyle"; "required": false; "isSignal": true; }; }, { "primaryClick": "primaryClick"; }, ["primaryAction"], ["*"], true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatSplitButton, "ngx-mat-split-button", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "buttonStyle": { "alias": "buttonStyle"; "required": false; "isSignal": true; }; "primaryDisabled": { "alias": "primaryDisabled"; "required": false; "isSignal": true; }; "menuTriggerDisabled": { "alias": "menuTriggerDisabled"; "required": false; "isSignal": true; }; }, { "primaryClick": "primaryClick"; "menuTriggerClick": "menuTriggerClick"; }, ["primaryAction"], ["*"], true, never>;
11
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feature23/ngx-mat-split-button",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "repository": {