@radix-ng/primitives 0.18.1 → 0.19.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 (73) hide show
  1. package/avatar/index.d.ts +1 -2
  2. package/avatar/src/avatar-fallback.directive.d.ts +11 -23
  3. package/avatar/src/avatar-image.directive.d.ts +10 -14
  4. package/avatar/src/avatar-root.directive.d.ts +5 -15
  5. package/checkbox/index.d.ts +11 -0
  6. package/checkbox/src/checkbox-button.directive.d.ts +1 -1
  7. package/checkbox/src/checkbox-indicator.directive.d.ts +1 -1
  8. package/checkbox/src/checkbox-input.directive.d.ts +1 -1
  9. package/checkbox/src/checkbox.directive.d.ts +1 -1
  10. package/compodoc/documentation.json +4895 -2139
  11. package/core/index.d.ts +2 -0
  12. package/core/src/control-value-accessor/index.d.ts +75 -0
  13. package/core/src/create-inject-context/assert-injector.d.ts +51 -0
  14. package/core/src/create-inject-context/index.d.ts +68 -0
  15. package/core/src/types.d.ts +23 -0
  16. package/esm2022/avatar/index.mjs +1 -1
  17. package/esm2022/avatar/src/avatar-fallback.directive.mjs +38 -40
  18. package/esm2022/avatar/src/avatar-image.directive.mjs +25 -26
  19. package/esm2022/avatar/src/avatar-root.directive.mjs +13 -25
  20. package/esm2022/checkbox/index.mjs +31 -1
  21. package/esm2022/checkbox/src/checkbox-button.directive.mjs +3 -3
  22. package/esm2022/checkbox/src/checkbox-indicator.directive.mjs +3 -3
  23. package/esm2022/checkbox/src/checkbox-input.directive.mjs +3 -3
  24. package/esm2022/checkbox/src/checkbox.directive.mjs +3 -3
  25. package/esm2022/core/index.mjs +3 -1
  26. package/esm2022/core/src/control-value-accessor/index.mjs +103 -0
  27. package/esm2022/core/src/create-inject-context/assert-injector.mjs +15 -0
  28. package/esm2022/core/src/create-inject-context/index.mjs +116 -0
  29. package/esm2022/core/src/types.mjs +2 -0
  30. package/esm2022/radio/index.mjs +2 -1
  31. package/esm2022/radio/src/radio-item-input.directive.mjs +37 -0
  32. package/esm2022/radio/src/radio-item.directive.mjs +55 -36
  33. package/esm2022/radio/src/radio-root.directive.mjs +24 -110
  34. package/esm2022/radio/src/radio-tokens.mjs +1 -1
  35. package/esm2022/roving-focus/index.mjs +3 -0
  36. package/esm2022/roving-focus/radix-ng-primitives-roving-focus.mjs +5 -0
  37. package/esm2022/roving-focus/src/roving-focus-group.directive.mjs +138 -0
  38. package/esm2022/roving-focus/src/roving-focus-item.directive.mjs +133 -0
  39. package/esm2022/roving-focus/src/utils.mjs +47 -0
  40. package/esm2022/select/src/select-item.directive.mjs +8 -2
  41. package/esm2022/slider/src/slider-orientation-context.service.mjs +3 -4
  42. package/esm2022/slider/src/slider-root.component.mjs +5 -2
  43. package/esm2022/toggle/src/toggle-input.directive.mjs +4 -3
  44. package/fesm2022/radix-ng-primitives-avatar.mjs +70 -85
  45. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-checkbox.mjs +35 -10
  47. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-core.mjs +230 -3
  49. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  50. package/fesm2022/radix-ng-primitives-radio.mjs +142 -176
  51. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-roving-focus.mjs +320 -0
  53. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -0
  54. package/fesm2022/radix-ng-primitives-select.mjs +7 -1
  55. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-slider.mjs +6 -4
  57. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-toggle.mjs +3 -2
  59. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  60. package/package.json +7 -1
  61. package/radio/index.d.ts +1 -0
  62. package/radio/src/radio-item-input.directive.d.ts +12 -0
  63. package/radio/src/radio-item.directive.d.ts +23 -14
  64. package/radio/src/radio-root.directive.d.ts +15 -31
  65. package/radio/src/radio-tokens.d.ts +3 -3
  66. package/roving-focus/README.md +3 -0
  67. package/roving-focus/index.d.ts +3 -0
  68. package/roving-focus/src/roving-focus-group.directive.d.ts +50 -0
  69. package/roving-focus/src/roving-focus-item.directive.d.ts +50 -0
  70. package/roving-focus/src/utils.d.ts +19 -0
  71. package/select/src/select-item.directive.d.ts +7 -1
  72. package/slider/src/slider-root.component.d.ts +2 -0
  73. package/toggle/src/toggle-input.directive.d.ts +1 -1
@@ -1,43 +1,67 @@
1
- import { booleanAttribute, Directive, ElementRef, inject, InjectionToken, Input } from '@angular/core';
1
+ import { booleanAttribute, Directive, ElementRef, inject, InjectionToken, input, signal } from '@angular/core';
2
+ import { RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';
2
3
  import { RDX_RADIO_GROUP } from './radio-tokens';
3
4
  import * as i0 from "@angular/core";
5
+ import * as i1 from "@radix-ng/primitives/roving-focus";
4
6
  export const RdxRadioItemToken = new InjectionToken('RadioItemToken');
5
7
  export function injectRadioItem() {
6
8
  return inject(RdxRadioItemToken);
7
9
  }
8
- // Increasing integer for generating unique ids for radio components.
9
- let nextUniqueId = 0;
10
10
  export class RdxRadioItemDirective {
11
11
  constructor() {
12
12
  this.radioGroup = inject(RDX_RADIO_GROUP);
13
- this.element = inject(ElementRef);
14
- this.id = `rdx-radio-${++nextUniqueId}`;
15
- this.disabled = false;
13
+ this.elementRef = inject(ElementRef);
14
+ this.value = input.required();
15
+ this.id = input();
16
+ this.required = input();
17
+ this.disabled = input(false, { transform: booleanAttribute });
18
+ this.ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];
19
+ this.isArrowKeyPressedSignal = signal(false);
16
20
  }
17
- get tabIndex() {
18
- return this.disabled ? -1 : this.radioGroup.value === this.value ? 0 : -1;
21
+ /** @ignore */
22
+ ngOnInit() {
23
+ if (this.radioGroup.defaultValue === this.value()) {
24
+ this.radioGroup.select(this.value());
25
+ }
19
26
  }
27
+ /** @ignore */
20
28
  get checked() {
21
- return this.radioGroup.value === this.value;
29
+ if (this.radioGroup.value == undefined)
30
+ return false;
31
+ return this.radioGroup.value() === this.value();
22
32
  }
23
- ngOnInit() {
24
- if (this.radioGroup.defaultValue === this.value) {
25
- this.radioGroup.select(this.value);
33
+ /** @ignore */
34
+ onClick() {
35
+ if (!this.disabled()) {
36
+ this.radioGroup.select(this.value());
37
+ this.isArrowKeyPressedSignal.set(true);
26
38
  }
27
39
  }
28
- focus() {
29
- this.element.nativeElement.focus();
30
- }
31
- _onClick() {
32
- if (!this.disabled) {
33
- this.radioGroup.select(this.value);
40
+ /** @ignore */
41
+ onKeyDown(event) {
42
+ if (this.ARROW_KEYS.includes(event.key)) {
43
+ this.isArrowKeyPressedSignal.set(true);
34
44
  }
35
45
  }
36
- _onBlur() {
37
- this.radioGroup.onTouched?.();
46
+ /** @ignore */
47
+ onKeyUp() {
48
+ this.isArrowKeyPressedSignal.set(false);
49
+ }
50
+ /** @ignore */
51
+ onFocus() {
52
+ this.radioGroup.select(this.value());
53
+ setTimeout(() => {
54
+ /**
55
+ * When navigating with arrow keys, focus triggers on the radio item.
56
+ * To "check" the radio, we programmatically trigger a click event.
57
+ */
58
+ if (this.isArrowKeyPressedSignal()) {
59
+ this.elementRef.nativeElement.click();
60
+ }
61
+ }, 0);
38
62
  }
39
63
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRadioItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
40
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.11", type: RdxRadioItemDirective, isStandalone: true, selector: "[rdxRadioItem]", inputs: { id: "id", value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, host: { attributes: { "type": "button", "role": "radio" }, listeners: { "click": "_onClick()", "blur": "_onBlur()" }, properties: { "attr.id": "id", "attr.aria-checked": "checked", "attr.data-disabled": "disabled ? \"\" : null", "attr.data-state": "checked ? \"checked\" : \"unchecked\"", "attr.tabindex": "tabIndex" } }, providers: [{ provide: RdxRadioItemToken, useExisting: RdxRadioItemDirective }], exportAs: ["rdxRadioItem"], ngImport: i0 }); }
64
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxRadioItemDirective, isStandalone: true, selector: "[rdxRadioItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "role": "radio" }, listeners: { "click": "onClick()", "keydown": "onKeyDown($event)", "keyup": "onKeyUp()", "focus": "onFocus()" }, properties: { "attr.aria-checked": "checked", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-state": "checked ? \"checked\" : \"unchecked\"" } }, providers: [{ provide: RdxRadioItemToken, useExisting: RdxRadioItemDirective }], exportAs: ["rdxRadioItem"], hostDirectives: [{ directive: i1.RdxRovingFocusItemDirective, inputs: ["tabStopId", "id", "focusable", "focusable", "active", "active", "allowShiftKey", "allowShiftKey"] }], ngImport: i0 }); }
41
65
  }
