@danske/sapphire-angular 2.2.0 → 2.3.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.
Files changed (29) hide show
  1. package/esm2020/lib/radio/public_api.mjs +3 -1
  2. package/esm2020/lib/radio/src/radio-group.component.mjs +22 -159
  3. package/esm2020/lib/radio/src/radio.component.mjs +8 -267
  4. package/esm2020/lib/radio/src/radio.module.mjs +40 -6
  5. package/esm2020/lib/radio/src/segmented/segmented-radio-group.component.mjs +130 -0
  6. package/esm2020/lib/radio/src/segmented/segmented-radio.component.mjs +25 -0
  7. package/esm2020/lib/radio/src/shared/radio-base.mjs +276 -0
  8. package/esm2020/lib/radio/src/shared/radio-group-base.mjs +166 -0
  9. package/esm2020/lib/segmented-tabs/src/segmented-tabs.component.mjs +19 -12
  10. package/esm2020/lib/table/public_api.mjs +2 -1
  11. package/esm2020/lib/table/src/cdk-virtual-scroll-viewport-fix.directive.mjs +61 -0
  12. package/esm2020/lib/table/src/table.module.mjs +7 -2
  13. package/fesm2015/danske-sapphire-angular.mjs +358 -77
  14. package/fesm2015/danske-sapphire-angular.mjs.map +1 -1
  15. package/fesm2020/danske-sapphire-angular.mjs +354 -76
  16. package/fesm2020/danske-sapphire-angular.mjs.map +1 -1
  17. package/lib/radio/public_api.d.ts +2 -0
  18. package/lib/radio/src/radio-group.component.d.ts +5 -60
  19. package/lib/radio/src/radio.component.d.ts +4 -96
  20. package/lib/radio/src/radio.module.d.ts +8 -5
  21. package/lib/radio/src/segmented/segmented-radio-group.component.d.ts +40 -0
  22. package/lib/radio/src/segmented/segmented-radio.component.d.ts +8 -0
  23. package/lib/radio/src/shared/radio-base.d.ts +103 -0
  24. package/lib/radio/src/shared/radio-group-base.d.ts +63 -0
  25. package/lib/segmented-tabs/src/segmented-tabs.component.d.ts +3 -2
  26. package/lib/table/public_api.d.ts +1 -0
  27. package/lib/table/src/cdk-virtual-scroll-viewport-fix.directive.d.ts +25 -0
  28. package/lib/table/src/table.module.d.ts +3 -2
  29. package/package.json +2 -2
@@ -5,18 +5,52 @@ import { CommonModule } from '@angular/common';
5
5
  import { A11yModule } from '@angular/cdk/a11y';
6
6
  import { SapphireFieldModule } from '../../field/src/field.module';
7
7
  import { LabelComponent } from '../../label/public_api';
8
+ import { SegmentedRadioGroupComponent } from './segmented/segmented-radio-group.component';
9
+ import { SegmentedRadioComponent } from './segmented/segmented-radio.component';
10
+ import { UseComponentStyles } from '../../common/sapphire-view-encapsulation';
8
11
  import * as i0 from "@angular/core";
9
12
  export class SapphireRadioModule {
10
13
  }
11
14
  SapphireRadioModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireRadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
- SapphireRadioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.0", ngImport: i0, type: SapphireRadioModule, declarations: [RadioComponent, RadioGroupComponent], imports: [CommonModule, LabelComponent, A11yModule, SapphireFieldModule], exports: [RadioComponent, RadioGroupComponent, SapphireFieldModule] });
13
- SapphireRadioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireRadioModule, imports: [CommonModule, LabelComponent, A11yModule, SapphireFieldModule, SapphireFieldModule] });
15
+ SapphireRadioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.0", ngImport: i0, type: SapphireRadioModule, declarations: [RadioComponent,
16
+ RadioGroupComponent,
17
+ SegmentedRadioComponent,
18
+ SegmentedRadioGroupComponent], imports: [CommonModule,
19
+ LabelComponent,
20
+ A11yModule,
21
+ SapphireFieldModule,
22
+ UseComponentStyles], exports: [RadioComponent,
23
+ RadioGroupComponent,
24
+ SegmentedRadioComponent,
25
+ SegmentedRadioGroupComponent,
26
+ SapphireFieldModule] });
27
+ SapphireRadioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireRadioModule, imports: [CommonModule,
28
+ LabelComponent,
29
+ A11yModule,
30
+ SapphireFieldModule, SapphireFieldModule] });
14
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireRadioModule, decorators: [{
15
32
  type: NgModule,
16
33
  args: [{
17
- declarations: [RadioComponent, RadioGroupComponent],
18
- imports: [CommonModule, LabelComponent, A11yModule, SapphireFieldModule],
19
- exports: [RadioComponent, RadioGroupComponent, SapphireFieldModule],
34
+ declarations: [
35
+ RadioComponent,
36
+ RadioGroupComponent,
37
+ SegmentedRadioComponent,
38
+ SegmentedRadioGroupComponent,
39
+ ],
40
+ imports: [
41
+ CommonModule,
42
+ LabelComponent,
43
+ A11yModule,
44
+ SapphireFieldModule,
45
+ UseComponentStyles,
46
+ ],
47
+ exports: [
48
+ RadioComponent,
49
+ RadioGroupComponent,
50
+ SegmentedRadioComponent,
51
+ SegmentedRadioGroupComponent,
52
+ SapphireFieldModule,
53
+ ],
20
54
  }]
21
55
  }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9yYWRpby9zcmMvcmFkaW8ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU94RCxNQUFNLE9BQU8sbUJBQW1COztnSEFBbkIsbUJBQW1CO2lIQUFuQixtQkFBbUIsaUJBSmYsY0FBYyxFQUFFLG1CQUFtQixhQUN4QyxZQUFZLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsYUFDN0QsY0FBYyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQjtpSEFFdkQsbUJBQW1CLFlBSHBCLFlBQVksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUN4QixtQkFBbUI7MkZBRXZELG1CQUFtQjtrQkFML0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDO29CQUN4RSxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7aUJBQ3BFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgU2FwcGhpcmVGaWVsZE1vZHVsZSB9IGZyb20gJy4uLy4uL2ZpZWxkL3NyYy9maWVsZC5tb2R1bGUnO1xuaW1wb3J0IHsgTGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sYWJlbC9wdWJsaWNfYXBpJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbUmFkaW9Db21wb25lbnQsIFJhZGlvR3JvdXBDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMYWJlbENvbXBvbmVudCwgQTExeU1vZHVsZSwgU2FwcGhpcmVGaWVsZE1vZHVsZV0sXG4gIGV4cG9ydHM6IFtSYWRpb0NvbXBvbmVudCwgUmFkaW9Hcm91cENvbXBvbmVudCwgU2FwcGhpcmVGaWVsZE1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNhcHBoaXJlUmFkaW9Nb2R1bGUge31cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9yYWRpby9zcmMvcmFkaW8ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQXdCOUUsTUFBTSxPQUFPLG1CQUFtQjs7Z0hBQW5CLG1CQUFtQjtpSEFBbkIsbUJBQW1CLGlCQXBCNUIsY0FBYztRQUNkLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsNEJBQTRCLGFBRzVCLFlBQVk7UUFDWixjQUFjO1FBQ2QsVUFBVTtRQUNWLG1CQUFtQjtRQUNuQixrQkFBa0IsYUFHbEIsY0FBYztRQUNkLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsNEJBQTRCO1FBQzVCLG1CQUFtQjtpSEFHVixtQkFBbUIsWUFkNUIsWUFBWTtRQUNaLGNBQWM7UUFDZCxVQUFVO1FBQ1YsbUJBQW1CLEVBUW5CLG1CQUFtQjsyRkFHVixtQkFBbUI7a0JBdEIvQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2Qiw0QkFBNEI7cUJBQzdCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVixtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsbUJBQW1CO3FCQUNwQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL3JhZGlvLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQTExeU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IFNhcHBoaXJlRmllbGRNb2R1bGUgfSBmcm9tICcuLi8uLi9maWVsZC9zcmMvZmllbGQubW9kdWxlJztcbmltcG9ydCB7IExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbGFiZWwvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBTZWdtZW50ZWRSYWRpb0dyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9zZWdtZW50ZWQvc2VnbWVudGVkLXJhZGlvLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWdtZW50ZWRSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4vc2VnbWVudGVkL3NlZ21lbnRlZC1yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlQ29tcG9uZW50U3R5bGVzIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NhcHBoaXJlLXZpZXctZW5jYXBzdWxhdGlvbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFJhZGlvQ29tcG9uZW50LFxuICAgIFJhZGlvR3JvdXBDb21wb25lbnQsXG4gICAgU2VnbWVudGVkUmFkaW9Db21wb25lbnQsXG4gICAgU2VnbWVudGVkUmFkaW9Hcm91cENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMYWJlbENvbXBvbmVudCxcbiAgICBBMTF5TW9kdWxlLFxuICAgIFNhcHBoaXJlRmllbGRNb2R1bGUsXG4gICAgVXNlQ29tcG9uZW50U3R5bGVzLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUmFkaW9Db21wb25lbnQsXG4gICAgUmFkaW9Hcm91cENvbXBvbmVudCxcbiAgICBTZWdtZW50ZWRSYWRpb0NvbXBvbmVudCxcbiAgICBTZWdtZW50ZWRSYWRpb0dyb3VwQ29tcG9uZW50LFxuICAgIFNhcHBoaXJlRmllbGRNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNhcHBoaXJlUmFkaW9Nb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,130 @@
1
+ import { ChangeDetectionStrategy, Component, forwardRef, Input, ViewChild, } from '@angular/core';
2
+ import { ThemeCheckDirective } from '../../../theme/src/theme-check.directive';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { FieldControl } from '../../../field/src/field-control';
5
+ import { RadioGroupBase } from '../shared/radio-group-base';
6
+ import { ViewEncapsulationProvider } from '../../../common/sapphire-view-encapsulation';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../../theme/src/theme-check.directive";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/cdk/a11y";
11
+ export class SegmentedRadioGroupComponent extends RadioGroupBase {
12
+ constructor(zone, changeDetector) {
13
+ super(changeDetector, undefined);
14
+ this.zone = zone;
15
+ this.changeDetector = changeDetector;
16
+ /** Size of tabs */
17
+ this.size = 'md';
18
+ /**
19
+ * Alignment of tabs' buttons group.
20
+ * @default 'left'
21
+ */
22
+ this.align = 'left';
23
+ this._gliderStyles = { left: '0px', width: '0px' };
24
+ this._animationEnabled = false;
25
+ this._focusVisible = false;
26
+ this.skipAnimationFrame();
27
+ }
28
+ skipAnimationFrame() {
29
+ // We want to avoid animation on first render and whenever tab content changes
30
+ this._animationEnabled = false;
31
+ requestAnimationFrame(() => {
32
+ this._animationEnabled = true;
33
+ });
34
+ }
35
+ setGliderStyles() {
36
+ const { offsetLeft, clientWidth } = this.getSelectedTabPosition();
37
+ this._gliderStyles = {
38
+ left: `${offsetLeft}px`,
39
+ width: `${clientWidth}px`,
40
+ };
41
+ }
42
+ getSelectedTabPosition() {
43
+ const selected = this.selected?.elementRef.nativeElement;
44
+ return {
45
+ offsetLeft: selected?.offsetLeft || 0,
46
+ clientWidth: selected?.clientWidth || 0,
47
+ };
48
+ }
49
+ shouldUpdateGliderStyles() {
50
+ const { offsetLeft, clientWidth } = this.getSelectedTabPosition();
51
+ return (`${offsetLeft}px` !== this._gliderStyles.left ||
52
+ `${clientWidth}px` !== this._gliderStyles.width);
53
+ }
54
+ ngAfterViewInit() {
55
+ this.setGliderStyles();
56
+ this.resizeObserver = new ResizeObserver(() => {
57
+ if (this.shouldUpdateGliderStyles()) {
58
+ // zonejs doesn't monkey-patch resize observer (yet)
59
+ this.zone.run(() => {
60
+ this.setGliderStyles();
61
+ });
62
+ }
63
+ });
64
+ this.resizeObserver.observe(this.segmentedControl.nativeElement);
65
+ this.change.subscribe(() => {
66
+ this.setGliderStyles();
67
+ });
68
+ }
69
+ ngAfterViewChecked() {
70
+ this.setGliderStyles();
71
+ this.changeDetector.detectChanges();
72
+ }
73
+ ngOnDestroy() {
74
+ this.resizeObserver?.unobserve(this.segmentedControl.nativeElement);
75
+ this.change.unsubscribe();
76
+ }
77
+ _onFocusChange(focusOrigin) {
78
+ this._focusVisible = focusOrigin === 'keyboard';
79
+ if (!focusOrigin) {
80
+ this.onTouched();
81
+ }
82
+ }
83
+ }
84
+ SegmentedRadioGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SegmentedRadioGroupComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
85
+ SegmentedRadioGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: SegmentedRadioGroupComponent, selector: "sp-segmented-radio-group", inputs: { ariaLabel: ["aria-label", "ariaLabel"], size: "size", align: "align" }, providers: [
86
+ ViewEncapsulationProvider,
87
+ {
88
+ provide: NG_VALUE_ACCESSOR,
89
+ useExisting: forwardRef(() => SegmentedRadioGroupComponent),
90
+ multi: true,
91
+ },
92
+ {
93
+ provide: FieldControl,
94
+ useExisting: forwardRef(() => SegmentedRadioGroupComponent),
95
+ },
96
+ {
97
+ provide: RadioGroupBase,
98
+ useExisting: forwardRef(() => SegmentedRadioGroupComponent),
99
+ },
100
+ ], viewQueries: [{ propertyName: "segmentedControl", first: true, predicate: ["segmentedControl"], descendants: true }], usesInheritance: true, hostDirectives: [{ directive: i1.ThemeCheckDirective }], ngImport: i0, template: "<div\n #segmentedControl\n class=\"sapphire-segmented-control\"\n [class.sapphire-segmented-control--lg]=\"size === 'lg'\"\n [class.sapphire-segmented-control--sm]=\"size === 'sm'\"\n [class.focus-visible]=\"_focusVisible\"\n [ngClass]=\"\n align === 'stretch'\n ? 'sapphire-segmented-control--stretch'\n : 'sapphire-segmented-control--align-' + align\n \"\n>\n <div\n class=\"sapphire-segmented-control__button-container\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel\"\n aria-orientation=\"horizontal\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"_onFocusChange($event)\"\n >\n <ng-content></ng-content>\n <span\n [style.left]=\"_gliderStyles.left\"\n [style.width]=\"_gliderStyles.width\"\n [class.sapphire-segmented-control__glider--with-transition]=\"\n _animationEnabled\n \"\n class=\"sapphire-segmented-control__glider\"\n role=\"none\"\n ></span>\n </div>\n</div>\n", styles: [".sapphire-segmented-control{display:flex;height:var(--sapphire-semantic-size-height-control-md)}.sapphire-segmented-control--stretch .sapphire-segmented-control__button-container{width:100%}.sapphire-segmented-control--align-center{justify-content:center}.sapphire-segmented-control--align-right{justify-content:flex-end}.sapphire-segmented-control--align-left{justify-content:flex-start}.sapphire-segmented-control__button-container{display:inline-flex;position:relative;height:100%;background-color:var(--sapphire-semantic-color-background-control-special-secondary-default);border-radius:var(--sapphire-semantic-size-height-control-lg);padding:var(--sapphire-global-size-static-5);box-sizing:border-box}.sapphire-segmented-control__glider{position:absolute;top:var(--sapphire-global-size-static-5);left:0;height:calc(100% - var(--sapphire-global-size-static-5) * 2);display:block;background-color:var(--sapphire-semantic-color-background-control-special-primary-default);box-shadow:var(--sapphire-global-shadow-sm);box-sizing:border-box;z-index:1;border-radius:var(--sapphire-semantic-size-height-control-lg)}.sapphire-segmented-control__glider--with-transition{transition:width var(--sapphire-semantic-time-motion-quick) ease-in-out,left var(--sapphire-semantic-time-motion-quick) ease-in-out}.sapphire-segmented-control__button{font-family:var(--sapphire-semantic-font-name-default);font-weight:var(--sapphire-semantic-font-weight-default-semibold);font-size:var(--sapphire-semantic-size-font-control-md);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex:1 1 auto;box-sizing:content-box;margin:0;border:0;height:100%;min-width:var(--sapphire-global-size-generic-120);padding:0 var(--sapphire-semantic-size-spacing-50);background-color:transparent;color:var(--sapphire-semantic-color-content-default-primary);cursor:pointer;outline:none;z-index:2;display:flex;align-items:center;justify-content:center;position:relative;transition:color var(--sapphire-semantic-time-motion-quick) ease-in-out}.sapphire-segmented-control__button--active{color:var(--sapphire-semantic-color-content-link-primary-default)}.sapphire-segmented-control__button--disabled{opacity:var(--sapphire-semantic-opacity-disabled);cursor:not-allowed}.sapphire-segmented-control.focus-visible:focus-within .sapphire-segmented-control__glider{outline:var(--sapphire-semantic-size-focus-ring) solid var(--sapphire-semantic-color-focus-ring)}.sapphire-segmented-control--manual-keyboard-activation.focus-visible .sapphire-segmented-control__glider{transition:none}.sapphire-segmented-control--manual-keyboard-activation.focus-visible .sapphire-segmented-control__button:focus{outline:var(--sapphire-semantic-size-focus-ring) solid var(--sapphire-semantic-color-focus-ring);border-radius:var(--sapphire-semantic-size-height-control-lg)}.sapphire-segmented-control.focus-visible:focus-within.sapphire-segmented-control--manual-keyboard-activation .sapphire-segmented-control__glider{outline:none}.sapphire-segmented-control--lg{height:var(--sapphire-semantic-size-height-control-lg)}.sapphire-segmented-control--lg .sapphire-segmented-control__button{font-size:var(--sapphire-semantic-size-font-control-default)}.sapphire-segmented-control--sm{height:var(--sapphire-semantic-size-height-control-sm)}.sapphire-segmented-control--sm .sapphire-segmented-control__button{font-size:var(--sapphire-semantic-size-font-control-sm)}.sapphire-segmented-control__radio-input{margin:0;overflow:visible;position:absolute;top:0;left:0;height:100%;width:100%;opacity:.0001;z-index:1;cursor:pointer}.sapphire-segmented-control__button--disabled .sapphire-segmented-control__radio-input{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SegmentedRadioGroupComponent, decorators: [{
102
+ type: Component,
103
+ args: [{ selector: 'sp-segmented-radio-group', changeDetection: ChangeDetectionStrategy.Default, providers: [
104
+ ViewEncapsulationProvider,
105
+ {
106
+ provide: NG_VALUE_ACCESSOR,
107
+ useExisting: forwardRef(() => SegmentedRadioGroupComponent),
108
+ multi: true,
109
+ },
110
+ {
111
+ provide: FieldControl,
112
+ useExisting: forwardRef(() => SegmentedRadioGroupComponent),
113
+ },
114
+ {
115
+ provide: RadioGroupBase,
116
+ useExisting: forwardRef(() => SegmentedRadioGroupComponent),
117
+ },
118
+ ], hostDirectives: [ThemeCheckDirective], template: "<div\n #segmentedControl\n class=\"sapphire-segmented-control\"\n [class.sapphire-segmented-control--lg]=\"size === 'lg'\"\n [class.sapphire-segmented-control--sm]=\"size === 'sm'\"\n [class.focus-visible]=\"_focusVisible\"\n [ngClass]=\"\n align === 'stretch'\n ? 'sapphire-segmented-control--stretch'\n : 'sapphire-segmented-control--align-' + align\n \"\n>\n <div\n class=\"sapphire-segmented-control__button-container\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel\"\n aria-orientation=\"horizontal\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"_onFocusChange($event)\"\n >\n <ng-content></ng-content>\n <span\n [style.left]=\"_gliderStyles.left\"\n [style.width]=\"_gliderStyles.width\"\n [class.sapphire-segmented-control__glider--with-transition]=\"\n _animationEnabled\n \"\n class=\"sapphire-segmented-control__glider\"\n role=\"none\"\n ></span>\n </div>\n</div>\n", styles: [".sapphire-segmented-control{display:flex;height:var(--sapphire-semantic-size-height-control-md)}.sapphire-segmented-control--stretch .sapphire-segmented-control__button-container{width:100%}.sapphire-segmented-control--align-center{justify-content:center}.sapphire-segmented-control--align-right{justify-content:flex-end}.sapphire-segmented-control--align-left{justify-content:flex-start}.sapphire-segmented-control__button-container{display:inline-flex;position:relative;height:100%;background-color:var(--sapphire-semantic-color-background-control-special-secondary-default);border-radius:var(--sapphire-semantic-size-height-control-lg);padding:var(--sapphire-global-size-static-5);box-sizing:border-box}.sapphire-segmented-control__glider{position:absolute;top:var(--sapphire-global-size-static-5);left:0;height:calc(100% - var(--sapphire-global-size-static-5) * 2);display:block;background-color:var(--sapphire-semantic-color-background-control-special-primary-default);box-shadow:var(--sapphire-global-shadow-sm);box-sizing:border-box;z-index:1;border-radius:var(--sapphire-semantic-size-height-control-lg)}.sapphire-segmented-control__glider--with-transition{transition:width var(--sapphire-semantic-time-motion-quick) ease-in-out,left var(--sapphire-semantic-time-motion-quick) ease-in-out}.sapphire-segmented-control__button{font-family:var(--sapphire-semantic-font-name-default);font-weight:var(--sapphire-semantic-font-weight-default-semibold);font-size:var(--sapphire-semantic-size-font-control-md);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex:1 1 auto;box-sizing:content-box;margin:0;border:0;height:100%;min-width:var(--sapphire-global-size-generic-120);padding:0 var(--sapphire-semantic-size-spacing-50);background-color:transparent;color:var(--sapphire-semantic-color-content-default-primary);cursor:pointer;outline:none;z-index:2;display:flex;align-items:center;justify-content:center;position:relative;transition:color var(--sapphire-semantic-time-motion-quick) ease-in-out}.sapphire-segmented-control__button--active{color:var(--sapphire-semantic-color-content-link-primary-default)}.sapphire-segmented-control__button--disabled{opacity:var(--sapphire-semantic-opacity-disabled);cursor:not-allowed}.sapphire-segmented-control.focus-visible:focus-within .sapphire-segmented-control__glider{outline:var(--sapphire-semantic-size-focus-ring) solid var(--sapphire-semantic-color-focus-ring)}.sapphire-segmented-control--manual-keyboard-activation.focus-visible .sapphire-segmented-control__glider{transition:none}.sapphire-segmented-control--manual-keyboard-activation.focus-visible .sapphire-segmented-control__button:focus{outline:var(--sapphire-semantic-size-focus-ring) solid var(--sapphire-semantic-color-focus-ring);border-radius:var(--sapphire-semantic-size-height-control-lg)}.sapphire-segmented-control.focus-visible:focus-within.sapphire-segmented-control--manual-keyboard-activation .sapphire-segmented-control__glider{outline:none}.sapphire-segmented-control--lg{height:var(--sapphire-semantic-size-height-control-lg)}.sapphire-segmented-control--lg .sapphire-segmented-control__button{font-size:var(--sapphire-semantic-size-font-control-default)}.sapphire-segmented-control--sm{height:var(--sapphire-semantic-size-height-control-sm)}.sapphire-segmented-control--sm .sapphire-segmented-control__button{font-size:var(--sapphire-semantic-size-font-control-sm)}.sapphire-segmented-control__radio-input{margin:0;overflow:visible;position:absolute;top:0;left:0;height:100%;width:100%;opacity:.0001;z-index:1;cursor:pointer}.sapphire-segmented-control__button--disabled .sapphire-segmented-control__radio-input{cursor:not-allowed}\n"] }]
119
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { segmentedControl: [{
120
+ type: ViewChild,
121
+ args: ['segmentedControl']
122
+ }], ariaLabel: [{
123
+ type: Input,
124
+ args: ['aria-label']
125
+ }], size: [{
126
+ type: Input
127
+ }], align: [{
128
+ type: Input
129
+ }] } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudGVkLXJhZGlvLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcmFkaW8vc3JjL3NlZ21lbnRlZC9zZWdtZW50ZWQtcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9yYWRpby9zcmMvc2VnbWVudGVkL3NlZ21lbnRlZC1yYWRpby1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7OztBQTBCeEYsTUFBTSxPQUFPLDRCQUNYLFNBQVEsY0FBYztJQTRCdEIsWUFBb0IsSUFBWSxFQUFVLGNBQWlDO1FBQ3pFLEtBQUssQ0FBQyxjQUFjLEVBQUUsU0FBZ0IsQ0FBQyxDQUFDO1FBRHRCLFNBQUksR0FBSixJQUFJLENBQVE7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFoQjNFLG1CQUFtQjtRQUVuQixTQUFJLEdBQXVCLElBQUksQ0FBQztRQUVoQzs7O1dBR0c7UUFFSCxVQUFLLEdBQTZDLE1BQU0sQ0FBQztRQUd6RCxrQkFBYSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDOUMsc0JBQWlC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STtTQUNaO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsWUFBWTtZQUNyQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDO1NBQzVEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsY0FBYztZQUN2QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDO1NBQzVEO0tBQ0YsZ09DeENILDg4QkFnQ0E7MkZEV2EsNEJBQTRCO2tCQXZCeEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE9BQU8sYUFDckM7d0JBQ1QseUJBQXlCO3dCQUN6Qjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQzs0QkFDM0QsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLFlBQVk7NEJBQ3JCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDO3lCQUM1RDt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsY0FBYzs0QkFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUM7eUJBQzVEO3FCQUNGLGtCQUNlLENBQUMsbUJBQW1CLENBQUM7NkhBTU4sZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFPN0IsU0FBUztzQkFEUixLQUFLO3VCQUFDLFlBQVk7Z0JBS25CLElBQUk7c0JBREgsS0FBSztnQkFRTixLQUFLO3NCQURKLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGhlbWVDaGVja0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL3RoZW1lL3NyYy90aGVtZS1jaGVjay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZENvbnRyb2wgfSBmcm9tICcuLi8uLi8uLi9maWVsZC9zcmMvZmllbGQtY29udHJvbCc7XG5pbXBvcnQgeyBSYWRpb0dyb3VwQmFzZSB9IGZyb20gJy4uL3NoYXJlZC9yYWRpby1ncm91cC1iYXNlJztcbmltcG9ydCB7IFZpZXdFbmNhcHN1bGF0aW9uUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vc2FwcGhpcmUtdmlldy1lbmNhcHN1bGF0aW9uJztcbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcC1zZWdtZW50ZWQtcmFkaW8tZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VnbWVudGVkLXJhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VnbWVudGVkLXJhZGlvLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVmlld0VuY2Fwc3VsYXRpb25Qcm92aWRlcixcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlZ21lbnRlZFJhZGlvR3JvdXBDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBGaWVsZENvbnRyb2wsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWdtZW50ZWRSYWRpb0dyb3VwQ29tcG9uZW50KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJhZGlvR3JvdXBCYXNlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VnbWVudGVkUmFkaW9Hcm91cENvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtUaGVtZUNoZWNrRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VnbWVudGVkUmFkaW9Hcm91cENvbXBvbmVudFxuICBleHRlbmRzIFJhZGlvR3JvdXBCYXNlXG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkXG57XG4gIEBWaWV3Q2hpbGQoJ3NlZ21lbnRlZENvbnRyb2wnKSBzZWdtZW50ZWRDb250cm9sITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogTGFiZWwgKG5vdCBzaG93biBvbiB0aGUgc2NyZWVuKS5cbiAgICogUmVxdWlyZWQgZm9yIGFjY2Vzc2liaWxpdHkgcmVhc29ucy5cbiAgICoqL1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKVxuICBhcmlhTGFiZWwhOiBzdHJpbmc7XG5cbiAgLyoqIFNpemUgb2YgdGFicyAqL1xuICBASW5wdXQoKVxuICBzaXplOiAnc20nIHwgJ21kJyB8ICdsZycgPSAnbWQnO1xuXG4gIC8qKlxuICAgKiBBbGlnbm1lbnQgb2YgdGFicycgYnV0dG9ucyBncm91cC5cbiAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAqL1xuICBASW5wdXQoKVxuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdzdHJldGNoJyA9ICdsZWZ0JztcblxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IHVuZGVmaW5lZDtcbiAgX2dsaWRlclN0eWxlcyA9IHsgbGVmdDogJzBweCcsIHdpZHRoOiAnMHB4JyB9O1xuICBfYW5pbWF0aW9uRW5hYmxlZCA9IGZhbHNlO1xuICBfZm9jdXNWaXNpYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3IsIHVuZGVmaW5lZCBhcyBhbnkpO1xuICAgIHRoaXMuc2tpcEFuaW1hdGlvbkZyYW1lKCk7XG4gIH1cblxuICBwcml2YXRlIHNraXBBbmltYXRpb25GcmFtZSgpIHtcbiAgICAvLyBXZSB3YW50IHRvIGF2b2lkIGFuaW1hdGlvbiBvbiBmaXJzdCByZW5kZXIgYW5kIHdoZW5ldmVyIHRhYiBjb250ZW50IGNoYW5nZXNcbiAgICB0aGlzLl9hbmltYXRpb25FbmFibGVkID0gZmFsc2U7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuX2FuaW1hdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRHbGlkZXJTdHlsZXMoKSB7XG4gICAgY29uc3QgeyBvZmZzZXRMZWZ0LCBjbGllbnRXaWR0aCB9ID0gdGhpcy5nZXRTZWxlY3RlZFRhYlBvc2l0aW9uKCk7XG4gICAgdGhpcy5fZ2xpZGVyU3R5bGVzID0ge1xuICAgICAgbGVmdDogYCR7b2Zmc2V0TGVmdH1weGAsXG4gICAgICB3aWR0aDogYCR7Y2xpZW50V2lkdGh9cHhgLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkVGFiUG9zaXRpb24oKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkPy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9mZnNldExlZnQ6IHNlbGVjdGVkPy5vZmZzZXRMZWZ0IHx8IDAsXG4gICAgICBjbGllbnRXaWR0aDogc2VsZWN0ZWQ/LmNsaWVudFdpZHRoIHx8IDAsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkVXBkYXRlR2xpZGVyU3R5bGVzKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgb2Zmc2V0TGVmdCwgY2xpZW50V2lkdGggfSA9IHRoaXMuZ2V0U2VsZWN0ZWRUYWJQb3NpdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICBgJHtvZmZzZXRMZWZ0fXB4YCAhPT0gdGhpcy5fZ2xpZGVyU3R5bGVzLmxlZnQgfHxcbiAgICAgIGAke2NsaWVudFdpZHRofXB4YCAhPT0gdGhpcy5fZ2xpZGVyU3R5bGVzLndpZHRoXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEdsaWRlclN0eWxlcygpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlR2xpZGVyU3R5bGVzKCkpIHtcbiAgICAgICAgLy8gem9uZWpzIGRvZXNuJ3QgbW9ua2V5LXBhdGNoIHJlc2l6ZSBvYnNlcnZlciAoeWV0KVxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEdsaWRlclN0eWxlcygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnNlZ21lbnRlZENvbnRyb2wubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5jaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0R2xpZGVyU3R5bGVzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRHbGlkZXJTdHlsZXMoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LnVub2JzZXJ2ZSh0aGlzLnNlZ21lbnRlZENvbnRyb2wubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5jaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIF9vbkZvY3VzQ2hhbmdlKGZvY3VzT3JpZ2luOiBGb2N1c09yaWdpbikge1xuICAgIHRoaXMuX2ZvY3VzVmlzaWJsZSA9IGZvY3VzT3JpZ2luID09PSAna2V5Ym9hcmQnO1xuICAgIGlmICghZm9jdXNPcmlnaW4pIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gICNzZWdtZW50ZWRDb250cm9sXG4gIGNsYXNzPVwic2FwcGhpcmUtc2VnbWVudGVkLWNvbnRyb2xcIlxuICBbY2xhc3Muc2FwcGhpcmUtc2VnbWVudGVkLWNvbnRyb2wtLWxnXT1cInNpemUgPT09ICdsZydcIlxuICBbY2xhc3Muc2FwcGhpcmUtc2VnbWVudGVkLWNvbnRyb2wtLXNtXT1cInNpemUgPT09ICdzbSdcIlxuICBbY2xhc3MuZm9jdXMtdmlzaWJsZV09XCJfZm9jdXNWaXNpYmxlXCJcbiAgW25nQ2xhc3NdPVwiXG4gICAgYWxpZ24gPT09ICdzdHJldGNoJ1xuICAgICAgPyAnc2FwcGhpcmUtc2VnbWVudGVkLWNvbnRyb2wtLXN0cmV0Y2gnXG4gICAgICA6ICdzYXBwaGlyZS1zZWdtZW50ZWQtY29udHJvbC0tYWxpZ24tJyArIGFsaWduXG4gIFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNhcHBoaXJlLXNlZ21lbnRlZC1jb250cm9sX19idXR0b24tY29udGFpbmVyXCJcbiAgICByb2xlPVwicmFkaW9ncm91cFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIGFyaWEtb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICBjZGtNb25pdG9yU3VidHJlZUZvY3VzXG4gICAgKGNka0ZvY3VzQ2hhbmdlKT1cIl9vbkZvY3VzQ2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxzcGFuXG4gICAgICBbc3R5bGUubGVmdF09XCJfZ2xpZGVyU3R5bGVzLmxlZnRcIlxuICAgICAgW3N0eWxlLndpZHRoXT1cIl9nbGlkZXJTdHlsZXMud2lkdGhcIlxuICAgICAgW2NsYXNzLnNhcHBoaXJlLXNlZ21lbnRlZC1jb250cm9sX19nbGlkZXItLXdpdGgtdHJhbnNpdGlvbl09XCJcbiAgICAgICAgX2FuaW1hdGlvbkVuYWJsZWRcbiAgICAgIFwiXG4gICAgICBjbGFzcz1cInNhcHBoaXJlLXNlZ21lbnRlZC1jb250cm9sX19nbGlkZXJcIlxuICAgICAgcm9sZT1cIm5vbmVcIlxuICAgID48L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { UseComponentStyles } from '../../../common/sapphire-view-encapsulation';
3
+ import { ThemeCheckDirective } from '../../../theme/src/theme-check.directive';
4
+ import { RadioBase } from '../shared/radio-base';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../theme/src/theme-check.directive";
7
+ import * as i2 from "../../../common/sapphire-view-encapsulation";
8
+ export class SegmentedRadioComponent extends RadioBase {
9
+ }
10
+ SegmentedRadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SegmentedRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
11
+ SegmentedRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: SegmentedRadioComponent, selector: "sp-segmented-radio", inputs: { tabIndex: "tabIndex" }, host: { properties: { "class.sapphire-segmented-control__button--disabled": "disabled", "class.sapphire-segmented-control__button--active": "checked", "attr.id": "id", "attr.tabindex": "null", "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null" }, classAttribute: "sapphire-segmented-control__button" }, usesInheritance: true, hostDirectives: [{ directive: i1.ThemeCheckDirective }, { directive: i2.UseComponentStyles }], ngImport: i0, template: "<label [for]=\"inputId\">\n <input\n #input\n _spUseComponentStyles\n class=\"sapphire-segmented-control__radio-input\"\n type=\"radio\"\n [id]=\"inputId\"\n [attr.aria-checked]=\"_getAriaChecked()\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (change)=\"_onInputInteraction($event)\"\n [attr.autofocus]=\"autofocus ? true : null\"\n />\n <ng-content></ng-content>\n</label>\n", dependencies: [{ kind: "directive", type: i2.UseComponentStyles, selector: "[_spUseComponentStyles]" }], changeDetection: i0.ChangeDetectionStrategy.Default });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SegmentedRadioComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'sp-segmented-radio', changeDetection: ChangeDetectionStrategy.Default, hostDirectives: [ThemeCheckDirective, UseComponentStyles], inputs: ['tabIndex'], host: {
15
+ class: 'sapphire-segmented-control__button',
16
+ '[class.sapphire-segmented-control__button--disabled]': 'disabled',
17
+ '[class.sapphire-segmented-control__button--active]': 'checked',
18
+ '[attr.id]': 'id',
19
+ '[attr.tabindex]': 'null',
20
+ '[attr.aria-label]': 'null',
21
+ '[attr.aria-labelledby]': 'null',
22
+ '[attr.aria-describedby]': 'null',
23
+ }, template: "<label [for]=\"inputId\">\n <input\n #input\n _spUseComponentStyles\n class=\"sapphire-segmented-control__radio-input\"\n type=\"radio\"\n [id]=\"inputId\"\n [attr.aria-checked]=\"_getAriaChecked()\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (change)=\"_onInputInteraction($event)\"\n [attr.autofocus]=\"autofocus ? true : null\"\n />\n <ng-content></ng-content>\n</label>\n" }]
24
+ }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudGVkLXJhZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcmFkaW8vc3JjL3NlZ21lbnRlZC9zZWdtZW50ZWQtcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9yYWRpby9zcmMvc2VnbWVudGVkL3NlZ21lbnRlZC1yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQW1CakQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFNBQVM7O29IQUF6Qyx1QkFBdUI7d0dBQXZCLHVCQUF1Qix5aUJDdEJwQyxncUJBc0JBOzJGREFhLHVCQUF1QjtrQkFqQm5DLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE9BQU8sa0JBQ2hDLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUMsVUFDakQsQ0FBQyxVQUFVLENBQUMsUUFDZDt3QkFDSixLQUFLLEVBQUUsb0NBQW9DO3dCQUMzQyxzREFBc0QsRUFBRSxVQUFVO3dCQUNsRSxvREFBb0QsRUFBRSxTQUFTO3dCQUMvRCxXQUFXLEVBQUUsSUFBSTt3QkFDakIsaUJBQWlCLEVBQUUsTUFBTTt3QkFDekIsbUJBQW1CLEVBQUUsTUFBTTt3QkFDM0Isd0JBQXdCLEVBQUUsTUFBTTt3QkFDaEMseUJBQXlCLEVBQUUsTUFBTTtxQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVc2VDb21wb25lbnRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vc2FwcGhpcmUtdmlldy1lbmNhcHN1bGF0aW9uJztcbmltcG9ydCB7IFRoZW1lQ2hlY2tEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi90aGVtZS9zcmMvdGhlbWUtY2hlY2suZGlyZWN0aXZlJztcbmltcG9ydCB7IFJhZGlvQmFzZSB9IGZyb20gJy4uL3NoYXJlZC9yYWRpby1iYXNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3Atc2VnbWVudGVkLXJhZGlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlZ21lbnRlZC1yYWRpby5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgaG9zdERpcmVjdGl2ZXM6IFtUaGVtZUNoZWNrRGlyZWN0aXZlLCBVc2VDb21wb25lbnRTdHlsZXNdLFxuICBpbnB1dHM6IFsndGFiSW5kZXgnXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnc2FwcGhpcmUtc2VnbWVudGVkLWNvbnRyb2xfX2J1dHRvbicsXG4gICAgJ1tjbGFzcy5zYXBwaGlyZS1zZWdtZW50ZWQtY29udHJvbF9fYnV0dG9uLS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3Muc2FwcGhpcmUtc2VnbWVudGVkLWNvbnRyb2xfX2J1dHRvbi0tYWN0aXZlXSc6ICdjaGVja2VkJyxcbiAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAnW2F0dHIudGFiaW5kZXhdJzogJ251bGwnLFxuICAgICdbYXR0ci5hcmlhLWxhYmVsXSc6ICdudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnbnVsbCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNlZ21lbnRlZFJhZGlvQ29tcG9uZW50IGV4dGVuZHMgUmFkaW9CYXNlIHt9XG4iLCI8bGFiZWwgW2Zvcl09XCJpbnB1dElkXCI+XG4gIDxpbnB1dFxuICAgICNpbnB1dFxuICAgIF9zcFVzZUNvbXBvbmVudFN0eWxlc1xuICAgIGNsYXNzPVwic2FwcGhpcmUtc2VnbWVudGVkLWNvbnRyb2xfX3JhZGlvLWlucHV0XCJcbiAgICB0eXBlPVwicmFkaW9cIlxuICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiX2dldEFyaWFDaGVja2VkKClcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IG51bGxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRieVwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkYnlcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIChjaGFuZ2UpPVwiX29uSW5wdXRJbnRlcmFjdGlvbigkZXZlbnQpXCJcbiAgICBbYXR0ci5hdXRvZm9jdXNdPVwiYXV0b2ZvY3VzID8gdHJ1ZSA6IG51bGxcIlxuICAvPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2xhYmVsPlxuIl19
@@ -0,0 +1,276 @@
1
+ import { __decorate } from "tslib";
2
+ import { Attribute, Directive, EventEmitter, HostBinding, Input, Optional, Output, ViewChild, } from '@angular/core';
3
+ import { coerceBooleanProperty, coerceNumberProperty, } from '@angular/cdk/coercion';
4
+ import { mixinDisabled } from '../../../common/disabled';
5
+ import { mixinTabIndex } from '../../../common/tabindex';
6
+ import { AutoId } from '../../../common/auto-id.decorator';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./radio-group-base";
9
+ import * as i2 from "@angular/cdk/a11y";
10
+ import * as i3 from "@angular/cdk/collections";
11
+ /** Change event object emitted by radio. */
12
+ export class SapphireRadioChange {
13
+ constructor(
14
+ /** The new `checked` value of the radio. */
15
+ source,
16
+ /** The source radio of the event. */
17
+ value) {
18
+ this.source = source;
19
+ this.value = value;
20
+ }
21
+ }
22
+ const _RadioMixinBase = mixinTabIndex(mixinDisabled(class {
23
+ constructor(_elementRef) {
24
+ this._elementRef = _elementRef;
25
+ }
26
+ }));
27
+ /**
28
+ * @Directive decorator is just to be able to have a constructor with DI.
29
+ * This class is being extended by other components.
30
+ **/
31
+ export class RadioBase extends _RadioMixinBase {
32
+ _getAriaChecked() {
33
+ return this.checked ? 'true' : 'false';
34
+ }
35
+ /** Returns the unique id for the visual hidden input. */
36
+ get inputId() {
37
+ return `${this.id}-input`;
38
+ }
39
+ /** The value of this radio button. */
40
+ get value() {
41
+ return this._value;
42
+ }
43
+ set value(value) {
44
+ if (this._value !== value) {
45
+ this._value = value;
46
+ if (this.radioGroup !== null) {
47
+ if (!this.checked) {
48
+ this.checked = this.radioGroup.value === value;
49
+ }
50
+ if (this.checked) {
51
+ this.radioGroup.selected = this;
52
+ }
53
+ }
54
+ }
55
+ }
56
+ /** Whether this radio button is checked. */
57
+ get checked() {
58
+ return this._checked;
59
+ }
60
+ set checked(value) {
61
+ const newCheckedState = coerceBooleanProperty(value);
62
+ if (this._checked !== newCheckedState) {
63
+ this._checked = newCheckedState;
64
+ if (newCheckedState &&
65
+ this.radioGroup &&
66
+ this.radioGroup.value !== this.value) {
67
+ this.radioGroup.selected = this;
68
+ }
69
+ if (newCheckedState) {
70
+ this._radioDispatcher.notify(this.id, this.name);
71
+ }
72
+ }
73
+ }
74
+ /** Whether the radio button is disabled. */
75
+ get disabled() {
76
+ return (this._disabled || (this.radioGroup !== null && this.radioGroup.disabled));
77
+ }
78
+ set disabled(value) {
79
+ const newValue = coerceBooleanProperty(value);
80
+ if (newValue !== this.disabled) {
81
+ this._disabled = newValue;
82
+ }
83
+ }
84
+ /** Whether the radio button is readonly. */
85
+ get readonly() {
86
+ return (this._readonly || (this.radioGroup !== null && this.radioGroup.readonly));
87
+ }
88
+ set readonly(value) {
89
+ const newValue = coerceBooleanProperty(value);
90
+ if (newValue !== this.readonly) {
91
+ this._readonly = newValue;
92
+ }
93
+ }
94
+ /** Whether the radio button is required. */
95
+ get required() {
96
+ return this._required || (this.radioGroup && this.radioGroup.required);
97
+ }
98
+ set required(value) {
99
+ this._required = coerceBooleanProperty(value);
100
+ }
101
+ constructor(radioGroup, elementRef, tabIndex, _focusMonitor, _radioDispatcher) {
102
+ super(elementRef);
103
+ this.radioGroup = radioGroup;
104
+ this.elementRef = elementRef;
105
+ this._focusMonitor = _focusMonitor;
106
+ this._radioDispatcher = _radioDispatcher;
107
+ /**
108
+ * Attached to the aria-label attribute of the host element. In most cases,
109
+ * aria-labelledby will take precedence so this may be omitted.
110
+ */
111
+ this.ariaLabel = '';
112
+ /**
113
+ * Users can specify the `aria-labelledby` attribute which will be forwarded
114
+ * to the input element
115
+ */
116
+ this.ariaLabelledby = null;
117
+ /** The 'aria-describedby' attribute is read after the element's label and field type. */
118
+ this.ariaDescribedby = '';
119
+ /** Analog to HTML 'name' attribute used to group radios for unique selection. */
120
+ this.name = '';
121
+ /** Analog to HTML 'name' attribute used to group radios for unique selection. */
122
+ this.autofocus = false;
123
+ /** A unique id for the radio input. If none is supplied, it will be auto-generated. */
124
+ this.id = '';
125
+ /** Unregister function for _radioDispatcher */
126
+ this.removeUniqueSelectionListener = () => { };
127
+ this._value = null;
128
+ this._checked = false;
129
+ this._disabled = false;
130
+ this._readonly = false;
131
+ this._required = false;
132
+ /**
133
+ * Event emitted when the checked state of this radio button changes.
134
+ * Change events are only emitted when the value changes due to user interaction with
135
+ * the radio button (the same behavior as `<input type-"radio">`).
136
+ */
137
+ this.change = new EventEmitter();
138
+ this.radioGroup = radioGroup;
139
+ if (tabIndex) {
140
+ this.tabIndex = coerceNumberProperty(tabIndex, 0);
141
+ }
142
+ }
143
+ ngDoCheck() {
144
+ this.updateTabIndex();
145
+ }
146
+ ngOnInit() {
147
+ if (this.radioGroup) {
148
+ this.checked = this.radioGroup.value === this._value;
149
+ if (this.checked) {
150
+ this.radioGroup.selected = this;
151
+ }
152
+ // Assining group name to all radio buttons
153
+ this.name = this.radioGroup.name;
154
+ }
155
+ this.removeUniqueSelectionListener = this._radioDispatcher.listen((id, name) => {
156
+ if (id !== this.id && name === this.name) {
157
+ this.checked = false;
158
+ }
159
+ });
160
+ }
161
+ ngAfterViewInit() {
162
+ this.updateTabIndex();
163
+ if (this.autofocus) {
164
+ this._inputElement.nativeElement.focus();
165
+ }
166
+ }
167
+ ngOnDestroy() {
168
+ this.removeUniqueSelectionListener();
169
+ }
170
+ /** Focuses the radio button. */
171
+ focus(options, origin) {
172
+ if (origin) {
173
+ this._focusMonitor.focusVia(this._inputElement, origin, options);
174
+ }
175
+ else {
176
+ this._inputElement.nativeElement.focus(options);
177
+ }
178
+ }
179
+ /** Gets the tabindex for the underlying input element. */
180
+ updateTabIndex() {
181
+ const group = this.radioGroup;
182
+ let value;
183
+ // Implement a roving tabindex if the button is inside a group. For most cases this isn't
184
+ // necessary, because the browser handles the tab order for inputs inside a group automatically,
185
+ // but we need an explicitly higher tabindex for the selected button in order for things like
186
+ // the focus trap to pick it up correctly.
187
+ if (!group || !group.selected || this.disabled) {
188
+ value = this.tabIndex;
189
+ }
190
+ else {
191
+ value = group.selected === this ? this.tabIndex : -1;
192
+ }
193
+ if (value !== this.previousTabIndex) {
194
+ // We have to set the tabindex directly on the DOM node, because it depends on
195
+ // the selected state which is prone to "changed after checked errors".
196
+ const input = this._inputElement?.nativeElement;
197
+ if (input) {
198
+ input.setAttribute('tabindex', value + '');
199
+ this.previousTabIndex = value;
200
+ }
201
+ }
202
+ }
203
+ emitChangeEvent() {
204
+ this.change.emit(new SapphireRadioChange(this, this.checked));
205
+ // Assigning the value again here is redundant, but we have to do it in case it was
206
+ // changed inside the `change` listener which will cause the input to be out of sync.
207
+ if (this._inputElement) {
208
+ this._inputElement.nativeElement.checked = this.checked;
209
+ }
210
+ }
211
+ /** Triggered when the radio button receives an interaction from the user. */
212
+ _onInputInteraction(event) {
213
+ // We always have to stop propagation on the change event.
214
+ // Otherwise the change event, from the input element, will bubble up and
215
+ // emit its event object to the `change` output.
216
+ event.stopPropagation();
217
+ if (!this.checked && !this.disabled && !this.readonly) {
218
+ const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;
219
+ this.checked = true;
220
+ this.emitChangeEvent();
221
+ if (this.radioGroup) {
222
+ this.radioGroup._controlValueAccessorChangeFn(this.value);
223
+ if (groupValueChanged) {
224
+ this.radioGroup._emitChangeEvent();
225
+ }
226
+ }
227
+ }
228
+ }
229
+ }
230
+ RadioBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: RadioBase, deps: [{ token: i1.RadioGroupBase, optional: true }, { token: i0.ElementRef }, { token: 'tabindex', attribute: true }, { token: i2.FocusMonitor }, { token: i3.UniqueSelectionDispatcher }], target: i0.ɵɵFactoryTarget.Directive });
231
+ RadioBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: RadioBase, inputs: { ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], name: "name", autofocus: "autofocus", id: "id", value: "value", checked: "checked", disabled: "disabled", readonly: "readonly", required: "required" }, outputs: { change: "change" }, host: { properties: { "id": "this.id" } }, viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0 });
232
+ __decorate([
233
+ AutoId()
234
+ ], RadioBase.prototype, "id", void 0);
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: RadioBase, decorators: [{
236
+ type: Directive,
237
+ args: [{}]
238
+ }], ctorParameters: function () { return [{ type: i1.RadioGroupBase, decorators: [{
239
+ type: Optional
240
+ }] }, { type: i0.ElementRef }, { type: undefined, decorators: [{
241
+ type: Attribute,
242
+ args: ['tabindex']
243
+ }] }, { type: i2.FocusMonitor }, { type: i3.UniqueSelectionDispatcher }]; }, propDecorators: { ariaLabel: [{
244
+ type: Input,
245
+ args: ['aria-label']
246
+ }], ariaLabelledby: [{
247
+ type: Input,
248
+ args: ['aria-labelledby']
249
+ }], ariaDescribedby: [{
250
+ type: Input,
251
+ args: ['aria-describedby']
252
+ }], name: [{
253
+ type: Input
254
+ }], autofocus: [{
255
+ type: Input
256
+ }], id: [{
257
+ type: Input
258
+ }, {
259
+ type: HostBinding
260
+ }], _inputElement: [{
261
+ type: ViewChild,
262
+ args: ['input']
263
+ }], value: [{
264
+ type: Input
265
+ }], checked: [{
266
+ type: Input
267
+ }], disabled: [{
268
+ type: Input
269
+ }], readonly: [{
270
+ type: Input
271
+ }], required: [{
272
+ type: Input
273
+ }], change: [{
274
+ type: Output
275
+ }] } });
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcmFkaW8vc3JjL3NoYXJlZC9yYWRpby1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFHVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRSxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7OztBQUkzRCw0Q0FBNEM7QUFDNUMsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QjtJQUNFLDRDQUE0QztJQUM1QixNQUFpQjtJQUNqQyxxQ0FBcUM7SUFDckIsS0FBVTtRQUZWLFdBQU0sR0FBTixNQUFNLENBQVc7UUFFakIsVUFBSyxHQUFMLEtBQUssQ0FBSztJQUN6QixDQUFDO0NBQ0w7QUFFRCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQ25DLGFBQWEsQ0FDWDtJQUNFLFlBQW1CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO0lBQUcsQ0FBQztDQUMvQyxDQUNGLENBQ0YsQ0FBQztBQUVGOzs7SUFHSTtBQUVKLE1BQU0sT0FBTyxTQUNYLFNBQVEsZUFBZTtJQXdCdkIsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekMsQ0FBQztJQVFELHlEQUF5RDtJQUN6RCxJQUFJLE9BQU87UUFDVCxPQUFPLEdBQUcs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cUJGLE9BQU87c0JBRFYsS0FBSztnQkF5QkYsUUFBUTtzQkFEWCxLQUFLO2dCQWlCRixRQUFRO3NCQURYLEtBQUs7Z0JBaUJGLFFBQVE7c0JBRFgsS0FBSztnQkFlYSxNQUFNO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQXR0cmlidXRlLFxuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5LFxuICBjb2VyY2VOdW1iZXJQcm9wZXJ0eSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IENhbkRpc2FibGUsIG1peGluRGlzYWJsZWQgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGlzYWJsZWQnO1xuaW1wb3J0IHsgSGFzVGFiSW5kZXgsIG1peGluVGFiSW5kZXggfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdGFiaW5kZXgnO1xuaW1wb3J0IHsgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEF1dG9JZCB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9hdXRvLWlkLmRlY29yYXRvcic7XG5pbXBvcnQgeyBVbmlxdWVTZWxlY3Rpb25EaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFJhZGlvR3JvdXBCYXNlIH0gZnJvbSAnLi9yYWRpby1ncm91cC1iYXNlJztcblxuLyoqIENoYW5nZSBldmVudCBvYmplY3QgZW1pdHRlZCBieSByYWRpby4gKi9cbmV4cG9ydCBjbGFzcyBTYXBwaGlyZVJhZGlvQ2hhbmdlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgLyoqIFRoZSBuZXcgYGNoZWNrZWRgIHZhbHVlIG9mIHRoZSByYWRpby4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc291cmNlOiBSYWRpb0Jhc2UsXG4gICAgLyoqIFRoZSBzb3VyY2UgcmFkaW8gb2YgdGhlIGV2ZW50LiAqL1xuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogYW55XG4gICkge31cbn1cblxuY29uc3QgX1JhZGlvTWl4aW5CYXNlID0gbWl4aW5UYWJJbmRleChcbiAgbWl4aW5EaXNhYmxlZChcbiAgICBjbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvcihwdWJsaWMgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG4gICAgfVxuICApXG4pO1xuXG4vKipcbiAqIEBEaXJlY3RpdmUgZGVjb3JhdG9yIGlzIGp1c3QgdG8gYmUgYWJsZSB0byBoYXZlIGEgY29uc3RydWN0b3Igd2l0aCBESS5cbiAqIFRoaXMgY2xhc3MgaXMgYmVpbmcgZXh0ZW5kZWQgYnkgb3RoZXIgY29tcG9uZW50cy5cbiAqKi9cbkBEaXJlY3RpdmUoe30pXG5leHBvcnQgY2xhc3MgUmFkaW9CYXNlXG4gIGV4dGVuZHMgX1JhZGlvTWl4aW5CYXNlXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkRlc3Ryb3ksIENhbkRpc2FibGUsIEhhc1RhYkluZGV4XG57XG4gIC8qKlxuICAgKiBBdHRhY2hlZCB0byB0aGUgYXJpYS1sYWJlbCBhdHRyaWJ1dGUgb2YgdGhlIGhvc3QgZWxlbWVudC4gSW4gbW9zdCBjYXNlcyxcbiAgICogYXJpYS1sYWJlbGxlZGJ5IHdpbGwgdGFrZSBwcmVjZWRlbmNlIHNvIHRoaXMgbWF5IGJlIG9taXR0ZWQuXG4gICAqL1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBVc2VycyBjYW4gc3BlY2lmeSB0aGUgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlIHdoaWNoIHdpbGwgYmUgZm9yd2FyZGVkXG4gICAqIHRvIHRoZSBpbnB1dCBlbGVtZW50XG4gICAqL1xuICBASW5wdXQoJ2FyaWEtbGFiZWxsZWRieScpIGFyaWFMYWJlbGxlZGJ5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiogVGhlICdhcmlhLWRlc2NyaWJlZGJ5JyBhdHRyaWJ1dGUgaXMgcmVhZCBhZnRlciB0aGUgZWxlbWVudCdzIGxhYmVsIGFuZCBmaWVsZCB0eXBlLiAqL1xuICBASW5wdXQoJ2FyaWEtZGVzY3JpYmVkYnknKSBhcmlhRGVzY3JpYmVkYnk6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBBbmFsb2cgdG8gSFRNTCAnbmFtZScgYXR0cmlidXRlIHVzZWQgdG8gZ3JvdXAgcmFkaW9zIGZvciB1bmlxdWUgc2VsZWN0aW9uLiAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSAnJztcblxuICAvKiogQW5hbG9nIHRvIEhUTUwgJ25hbWUnIGF0dHJpYnV0ZSB1c2VkIHRvIGdyb3VwIHJhZGlvcyBmb3IgdW5pcXVlIHNlbGVjdGlvbi4gKi9cbiAgQElucHV0KCkgYXV0b2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgX2dldEFyaWFDaGVja2VkKCk6ICd0cnVlJyB8ICdmYWxzZScge1xuICAgIHJldHVybiB0aGlzLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9XG5cbiAgLyoqIEEgdW5pcXVlIGlkIGZvciB0aGUgcmFkaW8gaW5wdXQuIElmIG5vbmUgaXMgc3VwcGxpZWQsIGl0IHdpbGwgYmUgYXV0by1nZW5lcmF0ZWQuICovXG4gIEBJbnB1dCgpXG4gIEBIb3N0QmluZGluZygpXG4gIEBBdXRvSWQoKVxuICBpZCA9ICcnO1xuXG4gIC8qKiBSZXR1cm5zIHRoZSB1bmlxdWUgaWQgZm9yIHRoZSB2aXN1YWwgaGlkZGVuIGlucHV0LiAqL1xuICBnZXQgaW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmlkfS1pbnB1dGA7XG4gIH1cblxuICAvKiogUHJldmlvdXMgdmFsdWUgb2YgdGhlIGlucHV0J3MgdGFiaW5kZXguICovXG4gIHByaXZhdGUgcHJldmlvdXNUYWJJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBVbnJlZ2lzdGVyIGZ1bmN0aW9uIGZvciBfcmFkaW9EaXNwYXRjaGVyICovXG4gIHByaXZhdGUgcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXI6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAvKiogVGhlIG5hdGl2ZSBgPGlucHV0IHR5cGU9XCJyYWRpb1wiPmAgZWxlbWVudCAqL1xuICBAVmlld0NoaWxkKCdpbnB1dCcpIF9pbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhpcyByYWRpbyBidXR0b24uICovXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy5yYWRpb0dyb3VwICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5yYWRpb0dyb3VwLnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5yYWRpb0dyb3VwLnNlbGVjdGVkID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF92YWx1ZTogYW55ID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGlzIHJhZGlvIGJ1dHRvbiBpcyBjaGVja2VkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgfVxuICBzZXQgY2hlY2tlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgY29uc3QgbmV3Q2hlY2tlZFN0YXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodGhpcy5fY2hlY2tlZCAhPT0gbmV3Q2hlY2tlZFN0YXRlKSB7XG4gICAgICB0aGlzLl9jaGVja2VkID0gbmV3Q2hlY2tlZFN0YXRlO1xuICAgICAgaWYgKFxuICAgICAgICBuZXdDaGVja2VkU3RhdGUgJiZcbiAgICAgICAgdGhpcy5yYWRpb0dyb3VwICYmXG4gICAgICAgIHRoaXMucmFkaW9Hcm91cC52YWx1ZSAhPT0gdGhpcy52YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucmFkaW9Hcm91cC5zZWxlY3RlZCA9IHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdDaGVja2VkU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fcmFkaW9EaXNwYXRjaGVyLm5vdGlmeSh0aGlzLmlkLCB0aGlzLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9jaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHJhZGlvIGJ1dHRvbiBpcyBkaXNhYmxlZC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9kaXNhYmxlZCB8fCAodGhpcy5yYWRpb0dyb3VwICE9PSBudWxsICYmIHRoaXMucmFkaW9Hcm91cC5kaXNhYmxlZClcbiAgICApO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSByYWRpbyBidXR0b24gaXMgcmVhZG9ubHkuICovXG4gIEBJbnB1dCgpXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fcmVhZG9ubHkgfHwgKHRoaXMucmFkaW9Hcm91cCAhPT0gbnVsbCAmJiB0aGlzLnJhZGlvR3JvdXAucmVhZG9ubHkpXG4gICAgKTtcbiAgfVxuICBzZXQgcmVhZG9ubHkodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5fcmVhZG9ubHkgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgcmFkaW8gYnV0dG9uIGlzIHJlcXVpcmVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkIHx8ICh0aGlzLnJhZGlvR3JvdXAgJiYgdGhpcy5yYWRpb0dyb3VwLnJlcXVpcmVkKTtcbiAgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY2hlY2tlZCBzdGF0ZSBvZiB0aGlzIHJhZGlvIGJ1dHRvbiBjaGFuZ2VzLlxuICAgKiBDaGFuZ2UgZXZlbnRzIGFyZSBvbmx5IGVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcyBkdWUgdG8gdXNlciBpbnRlcmFjdGlvbiB3aXRoXG4gICAqIHRoZSByYWRpbyBidXR0b24gKHRoZSBzYW1lIGJlaGF2aW9yIGFzIGA8aW5wdXQgdHlwZS1cInJhZGlvXCI+YCkuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8U2FwcGhpcmVSYWRpb0NoYW5nZT4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8U2FwcGhpcmVSYWRpb0NoYW5nZT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcmVhZG9ubHkgcmFkaW9Hcm91cDogUmFkaW9Hcm91cEJhc2UsXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4sXG4gICAgQEF0dHJpYnV0ZSgndGFiaW5kZXgnKSB0YWJJbmRleDogc3RyaW5nLFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgX3JhZGlvRGlzcGF0Y2hlcjogVW5pcXVlU2VsZWN0aW9uRGlzcGF0Y2hlclxuICApIHtcbiAgICBzdXBlcihlbGVtZW50UmVmKTtcbiAgICB0aGlzLnJhZGlvR3JvdXAgPSByYWRpb0dyb3VwO1xuXG4gICAgaWYgKHRhYkluZGV4KSB7XG4gICAgICB0aGlzLnRhYkluZGV4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodGFiSW5kZXgsIDApO1xuICAgIH1cbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5yYWRpb0dyb3VwKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSB0aGlzLnJhZGlvR3JvdXAudmFsdWUgPT09IHRoaXMuX3ZhbHVlO1xuICAgICAgaWYgKHRoaXMuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0ZWQgPSB0aGlzO1xuICAgICAgfVxuICAgICAgLy8gQXNzaW5pbmcgZ3JvdXAgbmFtZSB0byBhbGwgcmFkaW8gYnV0dG9uc1xuICAgICAgdGhpcy5uYW1lID0gdGhpcy5yYWRpb0dyb3VwLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lciA9IHRoaXMuX3JhZGlvRGlzcGF0Y2hlci5saXN0ZW4oXG4gICAgICAoaWQsIG5hbWUpID0+IHtcbiAgICAgICAgaWYgKGlkICE9PSB0aGlzLmlkICYmIG5hbWUgPT09IHRoaXMubmFtZSkge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8qKiBGb2N1c2VzIHRoZSByYWRpbyBidXR0b24uICovXG4gIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMsIG9yaWdpbj86IEZvY3VzT3JpZ2luKTogdm9pZCB7XG4gICAgaWYgKG9yaWdpbikge1xuICAgICAgdGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCwgb3JpZ2luLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldHMgdGhlIHRhYmluZGV4IGZvciB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiAqL1xuICBwcml2YXRlIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5yYWRpb0dyb3VwO1xuICAgIGxldCB2YWx1ZTogbnVtYmVyO1xuXG4gICAgLy8gSW1wbGVtZW50IGEgcm92aW5nIHRhYmluZGV4IGlmIHRoZSBidXR0b24gaXMgaW5zaWRlIGEgZ3JvdXAuIEZvciBtb3N0IGNhc2VzIHRoaXMgaXNuJ3RcbiAgICAvLyBuZWNlc3NhcnksIGJlY2F1c2UgdGhlIGJyb3dzZXIgaGFuZGxlcyB0aGUgdGFiIG9yZGVyIGZvciBpbnB1dHMgaW5zaWRlIGEgZ3JvdXAgYXV0b21hdGljYWxseSxcbiAgICAvLyBidXQgd2UgbmVlZCBhbiBleHBsaWNpdGx5IGhpZ2hlciB0YWJpbmRleCBmb3IgdGhlIHNlbGVjdGVkIGJ1dHRvbiBpbiBvcmRlciBmb3IgdGhpbmdzIGxpa2VcbiAgICAvLyB0aGUgZm9jdXMgdHJhcCB0byBwaWNrIGl0IHVwIGNvcnJlY3RseS5cbiAgICBpZiAoIWdyb3VwIHx8ICFncm91cC5zZWxlY3RlZCB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMudGFiSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ3JvdXAuc2VsZWN0ZWQgPT09IHRoaXMgPyB0aGlzLnRhYkluZGV4IDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnByZXZpb3VzVGFiSW5kZXgpIHtcbiAgICAgIC8vIFdlIGhhdmUgdG8gc2V0IHRoZSB0YWJpbmRleCBkaXJlY3RseSBvbiB0aGUgRE9NIG5vZGUsIGJlY2F1c2UgaXQgZGVwZW5kcyBvblxuICAgICAgLy8gdGhlIHNlbGVjdGVkIHN0YXRlIHdoaWNoIGlzIHByb25lIHRvIFwiY2hhbmdlZCBhZnRlciBjaGVja2VkIGVycm9yc1wiLlxuICAgICAgY29uc3QgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQgPVxuICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgdmFsdWUgKyAnJyk7XG4gICAgICAgIHRoaXMucHJldmlvdXNUYWJJbmRleCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZUV2ZW50KCkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQobmV3IFNhcHBoaXJlUmFkaW9DaGFuZ2UodGhpcywgdGhpcy5jaGVja2VkKSk7XG5cbiAgICAvLyBBc3NpZ25pbmcgdGhlIHZhbHVlIGFnYWluIGhlcmUgaXMgcmVkdW5kYW50LCBidXQgd2UgaGF2ZSB0byBkbyBpdCBpbiBjYXNlIGl0IHdhc1xuICAgIC8vIGNoYW5nZWQgaW5zaWRlIHRoZSBgY2hhbmdlYCBsaXN0ZW5lciB3aGljaCB3aWxsIGNhdXNlIHRoZSBpbnB1dCB0byBiZSBvdXQgb2Ygc3luYy5cbiAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgcmFkaW8gYnV0dG9uIHJlY2VpdmVzIGFuIGludGVyYWN0aW9uIGZyb20gdGhlIHVzZXIuICovXG4gIF9vbklucHV0SW50ZXJhY3Rpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gV2UgYWx3YXlzIGhhdmUgdG8gc3RvcCBwcm9wYWdhdGlvbiBvbiB0aGUgY2hhbmdlIGV2ZW50LlxuICAgIC8vIE90aGVyd2lzZSB0aGUgY2hhbmdlIGV2ZW50LCBmcm9tIHRoZSBpbnB1dCBlbGVtZW50LCB3aWxsIGJ1YmJsZSB1cCBhbmRcbiAgICAvLyBlbWl0IGl0cyBldmVudCBvYmplY3QgdG8gdGhlIGBjaGFuZ2VgIG91dHB1dC5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuY2hlY2tlZCAmJiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSkge1xuICAgICAgY29uc3QgZ3JvdXBWYWx1ZUNoYW5nZWQgPVxuICAgICAgICB0aGlzLnJhZGlvR3JvdXAgJiYgdGhpcy52YWx1ZSAhPT0gdGhpcy5yYWRpb0dyb3VwLnZhbHVlO1xuICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZUV2ZW50KCk7XG4gICAgICBpZiAodGhpcy5yYWRpb0dyb3VwKSB7XG4gICAgICAgIHRoaXMucmFkaW9Hcm91cC5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKGdyb3VwVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5yYWRpb0dyb3VwLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19