@radix-ng/primitives 0.18.2 → 0.20.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 (96) 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 +9385 -4858
  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/popover/index.mjs +41 -0
  31. package/esm2022/popover/radix-ng-primitives-popover.mjs +5 -0
  32. package/esm2022/popover/src/popover-arrow.directive.mjs +112 -0
  33. package/esm2022/popover/src/popover-arrow.token.mjs +3 -0
  34. package/esm2022/popover/src/popover-close.directive.mjs +37 -0
  35. package/esm2022/popover/src/popover-content.directive.mjs +227 -0
  36. package/esm2022/popover/src/popover-root.directive.mjs +142 -0
  37. package/esm2022/popover/src/popover-root.inject.mjs +7 -0
  38. package/esm2022/popover/src/popover-root.token.mjs +3 -0
  39. package/esm2022/popover/src/popover-trigger.directive.mjs +42 -0
  40. package/esm2022/popover/src/popover.constants.mjs +90 -0
  41. package/esm2022/popover/src/popover.types.mjs +14 -0
  42. package/esm2022/popover/src/popover.utils.mjs +115 -0
  43. package/esm2022/radio/index.mjs +2 -1
  44. package/esm2022/radio/src/radio-item-input.directive.mjs +37 -0
  45. package/esm2022/radio/src/radio-item.directive.mjs +55 -39
  46. package/esm2022/radio/src/radio-root.directive.mjs +30 -120
  47. package/esm2022/radio/src/radio-tokens.mjs +1 -1
  48. package/esm2022/roving-focus/index.mjs +3 -0
  49. package/esm2022/roving-focus/radix-ng-primitives-roving-focus.mjs +5 -0
  50. package/esm2022/roving-focus/src/roving-focus-group.directive.mjs +138 -0
  51. package/esm2022/roving-focus/src/roving-focus-item.directive.mjs +133 -0
  52. package/esm2022/roving-focus/src/utils.mjs +47 -0
  53. package/esm2022/select/src/select-item.directive.mjs +8 -2
  54. package/esm2022/toggle/src/toggle-input.directive.mjs +4 -3
  55. package/fesm2022/radix-ng-primitives-avatar.mjs +70 -85
  56. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  57. package/fesm2022/radix-ng-primitives-checkbox.mjs +35 -10
  58. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  59. package/fesm2022/radix-ng-primitives-core.mjs +230 -3
  60. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  61. package/fesm2022/radix-ng-primitives-popover.mjs +796 -0
  62. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -0
  63. package/fesm2022/radix-ng-primitives-radio.mjs +145 -186
  64. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  65. package/fesm2022/radix-ng-primitives-roving-focus.mjs +320 -0
  66. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -0
  67. package/fesm2022/radix-ng-primitives-select.mjs +7 -1
  68. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  69. package/fesm2022/radix-ng-primitives-toggle.mjs +3 -2
  70. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  71. package/package.json +18 -6
  72. package/popover/README.md +3 -0
  73. package/popover/index.d.ts +17 -0
  74. package/popover/src/popover-arrow.directive.d.ts +37 -0
  75. package/popover/src/popover-arrow.token.d.ts +3 -0
  76. package/popover/src/popover-close.directive.d.ts +15 -0
  77. package/popover/src/popover-content.directive.d.ts +84 -0
  78. package/popover/src/popover-root.directive.d.ts +58 -0
  79. package/popover/src/popover-root.inject.d.ts +2 -0
  80. package/popover/src/popover-root.token.d.ts +3 -0
  81. package/popover/src/popover-trigger.directive.d.ts +18 -0
  82. package/popover/src/popover.constants.d.ts +8 -0
  83. package/popover/src/popover.types.d.ts +34 -0
  84. package/popover/src/popover.utils.d.ts +12 -0
  85. package/radio/index.d.ts +1 -0
  86. package/radio/src/radio-item-input.directive.d.ts +12 -0
  87. package/radio/src/radio-item.directive.d.ts +23 -14
  88. package/radio/src/radio-root.directive.d.ts +19 -34
  89. package/radio/src/radio-tokens.d.ts +6 -4
  90. package/roving-focus/README.md +3 -0
  91. package/roving-focus/index.d.ts +3 -0
  92. package/roving-focus/src/roving-focus-group.directive.d.ts +50 -0
  93. package/roving-focus/src/roving-focus-item.directive.d.ts +50 -0
  94. package/roving-focus/src/utils.d.ts +19 -0
  95. package/select/src/select-item.directive.d.ts +7 -1
  96. package/toggle/src/toggle-input.directive.d.ts +1 -1
