surveysparrow-ionic-plugin 1.0.7-beta.4 → 2.0.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 (94) hide show
  1. package/dist/angular-ui/esm2022/angular-ui.mjs +5 -0
  2. package/dist/angular-ui/esm2022/public-api.mjs +3 -0
  3. package/dist/angular-ui/esm2022/spotcheck.component.mjs +17 -0
  4. package/dist/angular-ui/esm2022/spotchecks/SpotCheck.mjs +51 -0
  5. package/dist/angular-ui/esm2022/spotchecks/SpotCheckComponent.mjs +323 -0
  6. package/dist/angular-ui/esm2022/spotchecks/SpotcheckStateService.mjs +65 -0
  7. package/dist/angular-ui/esm2022/spotchecks/api.mjs +230 -0
  8. package/dist/angular-ui/esm2022/spotchecks/helpers.mjs +328 -0
  9. package/dist/angular-ui/esm2022/spotchecks/index.mjs +2 -0
  10. package/dist/angular-ui/esm2022/spotchecks/storage.mjs +7 -0
  11. package/dist/angular-ui/esm2022/spotchecks/types.mjs +2 -0
  12. package/dist/angular-ui/fesm2022/angular-ui.mjs +1013 -0
  13. package/dist/angular-ui/fesm2022/angular-ui.mjs.map +1 -0
  14. package/dist/angular-ui/index.d.ts +5 -0
  15. package/dist/angular-ui/public-api.d.ts +2 -0
  16. package/dist/angular-ui/spotcheck.component.d.ts +5 -0
  17. package/dist/angular-ui/spotchecks/SpotCheckComponent.d.ts +56 -0
  18. package/dist/angular-ui/spotchecks/SpotcheckStateService.d.ts +12 -0
  19. package/dist/{esm → angular-ui}/spotchecks/helpers.d.ts +1 -4
  20. package/dist/angular-ui/spotchecks/index.d.ts +2 -0
  21. package/dist/angular-ui/spotchecks/storage.d.ts +2 -0
  22. package/dist/{esm → angular-ui}/spotchecks/types.d.ts +5 -4
  23. package/dist/esm/angular-ui/lib/public-api.d.ts +2 -0
  24. package/dist/esm/angular-ui/lib/public-api.js +3 -0
  25. package/dist/esm/angular-ui/lib/public-api.js.map +1 -0
  26. package/dist/esm/angular-ui/lib/spotcheck.component.d.ts +2 -0
  27. package/dist/esm/angular-ui/lib/spotcheck.component.js +20 -0
  28. package/dist/esm/angular-ui/lib/spotcheck.component.js.map +1 -0
  29. package/dist/esm/angular-ui/lib/spotchecks/SpotCheck.d.ts +4 -0
  30. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotCheck.js +1 -3
  31. package/dist/esm/angular-ui/lib/spotchecks/SpotCheck.js.map +1 -0
  32. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotCheckComponent.d.ts +1 -0
  33. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotCheckComponent.js +13 -7
  34. package/dist/esm/angular-ui/lib/spotchecks/SpotCheckComponent.js.map +1 -0
  35. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotcheckStateService.js +1 -0
  36. package/dist/esm/angular-ui/lib/spotchecks/SpotcheckStateService.js.map +1 -0
  37. package/dist/esm/angular-ui/lib/spotchecks/api.d.ts +15 -0
  38. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/api.js +20 -29
  39. package/dist/esm/angular-ui/lib/spotchecks/api.js.map +1 -0
  40. package/dist/esm/angular-ui/lib/spotchecks/helpers.d.ts +29 -0
  41. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/helpers.js +6 -19
  42. package/dist/esm/angular-ui/lib/spotchecks/helpers.js.map +1 -0
  43. package/dist/esm/angular-ui/lib/spotchecks/index.d.ts +2 -0
  44. package/dist/esm/angular-ui/lib/spotchecks/index.js +2 -0
  45. package/dist/esm/angular-ui/lib/spotchecks/index.js.map +1 -0
  46. package/dist/esm/angular-ui/lib/spotchecks/storage.js.map +1 -0
  47. package/dist/esm/angular-ui/lib/spotchecks/types.d.ts +78 -0
  48. package/dist/esm/angular-ui/lib/spotchecks/types.js.map +1 -0
  49. package/dist/esm/index.d.ts +1 -1
  50. package/dist/esm/index.js +1 -1
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/plugin.cjs.js +51510 -527
  53. package/dist/plugin.cjs.js.map +1 -1
  54. package/dist/plugin.js +51511 -524
  55. package/dist/plugin.js.map +1 -1
  56. package/package.json +31 -4
  57. package/src/angular-ui/lib/public-api.ts +2 -0
  58. package/src/angular-ui/lib/spotcheck.component.ts +10 -0
  59. package/src/angular-ui/lib/spotchecks/SpotCheck.ts +54 -0
  60. package/src/angular-ui/lib/spotchecks/SpotCheckComponent.css +7 -0
  61. package/src/angular-ui/lib/spotchecks/SpotCheckComponent.html +27 -0
  62. package/src/angular-ui/lib/spotchecks/SpotCheckComponent.ts +295 -0
  63. package/src/angular-ui/lib/spotchecks/SpotcheckStateService.ts +64 -0
  64. package/src/angular-ui/lib/spotchecks/api.ts +286 -0
  65. package/src/angular-ui/lib/spotchecks/helpers.ts +401 -0
  66. package/src/angular-ui/lib/spotchecks/index.ts +9 -0
  67. package/src/angular-ui/lib/spotchecks/storage.ts +7 -0
  68. package/src/angular-ui/lib/spotchecks/types.ts +84 -0
  69. package/src/angular-ui/ng-package.json +13 -0
  70. package/src/angular-ui/package.json +10 -0
  71. package/src/definitions.ts +17 -0
  72. package/src/index.ts +10 -0
  73. package/dist/esm/spotchecks/SpotCheck.js.map +0 -1
  74. package/dist/esm/spotchecks/SpotCheckComponent.js.map +0 -1
  75. package/dist/esm/spotchecks/SpotCheckService.d.ts +0 -8
  76. package/dist/esm/spotchecks/SpotCheckService.js +0 -45
  77. package/dist/esm/spotchecks/SpotCheckService.js.map +0 -1
  78. package/dist/esm/spotchecks/SpotcheckStateService.js.map +0 -1
  79. package/dist/esm/spotchecks/SpotchecksListener.d.ts +0 -9
  80. package/dist/esm/spotchecks/SpotchecksListener.js +0 -37
  81. package/dist/esm/spotchecks/SpotchecksListener.js.map +0 -1
  82. package/dist/esm/spotchecks/api.js.map +0 -1
  83. package/dist/esm/spotchecks/helpers.js.map +0 -1
  84. package/dist/esm/spotchecks/index.d.ts +0 -5
  85. package/dist/esm/spotchecks/index.js +0 -6
  86. package/dist/esm/spotchecks/index.js.map +0 -1
  87. package/dist/esm/spotchecks/storage.js.map +0 -1
  88. package/dist/esm/spotchecks/types.js.map +0 -1
  89. /package/dist/{esm → angular-ui}/spotchecks/SpotCheck.d.ts +0 -0
  90. /package/dist/{esm → angular-ui}/spotchecks/api.d.ts +0 -0
  91. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotcheckStateService.d.ts +0 -0
  92. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/storage.d.ts +0 -0
  93. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/storage.js +0 -0
  94. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/types.js +0 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci11aS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbmd1bGFyLXVpL2xpYi9hbmd1bGFyLXVpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './spotcheck.component';