42
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRadioItemDirective, decorators: [{
43
67
  type: Directive,
@@ -46,25 +70,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
46
70
  exportAs: 'rdxRadioItem',
47
71
  standalone: true,
48
72
  providers: [{ provide: RdxRadioItemToken, useExisting: RdxRadioItemDirective }],
73
+ hostDirectives: [
74
+ { directive: RdxRovingFocusItemDirective, inputs: ['tabStopId: id', 'focusable', 'active', 'allowShiftKey'] }
75
+ ],
49
76
  host: {
50
77
  type: 'button',
51
78
  role: 'radio',
52
- '[attr.id]': 'id',
53
79
  '[attr.aria-checked]': 'checked',
54
- '[attr.data-disabled]': 'disabled ? "" : null',
80
+ '[attr.data-disabled]': 'disabled() ? "" : null',
55
81
  '[attr.data-state]': 'checked ? "checked" : "unchecked"',
56
- '[attr.tabindex]': 'tabIndex',
57
- '(click)': '_onClick()',
58
- '(blur)': '_onBlur()'
82
+ '(click)': 'onClick()',
83
+ '(keydown)': 'onKeyDown($event)',
84
+ '(keyup)': 'onKeyUp()',
85
+ '(focus)': 'onFocus()'
59
86
  }
60
87
  }]