@@ -0,0 +1,42 @@
1
+ import { CdkOverlayOrigin } from '@angular/cdk/overlay';
2
+ import { computed, Directive, ElementRef, inject, input } from '@angular/core';
3
+ import { injectPopoverRoot } from './popover-root.inject';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ let nextId = 0;
7
+ export class RdxPopoverTriggerDirective {
8
+ constructor() {
9
+ this.id = input(`rdx-popover-root-${nextId++}`);
10
+ this.popoverId = computed(() => `rdx-popover-${this.id()}`);
11
+ /** @ignore */
12
+ this.popoverRoot = injectPopoverRoot();
13
+ /** @ignore */
14
+ this.elementRef = inject((ElementRef));
15
+ /** @ignore */
16
+ this.overlayOrigin = inject(CdkOverlayOrigin);
17
+ }
18
+ /** @ignore */
19
+ onClick() {
20
+ this.popoverRoot.handleToggle();
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
23
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxPopoverTriggerDirective, isStandalone: true, selector: "[rdxPopoverTrigger]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" }, properties: { "attr.id": "id()", "attr.aria-haspopup": "\"dialog\"", "attr.aria-expanded": "popoverRoot.isOpen()", "attr.aria-controls": "popoverId()", "attr.data-state": "popoverRoot.state()" } }, hostDirectives: [{ directive: i1.CdkOverlayOrigin }], ngImport: i0 }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverTriggerDirective, decorators: [{
26
+ type: Directive,
27
+ args: [{
28
+ selector: '[rdxPopoverTrigger]',
29
+ standalone: true,
30
+ hostDirectives: [CdkOverlayOrigin],
31
+ host: {
32
+ type: 'button',
33
+ '[attr.id]': 'id()',
34
+ '[attr.aria-haspopup]': '"dialog"',
35
+ '[attr.aria-expanded]': 'popoverRoot.isOpen()',
36
+ '[attr.aria-controls]': 'popoverId()',
37
+ '[attr.data-state]': 'popoverRoot.state()',
38
+ '(click)': 'onClick()'
39
+ }
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBRTFELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQWdCZixNQUFNLE9BQU8sMEJBQTBCO0lBZHZDO1FBZWEsT0FBRSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLGNBQWM7UUFDTCxnQkFBVyxHQUFHLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsY0FBYztRQUNMLGVBQVUsR0FBRyxNQUFNLENBQTBCLENBQUEsVUFBdUIsQ0FBQSxDQUFDLENBQUM7UUFDL0UsY0FBYztRQUNMLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FNckQ7SUFKRyxjQUFjO0lBQ2QsT0FBTztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQzsrR0FkUSwwQkFBMEI7bUdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFkdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsY0FBYyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2xDLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsUUFBUTt3QkFDZCxXQUFXLEVBQUUsTUFBTTt3QkFDbkIsc0JBQXNCLEVBQUUsVUFBVTt3QkFDbEMsc0JBQXNCLEVBQUUsc0JBQXNCO3dCQUM5QyxzQkFBc0IsRUFBRSxhQUFhO3dCQUNyQyxtQkFBbUIsRUFBRSxxQkFBcUI7d0JBQzFDLFNBQVMsRUFBRSxXQUFXO3FCQUN6QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka092ZXJsYXlPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RQb3BvdmVyUm9vdCB9IGZyb20gJy4vcG9wb3Zlci1yb290LmluamVjdCc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhQb3BvdmVyVHJpZ2dlcl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtDZGtPdmVybGF5T3JpZ2luXSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkKCknLFxuICAgICAgICAnW2F0dHIuYXJpYS1oYXNwb3B1cF0nOiAnXCJkaWFsb2dcIicsXG4gICAgICAgICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdwb3BvdmVyUm9vdC5pc09wZW4oKScsXG4gICAgICAgICdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdwb3BvdmVySWQoKScsXG4gICAgICAgICdbYXR0ci5kYXRhLXN0YXRlXSc6ICdwb3BvdmVyUm9vdC5zdGF0ZSgpJyxcbiAgICAgICAgJyhjbGljayknOiAnb25DbGljaygpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4UG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUge1xuICAgIHJlYWRvbmx5IGlkID0gaW5wdXQoYHJkeC1wb3BvdmVyLXJvb3QtJHtuZXh0SWQrK31gKTtcbiAgICByZWFkb25seSBwb3BvdmVySWQgPSBjb21wdXRlZCgoKSA9PiBgcmR4LXBvcG92ZXItJHt0aGlzLmlkKCl9YCk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHBvcG92ZXJSb290ID0gaW5qZWN0UG9wb3ZlclJvb3QoKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IG92ZXJsYXlPcmlnaW4gPSBpbmplY3QoQ2RrT3ZlcmxheU9yaWdpbik7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9wb3ZlclJvb3QuaGFuZGxlVG9nZ2xlKCk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,90 @@
1
+ import { RdxPopoverAlign, RdxPopoverSide } from './popover.types';
2
+ export const POPOVER_POSITIONS = {
3
+ [RdxPopoverSide.Top]: {
4
+ [RdxPopoverAlign.Center]: {
5
+ originX: 'center',
6
+ originY: 'top',
7
+ overlayX: 'center',
8
+ overlayY: 'bottom'
9
+ },
10
+ [RdxPopoverAlign.Start]: {
11
+ originX: 'start',
12
+ originY: 'top',
13
+ overlayX: 'start',
14
+ overlayY: 'bottom'
15
+ },
16
+ [RdxPopoverAlign.End]: {
17
+ originX: 'end',
18
+ originY: 'top',
19
+ overlayX: 'end',
20
+ overlayY: 'bottom'
21
+ }
22
+ },
23
+ [RdxPopoverSide.Right]: {
24
+ [RdxPopoverAlign.Center]: {
25
+ originX: 'end',
26
+ originY: 'center',
27
+ overlayX: 'start',
28
+ overlayY: 'center'
29
+ },
30
+ [RdxPopoverAlign.Start]: {
31
+ originX: 'end',
32
+ originY: 'top',
33
+ overlayX: 'start',
34
+ overlayY: 'top'
35
+ },
36
+ [RdxPopoverAlign.End]: {
37
+ originX: 'end',
38
+ originY: 'bottom',
39
+ overlayX: 'start',
40
+ overlayY: 'bottom'
41
+ }
42
+ },
43
+ [RdxPopoverSide.Bottom]: {
44
+ [RdxPopoverAlign.Center]: {
45
+ originX: 'center',
46
+ originY: 'bottom',
47
+ overlayX: 'center',
48
+ overlayY: 'top'
49
+ },
50
+ [RdxPopoverAlign.Start]: {
51
+ originX: 'start',
52
+ originY: 'bottom',
53
+ overlayX: 'start',
54
+ overlayY: 'top'
55
+ },
56
+ [RdxPopoverAlign.End]: {
57
+ originX: 'end',
58
+ originY: 'bottom',
59
+ overlayX: 'end',
60
+ overlayY: 'top'
61
+ }
62
+ },
63
+ [RdxPopoverSide.Left]: {
64
+ [RdxPopoverAlign.Center]: {
65
+ originX: 'start',
66
+ originY: 'center',
67
+ overlayX: 'end',
68
+ overlayY: 'center'
69
+ },
70
+ [RdxPopoverAlign.Start]: {
71
+ originX: 'start',
72
+ originY: 'top',
73
+ overlayX: 'end',
74
+ overlayY: 'top'
75
+ },
76
+ [RdxPopoverAlign.End]: {
77
+ originX: 'start',
78
+ originY: 'bottom',
79
+ overlayX: 'end',
80
+ overlayY: 'bottom'
81
+ }
82
+ }
83
+ };
84
+ export const DEFAULTS = {
85
+ offsets: {
86
+ side: 10,
87
+ align: 10
88
+ }
89
+ };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXVCLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUF3QjtJQUNsRCxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QixPQUFPLEVBQUUsUUFBUTtZQUNqQixPQUFPLEVBQUUsS0FBSztZQUNkLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRSxRQUFRO1NBQ3JCO1FBQ0QsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsT0FBTyxFQUFFLE9BQU87WUFDaEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsT0FBTztZQUNqQixRQUFRLEVBQUUsUUFBUTtTQUNyQjtRQUNELENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sRUFBRSxLQUFLO1lBQ2QsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsS0FBSztZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ3JCO0tBQ0o7SUFDRCxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNwQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxRQUFRO1NBQ3JCO1FBQ0QsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsS0FBSztZQUNkLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxLQUFLO1NBQ2xCO1FBQ0QsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsUUFBUTtZQUNqQixRQUFRLEVBQUUsT0FBTztZQUNqQixRQUFRLEVBQUUsUUFBUTtTQUNyQjtLQUNKO0lBQ0QsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLEtBQUs7U0FDbEI7UUFDRCxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLEVBQUUsT0FBTztZQUNoQixPQUFPLEVBQUUsUUFBUTtZQUNqQixRQUFRLEVBQUUsT0FBTztZQUNqQixRQUFRLEVBQUUsS0FBSztTQUNsQjtRQUNELENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sRUFBRSxLQUFLO1lBQ2QsT0FBTyxFQUFFLFFBQVE7WUFDakIsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsS0FBSztTQUNsQjtLQUNKO0lBQ0QsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsT0FBTyxFQUFFLFFBQVE7WUFDakIsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsUUFBUTtTQUNyQjtRQUNELENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsS0FBSztTQUNsQjtRQUNELENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLFFBQVE7U0FDckI7S0FDSjtDQUNLLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDcEIsT0FBTyxFQUFFO1FBQ0wsSUFBSSxFQUFFLEVBQUU7UUFDUixLQUFLLEVBQUUsRUFBRTtLQUNaO0NBQ0ssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJkeFBvcG92ZXJBbGlnbiwgUmR4UG9wb3ZlclBvc2l0aW9ucywgUmR4UG9wb3ZlclNpZGUgfSBmcm9tICcuL3BvcG92ZXIudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgUE9QT1ZFUl9QT1NJVElPTlM6IFJkeFBvcG92ZXJQb3NpdGlvbnMgPSB7XG4gICAgW1JkeFBvcG92ZXJTaWRlLlRvcF06IHtcbiAgICAgICAgW1JkeFBvcG92ZXJBbGlnbi5DZW50ZXJdOiB7XG4gICAgICAgICAgICBvcmlnaW5YOiAnY2VudGVyJyxcbiAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nXG4gICAgICAgIH0sXG4gICAgICAgIFtSZHhQb3BvdmVyQWxpZ24uU3RhcnRdOiB7XG4gICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICB9LFxuICAgICAgICBbUmR4UG9wb3ZlckFsaWduLkVuZF06IHtcbiAgICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgW1JkeFBvcG92ZXJTaWRlLlJpZ2h0XToge1xuICAgICAgICBbUmR4UG9wb3ZlckFsaWduLkNlbnRlcl06IHtcbiAgICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgICAgb3JpZ2luWTogJ2NlbnRlcicsXG4gICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJ1xuICAgICAgICB9LFxuICAgICAgICBbUmR4UG9wb3ZlckFsaWduLlN0YXJ0XToge1xuICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgIH0sXG4gICAgICAgIFtSZHhQb3BvdmVyQWxpZ24uRW5kXToge1xuICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFtSZHhQb3BvdmVyU2lkZS5Cb3R0b21dOiB7XG4gICAgICAgIFtSZHhQb3BvdmVyQWxpZ24uQ2VudGVyXToge1xuICAgICAgICAgICAgb3JpZ2luWDogJ2NlbnRlcicsXG4gICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnY2VudGVyJyxcbiAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgICAgICB9LFxuICAgICAgICBbUmR4UG9wb3ZlckFsaWduLlN0YXJ0XToge1xuICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgICAgfSxcbiAgICAgICAgW1JkeFBvcG92ZXJBbGlnbi5FbmRdOiB7XG4gICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFtSZHhQb3BvdmVyU2lkZS5MZWZ0XToge1xuICAgICAgICBbUmR4UG9wb3ZlckFsaWduLkNlbnRlcl06IHtcbiAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAnY2VudGVyJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJ1xuICAgICAgICB9LFxuICAgICAgICBbUmR4UG9wb3ZlckFsaWduLlN0YXJ0XToge1xuICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgIH0sXG4gICAgICAgIFtSZHhQb3BvdmVyQWxpZ24uRW5kXToge1xuICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nXG4gICAgICAgIH1cbiAgICB9XG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVFMgPSB7XG4gICAgb2Zmc2V0czoge1xuICAgICAgICBzaWRlOiAxMCxcbiAgICAgICAgYWxpZ246IDEwXG4gICAgfVxufSBhcyBjb25zdDtcbiJdfQ==
@@ -0,0 +1,14 @@
1
+ export var RdxPopoverSide;
2
+ (function (RdxPopoverSide) {
3
+ RdxPopoverSide["Top"] = "top";
4
+ RdxPopoverSide["Right"] = "right";
5
+ RdxPopoverSide["Bottom"] = "bottom";
6
+ RdxPopoverSide["Left"] = "left";
7
+ })(RdxPopoverSide || (RdxPopoverSide = {}));
8
+ export var RdxPopoverAlign;
9
+ (function (RdxPopoverAlign) {
10
+ RdxPopoverAlign["Start"] = "start";
11
+ RdxPopoverAlign["Center"] = "center";
12
+ RdxPopoverAlign["End"] = "end";
13
+ })(RdxPopoverAlign || (RdxPopoverAlign = {}));
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3RCLDZCQUFXLENBQUE7SUFDWCxpQ0FBZSxDQUFBO0lBQ2YsbUNBQWlCLENBQUE7SUFDakIsK0JBQWEsQ0FBQTtBQUNqQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3ZCLGtDQUFlLENBQUE7SUFDZixvQ0FBaUIsQ0FBQTtJQUNqQiw4QkFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcblxuZXhwb3J0IGVudW0gUmR4UG9wb3ZlclNpZGUge1xuICAgIFRvcCA9ICd0b3AnLFxuICAgIFJpZ2h0ID0gJ3JpZ2h0JyxcbiAgICBCb3R0b20gPSAnYm90dG9tJyxcbiAgICBMZWZ0ID0gJ2xlZnQnXG59XG5cbmV4cG9ydCBlbnVtIFJkeFBvcG92ZXJBbGlnbiB7XG4gICAgU3RhcnQgPSAnc3RhcnQnLFxuICAgIENlbnRlciA9ICdjZW50ZXInLFxuICAgIEVuZCA9ICdlbmQnXG59XG5cbmV4cG9ydCB0eXBlIFJkeFBvcG92ZXJTdGF0ZSA9ICdvcGVuJyB8ICdjbG9zZWQnO1xuXG5leHBvcnQgdHlwZSBSZHhTaWRlQW5kQWxpZ24gPSB7IHNpZGU6IFJkeFBvcG92ZXJTaWRlOyBhbGlnbjogUmR4UG9wb3ZlckFsaWduIH07XG5leHBvcnQgdHlwZSBSZHhTaWRlQW5kQWxpZ25PZmZzZXRzID0geyBzaWRlT2Zmc2V0OiBudW1iZXI7IGFsaWduT2Zmc2V0OiBudW1iZXIgfTtcblxuZXhwb3J0IHR5cGUgUmR4UG9wb3ZlclBvc2l0aW9ucyA9IHtcbiAgICBba2V5IGluIFJkeFBvcG92ZXJTaWRlXToge1xuICAgICAgICBba2V5IGluIFJkeFBvcG92ZXJBbGlnbl06IENvbm5lY3Rpb25Qb3NpdGlvblBhaXI7XG4gICAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJkeEFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zID0gUmVhZG9ubHlNYXA8XG4gICAgYCR7UmR4UG9wb3ZlclNpZGV9fCR7UmR4UG9wb3ZlckFsaWdufWAsXG4gICAgQ29ubmVjdGlvblBvc2l0aW9uUGFpclxuPjtcblxuZXhwb3J0IHR5cGUgUmR4QXJyb3dQb3NpdGlvblBhcmFtcyA9IHtcbiAgICB0b3A6IHN0cmluZztcbiAgICBib3R0b206IHN0cmluZztcbiAgICBsZWZ0OiBzdHJpbmc7XG4gICAgcmlnaHQ6IHN0cmluZztcbiAgICB0cmFuc2Zvcm06IHN0cmluZztcbn07XG4iXX0=
@@ -0,0 +1,115 @@
1
+ import { POPOVER_POSITIONS } from './popover.constants';
2
+ import { RdxPopoverAlign, RdxPopoverSide } from './popover.types';
3
+ let allPossibleConnectedPositions;
4
+ export function getAllPossibleConnectedPositions() {
5
+ if (!allPossibleConnectedPositions) {
6
+ allPossibleConnectedPositions = new Map();
7
+ }
8
+ if (allPossibleConnectedPositions.size < 1) {
9
+ Object.keys(POPOVER_POSITIONS).forEach((side) => {
10
+ Object.keys(POPOVER_POSITIONS[side] ?? {}).forEach((align) => {
11
+ allPossibleConnectedPositions.set(`${side}|${align}`, POPOVER_POSITIONS[side][align]);
12
+ });
13
+ });
14
+ }
15
+ return allPossibleConnectedPositions;
16
+ }
17
+ export function getSideAndAlignFromAllPossibleConnectedPositions(position) {
18
+ const allPossibleConnectedPositions = getAllPossibleConnectedPositions();
19
+ let sideAndAlign;
20
+ allPossibleConnectedPositions.forEach((value, key) => {
21
+ if (position.originX === value.originX &&
22
+ position.originY === value.originY &&
23
+ position.overlayX === value.overlayX &&
24
+ position.overlayY === value.overlayY) {
25
+ const sideAndAlignArray = key.split('|');
26
+ sideAndAlign = {
27
+ side: sideAndAlignArray[0],
28
+ align: sideAndAlignArray[1]
29
+ };
30
+ }
31
+ });
32
+ if (!sideAndAlign) {
33
+ throw Error(`[RdxPopover] cannot infer both side and align from the given position (${JSON.stringify(position)})`);
34
+ }
35
+ return sideAndAlign;
36
+ }
37
+ export function getContentPosition(sideAndAlignWithOffsets) {
38
+ const { side, align, sideOffset, alignOffset } = sideAndAlignWithOffsets;
39
+ const position = {
40
+ ...(POPOVER_POSITIONS[side]?.[align] ?? POPOVER_POSITIONS[RdxPopoverSide.Top][RdxPopoverAlign.Center])
41
+ };
42
+ if (sideOffset > 0) {
43
+ let xFactor = 0;
44
+ let yFactor = 0;
45
+ switch (side) {
46
+ case RdxPopoverSide.Top:
47
+ yFactor = -1;
48
+ break;
49
+ case RdxPopoverSide.Bottom:
50
+ yFactor = 1;
51
+ break;
52
+ case RdxPopoverSide.Left:
53
+ xFactor = -1;
54
+ break;
55
+ case RdxPopoverSide.Right:
56
+ xFactor = 1;
57
+ break;
58
+ }
59
+ position.offsetX = xFactor * sideOffset;
60
+ position.offsetY = yFactor * sideOffset;
61
+ }
62
+ if ([RdxPopoverAlign.Start, RdxPopoverAlign.End].includes(align) && alignOffset) {
63
+ const alignOffsetFactor = align === RdxPopoverAlign.End ? -1 : 1;
64
+ position.offsetX = alignOffsetFactor * alignOffset;
65
+ }
66
+ return position;
67
+ }
68
+ export function getArrowPositionParams(sideAndAlign, arrowWidthAndHeight, triggerWidthAndHeight) {
69
+ const posParams = {
70
+ top: '',
71
+ bottom: '',
72
+ left: '',
73
+ right: '',
74
+ transform: ''
75
+ };
76
+ if ([RdxPopoverSide.Top, RdxPopoverSide.Bottom].includes(sideAndAlign.side)) {
77
+ if (sideAndAlign.side === RdxPopoverSide.Top) {
78
+ posParams.top = '100%';
79
+ }
80
+ else {
81
+ posParams.top = `-${arrowWidthAndHeight.height}px`;
82
+ posParams.transform = `rotate(180deg)`;
83
+ }
84
+ if (sideAndAlign.align === RdxPopoverAlign.Start) {
85
+ posParams.left = `${(triggerWidthAndHeight.width - arrowWidthAndHeight.width) / 2}px`;
86
+ }
87
+ else if (sideAndAlign.align === RdxPopoverAlign.Center) {
88
+ posParams.left = `calc(50% - ${arrowWidthAndHeight.width / 2}px)`;
89
+ }
90
+ else if (sideAndAlign.align === RdxPopoverAlign.End) {
91
+ posParams.right = `${(triggerWidthAndHeight.width - arrowWidthAndHeight.width) / 2}px`;
92
+ }
93
+ }
94
+ else if ([RdxPopoverSide.Left, RdxPopoverSide.Right].includes(sideAndAlign.side)) {
95
+ if (sideAndAlign.side === RdxPopoverSide.Left) {
96
+ posParams.right = `-${arrowWidthAndHeight.width}px`;
97
+ posParams.transform = `rotate(-90deg) translate(0, -50%)`;
98
+ }
99
+ else {
100
+ posParams.left = `-${arrowWidthAndHeight.width}px`;
101
+ posParams.transform = `rotate(90deg) translate(0, -50%)`;
102
+ }
103
+ if (sideAndAlign.align === RdxPopoverAlign.Start) {
104
+ posParams.top = `${(triggerWidthAndHeight.height - arrowWidthAndHeight.height) / 2}px`;
105
+ }
106
+ else if (sideAndAlign.align === RdxPopoverAlign.Center) {
107
+ posParams.top = `calc(50% - ${arrowWidthAndHeight.height / 2}px)`;
108
+ }
109
+ else if (sideAndAlign.align === RdxPopoverAlign.End) {
110
+ posParams.bottom = `${(triggerWidthAndHeight.height - arrowWidthAndHeight.height) / 2}px`;
111
+ }
112
+ }
113
+ return posParams;
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBR0gsZUFBZSxFQUNmLGNBQWMsRUFHakIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixJQUFJLDZCQUErRCxDQUFDO0FBQ3BFLE1BQU0sVUFBVSxnQ0FBZ0M7SUFDNUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDakMsNkJBQTZCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMxRSw2QkFBK0MsQ0FBQyxHQUFHLENBQ2hELEdBQUcsSUFBc0IsSUFBSSxLQUF3QixFQUFFLEVBQ3ZELGlCQUFpQixDQUFDLElBQXNCLENBQUMsQ0FBQyxLQUF3QixDQUFDLENBQ3RFLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELE9BQU8sNkJBQTZCLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxnREFBZ0QsQ0FBQyxRQUFnQztJQUM3RixNQUFNLDZCQUE2QixHQUFHLGdDQUFnQyxFQUFFLENBQUM7SUFDekUsSUFBSSxZQUF5QyxDQUFDO0lBQzlDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNqRCxJQUNJLFFBQVEsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87WUFDbEMsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTztZQUNsQyxRQUFRLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRO1lBQ3BDLFFBQVEsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFDdEMsQ0FBQztZQUNDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxZQUFZLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBbUI7Z0JBQzVDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQW9CO2FBQ2pELENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEIsTUFBTSxLQUFLLENBQ1AsMEVBQTBFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDeEcsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUM5Qix1QkFBaUU7SUFFakUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLHVCQUF1QixDQUFDO0lBRXpFLE1BQU0sUUFBUSxHQUFHO1FBQ2IsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksaUJBQWlCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6RyxDQUFDO0lBRUYsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUVoQixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ1gsS0FBSyxjQUFjLENBQUMsR0FBRztnQkFDbkIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNiLE1BQU07WUFDVixLQUFLLGNBQWMsQ0FBQyxNQUFNO2dCQUN0QixPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUNaLE1BQU07WUFDVixLQUFLLGNBQWMsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsTUFBTTtZQUNWLEtBQUssY0FBYyxDQUFDLEtBQUs7Z0JBQ3JCLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ1osTUFBTTtRQUNkLENBQUM7UUFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDeEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlFLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxLQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakUsUUFBUSxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsR0FBRyxXQUFXLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ2xDLFlBQTZCLEVBQzdCLG1CQUFzRCxFQUN0RCxxQkFBd0Q7SUFFeEQsTUFBTSxTQUFTLEdBQUc7UUFDZCxHQUFHLEVBQUUsRUFBRTtRQUNQLE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLEVBQUU7UUFDUixLQUFLLEVBQUUsRUFBRTtRQUNULFNBQVMsRUFBRSxFQUFFO0tBQ2hCLENBQUM7SUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFFLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0MsU0FBUyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDSixTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksbUJBQW1CLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDbkQsU0FBUyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxTQUFTLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDMUYsQ0FBQzthQUFNLElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkQsU0FBUyxDQUFDLElBQUksR0FBRyxjQUFjLG1CQUFtQixDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN0RSxDQUFDO2FBQU0sSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNwRCxTQUFTLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDM0YsQ0FBQztJQUNMLENBQUM7U0FBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pGLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLG1CQUFtQixDQUFDLEtBQUssSUFBSSxDQUFDO1lBQ3BELFNBQVMsQ0FBQyxTQUFTLEdBQUcsbUNBQW1DLENBQUM7UUFDOUQsQ0FBQzthQUFNLENBQUM7WUFDSixTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksbUJBQW1CLENBQUMsS0FBSyxJQUFJLENBQUM7WUFDbkQsU0FBUyxDQUFDLFNBQVMsR0FBRyxrQ0FBa0MsQ0FBQztRQUM3RCxDQUFDO1FBRUQsSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDM0YsQ0FBQzthQUFNLElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkQsU0FBUyxDQUFDLEdBQUcsR0FBRyxjQUFjLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN0RSxDQUFDO2FBQU0sSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNwRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDOUYsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBQT1BPVkVSX1BPU0lUSU9OUyB9IGZyb20gJy4vcG9wb3Zlci5jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBSZHhBbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucyxcbiAgICBSZHhBcnJvd1Bvc2l0aW9uUGFyYW1zLFxuICAgIFJkeFBvcG92ZXJBbGlnbixcbiAgICBSZHhQb3BvdmVyU2lkZSxcbiAgICBSZHhTaWRlQW5kQWxpZ24sXG4gICAgUmR4U2lkZUFuZEFsaWduT2Zmc2V0c1xufSBmcm9tICcuL3BvcG92ZXIudHlwZXMnO1xuXG5sZXQgYWxsUG9zc2libGVDb25uZWN0ZWRQb3NpdGlvbnM6IFJkeEFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zKCkge1xuICAgIGlmICghYWxsUG9zc2libGVDb25uZWN0ZWRQb3NpdGlvbnMpIHtcbiAgICAgICAgYWxsUG9zc2libGVDb25uZWN0ZWRQb3NpdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGlmIChhbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucy5zaXplIDwgMSkge1xuICAgICAgICBPYmplY3Qua2V5cyhQT1BPVkVSX1BPU0lUSU9OUykuZm9yRWFjaCgoc2lkZSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoUE9QT1ZFUl9QT1NJVElPTlNbc2lkZSBhcyBSZHhQb3BvdmVyU2lkZV0gPz8ge30pLmZvckVhY2goKGFsaWduKSA9PiB7XG4gICAgICAgICAgICAgICAgKGFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zIGFzIE1hcDxhbnksIGFueT4pLnNldChcbiAgICAgICAgICAgICAgICAgICAgYCR7c2lkZSBhcyBSZHhQb3BvdmVyU2lkZX18JHthbGlnbiBhcyBSZHhQb3BvdmVyQWxpZ259YCxcbiAgICAgICAgICAgICAgICAgICAgUE9QT1ZFUl9QT1NJVElPTlNbc2lkZSBhcyBSZHhQb3BvdmVyU2lkZV1bYWxpZ24gYXMgUmR4UG9wb3ZlckFsaWduXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZGVBbmRBbGlnbkZyb21BbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucyhwb3NpdGlvbjogQ29ubmVjdGlvblBvc2l0aW9uUGFpcik6IFJkeFNpZGVBbmRBbGlnbiB7XG4gICAgY29uc3QgYWxsUG9zc2libGVDb25uZWN0ZWRQb3NpdGlvbnMgPSBnZXRBbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucygpO1xuICAgIGxldCBzaWRlQW5kQWxpZ246IFJkeFNpZGVBbmRBbGlnbiB8IHVuZGVmaW5lZDtcbiAgICBhbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc2l0aW9uLm9yaWdpblggPT09IHZhbHVlLm9yaWdpblggJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLm9yaWdpblkgPT09IHZhbHVlLm9yaWdpblkgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLm92ZXJsYXlYID09PSB2YWx1ZS5vdmVybGF5WCAmJlxuICAgICAgICAgICAgcG9zaXRpb24ub3ZlcmxheVkgPT09IHZhbHVlLm92ZXJsYXlZXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgc2lkZUFuZEFsaWduQXJyYXkgPSBrZXkuc3BsaXQoJ3wnKTtcbiAgICAgICAgICAgIHNpZGVBbmRBbGlnbiA9IHtcbiAgICAgICAgICAgICAgICBzaWRlOiBzaWRlQW5kQWxpZ25BcnJheVswXSBhcyBSZHhQb3BvdmVyU2lkZSxcbiAgICAgICAgICAgICAgICBhbGlnbjogc2lkZUFuZEFsaWduQXJyYXlbMV0gYXMgUmR4UG9wb3ZlckFsaWduXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFzaWRlQW5kQWxpZ24pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBgW1JkeFBvcG92ZXJdIGNhbm5vdCBpbmZlciBib3RoIHNpZGUgYW5kIGFsaWduIGZyb20gdGhlIGdpdmVuIHBvc2l0aW9uICgke0pTT04uc3RyaW5naWZ5KHBvc2l0aW9uKX0pYFxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc2lkZUFuZEFsaWduO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGVudFBvc2l0aW9uKFxuICAgIHNpZGVBbmRBbGlnbldpdGhPZmZzZXRzOiBSZHhTaWRlQW5kQWxpZ24gJiBSZHhTaWRlQW5kQWxpZ25PZmZzZXRzXG4pOiBDb25uZWN0ZWRQb3NpdGlvbiB7XG4gICAgY29uc3QgeyBzaWRlLCBhbGlnbiwgc2lkZU9mZnNldCwgYWxpZ25PZmZzZXQgfSA9IHNpZGVBbmRBbGlnbldpdGhPZmZzZXRzO1xuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICAgIC4uLihQT1BPVkVSX1BPU0lUSU9OU1tzaWRlXT8uW2FsaWduXSA/PyBQT1BPVkVSX1BPU0lUSU9OU1tSZHhQb3BvdmVyU2lkZS5Ub3BdW1JkeFBvcG92ZXJBbGlnbi5DZW50ZXJdKVxuICAgIH07XG5cbiAgICBpZiAoc2lkZU9mZnNldCA+IDApIHtcbiAgICAgICAgbGV0IHhGYWN0b3IgPSAwO1xuICAgICAgICBsZXQgeUZhY3RvciA9IDA7XG5cbiAgICAgICAgc3dpdGNoIChzaWRlKSB7XG4gICAgICAgICAgICBjYXNlIFJkeFBvcG92ZXJTaWRlLlRvcDpcbiAgICAgICAgICAgICAgICB5RmFjdG9yID0gLTE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJkeFBvcG92ZXJTaWRlLkJvdHRvbTpcbiAgICAgICAgICAgICAgICB5RmFjdG9yID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmR4UG9wb3ZlclNpZGUuTGVmdDpcbiAgICAgICAgICAgICAgICB4RmFjdG9yID0gLTE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJkeFBvcG92ZXJTaWRlLlJpZ2h0OlxuICAgICAgICAgICAgICAgIHhGYWN0b3IgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24ub2Zmc2V0WCA9IHhGYWN0b3IgKiBzaWRlT2Zmc2V0O1xuICAgICAgICBwb3NpdGlvbi5vZmZzZXRZID0geUZhY3RvciAqIHNpZGVPZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKFtSZHhQb3BvdmVyQWxpZ24uU3RhcnQsIFJkeFBvcG92ZXJBbGlnbi5FbmRdLmluY2x1ZGVzKGFsaWduKSAmJiBhbGlnbk9mZnNldCkge1xuICAgICAgICBjb25zdCBhbGlnbk9mZnNldEZhY3RvciA9IGFsaWduID09PSBSZHhQb3BvdmVyQWxpZ24uRW5kID8gLTEgOiAxO1xuXG4gICAgICAgIHBvc2l0aW9uLm9mZnNldFggPSBhbGlnbk9mZnNldEZhY3RvciAqIGFsaWduT2Zmc2V0O1xuICAgIH1cblxuICAgIHJldHVybiBwb3NpdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFycm93UG9zaXRpb25QYXJhbXMoXG4gICAgc2lkZUFuZEFsaWduOiBSZHhTaWRlQW5kQWxpZ24sXG4gICAgYXJyb3dXaWR0aEFuZEhlaWdodDogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxuICAgIHRyaWdnZXJXaWR0aEFuZEhlaWdodDogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9XG4pOiBSZHhBcnJvd1Bvc2l0aW9uUGFyYW1zIHtcbiAgICBjb25zdCBwb3NQYXJhbXMgPSB7XG4gICAgICAgIHRvcDogJycsXG4gICAgICAgIGJvdHRvbTogJycsXG4gICAgICAgIGxlZnQ6ICcnLFxuICAgICAgICByaWdodDogJycsXG4gICAgICAgIHRyYW5zZm9ybTogJydcbiAgICB9O1xuXG4gICAgaWYgKFtSZHhQb3BvdmVyU2lkZS5Ub3AsIFJkeFBvcG92ZXJTaWRlLkJvdHRvbV0uaW5jbHVkZXMoc2lkZUFuZEFsaWduLnNpZGUpKSB7XG4gICAgICAgIGlmIChzaWRlQW5kQWxpZ24uc2lkZSA9PT0gUmR4UG9wb3ZlclNpZGUuVG9wKSB7XG4gICAgICAgICAgICBwb3NQYXJhbXMudG9wID0gJzEwMCUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zUGFyYW1zLnRvcCA9IGAtJHthcnJvd1dpZHRoQW5kSGVpZ2h0LmhlaWdodH1weGA7XG4gICAgICAgICAgICBwb3NQYXJhbXMudHJhbnNmb3JtID0gYHJvdGF0ZSgxODBkZWcpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaWRlQW5kQWxpZ24uYWxpZ24gPT09IFJkeFBvcG92ZXJBbGlnbi5TdGFydCkge1xuICAgICAgICAgICAgcG9zUGFyYW1zLmxlZnQgPSBgJHsodHJpZ2dlcldpZHRoQW5kSGVpZ2h0LndpZHRoIC0gYXJyb3dXaWR0aEFuZEhlaWdodC53aWR0aCkgLyAyfXB4YDtcbiAgICAgICAgfSBlbHNlIGlmIChzaWRlQW5kQWxpZ24uYWxpZ24gPT09IFJkeFBvcG92ZXJBbGlnbi5DZW50ZXIpIHtcbiAgICAgICAgICAgIHBvc1BhcmFtcy5sZWZ0ID0gYGNhbGMoNTAlIC0gJHthcnJvd1dpZHRoQW5kSGVpZ2h0LndpZHRoIC8gMn1weClgO1xuICAgICAgICB9IGVsc2UgaWYgKHNpZGVBbmRBbGlnbi5hbGlnbiA9PT0gUmR4UG9wb3ZlckFsaWduLkVuZCkge1xuICAgICAgICAgICAgcG9zUGFyYW1zLnJpZ2h0ID0gYCR7KHRyaWdnZXJXaWR0aEFuZEhlaWdodC53aWR0aCAtIGFycm93V2lkdGhBbmRIZWlnaHQud2lkdGgpIC8gMn1weGA7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFtSZHhQb3BvdmVyU2lkZS5MZWZ0LCBSZHhQb3BvdmVyU2lkZS5SaWdodF0uaW5jbHVkZXMoc2lkZUFuZEFsaWduLnNpZGUpKSB7XG4gICAgICAgIGlmIChzaWRlQW5kQWxpZ24uc2lkZSA9PT0gUmR4UG9wb3ZlclNpZGUuTGVmdCkge1xuICAgICAgICAgICAgcG9zUGFyYW1zLnJpZ2h0ID0gYC0ke2Fycm93V2lkdGhBbmRIZWlnaHQud2lkdGh9cHhgO1xuICAgICAgICAgICAgcG9zUGFyYW1zLnRyYW5zZm9ybSA9IGByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGUoMCwgLTUwJSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zUGFyYW1zLmxlZnQgPSBgLSR7YXJyb3dXaWR0aEFuZEhlaWdodC53aWR0aH1weGA7XG4gICAgICAgICAgICBwb3NQYXJhbXMudHJhbnNmb3JtID0gYHJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDAsIC01MCUpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaWRlQW5kQWxpZ24uYWxpZ24gPT09IFJkeFBvcG92ZXJBbGlnbi5TdGFydCkge1xuICAgICAgICAgICAgcG9zUGFyYW1zLnRvcCA9IGAkeyh0cmlnZ2VyV2lkdGhBbmRIZWlnaHQuaGVpZ2h0IC0gYXJyb3dXaWR0aEFuZEhlaWdodC5oZWlnaHQpIC8gMn1weGA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2lkZUFuZEFsaWduLmFsaWduID09PSBSZHhQb3BvdmVyQWxpZ24uQ2VudGVyKSB7XG4gICAgICAgICAgICBwb3NQYXJhbXMudG9wID0gYGNhbGMoNTAlIC0gJHthcnJvd1dpZHRoQW5kSGVpZ2h0LmhlaWdodCAvIDJ9cHgpYDtcbiAgICAgICAgfSBlbHNlIGlmIChzaWRlQW5kQWxpZ24uYWxpZ24gPT09IFJkeFBvcG92ZXJBbGlnbi5FbmQpIHtcbiAgICAgICAgICAgIHBvc1BhcmFtcy5ib3R0b20gPSBgJHsodHJpZ2dlcldpZHRoQW5kSGVpZ2h0LmhlaWdodCAtIGFycm93V2lkdGhBbmRIZWlnaHQuaGVpZ2h0KSAvIDJ9cHhgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc1BhcmFtcztcbn1cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  export * from './src/radio-root.directive';
2
2
  export * from './src/radio-indicator.directive';
3
+ export * from './src/radio-item-input.directive';
3
4
  export * from './src/radio-item.directive';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcmMvcmFkaW8tcm9vdC5kaXJlY3RpdmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3NyYy9yYWRpby1pbmRpY2F0b3IuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3JhZGlvLWl0ZW0uZGlyZWN0aXZlJztcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NyYy9yYWRpby1yb290LmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL3JhZGlvLWluZGljYXRvci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvcmFkaW8taXRlbS1pbnB1dC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvcmFkaW8taXRlbS5kaXJlY3RpdmUnO1xuIl19
@@ -0,0 +1,37 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { RdxVisuallyHiddenDirective } from '@radix-ng/primitives/visually-hidden';
3
+ import { injectRadioItem } from './radio-item.directive';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@radix-ng/primitives/visually-hidden";
6
+ export class RdxRadioItemInputDirective {
7
+ constructor() {
8
+ this.radioItem = injectRadioItem();
9
+ this.name = input();
10
+ this.value = computed(() => this.radioItem.value() || undefined);
11
+ this.checked = computed(() => this.radioItem.checkedState() || undefined);
12
+ this.required = input(this.radioItem.required());
13
+ this.disabled = input(this.radioItem.disabled());
14
+ }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRadioItemInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
16
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxRadioItemInputDirective, isStandalone: true, selector: "[rdxRadioItemInput]", inputs: { name: { classPropertyName: "name", publicName: "name", 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": "radio" }, properties: { "attr.name": "name()", "attr.required": "required()", "attr.disabled": "disabled() ? disabled() : undefined", "attr.checked": "checked()", "value": "value()" } }, exportAs: ["rdxRadioItemInput"], hostDirectives: [{ directive: i1.RdxVisuallyHiddenDirective, inputs: ["feature", "feature"] }], ngImport: i0 }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRadioItemInputDirective, decorators: [{
19
+ type: Directive,
20
+ args: [{
21
+ selector: '[rdxRadioItemInput]',
22
+ exportAs: 'rdxRadioItemInput',
23
+ standalone: true,
24
+ hostDirectives: [
25
+ { directive: RdxVisuallyHiddenDirective, inputs: ['feature'] }
26
+ ],
27
+ host: {
28
+ type: 'radio',
29
+ '[attr.name]': 'name()',
30
+ '[attr.required]': 'required()',
31
+ '[attr.disabled]': 'disabled() ? disabled() : undefined',
32
+ '[attr.checked]': 'checked()',
33
+ '[value]': 'value()'
34
+ }
35
+ }]
36
+ }] });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8taXRlbS1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL3NyYy9yYWRpby1pdGVtLWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFpQnpELE1BQU0sT0FBTywwQkFBMEI7SUFmdkM7UUFnQnFCLGNBQVMsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUV0QyxTQUFJLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDdkIsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQzVELFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNyRSxhQUFRLEdBQUcsS0FBSyxDQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakUsYUFBUSxHQUFHLEtBQUssQ0FBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQzdFOytHQVJZLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQWZ0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUU7d0JBQ1osRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7cUJBQUM7b0JBQ25FLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsT0FBTzt3QkFDYixhQUFhLEVBQUUsUUFBUTt3QkFDdkIsaUJBQWlCLEVBQUUsWUFBWTt3QkFDL0IsaUJBQWlCLEVBQUUscUNBQXFDO3dCQUN4RCxnQkFBZ0IsRUFBRSxXQUFXO3dCQUM3QixTQUFTLEVBQUUsU0FBUztxQkFDdkI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgRGlyZWN0aXZlLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4VmlzdWFsbHlIaWRkZW5EaXJlY3RpdmUgfSBmcm9tICdAcmFkaXgtbmcvcHJpbWl0aXZlcy92aXN1YWxseS1oaWRkZW4nO1xuaW1wb3J0IHsgaW5qZWN0UmFkaW9JdGVtIH0gZnJvbSAnLi9yYWRpby1pdGVtLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JkeFJhZGlvSXRlbUlucHV0XScsXG4gICAgZXhwb3J0QXM6ICdyZHhSYWRpb0l0ZW1JbnB1dCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7IGRpcmVjdGl2ZTogUmR4VmlzdWFsbHlIaWRkZW5EaXJlY3RpdmUsIGlucHV0czogWydmZWF0dXJlJ10gfV0sXG4gICAgaG9zdDoge1xuICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAnW2F0dHIubmFtZV0nOiAnbmFtZSgpJyxcbiAgICAgICAgJ1thdHRyLnJlcXVpcmVkXSc6ICdyZXF1aXJlZCgpJyxcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCgpID8gZGlzYWJsZWQoKSA6IHVuZGVmaW5lZCcsXG4gICAgICAgICdbYXR0ci5jaGVja2VkXSc6ICdjaGVja2VkKCknLFxuICAgICAgICAnW3ZhbHVlXSc6ICd2YWx1ZSgpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4UmFkaW9JdGVtSW5wdXREaXJlY3RpdmUge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmFkaW9JdGVtID0gaW5qZWN0UmFkaW9JdGVtKCk7XG5cbiAgICByZWFkb25seSBuYW1lID0gaW5wdXQ8c3RyaW5nPigpO1xuICAgIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yYWRpb0l0ZW0udmFsdWUoKSB8fCB1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IGNoZWNrZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJhZGlvSXRlbS5jaGVja2VkU3RhdGUoKSB8fCB1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IHJlcXVpcmVkID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odGhpcy5yYWRpb0l0ZW0ucmVxdWlyZWQoKSk7XG4gICAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih0aGlzLnJhZGlvSXRlbS5kaXNhYmxlZCgpKTtcbn1cbiJdfQ==
@@ -1,43 +1,63 @@
1
- import { booleanAttribute, Directive, ElementRef, inject, InjectionToken, Input } from '@angular/core';
1
+ import { booleanAttribute, computed, 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;
16
- }
17
- get tabIndex() {
18
- return this.disabled ? -1 : this.radioGroup.value === this.value ? 0 : -1;
19
- }
20
- get checked() {
21
- return this.radioGroup.value === this.value;
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.disabledState = computed(() => this.radioGroup.disableState() || this.disabled());
19
+ this.checkedState = computed(() => this.radioGroup.value() === this.value());
20
+ this.ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];
21
+ this.isArrowKeyPressedSignal = signal(false);
22
22
  }
23
+ /** @ignore */
23
24
  ngOnInit() {
24
- if (this.radioGroup.defaultValue === this.value) {
25
- this.radioGroup.select(this.value);
25
+ if (this.radioGroup.defaultValue === this.value()) {
26
+ this.radioGroup.select(this.value());
26
27
  }
27
28
  }
28
- focus() {
29
- this.element.nativeElement.focus();
29
+ /** @ignore */
30
+ onClick() {
31
+ if (!this.disabledState()) {
32
+ this.radioGroup.select(this.value());
33
+ this.isArrowKeyPressedSignal.set(true);
34
+ }
30
35
  }
31
- _onClick() {
32
- if (!this.disabled) {
33
- this.radioGroup.select(this.value);
36
+ /** @ignore */
37
+ onKeyDown(event) {
38
+ if (this.ARROW_KEYS.includes(event.key)) {
39
+ this.isArrowKeyPressedSignal.set(true);
34
40
  }
35
41
  }
36
- _onBlur() {
37
- this.radioGroup.onTouched?.();
42
+ /** @ignore */
43
+ onKeyUp() {
44
+ this.isArrowKeyPressedSignal.set(false);
45
+ }
46
+ /** @ignore */
47
+ onFocus() {
48
+ this.radioGroup.select(this.value());
49
+ setTimeout(() => {
50
+ /**
51
+ * When navigating with arrow keys, focus triggers on the radio item.
52
+ * To "check" the radio, we programmatically trigger a click event.
53
+ */
54
+ if (this.isArrowKeyPressedSignal()) {
55
+ this.elementRef.nativeElement.click();
56
+ }
57
+ }, 0);
38
58
  }
39
59
  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 }); }
60
+ 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": "checkedState()", "attr.data-disabled": "disabledState() ? \"\" : null", "attr.data-state": "checkedState() ? \"checked\" : \"unchecked\"", "disabled": "disabledState()" } }, providers: [{ provide: RdxRadioItemToken, useExisting: RdxRadioItemDirective }], exportAs: ["rdxRadioItem"], hostDirectives: [{ directive: i1.RdxRovingFocusItemDirective, inputs: ["tabStopId", "id", "focusable", "focusable", "active", "active", "allowShiftKey", "allowShiftKey"] }], ngImport: i0 }); }
41
61
  }
