@smarterplan/ngx-smarterplan-core 1.1.15 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/esm2020/lib/matterport-extensions/common/src/SceneComponent.mjs +128 -0
  2. package/esm2020/lib/matterport-extensions/common/src/sdk-components/OrientedBox.mjs +145 -0
  3. package/esm2020/lib/matterport-extensions/core/src/index.mjs +4 -0
  4. package/esm2020/lib/matterport-extensions/core/src/observable/Observable.mjs +167 -0
  5. package/esm2020/lib/matterport-extensions/core/src/observable/ObservableValue.mjs +38 -0
  6. package/esm2020/lib/matterport-extensions/core/src/subscription/ISubscription.mjs +2 -0
  7. package/esm2020/lib/matterport-extensions/core/src/types.mjs +2 -0
  8. package/esm2020/lib/matterport-extensions/core/src/util/index.mjs +165 -0
  9. package/esm2020/lib/matterport-extensions/scene-component/SceneComponent.mjs +128 -0
  10. package/esm2020/lib/matterport-extensions/security-camera/SecurityCamera.mjs +259 -0
  11. package/esm2020/lib/services/matterport.service.mjs +27 -6
  12. package/esm2020/lib/services/viewer.service.mjs +9 -1
  13. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +418 -5
  14. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  15. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +418 -5
  16. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  17. package/lib/matterport-extensions/common/src/SceneComponent.d.ts +388 -0
  18. package/lib/matterport-extensions/common/src/SceneComponent.d.ts.map +1 -0
  19. package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts +44 -0
  20. package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts.map +1 -0
  21. package/lib/matterport-extensions/core/src/index.d.ts +4 -0
  22. package/lib/matterport-extensions/core/src/index.d.ts.map +1 -0
  23. package/lib/matterport-extensions/core/src/observable/Observable.d.ts +94 -0
  24. package/lib/matterport-extensions/core/src/observable/Observable.d.ts.map +1 -0
  25. package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts +21 -0
  26. package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts.map +1 -0
  27. package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts +26 -0
  28. package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts.map +1 -0
  29. package/lib/matterport-extensions/core/src/types.d.ts +10 -0
  30. package/lib/matterport-extensions/core/src/types.d.ts.map +1 -0
  31. package/lib/matterport-extensions/core/src/util/index.d.ts +31 -0
  32. package/lib/matterport-extensions/core/src/util/index.d.ts.map +1 -0
  33. package/lib/matterport-extensions/scene-component/SceneComponent.d.ts +388 -0
  34. package/lib/matterport-extensions/scene-component/SceneComponent.d.ts.map +1 -0
  35. package/lib/matterport-extensions/security-camera/SecurityCamera.d.ts +46 -0
  36. package/lib/matterport-extensions/security-camera/SecurityCamera.d.ts.map +1 -0
  37. package/lib/services/matterport.service.d.ts +3 -1
  38. package/lib/services/matterport.service.d.ts.map +1 -1
  39. package/lib/services/viewer.service.d.ts.map +1 -1
  40. package/package.json +5 -2