61
- }], propDecorators: { id: [{
62
- type: Input
63
- }], value: [{
64
- type: Input,
65
- args: [{ required: true }]
66
- }], disabled: [{
67
- type: Input,
68
- args: [{ transform: booleanAttribute }]
69
- }] } });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8taXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL3NyYy9yYWRpby1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWpELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUF3QixnQkFBZ0IsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sVUFBVSxlQUFlO0lBQzNCLE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHFFQUFxRTtBQUNyRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFtQnJCLE1BQU0sT0FBTyxxQkFBcUI7SUFqQmxDO1FBa0JxQixlQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdDLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFN0IsT0FBRSxHQUFHLGFBQWEsRUFBRSxZQUFZLEVBQUUsQ0FBQztRQUlKLGFBQVEsR0FBRyxLQUFLLENBQUM7S0E2QjVEO0lBM0JHLElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztJQUNsQyxDQUFDOytHQXBDUSxxQkFBcUI7bUdBQXJCLHFCQUFxQix5SEFRVixnQkFBZ0Isa1ZBckJ6QixDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDOzs0RkFhdEUscUJBQXFCO2tCQWpCakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsdUJBQXVCLEVBQUUsQ0FBQztvQkFDL0UsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxPQUFPO3dCQUNiLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixxQkFBcUIsRUFBRSxTQUFTO3dCQUNoQyxzQkFBc0IsRUFBRSxzQkFBc0I7d0JBQzlDLG1CQUFtQixFQUFFLG1DQUFtQzt3QkFDeEQsaUJBQWlCLEVBQUUsVUFBVTt3QkFDN0IsU0FBUyxFQUFFLFlBQVk7d0JBQ3ZCLFFBQVEsRUFBRSxXQUFXO3FCQUN4QjtpQkFDSjs4QkFLWSxFQUFFO3NCQUFWLEtBQUs7Z0JBRXFCLEtBQUs7c0JBQS9CLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVlLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c2FibGVPcHRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJEWF9SQURJT19HUk9VUCB9IGZyb20gJy4vcmFkaW8tdG9rZW5zJztcblxuZXhwb3J0IGNvbnN0IFJkeFJhZGlvSXRlbVRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFJkeFJhZGlvSXRlbURpcmVjdGl2ZT4oJ1JhZGlvSXRlbVRva2VuJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RSYWRpb0l0ZW0oKTogUmR4UmFkaW9JdGVtRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gaW5qZWN0KFJkeFJhZGlvSXRlbVRva2VuKTtcbn1cblxuLy8gSW5jcmVhc2luZyBpbnRlZ2VyIGZvciBnZW5lcmF0aW5nIHVuaXF1ZSBpZHMgZm9yIHJhZGlvIGNvbXBvbmVudHMuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UmFkaW9JdGVtXScsXG4gICAgZXhwb3J0QXM6ICdyZHhSYWRpb0l0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBSZHhSYWRpb0l0ZW1Ub2tlbiwgdXNlRXhpc3Rpbmc6IFJkeFJhZGlvSXRlbURpcmVjdGl2ZSB9XSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICByb2xlOiAncmFkaW8nLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtY2hlY2tlZF0nOiAnY2hlY2tlZCcsXG4gICAgICAgICdbYXR0ci5kYXRhLWRpc2FibGVkXSc6ICdkaXNhYmxlZCA/IFwiXCIgOiBudWxsJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtc3RhdGVdJzogJ2NoZWNrZWQgPyBcImNoZWNrZWRcIiA6IFwidW5jaGVja2VkXCInLFxuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJ3RhYkluZGV4JyxcbiAgICAgICAgJyhjbGljayknOiAnX29uQ2xpY2soKScsXG4gICAgICAgICcoYmx1ciknOiAnX29uQmx1cigpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4UmFkaW9JdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgRm9jdXNhYmxlT3B0aW9uLCBPbkluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmFkaW9Hcm91cCA9IGluamVjdChSRFhfUkFESU9fR1JPVVApO1xuICAgIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICBASW5wdXQoKSBpZCA9IGByZHgtcmFkaW8tJHsrK25leHRVbmlxdWVJZH1gO1xuXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdmFsdWUhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IC0xIDogdGhpcy5yYWRpb0dyb3VwLnZhbHVlID09PSB0aGlzLnZhbHVlID8gMCA6IC0xO1xuICAgIH1cblxuICAgIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWRpb0dyb3VwLnZhbHVlID09PSB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0dyb3VwLmRlZmF1bHRWYWx1ZSA9PT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0dyb3VwLnNlbGVjdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIF9vbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9Hcm91cC5zZWxlY3QodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJhZGlvR3JvdXAub25Ub3VjaGVkPy4oKTtcbiAgICB9XG59XG4iXX0=
88
+ }] });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8taXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL3NyYy9yYWRpby1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQXdCLGdCQUFnQixDQUFDLENBQUM7QUFFN0YsTUFBTSxVQUFVLGVBQWU7SUFDM0IsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBc0JELE1BQU0sT0FBTyxxQkFBcUI7SUFwQmxDO1FBcUJxQixlQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEMsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUVqQyxPQUFFLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFFckIsYUFBUSxHQUFHLEtBQUssRUFBVyxDQUFDO1FBRTVCLGFBQVEsR0FBRyxLQUFLLENBQXdCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFeEUsZUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBaUQ1RDtJQS9DRyxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxPQUFPO1FBQ1AsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsY0FBYztJQUNkLE9BQU87UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxTQUFTLENBQUMsS0FBb0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLE9BQU87UUFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxjQUFjO0lBQ2QsT0FBTztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWjs7O2VBR0c7WUFDSCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFDLENBQUM7UUFDTCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDOytHQTdEUSxxQkFBcUI7bUdBQXJCLHFCQUFxQiw2M0JBaEJuQixDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDOzs0RkFnQnRFLHFCQUFxQjtrQkFwQmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHVCQUF1QixFQUFFLENBQUM7b0JBQy9FLGNBQWMsRUFBRTt3QkFDWixFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsRUFBRTtxQkFBQztvQkFFbEgsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxPQUFPO3dCQUNiLHFCQUFxQixFQUFFLFNBQVM7d0JBQ2hDLHNCQUFzQixFQUFFLHdCQUF3Qjt3QkFDaEQsbUJBQW1CLEVBQUUsbUNBQW1DO3dCQUN4RCxTQUFTLEVBQUUsV0FBVzt3QkFDdEIsV0FBVyxFQUFFLG1CQUFtQjt3QkFDaEMsU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLFNBQVMsRUFBRSxXQUFXO3FCQUN6QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIGlucHV0LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzJztcbmltcG9ydCB7IFJEWF9SQURJT19HUk9VUCB9IGZyb20gJy4vcmFkaW8tdG9rZW5zJztcblxuZXhwb3J0IGNvbnN0IFJkeFJhZGlvSXRlbVRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFJkeFJhZGlvSXRlbURpcmVjdGl2ZT4oJ1JhZGlvSXRlbVRva2VuJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RSYWRpb0l0ZW0oKTogUmR4UmFkaW9JdGVtRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gaW5qZWN0KFJkeFJhZGlvSXRlbVRva2VuKTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UmFkaW9JdGVtXScsXG4gICAgZXhwb3J0QXM6ICdyZHhSYWRpb0l0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBSZHhSYWRpb0l0ZW1Ub2tlbiwgdXNlRXhpc3Rpbmc6IFJkeFJhZGlvSXRlbURpcmVjdGl2ZSB9XSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7IGRpcmVjdGl2ZTogUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlLCBpbnB1dHM6IFsndGFiU3RvcElkOiBpZCcsICdmb2N1c2FibGUnLCAnYWN0aXZlJywgJ2FsbG93U2hpZnRLZXknXSB9XSxcblxuICAgIGhvc3Q6IHtcbiAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIHJvbGU6ICdyYWRpbycsXG4gICAgICAgICdbYXR0ci5hcmlhLWNoZWNrZWRdJzogJ2NoZWNrZWQnLFxuICAgICAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQoKSA/IFwiXCIgOiBudWxsJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtc3RhdGVdJzogJ2NoZWNrZWQgPyBcImNoZWNrZWRcIiA6IFwidW5jaGVja2VkXCInLFxuICAgICAgICAnKGNsaWNrKSc6ICdvbkNsaWNrKCknLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5RG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhrZXl1cCknOiAnb25LZXlVcCgpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4UmFkaW9JdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhZGlvR3JvdXAgPSBpbmplY3QoUkRYX1JBRElPX0dST1VQKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICByZWFkb25seSB2YWx1ZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuICAgIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgcmVhZG9ubHkgcmVxdWlyZWQgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gICAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgQVJST1dfS0VZUyA9IFsnQXJyb3dVcCcsICdBcnJvd0Rvd24nLCAnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzQXJyb3dLZXlQcmVzc2VkU2lnbmFsID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvR3JvdXAuZGVmYXVsdFZhbHVlID09PSB0aGlzLnZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9Hcm91cC5zZWxlY3QodGhpcy52YWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvR3JvdXAudmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmFkaW9Hcm91cC52YWx1ZSgpID09PSB0aGlzLnZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBvbkNsaWNrKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0dyb3VwLnNlbGVjdCh0aGlzLnZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5pc0Fycm93S2V5UHJlc3NlZFNpZ25hbC5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5BUlJPV19LRVlTLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNBcnJvd0tleVByZXNzZWRTaWduYWwuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBvbktleVVwKCkge1xuICAgICAgICB0aGlzLmlzQXJyb3dLZXlQcmVzc2VkU2lnbmFsLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBvbkZvY3VzKCkge1xuICAgICAgICB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0KHRoaXMudmFsdWUoKSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGVuIG5hdmlnYXRpbmcgd2l0aCBhcnJvdyBrZXlzLCBmb2N1cyB0cmlnZ2VycyBvbiB0aGUgcmFkaW8gaXRlbS5cbiAgICAgICAgICAgICAqIFRvIFwiY2hlY2tcIiB0aGUgcmFkaW8sIHdlIHByb2dyYW1tYXRpY2FsbHkgdHJpZ2dlciBhIGNsaWNrIGV2ZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fycm93S2V5UHJlc3NlZFNpZ25hbCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxufVxuIl19
@@ -1,23 +1,13 @@
1
- import { FocusKeyManager } from '@angular/cdk/a11y';
2
- import { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';
3
- import { booleanAttribute, ContentChildren, Directive, EventEmitter, Input, Output, QueryList } from '@angular/core';
1
+ import { booleanAttribute, Directive, EventEmitter, Input, model, Output } from '@angular/core';
4
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { Subject, takeUntil } from 'rxjs';
6
- import { RdxRadioItemDirective } from './radio-item.directive';
3
+ import { RdxRovingFocusGroupDirective } from '@radix-ng/primitives/roving-focus';
7
4
  import { RDX_RADIO_GROUP } from './radio-tokens';
8
5
  import * as i0 from "@angular/core";
6
+ import * as i1 from "@radix-ng/primitives/roving-focus";
9
7
  export class RdxRadioGroupDirective {
10
8
  constructor() {
11
- this.destroy$ = new Subject();
9
+ this.value = model();
12
10
  this.disabled = false;
13
- /**
14
- * The orientation of the radio group only vertical.
15
- * Horizontal radio buttons can sometimes be challenging to scan and localize.
16
- * The horizontal arrangement of radio buttons may also lead to difficulties in determining which
17
- * label corresponds to which button: whether the label is above or below the button.
18
- * @default 'vertical'
19
- */
20
- this._orientation = 'vertical';
21
11
  /**
22
12
  * Event handler called when the value changes.
23
13
  */
@@ -30,131 +20,60 @@ export class RdxRadioGroupDirective {
30
20
  };
31
21
  /**
32
22
  * The callback function to call when the radio group is touched.
23
+ * @ignore
33
24
  */
34
25
  this.onTouched = () => {
35
26
  /* Empty */
36
27
  };
37
28
  }
38
- ngAfterContentInit() {
39
- this.focusKeyManager = new FocusKeyManager(this.radioItems).withWrap().withVerticalOrientation();
40
- this.radioItems.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {
41
- this.updateActiveItem();
42
- });
43
- this.updateActiveItem(false);
44
- }
45
- ngOnDestroy() {
46
- this.destroy$.next();
47
- this.destroy$.complete();
48
- }
49
29
  /**
50
30
  * Select a radio item.
51
31
  * @param value The value of the radio item to select.
32
+ * @ignore
52
33
  */
53
34
  select(value) {
54
- this.value = value;
35
+ this.value.set(value);
55
36
  this.onValueChange.emit(value);
56
37
  this.onChange?.(value);
57
- this.updateActiveItem();
58
38
  this.onTouched();
59
39
  }
60
40
  /**
61
41
  * Update the value of the radio group.
62
42
  * @param value The new value of the radio group.
63
- * @internal
43
+ * @ignore
64
44
  */
65
45
  writeValue(value) {
66
- this.value = value;
67
- if (this.radioItems) {
68
- this.updateActiveItem(false);
69
- }
46
+ this.value.set(value);
70
47
  }
71
48
  /**
72
49
  * Register a callback function to call when the value of the radio group changes.
73
50
  * @param fn The callback function to call when the value of the radio group changes.
74
- * @internal
51
+ * @ignore
75
52
  */
76
53
  registerOnChange(fn) {
77
54
  this.onChange = fn;
78
55
  }
56
+ /** @ignore */
79
57
  registerOnTouched(fn) {
80
58
  this.onTouched = fn;
81
59
  }
82
60
  /**
83
61
  * Set the disabled state of the radio group.
84
62
  * @param isDisabled Whether the radio group is disabled.
85
- * @internal
63
+ * @ignore
86
64
  */
87
65
  setDisabledState(isDisabled) {
88
66
  this.disabled = isDisabled;
89
67
  }
90
- /**
91
- * When focus leaves the radio group.
92
- */
93
- onFocusin(event) {
94
- const target = event.target;
95
- const radioItem = this.radioItems.find((item) => item.element.nativeElement === target);
96
- if (radioItem) {
97
- this.focusKeyManager.setActiveItem(radioItem);
98
- }
99
- }
100
- onKeydown(event) {
68
+ onKeydown() {
101
69
  if (this.disabled)
102
70
  return;
103
- switch (event.keyCode) {
104
- case ENTER:
105
- case SPACE:
106
- event.preventDefault();
107
- this.selectFocusedItem();
108
- break;
109
- case DOWN_ARROW:
110
- case RIGHT_ARROW:
111
- event.preventDefault();
112
- this.focusKeyManager.setNextItemActive();
113
- this.selectFocusedItem();
114
- break;
115
- case UP_ARROW:
116
- case LEFT_ARROW:
117
- event.preventDefault();
118
- this.focusKeyManager.setPreviousItemActive();
119
- this.selectFocusedItem();
120
- break;
121
- case TAB:
122
- this.tabNavigation(event);
123
- break;
124
- default:
125
- this.focusKeyManager.onKeydown(event);
126
- }
127
- }
128
- selectFocusedItem() {
129
- const focusedItem = this.focusKeyManager.activeItem;
130
- if (focusedItem) {
131
- this.select(focusedItem.value);
132
- }
133
- }
134
- updateActiveItem(setFocus = true) {
135
- const activeItem = this.radioItems.find((item) => item.value === this.value);
136
- if (activeItem) {
137
- this.focusKeyManager.setActiveItem(activeItem);
138
- }
139
- else if (this.radioItems.length > 0 && setFocus) {
140
- this.focusKeyManager.setFirstItemActive();
141
- }
142
- }
143
- tabNavigation(event) {
144
- event.preventDefault();
145
- const checkedItem = this.radioItems.find((item) => item.checked);
146
- if (checkedItem) {
147
- checkedItem.focus();
148
- }
149
- else if (this.radioItems.first) {
150
- this.radioItems.first.focus();
151
- }
152
71
  }
153
72
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRadioGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
154
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.11", type: RdxRadioGroupDirective, isStandalone: true, selector: "[rdxRadioRoot]", inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute], dir: "dir", defaultValue: "defaultValue" }, outputs: { onValueChange: "onValueChange" }, host: { attributes: { "role": "radiogroup" }, listeners: { "keydown": "onKeydown($event)", "focusin": "onFocusin($event)" }, properties: { "attr.aria-orientation": "_orientation", "attr.data-disabled": "disabled ? \"\" : null", "attr.tabindex": "-1", "attr.dir": "dir" } }, providers: [
73
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxRadioGroupDirective, isStandalone: true, selector: "[rdxRadioRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: false, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange" }, host: { attributes: { "role": "radiogroup" }, listeners: { "keydown": "onKeydown()" }, properties: { "attr.aria-orientation": "orientation", "attr.data-disabled": "disabled ? \"\" : null" } }, providers: [
155
74
  { provide: RDX_RADIO_GROUP, useExisting: RdxRadioGroupDirective },
156
75
  { provide: NG_VALUE_ACCESSOR, useExisting: RdxRadioGroupDirective, multi: true }
157
- ], queries: [{ propertyName: "radioItems", predicate: RdxRadioItemDirective, descendants: true }], exportAs: ["rdxRadioRoot"], ngImport: i0 }); }
76
+ ], exportAs: ["rdxRadioRoot"], hostDirectives: [{ directive: i1.RdxRovingFocusGroupDirective, inputs: ["dir", "dir", "orientation", "orientation", "loop", "loop"] }], ngImport: i0 }); }
158
77
  }