42
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRadioItemDirective, decorators: [{
43
63
  type: Directive,
@@ -46,25 +66,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
46
66
  exportAs: 'rdxRadioItem',
47
67
  standalone: true,
48
68
  providers: [{ provide: RdxRadioItemToken, useExisting: RdxRadioItemDirective }],
69
+ hostDirectives: [
70
+ { directive: RdxRovingFocusItemDirective, inputs: ['tabStopId: id', 'focusable', 'active', 'allowShiftKey'] }
71
+ ],
49
72
  host: {
50
73
  type: 'button',
51
74
  role: 'radio',
52
- '[attr.id]': 'id',
53
- '[attr.aria-checked]': 'checked',
54
- '[attr.data-disabled]': 'disabled ? "" : null',
55
- '[attr.data-state]': 'checked ? "checked" : "unchecked"',
56
- '[attr.tabindex]': 'tabIndex',
57
- '(click)': '_onClick()',
58
- '(blur)': '_onBlur()'
75
+ '[attr.aria-checked]': 'checkedState()',
76
+ '[attr.data-disabled]': 'disabledState() ? "" : null',
77
+ '[attr.data-state]': 'checkedState() ? "checked" : "unchecked"',
78
+ '[disabled]': 'disabledState()',
79
+ '(click)': 'onClick()',
80
+ '(keydown)': 'onKeyDown($event)',
81
+ '(keyup)': 'onKeyUp()',
82
+ '(focus)': 'onFocus()'
59
83
  }
60
84
  }]
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=
85
+ }] });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8taXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3JhZGlvL3NyYy9yYWRpby1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVqRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBd0IsZ0JBQWdCLENBQUMsQ0FBQztBQUU3RixNQUFNLFVBQVUsZUFBZTtJQUMzQixPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUF1QkQsTUFBTSxPQUFPLHFCQUFxQjtJQXJCbEM7UUFzQnFCLGVBQVUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4QyxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBRWpDLE9BQUUsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUVyQixhQUFRLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFFNUIsYUFBUSxHQUFHLEtBQUssQ0FBd0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV0RSxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxD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dCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNvbXB1dGVkLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBpbnB1dCxcbiAgICBPbkluaXQsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzJztcbmltcG9ydCB7IFJEWF9SQURJT19HUk9VUCB9IGZyb20gJy4vcmFkaW8tdG9rZW5zJztcblxuZXhwb3J0IGNvbnN0IFJkeFJhZGlvSXRlbVRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFJkeFJhZGlvSXRlbURpcmVjdGl2ZT4oJ1JhZGlvSXRlbVRva2VuJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RSYWRpb0l0ZW0oKTogUmR4UmFkaW9JdGVtRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gaW5qZWN0KFJkeFJhZGlvSXRlbVRva2VuKTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UmFkaW9JdGVtXScsXG4gICAgZXhwb3J0QXM6ICdyZHhSYWRpb0l0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBSZHhSYWRpb0l0ZW1Ub2tlbiwgdXNlRXhpc3Rpbmc6IFJkeFJhZGlvSXRlbURpcmVjdGl2ZSB9XSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7IGRpcmVjdGl2ZTogUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlLCBpbnB1dHM6IFsndGFiU3RvcElkOiBpZCcsICdmb2N1c2FibGUnLCAnYWN0aXZlJywgJ2FsbG93U2hpZnRLZXknXSB9XSxcblxuICAgIGhvc3Q6IHtcbiAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIHJvbGU6ICdyYWRpbycsXG4gICAgICAgICdbYXR0ci5hcmlhLWNoZWNrZWRdJzogJ2NoZWNrZWRTdGF0ZSgpJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtZGlzYWJsZWRdJzogJ2Rpc2FibGVkU3RhdGUoKSA/IFwiXCIgOiBudWxsJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtc3RhdGVdJzogJ2NoZWNrZWRTdGF0ZSgpID8gXCJjaGVja2VkXCIgOiBcInVuY2hlY2tlZFwiJyxcbiAgICAgICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWRTdGF0ZSgpJyxcbiAgICAgICAgJyhjbGljayknOiAnb25DbGljaygpJyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleURvd24oJGV2ZW50KScsXG4gICAgICAgICcoa2V5dXApJzogJ29uS2V5VXAoKScsXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeFJhZGlvSXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByYWRpb0dyb3VwID0gaW5qZWN0KFJEWF9SQURJT19HUk9VUCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgcmVhZG9ubHkgdmFsdWUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG5cbiAgICByZWFkb25seSBpZCA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIHJlYWRvbmx5IHJlcXVpcmVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAgIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzYWJsZWRTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmFkaW9Hcm91cC5kaXNhYmxlU3RhdGUoKSB8fCB0aGlzLmRpc2FibGVkKCkpO1xuXG4gICAgcmVhZG9ubHkgY2hlY2tlZFN0YXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yYWRpb0dyb3VwLnZhbHVlKCkgPT09IHRoaXMudmFsdWUoKSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IEFSUk9XX0tFWVMgPSBbJ0Fycm93VXAnLCAnQXJyb3dEb3duJywgJ0Fycm93TGVmdCcsICdBcnJvd1JpZ2h0J107XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0Fycm93S2V5UHJlc3NlZFNpZ25hbCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0dyb3VwLmRlZmF1bHRWYWx1ZSA9PT0gdGhpcy52YWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0KHRoaXMudmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZFN0YXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9Hcm91cC5zZWxlY3QodGhpcy52YWx1ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuaXNBcnJvd0tleVByZXNzZWRTaWduYWwuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuQVJST1dfS0VZUy5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmlzQXJyb3dLZXlQcmVzc2VkU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgb25LZXlVcCgpIHtcbiAgICAgICAgdGhpcy5pc0Fycm93S2V5UHJlc3NlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgb25Gb2N1cygpIHtcbiAgICAgICAgdGhpcy5yYWRpb0dyb3VwLnNlbGVjdCh0aGlzLnZhbHVlKCkpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hlbiBuYXZpZ2F0aW5nIHdpdGggYXJyb3cga2V5cywgZm9jdXMgdHJpZ2dlcnMgb24gdGhlIHJhZGlvIGl0ZW0uXG4gICAgICAgICAgICAgKiBUbyBcImNoZWNrXCIgdGhlIHJhZGlvLCB3ZSBwcm9ncmFtbWF0aWNhbGx5IHRyaWdnZXIgYSBjbGljayBldmVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJvd0tleVByZXNzZWRTaWduYWwoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgIH1cbn1cbiJdfQ==