@@ -0,0 +1,128 @@
1
+ /**
2
+ * The base of all `SceneComponent` created with the sdk.
3
+ * All properties of this class are always available to all components generated through the sdk.
4
+ * These properties should all be considered reserved and should not be overwritten by the subclass.
5
+ */
6
+ class SceneComponentPrivate {
7
+ }
8
+ export class SceneComponent extends SceneComponentPrivate {
9
+ }
10
+ /**
11
+ * The types of the Interaction events received from the registered `InteractionSelection`
12
+ */
13
+ export var ComponentInteractionType;
14
+ (function (ComponentInteractionType) {
15
+ /** CLICK events */
16
+ ComponentInteractionType["CLICK"] = "INTERACTION.CLICK";
17
+ /** HOVER events */
18
+ ComponentInteractionType["HOVER"] = "INTERACTION.HOVER";
19
+ /** DRAG events (mousedown then move) */
20
+ ComponentInteractionType["DRAG"] = "INTERACTION.DRAG";
21
+ ComponentInteractionType["DRAG_BEGIN"] = "INTERACTION.DRAG_BEGIN";
22
+ ComponentInteractionType["DRAG_END"] = "INTERACTION.DRAG_END";
23
+ ComponentInteractionType["POINTER_MOVE"] = "INTERACTION.POINTER_MOVE";
24
+ ComponentInteractionType["POINTER_BUTTON"] = "INTERACTION.POINTER_BUTTON";
25
+ ComponentInteractionType["SCROLL"] = "INTERACTION.SCROLL";
26
+ ComponentInteractionType["KEY"] = "INTERACTION.KEY";
27
+ ComponentInteractionType["LONG_PRESS_START"] = "INTERACTION.LONG_PRESS_START";
28
+ ComponentInteractionType["LONG_PRESS_END"] = "INTERACTION.LONG_PRESS_END";
29
+ ComponentInteractionType["MULTI_SWIPE"] = "INTERACTION.MULTI_SWIPE";
30
+ ComponentInteractionType["MULTI_SWIPE_END"] = "INTERACTION.MULTI_SWIPE_END";
31
+ ComponentInteractionType["PINCH"] = "INTERACTION.PINCH";
32
+ ComponentInteractionType["PINCH_END"] = "INTERACTION.PINCH_END";
33
+ ComponentInteractionType["ROTATE"] = "INTERACTION.ROTATE";
34
+ ComponentInteractionType["ROTATE_END"] = "INTERACTION.ROTATE_END";
35
+ })(ComponentInteractionType || (ComponentInteractionType = {}));
36
+ class ComponentOutputReserved {
37
+ }
38
+ class ComponentOut extends ComponentOutputReserved {
39
+ }
40
+ export var PointerButton;
41
+ (function (PointerButton) {
42
+ PointerButton[PointerButton["PRIMARY"] = 0] = "PRIMARY";
43
+ PointerButton[PointerButton["MIDDLE"] = 1] = "MIDDLE";
44
+ PointerButton[PointerButton["SECONDARY"] = 2] = "SECONDARY";
45
+ PointerButton[PointerButton["BACK"] = 3] = "BACK";
46
+ PointerButton[PointerButton["FORWARD"] = 4] = "FORWARD";
47
+ PointerButton[PointerButton["COUNT"] = 5] = "COUNT";
48
+ })(PointerButton || (PointerButton = {}));
49
+ export var PointerButtonMask;
50
+ (function (PointerButtonMask) {
51
+ PointerButtonMask[PointerButtonMask["NONE"] = 0] = "NONE";
52
+ PointerButtonMask[PointerButtonMask["PRIMARY"] = 1] = "PRIMARY";
53
+ PointerButtonMask[PointerButtonMask["SECONDARY"] = 4] = "SECONDARY";
54
+ PointerButtonMask[PointerButtonMask["MIDDLE"] = 2] = "MIDDLE";
55
+ PointerButtonMask[PointerButtonMask["BACK"] = 8] = "BACK";
56
+ PointerButtonMask[PointerButtonMask["FORWARD"] = 16] = "FORWARD";
57
+ PointerButtonMask[PointerButtonMask["ALL"] = 31] = "ALL";
58
+ })(PointerButtonMask || (PointerButtonMask = {}));
59
+ export var PointerDevice;
60
+ (function (PointerDevice) {
61
+ PointerDevice["MOUSE"] = "mouse";
62
+ PointerDevice["TOUCH"] = "touch";
63
+ PointerDevice["PEN"] = "pen";
64
+ PointerDevice["GAMEPAD"] = "gamepad";
65
+ })(PointerDevice || (PointerDevice = {}));
66
+ export var KeyState;
67
+ (function (KeyState) {
68
+ KeyState[KeyState["DOWN"] = 0] = "DOWN";
69
+ KeyState[KeyState["PRESSED"] = 1] = "PRESSED";
70
+ KeyState[KeyState["UP"] = 2] = "UP";
71
+ })(KeyState || (KeyState = {}));
72
+ export var Keys;
73
+ (function (Keys) {
74
+ Keys[Keys["ESCAPE"] = 27] = "ESCAPE";
75
+ Keys[Keys["ZERO"] = 48] = "ZERO";
76
+ Keys[Keys["ONE"] = 49] = "ONE";
77
+ Keys[Keys["TWO"] = 50] = "TWO";
78
+ Keys[Keys["THREE"] = 51] = "THREE";
79
+ Keys[Keys["FOUR"] = 52] = "FOUR";
80
+ Keys[Keys["FIVE"] = 53] = "FIVE";
81
+ Keys[Keys["SIX"] = 54] = "SIX";
82
+ Keys[Keys["SEVEN"] = 55] = "SEVEN";
83
+ Keys[Keys["EIGHT"] = 56] = "EIGHT";
84
+ Keys[Keys["NINE"] = 57] = "NINE";
85
+ Keys[Keys["LEFTARROW"] = 37] = "LEFTARROW";
86
+ Keys[Keys["UPARROW"] = 38] = "UPARROW";
87
+ Keys[Keys["RIGHTARROW"] = 39] = "RIGHTARROW";
88
+ Keys[Keys["DOWNARROW"] = 40] = "DOWNARROW";
89
+ Keys[Keys["TAB"] = 9] = "TAB";
90
+ Keys[Keys["A"] = 65] = "A";
91
+ Keys[Keys["B"] = 66] = "B";
92
+ Keys[Keys["C"] = 67] = "C";
93
+ Keys[Keys["D"] = 68] = "D";
94
+ Keys[Keys["E"] = 69] = "E";
95
+ Keys[Keys["F"] = 70] = "F";
96
+ Keys[Keys["G"] = 71] = "G";
97
+ Keys[Keys["H"] = 72] = "H";
98
+ Keys[Keys["I"] = 73] = "I";
99
+ Keys[Keys["J"] = 74] = "J";
100
+ Keys[Keys["K"] = 75] = "K";
101
+ Keys[Keys["L"] = 76] = "L";
102
+ Keys[Keys["M"] = 77] = "M";
103
+ Keys[Keys["N"] = 78] = "N";
104
+ Keys[Keys["O"] = 79] = "O";
105
+ Keys[Keys["P"] = 80] = "P";
106
+ Keys[Keys["Q"] = 81] = "Q";
107
+ Keys[Keys["R"] = 82] = "R";
108
+ Keys[Keys["S"] = 83] = "S";
109
+ Keys[Keys["T"] = 84] = "T";
110
+ Keys[Keys["U"] = 85] = "U";
111
+ Keys[Keys["V"] = 86] = "V";
112
+ Keys[Keys["W"] = 87] = "W";
113
+ Keys[Keys["X"] = 88] = "X";
114
+ Keys[Keys["Y"] = 89] = "Y";
115
+ Keys[Keys["Z"] = 90] = "Z";
116
+ Keys[Keys["SPACE"] = 32] = "SPACE";
117
+ Keys[Keys["RETURN"] = 13] = "RETURN";
118
+ Keys[Keys["DELETE"] = 46] = "DELETE";
119
+ Keys[Keys["BACKSPACE"] = 8] = "BACKSPACE";
120
+ Keys[Keys["SEMICOLON"] = 186] = "SEMICOLON";
121
+ Keys[Keys["PLUSEQUALS"] = 187] = "PLUSEQUALS";
122
+ Keys[Keys["DASHUNDERSCORE"] = 189] = "DASHUNDERSCORE";
123
+ Keys[Keys["OPENBRACKET"] = 219] = "OPENBRACKET";
124
+ Keys[Keys["SHIFT"] = 16] = "SHIFT";
125
+ Keys[Keys["ALT"] = 18] = "ALT";
126
+ Keys[Keys["CONTROL"] = 17] = "CONTROL";
127
+ })(Keys || (Keys = {}));
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVDb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9jb21tb24vc3JjL1NjZW5lQ29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOzs7O0dBSUc7QUFDSCxNQUFlLHFCQUFxQjtDQXFEbkM7QUFFRCxNQUFNLE9BQWdCLGNBQWUsU0FBUSxxQkFBcUI7Q0FrRGpFO0FBc0REOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksd0JBcUJYO0FBckJELFdBQVksd0JBQXdCO0lBQ2xDLG1CQUFtQjtJQUNuQix1REFBMkIsQ0FBQTtJQUMzQixtQkFBbUI7SUFDbkIsdURBQTJCLENBQUE7SUFDM0Isd0NBQXdDO0lBQ3hDLHFEQUF5QixDQUFBO0lBQ3pCLGlFQUFxQyxDQUFBO0lBQ3JDLDZEQUFpQyxDQUFBO0lBQ2pDLHFFQUF5QyxDQUFBO0lBQ3pDLHlFQUE2QyxDQUFBO0lBQzdDLHlEQUE2QixDQUFBO0lBQzdCLG1EQUF1QixDQUFBO0lBQ3ZCLDZFQUFpRCxDQUFBO0lBQ2pELHlFQUE2QyxDQUFBO0lBQzdDLG1FQUF1QyxDQUFBO0lBQ3ZDLDJFQUErQyxDQUFBO0lBQy9DLHVEQUEyQixDQUFBO0lBQzNCLCtEQUFtQyxDQUFBO0lBQ25DLHlEQUE2QixDQUFBO0lBQzdCLGlFQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFyQlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQXFCbkM7QUFFRCxNQUFlLHVCQUF1QjtDQUdyQztBQUlELE1BQU0sWUFBYSxTQUFRLHVCQUF1QjtDQUFJO0FBdUR0RCxNQUFNLENBQU4sSUFBWSxhQU9YO0FBUEQsV0FBWSxhQUFhO0lBQ3ZCLHVEQUFPLENBQUE7SUFDUCxxREFBTSxDQUFBO0lBQ04sMkRBQVMsQ0FBQTtJQUNULGlEQUFJLENBQUE7SUFDSix1REFBTyxDQUFBO0lBQ1AsbURBQUssQ0FBQTtBQUNQLENBQUMsRUFQVyxhQUFhLEtBQWIsYUFBYSxRQU94QjtBQUVELE1BQU0sQ0FBTixJQUFZLGlCQVFYO0FBUkQsV0FBWSxpQkFBaUI7SUFDM0IseURBQUksQ0FBQTtJQUNKLCtEQUFvQyxDQUFBO0lBQ3BDLG1FQUF3QyxDQUFBO0lBQ3hDLDZEQUFrQyxDQUFBO0lBQ2xDLHlEQUE4QixDQUFBO0lBQzlCLGdFQUFvQyxDQUFBO0lBQ3BDLHdEQUFvQyxDQUFBO0FBQ3RDLENBQUMsRUFSVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBUTVCO0FBRUQsTUFBTSxDQUFOLElBQVksYUFLWDtBQUxELFdBQVksYUFBYTtJQUN2QixnQ0FBZSxDQUFBO0lBQ2YsZ0NBQWUsQ0FBQTtJQUNmLDRCQUFXLENBQUE7SUFDWCxvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsYUFBYSxLQUFiLGFBQWEsUUFLeEI7QUF1REQsTUFBTSxDQUFOLElBQVksUUFJWDtBQUpELFdBQVksUUFBUTtJQUNsQix1Q0FBSSxDQUFBO0lBQ0osNkNBQU8sQ0FBQTtJQUNQLG1DQUFFLENBQUE7QUFDSixDQUFDLEVBSlcsUUFBUSxLQUFSLFFBQVEsUUFJbkI7QUFFRCxNQUFNLENBQU4sSUFBWSxJQXNEWDtBQXRERCxXQUFZLElBQUk7SUFDZCxvQ0FBVyxDQUFBO0lBQ1gsZ0NBQVMsQ0FBQTtJQUNULDhCQUFRLENBQUE7SUFDUiw4QkFBUSxDQUFBO0lBQ1Isa0NBQVUsQ0FBQTtJQUNWLGdDQUFTLENBQUE7SUFDVCxnQ0FBUyxDQUFBO0lBQ1QsOEJBQVEsQ0FBQTtJQUNSLGtDQUFVLENBQUE7SUFDVixrQ0FBVSxDQUFBO0lBQ1YsZ0NBQVMsQ0FBQTtJQUNULDBDQUFjLENBQUE7SUFDZCxzQ0FBWSxDQUFBO0lBQ1osNENBQWUsQ0FBQTtJQUNmLDBDQUFjLENBQUE7SUFDZCw2QkFBTyxDQUFBO0lBQ1AsMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTiwwQkFBTSxDQUFBO0lBQ04sMEJBQU0sQ0FBQTtJQUNOLDBCQUFNLENBQUE7SUFDTixrQ0FBVSxDQUFBO0lBQ1Ysb0NBQVcsQ0FBQTtJQUNYLG9DQUFXLENBQUE7SUFDWCx5Q0FBYSxDQUFBO0lBQ2IsMkNBQWUsQ0FBQTtJQUNmLDZDQUFnQixDQUFBO0lBQ2hCLHFEQUFvQixDQUFBO0lBQ3BCLCtDQUFpQixDQUFBO0lBQ2pCLGtDQUFVLENBQUE7SUFDViw4QkFBUSxDQUFBO0lBQ1Isc0NBQVksQ0FBQTtBQUNkLENBQUMsRUF0RFcsSUFBSSxLQUFKLElBQUksUUFzRGYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVEhSRUUsIHsgU2NlbmUgfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IERpY3QgfSBmcm9tICcuLi8uLi9jb3JlL3NyYyc7XHJcblxyXG4vKipcclxuICogVGhlIGJhc2Ugb2YgYWxsIGBTY2VuZUNvbXBvbmVudGAgY3JlYXRlZCB3aXRoIHRoZSBzZGsuXHJcbiAqIEFsbCBwcm9wZXJ0aWVzIG9mIHRoaXMgY2xhc3MgYXJlIGFsd2F5cyBhdmFpbGFibGUgdG8gYWxsIGNvbXBvbmVudHMgZ2VuZXJhdGVkIHRocm91Z2ggdGhlIHNkay5cclxuICogVGhlc2UgcHJvcGVydGllcyBzaG91bGQgYWxsIGJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIHNob3VsZCBub3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIHN1YmNsYXNzLlxyXG4gKi9cclxuYWJzdHJhY3QgY2xhc3MgU2NlbmVDb21wb25lbnRQcml2YXRlIHtcclxuICAvKipcclxuICAgKiBAcmVzZXJ2ZWRcclxuICAgKiBUaGUgbmFtZSByZWdpc3RlcmVkIHRvIHRoZSBmYWN0b3J5IHVzZWQgdG8gZ2VuZXJhdGUgdGhpcyBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZGVjbGFyZSByZWFkb25seSBjb21wb25lbnRUeXBlOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEByZXNlcnZlZFxyXG4gICAqIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHRoYXQgdGhpcyBjb21wb25lbnQgY29tcHV0ZXMuIEV2ZXJ5IGNvbXBvbmVudCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYG91dHB1dHMuY29sbGlkZXJgIGFuZCBgb3V0cHV0cy5vYmplY3RSb290YC5cclxuICAgKiBUaGlzIGRpY3Rpb25hcnkgaXMgb2JzZXJ2YWJsZSBhbmQgY2FuIGJlIHRoZSBzb3VyY2Ugb2YgYSBiaW5kIHRhcmdldC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGRlY2xhcmUgb3V0cHV0czogQ29tcG9uZW50T3V0cHV0O1xyXG5cclxuICAvKipcclxuICAgKiBAcmVzZXJ2ZWRcclxuICAgKiBBIGRpY3Rpb25hcnkgb2YgZXZlbnRzIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoaXMgY29tcG9uZW50J3MgYG9uRXZlbnRgLiBFdmVyeSBjb21wb25lbnQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGFsbCBvZiB0aGUgYEludGVyYWN0aW9uU2VsZWN0aW9uYCBrZXlzOlxyXG4gICAqICBgZXZlbnRzW0ludGVyYWN0aW9uU2VsZWN0aW9uLkNMSUNLXWAsIGBldmVudHNbSW50ZXJhY3Rpb25TZWxlY3Rpb24uSE9WRVJdYCwgYGV2ZW50c1tJbnRlcmFjdGlvblNlbGVjdGlvbi5EUkFHXWBcclxuICAgKiBOb3RlOiByZWdpc3RlcmluZyB0byByZWNlaXZlIGBJbnRlcmFjdGlvblNlbGVjdGlvbi5IT1ZFUmAgd2lsbCBwcm9kdWNlIGJvdGggYEludGVyYWN0aW9uVHlwZS5IT1ZFUmAgYW5kIGBJbnRlcmFjdGlvblR5cGUuVU5IT1ZFUmAgaW4gYG9uRXZlbnRgLlxyXG4gICAqL1xyXG4gIGRlY2xhcmUgZXZlbnRzOiBEaWN0PGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBAcmVzZXJ2ZWRcclxuICAgKiBUaGUgY29udGV4dCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgZnJhbWV3b3JrLCBlLmcuIFRIUkVFLmpzLlxyXG4gICAqL1xyXG4gIGRlY2xhcmUgY29udGV4dDogQ29tcG9uZW50Q29udGV4dDtcclxuXHJcbiAgLyoqXHJcbiAgICogQHJlc2VydmVkXHJcbiAgICogQmluZHMgYHRoaXNbcHJvcF1gIHRvIHRoZSBvdXRwdXQgb2YgYHNyY1tzcmNQcm9wXWAuXHJcbiAgICogV2hlbiB0aGUgdmFsdWUgb2YgYHNyY1tzcmNQcm9wXWAgY2hhbmdlcywgdGhlIHZhbHVlIGlzIHByb3BhZ2F0ZWQgYW5kIHNldHMgYHRoaXNbcHJvcF1gIHRvIHRoZSBzYW1lIHZhbHVlIGF1dG9tYXRpY2FsbHkuXHJcbiAgICovXHJcbiAgZGVjbGFyZSBiaW5kOiAocHJvcDogc3RyaW5nLCBzcmM6IFNjZW5lQ29tcG9uZW50WydvdXRwdXRzJyB8ICdpbnB1dHMnXSwgc3JjUHJvcDoga2V5b2YgU2NlbmVDb21wb25lbnRbJ291dHB1dHMnIHwgJ2lucHV0cyddKSA9PiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBAcmVzZXJ2ZWRcclxuICAgKiBOb3RpZmllcyB0aGlzIGNvbXBvbmVudCBvZiBhbiBgZXZlbnRUeXBlYCB3aGVuIHRoZSBgc3JjYCBDb21wb25lbnQgY2FsbHMgYG5vdGlmeWAgd2l0aCBhIGBzcmNFdmVudFR5cGVgIGV2ZW50XHJcbiAgICovXHJcbiAgZGVjbGFyZSBiaW5kRXZlbnQ6IChldmVudFR5cGU6IHN0cmluZywgc3JjOiBTY2VuZUNvbXBvbmVudCwgc3JjRXZlbnRUeXBlOiBzdHJpbmcpID0+IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEByZXNlcnZlZFxyXG4gICAqIE5vdGlmaWVzIGFueSBldmVudCBiaW5kaW5ncyBvZiBhbiBldmVudCB3aXRoIGBldmVudFR5cGVgIGFuZCBkYXRhIGBldmVudERhdGFgXHJcbiAgICovXHJcbiAgZGVjbGFyZSBub3RpZnk6IChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogdW5rbm93bikgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQHJlc2VydmVkXHJcbiAgICogU3B5IG9uIGEgY29tcG9uZW50J3Mgbm90aWZ5IGZyb20gb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50IHN5c3RlbVxyXG4gICAqL1xyXG4gIGRlY2xhcmUgc3B5T25FdmVudDogKHNweTogSUNvbXBvbmVudEV2ZW50U3B5KSA9PiBJU3Vic2NyaXB0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2NlbmVDb21wb25lbnQgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudFByaXZhdGUge1xyXG4gIC8qKlxyXG4gICAqIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0aGF0IGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICogVGhlIHByb3BlcnRpZXMgY2FuIGJlIGNoYW5nZWQgYnkgYW4gZXh0ZXJuYWwgc291cmNlIGF0IGFueSB0aW1lLiBJdCBpcyB1cCB0byB0aGUgY29tcG9uZW50IHRvIHJlc3BvbmQgYXBwcm9wcmlhdGVseSB0byB0aGUgY2hhbmdlcy5cclxuICAgKiBUaGUgaW5wdXQgcHJvcGVydGllcyBjYW4gYWxzbyBiZSBiaW5kIHRhcmdldHMgdG8gYW5vdGhlciBvYnNlcnZhYmxlIHNvdXJjZSwgZS5nLiB0aGUgb3V0cHV0IHByb3BlcnR5IG9mIGFub3RoZXIgY29tcG9uZW50LlxyXG4gICAqL1xyXG4gIGlucHV0cz86IERpY3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZXZlbnQgaXMgY2FsbGVkIG9uY2UgYWZ0ZXIgdGhlIHNjZW5lIG5vZGUgaXRzIGF0dGFjaGVkIHRvIGhhcyBzdGFydGVkLlxyXG4gICAqL1xyXG4gIG9uSW5pdD8oKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBldmVudCBpcyBjYWxsZWQgYXQgbW9zdCBvbmNlIHBlciBmcmFtZSB3aGVuIHRoZXJlIGFyZSBldmVudHMgb24gdGhpcyBjb21wb25lbnQuXHJcbiAgICogQW55IG9mIHRoZSBpbnRlcmFjdGlvbiB0eXBlcyBzcGVjaWZpZWQgaW4gYHRoaXMuaW50ZXJhY3Rpb25zYCBvciBhIGNhbGwgdG8gbm90aWZ5IGZvciBhIGJvdW5kIGV2ZW50IHdpbGwgdHJpZ2dlciB0aGlzIGV2ZW50LlxyXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgQ29tcG9uZW50SW50ZXJhY3Rpb25UeXBlfSBldmVudFR5cGUgVGhlIGV2ZW50IHR5cGVcclxuICAgKiBAcHJvcGVydHkge3Vua25vd259IGV2ZW50RGF0YSBUaGUgZGF0YSBwYXlsb2FkIG9mIHRoZSBldmVudFxyXG4gICAqL1xyXG4gIG9uRXZlbnQ/KGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE6IHVua25vd24pOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhbiBpbnB1dCBwcm9wZXJ0eSBoYXMgY2hhbmdlZC5cclxuICAgKiBJdCB3aWxsIGJlIGNhbGxlZCBhdCBtb3N0IG9uY2UgYSBmcmFtZS5cclxuICAgKi9cclxuICBvbklucHV0c1VwZGF0ZWQ/KHByZXZpb3VzSW5wdXRzOiB0aGlzWydpbnB1dHMnXSk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZXZlbnQgaXMgY2FsbGVkIG9uY2UgYSBmcmFtZSBhZnRlciBpbnB1dCBjaGFuZ2VzIGhhdmUgYmVlbiBkZXRlY3RlZC5cclxuICAgKi9cclxuICBvblRpY2s/KHRpY2tEZWx0YTogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQHJlc2VydmVkXHJcbiAgICogQSBkaWN0aW9uYXJ5IG9mIGV2ZW50cyB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGlzIGNvbXBvbmVudCdzIGBvbkV2ZW50YC4gRXZlcnkgY29tcG9uZW50IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbGwgb2YgdGhlIGBJbnRlcmFjdGlvblNlbGVjdGlvbmAga2V5czpcclxuICAgKiAgYGV2ZW50c1tJbnRlcmFjdGlvblNlbGVjdGlvbi5DTElDS11gLCBgZXZlbnRzW0ludGVyYWN0aW9uU2VsZWN0aW9uLkhPVkVSXWAsIGBldmVudHNbSW50ZXJhY3Rpb25TZWxlY3Rpb24uRFJBR11gXHJcbiAgICogTm90ZTogcmVnaXN0ZXJpbmcgdG8gcmVjZWl2ZSBgSW50ZXJhY3Rpb25TZWxlY3Rpb24uSE9WRVJgIHdpbGwgcHJvZHVjZSBib3RoIGBJbnRlcmFjdGlvblR5cGUuSE9WRVJgIGFuZCBgSW50ZXJhY3Rpb25UeXBlLlVOSE9WRVJgIGluIGBvbkV2ZW50YC5cclxuICAgKi9cclxuICBvdmVycmlkZSBldmVudHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAqIEByZXNlcnZlZFxyXG4gICogQSBkaWN0aW9uYXJ5IG9mIGV2ZW50cyB0aGF0IHdpbGwgYmUgZW1pdHRlZCBieSB0aGlzIGNvbXBvbmVudC5cclxuICAqL1xyXG4gIGVtaXRzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZXZlbnQgaXMgY2FsbGVkIG9uY2UgcmlnaHQgYmVmb3JlIHRoZSBzY2VuZSBub2RlIGhhcyBzdG9wcGVkLlxyXG4gICAqL1xyXG4gIG9uRGVzdHJveT8oKTogdm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgbm9kZSBvZiBhIHNjZW5lIGdyYXBoLlxyXG4gKiBBZ2dyZWdhdGVzIGBTY2VuZUNvbXBvbmVudGAgYXMgY2hpbGRyZW4uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElTY2VuZU5vZGUge1xyXG4gIC8qKlxyXG4gICAqIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBwcm92aWRlZCBieSB0aGUgdXNlci5cclxuICAgKi9cclxuICBuYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgbm9kZS5cclxuICAgKiBUaGUgcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlIHRyYW5zZm9ybXMgYXJlIGFwcGxpZWQgaW4gc2NhbGUsIHF1YXRlcm5pb24sIHRoZW4gc2NhbGUgb3JkZXIuIChzYW1lIGFzIFRIUkVFLmpzKVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBUSFJFRS5WZWN0b3IzO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgb3JpZW50YXRpb24gb2YgdGhlIG5vZGUuXHJcbiAgICogVGhlIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBzY2FsZSB0cmFuc2Zvcm1zIGFyZSBhcHBsaWVkIGluIHNjYWxlLCBxdWF0ZXJuaW9uLCB0aGVuIHNjYWxlIG9yZGVyLiAoc2FtZSBhcyBUSFJFRS5qcylcclxuICAgKi9cclxuICByZWFkb25seSBxdWF0ZXJuaW9uOiBUSFJFRS5RdWF0ZXJuaW9uO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgc2NhbGUgb2YgdGhlIG5vZGUuXHJcbiAgICogVGhlIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBzY2FsZSB0cmFuc2Zvcm1zIGFyZSBhcHBsaWVkIGluIHNjYWxlLCBxdWF0ZXJuaW9uLCB0aGVuIHNjYWxlIG9yZGVyLiAoc2FtZSBhcyBUSFJFRS5qcylcclxuICAgKi9cclxuICByZWFkb25seSBzY2FsZTogVEhSRUUuVmVjdG9yMztcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuZCBhZGQgYSBjaGlsZCBjb21wb25lbnQgdG8gdGhpcyBub2RlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZhY3RvcnkgVGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmYWN0b3J5IHRvIGdlbmVyYXRlIGEgYFNjZW5lQ29tcG9uZW50YFxyXG4gICAqIEBwYXJhbSBpbml0aWFsSW5wdXRzIEFuIGluaXRpYWwgc2V0IG9mIGlucHV0cywgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHRvIHRoZSBuZXdseSBjcmVhdGUgYFNjZW5lQ29tcG9uZW50Lm9uSW5pdGBcclxuICAgKi9cclxuICBhZGRDb21wb25lbnQoZmFjdG9yeTogc3RyaW5nLCBpbml0aWFsSW5wdXRzPzogU2NlbmVDb21wb25lbnRbJ2lucHV0cyddKTogU2NlbmVDb21wb25lbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciB0aGUgY29tcG9uZW50cyBhZGRlZCB0byB0aGlzIG5vZGUgdXNpbmcgYSBmb3Itb2YgbG9vcC5cclxuICAgKi9cclxuICBjb21wb25lbnRJdGVyYXRvcigpOiBJdGVyYWJsZUl0ZXJhdG9yPFNjZW5lQ29tcG9uZW50PjtcclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgdGhlIG5vZGUgYW5kIGl0cyBjb21wb25lbnRzLlxyXG4gICAqL1xyXG4gIHN0YXJ0KCk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIG5vZGUgYW5kIGl0cyBjb21wb25lbnRzLlxyXG4gICAqL1xyXG4gIHN0b3AoKTogdm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSB0eXBlcyBvZiB0aGUgSW50ZXJhY3Rpb24gZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIHJlZ2lzdGVyZWQgYEludGVyYWN0aW9uU2VsZWN0aW9uYFxyXG4gKi9cclxuZXhwb3J0IGVudW0gQ29tcG9uZW50SW50ZXJhY3Rpb25UeXBlIHtcclxuICAvKiogQ0xJQ0sgZXZlbnRzICovXHJcbiAgQ0xJQ0sgPSAnSU5URVJBQ1RJT04uQ0xJQ0snLFxyXG4gIC8qKiBIT1ZFUiBldmVudHMgKi9cclxuICBIT1ZFUiA9ICdJTlRFUkFDVElPTi5IT1ZFUicsXHJcbiAgLyoqIERSQUcgZXZlbnRzIChtb3VzZWRvd24gdGhlbiBtb3ZlKSAqL1xyXG4gIERSQUcgPSAnSU5URVJBQ1RJT04uRFJBRycsXHJcbiAgRFJBR19CRUdJTiA9ICdJTlRFUkFDVElPTi5EUkFHX0JFR0lOJyxcclxuICBEUkFHX0VORCA9ICdJTlRFUkFDVElPTi5EUkFHX0VORCcsXHJcbiAgUE9JTlRFUl9NT1ZFID0gJ0lOVEVSQUNUSU9OLlBPSU5URVJfTU9WRScsXHJcbiAgUE9JTlRFUl9CVVRUT04gPSAnSU5URVJBQ1RJT04uUE9JTlRFUl9CVVRUT04nLFxyXG4gIFNDUk9MTCA9ICdJTlRFUkFDVElPTi5TQ1JPTEwnLFxyXG4gIEtFWSA9ICdJTlRFUkFDVElPTi5LRVknLFxyXG4gIExPTkdfUFJFU1NfU1RBUlQgPSAnSU5URVJBQ1RJT04uTE9OR19QUkVTU19TVEFSVCcsXHJcbiAgTE9OR19QUkVTU19FTkQgPSAnSU5URVJBQ1RJT04uTE9OR19QUkVTU19FTkQnLFxyXG4gIE1VTFRJX1NXSVBFID0gJ0lOVEVSQUNUSU9OLk1VTFRJX1NXSVBFJyxcclxuICBNVUxUSV9TV0lQRV9FTkQgPSAnSU5URVJBQ1RJT04uTVVMVElfU1dJUEVfRU5EJyxcclxuICBQSU5DSCA9ICdJTlRFUkFDVElPTi5QSU5DSCcsXHJcbiAgUElOQ0hfRU5EID0gJ0lOVEVSQUNUSU9OLlBJTkNIX0VORCcsXHJcbiAgUk9UQVRFID0gJ0lOVEVSQUNUSU9OLlJPVEFURScsXHJcbiAgUk9UQVRFX0VORCA9ICdJTlRFUkFDVElPTi5ST1RBVEVfRU5EJyxcclxufVxyXG5cclxuYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50T3V0cHV0UmVzZXJ2ZWQge1xyXG4gIGRlY2xhcmUgb2JqZWN0Um9vdDogVEhSRUUuT2JqZWN0M0QgfCBudWxsO1xyXG4gIGRlY2xhcmUgY29sbGlkZXI6IFRIUkVFLk9iamVjdDNEIHwgbnVsbDtcclxufVxyXG5cclxuLy8gSGFjayBhcm91bmQgdGhlIHR5cGUgc3lzdGVtIHRvIGdldCBhIGNsZWFuZXIgaW50ZXJmYWNlIGFyb3VuZCBgQ29tcG9uZW50T3V0cHV0YFxyXG5pbnRlcmZhY2UgQ29tcG9uZW50T3V0IGV4dGVuZHMgRGljdCB7fVxyXG5jbGFzcyBDb21wb25lbnRPdXQgZXh0ZW5kcyBDb21wb25lbnRPdXRwdXRSZXNlcnZlZCAge31cclxuXHJcbi8qKlxyXG4gKiBBIGdlbmVyYWwtdXNlIGJhZyBvZiBwcm9wZXJ0aWVzLlxyXG4gKiBBdCBhIG1pbmltdW0sIGl0IGhhcyBgb2JqZWN0Um9vdGAgYW5kIGBjb2xsaWRlcmAgYXV0b21hdGljYWxseSBkZWZpbmVkLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29tcG9uZW50T3V0cHV0ID0gQ29tcG9uZW50T3V0O1xyXG5cclxuLyoqXHJcbiAqIFRoZSBjb250ZXh0IG9mIGEgY29tcG9uZW50IChhdmFpbGFibGUgYXMgYHRoaXMuY29udGV4dGApIGluIGEgYFNjZW5lQ29tcG9uZW50YCBzdWJjbGFzcy5cclxuICogQWNjZXNzIHRvIHRoZSByb290IGBJU2NlbmVOb2RlYCBhbmQgdGhlIFRIUkVFLmpzIGFyZSBhdmFpbGFibGUuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb21wb25lbnRDb250ZXh0ID0ge1xyXG4gIHRocmVlOiB0eXBlb2YgVEhSRUU7XHJcbiAgcm9vdDogSVNjZW5lTm9kZTtcclxuICByZW5kZXJlcjogVEhSRUUuV2ViR0xSZW5kZXJlcjtcclxuICB1c2VyOiBEaWN0O1xyXG4gIHNjZW5lOiBTY2VuZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHJheWNhc3QgaW50ZXJzZWN0aW9uIHdpdGggYSBtZXNoXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJbnRlcnNlY3QgPSB7XHJcbiAgcG9pbnQ6IFRIUkVFLlZlY3RvcjM7XHJcbiAgbm9ybWFsOiBUSFJFRS5WZWN0b3IzO1xyXG4gIGNvbGxpZGVyOiBUSFJFRS5PYmplY3QzRDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHNweSB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhIGNvbXBvbmVudCB1c2luZyBgc3B5T25FdmVudGBcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBvbmVudEV2ZW50U3B5PFQgPSB1bmtub3duPiB7XHJcbiAgcmVhZG9ubHkgZXZlbnRUeXBlOiBzdHJpbmc7XHJcbiAgb25FdmVudChldmVudERhdGE/OiBUKTogdm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIG9iamVjdCByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgYSBzcHkgZnJvbSBhIGNvbXBvbmVudCdzIGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpcHRpb24ge1xyXG4gIGNhbmNlbCgpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWZWN0b3IyIHtcclxuICB4OiBudW1iZXI7XHJcbiAgeTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWZWN0b3IzIHtcclxuICB4OiBudW1iZXI7XHJcbiAgeTogbnVtYmVyO1xyXG4gIHo6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUG9pbnRlckJ1dHRvbiB7XHJcbiAgUFJJTUFSWSxcclxuICBNSURETEUsXHJcbiAgU0VDT05EQVJZLFxyXG4gIEJBQ0ssXHJcbiAgRk9SV0FSRCxcclxuICBDT1VOVCxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUG9pbnRlckJ1dHRvbk1hc2sge1xyXG4gIE5PTkUsXHJcbiAgUFJJTUFSWSA9IDEgPDwgUG9pbnRlckJ1dHRvbi5QUklNQVJZLFxyXG4gIFNFQ09OREFSWSA9IDEgPDwgUG9pbnRlckJ1dHRvbi5TRUNPTkRBUlksXHJcbiAgTUlERExFID0gMSA8PCBQb2ludGVyQnV0dG9uLk1JRERMRSxcclxuICBCQUNLID0gMSA8PCBQb2ludGVyQnV0dG9uLkJBQ0ssXHJcbiAgRk9SV0FSRCA9IDEgPDwgUG9pbnRlckJ1dHRvbi5GT1JXQVJELFxyXG4gIEFMTCA9ICgxIDw8IFBvaW50ZXJCdXR0b24uQ09VTlQpIC0gMSxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUG9pbnRlckRldmljZSB7XHJcbiAgTU9VU0UgPSAnbW91c2UnLFxyXG4gIFRPVUNIID0gJ3RvdWNoJyxcclxuICBQRU4gPSAncGVuJyxcclxuICBHQU1FUEFEID0gJ2dhbWVwYWQnLFxyXG59XHJcblxyXG4vKipcclxuICogRmlyZWQgb24gZXZlcnkgbW91c2UgZG93biwgcHJvdmlkZXMgY3VycmVudCBwb3NpdGlvbi9idXR0b25zIGRvd24uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERyYWdCZWdpbkV2ZW50IHtcclxuICAvKiogQ3VycmVudCBwb3NpdGlvbiAqL1xyXG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBJVmVjdG9yMjtcclxuICAvKiogQnV0dG9ucyBkb3duIGR1cmluZyBldmVudCAqL1xyXG4gIHJlYWRvbmx5IGJ1dHRvbnM6IFBvaW50ZXJCdXR0b25NYXNrO1xyXG59XHJcblxyXG4vKipcclxuICogRmlyZWQgb25seSBhZnRlciB0aGUgcG9pbnRlciBoYXMgbW92ZWQgZmFyIGVub3VnaCBmcm9tIERyYWdCZWdpbkV2ZW50XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERyYWdFdmVudCB7XHJcbiAgLyoqIEN1cnJlbnQgcG9zaXRpb24gKi9cclxuICByZWFkb25seSBwb3NpdGlvbjogSVZlY3RvcjI7XHJcbiAgLyoqIERlbHRhIG1vdmVkIHNpbmNlIGxhc3QgZHJhZyBldmVudCAqL1xyXG4gIHJlYWRvbmx5IGRlbHRhOiBJVmVjdG9yMjtcclxuICAvKiogQnV0dG9ucyBkb3duIGR1cmluZyBldmVudCAqL1xyXG4gIHJlYWRvbmx5IGJ1dHRvbnM6IFBvaW50ZXJCdXR0b25NYXNrO1xyXG59XHJcblxyXG4vKipcclxuICogRmlyZWQgb24gZXZlcnkgbW91c2UgdXAsIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIERyYWdCZWdpbiBhbmQgY3VycmVudCBwb3NpdGlvbnNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJhZ0VuZEV2ZW50IGV4dGVuZHMgRHJhZ0V2ZW50IHtcclxuICAvKiogZHVyYXRpb24gc2luY2UgbGFzdCBEcmFnRXZlbnQgKi9cclxuICByZWFkb25seSB0aW1lU2luY2VMYXN0TW92ZTogbnVtYmVyO1xyXG5cclxuICAvKiogVGhlIGRlbHRhIGJldHdlZW4gcG9zaXRpb24sIGFuZCB0aGUgcG9zaXRpb24gZnJvbSBEcmFnQmVnaW5FdmVudCAqL1xyXG4gIHJlYWRvbmx5IGZ1bGxEZWx0YTogSVZlY3RvcjI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnRlck1vdmVFdmVudCB7XHJcbiAgICByZWFkb25seSBpZDogbnVtYmVyO1xyXG4gICAgcmVhZG9ubHkgcG9zaXRpb246IElWZWN0b3IyO1xyXG4gICAgcmVhZG9ubHkgYnV0dG9uczogUG9pbnRlckJ1dHRvbk1hc2s7XHJcbiAgICByZWFkb25seSBkZXZpY2U6IFBvaW50ZXJEZXZpY2U7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnRlckJ1dHRvbkV2ZW50IHtcclxuICAgIHJlYWRvbmx5IGlkOiBudW1iZXI7XHJcbiAgICByZWFkb25seSBwb3NpdGlvbjogSVZlY3RvcjI7XHJcbiAgICByZWFkb25seSBidXR0b246IFBvaW50ZXJCdXR0b247XHJcbiAgICByZWFkb25seSBkb3duOiBib29sZWFuO1xyXG4gICAgcmVhZG9ubHkgZGV2aWNlOiBQb2ludGVyRGV2aWNlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbEV2ZW50IHtcclxuICByZWFkb25seSBwb3NpdGlvbjogSVZlY3RvcjI7XHJcbiAgcmVhZG9ubHkgZGVsdGE6IElWZWN0b3IyO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBLZXlTdGF0ZSB7XHJcbiAgRE9XTixcclxuICBQUkVTU0VELFxyXG4gIFVQLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBLZXlze1xyXG4gIEVTQ0FQRSA9IDI3LFxyXG4gIFpFUk8gPSA0OCxcclxuICBPTkUgPSA0OSxcclxuICBUV08gPSA1MCxcclxuICBUSFJFRSA9IDUxLFxyXG4gIEZPVVIgPSA1MixcclxuICBGSVZFID0gNTMsXHJcbiAgU0lYID0gNTQsXHJcbiAgU0VWRU4gPSA1NSxcclxuICBFSUdIVCA9IDU2LFxyXG4gIE5JTkUgPSA1NyxcclxuICBMRUZUQVJST1cgPSAzNyxcclxuICBVUEFSUk9XID0gMzgsXHJcbiAgUklHSFRBUlJPVyA9IDM5LFxyXG4gIERPV05BUlJPVyA9IDQwLFxyXG4gIFRBQiA9IDksXHJcbiAgQSA9IDY1LFxyXG4gIEIgPSA2NixcclxuICBDID0gNjcsXHJcbiAgRCA9IDY4LFxyXG4gIEUgPSA2OSxcclxuICBGID0gNzAsXHJcbiAgRyA9IDcxLFxyXG4gIEggPSA3MixcclxuICBJID0gNzMsXHJcbiAgSiA9IDc0LFxyXG4gIEsgPSA3NSxcclxuICBMID0gNzYsXHJcbiAgTSA9IDc3LFxyXG4gIE4gPSA3OCxcclxuICBPID0gNzksXHJcbiAgUCA9IDgwLFxyXG4gIFEgPSA4MSxcclxuICBSID0gODIsXHJcbiAgUyA9IDgzLFxyXG4gIFQgPSA4NCxcclxuICBVID0gODUsXHJcbiAgViA9IDg2LFxyXG4gIFcgPSA4NyxcclxuICBYID0gODgsXHJcbiAgWSA9IDg5LFxyXG4gIFogPSA5MCxcclxuICBTUEFDRSA9IDMyLFxyXG4gIFJFVFVSTiA9IDEzLFxyXG4gIERFTEVURSA9IDQ2LFxyXG4gIEJBQ0tTUEFDRSA9IDgsXHJcbiAgU0VNSUNPTE9OID0gMTg2LFxyXG4gIFBMVVNFUVVBTFMgPSAxODcsXHJcbiAgREFTSFVOREVSU0NPUkUgPSAxODksXHJcbiAgT1BFTkJSQUNLRVQgPSAyMTksXHJcbiAgU0hJRlQgPSAxNixcclxuICBBTFQgPSAxOCxcclxuICBDT05UUk9MID0gMTcsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS2V5RXZlbnQge1xyXG4gIGtleTogS2V5cztcclxuICBzdGF0ZTogS2V5U3RhdGU7XHJcbiAgbW9kaWZpZXJzOiB7XHJcbiAgICBhbHRLZXk6IGJvb2xlYW4sXHJcbiAgICBzaGlmdEtleTogYm9vbGVhbixcclxuICAgIGN0cmxLZXk6IGJvb2xlYW5cclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExvbmdQcmVzc1N0YXJ0RXZlbnQge1xyXG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBJVmVjdG9yMjtcclxuICByZWFkb25seSBidXR0b25zOiBQb2ludGVyQnV0dG9uTWFzaztcclxuICByZWFkb25seSB0aHJlc2hvbGQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb25nUHJlc3NFbmRFdmVudCB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVN3aXBlRXZlbnQge1xyXG4gIHJlYWRvbmx5IHBvaW50ZXJDb3VudDogbnVtYmVyO1xyXG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBJVmVjdG9yMjtcclxuICByZWFkb25seSBkZWx0YTogSVZlY3RvcjI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlTd2lwZUVuZEV2ZW50IGV4dGVuZHMgTXVsdGlTd2lwZUV2ZW50IHtcclxuICByZWFkb25seSB0aW1lU2luY2VMYXN0TW92ZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBpbmNoRXZlbnQge1xyXG4gIHJlYWRvbmx5IHBpbmNoRGVsdGE6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQaW5jaEVuZEV2ZW50IGV4dGVuZHMgUGluY2hFdmVudCB7XHJcbiAgcmVhZG9ubHkgdGltZVNpbmNlTGFzdE1vdmU6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSb3RhdGVFdmVudCB7XHJcbiAgcmVhZG9ubHkgcm90YXRlRGVsdGE6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSb3RhdGVFbmRFdmVudCBleHRlbmRzIFJvdGF0ZUV2ZW50IHtcclxuICByZWFkb25seSB0aW1lU2luY2VMYXN0TW92ZTogbnVtYmVyO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,145 @@
1
+ import { SceneComponent, ComponentInteractionType } from '../SceneComponent';
2
+ const makeMaterialOpacityClip = function (THREE, time, startOpacity, endOpacity) {
3
+ const track = new THREE.NumberKeyframeTrack('.material.opacity', [0, time], [startOpacity, endOpacity]);
4
+ return new THREE.AnimationClip(null, time, [track]);
5
+ };
6
+ const playAnimation = function (THREE, mixer, clip, root) {
7
+ const action = mixer.clipAction(clip, root);
8
+ action.loop = THREE.LoopOnce;
9
+ action.clampWhenFinished = true;
10
+ action.play();
11
+ };
12
+ export class OrientedBox extends SceneComponent {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.root = null;
16
+ this.box = null;
17
+ this.edges = null;
18
+ this.boxMixer = null;
19
+ this.clipVisible = null;
20
+ this.clipNotVisible = null;
21
+ this.edgesClipVisible = null;
22
+ this.edgesClipNotVisible = null;
23
+ this.inputs = {
24
+ size: { x: 1, y: 1, z: 1 },
25
+ color: 0xffff00,
26
+ visible: true,
27
+ opacity: 0.1,
28
+ lineOpacity: 1,
29
+ lineColor: 0xffffff,
30
+ transitionTime: 0.4,
31
+ };
32
+ this.events = {
33
+ [ComponentInteractionType.CLICK]: true,
34
+ [ComponentInteractionType.HOVER]: true,
35
+ [ComponentInteractionType.DRAG]: false,
36
+ };
37
+ }
38
+ onInit() {
39
+ const THREE = this.context.three;
40
+ this.root = new THREE.Object3D();
41
+ this.outputs.objectRoot = this.root;
42
+ this.outputs.collider = this.root;
43
+ this.makeBox();
44
+ // must be done after the box is created
45
+ this.boxMixer = new THREE.AnimationMixer(this.box);
46
+ this.clipVisible = makeMaterialOpacityClip(THREE, this.inputs.transitionTime, 0, this.inputs.opacity);
47
+ this.clipNotVisible = makeMaterialOpacityClip(THREE, this.inputs.transitionTime, this.inputs.opacity, 0);
48
+ this.edgesClipVisible = makeMaterialOpacityClip(THREE, this.inputs.transitionTime, 0, 1);
49
+ this.edgesClipNotVisible = makeMaterialOpacityClip(THREE, this.inputs.transitionTime, 1, 0);
50
+ }
51
+ onEvent(interactionType, eventData) {
52
+ if (interactionType === ComponentInteractionType.CLICK) {
53
+ this.notify(ComponentInteractionType.CLICK, {
54
+ type: interactionType,
55
+ node: this.context.root,
56
+ component: this,
57
+ });
58
+ }
59
+ if (interactionType === ComponentInteractionType.HOVER) {
60
+ this.notify(ComponentInteractionType.HOVER, {
61
+ hover: eventData.hover
62
+ });
63
+ }
64
+ }
65
+ makeBox() {
66
+ const THREE = this.context.three;
67
+ if (this.box) {
68
+ this.root.remove(this.box);
69
+ this.box.material.dispose();
70
+ this.box.geometry.dispose();
71
+ this.box = null;
72
+ }
73
+ if (this.edges) {
74
+ this.root.remove(this.edges);
75
+ this.edges.material.dispose();
76
+ this.edges.geometry.dispose();
77
+ this.edges = null;
78
+ }
79
+ const boxGeometry = new THREE.BoxGeometry(this.inputs.size.x, this.inputs.size.y, this.inputs.size.z);
80
+ var boxMaterial = new THREE.MeshBasicMaterial({
81
+ color: this.inputs.color,
82
+ opacity: this.inputs.opacity,
83
+ depthWrite: false,
84
+ });
85
+ boxMaterial.transparent = true;
86
+ boxMaterial.side = THREE.BackSide;
87
+ boxMaterial.blending = THREE.AdditiveBlending;
88
+ this.box = new THREE.Mesh(boxGeometry, boxMaterial);
89
+ this.root.add(this.box);
90
+ const edgesGeometry = new THREE.EdgesGeometry(boxGeometry);
91
+ this.edges = new THREE.LineSegments(edgesGeometry, new THREE.LineBasicMaterial({
92
+ transparent: true,
93
+ color: this.inputs.lineColor,
94
+ linewidth: 1,
95
+ opacity: this.inputs.lineOpacity,
96
+ }));
97
+ // put the edges object directly in the scene graph so that they dont intercept
98
+ // raycasts. The edges object will need to be removed if this component is destroyed.
99
+ const obj3D = this.context.root.obj3D;
100
+ const worldPos = new this.context.three.Vector3();
101
+ obj3D.getWorldPosition(worldPos);
102
+ this.edges.position.copy(worldPos);
103
+ this.context.scene.add(this.edges);
104
+ }
105
+ onInputsUpdated(oldInputs) {
106
+ const THREE = this.context.three;
107
+ if (oldInputs.visible !== this.inputs.visible) {
108
+ this.boxMixer.stopAllAction();
109
+ if (this.inputs.visible) {
110
+ playAnimation(THREE, this.boxMixer, this.clipVisible);
111
+ playAnimation(THREE, this.boxMixer, this.edgesClipVisible, this.edges);
112
+ }
113
+ else {
114
+ playAnimation(THREE, this.boxMixer, this.clipNotVisible);
115
+ playAnimation(THREE, this.boxMixer, this.edgesClipNotVisible, this.edges);
116
+ }
117
+ }
118
+ if (oldInputs.size.x !== this.inputs.size.x ||
119
+ oldInputs.size.y !== this.inputs.size.y ||
120
+ oldInputs.size.z !== this.inputs.size.z) {
121
+ this.makeBox();
122
+ return;
123
+ }
124
+ if (oldInputs.color !== this.inputs.color) {
125
+ this.box.material.color.set(this.inputs.color);
126
+ }
127
+ if (oldInputs.opacity !== this.inputs.opacity) {
128
+ this.box.material.opacity = this.inputs.opacity;
129
+ }
130
+ if (oldInputs.lineOpacity !== this.inputs.lineOpacity) {
131
+ this.edges.material.opacity = this.inputs.lineOpacity;
132
+ }
133
+ if (oldInputs.lineColor !== this.inputs.lineColor) {
134
+ this.edges.material.color = new THREE.Color(this.inputs.lineColor);
135
+ }
136
+ }
137
+ onTick(delta) {
138
+ this.boxMixer.update(delta / 1000);
139
+ }
140
+ }
141
+ export const orientedBoxType = 'mp.orientedBox';
142
+ export const makeOrientedBox = function () {
143
+ return new OrientedBox();
144
+ };
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JpZW50ZWRCb3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9jb21tb24vc3JjL3Nkay1jb21wb25lbnRzL09yaWVudGVkQm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQWtCekYsTUFBTSx1QkFBdUIsR0FBRyxVQUFTLEtBQVUsRUFBRSxJQUFZLEVBQUUsWUFBb0IsRUFBRSxVQUFrQjtJQUN6RyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLE9BQU8sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLFVBQVMsS0FBVSxFQUFFLEtBQXFCLEVBQUUsSUFBbUIsRUFBRSxJQUFVO0lBQy9GLE1BQU0sTUFBTSxHQUFvQixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDN0IsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxPQUFPLFdBQVksU0FBUSxjQUFjO0lBQS9DOztRQUNVLFNBQUksR0FBb0IsSUFBSSxDQUFDO1FBQzdCLFFBQUcsR0FBZ0IsSUFB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QUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBOEIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDeEU7UUFFRCxJQUFJLFNBQVMsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUE4QixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUM5RTtRQUVELElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQThCLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzNGO0lBQ0gsQ0FBQztJQUVRLE1BQU0sQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUMzQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNoQmFzaWNNYXRlcmlhbCwgTGluZVNlZ21lbnRzLCBPYmplY3QzRCwgQm94R2VvbWV0cnksIE1lc2gsIExpbmVCYXNpY01hdGVyaWFsLCBFZGdlc0dlb21ldHJ5LFxyXG4gIEFuaW1hdGlvbk1peGVyLCBBbmltYXRpb25DbGlwLCBBbmltYXRpb25BY3Rpb24gfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFNjZW5lQ29tcG9uZW50LCBDb21wb25lbnRJbnRlcmFjdGlvblR5cGUsIElTY2VuZU5vZGUgfSBmcm9tICcuLi9TY2VuZUNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcmFjdGlvbkV2ZW50IHtcclxuICB0eXBlOiBDb21wb25lbnRJbnRlcmFjdGlvblR5cGU7XHJcbiAgbm9kZTogSVNjZW5lTm9kZTtcclxuICBjb21wb25lbnQ6IFNjZW5lQ29tcG9uZW50O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSW5wdXRzIHtcclxuICBzaXplOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IH0sXHJcbiAgY29sb3I6IG51bWJlcjtcclxuICB2aXNpYmxlOiBib29sZWFuO1xyXG4gIG9wYWNpdHk6IG51bWJlcjtcclxuICB0cmFuc2l0aW9uVGltZTogbnVtYmVyO1xyXG4gIGxpbmVPcGFjaXR5OiBudW1iZXI7XHJcbiAgbGluZUNvbG9yOiBudW1iZXI7XHJcbn1cclxuXHJcbmNvbnN0IG1ha2VNYXRlcmlhbE9wYWNpdHlDbGlwID0gZnVuY3Rpb24oVEhSRUU6IGFueSwgdGltZTogbnVtYmVyLCBzdGFydE9wYWNpdHk6IG51bWJlciwgZW5kT3BhY2l0eTogbnVtYmVyKTogQW5pbWF0aW9uQ2xpcCB7XHJcbiAgY29uc3QgdHJhY2sgPSBuZXcgVEhSRUUuTnVtYmVyS2V5ZnJhbWVUcmFjaygnLm1hdGVyaWFsLm9wYWNpdHknLCBbMCwgdGltZV0sIFtzdGFydE9wYWNpdHksIGVuZE9wYWNpdHldKTtcclxuICByZXR1cm4gbmV3IFRIUkVFLkFuaW1hdGlvbkNsaXAobnVsbCwgdGltZSwgW3RyYWNrXSk7XHJcbn07XHJcblxyXG5jb25zdCBwbGF5QW5pbWF0aW9uID0gZnVuY3Rpb24oVEhSRUU6IGFueSwgbWl4ZXI6IEFuaW1hdGlvbk1peGVyLCBjbGlwOiBBbmltYXRpb25DbGlwLCByb290PzogYW55KSB7XHJcbiAgY29uc3QgYWN0aW9uOiBBbmltYXRpb25BY3Rpb24gPSBtaXhlci5jbGlwQWN0aW9uKGNsaXAsIHJvb3QpO1xyXG4gIGFjdGlvbi5sb29wID0gVEhSRUUuTG9vcE9uY2U7XHJcbiAgYWN0aW9uLmNsYW1wV2hlbkZpbmlzaGVkID0gdHJ1ZTtcclxuICBhY3Rpb24ucGxheSgpO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgT3JpZW50ZWRCb3ggZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSByb290OiBPYmplY3QzRCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgYm94OiBNZXNoIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBlZGdlczogTGluZVNlZ21lbnRzIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBib3hNaXhlcjogQW5pbWF0aW9uTWl4ZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGNsaXBWaXNpYmxlOiBBbmltYXRpb25DbGlwIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBjbGlwTm90VmlzaWJsZTogQW5pbWF0aW9uQ2xpcCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZWRnZXNDbGlwVmlzaWJsZTogQW5pbWF0aW9uQ2xpcCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZWRnZXNDbGlwTm90VmlzaWJsZTogQW5pbWF0aW9uQ2xpcCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcclxuICAgIHNpemU6IHsgeDogMSwgeTogMSwgejogMSB9LFxyXG4gICAgY29sb3I6IDB4ZmZmZjAwLFxyXG4gICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgIG9wYWNpdHk6IDAuMSxcclxuICAgIGxpbmVPcGFjaXR5OiAxLFxyXG4gICAgbGluZUNvbG9yOiAweGZmZmZmZixcclxuICAgIHRyYW5zaXRpb25UaW1lOiAwLjQsXHJcbiAgfTtcclxuXHJcbiAgb3ZlcnJpZGUgZXZlbnRzID0ge1xyXG4gICAgW0NvbXBvbmVudEludGVyYWN0aW9uVHlwZS5DTElDS106IHRydWUsXHJcbiAgICBbQ29tcG9uZW50SW50ZXJhY3Rpb25UeXBlLkhPVkVSXTogdHJ1ZSxcclxuICAgIFtDb21wb25lbnRJbnRlcmFjdGlvblR5cGUuRFJBR106IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIG92ZXJyaWRlIG9uSW5pdCgpIHtcclxuICAgIGNvbnN0IFRIUkVFID0gdGhpcy5jb250ZXh0LnRocmVlO1xyXG4gICAgdGhpcy5yb290ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLm91dHB1dHMub2JqZWN0Um9vdCA9IHRoaXMucm9vdDtcclxuICAgIHRoaXMub3V0cHV0cy5jb2xsaWRlciA9IHRoaXMucm9vdDtcclxuXHJcbiAgICB0aGlzLm1ha2VCb3goKTtcclxuXHJcbiAgICAvLyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGJveCBpcyBjcmVhdGVkXHJcbiAgICB0aGlzLmJveE1peGVyID0gbmV3IFRIUkVFLkFuaW1hdGlvbk1peGVyKHRoaXMuYm94KTtcclxuICAgIHRoaXMuY2xpcFZpc2libGUgPSBtYWtlTWF0ZXJpYWxPcGFjaXR5Q2xpcChUSFJFRSwgdGhpcy5pbnB1dHMudHJhbnNpdGlvblRpbWUsIDAsIHRoaXMuaW5wdXRzLm9wYWNpdHkpO1xyXG4gICAgdGhpcy5jbGlwTm90VmlzaWJsZSA9IG1ha2VNYXRlcmlhbE9wYWNpdHlDbGlwKFRIUkVFLCB0aGlzLmlucHV0cy50cmFuc2l0aW9uVGltZSwgdGhpcy5pbnB1dHMub3BhY2l0eSwgMCk7XHJcbiAgICB0aGlzLmVkZ2VzQ2xpcFZpc2libGUgPSBtYWtlTWF0ZXJpYWxPcGFjaXR5Q2xpcChUSFJFRSwgdGhpcy5pbnB1dHMudHJhbnNpdGlvblRpbWUsIDAsIDEpO1xyXG4gICAgdGhpcy5lZGdlc0NsaXBOb3RWaXNpYmxlID0gbWFrZU1hdGVyaWFsT3BhY2l0eUNsaXAoVEhSRUUsIHRoaXMuaW5wdXRzLnRyYW5zaXRpb25UaW1lLCAxLCAwKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG9uRXZlbnQoaW50ZXJhY3Rpb25UeXBlOiBDb21wb25lbnRJbnRlcmFjdGlvblR5cGUsIGV2ZW50RGF0YTogdW5rbm93bik6IHZvaWQge1xyXG4gICAgaWYgKGludGVyYWN0aW9uVHlwZSA9PT0gQ29tcG9uZW50SW50ZXJhY3Rpb25UeXBlLkNMSUNLKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5KENvbXBvbmVudEludGVyYWN0aW9uVHlwZS5DTElDSywge1xyXG4gICAgICAgIHR5cGU6IGludGVyYWN0aW9uVHlwZSxcclxuICAgICAgICBub2RlOiB0aGlzLmNvbnRleHQucm9vdCxcclxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGludGVyYWN0aW9uVHlwZSA9PT0gQ29tcG9uZW50SW50ZXJhY3Rpb25UeXBlLkhPVkVSKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5KENvbXBvbmVudEludGVyYWN0aW9uVHlwZS5IT1ZFUiwge1xyXG4gICAgICAgIGhvdmVyOiAoPHtob3ZlcjogYm9vbGVhbjt9PmV2ZW50RGF0YSkuaG92ZXJcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlQm94KCkge1xyXG4gICAgY29uc3QgVEhSRUUgPSB0aGlzLmNvbnRleHQudGhyZWU7XHJcblxyXG4gICAgaWYgKHRoaXMuYm94KSB7XHJcbiAgICAgIHRoaXMucm9vdC5yZW1vdmUodGhpcy5ib3gpO1xyXG4gICAgICAodGhpcy5ib3gubWF0ZXJpYWwgYXMgTWVzaEJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcclxuICAgICAgKHRoaXMuYm94Lmdlb21ldHJ5IGFzIEJveEdlb21ldHJ5KS5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMuYm94ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVkZ2VzKSB7XHJcbiAgICAgIHRoaXMucm9vdC5yZW1vdmUodGhpcy5lZGdlcyk7XHJcbiAgICAgICh0aGlzLmVkZ2VzLm1hdGVyaWFsIGFzIExpbmVCYXNpY01hdGVyaWFsKS5kaXNwb3NlKCk7XHJcbiAgICAgICh0aGlzLmVkZ2VzLmdlb21ldHJ5IGFzIEVkZ2VzR2VvbWV0cnkpLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5lZGdlcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYm94R2VvbWV0cnk6IEJveEdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KHRoaXMuaW5wdXRzLnNpemUueCwgdGhpcy5pbnB1dHMuc2l6ZS55LCB0aGlzLmlucHV0cy5zaXplLnopO1xyXG5cclxuICAgIHZhciBib3hNYXRlcmlhbDogTWVzaEJhc2ljTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXHJcbiAgICAgIG9wYWNpdHk6IHRoaXMuaW5wdXRzLm9wYWNpdHksXHJcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgICBib3hNYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICBib3hNYXRlcmlhbC5zaWRlID0gVEhSRUUuQmFja1NpZGU7XHJcbiAgICBib3hNYXRlcmlhbC5ibGVuZGluZyA9IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmc7XHJcbiAgICB0aGlzLmJveCA9IG5ldyBUSFJFRS5NZXNoKGJveEdlb21ldHJ5LCBib3hNYXRlcmlhbCk7XHJcbiAgICB0aGlzLnJvb3QuYWRkKHRoaXMuYm94KTtcclxuXHJcbiAgICBjb25zdCBlZGdlc0dlb21ldHJ5ID0gbmV3IFRIUkVFLkVkZ2VzR2VvbWV0cnkoYm94R2VvbWV0cnkpO1xyXG4gICAgdGhpcy5lZGdlcyA9IG5ldyBUSFJFRS5MaW5lU2VnbWVudHMoZWRnZXNHZW9tZXRyeSwgbmV3IFRIUkVFLkxpbmVCYXNpY01hdGVyaWFsKHtcclxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgIGNvbG9yOiB0aGlzLmlucHV0cy5saW5lQ29sb3IsXHJcbiAgICAgIGxpbmV3aWR0aDogMSxcclxuICAgICAgb3BhY2l0eTogdGhpcy5pbnB1dHMubGluZU9wYWNpdHksXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gcHV0IHRoZSBlZGdlcyBvYmplY3QgZGlyZWN0bHkgaW4gdGhlIHNjZW5lIGdyYXBoIHNvIHRoYXQgdGhleSBkb250IGludGVyY2VwdFxyXG4gICAgLy8gcmF5Y2FzdHMuIFRoZSBlZGdlcyBvYmplY3Qgd2lsbCBuZWVkIHRvIGJlIHJlbW92ZWQgaWYgdGhpcyBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxyXG4gICAgY29uc3Qgb2JqM0QgPSAodGhpcy5jb250ZXh0LnJvb3QgYXMgYW55KS5vYmozRCBhcyBPYmplY3QzRDtcclxuICAgIGNvbnN0IHdvcmxkUG9zID0gbmV3IHRoaXMuY29udGV4dC50aHJlZS5WZWN0b3IzKCk7XHJcbiAgICBvYmozRC5nZXRXb3JsZFBvc2l0aW9uKHdvcmxkUG9zKTtcclxuICAgIHRoaXMuZWRnZXMucG9zaXRpb24uY29weSh3b3JsZFBvcyk7XHJcbiAgICB0aGlzLmNvbnRleHQuc2NlbmUuYWRkKHRoaXMuZWRnZXMpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25JbnB1dHNVcGRhdGVkKG9sZElucHV0czogSW5wdXRzKSB7XHJcbiAgICBjb25zdCBUSFJFRSA9IHRoaXMuY29udGV4dC50aHJlZTtcclxuXHJcbiAgICBpZiAob2xkSW5wdXRzLnZpc2libGUgIT09IHRoaXMuaW5wdXRzLnZpc2libGUpIHtcclxuICAgICAgdGhpcy5ib3hNaXhlci5zdG9wQWxsQWN0aW9uKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbnB1dHMudmlzaWJsZSkge1xyXG4gICAgICAgIHBsYXlBbmltYXRpb24oVEhSRUUsIHRoaXMuYm94TWl4ZXIsIHRoaXMuY2xpcFZpc2libGUpO1xyXG4gICAgICAgIHBsYXlBbmltYXRpb24oVEhSRUUsIHRoaXMuYm94TWl4ZXIsIHRoaXMuZWRnZXNDbGlwVmlzaWJsZSwgdGhpcy5lZGdlcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcGxheUFuaW1hdGlvbihUSFJFRSwgdGhpcy5ib3hNaXhlciwgdGhpcy5jbGlwTm90VmlzaWJsZSk7XHJcbiAgICAgICAgcGxheUFuaW1hdGlvbihUSFJFRSwgdGhpcy5ib3hNaXhlciwgdGhpcy5lZGdlc0NsaXBOb3RWaXNpYmxlLCB0aGlzLmVkZ2VzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRJbnB1dHMuc2l6ZS54ICE9PSB0aGlzLmlucHV0cy5zaXplLnggfHxcclxuICAgICAgICBvbGRJbnB1dHMuc2l6ZS55ICE9PSB0aGlzLmlucHV0cy5zaXplLnkgfHxcclxuICAgICAgICBvbGRJbnB1dHMuc2l6ZS56ICE9PSAgdGhpcy5pbnB1dHMuc2l6ZS56KSB7XHJcbiAgICAgIHRoaXMubWFrZUJveCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9sZElucHV0cy5jb2xvciAhPT0gdGhpcy5pbnB1dHMuY29sb3IpIHtcclxuICAgICAgKHRoaXMuYm94Lm1hdGVyaWFsIGFzIE1lc2hCYXNpY01hdGVyaWFsKS5jb2xvci5zZXQodGhpcy5pbnB1dHMuY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRJbnB1dHMub3BhY2l0eSAhPT0gdGhpcy5pbnB1dHMub3BhY2l0eSkge1xyXG4gICAgICAodGhpcy5ib3gubWF0ZXJpYWwgYXMgTWVzaEJhc2ljTWF0ZXJpYWwpLm9wYWNpdHkgPSB0aGlzLmlucHV0cy5vcGFjaXR5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRJbnB1dHMubGluZU9wYWNpdHkgIT09IHRoaXMuaW5wdXRzLmxpbmVPcGFjaXR5KSB7XHJcbiAgICAgICh0aGlzLmVkZ2VzLm1hdGVyaWFsIGFzIExpbmVCYXNpY01hdGVyaWFsKS5vcGFjaXR5ID0gdGhpcy5pbnB1dHMubGluZU9wYWNpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9sZElucHV0cy5saW5lQ29sb3IgIT09IHRoaXMuaW5wdXRzLmxpbmVDb2xvcikge1xyXG4gICAgICAodGhpcy5lZGdlcy5tYXRlcmlhbCBhcyBMaW5lQmFzaWNNYXRlcmlhbCkuY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IodGhpcy5pbnB1dHMubGluZUNvbG9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG9uVGljayhkZWx0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmJveE1peGVyLnVwZGF0ZShkZWx0YS8xMDAwKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBvcmllbnRlZEJveFR5cGUgPSAnbXAub3JpZW50ZWRCb3gnO1xyXG5leHBvcnQgY29uc3QgbWFrZU9yaWVudGVkQm94ID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIG5ldyBPcmllbnRlZEJveCgpO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './observable/ObservableValue';
2
+ export * from './subscription/ISubscription';
3
+ export * from './types';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29ic2VydmFibGUvT2JzZXJ2YWJsZVZhbHVlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb24vSVN1YnNjcmlwdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xyXG4iXX0=
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Observable: Let something subscribe to changes to something else
3
+ *
4
+ * Abstract base class for all the other Observable* classes. Implements
5
+ * the basic onChange(), notification and dirty concepts.
6
+ */
7
+ export class Observable {
8
+ constructor() {
9
+ this.isObservable = true;
10
+ /**
11
+ * Does this Observable have gossip to share with its observers?
12
+ */
13
+ this._dirtyObservable = false;
14
+ /**
15
+ * If an Observable is active, it will immediately notify any listeners
16
+ * about its changes. It can be useful to set this to false while doing many changes together
17
+ */
18
+ this._activeObservable = true;
19
+ /**
20
+ * Callbacks for when any property or element of this instance of Observable change
21
+ */
22
+ this._changeObservers = new Set();
23
+ /**
24
+ * Observables which this Observable will propagate its changes to
25
+ */
26
+ this._parentObservables = new Set();
27
+ this._childObservables = new Set();
28
+ }
29
+ /**
30
+ * Register a callback to be called whenever any kind of change occurs with this object.
31
+ * It is up to the deriving classes to determine what a "change" is.
32
+ *
33
+ * @param {ChangeObserver<T>} [observer]
34
+ * @memberof Observable
35
+ */
36
+ onChanged(observer) {
37
+ if (this._changeObservers.has(observer)) {
38
+ throw new Error('This observer function is already observing this Observable, ' +
39
+ 'and double subscriptions are not supported.');
40
+ }
41
+ const renew = () => this._changeObservers.add(observer);
42
+ const cancel = () => this.removeOnChanged(observer);
43
+ renew();
44
+ return {
45
+ renew,
46
+ cancel,
47
+ };
48
+ }
49
+ /**
50
+ * Remove a specific callback registered to respond to any change event.
51
+ *
52
+ * @param {ChangeObserver} [observer]
53
+ * @memberof Observable
54
+ */
55
+ removeOnChanged(observer) {
56
+ this._changeObservers.delete(observer);
57
+ }
58
+ /**
59
+ * Call the "anything changed" callbacks associated with 'observable'.
60
+ * Also calls it for any ancestors, then finally clears the dirty flag.
61
+ */
62
+ notifyObservers() {
63
+ if (this._activeObservable && this._dirtyObservable) {
64
+ for (const changeObserver of this._changeObservers) {
65
+ this.notifyObserver(changeObserver);
66
+ }
67
+ for (const parent of this._parentObservables) {
68
+ parent.notifyObservers();
69
+ }
70
+ this._dirtyObservable = false;
71
+ }
72
+ }
73
+ notifyObserver(observer) {
74
+ // The basic onChange() has no arguments (because an Observable itself has no value),
75
+ // but any subclass will likely override this
76
+ observer(undefined);
77
+ }
78
+ /**
79
+ * Set this object and all Observable ancestors as dirty,
80
+ * then notify all observers. Generally used internally by the Observable* implementations,
81
+ * but can also be triggered manually if needed
82
+ */
83
+ setDirty() {
84
+ // We dirty the tree first BEFORE notifying,
85
+ // because notifying will stop propagating if the observable is inactive
86
+ this.setDirtyRecursive();
87
+ this.notifyObservers();
88
+ }
89
+ setDirtyRecursive() {
90
+ this._dirtyObservable = true;
91
+ for (const parent of this._parentObservables) {
92
+ parent.setDirtyRecursive();
93
+ }
94
+ }
95
+ /**
96
+ * Add an Observable as a child to this one (if it's Observable)
97
+ * This is what ensures onChange() notifications bubble up correctly
98
+ * and setActive() flows down correctly
99
+ */
100
+ addChildObservable(obj) {
101
+ if (Observable.isObservable(obj)) {
102
+ this._childObservables.add(obj);
103
+ obj._parentObservables.add(this);
104
+ }
105
+ }
106
+ /**
107
+ * Remove an Observable as a child to this one (if it's Observable)
108
+ * This is what ensures onChange() notifications bubble up correctly,
109
+ * and setActive() flows down correctly
110
+ */
111
+ removeChildObservables(obj) {
112
+ if (Observable.isObservable(obj)) {
113
+ this._childObservables.delete(obj);
114
+ obj._parentObservables.delete(this);
115
+ }
116
+ }
117
+ /**
118
+ * Run a function *atomically*, meaning that even if you
119
+ * mutate lots of parts of the Observable dozens of times,
120
+ * listeners will only be notified once
121
+ * @param func to fun
122
+ */
123
+ atomic(func) {
124
+ // If we are already inactive (aka in an atomic block),
125
+ // we don't have to do anything, the outer atomic will handle this
126
+ if (!this._activeObservable) {
127
+ return func();
128
+ }
129
+ try {
130
+ this.setActive(false);
131
+ func();
132
+ }
133
+ finally {
134
+ this.setActive(true);
135
+ }
136
+ }
137
+ /**
138
+ * Set whether this Observable (and all descendants) should be
139
+ * considered active, aka notifying about changes
140
+ * @param value
141
+ */
142
+ setActive(value) {
143
+ const oldValue = this._activeObservable;
144
+ this._activeObservable = value;
145
+ if (!oldValue && value) {
146
+ this.notifyObservers();
147
+ }
148
+ for (const child of this._childObservables) {
149
+ child.setActive(value);
150
+ }
151
+ }
152
+ /**
153
+ * Return a deep copy of the target object of the observable,
154
+ * without any observable members. See also the deepCopy util function
155
+ */
156
+ deepCopy() {
157
+ throw Error('deepCopy is only implemented in subclasses of Observable');
158
+ }
159
+ /**
160
+ * Convenient static function to type check if object is Observable
161
+ * @param obj
162
+ */
163
+ static isObservable(obj) {
164
+ return obj && obj.isObservable;
165
+ }
166
+ }
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvbWF0dGVycG9ydC1leHRlbnNpb25zL2NvcmUvc3JjL29ic2VydmFibGUvT2JzZXJ2YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBeUJyQjtRQXhCZ0IsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0M7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFekM7OztXQUdHO1FBQ0ssc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBRTFDOztXQUVHO1FBQ0sscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7UUFFeEQ7O1dBRUc7UUFDSyx1QkFBa0IsR0FBeUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyRCxzQkFBaUIsR0FBeUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU1QyxDQUFDO0lBRWpCOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBRSxRQUEyQjtRQUMzQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0Q7Z0JBQy9ELDZDQUE2QyxDQUFDLENBQUM7U0FDaEU7UUFDRCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFDUixPQUFPO1lBQ0wsS0FBSztZQUNMLE1BQU07U0FDVSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FL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OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBSyxHQUFRO1FBQ3JDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDakMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3N1YnNjcmlwdGlvbi9JU3Vic2NyaXB0aW9uJztcclxuXHJcbmV4cG9ydCB0eXBlIENoYW5nZU9ic2VydmVyPFQgPSBuZXZlcj4gPSAobmV3VmFsdWU6IFQpID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogT2JzZXJ2YWJsZTogTGV0IHNvbWV0aGluZyBzdWJzY3JpYmUgdG8gY2hhbmdlcyB0byBzb21ldGhpbmcgZWxzZVxyXG4gKlxyXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgdGhlIG90aGVyIE9ic2VydmFibGUqIGNsYXNzZXMuIEltcGxlbWVudHNcclxuICogdGhlIGJhc2ljIG9uQ2hhbmdlKCksIG5vdGlmaWNhdGlvbiBhbmQgZGlydHkgY29uY2VwdHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZTxUPiB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGlzT2JzZXJ2YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIERvZXMgdGhpcyBPYnNlcnZhYmxlIGhhdmUgZ29zc2lwIHRvIHNoYXJlIHdpdGggaXRzIG9ic2VydmVycz9cclxuICAgKi9cclxuICBwdWJsaWMgX2RpcnR5T2JzZXJ2YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJZiBhbiBPYnNlcnZhYmxlIGlzIGFjdGl2ZSwgaXQgd2lsbCBpbW1lZGlhdGVseSBub3RpZnkgYW55IGxpc3RlbmVyc1xyXG4gICAqIGFib3V0IGl0cyBjaGFuZ2VzLiBJdCBjYW4gYmUgdXNlZnVsIHRvIHNldCB0aGlzIHRvIGZhbHNlIHdoaWxlIGRvaW5nIG1hbnkgY2hhbmdlcyB0b2dldGhlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2FjdGl2ZU9ic2VydmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBDYWxsYmFja3MgZm9yIHdoZW4gYW55IHByb3BlcnR5IG9yIGVsZW1lbnQgb2YgdGhpcyBpbnN0YW5jZSBvZiBPYnNlcnZhYmxlIGNoYW5nZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NoYW5nZU9ic2VydmVycyA9IG5ldyBTZXQ8Q2hhbmdlT2JzZXJ2ZXI8VD4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGVzIHdoaWNoIHRoaXMgT2JzZXJ2YWJsZSB3aWxsIHByb3BhZ2F0ZSBpdHMgY2hhbmdlcyB0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX3BhcmVudE9ic2VydmFibGVzOiBTZXQ8T2JzZXJ2YWJsZTxhbnk+PiA9IG5ldyBTZXQoKTtcclxuICBwcml2YXRlIF9jaGlsZE9ic2VydmFibGVzOiBTZXQ8T2JzZXJ2YWJsZTxhbnk+PiA9IG5ldyBTZXQoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgYW55IGtpbmQgb2YgY2hhbmdlIG9jY3VycyB3aXRoIHRoaXMgb2JqZWN0LlxyXG4gICAqIEl0IGlzIHVwIHRvIHRoZSBkZXJpdmluZyBjbGFzc2VzIHRvIGRldGVybWluZSB3aGF0IGEgXCJjaGFuZ2VcIiBpcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2hhbmdlT2JzZXJ2ZXI8VD59IFtvYnNlcnZlcl1cclxuICAgKiBAbWVtYmVyb2YgT2JzZXJ2YWJsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBvbkNoYW5nZWQgKG9ic2VydmVyOiBDaGFuZ2VPYnNlcnZlcjxUPik6IElTdWJzY3JpcHRpb24ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZU9ic2VydmVycy5oYXMob2JzZXJ2ZXIpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBvYnNlcnZlciBmdW5jdGlvbiBpcyBhbHJlYWR5IG9ic2VydmluZyB0aGlzIE9ic2VydmFibGUsICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2FuZCBkb3VibGUgc3Vic2NyaXB0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC4nKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlbmV3ID0gKCkgPT4gdGhpcy5fY2hhbmdlT2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7XHJcbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB0aGlzLnJlbW92ZU9uQ2hhbmdlZChvYnNlcnZlcik7XHJcbiAgICByZW5ldygpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVuZXcsXHJcbiAgICAgIGNhbmNlbCxcclxuICAgIH0gYXMgSVN1YnNjcmlwdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIHNwZWNpZmljIGNhbGxiYWNrIHJlZ2lzdGVyZWQgdG8gcmVzcG9uZCB0byBhbnkgY2hhbmdlIGV2ZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDaGFuZ2VPYnNlcnZlcn0gW29ic2VydmVyXVxyXG4gICAqIEBtZW1iZXJvZiBPYnNlcnZhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZU9uQ2hhbmdlZCAob2JzZXJ2ZXI6IENoYW5nZU9ic2VydmVyPFQ+KTogdm9pZCB7XHJcbiAgICB0aGlzLl9jaGFuZ2VPYnNlcnZlcnMuZGVsZXRlKG9ic2VydmVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgdGhlIFwiYW55dGhpbmcgY2hhbmdlZFwiIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggJ29ic2VydmFibGUnLlxyXG4gICAqIEFsc28gY2FsbHMgaXQgZm9yIGFueSBhbmNlc3RvcnMsIHRoZW4gZmluYWxseSBjbGVhcnMgdGhlIGRpcnR5IGZsYWcuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG5vdGlmeU9ic2VydmVycyAoKSB7XHJcbiAgICBpZiAodGhpcy5fYWN0aXZlT2JzZXJ2YWJsZSAmJiB0aGlzLl9kaXJ0eU9ic2VydmFibGUpIHtcclxuICAgICAgZm9yIChjb25zdCBjaGFuZ2VPYnNlcnZlciBvZiB0aGlzLl9jaGFuZ2VPYnNlcnZlcnMpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeU9ic2VydmVyKGNoYW5nZU9ic2VydmVyKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLl9wYXJlbnRPYnNlcnZhYmxlcykge1xyXG4gICAgICAgIHBhcmVudC5ub3RpZnlPYnNlcnZlcnMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9kaXJ0eU9ic2VydmFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBub3RpZnlPYnNlcnZlciAob2JzZXJ2ZXI6IENoYW5nZU9ic2VydmVyPFQ+KTogdm9pZCB7XHJcbiAgICAvLyBUaGUgYmFzaWMgb25DaGFuZ2UoKSBoYXMgbm8gYXJndW1lbnRzIChiZWNhdXNlIGFuIE9ic2VydmFibGUgaXRzZWxmIGhhcyBubyB2YWx1ZSksXHJcbiAgICAvLyBidXQgYW55IHN1YmNsYXNzIHdpbGwgbGlrZWx5IG92ZXJyaWRlIHRoaXNcclxuICAgIG9ic2VydmVyKHVuZGVmaW5lZCBhcyBuZXZlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhpcyBvYmplY3QgYW5kIGFsbCBPYnNlcnZhYmxlIGFuY2VzdG9ycyBhcyBkaXJ0eSxcclxuICAgKiB0aGVuIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzLiBHZW5lcmFsbHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBPYnNlcnZhYmxlKiBpbXBsZW1lbnRhdGlvbnMsXHJcbiAgICogYnV0IGNhbiBhbHNvIGJlIHRyaWdnZXJlZCBtYW51YWxseSBpZiBuZWVkZWRcclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGlydHkgKCkge1xyXG4gICAgLy8gV2UgZGlydHkgdGhlIHRyZWUgZmlyc3QgQkVGT1JFIG5vdGlmeWluZyxcclxuICAgIC8vIGJlY2F1c2Ugbm90aWZ5aW5nIHdpbGwgc3RvcCBwcm9wYWdhdGluZyBpZiB0aGUgb2JzZXJ2YWJsZSBpcyBpbmFjdGl2ZVxyXG4gICAgdGhpcy5zZXREaXJ0eVJlY3Vyc2l2ZSgpO1xyXG4gICAgdGhpcy5ub3RpZnlPYnNlcnZlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGlydHlSZWN1cnNpdmUgKCkge1xyXG4gICAgdGhpcy5fZGlydHlPYnNlcnZhYmxlID0gdHJ1ZTtcclxuICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHRoaXMuX3BhcmVudE9ic2VydmFibGVzKSB7XHJcbiAgICAgIHBhcmVudC5zZXREaXJ0eVJlY3Vyc2l2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGFuIE9ic2VydmFibGUgYXMgYSBjaGlsZCB0byB0aGlzIG9uZSAoaWYgaXQncyBPYnNlcnZhYmxlKVxyXG4gICAqIFRoaXMgaXMgd2hhdCBlbnN1cmVzIG9uQ2hhbmdlKCkgbm90aWZpY2F0aW9ucyBidWJibGUgdXAgY29ycmVjdGx5XHJcbiAgICogYW5kIHNldEFjdGl2ZSgpIGZsb3dzIGRvd24gY29ycmVjdGx5XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFkZENoaWxkT2JzZXJ2YWJsZSAob2JqOiBUIHwgT2JzZXJ2YWJsZTxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoT2JzZXJ2YWJsZS5pc09ic2VydmFibGUob2JqKSkge1xyXG4gICAgICB0aGlzLl9jaGlsZE9ic2VydmFibGVzLmFkZChvYmopO1xyXG4gICAgICBvYmouX3BhcmVudE9ic2VydmFibGVzLmFkZCh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhbiBPYnNlcnZhYmxlIGFzIGEgY2hpbGQgdG8gdGhpcyBvbmUgKGlmIGl0J3MgT2JzZXJ2YWJsZSlcclxuICAgKiBUaGlzIGlzIHdoYXQgZW5zdXJlcyBvbkNoYW5nZSgpIG5vdGlmaWNhdGlvbnMgYnViYmxlIHVwIGNvcnJlY3RseSxcclxuICAgKiBhbmQgc2V0QWN0aXZlKCkgZmxvd3MgZG93biBjb3JyZWN0bHlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVtb3ZlQ2hpbGRPYnNlcnZhYmxlcyAob2JqOiBUIHwgT2JzZXJ2YWJsZTxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoT2JzZXJ2YWJsZS5pc09ic2VydmFibGUob2JqKSkge1xyXG4gICAgICB0aGlzLl9jaGlsZE9ic2VydmFibGVzLmRlbGV0ZShvYmopO1xyXG4gICAgICBvYmouX3BhcmVudE9ic2VydmFibGVzLmRlbGV0ZSh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1biBhIGZ1bmN0aW9uICphdG9taWNhbGx5KiwgbWVhbmluZyB0aGF0IGV2ZW4gaWYgeW91XHJcbiAgICogbXV0YXRlIGxvdHMgb2YgcGFydHMgb2YgdGhlIE9ic2VydmFibGUgZG96ZW5zIG9mIHRpbWVzLFxyXG4gICAqIGxpc3RlbmVycyB3aWxsIG9ubHkgYmUgbm90aWZpZWQgb25jZVxyXG4gICAqIEBwYXJhbSBmdW5jIHRvIGZ1blxyXG4gICAqL1xyXG4gIHB1YmxpYyBhdG9taWMgKGZ1bmM6ICgpID0+IHZvaWQpIHtcclxuICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGluYWN0aXZlIChha2EgaW4gYW4gYXRvbWljIGJsb2NrKSxcclxuICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcsIHRoZSBvdXRlciBhdG9taWMgd2lsbCBoYW5kbGUgdGhpc1xyXG4gICAgaWYgKCF0aGlzLl9hY3RpdmVPYnNlcnZhYmxlKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKCk7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZShmYWxzZSk7XHJcbiAgICAgIGZ1bmMoKTtcclxuICAgIH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZSh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB3aGV0aGVyIHRoaXMgT2JzZXJ2YWJsZSAoYW5kIGFsbCBkZXNjZW5kYW50cykgc2hvdWxkIGJlXHJcbiAgICogY29uc2lkZXJlZCBhY3RpdmUsIGFrYSBub3RpZnlpbmcgYWJvdXQgY2hhbmdlc1xyXG4gICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZXRBY3RpdmUgKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX2FjdGl2ZU9ic2VydmFibGU7XHJcbiAgICB0aGlzLl9hY3RpdmVPYnNlcnZhYmxlID0gdmFsdWU7XHJcbiAgICBpZiAoIW9sZFZhbHVlICYmIHZhbHVlKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuX2NoaWxkT2JzZXJ2YWJsZXMpIHtcclxuICAgICAgY2hpbGQuc2V0QWN0aXZlKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZXAgY29weSBvZiB0aGUgdGFyZ2V0IG9iamVjdCBvZiB0aGUgb2JzZXJ2YWJsZSxcclxuICAgKiB3aXRob3V0IGFueSBvYnNlcnZhYmxlIG1lbWJlcnMuIFNlZSBhbHNvIHRoZSBkZWVwQ29weSB1dGlsIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGRlZXBDb3B5ICgpOiBhbnkge1xyXG4gICAgdGhyb3cgRXJyb3IoJ2RlZXBDb3B5IGlzIG9ubHkgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3NlcyBvZiBPYnNlcnZhYmxlJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZW5pZW50IHN0YXRpYyBmdW5jdGlvbiB0byB0eXBlIGNoZWNrIGlmIG9iamVjdCBpcyBPYnNlcnZhYmxlXHJcbiAgICogQHBhcmFtIG9ialxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgaXNPYnNlcnZhYmxlPFQ+IChvYmo6IGFueSk6IG9iaiBpcyBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiBvYmogJiYgb2JqLmlzT2JzZXJ2YWJsZTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,38 @@
1
+ import { Observable } from './Observable';
2
+ import { deepCopy } from '../util/index';
3
+ /**
4
+ * An ObservableValue lets you listen to a single value
5
+ *
6
+ * * Ways to observe:
7
+ * - The normal Observable onChange()
8
+ *
9
+ * If the value in the ObservableValue is also Observable, any changes to the value
10
+ * will also bubble up to the ObservableValue
11
+ */
12
+ export class ObservableValue extends Observable {
13
+ constructor(intialValue) {
14
+ super();
15
+ this.notifyObserver = (observer) => {
16
+ observer(this.value);
17
+ };
18
+ this.value = intialValue;
19
+ }
20
+ get value() {
21
+ return this._value;
22
+ }
23
+ set value(newVal) {
24
+ if (this._value !== newVal) {
25
+ this.removeChildObservables(this._value);
26
+ this.addChildObservable(newVal);
27
+ this._value = newVal;
28
+ this.setDirty();
29
+ }
30
+ }
31
+ deepCopy() {
32
+ return deepCopy(this._value);
33
+ }
34
+ }
35
+ export const createObservableValue = (value) => {
36
+ return new ObservableValue(value);
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JzZXJ2YWJsZVZhbHVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvY29yZS9zcmMvb2JzZXJ2YWJsZS9PYnNlcnZhYmxlVmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGVBQW1CLFNBQVEsVUFBYTtJQUduRCxZQUFZLFdBQWM7UUFDeEIsS0FBSyxFQUFFLENBQUM7UUFJUyxtQkFBYyxHQUFHLENBQUMsUUFBMkIsRUFBUSxFQUFFO1lBQ3hFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFBO1FBTEMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQU1ELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxLQUFLLENBQUMsTUFBUztRQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFZSxRQUFRO1FBQ3RCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFVLEtBQVEsRUFBRSxFQUFFO0lBQ3pELE9BQU8sSUFBSSxlQUFlLENBQUksS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XHJcbmltcG9ydCB7IENoYW5nZU9ic2VydmVyIH0gZnJvbSAnLi9PYnNlcnZhYmxlJztcclxuaW1wb3J0IHsgZGVlcENvcHkgfSBmcm9tICcuLi91dGlsL2luZGV4JztcclxuXHJcbi8qKlxyXG4gKiBBbiBPYnNlcnZhYmxlVmFsdWUgbGV0cyB5b3UgbGlzdGVuIHRvIGEgc2luZ2xlIHZhbHVlXHJcbiAqXHJcbiAqICogIFdheXMgdG8gb2JzZXJ2ZTpcclxuICogLSBUaGUgbm9ybWFsIE9ic2VydmFibGUgb25DaGFuZ2UoKVxyXG4gKlxyXG4gKiBJZiB0aGUgdmFsdWUgaW4gdGhlIE9ic2VydmFibGVWYWx1ZSBpcyBhbHNvIE9ic2VydmFibGUsIGFueSBjaGFuZ2VzIHRvIHRoZSB2YWx1ZVxyXG4gKiB3aWxsIGFsc28gYnViYmxlIHVwIHRvIHRoZSBPYnNlcnZhYmxlVmFsdWVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlVmFsdWU8VD4gZXh0ZW5kcyBPYnNlcnZhYmxlPFQ+IHtcclxuICBwcml2YXRlIF92YWx1ZTogVDtcclxuXHJcbiAgY29uc3RydWN0b3IoaW50aWFsVmFsdWU6IFQpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnZhbHVlID0gaW50aWFsVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbm90aWZ5T2JzZXJ2ZXIgPSAob2JzZXJ2ZXI6IENoYW5nZU9ic2VydmVyPFQ+KTogdm9pZCA9PiB7XHJcbiAgICBvYnNlcnZlcih0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbDogVCkge1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWwpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDaGlsZE9ic2VydmFibGVzKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgdGhpcy5hZGRDaGlsZE9ic2VydmFibGUobmV3VmFsKTtcclxuICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWw7XHJcbiAgICAgIHRoaXMuc2V0RGlydHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVycmlkZSBkZWVwQ29weSgpIHtcclxuICAgIHJldHVybiBkZWVwQ29weSh0aGlzLl92YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YWJsZVZhbHVlID0gPFQgPSBhbnk+KHZhbHVlOiBUKSA9PiB7XHJcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlVmFsdWU8VD4odmFsdWUpO1xyXG59O1xyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVN1YnNjcmlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvbWF0dGVycG9ydC1leHRlbnNpb25zL2NvcmUvc3JjL3N1YnNjcmlwdGlvbi9JU3Vic2NyaXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQSB3cmFwcGVyIGZvciBkYXRhL29ic2VydmFibGUgc3Vic2NyaXB0aW9ucywgYWxsb3dpbmcgc2ltcGxlIHN1YnNjcmliaW5nIGFuZCB1bnN1YnNjcmliaW5nIHRvIGRhdGEvb2JzZXJ2YWJsZSBjaGFuZ2VzXHJcbiAqIHdpdGhvdXQgZGlyZWN0IHJlZmVyZW5jZXMgdG8gdGhlIG1hcmtldCwgdGhlIG9yaWdpbmFsIG9ic2VydmFibGVzLCBvciB0aGUgY2FsbGJhY2sgdG8gYmUgKHVuKXJlZ2lzdGVyZWQuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUXHJcbiAqIEB0ZW1wbGF0ZSBLXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpcHRpb24ge1xyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmliZSB0byBjaGFuZ2VzIG9mIHRoZSBkYXRhIGluIHRoZSBDYXRhbG9nXHJcbiAgICogSWYgdGhpcyBzdWJzY3JpcHRpb24gaGFzIGJlZW4gcHJldmlvdXNseSByZW5ld2VkICh3L28gYmVpbmcgY2FuY2VsbGVkKSBubyBjaGFuZ2VzIG9jY3VyXHJcbiAgICogYS5rLmEuIHJlbmV3aW5nIGFuIGFjdGl2ZSBzdWJzY3JpcHRpb24gaXMgYSBuby1vcFxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIElTdWJzY3JpcHRpb25cclxuICAgKi9cclxuICByZW5ldygpOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGNoYW5nZSBvZiB0aGUgZGF0YSBpbiB0aGUgQ2F0YWxvZ1xyXG4gICAqIElmIHRoaXMgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIHByZXZpb3VzbHkgY2FuY2VsbGVkICh3L28gYmVpbmcgcmVuZXdlZCkgbm8gY2hhbmdlcyBvY2N1clxyXG4gICAqIGEuay5hLiBjYW5jZWxsaW5nIGEgY2FuY2VsbGVkIHN1YnNjcmlwdGlvbiBpcyBhIG5vLW9wXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgSVN1YnNjcmlwdGlvblxyXG4gICAqL1xyXG4gIGNhbmNlbCgpOiB2b2lkO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9jb3JlL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlLCBpbmRleGFibGUgb2JqZWN0IHR5cGVcclxuICovXHJcbmV4cG9ydCB0eXBlIERpY3Q8ViA9IGFueT4gPSB7XHJcbiAgW2tleTogc3RyaW5nXTogVjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0ge1xyXG4gIFtQIGluIGtleW9mIFRdPzpcclxuICAgIFRbUF0gZXh0ZW5kcyBGdW5jdGlvbiA/IFRbUF0gOlxyXG4gICAgVFtQXSBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gQXJyYXk8VT4gOlxyXG4gICAgVFtQXSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBSZWFkb25seUFycmF5PFU+IDpcclxuICAgIFRbUF0gZXh0ZW5kcyB7fSA/IERlZXBQYXJ0aWFsPFRbUF0+IDpcclxuICAgIFRbUF07XHJcbn0iXX0=