159
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRadioGroupDirective, decorators: [{
160
79
  type: Directive,
@@ -166,29 +85,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
166
85
  { provide: RDX_RADIO_GROUP, useExisting: RdxRadioGroupDirective },
167
86
  { provide: NG_VALUE_ACCESSOR, useExisting: RdxRadioGroupDirective, multi: true }
168
87
  ],
88
+ hostDirectives: [{ directive: RdxRovingFocusGroupDirective, inputs: ['dir', 'orientation', 'loop'] }],
169
89
  host: {
170
90
  role: 'radiogroup',
171
- '[attr.aria-orientation]': '_orientation',
91
+ '[attr.aria-orientation]': 'orientation',
172
92
  '[attr.data-disabled]': 'disabled ? "" : null',
173
- '[attr.tabindex]': '-1',
174
- '[attr.dir]': 'dir',
175
- '(keydown)': 'onKeydown($event)',
176
- '(focusin)': 'onFocusin($event)'
93
+ '(keydown)': 'onKeydown()'
177
94
  }
178
95
  }]
179
- }], propDecorators: { radioItems: [{
180
- type: ContentChildren,
181
- args: [RdxRadioItemDirective, { descendants: true }]
182
- }], value: [{
183
- type: Input
184
- }], disabled: [{
96
+ }], propDecorators: { disabled: [{
185
97
  type: Input,
186
98
  args: [{ transform: booleanAttribute }]
187
- }], dir: [{
188
- type: Input
189
99
  }], defaultValue: [{
190
100
  type: Input
101
+ }], required: [{
102
+ type: Input
103
+ }], orientation: [{
104
+ type: Input
191
105
  }], onValueChange: [{
192
106
  type: Output
193
107
  }] } });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tcm9vdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL3NyYy9yYWRpby1yb290LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pHLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBd0MsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBb0J2RixNQUFNLE9BQU8sc0JBQXNCO0lBbEJuQztRQXVCWSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUtDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFNekQ7Ozs7OztXQU1HO1FBQ00saUJBQVksR0FBRyxVQUFVLENBQUM7UUFFbkM7O1dBRUc7UUFDZ0Isa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTlEOztXQUVHO1FBQ0ssYUFBUSxHQUE0QixHQUFHLEVBQUU7WUFDN0MsV0FBVztRQUNmLENBQUMsQ0FBQztRQUVGOztXQUVHO1FBQ0gsY0FBUyxHQUFlLEdBQUcsRUFBRTtZQUN6QixXQUFXO1FB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LElBQUksRUFBRTtnQkFLcEQsS0FBSztzQkFBYixLQUFLO2dCQUVrQyxRQUFRO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU3QixHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFjYSxhQUFhO3NCQUEvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRSwgVEFCLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmR4UmFkaW9JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9yYWRpby1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSYWRpb0dyb3VwRGlyZWN0aXZlLCBSYWRpb0dyb3VwUHJvcHMsIFJEWF9SQURJT19HUk9VUCB9IGZyb20gJy4vcmFkaW8tdG9rZW5zJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UmFkaW9Sb290XScsXG4gICAgZXhwb3J0QXM6ICdyZHhSYWRpb1Jvb3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogUkRYX1JBRElPX0dST1VQLCB1c2VFeGlzdGluZzogUmR4UmFkaW9Hcm91cERpcmVjdGl2ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogUmR4UmFkaW9Hcm91cERpcmVjdGl2ZSwgbXVsdGk6IHRydWUgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICByb2xlOiAncmFkaW9ncm91cCcsXG4gICAgICAgICdbYXR0ci5hcmlhLW9yaWVudGF0aW9uXSc6ICdfb3JpZW50YXRpb24nLFxuICAgICAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQgPyBcIlwiIDogbnVsbCcsXG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAnLTEnLFxuICAgICAgICAnW2F0dHIuZGlyXSc6ICdkaXInLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5ZG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1c2luKSc6ICdvbkZvY3VzaW4oJGV2ZW50KSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeFJhZGlvR3JvdXBEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIFJhZGlvR3JvdXBQcm9wcywgUmFkaW9Hcm91cERpcmVjdGl2ZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxue1xuICAgIEBDb250ZW50Q2hpbGRyZW4oUmR4UmFkaW9JdGVtRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJhZGlvSXRlbXMhOiBRdWVyeUxpc3Q8UmR4UmFkaW9JdGVtRGlyZWN0aXZlPjtcbiAgICBwcml2YXRlIGZvY3VzS2V5TWFuYWdlciE6IEZvY3VzS2V5TWFuYWdlcjxSZHhSYWRpb0l0ZW1EaXJlY3RpdmU+O1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZGlyPzogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWVudGF0aW9uIG9mIHRoZSByYWRpbyBncm91cCBvbmx5IHZlcnRpY2FsLlxuICAgICAqIEhvcml6b250YWwgcmFkaW8gYnV0dG9ucyBjYW4gc29tZXRpbWVzIGJlIGNoYWxsZW5naW5nIHRvIHNjYW4gYW5kIGxvY2FsaXplLlxuICAgICAqIFRoZSBob3Jpem9udGFsIGFycmFuZ2VtZW50IG9mIHJhZGlvIGJ1dHRvbnMgbWF5IGFsc28gbGVhZCB0byBkaWZmaWN1bHRpZXMgaW4gZGV0ZXJtaW5pbmcgd2hpY2hcbiAgICAgKiBsYWJlbCBjb3JyZXNwb25kcyB0byB3aGljaCBidXR0b246IHdoZXRoZXIgdGhlIGxhYmVsIGlzIGFib3ZlIG9yIGJlbG93IHRoZSBidXR0b24uXG4gICAgICogQGRlZmF1bHQgJ3ZlcnRpY2FsJ1xuICAgICAqL1xuICAgIHJlYWRvbmx5IF9vcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCc7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBvblZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgcmFkaW8gZ3JvdXAgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAgICAgLyogRW1wdHkgKi9cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmFkaW8gZ3JvdXAgaXMgdG91Y2hlZC5cbiAgICAgKi9cbiAgICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAgIC8qIEVtcHR5ICovXG4gICAgfTtcblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMucmFkaW9JdGVtcykud2l0aFdyYXAoKS53aXRoVmVydGljYWxPcmllbnRhdGlvbigpO1xuXG4gICAgICAgIHRoaXMucmFkaW9JdGVtcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbShmYWxzZSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGEgcmFkaW8gaXRlbS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSByYWRpbyBpdGVtIHRvIHNlbGVjdC5cbiAgICAgKi9cbiAgICBzZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZT8uKHZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKCk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgcmFkaW8gZ3JvdXAuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIHJhZGlvIGdyb3VwLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIHJhZGlvIGdyb3VwIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIGZuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSByYWRpbyBncm91cCBjaGFuZ2VzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHJhZGlvIGdyb3VwLlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIHJhZGlvIGdyb3VwIGlzIGRpc2FibGVkLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGZvY3VzIGxlYXZlcyB0aGUgcmFkaW8gZ3JvdXAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uRm9jdXNpbihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJhZGlvSXRlbSA9IHRoaXMucmFkaW9JdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudCA9PT0gdGFyZ2V0KTtcbiAgICAgICAgaWYgKHJhZGlvSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShyYWRpb0l0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSBFTlRFUjpcbiAgICAgICAgICAgIGNhc2UgU1BBQ0U6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZvY3VzZWRJdGVtKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERPV05fQVJST1c6XG4gICAgICAgICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0TmV4dEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZvY3VzZWRJdGVtKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFVQX0FSUk9XOlxuICAgICAgICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGb2N1c2VkSXRlbSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUQUI6XG4gICAgICAgICAgICAgICAgdGhpcy50YWJOYXZpZ2F0aW9uKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0Rm9jdXNlZEl0ZW0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgICAgICAgaWYgKGZvY3VzZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdChmb2N1c2VkSXRlbS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUFjdGl2ZUl0ZW0oc2V0Rm9jdXMgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLnJhZGlvSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGFjdGl2ZUl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmFkaW9JdGVtcy5sZW5ndGggPiAwICYmIHNldEZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdGFiTmF2aWdhdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBjaGVja2VkSXRlbSA9IHRoaXMucmFkaW9JdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpO1xuICAgICAgICBpZiAoY2hlY2tlZEl0ZW0pIHtcbiAgICAgICAgICAgIGNoZWNrZWRJdGVtLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYWRpb0l0ZW1zLmZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvSXRlbXMuZmlyc3QuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tcm9vdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL3NyYy9yYWRpby1yb290LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFlLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDOUYsT0FBTyxFQUF3QyxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBa0J2RixNQUFNLE9BQU8sc0JBQXNCO0lBaEJuQztRQWlCYSxVQUFLLEdBQUcsS0FBSyxFQUFzQixDQUFDO1FBRUwsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVF6RDs7V0FFRztRQUNnQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFOUQ7O1dBRUc7UUFDSyxhQUFRLEdBQTRCLEdBQUcsRUFBRTtZQUM3QyxXQUFXO1FBQ2YsQ0FBQyxDQUFDO1FBRUY7OztXQUdHO1FBQ0gsY0FBUyxHQUFlLEdBQUcsRUFBRTtZQUN6QixXQUFXO1FBQ2YsQ0FBQyxDQUFDO0tBaURMO0lBL0NHOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBYTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEtBQWE7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUEyQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixDQUFDLEVBQWM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRVMsU0FBUztRQUNmLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO0lBQzlCLENBQUM7K0dBN0VRLHNCQUFzQjttR0FBdEIsc0JBQXNCLDhTQUdYLGdCQUFnQixnckJBZnpCO1lBQ1AsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtZQUNqRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtTQUNuRjs7NEZBU1Esc0JBQXNCO2tCQWhCbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDUCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyx3QkFBd0IsRUFBRTt3QkFDakUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3FCQUNuRjtvQkFDRCxjQUFjLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3JHLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsWUFBWTt3QkFDbEIseUJBQXlCLEVBQUUsYUFBYTt3QkFDeEMsc0JBQXNCLEVBQUUsc0JBQXNCO3dCQUM5QyxXQUFXLEVBQUUsYUFBYTtxQkFDN0I7aUJBQ0o7OEJBSTJDLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRTdCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUthLGFBQWE7c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIG1vZGVsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9yaWVudGF0aW9uLCBSZHhSb3ZpbmdGb2N1c0dyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzJztcbmltcG9ydCB7IFJhZGlvR3JvdXBEaXJlY3RpdmUsIFJhZGlvR3JvdXBQcm9wcywgUkRYX1JBRElPX0dST1VQIH0gZnJvbSAnLi9yYWRpby10b2tlbnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhSYWRpb1Jvb3RdJyxcbiAgICBleHBvcnRBczogJ3JkeFJhZGlvUm9vdCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBSRFhfUkFESU9fR1JPVVAsIHVzZUV4aXN0aW5nOiBSZHhSYWRpb0dyb3VwRGlyZWN0aXZlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBSZHhSYWRpb0dyb3VwRGlyZWN0aXZlLCBtdWx0aTogdHJ1ZSB9XG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW3sgZGlyZWN0aXZlOiBSZHhSb3ZpbmdGb2N1c0dyb3VwRGlyZWN0aXZlLCBpbnB1dHM6IFsnZGlyJywgJ29yaWVudGF0aW9uJywgJ2xvb3AnXSB9XSxcbiAgICBob3N0OiB7XG4gICAgICAgIHJvbGU6ICdyYWRpb2dyb3VwJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtb3JpZW50YXRpb25dJzogJ29yaWVudGF0aW9uJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtZGlzYWJsZWRdJzogJ2Rpc2FibGVkID8gXCJcIiA6IG51bGwnLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5ZG93bigpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4UmFkaW9Hcm91cERpcmVjdGl2ZSBpbXBsZW1lbnRzIFJhZGlvR3JvdXBQcm9wcywgUmFkaW9Hcm91cERpcmVjdGl2ZSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHJlYWRvbmx5IHZhbHVlID0gbW9kZWw8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIG9yaWVudGF0aW9uOiBPcmllbnRhdGlvbjtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IG9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSByYWRpbyBncm91cCBjaGFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgICAvKiBFbXB0eSAqL1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSByYWRpbyBncm91cCBpcyB0b3VjaGVkLlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAgIC8qIEVtcHR5ICovXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIHJhZGlvIGl0ZW0uXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcmFkaW8gaXRlbSB0byBzZWxlY3QuXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHNlbGVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlPy4odmFsdWUpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIHJhZGlvIGdyb3VwLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSByYWRpbyBncm91cC5cbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIHJhZGlvIGdyb3VwIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIGZuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSByYWRpbyBncm91cCBjaGFuZ2VzLlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHJhZGlvIGdyb3VwLlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIHJhZGlvIGdyb3VwIGlzIGRpc2FibGVkLlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uS2V5ZG93bigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB9XG59XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const RDX_RADIO_GROUP = new InjectionToken('RdxRadioGroup');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9yYWRpby9zcmMvcmFkaW8tdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFlL0MsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFzQixlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFkaW9Hcm91cFByb3BzIHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFkaW9Hcm91cERpcmVjdGl2ZSBleHRlbmRzIFJhZGlvR3JvdXBQcm9wcyB7XG4gICAgc2VsZWN0KHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgb25Ub3VjaGVkKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBSRFhfUkFESU9fR1JPVVAgPSBuZXcgSW5qZWN0aW9uVG9rZW48UmFkaW9Hcm91cERpcmVjdGl2ZT4oJ1JkeFJhZGlvR3JvdXAnKTtcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9yYWRpby9zcmMvcmFkaW8tdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFlNUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFzQixlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBNb2RlbFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJhZGlvR3JvdXBQcm9wcyB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICAgIHZhbHVlPzogTW9kZWxTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0dyb3VwRGlyZWN0aXZlIGV4dGVuZHMgUmFkaW9Hcm91cFByb3BzIHtcbiAgICBzZWxlY3QodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQ7XG5cbiAgICBvblRvdWNoZWQoKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFJEWF9SQURJT19HUk9VUCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSYWRpb0dyb3VwRGlyZWN0aXZlPignUmR4UmFkaW9Hcm91cCcpO1xuIl19