2
+ export * from './spotchecks';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbmd1bGFyLXVpL2xpYi9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Nwb3RjaGVjay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcG90Y2hlY2tzJzsiXX0=
@@ -0,0 +1,17 @@
1
+ import { Component } from '@angular/core';
2
+ import { SpotCheckComponent } from './spotchecks/SpotCheckComponent';
3
+ import * as i0 from "@angular/core";
4
+ export class SpotCheck {
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotCheck, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: SpotCheck, isStandalone: true, selector: "SpotCheck", ngImport: i0, template: `<SpotCheckComponent />`, isInline: true, dependencies: [{ kind: "component", type: SpotCheckComponent, selector: "SpotCheckComponent" }] });
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotCheck, decorators: [{
9
+ type: Component,
10
+ args: [{
11
+ selector: 'SpotCheck',
12
+ template: `<SpotCheckComponent />`,
13
+ standalone: true,
14
+ imports: [SpotCheckComponent],
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGNoZWNrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbmd1bGFyLXVpL2xpYi9zcG90Y2hlY2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBUXJFLE1BQU0sT0FBTyxTQUFTO3VHQUFULFNBQVM7MkZBQVQsU0FBUyxxRUFKVix3QkFBd0IsNERBRXhCLGtCQUFrQjs7MkZBRWpCLFNBQVM7a0JBTnJCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwb3RDaGVja0NvbXBvbmVudCB9IGZyb20gJy4vc3BvdGNoZWNrcy9TcG90Q2hlY2tDb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdTcG90Q2hlY2snLFxuICB0ZW1wbGF0ZTogYDxTcG90Q2hlY2tDb21wb25lbnQgLz5gLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbU3BvdENoZWNrQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU3BvdENoZWNrIHt9XG4iXX0=
@@ -0,0 +1,51 @@
1
+ import { sendTrackScreenRequest, sendTrackEventRequest } from './api';
2
+ import { getSpotcheckStateService } from './helpers';
3
+ export const initializeSpotChecks = ({ domainName, targetToken, userDetails = {}, variables = {}, customProperties = {}, }) => {
4
+ const spotcheckStateService = getSpotcheckStateService();
5
+ spotcheckStateService.setState({
6
+ domainName,
7
+ targetToken,
8
+ userDetails,
9
+ variables,
10
+ customProperties,
11
+ });
12
+ };
13
+ export const trackScreen = async ({ screen, options }) => {
14
+ try {
15
+ const response = await sendTrackScreenRequest({ screen, options });
16
+ if (response.valid) {
17
+ console.log('Screen Tracking succeeded.');
18
+ }
19
+ else {
20
+ if ('error' in response) {
21
+ throw new Error(response.error.toString());
22
+ }
23
+ else {
24
+ throw new Error('Tracking failed without an explicit error.');
25
+ }
26
+ }
27
+ }
28
+ catch (error) {
29
+ console.log(`Screen Tracking Failed. ${error.message}`);
30
+ }
31
+ };
32
+ export const trackEvent = async ({ screen, event }) => {
33
+ try {
34
+ const response = await sendTrackEventRequest({ screen, event });
35
+ if (response.valid) {
36
+ console.log('TrackEvent succeeded.');
37
+ }
38
+ else {
39
+ if ('error' in response) {
40
+ throw new Error(response.error.toString());
41
+ }
42
+ else {
43
+ throw new Error('Tracking failed without an explicit error.');
44
+ }
45
+ }
46
+ }
47
+ catch (error) {
48
+ console.log(`Event Tracking Failed. ${error.message}`);
49
+ }
50
+ };
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BvdENoZWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdENoZWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxFQUNuQyxVQUFVLEVBQ1YsV0FBVyxFQUNYLFdBQVcsR0FBRyxFQUFFLEVBQ2hCLFNBQVMsR0FBRyxFQUFFLEVBQ2QsZ0JBQWdCLEdBQUcsRUFBRSxHQUNLLEVBQUUsRUFBRTtJQUM5QixNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixFQUFFLENBQUM7SUFDekQscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQzdCLFVBQVU7UUFDVixXQUFXO1FBQ1gsV0FBVztRQUNYLFNBQVM7UUFDVCxnQkFBZ0I7S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQW9CLEVBQUUsRUFBRTtJQUN6RSxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLHNCQUFzQixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW1CLEVBQUUsRUFBRTtJQUNyRSxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5pdGlhbGl6ZVNwb3RDaGVja3NQcm9wcywgVHJhY2tFdmVudFByb3BzLCBUcmFja1NjcmVlblByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzZW5kVHJhY2tTY3JlZW5SZXF1ZXN0LCBzZW5kVHJhY2tFdmVudFJlcXVlc3QgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZVNwb3RDaGVja3MgPSAoe1xuICBkb21haW5OYW1lLFxuICB0YXJnZXRUb2tlbixcbiAgdXNlckRldGFpbHMgPSB7fSxcbiAgdmFyaWFibGVzID0ge30sXG4gIGN1c3RvbVByb3BlcnRpZXMgPSB7fSxcbn06IEluaXRpYWxpemVTcG90Q2hlY2tzUHJvcHMpID0+IHtcbiAgY29uc3Qgc3BvdGNoZWNrU3RhdGVTZXJ2aWNlID0gZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCk7XG4gIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgZG9tYWluTmFtZSxcbiAgICB0YXJnZXRUb2tlbixcbiAgICB1c2VyRGV0YWlscyxcbiAgICB2YXJpYWJsZXMsXG4gICAgY3VzdG9tUHJvcGVydGllcyxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhY2tTY3JlZW4gPSBhc3luYyAoeyBzY3JlZW4sIG9wdGlvbnMgfTogVHJhY2tTY3JlZW5Qcm9wcykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZFRyYWNrU2NyZWVuUmVxdWVzdCh7IHNjcmVlbiwgb3B0aW9ucyB9KTtcbiAgICBpZiAocmVzcG9uc2UudmFsaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTY3JlZW4gVHJhY2tpbmcgc3VjY2VlZGVkLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYWNraW5nIGZhaWxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IGVycm9yLicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGBTY3JlZW4gVHJhY2tpbmcgRmFpbGVkLiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmFja0V2ZW50ID0gYXN5bmMgKHsgc2NyZWVuLCBldmVudCB9OiBUcmFja0V2ZW50UHJvcHMpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlbmRUcmFja0V2ZW50UmVxdWVzdCh7IHNjcmVlbiwgZXZlbnQgfSk7XG4gICAgaWYgKHJlc3BvbnNlLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZygnVHJhY2tFdmVudCBzdWNjZWVkZWQuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvci50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhY2tpbmcgZmFpbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgZXJyb3IuJyk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgY29uc29sZS5sb2coYEV2ZW50IFRyYWNraW5nIEZhaWxlZC4gJHtlcnJvci5tZXNzYWdlfWApO1xuICB9XG59O1xuIl19
@@ -0,0 +1,323 @@
1
+ import { Component, Input, ViewChild, HostListener, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { closeSpotCheck, closeSpotCheckAndHandleSurveyEnd, getSpotcheckComponentCssStyles, handleSurveyEnd, ischatSurvey } from './helpers';
4
+ import { getSpotcheckStateService } from './helpers';
5
+ import axios from 'axios';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/platform-browser";
8
+ import * as i2 from "@angular/common";
9
+ export class WebViewComponent {
10
+ sanitizer;
11
+ url = '';
12
+ webviewType = 'classic';
13
+ isMiniCard = false;
14
+ safeUrl = null;
15
+ iframe;
16
+ constructor(sanitizer) {
17
+ this.sanitizer = sanitizer;
18
+ }
19
+ ngOnInit() {
20
+ if (this.url) {
21
+ this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.url);
22
+ }
23
+ }
24
+ ngAfterViewInit() {
25
+ const stateService = getSpotcheckStateService();
26
+ const webViewRef = this.iframe.nativeElement;
27
+ if (this.webviewType === 'classic') {
28
+ stateService.setState({
29
+ classicWebViewRef: webViewRef,
30
+ isClassicLoading: false,
31
+ });
32
+ }
33
+ else {
34
+ stateService.setState({
35
+ chatWebViewRef: webViewRef,
36
+ isChatLoading: false,
37
+ });
38
+ }
39
+ this.setupIframeLoadListener();
40
+ }
41
+ setupIframeLoadListener() {
42
+ const iframe = this.iframe.nativeElement;
43
+ iframe.addEventListener('load', () => {
44
+ const stateService = getSpotcheckStateService();
45
+ if (this.webviewType === 'classic') {
46
+ stateService.setState({ isClassicLoading: false });
47
+ }
48
+ else {
49
+ stateService.setState({ isChatLoading: false });
50
+ }
51
+ });
52
+ }
53
+ onMessage(event) {
54
+ const stateService = getSpotcheckStateService();
55
+ const { data } = event;
56
+ switch (data.type) {
57
+ case 'slideInFrame':
58
+ if (data.mounted) {
59
+ stateService.setState({ isMounted: true });
60
+ }
61
+ break;
62
+ case 'resizeWindow':
63
+ if (data.size) {
64
+ stateService.setState({
65
+ currentQuestionHeight: data.size.height,
66
+ });
67
+ }
68
+ else if (data.isCloseButtonEnabled) {
69
+ stateService.setState({
70
+ isCloseButtonEnabled: data.isCloseButtonEnabled,
71
+ });
72
+ }
73
+ break;
74
+ case 'surveyCompleted':
75
+ closeSpotCheckAndHandleSurveyEnd();
76
+ // spotchecksListener.emitSurveyCompleted(data.response);
77
+ break;
78
+ case 'surveyLoadStarted':
79
+ // spotchecksListener.emitSurveyLoadStarted(data.surveyDetails);
80
+ break;
81
+ default:
82
+ break;
83
+ }
84
+ }
85
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: WebViewComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
86
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: WebViewComponent, isStandalone: true, selector: "WebViewComponent", inputs: { url: "url", webviewType: "webviewType", isMiniCard: "isMiniCard" }, host: { listeners: { "window:message": "onMessage($event)" } }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframeRef"], descendants: true }], ngImport: i0, template: `
87
+ <div style="overflow: hidden; height: 100%; border-radius: {{isMiniCard ? 12 : 0}}px; padding-left: {{isMiniCard ? 12 : 0}}px; padding-right: {{isMiniCard ? 12 : 0}}px; box-sizing: border-box;">
88
+ <iframe
89
+ allow="camera; microphone; geolocation; display-capture; autoplay; clipboard-read; clipboard-write;"
90
+ #iframeRef
91
+ [src]="safeUrl"
92
+ style="width: 100%; height: 100%; display: block; border-radius: {{isMiniCard ? 12 : 0}}px;"
93
+ frameborder="0"
94
+ >
95
+ </iframe>
96
+ </div>
97
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: WebViewComponent, decorators: [{
100
+ type: Component,
101
+ args: [{
102
+ selector: 'WebViewComponent',
103
+ template: `
104
+ <div style="overflow: hidden; height: 100%; border-radius: {{isMiniCard ? 12 : 0}}px; padding-left: {{isMiniCard ? 12 : 0}}px; padding-right: {{isMiniCard ? 12 : 0}}px; box-sizing: border-box;">
105
+ <iframe
106
+ allow="camera; microphone; geolocation; display-capture; autoplay; clipboard-read; clipboard-write;"
107
+ #iframeRef
108
+ [src]="safeUrl"
109
+ style="width: 100%; height: 100%; display: block; border-radius: {{isMiniCard ? 12 : 0}}px;"
110
+ frameborder="0"
111
+ >
112
+ </iframe>
113
+ </div>
114
+ `,
115
+ standalone: true,
116
+ imports: [CommonModule],
117
+ }]
118
+ }], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { url: [{
119
+ type: Input
120
+ }], webviewType: [{
121
+ type: Input
122
+ }], isMiniCard: [{
123
+ type: Input
124
+ }], iframe: [{
125
+ type: ViewChild,
126
+ args: ['iframeRef']
127
+ }], onMessage: [{
128
+ type: HostListener,
129
+ args: ['window:message', ['$event']]
130
+ }] } });
131
+ export class CloseSVGComponent {
132
+ size = 32;
133
+ stroke = '#919191';
134
+ strokeWidth = 1.5;
135
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: CloseSVGComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: CloseSVGComponent, isStandalone: true, selector: "close-svg", inputs: { size: "size", stroke: "stroke", strokeWidth: "strokeWidth" }, ngImport: i0, template: `
137
+ <svg
138
+ [attr.width]="size"
139
+ [attr.height]="size"
140
+ viewBox="0 0 32 32"
141
+ fill="none"
142
+ xmlns="https://www.w3.org/2000/svg"
143
+ >
144
+ <path
145
+ d="M10.6665 10.667L21.3332 21.3337M21.3332 10.667L10.6665 21.3337"
146
+ [attr.stroke]="stroke"
147
+ [attr.stroke-width]="strokeWidth"
148
+ stroke-linecap="round"
149
+ stroke-linejoin="round"
150
+ />
151
+ </svg>
152
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
153
+ }
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: CloseSVGComponent, decorators: [{
155
+ type: Component,
156
+ args: [{
157
+ selector: 'close-svg',
158
+ template: `
159
+ <svg
160
+ [attr.width]="size"
161
+ [attr.height]="size"
162
+ viewBox="0 0 32 32"
163
+ fill="none"
164
+ xmlns="https://www.w3.org/2000/svg"
165
+ >
166
+ <path
167
+ d="M10.6665 10.667L21.3332 21.3337M21.3332 10.667L10.6665 21.3337"
168
+ [attr.stroke]="stroke"
169
+ [attr.stroke-width]="strokeWidth"
170
+ stroke-linecap="round"
171
+ stroke-linejoin="round"
172
+ />
173
+ </svg>
174
+ `,
175
+ standalone: true,
176
+ imports: [CommonModule],
177
+ }]
178
+ }], propDecorators: { size: [{
179
+ type: Input
180
+ }], stroke: [{
181
+ type: Input
182
+ }], strokeWidth: [{
183
+ type: Input
184
+ }] } });
185
+ export class CloseButtonComponent {
186
+ size = 30;
187
+ strokeWidth = 1.2;
188
+ state;
189
+ stateService;
190
+ stateSubscription;
191
+ isVisible = false;
192
+ isMiniCard = false;
193
+ stroke = 'black';
194
+ constructor() {
195
+ this.stateService = getSpotcheckStateService();
196
+ this.state = this.stateService.getState();
197
+ this.updateComponentState();
198
+ this.stateSubscription = this.stateService.state$.subscribe((newState) => {
199
+ this.state = newState;
200
+ this.updateComponentState();
201
+ });
202
+ }
203
+ ngOnDestroy() {
204
+ if (this.stateSubscription) {
205
+ this.stateSubscription.unsubscribe();
206
+ }
207
+ }
208
+ updateComponentState() {
209
+ this.isVisible =
210
+ this.state.isCloseButtonEnabled &&
211
+ ((this.state.currentQuestionHeight > 0 && !this.state.isFullScreenMode) ||
212
+ (this.state.isFullScreenMode &&
213
+ ((!this.state.isClassicLoading &&
214
+ this.state.spotCheckType === 'classic') ||
215
+ (!this.state.isChatLoading &&
216
+ this.state.spotCheckType === 'chat'))));
217
+ this.isMiniCard = this.state.spotChecksMode === 'miniCard';
218
+ this.stroke = this.isMiniCard ? 'black' : this.state.closeButtonStyle?.['ctaButton'] || 'black';
219
+ }
220
+ onClick = async () => {
221
+ await closeSpotCheck();
222
+ handleSurveyEnd();
223
+ };
224
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: CloseButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
225
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: CloseButtonComponent, isStandalone: true, selector: "spotcheck-close-button", inputs: { size: "size", strokeWidth: "strokeWidth" }, ngImport: i0, template: `
226
+ <div style="position: absolute; top: -36px; right: 16px; z-index: 100001; cursor: pointer; background-color: white; border-radius: 50px;" (click)="onClick()" *ngIf="isVisible && isMiniCard">
227
+ <close-svg [size]="size" [stroke]="stroke" [strokeWidth]="strokeWidth" style="display: flex; align-items: center; justify-content: center;"/>
228
+ </div>
229
+ <div style="position: absolute; top: 16px; right: 16px; z-index: 100001; cursor: pointer;" (click)="onClick()" *ngIf="isVisible && !isMiniCard">
230
+ <close-svg [size]="size" [stroke]="stroke" [strokeWidth]="strokeWidth"/>
231
+ </div>
232
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CloseSVGComponent, selector: "close-svg", inputs: ["size", "stroke", "strokeWidth"] }] });
233
+ }
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: CloseButtonComponent, decorators: [{
235
+ type: Component,
236
+ args: [{
237
+ selector: 'spotcheck-close-button',
238
+ template: `
239
+ <div style="position: absolute; top: -36px; right: 16px; z-index: 100001; cursor: pointer; background-color: white; border-radius: 50px;" (click)="onClick()" *ngIf="isVisible && isMiniCard">
240
+ <close-svg [size]="size" [stroke]="stroke" [strokeWidth]="strokeWidth" style="display: flex; align-items: center; justify-content: center;"/>
241
+ </div>
242
+ <div style="position: absolute; top: 16px; right: 16px; z-index: 100001; cursor: pointer;" (click)="onClick()" *ngIf="isVisible && !isMiniCard">
243
+ <close-svg [size]="size" [stroke]="stroke" [strokeWidth]="strokeWidth"/>
244
+ </div>
245
+ `,
246
+ standalone: true,
247
+ imports: [CommonModule, CloseSVGComponent],
248
+ }]
249
+ }], ctorParameters: () => [], propDecorators: { size: [{
250
+ type: Input
251
+ }], strokeWidth: [{
252
+ type: Input
253
+ }] } });
254
+ export class SpotCheckComponent {
255
+ state;
256
+ spotcheckStateService;
257
+ stateSubscription;
258
+ componentStyles = {};
259
+ avatarUrl = '';
260
+ constructor() {
261
+ this.spotcheckStateService = getSpotcheckStateService();
262
+ this.state = this.spotcheckStateService.getState();
263
+ this.updateComponentStyles();
264
+ this.stateSubscription = this.spotcheckStateService.state$.subscribe((newState) => {
265
+ this.state = newState;
266
+ this.updateComponentStyles();
267
+ this.avatarUrl = this.state.avatarUrl || "https://static.surveysparrow.com/application/images/profile.png";
268
+ });
269
+ }
270
+ ngOnInit() {
271
+ this.initializeComponent();
272
+ }
273
+ ngOnDestroy() {
274
+ if (this.stateSubscription) {
275
+ this.stateSubscription.unsubscribe();
276
+ }
277
+ }
278
+ updateComponentStyles() {
279
+ this.componentStyles = getSpotcheckComponentCssStyles(this.state);
280
+ }
281
+ initializeComponent = async () => {
282
+ try {
283
+ const domainName = this.state.domainName;
284
+ const targetToken = this.state.targetToken;
285
+ const response = await axios.get(`https://${domainName}/api/internal/spotcheck/widget/${targetToken}/init`);
286
+ const data = response.data;
287
+ if (data.filteredSpotChecks && data.filteredSpotChecks.length > 0) {
288
+ let classicIframe = false;
289
+ let chatIframe = false;
290
+ data.filteredSpotChecks.forEach((spotcheck) => {
291
+ if (spotcheck.appearance.mode === 'fullScreen' &&
292
+ ischatSurvey(spotcheck?.survey?.surveyType)) {
293
+ chatIframe = true;
294
+ }
295
+ else {
296
+ classicIframe = true;
297
+ }
298
+ });
299
+ const newClassicUrl = classicIframe
300
+ ? `https://${domainName}/eui-template/classic`
301
+ : '';
302
+ const newChatUrl = chatIframe
303
+ ? `https://${domainName}/eui-template/chat`
304
+ : '';
305
+ this.spotcheckStateService.setState({
306
+ filteredSpotChecks: data.filteredSpotChecks,
307
+ classicUrl: newClassicUrl,
308
+ chatUrl: newChatUrl,
309
+ });
310
+ }
311
+ }
312
+ catch (error) {
313
+ console.log('Error initializing widget:', JSON.stringify(error));
314
+ }
315
+ };
316
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotCheckComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
317
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: SpotCheckComponent, isStandalone: true, selector: "SpotCheckComponent", ngImport: i0, template: "<div [ngStyle]=\"componentStyles.wrapperStyles\" class=\"safe-area\">\n <div [ngStyle]=\"componentStyles.styles\">\n <div style=\"position: relative; height: 100%;\">\n <spotcheck-close-button />\n \n <WebViewComponent\n *ngIf=\"state.classicUrl && state.classicUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'classic'\"\n [url]=\"state.classicUrl\"\n [webviewType]=\"'classic'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n \n <WebViewComponent\n *ngIf=\"state.chatUrl && state.chatUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'chat'\"\n [url]=\"state.chatUrl\"\n [webviewType]=\"'chat'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n\n <div *ngIf=\"state.spotChecksMode === 'miniCard' && state.avatarEnabled\">\n <div style=\"position: absolute; bottom: -66px; left: 16px; z-index: 100001;\">\n <img [src]=\"avatarUrl\" style=\"width: 56px; height: 56px; border-radius: 50px; background-color: white;\"/>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".safe-area{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: WebViewComponent, selector: "WebViewComponent", inputs: ["url", "webviewType", "isMiniCard"] }, { kind: "component", type: CloseButtonComponent, selector: "spotcheck-close-button", inputs: ["size", "strokeWidth"] }] });
318
+ }
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotCheckComponent, decorators: [{
320
+ type: Component,
321
+ args: [{ selector: 'SpotCheckComponent', standalone: true, imports: [CommonModule, WebViewComponent, CloseButtonComponent], template: "<div [ngStyle]=\"componentStyles.wrapperStyles\" class=\"safe-area\">\n <div [ngStyle]=\"componentStyles.styles\">\n <div style=\"position: relative; height: 100%;\">\n <spotcheck-close-button />\n \n <WebViewComponent\n *ngIf=\"state.classicUrl && state.classicUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'classic'\"\n [url]=\"state.classicUrl\"\n [webviewType]=\"'classic'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n \n <WebViewComponent\n *ngIf=\"state.chatUrl && state.chatUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'chat'\"\n [url]=\"state.chatUrl\"\n [webviewType]=\"'chat'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n\n <div *ngIf=\"state.spotChecksMode === 'miniCard' && state.avatarEnabled\">\n <div style=\"position: absolute; bottom: -66px; left: 16px; z-index: 100001;\">\n <img [src]=\"avatarUrl\" style=\"width: 56px; height: 56px; border-radius: 50px; background-color: white;\"/>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".safe-area{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);box-sizing:border-box}\n"] }]
322
+ }], ctorParameters: () => [] });
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BvdENoZWNrQ29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdENoZWNrQ29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdENoZWNrQ29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7Ozs7QUFtQjFCLE1BQU0sT0FBTyxnQkFBZ0I7SUFRUDtJQVBYLEdBQUcsR0FBVyxFQUFFLENBQUM7SUFDakIsV0FBVyxHQUF1QixTQUFTLENBQUM7SUFDNUMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVyQyxPQUFPLEdBQTJCLElBQUksQ0FBQztJQUNmLE1BQU0sQ0FBaUM7SUFFL0QsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUFHLENBQUM7SUFDL0MsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLFlBQVksR0FBRyx3QkFBd0IsRUFBRSxD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QUNQLE1BQU0sVUFBVSxHQUFHLFVBQVU7b0JBQzNCLENBQUMsQ0FBQyxXQUFXLFVBQVUsb0JBQW9CO29CQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUVQLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7b0JBQ2xDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7b0JBQzNDLFVBQVUsRUFBRSxhQUFhO29CQUN6QixPQUFPLEVBQUUsVUFBVTtpQkFDcEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUMsQ0FBQzt1R0EzRVMsa0JBQWtCOzJGQUFsQixrQkFBa0IsOEVDMU4vQixpcENBMkJBLDRQRDZMWSxZQUFZLHdOQXBMWCxnQkFBZ0IsMkdBNEhoQixvQkFBb0I7OzJGQTBEcEIsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNFLG9CQUFvQixjQUdsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBPbkluaXQsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IGNsb3NlU3BvdENoZWNrLCBjbG9zZVNwb3RDaGVja0FuZEhhbmRsZVN1cnZleUVuZCwgZ2V0U3BvdGNoZWNrQ29tcG9uZW50Q3NzU3R5bGVzLCBoYW5kbGVTdXJ2ZXlFbmQsIGlzY2hhdFN1cnZleSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBTcG90Y2hlY2tTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFNwb3RjaGVja1N0YXRlU2VydmljZSB9IGZyb20gJy4vU3BvdGNoZWNrU3RhdGVTZXJ2aWNlJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1dlYlZpZXdDb21wb25lbnQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyBoZWlnaHQ6IDEwMCU7IGJvcmRlci1yYWRpdXM6IHt7aXNNaW5pQ2FyZCA/IDEyIDogMH19cHg7IHBhZGRpbmctbGVmdDoge3tpc01pbmlDYXJkID8gMTIgOiAwfX1weDsgcGFkZGluZy1yaWdodDoge3tpc01pbmlDYXJkID8gMTIgOiAwfX1weDsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgYWxsb3c9XCJjYW1lcmE7IG1pY3JvcGhvbmU7IGdlb2xvY2F0aW9uOyBkaXNwbGF5LWNhcHR1cmU7IGF1dG9wbGF5OyBjbGlwYm9hcmQtcmVhZDsgY2xpcGJvYXJkLXdyaXRlO1wiXG4gICAgICAgICNpZnJhbWVSZWZcbiAgICAgICAgW3NyY109XCJzYWZlVXJsXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXJhZGl1czoge3tpc01pbmlDYXJkID8gMTIgOiAwfX1weDtcIlxuICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgPlxuICAgICAgPC9pZnJhbWU+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBXZWJWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgdXJsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgd2Vidmlld1R5cGU6ICdjbGFzc2ljJyB8ICdjaGF0JyA9ICdjbGFzc2ljJztcbiAgQElucHV0KCkgaXNNaW5pQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNhZmVVcmw6IFNhZmVSZXNvdXJjZVVybCB8IG51bGwgPSBudWxsO1xuICBAVmlld0NoaWxkKCdpZnJhbWVSZWYnKSBpZnJhbWUhOiBFbGVtZW50UmVmPEhUTUxJRnJhbWVFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy51cmwpIHtcbiAgICAgIHRoaXMuc2FmZVVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLnVybCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHN0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICAgIGNvbnN0IHdlYlZpZXdSZWYgPSB0aGlzLmlmcmFtZS5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRoaXMud2Vidmlld1R5cGUgPT09ICdjbGFzc2ljJykge1xuICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgY2xhc3NpY1dlYlZpZXdSZWY6IHdlYlZpZXdSZWYsXG4gICAgICAgIGlzQ2xhc3NpY0xvYWRpbmc6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICAgIGNoYXRXZWJWaWV3UmVmOiB3ZWJWaWV3UmVmLFxuICAgICAgICBpc0NoYXRMb2FkaW5nOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldHVwSWZyYW1lTG9hZExpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWZyYW1lTG9hZExpc3RlbmVyKCkge1xuICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICAgIGlmICh0aGlzLndlYnZpZXdUeXBlID09PSAnY2xhc3NpYycpIHtcbiAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgaXNDbGFzc2ljTG9hZGluZzogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoeyBpc0NoYXRMb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcbiAgb25NZXNzYWdlKGV2ZW50OiBNZXNzYWdlRXZlbnQpIHtcbiAgICBjb25zdCBzdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGV2ZW50O1xuICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICBjYXNlICdzbGlkZUluRnJhbWUnOlxuICAgICAgICBpZiAoZGF0YS5tb3VudGVkKSB7XG4gICAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgaXNNb3VudGVkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNpemVXaW5kb3cnOlxuICAgICAgICBpZiAoZGF0YS5zaXplKSB7XG4gICAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbkhlaWdodDogZGF0YS5zaXplLmhlaWdodCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmlzQ2xvc2VCdXR0b25FbmFibGVkKSB7XG4gICAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzQ2xvc2VCdXR0b25FbmFibGVkOiBkYXRhLmlzQ2xvc2VCdXR0b25FbmFibGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdXJ2ZXlDb21wbGV0ZWQnOlxuICAgICAgICBjbG9zZVNwb3RDaGVja0FuZEhhbmRsZVN1cnZleUVuZCgpO1xuICAgICAgICAvLyBzcG90Y2hlY2tzTGlzdGVuZXIuZW1pdFN1cnZleUNvbXBsZXRlZChkYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1cnZleUxvYWRTdGFydGVkJzpcbiAgICAgICAgLy8gc3BvdGNoZWNrc0xpc3RlbmVyLmVtaXRTdXJ2ZXlMb2FkU3RhcnRlZChkYXRhLnN1cnZleURldGFpbHMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nsb3NlLXN2ZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHN2Z1xuICAgICAgW2F0dHIud2lkdGhdPVwic2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwic2l6ZVwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDMyIDMyXCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIHhtbG5zPVwiaHR0cHM6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTEwLjY2NjUgMTAuNjY3TDIxLjMzMzIgMjEuMzMzN00yMS4zMzMyIDEwLjY2N0wxMC42NjY1IDIxLjMzMzdcIlxuICAgICAgICBbYXR0ci5zdHJva2VdPVwic3Ryb2tlXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInN0cm9rZVdpZHRoXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIGAsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDbG9zZVNWR0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNpemU6IG51bWJlciA9IDMyO1xuICBASW5wdXQoKSBzdHJva2U6IHN0cmluZyA9ICcjOTE5MTkxJztcbiAgQElucHV0KCkgc3Ryb2tlV2lkdGg6IG51bWJlciA9IDEuNTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BvdGNoZWNrLWNsb3NlLWJ1dHRvbicsXG4gIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0zNnB4OyByaWdodDogMTZweDsgei1pbmRleDogMTAwMDAxOyBjdXJzb3I6IHBvaW50ZXI7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1MHB4O1wiIChjbGljayk9XCJvbkNsaWNrKClcIiAqbmdJZj1cImlzVmlzaWJsZSAmJiBpc01pbmlDYXJkXCI+XG4gICAgICAgIDxjbG9zZS1zdmcgW3NpemVdPVwic2l6ZVwiIFtzdHJva2VdPVwic3Ryb2tlXCIgW3N0cm9rZVdpZHRoXT1cInN0cm9rZVdpZHRoXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIi8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTZweDsgcmlnaHQ6IDE2cHg7IHotaW5kZXg6IDEwMDAwMTsgY3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJvbkNsaWNrKClcIiAqbmdJZj1cImlzVmlzaWJsZSAmJiAhaXNNaW5pQ2FyZFwiPlxuICAgICAgICA8Y2xvc2Utc3ZnIFtzaXplXT1cInNpemVcIiBbc3Ryb2tlXT1cInN0cm9rZVwiIFtzdHJva2VXaWR0aF09XCJzdHJva2VXaWR0aFwiLz5cbiAgICAgIDwvZGl2PlxuICBgLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDbG9zZVNWR0NvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENsb3NlQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2l6ZTogbnVtYmVyID0gMzA7XG4gIEBJbnB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXIgPSAxLjI7XG4gIFxuICBzdGF0ZTogU3BvdGNoZWNrU3RhdGU7XG4gIHByaXZhdGUgc3RhdGVTZXJ2aWNlOiBTcG90Y2hlY2tTdGF0ZVNlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIFxuICBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNNaW5pQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdHJva2U6IHN0cmluZyA9ICdibGFjayc7XG4gIFxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoKTtcblxuICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnN0YXRlU2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgKG5ld1N0YXRlOiBTcG90Y2hlY2tTdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaXNpYmxlID1cbiAgICAgIHRoaXMuc3RhdGUuaXNDbG9zZUJ1dHRvbkVuYWJsZWQgJiZcbiAgICAgICgodGhpcy5zdGF0ZS5jdXJyZW50UXVlc3Rpb25IZWlnaHQgPiAwICYmICF0aGlzLnN0YXRlLmlzRnVsbFNjcmVlbk1vZGUpIHx8XG4gICAgICAgICh0aGlzLnN0YXRlLmlzRnVsbFNjcmVlbk1vZGUgJiZcbiAgICAgICAgICAoKCF0aGlzLnN0YXRlLmlzQ2xhc3NpY0xvYWRpbmcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc3BvdENoZWNrVHlwZSA9PT0gJ2NsYXNzaWMnKSB8fFxuICAgICAgICAgICAgKCF0aGlzLnN0YXRlLmlzQ2hhdExvYWRpbmcgJiZcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zcG90Q2hlY2tUeXBlID09PSAnY2hhdCcpKSkpO1xuICAgIHRoaXMuaXNNaW5pQ2FyZCA9IHRoaXMuc3RhdGUuc3BvdENoZWNrc01vZGUgPT09ICdtaW5pQ2FyZCc7XG4gICAgdGhpcy5zdHJva2UgPSB0aGlzLmlzTWluaUNhcmQgPyAnYmxhY2snIDogdGhpcy5zdGF0ZS5jbG9zZUJ1dHRvblN0eWxlPy5bJ2N0YUJ1dHRvbiddIHx8ICdibGFjayc7XG4gIH1cblxuICBvbkNsaWNrID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGNsb3NlU3BvdENoZWNrKCk7XG4gICAgaGFuZGxlU3VydmV5RW5kKCk7XG4gIH07XG59XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU3BvdENoZWNrQ29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL1Nwb3RDaGVja0NvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vU3BvdENoZWNrQ29tcG9uZW50LmNzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXZWJWaWV3Q29tcG9uZW50LCBDbG9zZUJ1dHRvbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNwb3RDaGVja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgc3RhdGU6IFNwb3RjaGVja1N0YXRlO1xuICBwcml2YXRlIHNwb3RjaGVja1N0YXRlU2VydmljZTogU3BvdGNoZWNrU3RhdGVTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGNvbXBvbmVudFN0eWxlczogYW55ID0ge307XG4gIGF2YXRhclVybDogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zcG90Y2hlY2tTdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5zcG90Y2hlY2tTdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFN0eWxlcygpO1xuXG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoXG4gICAgICAobmV3U3RhdGU6IFNwb3RjaGVja1N0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRTdHlsZXMoKTtcbiAgICAgICAgdGhpcy5hdmF0YXJVcmwgPSB0aGlzLnN0YXRlLmF2YXRhclVybCB8fCBcImh0dHBzOi8vc3RhdGljLnN1cnZleXNwYXJyb3cuY29tL2FwcGxpY2F0aW9uL2ltYWdlcy9wcm9maWxlLnBuZ1wiO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb21wb25lbnRTdHlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRTdHlsZXMgPSBnZXRTcG90Y2hlY2tDb21wb25lbnRDc3NTdHlsZXModGhpcy5zdGF0ZSk7XG4gIH1cblxuICBpbml0aWFsaXplQ29tcG9uZW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkb21haW5OYW1lID0gdGhpcy5zdGF0ZS5kb21haW5OYW1lO1xuICAgICAgY29uc3QgdGFyZ2V0VG9rZW4gPSB0aGlzLnN0YXRlLnRhcmdldFRva2VuO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoXG4gICAgICAgIGBodHRwczovLyR7ZG9tYWluTmFtZX0vYXBpL2ludGVybmFsL3Nwb3RjaGVjay93aWRnZXQvJHt0YXJnZXRUb2tlbn0vaW5pdGBcbiAgICAgICk7XG4gICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YTtcblxuICAgICAgaWYgKGRhdGEuZmlsdGVyZWRTcG90Q2hlY2tzICYmIGRhdGEuZmlsdGVyZWRTcG90Q2hlY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGNsYXNzaWNJZnJhbWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNoYXRJZnJhbWUgPSBmYWxzZTtcblxuICAgICAgICBkYXRhLmZpbHRlcmVkU3BvdENoZWNrcy5mb3JFYWNoKChzcG90Y2hlY2s6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHNwb3RjaGVjay5hcHBlYXJhbmNlLm1vZGUgPT09ICdmdWxsU2NyZWVuJyAmJlxuICAgICAgICAgICAgaXNjaGF0U3VydmV5KHNwb3RjaGVjaz8uc3VydmV5Py5zdXJ2ZXlUeXBlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY2hhdElmcmFtZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYXNzaWNJZnJhbWUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmV3Q2xhc3NpY1VybCA9IGNsYXNzaWNJZnJhbWVcbiAgICAgICAgICA/IGBodHRwczovLyR7ZG9tYWluTmFtZX0vZXVpLXRlbXBsYXRlL2NsYXNzaWNgXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgY29uc3QgbmV3Q2hhdFVybCA9IGNoYXRJZnJhbWVcbiAgICAgICAgICA/IGBodHRwczovLyR7ZG9tYWluTmFtZX0vZXVpLXRlbXBsYXRlL2NoYXRgXG4gICAgICAgICAgOiAnJztcblxuICAgICAgICB0aGlzLnNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgZmlsdGVyZWRTcG90Q2hlY2tzOiBkYXRhLmZpbHRlcmVkU3BvdENoZWNrcyxcbiAgICAgICAgICBjbGFzc2ljVXJsOiBuZXdDbGFzc2ljVXJsLFxuICAgICAgICAgIGNoYXRVcmw6IG5ld0NoYXRVcmwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW5pdGlhbGl6aW5nIHdpZGdldDonLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn1cbiIsIjxkaXYgW25nU3R5bGVdPVwiY29tcG9uZW50U3R5bGVzLndyYXBwZXJTdHlsZXNcIiBjbGFzcz1cInNhZmUtYXJlYVwiPlxuICA8ZGl2IFtuZ1N0eWxlXT1cImNvbXBvbmVudFN0eWxlcy5zdHlsZXNcIj5cbiAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICA8c3BvdGNoZWNrLWNsb3NlLWJ1dHRvbiAvPlxuICBcbiAgICAgIDxXZWJWaWV3Q29tcG9uZW50XG4gICAgICAgICpuZ0lmPVwic3RhdGUuY2xhc3NpY1VybCAmJiBzdGF0ZS5jbGFzc2ljVXJsLmxlbmd0aCA+IDAgJiYgc3RhdGUuc3BvdGNoZWNrVVJMLmxlbmd0aCA+IDAgJiYgc3RhdGUuc3BvdENoZWNrVHlwZSA9PT0gJ2NsYXNzaWMnXCJcbiAgICAgICAgW3VybF09XCJzdGF0ZS5jbGFzc2ljVXJsXCJcbiAgICAgICAgW3dlYnZpZXdUeXBlXT1cIidjbGFzc2ljJ1wiXG4gICAgICAgIFtpc01pbmlDYXJkXT1cInN0YXRlLnNwb3RDaGVja3NNb2RlID09PSAnbWluaUNhcmQnXCJcbiAgICAgIC8+XG4gIFxuICAgICAgPFdlYlZpZXdDb21wb25lbnRcbiAgICAgICAgKm5nSWY9XCJzdGF0ZS5jaGF0VXJsICYmIHN0YXRlLmNoYXRVcmwubGVuZ3RoID4gMCAmJiBzdGF0ZS5zcG90Y2hlY2tVUkwubGVuZ3RoID4gMCAmJiBzdGF0ZS5zcG90Q2hlY2tUeXBlID09PSAnY2hhdCdcIlxuICAgICAgICBbdXJsXT1cInN0YXRlLmNoYXRVcmxcIlxuICAgICAgICBbd2Vidmlld1R5cGVdPVwiJ2NoYXQnXCJcbiAgICAgICAgW2lzTWluaUNhcmRdPVwic3RhdGUuc3BvdENoZWNrc01vZGUgPT09ICdtaW5pQ2FyZCdcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiAqbmdJZj1cInN0YXRlLnNwb3RDaGVja3NNb2RlID09PSAnbWluaUNhcmQnICYmIHN0YXRlLmF2YXRhckVuYWJsZWRcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAtNjZweDsgbGVmdDogMTZweDsgei1pbmRleDogMTAwMDAxO1wiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJhdmF0YXJVcmxcIiBzdHlsZT1cIndpZHRoOiA1NnB4OyBoZWlnaHQ6IDU2cHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,65 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class SpotcheckStateService {
5
+ initialState = {
6
+ isVisible: false,
7
+ spotcheckPosition: 'bottom',
8
+ spotcheckURL: '',
9
+ spotcheckID: 0,
10
+ spotcheckContactID: 0,
11
+ afterDelay: 0.0,
12
+ maxHeight: 0.5,
13
+ currentQuestionHeight: 0,
14
+ isFullScreenMode: false,
15
+ isBannerImageOn: false,
16
+ triggerToken: '',
17
+ closeButtonStyle: {},
18
+ isCloseButtonEnabled: false,
19
+ isSpotPassed: false,
20
+ isChecksPassed: false,
21
+ customEventsSpotChecks: [],
22
+ targetToken: '',
23
+ domainName: '',
24
+ userDetails: {},
25
+ variables: {},
26
+ customProperties: {},
27
+ traceId: '',
28
+ isClassicLoading: true,
29
+ isChatLoading: true,
30
+ classicUrl: '',
31
+ chatUrl: '',
32
+ classicWebViewRef: null,
33
+ chatWebViewRef: null,
34
+ filteredSpotChecks: [],
35
+ spotCheckType: '',
36
+ isMounted: false,
37
+ textPosition: 0,
38
+ screenHeight: 0,
39
+ keyBoardHeight: 0,
40
+ spotChecksMode: '',
41
+ avatarEnabled: false,
42
+ avatarUrl: '',
43
+ screenwiseUserDetails: {}
44
+ };
45
+ spotcheckState = new BehaviorSubject(this.initialState);
46
+ state$ = this.spotcheckState.asObservable();
47
+ setState(state) {
48
+ this.spotcheckState.next({ ...this.spotcheckState.value, ...state });
49
+ }
50
+ clearState() {
51
+ this.spotcheckState.next(this.initialState);
52
+ }
53
+ getState() {
54
+ return this.spotcheckState.getValue();
55
+ }
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotcheckStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
57
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotcheckStateService, providedIn: 'root' });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotcheckStateService, decorators: [{
60
+ type: Injectable,
61
+ args: [{
62
+ providedIn: 'root',
63
+ }]
64
+ }] });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BvdGNoZWNrU3RhdGVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFNdkMsTUFBTSxPQUFPLHFCQUFxQjtJQUN4QixZQUFZLEdBQW1CO1FBQ3JDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLGlCQUFpQixFQUFFLFFBQVE7UUFDM0IsWUFBWSxFQUFFLEVBQUU7UUFDaEIsV0FBVyxFQUFFLENBQUM7UUFDZCxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JCLFVBQVUsRUFBRSxHQUFHO1FBQ2YsU0FBUyxFQUFFLEdBQUc7UUFDZCxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hCLGdCQUFnQixFQUFFLEtBQUs7UUFDdkIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsWUFBWSxFQUFFLEVBQUU7UUFDaEIsZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLFlBQVksRUFBRSxLQUFLO1FBQ25CLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLHNCQUFzQixFQUFFLEVBQUU7UUFDMUIsV0FBVyxFQUFFLEVBQUU7UUFDZixVQUFVLEVBQUUsRUFBRTtRQUNkLFdBQVcsRUFBRSxFQUFFO1FBQ2YsU0FBUyxFQUFFLEVBQUU7UUFDYixnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixhQUFhLEVBQUUsSUFBSTtRQUNuQixVQUFVLEVBQUUsRUFBRTtRQUNkLE9BQU8sRUFBRSxFQUFFO1FBQ1gsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixjQUFjLEVBQUUsSUFBSTtRQUNwQixrQkFBa0IsRUFBRSxFQUFFO1FBQ3RCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFlBQVksRUFBRSxDQUFDO1FBQ2YsWUFBWSxFQUFFLENBQUM7UUFDZixjQUFjLEVBQUUsQ0FBQztRQUNqQixjQUFjLEVBQUUsRUFBRTtRQUNsQixhQUFhLEVBQUUsS0FBSztRQUNwQixTQUFTLEVBQUUsRUFBRTtRQUNiLHFCQUFxQixFQUFFLEVBQUU7S0FDMUIsQ0FBQztJQUVNLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTVDLFFBQVEsQ0FBQyxLQUE4QjtRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7dUdBdkRVLHFCQUFxQjsyR0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNwb3RjaGVja1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTcG90Y2hlY2tTdGF0ZVNlcnZpY2Uge1xuICBwcml2YXRlIGluaXRpYWxTdGF0ZTogU3BvdGNoZWNrU3RhdGUgPSB7XG4gICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICBzcG90Y2hlY2tQb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgc3BvdGNoZWNrVVJMOiAnJyxcbiAgICBzcG90Y2hlY2tJRDogMCxcbiAgICBzcG90Y2hlY2tDb250YWN0SUQ6IDAsXG4gICAgYWZ0ZXJEZWxheTogMC4wLFxuICAgIG1heEhlaWdodDogMC41LFxuICAgIGN1cnJlbnRRdWVzdGlvbkhlaWdodDogMCxcbiAgICBpc0Z1bGxTY3JlZW5Nb2RlOiBmYWxzZSxcbiAgICBpc0Jhbm5lckltYWdlT246IGZhbHNlLFxuICAgIHRyaWdnZXJUb2tlbjogJycsXG4gICAgY2xvc2VCdXR0b25TdHlsZToge30sXG4gICAgaXNDbG9zZUJ1dHRvbkVuYWJsZWQ6IGZhbHNlLFxuICAgIGlzU3BvdFBhc3NlZDogZmFsc2UsXG4gICAgaXNDaGVja3NQYXNzZWQ6IGZhbHNlLFxuICAgIGN1c3RvbUV2ZW50c1Nwb3RDaGVja3M6IFtdLFxuICAgIHRhcmdldFRva2VuOiAnJyxcbiAgICBkb21haW5OYW1lOiAnJyxcbiAgICB1c2VyRGV0YWlsczoge30sXG4gICAgdmFyaWFibGVzOiB7fSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzOiB7fSxcbiAgICB0cmFjZUlkOiAnJyxcbiAgICBpc0NsYXNzaWNMb2FkaW5nOiB0cnVlLFxuICAgIGlzQ2hhdExvYWRpbmc6IHRydWUsXG4gICAgY2xhc3NpY1VybDogJycsXG4gICAgY2hhdFVybDogJycsXG4gICAgY2xhc3NpY1dlYlZpZXdSZWY6IG51bGwsXG4gICAgY2hhdFdlYlZpZXdSZWY6IG51bGwsXG4gICAgZmlsdGVyZWRTcG90Q2hlY2tzOiBbXSxcbiAgICBzcG90Q2hlY2tUeXBlOiAnJyxcbiAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgIHRleHRQb3NpdGlvbjogMCxcbiAgICBzY3JlZW5IZWlnaHQ6IDAsXG4gICAga2V5Qm9hcmRIZWlnaHQ6IDAsXG4gICAgc3BvdENoZWNrc01vZGU6ICcnLFxuICAgIGF2YXRhckVuYWJsZWQ6IGZhbHNlLFxuICAgIGF2YXRhclVybDogJycsXG4gICAgc2NyZWVud2lzZVVzZXJEZXRhaWxzOiB7fVxuICB9O1xuICBcbiAgcHJpdmF0ZSBzcG90Y2hlY2tTdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3BvdGNoZWNrU3RhdGU+KHRoaXMuaW5pdGlhbFN0YXRlKTtcbiAgc3RhdGUkID0gdGhpcy5zcG90Y2hlY2tTdGF0ZS5hc09ic2VydmFibGUoKTtcblxuICBzZXRTdGF0ZShzdGF0ZTogUGFydGlhbDxTcG90Y2hlY2tTdGF0ZT4pIHtcbiAgICB0aGlzLnNwb3RjaGVja1N0YXRlLm5leHQoeyAuLi50aGlzLnNwb3RjaGVja1N0YXRlLnZhbHVlLCAuLi5zdGF0ZSB9KTtcbiAgfVxuICBcbiAgY2xlYXJTdGF0ZSgpIHtcbiAgICB0aGlzLnNwb3RjaGVja1N0YXRlLm5leHQodGhpcy5pbml0aWFsU3RhdGUpO1xuICB9XG5cbiAgZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3BvdGNoZWNrU3RhdGUuZ2V0VmFsdWUoKTtcbiAgfVxufVxuIl19