@@ -0,0 +1,3 @@
1
+ export * from './src/roving-focus-group.directive';
2
+ export * from './src/roving-focus-item.directive';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JvdmluZy1mb2N1cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NyYy9yb3ZpbmctZm9jdXMtZ3JvdXAuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3JvdmluZy1mb2N1cy1pdGVtLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCB0eXBlIHsgRGlyZWN0aW9uLCBPcmllbnRhdGlvbiB9IGZyb20gJy4vc3JjL3V0aWxzJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaXgtbmctcHJpbWl0aXZlcy1yb3ZpbmctZm9jdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JvdmluZy1mb2N1cy9yYWRpeC1uZy1wcmltaXRpdmVzLXJvdmluZy1mb2N1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,138 @@
1
+ import { booleanAttribute, Directive, ElementRef, EventEmitter, inject, Input, NgZone, Output, signal } from '@angular/core';
2
+ import { ENTRY_FOCUS, EVENT_OPTIONS, focusFirst } from './utils';
3
+ import * as i0 from "@angular/core";
4
+ export class RdxRovingFocusGroupDirective {
5
+ constructor() {
6
+ this.ngZone = inject(NgZone);
7
+ this.elementRef = inject(ElementRef);
8
+ this.dir = 'ltr';
9
+ this.loop = true;
10
+ this.preventScrollOnEntryFocus = false;
11
+ this.entryFocus = new EventEmitter();
12
+ this.currentTabStopIdChange = new EventEmitter();
13
+ /** @ignore */
14
+ this.currentTabStopId = signal(null);
15
+ /** @ignore */
16
+ this.focusableItems = signal([]);
17
+ this.isClickFocus = signal(false);
18
+ this.isTabbingBackOut = signal(false);
19
+ this.focusableItemsCount = signal(0);
20
+ }
21
+ /** @ignore */
22
+ get dataOrientation() {
23
+ return this.orientation || 'horizontal';
24
+ }
25
+ /** @ignore */
26
+ get tabIndex() {
27
+ return this.isTabbingBackOut() || this.getFocusableItemsCount() === 0 ? -1 : 0;
28
+ }
29
+ /** @ignore */
30
+ handleBlur() {
31
+ this.isTabbingBackOut.set(false);
32
+ }
33
+ /** @ignore */
34
+ handleMouseUp() {
35
+ // reset `isClickFocus` after 1 tick because handleFocus might not triggered due to focused element
36
+ this.ngZone.runOutsideAngular(() => {
37
+ // eslint-disable-next-line promise/catch-or-return,promise/always-return
38
+ Promise.resolve().then(() => {
39
+ this.ngZone.run(() => {
40
+ this.isClickFocus.set(false);
41
+ });
42
+ });
43
+ });
44
+ }
45
+ /** @ignore */
46
+ handleFocus(event) {
47
+ // We normally wouldn't need this check, because we already check
48
+ // that the focus is on the current target and not bubbling to it.
49
+ // We do this because Safari doesn't focus buttons when clicked, and
50
+ // instead, the wrapper will get focused and not through a bubbling event.
51
+ const isKeyboardFocus = !this.isClickFocus();
52
+ if (event.currentTarget === this.elementRef.nativeElement &&
53
+ event.target === event.currentTarget &&
54
+ isKeyboardFocus &&
55
+ !this.isTabbingBackOut()) {
56
+ const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);
57
+ this.elementRef.nativeElement.dispatchEvent(entryFocusEvent);
58
+ this.entryFocus.emit(entryFocusEvent);
59
+ if (!entryFocusEvent.defaultPrevented) {
60
+ const items = this.focusableItems().filter((item) => item.dataset['disabled'] !== '');
61
+ const activeItem = items.find((item) => item.getAttribute('data-active') === 'true');
62
+ const currentItem = items.find((item) => item.id === this.currentTabStopId());
63
+ const candidateItems = [activeItem, currentItem, ...items].filter(Boolean);
64
+ focusFirst(candidateItems, this.preventScrollOnEntryFocus);
65
+ }
66
+ }
67
+ this.isClickFocus.set(false);
68
+ }
69
+ /** @ignore */
70
+ handleMouseDown() {
71
+ this.isClickFocus.set(true);
72
+ }
73
+ /** @ignore */
74
+ onItemFocus(tabStopId) {
75
+ this.currentTabStopId.set(tabStopId);
76
+ this.currentTabStopIdChange.emit(tabStopId);
77
+ }
78
+ /** @ignore */
79
+ onItemShiftTab() {
80
+ this.isTabbingBackOut.set(true);
81
+ }
82
+ /** @ignore */
83
+ onFocusableItemAdd() {
84
+ this.focusableItemsCount.update((count) => count + 1);
85
+ }
86
+ /** @ignore */
87
+ onFocusableItemRemove() {
88
+ this.focusableItemsCount.update((count) => Math.max(0, count - 1));
89
+ }
90
+ /** @ignore */
91
+ registerItem(item) {
92
+ const currentItems = this.focusableItems();
93
+ this.focusableItems.set([...currentItems, item]);
94
+ }
95
+ /** @ignore */
96
+ unregisterItem(item) {
97
+ const currentItems = this.focusableItems();
98
+ this.focusableItems.set(currentItems.filter((el) => el !== item));
99
+ }
100
+ /** @ignore */
101
+ getFocusableItemsCount() {
102
+ return this.focusableItemsCount();
103
+ }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRovingFocusGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
105
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.11", type: RdxRovingFocusGroupDirective, isStandalone: true, selector: "[rdxRovingFocusGroup]", inputs: { orientation: "orientation", dir: "dir", loop: ["loop", "loop", booleanAttribute], preventScrollOnEntryFocus: ["preventScrollOnEntryFocus", "preventScrollOnEntryFocus", booleanAttribute] }, outputs: { entryFocus: "entryFocus", currentTabStopIdChange: "currentTabStopIdChange" }, host: { listeners: { "focus": "handleFocus($event)", "blur": "handleBlur()", "mouseup": "handleMouseUp()", "mousedown": "handleMouseDown()" }, properties: { "attr.data-orientation": "dataOrientation", "attr.tabindex": "tabIndex", "attr.dir": "dir" }, styleAttribute: "outline: none;" }, ngImport: i0 }); }
106
+ }
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRovingFocusGroupDirective, decorators: [{
108
+ type: Directive,
109
+ args: [{
110
+ selector: '[rdxRovingFocusGroup]',
111
+ standalone: true,
112
+ host: {
113
+ '[attr.data-orientation]': 'dataOrientation',
114
+ '[attr.tabindex]': 'tabIndex',
115
+ '[attr.dir]': 'dir',
116
+ '(focus)': 'handleFocus($event)',
117
+ '(blur)': 'handleBlur()',
118
+ '(mouseup)': 'handleMouseUp()',
119
+ '(mousedown)': 'handleMouseDown()',
120
+ style: 'outline: none;'
121
+ }
122
+ }]
123
+ }], propDecorators: { orientation: [{
124
+ type: Input
125
+ }], dir: [{
126
+ type: Input
127
+ }], loop: [{
128
+ type: Input,
129
+ args: [{ transform: booleanAttribute }]
130
+ }], preventScrollOnEntryFocus: [{
131
+ type: Input,
132
+ args: [{ transform: booleanAttribute }]
133
+ }], entryFocus: [{
134
+ type: Output
135
+ }], currentTabStopIdChange: [{
136
+ type: Output
137
+ }] } });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm92aW5nLWZvY3VzLWdyb3VwLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzL3NyYy9yb3ZpbmctZm9jdXMtZ3JvdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQWUsTUFBTSxTQUFTLENBQUM7O0FBZ0J6RixNQUFNLE9BQU8sNEJBQTRCO0lBZHpDO1FBZXFCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUd4QyxRQUFHLEdBQWMsS0FBSyxDQUFDO1FBQ1EsU0FBSSxHQUFZLElBQUksQ0FBQztRQUNyQiw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFFekUsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDdkMsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFFckUsY0FBYztRQUNMLHFCQUFnQixHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFeEQsY0FBYztRQUNMLG1CQUFjLEdBQUcsTUFBTSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUVuQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBc0dwRDtJQXBHRyxjQUFjO0lBQ2Qs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Q0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7K0dBekhRLDRCQUE0QjttR0FBNUIsNEJBQTRCLGtJQU1qQixnQkFBZ0IseUZBQ2hCLGdCQUFnQjs7NEZBUDNCLDRCQUE0QjtrQkFkeEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNGLHlCQUF5QixFQUFFLGlCQUFpQjt3QkFDNUMsaUJBQWlCLEVBQUUsVUFBVTt3QkFDN0IsWUFBWSxFQUFFLEtBQUs7d0JBQ25CLFNBQVMsRUFBRSxxQkFBcUI7d0JBQ2hDLFFBQVEsRUFBRSxjQUFjO3dCQUN4QixXQUFXLEVBQUUsaUJBQWlCO3dCQUM5QixhQUFhLEVBQUUsbUJBQW1CO3dCQUNsQyxLQUFLLEVBQUUsZ0JBQWdCO3FCQUMxQjtpQkFDSjs4QkFLWSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDa0MsSUFBSTtzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSx5QkFBeUI7c0JBQWhFLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRTVCLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE91dHB1dCxcbiAgICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXJlY3Rpb24sIEVOVFJZX0ZPQ1VTLCBFVkVOVF9PUFRJT05TLCBmb2N1c0ZpcnN0LCBPcmllbnRhdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhSb3ZpbmdGb2N1c0dyb3VwXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdkYXRhT3JpZW50YXRpb24nLFxuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJ3RhYkluZGV4JyxcbiAgICAgICAgJ1thdHRyLmRpcl0nOiAnZGlyJyxcbiAgICAgICAgJyhmb2N1cyknOiAnaGFuZGxlRm9jdXMoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnaGFuZGxlQmx1cigpJyxcbiAgICAgICAgJyhtb3VzZXVwKSc6ICdoYW5kbGVNb3VzZVVwKCknLFxuICAgICAgICAnKG1vdXNlZG93biknOiAnaGFuZGxlTW91c2VEb3duKCknLFxuICAgICAgICBzdHlsZTogJ291dGxpbmU6IG5vbmU7J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4Um92aW5nRm9jdXNHcm91cERpcmVjdGl2ZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICBASW5wdXQoKSBvcmllbnRhdGlvbjogT3JpZW50YXRpb24gfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgZGlyOiBEaXJlY3Rpb24gPSAnbHRyJztcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbG9vcDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBlbnRyeUZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgY3VycmVudFRhYlN0b3BJZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgY3VycmVudFRhYlN0b3BJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZm9jdXNhYmxlSXRlbXMgPSBzaWduYWw8SFRNTEVsZW1lbnRbXT4oW10pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0NsaWNrRm9jdXMgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNUYWJiaW5nQmFja091dCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb2N1c2FibGVJdGVtc0NvdW50ID0gc2lnbmFsKDApO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBnZXQgZGF0YU9yaWVudGF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiB8fCAnaG9yaXpvbnRhbCc7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVGFiYmluZ0JhY2tPdXQoKSB8fCB0aGlzLmdldEZvY3VzYWJsZUl0ZW1zQ291bnQoKSA9PT0gMCA/IC0xIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGhhbmRsZUJsdXIoKSB7XG4gICAgICAgIHRoaXMuaXNUYWJiaW5nQmFja091dC5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlTW91c2VVcCgpIHtcbiAgICAgICAgLy8gcmVzZXQgYGlzQ2xpY2tGb2N1c2AgYWZ0ZXIgMSB0aWNrIGJlY2F1c2UgaGFuZGxlRm9jdXMgbWlnaHQgbm90IHRyaWdnZXJlZCBkdWUgdG8gZm9jdXNlZCBlbGVtZW50XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVybixwcm9taXNlL2Fsd2F5cy1yZXR1cm5cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDbGlja0ZvY3VzLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBoYW5kbGVGb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICAvLyBXZSBub3JtYWxseSB3b3VsZG4ndCBuZWVkIHRoaXMgY2hlY2ssIGJlY2F1c2Ugd2UgYWxyZWFkeSBjaGVja1xuICAgICAgICAvLyB0aGF0IHRoZSBmb2N1cyBpcyBvbiB0aGUgY3VycmVudCB0YXJnZXQgYW5kIG5vdCBidWJibGluZyB0byBpdC5cbiAgICAgICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIFNhZmFyaSBkb2Vzbid0IGZvY3VzIGJ1dHRvbnMgd2hlbiBjbGlja2VkLCBhbmRcbiAgICAgICAgLy8gaW5zdGVhZCwgdGhlIHdyYXBwZXIgd2lsbCBnZXQgZm9jdXNlZCBhbmQgbm90IHRocm91Z2ggYSBidWJibGluZyBldmVudC5cbiAgICAgICAgY29uc3QgaXNLZXlib2FyZEZvY3VzID0gIXRoaXMuaXNDbGlja0ZvY3VzKCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJlxuICAgICAgICAgICAgaXNLZXlib2FyZEZvY3VzICYmXG4gICAgICAgICAgICAhdGhpcy5pc1RhYmJpbmdCYWNrT3V0KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeUZvY3VzRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoRU5UUllfRk9DVVMsIEVWRU5UX09QVElPTlMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChlbnRyeUZvY3VzRXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5lbnRyeUZvY3VzLmVtaXQoZW50cnlGb2N1c0V2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCFlbnRyeUZvY3VzRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5mb2N1c2FibGVJdGVtcygpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5kYXRhc2V0WydkaXNhYmxlZCddICE9PSAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IGl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLWFjdGl2ZScpID09PSAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdGhpcy5jdXJyZW50VGFiU3RvcElkKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUl0ZW1zID0gW2FjdGl2ZUl0ZW0sIGN1cnJlbnRJdGVtLCAuLi5pdGVtc10uZmlsdGVyKEJvb2xlYW4pIGFzIEhUTUxFbGVtZW50W107XG5cbiAgICAgICAgICAgICAgICBmb2N1c0ZpcnN0KGNhbmRpZGF0ZUl0ZW1zLCB0aGlzLnByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNDbGlja0ZvY3VzLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBoYW5kbGVNb3VzZURvd24oKSB7XG4gICAgICAgIHRoaXMuaXNDbGlja0ZvY3VzLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9uSXRlbUZvY3VzKHRhYlN0b3BJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRhYlN0b3BJZC5zZXQodGFiU3RvcElkKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFiU3RvcElkQ2hhbmdlLmVtaXQodGFiU3RvcElkKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9uSXRlbVNoaWZ0VGFiKCkge1xuICAgICAgICB0aGlzLmlzVGFiYmluZ0JhY2tPdXQuc2V0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgb25Gb2N1c2FibGVJdGVtQWRkKCkge1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUl0ZW1zQ291bnQudXBkYXRlKChjb3VudCkgPT4gY291bnQgKyAxKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9uRm9jdXNhYmxlSXRlbVJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2FibGVJdGVtc0NvdW50LnVwZGF0ZSgoY291bnQpID0+IE1hdGgubWF4KDAsIGNvdW50IC0gMSkpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVnaXN0ZXJJdGVtKGl0ZW06IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMuZm9jdXNhYmxlSXRlbXMoKTtcbiAgICAgICAgdGhpcy5mb2N1c2FibGVJdGVtcy5zZXQoWy4uLmN1cnJlbnRJdGVtcywgaXRlbV0pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgdW5yZWdpc3Rlckl0ZW0oaXRlbTogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEl0ZW1zID0gdGhpcy5mb2N1c2FibGVJdGVtcygpO1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUl0ZW1zLnNldChjdXJyZW50SXRlbXMuZmlsdGVyKChlbCkgPT4gZWwgIT09IGl0ZW0pKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGdldEZvY3VzYWJsZUl0ZW1zQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW1zQ291bnQoKTtcbiAgICB9XG59XG4iXX0=