posthog-js 1.151.2 → 1.152.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 (46) hide show
  1. package/dist/array.full.js +2 -2
  2. package/dist/array.full.js.map +1 -1
  3. package/dist/array.js +1 -1
  4. package/dist/array.js.map +1 -1
  5. package/dist/lib/src/extensions/surveys/components/PostHogLogo.d.ts +1 -3
  6. package/dist/lib/src/extensions/surveys/surveys-utils.d.ts +2 -1
  7. package/dist/lib/src/extensions/surveys.d.ts +11 -3
  8. package/dist/lib/src/posthog-core.d.ts +4 -0
  9. package/dist/lib/src/posthog-surveys-types.d.ts +4 -0
  10. package/dist/lib/src/posthog-surveys.d.ts +3 -0
  11. package/dist/main.js +1 -1
  12. package/dist/main.js.map +1 -1
  13. package/dist/module.d.ts +12 -1
  14. package/dist/module.js +1 -1
  15. package/dist/module.js.map +1 -1
  16. package/dist/surveys-preview.js +1 -1
  17. package/dist/surveys-preview.js.map +1 -1
  18. package/dist/surveys.js +1 -1
  19. package/dist/surveys.js.map +1 -1
  20. package/lib/package.json +1 -1
  21. package/lib/src/extensions/surveys/components/BottomSection.jsx +4 -4
  22. package/lib/src/extensions/surveys/components/BottomSection.jsx.map +1 -1
  23. package/lib/src/extensions/surveys/components/ConfirmationMessage.jsx +5 -2
  24. package/lib/src/extensions/surveys/components/ConfirmationMessage.jsx.map +1 -1
  25. package/lib/src/extensions/surveys/components/PostHogLogo.d.ts +1 -3
  26. package/lib/src/extensions/surveys/components/PostHogLogo.jsx +2 -5
  27. package/lib/src/extensions/surveys/components/PostHogLogo.jsx.map +1 -1
  28. package/lib/src/extensions/surveys/components/QuestionHeader.jsx +2 -1
  29. package/lib/src/extensions/surveys/components/QuestionHeader.jsx.map +1 -1
  30. package/lib/src/extensions/surveys/components/QuestionTypes.jsx +9 -17
  31. package/lib/src/extensions/surveys/components/QuestionTypes.jsx.map +1 -1
  32. package/lib/src/extensions/surveys/surveys-utils.d.ts +2 -1
  33. package/lib/src/extensions/surveys/surveys-utils.jsx +4 -2
  34. package/lib/src/extensions/surveys/surveys-utils.jsx.map +1 -1
  35. package/lib/src/extensions/surveys.d.ts +11 -3
  36. package/lib/src/extensions/surveys.jsx +62 -7
  37. package/lib/src/extensions/surveys.jsx.map +1 -1
  38. package/lib/src/posthog-core.d.ts +4 -0
  39. package/lib/src/posthog-core.js +8 -0
  40. package/lib/src/posthog-core.js.map +1 -1
  41. package/lib/src/posthog-surveys-types.d.ts +4 -0
  42. package/lib/src/posthog-surveys-types.js.map +1 -1
  43. package/lib/src/posthog-surveys.d.ts +3 -0
  44. package/lib/src/posthog-surveys.js +23 -1
  45. package/lib/src/posthog-surveys.js.map +1 -1
  46. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { PostHog } from '../posthog-core';
2
- import { Survey } from '../posthog-surveys-types';
2
+ import { Survey, SurveyRenderReason } from '../posthog-surveys-types';
3
3
  export declare class SurveyManager {
4
4
  private posthog;
5
5
  private surveyInFocus;
@@ -15,6 +15,13 @@ export declare class SurveyManager {
15
15
  * @returns The surveys sorted by their appearance delay
16
16
  */
17
17
  private sortSurveysByAppearanceDelay;
18
+ /**
19
+ * Checks the feature flags associated with this Survey to see if the survey can be rendered.
20
+ * @param survey
21
+ * @param instance
22
+ */
23
+ canRenderSurvey: (survey: Survey) => SurveyRenderReason;
24
+ renderSurvey: (survey: Survey, selector: Element) => void;
18
25
  callSurveysAndEvaluateDisplayLogic: (forceReload?: boolean) => void;
19
26
  private addSurveyToFocus;
20
27
  private removeSurveyFromFocus;
@@ -40,19 +47,20 @@ export declare const renderFeedbackWidgetPreview: ({ survey, root, forceDisableH
40
47
  root: HTMLElement;
41
48
  forceDisableHtml?: boolean | undefined;
42
49
  }) => void;
43
- export declare function generateSurveys(posthog: PostHog): void;
50
+ export declare function generateSurveys(posthog: PostHog): SurveyManager | undefined;
44
51
  export declare function usePopupVisibility(survey: Survey, posthog: PostHog | undefined, millisecondDelay: number, isPreviewMode: boolean, removeSurveyFromFocus: (id: string) => void): {
45
52
  isPopupVisible: boolean;
46
53
  isSurveySent: boolean;
47
54
  setIsPopupVisible: import("preact/hooks").StateUpdater<boolean>;
48
55
  };
49
- export declare function SurveyPopup({ survey, forceDisableHtml, posthog, style, previewPageIndex, removeSurveyFromFocus, }: {
56
+ export declare function SurveyPopup({ survey, forceDisableHtml, posthog, style, previewPageIndex, removeSurveyFromFocus, isPopup, }: {
50
57
  survey: Survey;
51
58
  forceDisableHtml?: boolean;
52
59
  posthog?: PostHog;
53
60
  style?: React.CSSProperties;
54
61
  previewPageIndex?: number | undefined;
55
62
  removeSurveyFromFocus: (id: string) => void;
63
+ isPopup?: boolean;
56
64
  }): JSX.Element;
57
65
  export declare function Questions({ survey, forceDisableHtml, posthog, styleOverrides, }: {
58
66
  survey: Survey;
@@ -44,6 +44,7 @@ import { isNull, isNumber } from '../utils/type-utils';
44
44
  import { ConfirmationMessage } from './surveys/components/ConfirmationMessage';
45
45
  import { OpenTextQuestion, LinkQuestion, RatingQuestion, MultipleChoiceQuestion, } from './surveys/components/QuestionTypes';
46
46
  import { logger } from '../utils/logger';
47
+ import { Cancel } from './surveys/components/QuestionHeader';
47
48
  // We cast the types here which is dangerous but protected by the top level generateSurveys call
48
49
  var window = _window;
49
50
  var document = _document;
@@ -80,7 +81,7 @@ var SurveyManager = /** @class */ (function () {
80
81
  if (!surveySeen) {
81
82
  _this.addSurveyToFocus(survey.id);
82
83
  var shadow = createShadow(style(survey === null || survey === void 0 ? void 0 : survey.appearance), survey.id);
83
- Preact.render(<SurveyPopup key={'popover-survey'} posthog={_this.posthog} survey={survey} removeSurveyFromFocus={_this.removeSurveyFromFocus}/>, shadow);
84
+ Preact.render(<SurveyPopup key={'popover-survey'} posthog={_this.posthog} survey={survey} removeSurveyFromFocus={_this.removeSurveyFromFocus} isPopup={true}/>, shadow);
84
85
  }
85
86
  };
86
87
  this.handleWidget = function (survey) {
@@ -115,6 +116,50 @@ var SurveyManager = /** @class */ (function () {
115
116
  }
116
117
  }
117
118
  };
119
+ /**
120
+ * Checks the feature flags associated with this Survey to see if the survey can be rendered.
121
+ * @param survey
122
+ * @param instance
123
+ */
124
+ this.canRenderSurvey = function (survey) {
125
+ var renderReason = {
126
+ visible: false,
127
+ };
128
+ if (survey.end_date) {
129
+ renderReason.disabledReason = "survey was completed on ".concat(survey.end_date);
130
+ return renderReason;
131
+ }
132
+ if (survey.type != SurveyType.Popover) {
133
+ renderReason.disabledReason = "Only Popover survey types can be rendered";
134
+ return renderReason;
135
+ }
136
+ var linkedFlagCheck = survey.linked_flag_key
137
+ ? _this.posthog.featureFlags.isFeatureEnabled(survey.linked_flag_key)
138
+ : true;
139
+ if (!linkedFlagCheck) {
140
+ renderReason.disabledReason = "linked feature flag ".concat(survey.linked_flag_key, " is false");
141
+ return renderReason;
142
+ }
143
+ var targetingFlagCheck = survey.targeting_flag_key
144
+ ? _this.posthog.featureFlags.isFeatureEnabled(survey.targeting_flag_key)
145
+ : true;
146
+ if (!targetingFlagCheck) {
147
+ renderReason.disabledReason = "targeting feature flag ".concat(survey.targeting_flag_key, " is false");
148
+ return renderReason;
149
+ }
150
+ var internalTargetingFlagCheck = survey.internal_targeting_flag_key
151
+ ? _this.posthog.featureFlags.isFeatureEnabled(survey.internal_targeting_flag_key)
152
+ : true;
153
+ if (!internalTargetingFlagCheck) {
154
+ renderReason.disabledReason = "internal targeting feature flag ".concat(survey.internal_targeting_flag_key, " is false");
155
+ return renderReason;
156
+ }
157
+ renderReason.visible = true;
158
+ return renderReason;
159
+ };
160
+ this.renderSurvey = function (survey, selector) {
161
+ Preact.render(<SurveyPopup key={'popover-survey'} posthog={_this.posthog} survey={survey} removeSurveyFromFocus={_this.removeSurveyFromFocus} isPopup={false}/>, selector);
162
+ };
118
163
  this.callSurveysAndEvaluateDisplayLogic = function (forceReload) {
119
164
  var _a;
120
165
  if (forceReload === void 0) { forceReload = false; }
@@ -204,7 +249,7 @@ export var renderSurveysPreview = function (_a) {
204
249
  borderBottom: "1px solid ".concat((_c = survey.appearance) === null || _c === void 0 ? void 0 : _c.borderColor),
205
250
  borderRadius: 10,
206
251
  color: textColor,
207
- }} previewPageIndex={previewPageIndex} removeSurveyFromFocus={function () { }}/>, parentElement);
252
+ }} previewPageIndex={previewPageIndex} removeSurveyFromFocus={function () { }} isPopup={true}/>, parentElement);
208
253
  };
209
254
  export var renderFeedbackWidgetPreview = function (_a) {
210
255
  var _b;
@@ -226,6 +271,7 @@ export function generateSurveys(posthog) {
226
271
  setInterval(function () {
227
272
  surveyManager.callSurveysAndEvaluateDisplayLogic(false);
228
273
  }, 1000);
274
+ return surveyManager;
229
275
  }
230
276
  export function usePopupVisibility(survey, posthog, millisecondDelay, isPreviewMode, removeSurveyFromFocus) {
231
277
  var _a = __read(useState(isPreviewMode || millisecondDelay === 0), 2), isPopupVisible = _a[0], setIsPopupVisible = _a[1];
@@ -297,7 +343,7 @@ export function usePopupVisibility(survey, posthog, millisecondDelay, isPreviewM
297
343
  }
298
344
  export function SurveyPopup(_a) {
299
345
  var _b, _c, _d, _e;
300
- var survey = _a.survey, forceDisableHtml = _a.forceDisableHtml, posthog = _a.posthog, style = _a.style, previewPageIndex = _a.previewPageIndex, removeSurveyFromFocus = _a.removeSurveyFromFocus;
346
+ var survey = _a.survey, forceDisableHtml = _a.forceDisableHtml, posthog = _a.posthog, style = _a.style, previewPageIndex = _a.previewPageIndex, removeSurveyFromFocus = _a.removeSurveyFromFocus, isPopup = _a.isPopup;
301
347
  var isPreviewMode = Number.isInteger(previewPageIndex);
302
348
  // NB: The client-side code passes the millisecondDelay in seconds, but setTimeout expects milliseconds, so we multiply by 1000
303
349
  var surveyPopupDelayMilliseconds = ((_b = survey.appearance) === null || _b === void 0 ? void 0 : _b.surveyPopupDelaySeconds)
@@ -316,6 +362,7 @@ export function SurveyPopup(_a) {
316
362
  isPreviewMode: isPreviewMode,
317
363
  previewPageIndex: previewPageIndex,
318
364
  handleCloseSurveyPopup: function () { return dismissedSurveyEvent(survey, posthog, isPreviewMode); },
365
+ isPopup: isPopup || false,
319
366
  }}>
320
367
  {!shouldShowConfirmation ? (<Questions survey={survey} forceDisableHtml={!!forceDisableHtml} posthog={posthog} styleOverrides={style}/>) : (<ConfirmationMessage header={((_c = survey.appearance) === null || _c === void 0 ? void 0 : _c.thankYouMessageHeader) || 'Thank you!'} description={((_d = survey.appearance) === null || _d === void 0 ? void 0 : _d.thankYouMessageDescription) || ''} forceDisableHtml={!!forceDisableHtml} contentType={(_e = survey.appearance) === null || _e === void 0 ? void 0 : _e.thankYouMessageDescriptionContentType} appearance={survey.appearance || defaultSurveyAppearance} styleOverrides={__assign(__assign({}, style), confirmationBoxLeftStyle)} onClose={function () { return setIsPopupVisible(false); }}/>)}
321
368
  </SurveyContext.Provider>) : (<></>);
@@ -325,7 +372,7 @@ export function Questions(_a) {
325
372
  var survey = _a.survey, forceDisableHtml = _a.forceDisableHtml, posthog = _a.posthog, styleOverrides = _a.styleOverrides;
326
373
  var textColor = getContrastingTextColor(((_b = survey.appearance) === null || _b === void 0 ? void 0 : _b.backgroundColor) || defaultSurveyAppearance.backgroundColor);
327
374
  var _d = __read(useState({}), 2), questionsResponses = _d[0], setQuestionsResponses = _d[1];
328
- var _e = useContext(SurveyContext), isPreviewMode = _e.isPreviewMode, previewPageIndex = _e.previewPageIndex;
375
+ var _e = useContext(SurveyContext), isPreviewMode = _e.isPreviewMode, previewPageIndex = _e.previewPageIndex, handleCloseSurveyPopup = _e.handleCloseSurveyPopup, isPopup = _e.isPopup;
329
376
  var _f = __read(useState(previewPageIndex || 0), 2), currentQuestionIndex = _f[0], setCurrentQuestionIndex = _f[1];
330
377
  var surveyQuestions = useMemo(function () { return getDisplayOrderQuestions(survey); }, [survey]);
331
378
  // Sync preview state
@@ -359,13 +406,21 @@ export function Questions(_a) {
359
406
  setCurrentQuestionIndex(nextStep);
360
407
  }
361
408
  };
362
- return (<form className="survey-form" style={__assign({ color: textColor, borderColor: (_c = survey.appearance) === null || _c === void 0 ? void 0 : _c.borderColor }, styleOverrides)}>
409
+ return (<form className="survey-form" style={isPopup
410
+ ? __assign({ color: textColor, borderColor: (_c = survey.appearance) === null || _c === void 0 ? void 0 : _c.borderColor }, styleOverrides) : {}}>
363
411
  {surveyQuestions.map(function (question, displayQuestionIndex) {
412
+ var _a;
364
413
  var originalQuestionIndex = question.originalQuestionIndex;
365
414
  var isVisible = isPreviewMode
366
415
  ? currentQuestionIndex === originalQuestionIndex
367
416
  : currentQuestionIndex === displayQuestionIndex;
368
- return (isVisible && (<div>
417
+ return (isVisible && (<div className="survey-box" style={isPopup
418
+ ? {
419
+ backgroundColor: ((_a = survey.appearance) === null || _a === void 0 ? void 0 : _a.backgroundColor) ||
420
+ defaultSurveyAppearance.backgroundColor,
421
+ }
422
+ : {}}>
423
+ {isPopup && <Cancel onClick={function () { return handleCloseSurveyPopup(); }}/>}
369
424
  {getQuestionComponent({
370
425
  question: question,
371
426
  forceDisableHtml: forceDisableHtml,
@@ -420,7 +475,7 @@ export function FeedbackWidget(_a) {
420
475
  <div className="ph-survey-widget-tab-icon"></div>
421
476
  {((_c = survey.appearance) === null || _c === void 0 ? void 0 : _c.widgetLabel) || ''}
422
477
  </div>)}
423
- {showSurvey && (<SurveyPopup key={'feedback-widget-survey'} posthog={posthog} survey={survey} forceDisableHtml={forceDisableHtml} style={styleOverrides} removeSurveyFromFocus={removeSurveyFromFocus}/>)}
478
+ {showSurvey && (<SurveyPopup key={'feedback-widget-survey'} posthog={posthog} survey={survey} forceDisableHtml={forceDisableHtml} style={styleOverrides} removeSurveyFromFocus={removeSurveyFromFocus} isPopup={true}/>)}
424
479
  </>);
425
480
  }
426
481
  var getQuestionComponent = function (_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"surveys.jsx","sourceRoot":"","sources":["../../../src/extensions/surveys.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAIH,2BAA2B,EAC3B,kBAAkB,EAClB,UAAU,GACb,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EACH,KAAK,EACL,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,aAAa,EACb,wBAAwB,EACxB,aAAa,GAChB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC9E,OAAO,EACH,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,sBAAsB,GACzB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,gGAAgG;AAChG,IAAM,MAAM,GAAG,OAAqC,CAAA;AACpD,IAAM,QAAQ,GAAG,SAAqB,CAAA;AAEtC;IAII,uBAAY,OAAgB;QAA5B,iBAIC;QAEO,gCAA2B,GAAG;;YAClC,wFAAwF;YACxF,qGAAqG;YACrG,wGAAwG;YACxG,8GAA8G;YAC9G,sGAAsG;YACtG,8BAA8B;YAC9B,IAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;YAC3E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,OAAO,CAAA,MAAA,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,0CAAE,iBAAiB,MAAK,CAAC,CAAA;aACnF;YACD,OAAO,IAAI,CAAA;QACf,CAAC,CAAA;QAEO,wBAAmB,GAAG,UAAC,MAAc;;YACzC,IAAM,sBAAsB,GAAG,MAAA,MAAM,CAAC,UAAU,0CAAE,0BAA0B,CAAA;YAC5E,IAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;YACrE,IAAI,sBAAsB,IAAI,kBAAkB,EAAE;gBAC9C,IAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;gBACxB,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC/E,IAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;gBAC9D,IAAI,iBAAiB,GAAG,sBAAsB,EAAE;oBAC5C,OAAM;iBACT;aACJ;YAED,IAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;YACxC,IAAI,CAAC,UAAU,EAAE;gBACb,KAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAChC,IAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;gBACjE,MAAM,CAAC,MAAM,CACT,CAAC,WAAW,CACR,GAAG,CAAC,CAAC,gBAAgB,CAAC,CACtB,OAAO,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,CACtB,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,qBAAqB,CAAC,CAAC,KAAI,CAAC,qBAAqB,CAAC,EACpD,EACF,MAAM,CACT,CAAA;aACJ;QACL,CAAC,CAAA;QAEO,iBAAY,GAAG,UAAC,MAAc;YAClC,IAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;YACzC,IAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACjD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;YACnG,MAAM,CAAC,MAAM,CACT,CAAC,cAAc,CACX,GAAG,CAAC,CAAC,iBAAiB,CAAC,CACvB,OAAO,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,CACtB,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,qBAAqB,CAAC,CAAC,KAAI,CAAC,qBAAqB,CAAC,EACpD,EACF,MAAM,CACT,CAAA;QACL,CAAC,CAAA;QAEO,yBAAoB,GAAG,UAAC,MAAc;;YAC1C,IAAM,cAAc,GAChB,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,cAAc,KAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YACjG,IAAI,cAAc,EAAE;gBAChB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,wBAAiB,MAAM,CAAC,EAAE,CAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtE,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;iBAC5B;qBAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,wBAAiB,MAAM,CAAC,EAAE,CAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC7E,4IAA4I;oBAC5I,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,6BAA6B,CAAC,EAAE;wBAC7D,IAAM,aAAW,GAAG,MAAA,MAAA,QAAQ;6BACvB,aAAa,CAAC,wBAAiB,MAAM,CAAC,EAAE,CAAE,CAAC,0CAC1C,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAoB,CAAA;wBAClE,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE;4BACrC,IAAI,aAAW,EAAE;gCACb,aAAW,CAAC,KAAK,CAAC,OAAO,GAAG,aAAW,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;gCACnF,aAAW,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;oCAC3C,KAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oCACrC,aAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;gCACtC,CAAC,CAAC,CAAA;6BACL;wBACL,CAAC,CAAC,CAAA;wBACF,cAAc,CAAC,YAAY,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;qBACrE;iBACJ;aACJ;QACL,CAAC,CAAA;QAcM,uCAAkC,GAAG,UAAC,WAA4B;;YAA5B,4BAAA,EAAA,mBAA4B;YACrE,MAAA,KAAI,CAAC,OAAO,0CAAE,wBAAwB,CAAC,UAAC,OAAO;gBAC3C,IAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,IAAI,KAAK,KAAK,EAArB,CAAqB,CAAC,CAAA;gBAEvE,kGAAkG;gBAClG,gFAAgF;gBAChF,IAAM,iBAAiB,GAAG,KAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAA;gBAE1E,iBAAiB,CAAC,OAAO,CAAC,UAAC,MAAM;;oBAC7B,8DAA8D;oBAC9D,IAAI,CAAC,MAAM,CAAC,KAAI,CAAC,aAAa,CAAC,EAAE;wBAC7B,OAAM;qBACT;oBACD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,EAAE;wBACnC,IACI,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,UAAU,MAAK,KAAK;4BACvC,QAAQ,CAAC,gBAAgB,CAAC,wBAAiB,MAAM,CAAC,EAAE,CAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EACtE;4BACE,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;yBAC5B;wBACD,IAAI,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,UAAU,MAAK,UAAU,KAAI,MAAA,MAAM,CAAC,UAAU,0CAAE,cAAc,CAAA,EAAE;4BACnF,KAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;yBACpC;qBACJ;oBAED,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,IAAI,KAAI,CAAC,2BAA2B,EAAE,EAAE;wBAC1E,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;qBACnC;gBACL,CAAC,CAAC,CAAA;YACN,CAAC,EAAE,WAAW,CAAC,CAAA;QACnB,CAAC,CAAA;QAEO,qBAAgB,GAAG,UAAC,EAAU;YAClC,IAAI,CAAC,MAAM,CAAC,KAAI,CAAC,aAAa,CAAC,EAAE;gBAC7B,MAAM,CAAC,KAAK,CAAC,0CAAc,KAAI,CAAC,aAAa,2DAAyC,EAAE,MAAG,CAAC,CAAA;aAC/F;YACD,KAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAC3B,CAAC,CAAA;QAEO,0BAAqB,GAAG,UAAC,EAAU;YACvC,IAAI,KAAI,CAAC,aAAa,KAAK,EAAE,EAAE;gBAC3B,MAAM,CAAC,KAAK,CAAC,iBAAU,EAAE,oDAA0C,EAAE,MAAG,CAAC,CAAA;aAC5E;YACD,KAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC7B,CAAC,CAAA;QAjJG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,kGAAkG;QAClG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;IAC7B,CAAC;IAsFD;;;;;OAKG;IACK,oDAA4B,GAApC,UAAqC,OAAiB;QAClD,OAAO,OAAO,CAAC,IAAI,CACf,UAAC,CAAC,EAAE,CAAC,gBAAK,OAAA,CAAC,CAAA,MAAA,CAAC,CAAC,UAAU,0CAAE,uBAAuB,KAAI,CAAC,CAAC,GAAG,CAAC,CAAA,MAAA,CAAC,CAAC,UAAU,0CAAE,uBAAuB,KAAI,CAAC,CAAC,CAAA,EAAA,CACxG,CAAA;IACL,CAAC;IAgDD,gDAAgD;IACzC,kCAAU,GAAjB;QACI,OAAO;YACH,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;YAC7D,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,4BAA4B,EAAE,IAAI,CAAC,4BAA4B;SAClE,CAAA;IACL,CAAC;IACL,oBAAC;AAAD,CAAC,AArKD,IAqKC;;AAED,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAC,EAUpC;;QATG,MAAM,YAAA,EACN,aAAa,mBAAA,EACb,gBAAgB,sBAAA,EAChB,gBAAgB,sBAAA;IAOhB,IAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACjD,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAEpG,qCAAqC;IACrC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;QAC7C,IAAI,KAAK,YAAY,gBAAgB,EAAE;YACnC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;SACnC;IACL,CAAC,CAAC,CAAA;IAEF,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IACvC,IAAM,SAAS,GAAG,uBAAuB,CACrC,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,eAAe,KAAI,uBAAuB,CAAC,eAAe,IAAI,OAAO,CAC3F,CAAA;IAED,MAAM,CAAC,MAAM,CACT,CAAC,WAAW,CACR,GAAG,CAAC,wBAAwB,CAC5B,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACnC,KAAK,CAAC,CAAC;YACH,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,oBAAa,MAAA,MAAM,CAAC,UAAU,0CAAE,WAAW,CAAE;YAC3D,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,SAAS;SACnB,CAAC,CACF,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACnC,qBAAqB,CAAC,CAAC,cAAO,CAAC,CAAC,EAClC,EACF,aAAa,CAChB,CAAA;AACL,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,2BAA2B,GAAG,UAAC,EAQ3C;;QAPG,MAAM,YAAA,EACN,IAAI,UAAA,EACJ,gBAAgB,sBAAA;IAMhB,IAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAA,MAAM,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAA;IAC1E,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACpG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAC9B,MAAM,CAAC,MAAM,CACT,CAAC,cAAc,CACX,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAC/B,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACnC,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,QAAQ,CAAC,CAAC,IAAI,CAAC,CACf,qBAAqB,CAAC,CAAC,cAAO,CAAC,CAAC,EAClC,EACF,IAAI,CACP,CAAA;AACL,CAAC,CAAA;AAED,qCAAqC;AACrC,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC5C,sFAAsF;IACtF,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE;QACtB,OAAM;KACT;IAED,IAAM,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAA;IAChD,aAAa,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAA;IAEtD,6EAA6E;IAC7E,WAAW,CAAC;QACR,aAAa,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAA;IAC3D,CAAC,EAAE,IAAI,CAAC,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,MAAc,EACd,OAA4B,EAC5B,gBAAwB,EACxB,aAAsB,EACtB,qBAA2C;IAErC,IAAA,KAAA,OAAsC,QAAQ,CAAC,aAAa,IAAI,gBAAgB,KAAK,CAAC,CAAC,IAAA,EAAtF,cAAc,QAAA,EAAE,iBAAiB,QAAqD,CAAA;IACvF,IAAA,KAAA,OAAkC,QAAQ,CAAC,KAAK,CAAC,IAAA,EAAhD,YAAY,QAAA,EAAE,eAAe,QAAmB,CAAA;IAEvD,SAAS,CAAC;QACN,IAAI,aAAa,IAAI,CAAC,OAAO,EAAE;YAC3B,OAAM;SACT;QAED,IAAM,kBAAkB,GAAG;YACvB,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAChC,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAA;QAED,IAAM,gBAAgB,GAAG;;YACrB,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,sBAAsB,CAAA,EAAE;gBAC5C,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAChC,iBAAiB,CAAC,KAAK,CAAC,CAAA;aAC3B;iBAAM;gBACH,eAAe,CAAC,IAAI,CAAC,CAAA;gBACrB,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAChC,IAAI,MAAA,MAAM,CAAC,UAAU,0CAAE,aAAa,EAAE;oBAClC,UAAU,CAAC;wBACP,iBAAiB,CAAC,KAAK,CAAC,CAAA;oBAC5B,CAAC,EAAE,IAAI,CAAC,CAAA;iBACX;aACJ;QACL,CAAC,CAAA;QAED,IAAM,UAAU,GAAG;;YACf,iBAAiB,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAA;YAChD,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC5B,YAAY,EAAE,MAAM,CAAC,IAAI;gBACzB,UAAU,EAAE,MAAM,CAAC,EAAE;gBACrB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,4BAA4B,EAAE,MAAM,CAAC,4BAA4B;gBACjE,mBAAmB,EAAE,MAAA,OAAO,CAAC,sBAAsB,uDAAI;aAC1D,CAAC,CAAA;YACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;QACxE,CAAC,CAAA;QAED,IAAM,yBAAyB,GAAG;YAC9B,IAAM,SAAS,GAAG,UAAU,CAAC;gBACzB,UAAU,EAAE,CAAA;YAChB,CAAC,EAAE,gBAAgB,CAAC,CAAA;YAEpB,OAAO;gBACH,YAAY,CAAC,SAAS,CAAC,CAAA;gBACvB,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;gBAChE,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;YAChE,CAAC,CAAA;QACL,CAAC,CAAA;QAED,IAAM,2BAA2B,GAAG;YAChC,UAAU,EAAE,CAAA;YACZ,OAAO;gBACH,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;gBAChE,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;YAChE,CAAC,CAAA;QACL,CAAC,CAAA;QAED,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;QAC7D,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;QAEzD,IAAI,gBAAgB,GAAG,CAAC,EAAE;YACtB,OAAO,yBAAyB,EAAE,CAAA;SACrC;aAAM;YACH,OAAO,2BAA2B,EAAE,CAAA;SACvC;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAE,cAAc,gBAAA,EAAE,YAAY,cAAA,EAAE,iBAAiB,mBAAA,EAAE,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAc3B;;QAbG,MAAM,YAAA,EACN,gBAAgB,sBAAA,EAChB,OAAO,aAAA,EACP,KAAK,WAAA,EACL,gBAAgB,sBAAA,EAChB,qBAAqB,2BAAA;IASrB,IAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IACxD,+HAA+H;IAC/H,IAAM,4BAA4B,GAAG,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,uBAAuB;QAC3E,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI;QAClD,CAAC,CAAC,CAAC,CAAA;IACD,IAAA,KAAsD,kBAAkB,CAC1E,MAAM,EACN,OAAO,EACP,4BAA4B,EAC5B,aAAa,EACb,qBAAqB,CACxB,EANO,cAAc,oBAAA,EAAE,YAAY,kBAAA,EAAE,iBAAiB,uBAMtD,CAAA;IACD,IAAM,sBAAsB,GAAG,YAAY,IAAI,gBAAgB,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAA;IAC3F,IAAM,wBAAwB,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,KAAI,QAAQ,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEtG,IAAI,aAAa,EAAE;QACf,KAAK,GAAG,KAAK,IAAI,EAAE,CAAA;QACnB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAA;QACpB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAA;QACrB,KAAK,CAAC,SAAS,GAAG,OAAO,CAAA;KAC5B;IAED,OAAO,cAAc,CAAC,CAAC,CAAC,CACpB,CAAC,aAAa,CAAC,QAAQ,CACnB,KAAK,CAAC,CAAC;YACH,aAAa,eAAA;YACb,gBAAgB,EAAE,gBAAgB;YAClC,sBAAsB,EAAE,cAAM,OAAA,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAApD,CAAoD;SACrF,CAAC,CAEF;YAAA,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CACvB,CAAC,SAAS,CACN,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CACrC,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,cAAc,CAAC,CAAC,KAAK,CAAC,EACxB,CACL,CAAC,CAAC,CAAC,CACA,CAAC,mBAAmB,CAChB,MAAM,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,qBAAqB,KAAI,YAAY,CAAC,CACjE,WAAW,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,0BAA0B,KAAI,EAAE,CAAC,CACjE,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CACrC,WAAW,CAAC,CAAC,MAAA,MAAM,CAAC,UAAU,0CAAE,qCAAqC,CAAC,CACtE,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,uBAAuB,CAAC,CACzD,cAAc,CAAC,uBAAM,KAAK,GAAK,wBAAwB,EAAG,CAC1D,OAAO,CAAC,CAAC,cAAM,OAAA,iBAAiB,CAAC,KAAK,CAAC,EAAxB,CAAwB,CAAC,EAC1C,CACL,CACL;QAAA,EAAE,aAAa,CAAC,QAAQ,CAAC,CAC5B,CAAC,CAAC,CAAC,CACA,EAAE,GAAG,CACR,CAAA;AACL,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAUzB;;QATG,MAAM,YAAA,EACN,gBAAgB,sBAAA,EAChB,OAAO,aAAA,EACP,cAAc,oBAAA;IAOd,IAAM,SAAS,GAAG,uBAAuB,CACrC,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,eAAe,KAAI,uBAAuB,CAAC,eAAe,CAChF,CAAA;IACK,IAAA,KAAA,OAA8C,QAAQ,CAAC,EAAE,CAAC,IAAA,EAAzD,kBAAkB,QAAA,EAAE,qBAAqB,QAAgB,CAAA;IAC1D,IAAA,KAAsC,UAAU,CAAC,aAAa,CAAC,EAA7D,aAAa,mBAAA,EAAE,gBAAgB,sBAA8B,CAAA;IAC/D,IAAA,KAAA,OAAkD,QAAQ,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAA,EAAhF,oBAAoB,QAAA,EAAE,uBAAuB,QAAmC,CAAA;IACvF,IAAM,eAAe,GAAG,OAAO,CAAC,cAAM,OAAA,wBAAwB,CAAC,MAAM,CAAC,EAAhC,CAAgC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEjF,qBAAqB;IACrB,SAAS,CAAC;QACN,uBAAuB,CAAC,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,CAAC,CAAC,CAAA;IAClD,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAEtB,IAAM,iBAAiB,GAAG,UAAC,EAQ1B;;YAPG,GAAG,SAAA,EACH,qBAAqB,2BAAA,EACrB,oBAAoB,0BAAA;QAMpB,IAAI,CAAC,OAAO,EAAE;YACV,OAAM;SACT;QAED,IAAM,WAAW,GACb,qBAAqB,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,2BAAoB,qBAAqB,CAAE,CAAA;QAElG,qBAAqB,uBAAM,kBAAkB,gBAAG,WAAW,IAAG,GAAG,OAAG,CAAA;QAEpE,wBAAwB;QACxB,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC5B,IAAM,uBAAuB,GAAG,oBAAoB,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;YACpF,IAAI,uBAAuB,EAAE;gBACzB,eAAe,uBAAM,kBAAkB,gBAAG,WAAW,IAAG,GAAG,QAAI,MAAM,EAAE,OAAO,CAAC,CAAA;aAClF;iBAAM;gBACH,uBAAuB,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAA;aACpD;YACD,OAAM;SACT;QAED,IAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAA;QAC7E,IAAI,QAAQ,KAAK,2BAA2B,CAAC,GAAG,EAAE;YAC9C,eAAe,uBAAM,kBAAkB,gBAAG,WAAW,IAAG,GAAG,QAAI,MAAM,EAAE,OAAO,CAAC,CAAA;SAClF;aAAM;YACH,uBAAuB,CAAC,QAAQ,CAAC,CAAA;SACpC;IACL,CAAC,CAAA;IAED,OAAO,CACH,CAAC,IAAI,CACD,SAAS,CAAC,aAAa,CACvB,KAAK,CAAC,YACF,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAA,MAAM,CAAC,UAAU,0CAAE,WAAW,IACxC,cAAc,EACnB,CAEF;YAAA,CAAC,eAAe,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,oBAAoB;YACxC,IAAA,qBAAqB,GAAK,QAAQ,sBAAb,CAAa;YAE1C,IAAM,SAAS,GAAG,aAAa;gBAC3B,CAAC,CAAC,oBAAoB,KAAK,qBAAqB;gBAChD,CAAC,CAAC,oBAAoB,KAAK,oBAAoB,CAAA;YACnD,OAAO,CACH,SAAS,IAAI,CACT,CAAC,GAAG,CACA;4BAAA,CAAC,oBAAoB,CAAC;oBAClB,QAAQ,UAAA;oBACR,gBAAgB,kBAAA;oBAChB,oBAAoB,sBAAA;oBACpB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,uBAAuB;oBACxD,QAAQ,EAAE,UAAC,GAAG;wBACV,OAAA,iBAAiB,CAAC;4BACd,GAAG,KAAA;4BACH,qBAAqB,uBAAA;4BACrB,oBAAoB,sBAAA;yBACvB,CAAC;oBAJF,CAIE;iBACT,CAAC,CACN;wBAAA,EAAE,GAAG,CAAC,CACT,CACJ,CAAA;QACL,CAAC,CAAC,CACN;QAAA,EAAE,IAAI,CAAC,CACV,CAAA;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAY9B;;QAXG,MAAM,YAAA,EACN,gBAAgB,sBAAA,EAChB,OAAO,aAAA,EACP,QAAQ,cAAA,EACR,qBAAqB,2BAAA;IAQf,IAAA,KAAA,OAA8B,QAAQ,CAAC,KAAK,CAAC,IAAA,EAA5C,UAAU,QAAA,EAAE,aAAa,QAAmB,CAAA;IAC7C,IAAA,KAAA,OAA6B,QAAQ,CAAC,EAAE,CAAC,IAAA,EAAxC,cAAc,QAAA,EAAE,QAAQ,QAAgB,CAAA;IAC/C,IAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAE9C,SAAS,CAAC;;QACN,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE;YACtB,OAAM;SACT;QAED,IAAI,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,UAAU,MAAK,KAAK,EAAE;YACzC,IAAI,SAAS,CAAC,OAAO,EAAE;gBACnB,IAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAA;gBAC3D,IAAM,OAAK,GAAG;oBACV,GAAG,EAAE,KAAK;oBACV,IAAI,EAAE,QAAQ,CAAC,UAAG,SAAS,CAAC,KAAK,GAAG,GAAG,CAAE,CAAC;oBAC1C,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,EAAE;oBAChB,YAAY,EAAE,sBAAe,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,WAAW,KAAI,SAAS,CAAE;iBAC7E,CAAA;gBACD,QAAQ,CAAC,OAAK,CAAC,CAAA;aAClB;SACJ;QACD,IAAI,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,UAAU,MAAK,UAAU,EAAE;YAC9C,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;YAC7E,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,OAAO,EAAE;gBAC9B,aAAa,CAAC,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC,CAAC,CAAA;YACF,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;SAC9D;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACH,EACI;YAAA,CAAC,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,UAAU,MAAK,KAAK,IAAI,CACxC,CAAC,GAAG,CACA,SAAS,CAAC,sBAAsB,CAChC,GAAG,CAAC,CAAC,SAAS,CAAC,CACf,OAAO,CAAC,CAAC,cAAM,OAAA,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC,UAAU,CAAC,EAAvC,CAAuC,CAAC,CACvD,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,uBAAuB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAEzE;oBAAA,CAAC,GAAG,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAAE,GAAG,CAChD;oBAAA,CAAC,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,WAAW,KAAI,EAAE,CACzC;gBAAA,EAAE,GAAG,CAAC,CACT,CACD;YAAA,CAAC,UAAU,IAAI,CACX,CAAC,WAAW,CACR,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACnC,KAAK,CAAC,CAAC,cAAc,CAAC,CACtB,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,EAC/C,CACL,CACL;QAAA,GAAG,CACN,CAAA;AACL,CAAC;AAUD,IAAM,oBAAoB,GAAG,UAAC,EAMF;;QALxB,QAAQ,cAAA,EACR,gBAAgB,sBAAA,EAChB,oBAAoB,0BAAA,EACpB,UAAU,gBAAA,EACV,QAAQ,cAAA;IAER,IAAM,kBAAkB;QACpB,GAAC,kBAAkB,CAAC,IAAI,IAAG,gBAAgB;QAC3C,GAAC,kBAAkB,CAAC,IAAI,IAAG,YAAY;QACvC,GAAC,kBAAkB,CAAC,MAAM,IAAG,cAAc;QAC3C,GAAC,kBAAkB,CAAC,YAAY,IAAG,sBAAsB;QACzD,GAAC,kBAAkB,CAAC,cAAc,IAAG,sBAAsB;WAC9D,CAAA;IAED,IAAM,WAAW,GAAG;QAChB,QAAQ,UAAA;QACR,gBAAgB,kBAAA;QAChB,UAAU,YAAA;QACV,QAAQ,UAAA;KACX,CAAA;IAED,IAAM,eAAe;QACjB,GAAC,kBAAkB,CAAC,IAAI,IAAG,EAAE;QAC7B,GAAC,kBAAkB,CAAC,IAAI,IAAG,EAAE;QAC7B,GAAC,kBAAkB,CAAC,MAAM,IAAG,EAAE,oBAAoB,sBAAA,EAAE;QACrD,GAAC,kBAAkB,CAAC,YAAY,IAAG,EAAE,oBAAoB,sBAAA,EAAE;QAC3D,GAAC,kBAAkB,CAAC,cAAc,IAAG,EAAE,oBAAoB,sBAAA,EAAE;WAChE,CAAA;IAED,IAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACnD,IAAM,cAAc,yBAAQ,WAAW,GAAK,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAE,CAAA;IAE5E,OAAO,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,EAAG,CAAA;AAC5C,CAAC,CAAA","sourcesContent":["import { PostHog } from '../posthog-core'\nimport {\n Survey,\n SurveyAppearance,\n SurveyQuestion,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveyType,\n} from '../posthog-surveys-types'\n\nimport { window as _window, document as _document } from '../utils/globals'\nimport {\n style,\n defaultSurveyAppearance,\n sendSurveyEvent,\n dismissedSurveyEvent,\n createShadow,\n getContrastingTextColor,\n SurveyContext,\n getDisplayOrderQuestions,\n getSurveySeen,\n} from './surveys/surveys-utils'\nimport * as Preact from 'preact'\nimport { createWidgetShadow, createWidgetStyle } from './surveys-widget'\nimport { useState, useEffect, useRef, useContext, useMemo } from 'preact/hooks'\nimport { isNull, isNumber } from '../utils/type-utils'\nimport { ConfirmationMessage } from './surveys/components/ConfirmationMessage'\nimport {\n OpenTextQuestion,\n LinkQuestion,\n RatingQuestion,\n MultipleChoiceQuestion,\n} from './surveys/components/QuestionTypes'\nimport { logger } from '../utils/logger'\n\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window & typeof globalThis\nconst document = _document as Document\n\nexport class SurveyManager {\n private posthog: PostHog\n private surveyInFocus: string | null\n\n constructor(posthog: PostHog) {\n this.posthog = posthog\n // This is used to track the survey that is currently in focus. We only show one survey at a time.\n this.surveyInFocus = null\n }\n\n private canShowNextEventBasedSurvey = (): boolean => {\n // with event based surveys, we need to show the next survey without reloading the page.\n // A simple check for div elements with the class name pattern of PostHogSurvey_xyz doesn't work here\n // because preact leaves behind the div element for any surveys responded/dismissed with a <style> node.\n // To alleviate this, we check the last div in the dom and see if it has any elements other than a Style node.\n // if the last PostHogSurvey_xyz div has only one style node, we can show the next survey in the queue\n // without reloading the page.\n const surveyPopups = document.querySelectorAll(`div[class^=PostHogSurvey]`)\n if (surveyPopups.length > 0) {\n return surveyPopups[surveyPopups.length - 1].shadowRoot?.childElementCount === 1\n }\n return true\n }\n\n private handlePopoverSurvey = (survey: Survey): void => {\n const surveyWaitPeriodInDays = survey.conditions?.seenSurveyWaitPeriodInDays\n const lastSeenSurveyDate = localStorage.getItem(`lastSeenSurveyDate`)\n if (surveyWaitPeriodInDays && lastSeenSurveyDate) {\n const today = new Date()\n const diff = Math.abs(today.getTime() - new Date(lastSeenSurveyDate).getTime())\n const diffDaysFromToday = Math.ceil(diff / (1000 * 3600 * 24))\n if (diffDaysFromToday < surveyWaitPeriodInDays) {\n return\n }\n }\n\n const surveySeen = getSurveySeen(survey)\n if (!surveySeen) {\n this.addSurveyToFocus(survey.id)\n const shadow = createShadow(style(survey?.appearance), survey.id)\n Preact.render(\n <SurveyPopup\n key={'popover-survey'}\n posthog={this.posthog}\n survey={survey}\n removeSurveyFromFocus={this.removeSurveyFromFocus}\n />,\n shadow\n )\n }\n }\n\n private handleWidget = (survey: Survey): void => {\n const shadow = createWidgetShadow(survey)\n const surveyStyleSheet = style(survey.appearance)\n shadow.appendChild(Object.assign(document.createElement('style'), { innerText: surveyStyleSheet }))\n Preact.render(\n <FeedbackWidget\n key={'feedback-survey'}\n posthog={this.posthog}\n survey={survey}\n removeSurveyFromFocus={this.removeSurveyFromFocus}\n />,\n shadow\n )\n }\n\n private handleWidgetSelector = (survey: Survey): void => {\n const selectorOnPage =\n survey.appearance?.widgetSelector && document.querySelector(survey.appearance.widgetSelector)\n if (selectorOnPage) {\n if (document.querySelectorAll(`.PostHogWidget${survey.id}`).length === 0) {\n this.handleWidget(survey)\n } else if (document.querySelectorAll(`.PostHogWidget${survey.id}`).length === 1) {\n // we have to check if user selector already has a survey listener attached to it because we always have to check if it's on the page or not\n if (!selectorOnPage.getAttribute('PHWidgetSurveyClickListener')) {\n const surveyPopup = document\n .querySelector(`.PostHogWidget${survey.id}`)\n ?.shadowRoot?.querySelector(`.survey-form`) as HTMLFormElement\n selectorOnPage.addEventListener('click', () => {\n if (surveyPopup) {\n surveyPopup.style.display = surveyPopup.style.display === 'none' ? 'block' : 'none'\n surveyPopup.addEventListener('PHSurveyClosed', () => {\n this.removeSurveyFromFocus(survey.id)\n surveyPopup.style.display = 'none'\n })\n }\n })\n selectorOnPage.setAttribute('PHWidgetSurveyClickListener', 'true')\n }\n }\n }\n }\n\n /**\n * Sorts surveys by their appearance delay in ascending order. If a survey does not have an appearance delay,\n * it is considered to have a delay of 0.\n * @param surveys\n * @returns The surveys sorted by their appearance delay\n */\n private sortSurveysByAppearanceDelay(surveys: Survey[]): Survey[] {\n return surveys.sort(\n (a, b) => (a.appearance?.surveyPopupDelaySeconds || 0) - (b.appearance?.surveyPopupDelaySeconds || 0)\n )\n }\n\n public callSurveysAndEvaluateDisplayLogic = (forceReload: boolean = false): void => {\n this.posthog?.getActiveMatchingSurveys((surveys) => {\n const nonAPISurveys = surveys.filter((survey) => survey.type !== 'api')\n\n // Create a queue of surveys sorted by their appearance delay. We will evaluate the display logic\n // for each survey in the queue in order, and only display one survey at a time.\n const nonAPISurveyQueue = this.sortSurveysByAppearanceDelay(nonAPISurveys)\n\n nonAPISurveyQueue.forEach((survey) => {\n // We only evaluate the display logic for one survey at a time\n if (!isNull(this.surveyInFocus)) {\n return\n }\n if (survey.type === SurveyType.Widget) {\n if (\n survey.appearance?.widgetType === 'tab' &&\n document.querySelectorAll(`.PostHogWidget${survey.id}`).length === 0\n ) {\n this.handleWidget(survey)\n }\n if (survey.appearance?.widgetType === 'selector' && survey.appearance?.widgetSelector) {\n this.handleWidgetSelector(survey)\n }\n }\n\n if (survey.type === SurveyType.Popover && this.canShowNextEventBasedSurvey()) {\n this.handlePopoverSurvey(survey)\n }\n })\n }, forceReload)\n }\n\n private addSurveyToFocus = (id: string): void => {\n if (!isNull(this.surveyInFocus)) {\n logger.error(`Survey ${[...this.surveyInFocus]} already in focus. Cannot add survey ${id}.`)\n }\n this.surveyInFocus = id\n }\n\n private removeSurveyFromFocus = (id: string): void => {\n if (this.surveyInFocus !== id) {\n logger.error(`Survey ${id} is not in focus. Cannot remove survey ${id}.`)\n }\n this.surveyInFocus = null\n }\n\n // Expose internal state and methods for testing\n public getTestAPI() {\n return {\n addSurveyToFocus: this.addSurveyToFocus,\n removeSurveyFromFocus: this.removeSurveyFromFocus,\n surveyInFocus: this.surveyInFocus,\n canShowNextEventBasedSurvey: this.canShowNextEventBasedSurvey,\n handleWidget: this.handleWidget,\n handlePopoverSurvey: this.handlePopoverSurvey,\n handleWidgetSelector: this.handleWidgetSelector,\n sortSurveysByAppearanceDelay: this.sortSurveysByAppearanceDelay,\n }\n }\n}\n\nexport const renderSurveysPreview = ({\n survey,\n parentElement,\n previewPageIndex,\n forceDisableHtml,\n}: {\n survey: Survey\n parentElement: HTMLElement\n previewPageIndex: number\n forceDisableHtml?: boolean\n}) => {\n const surveyStyleSheet = style(survey.appearance)\n const styleElement = Object.assign(document.createElement('style'), { innerText: surveyStyleSheet })\n\n // Remove previously attached <style>\n Array.from(parentElement.children).forEach((child) => {\n if (child instanceof HTMLStyleElement) {\n parentElement.removeChild(child)\n }\n })\n\n parentElement.appendChild(styleElement)\n const textColor = getContrastingTextColor(\n survey.appearance?.backgroundColor || defaultSurveyAppearance.backgroundColor || 'white'\n )\n\n Preact.render(\n <SurveyPopup\n key=\"surveys-render-preview\"\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={{\n position: 'relative',\n right: 0,\n borderBottom: `1px solid ${survey.appearance?.borderColor}`,\n borderRadius: 10,\n color: textColor,\n }}\n previewPageIndex={previewPageIndex}\n removeSurveyFromFocus={() => {}}\n />,\n parentElement\n )\n}\n\nexport const renderFeedbackWidgetPreview = ({\n survey,\n root,\n forceDisableHtml,\n}: {\n survey: Survey\n root: HTMLElement\n forceDisableHtml?: boolean\n}) => {\n const widgetStyleSheet = createWidgetStyle(survey.appearance?.widgetColor)\n const styleElement = Object.assign(document.createElement('style'), { innerText: widgetStyleSheet })\n root.appendChild(styleElement)\n Preact.render(\n <FeedbackWidget\n key={'feedback-render-preview'}\n forceDisableHtml={forceDisableHtml}\n survey={survey}\n readOnly={true}\n removeSurveyFromFocus={() => {}}\n />,\n root\n )\n}\n\n// This is the main exported function\nexport function generateSurveys(posthog: PostHog) {\n // NOTE: Important to ensure we never try and run surveys without a window environment\n if (!document || !window) {\n return\n }\n\n const surveyManager = new SurveyManager(posthog)\n surveyManager.callSurveysAndEvaluateDisplayLogic(true)\n\n // recalculate surveys every second to check if URL or selectors have changed\n setInterval(() => {\n surveyManager.callSurveysAndEvaluateDisplayLogic(false)\n }, 1000)\n}\n\nexport function usePopupVisibility(\n survey: Survey,\n posthog: PostHog | undefined,\n millisecondDelay: number,\n isPreviewMode: boolean,\n removeSurveyFromFocus: (id: string) => void\n) {\n const [isPopupVisible, setIsPopupVisible] = useState(isPreviewMode || millisecondDelay === 0)\n const [isSurveySent, setIsSurveySent] = useState(false)\n\n useEffect(() => {\n if (isPreviewMode || !posthog) {\n return\n }\n\n const handleSurveyClosed = () => {\n removeSurveyFromFocus(survey.id)\n setIsPopupVisible(false)\n }\n\n const handleSurveySent = () => {\n if (!survey.appearance?.displayThankYouMessage) {\n removeSurveyFromFocus(survey.id)\n setIsPopupVisible(false)\n } else {\n setIsSurveySent(true)\n removeSurveyFromFocus(survey.id)\n if (survey.appearance?.autoDisappear) {\n setTimeout(() => {\n setIsPopupVisible(false)\n }, 5000)\n }\n }\n }\n\n const showSurvey = () => {\n setIsPopupVisible(true)\n window.dispatchEvent(new Event('PHSurveyShown'))\n posthog.capture('survey shown', {\n $survey_name: survey.name,\n $survey_id: survey.id,\n $survey_iteration: survey.current_iteration,\n $survey_iteration_start_date: survey.current_iteration_start_date,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n })\n localStorage.setItem('lastSeenSurveyDate', new Date().toISOString())\n }\n\n const handleShowSurveyWithDelay = () => {\n const timeoutId = setTimeout(() => {\n showSurvey()\n }, millisecondDelay)\n\n return () => {\n clearTimeout(timeoutId)\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed)\n window.removeEventListener('PHSurveySent', handleSurveySent)\n }\n }\n\n const handleShowSurveyImmediately = () => {\n showSurvey()\n return () => {\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed)\n window.removeEventListener('PHSurveySent', handleSurveySent)\n }\n }\n\n window.addEventListener('PHSurveyClosed', handleSurveyClosed)\n window.addEventListener('PHSurveySent', handleSurveySent)\n\n if (millisecondDelay > 0) {\n return handleShowSurveyWithDelay()\n } else {\n return handleShowSurveyImmediately()\n }\n }, [])\n\n return { isPopupVisible, isSurveySent, setIsPopupVisible }\n}\n\nexport function SurveyPopup({\n survey,\n forceDisableHtml,\n posthog,\n style,\n previewPageIndex,\n removeSurveyFromFocus,\n}: {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n style?: React.CSSProperties\n previewPageIndex?: number | undefined\n removeSurveyFromFocus: (id: string) => void\n}) {\n const isPreviewMode = Number.isInteger(previewPageIndex)\n // NB: The client-side code passes the millisecondDelay in seconds, but setTimeout expects milliseconds, so we multiply by 1000\n const surveyPopupDelayMilliseconds = survey.appearance?.surveyPopupDelaySeconds\n ? survey.appearance.surveyPopupDelaySeconds * 1000\n : 0\n const { isPopupVisible, isSurveySent, setIsPopupVisible } = usePopupVisibility(\n survey,\n posthog,\n surveyPopupDelayMilliseconds,\n isPreviewMode,\n removeSurveyFromFocus\n )\n const shouldShowConfirmation = isSurveySent || previewPageIndex === survey.questions.length\n const confirmationBoxLeftStyle = style?.left && isNumber(style?.left) ? { left: style.left - 40 } : {}\n\n if (isPreviewMode) {\n style = style || {}\n style.left = 'unset'\n style.right = 'unset'\n style.transform = 'unset'\n }\n\n return isPopupVisible ? (\n <SurveyContext.Provider\n value={{\n isPreviewMode,\n previewPageIndex: previewPageIndex,\n handleCloseSurveyPopup: () => dismissedSurveyEvent(survey, posthog, isPreviewMode),\n }}\n >\n {!shouldShowConfirmation ? (\n <Questions\n survey={survey}\n forceDisableHtml={!!forceDisableHtml}\n posthog={posthog}\n styleOverrides={style}\n />\n ) : (\n <ConfirmationMessage\n header={survey.appearance?.thankYouMessageHeader || 'Thank you!'}\n description={survey.appearance?.thankYouMessageDescription || ''}\n forceDisableHtml={!!forceDisableHtml}\n contentType={survey.appearance?.thankYouMessageDescriptionContentType}\n appearance={survey.appearance || defaultSurveyAppearance}\n styleOverrides={{ ...style, ...confirmationBoxLeftStyle }}\n onClose={() => setIsPopupVisible(false)}\n />\n )}\n </SurveyContext.Provider>\n ) : (\n <></>\n )\n}\n\nexport function Questions({\n survey,\n forceDisableHtml,\n posthog,\n styleOverrides,\n}: {\n survey: Survey\n forceDisableHtml: boolean\n posthog?: PostHog\n styleOverrides?: React.CSSProperties\n}) {\n const textColor = getContrastingTextColor(\n survey.appearance?.backgroundColor || defaultSurveyAppearance.backgroundColor\n )\n const [questionsResponses, setQuestionsResponses] = useState({})\n const { isPreviewMode, previewPageIndex } = useContext(SurveyContext)\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(previewPageIndex || 0)\n const surveyQuestions = useMemo(() => getDisplayOrderQuestions(survey), [survey])\n\n // Sync preview state\n useEffect(() => {\n setCurrentQuestionIndex(previewPageIndex ?? 0)\n }, [previewPageIndex])\n\n const onNextButtonClick = ({\n res,\n originalQuestionIndex,\n displayQuestionIndex,\n }: {\n res: string | string[] | number | null\n originalQuestionIndex: number\n displayQuestionIndex: number\n }) => {\n if (!posthog) {\n return\n }\n\n const responseKey =\n originalQuestionIndex === 0 ? `$survey_response` : `$survey_response_${originalQuestionIndex}`\n\n setQuestionsResponses({ ...questionsResponses, [responseKey]: res })\n\n // Old SDK, no branching\n if (!posthog.getNextSurveyStep) {\n const isLastDisplayedQuestion = displayQuestionIndex === survey.questions.length - 1\n if (isLastDisplayedQuestion) {\n sendSurveyEvent({ ...questionsResponses, [responseKey]: res }, survey, posthog)\n } else {\n setCurrentQuestionIndex(displayQuestionIndex + 1)\n }\n return\n }\n\n const nextStep = posthog.getNextSurveyStep(survey, displayQuestionIndex, res)\n if (nextStep === SurveyQuestionBranchingType.End) {\n sendSurveyEvent({ ...questionsResponses, [responseKey]: res }, survey, posthog)\n } else {\n setCurrentQuestionIndex(nextStep)\n }\n }\n\n return (\n <form\n className=\"survey-form\"\n style={{\n color: textColor,\n borderColor: survey.appearance?.borderColor,\n ...styleOverrides,\n }}\n >\n {surveyQuestions.map((question, displayQuestionIndex) => {\n const { originalQuestionIndex } = question\n\n const isVisible = isPreviewMode\n ? currentQuestionIndex === originalQuestionIndex\n : currentQuestionIndex === displayQuestionIndex\n return (\n isVisible && (\n <div>\n {getQuestionComponent({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance: survey.appearance || defaultSurveyAppearance,\n onSubmit: (res) =>\n onNextButtonClick({\n res,\n originalQuestionIndex,\n displayQuestionIndex,\n }),\n })}\n </div>\n )\n )\n })}\n </form>\n )\n}\n\nexport function FeedbackWidget({\n survey,\n forceDisableHtml,\n posthog,\n readOnly,\n removeSurveyFromFocus,\n}: {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n readOnly?: boolean\n removeSurveyFromFocus: (id: string) => void\n}): JSX.Element {\n const [showSurvey, setShowSurvey] = useState(false)\n const [styleOverrides, setStyle] = useState({})\n const widgetRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (readOnly || !posthog) {\n return\n }\n\n if (survey.appearance?.widgetType === 'tab') {\n if (widgetRef.current) {\n const widgetPos = widgetRef.current.getBoundingClientRect()\n const style = {\n top: '50%',\n left: parseInt(`${widgetPos.right - 360}`),\n bottom: 'auto',\n borderRadius: 10,\n borderBottom: `1.5px solid ${survey.appearance?.borderColor || '#c9c6c6'}`,\n }\n setStyle(style)\n }\n }\n if (survey.appearance?.widgetType === 'selector') {\n const widget = document.querySelector(survey.appearance.widgetSelector || '')\n widget?.addEventListener('click', () => {\n setShowSurvey(!showSurvey)\n })\n widget?.setAttribute('PHWidgetSurveyClickListener', 'true')\n }\n }, [])\n\n return (\n <>\n {survey.appearance?.widgetType === 'tab' && (\n <div\n className=\"ph-survey-widget-tab\"\n ref={widgetRef}\n onClick={() => !readOnly && setShowSurvey(!showSurvey)}\n style={{ color: getContrastingTextColor(survey.appearance.widgetColor) }}\n >\n <div className=\"ph-survey-widget-tab-icon\"></div>\n {survey.appearance?.widgetLabel || ''}\n </div>\n )}\n {showSurvey && (\n <SurveyPopup\n key={'feedback-widget-survey'}\n posthog={posthog}\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={styleOverrides}\n removeSurveyFromFocus={removeSurveyFromFocus}\n />\n )}\n </>\n )\n}\n\ninterface GetQuestionComponentProps {\n question: SurveyQuestion\n forceDisableHtml: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n onSubmit: (res: string | string[] | number | null) => void\n}\n\nconst getQuestionComponent = ({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n}: GetQuestionComponentProps): JSX.Element => {\n const questionComponents = {\n [SurveyQuestionType.Open]: OpenTextQuestion,\n [SurveyQuestionType.Link]: LinkQuestion,\n [SurveyQuestionType.Rating]: RatingQuestion,\n [SurveyQuestionType.SingleChoice]: MultipleChoiceQuestion,\n [SurveyQuestionType.MultipleChoice]: MultipleChoiceQuestion,\n }\n\n const commonProps = {\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n }\n\n const additionalProps: Record<SurveyQuestionType, any> = {\n [SurveyQuestionType.Open]: {},\n [SurveyQuestionType.Link]: {},\n [SurveyQuestionType.Rating]: { displayQuestionIndex },\n [SurveyQuestionType.SingleChoice]: { displayQuestionIndex },\n [SurveyQuestionType.MultipleChoice]: { displayQuestionIndex },\n }\n\n const Component = questionComponents[question.type]\n const componentProps = { ...commonProps, ...additionalProps[question.type] }\n\n return <Component {...componentProps} />\n}\n"]}
1
+ {"version":3,"file":"surveys.jsx","sourceRoot":"","sources":["../../../src/extensions/surveys.tsx"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from '../posthog-core'\nimport {\n Survey,\n SurveyAppearance,\n SurveyQuestion,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveyRenderReason,\n SurveyType,\n} from '../posthog-surveys-types'\n\nimport { window as _window, document as _document } from '../utils/globals'\nimport {\n style,\n defaultSurveyAppearance,\n sendSurveyEvent,\n dismissedSurveyEvent,\n createShadow,\n getContrastingTextColor,\n SurveyContext,\n getDisplayOrderQuestions,\n getSurveySeen,\n} from './surveys/surveys-utils'\nimport * as Preact from 'preact'\nimport { createWidgetShadow, createWidgetStyle } from './surveys-widget'\nimport { useState, useEffect, useRef, useContext, useMemo } from 'preact/hooks'\nimport { isNull, isNumber } from '../utils/type-utils'\nimport { ConfirmationMessage } from './surveys/components/ConfirmationMessage'\nimport {\n OpenTextQuestion,\n LinkQuestion,\n RatingQuestion,\n MultipleChoiceQuestion,\n} from './surveys/components/QuestionTypes'\nimport { logger } from '../utils/logger'\nimport { Cancel } from './surveys/components/QuestionHeader'\n\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window & typeof globalThis\nconst document = _document as Document\n\nexport class SurveyManager {\n private posthog: PostHog\n private surveyInFocus: string | null\n\n constructor(posthog: PostHog) {\n this.posthog = posthog\n // This is used to track the survey that is currently in focus. We only show one survey at a time.\n this.surveyInFocus = null\n }\n\n private canShowNextEventBasedSurvey = (): boolean => {\n // with event based surveys, we need to show the next survey without reloading the page.\n // A simple check for div elements with the class name pattern of PostHogSurvey_xyz doesn't work here\n // because preact leaves behind the div element for any surveys responded/dismissed with a <style> node.\n // To alleviate this, we check the last div in the dom and see if it has any elements other than a Style node.\n // if the last PostHogSurvey_xyz div has only one style node, we can show the next survey in the queue\n // without reloading the page.\n const surveyPopups = document.querySelectorAll(`div[class^=PostHogSurvey]`)\n if (surveyPopups.length > 0) {\n return surveyPopups[surveyPopups.length - 1].shadowRoot?.childElementCount === 1\n }\n return true\n }\n\n private handlePopoverSurvey = (survey: Survey): void => {\n const surveyWaitPeriodInDays = survey.conditions?.seenSurveyWaitPeriodInDays\n const lastSeenSurveyDate = localStorage.getItem(`lastSeenSurveyDate`)\n if (surveyWaitPeriodInDays && lastSeenSurveyDate) {\n const today = new Date()\n const diff = Math.abs(today.getTime() - new Date(lastSeenSurveyDate).getTime())\n const diffDaysFromToday = Math.ceil(diff / (1000 * 3600 * 24))\n if (diffDaysFromToday < surveyWaitPeriodInDays) {\n return\n }\n }\n\n const surveySeen = getSurveySeen(survey)\n if (!surveySeen) {\n this.addSurveyToFocus(survey.id)\n const shadow = createShadow(style(survey?.appearance), survey.id)\n Preact.render(\n <SurveyPopup\n key={'popover-survey'}\n posthog={this.posthog}\n survey={survey}\n removeSurveyFromFocus={this.removeSurveyFromFocus}\n isPopup={true}\n />,\n shadow\n )\n }\n }\n\n private handleWidget = (survey: Survey): void => {\n const shadow = createWidgetShadow(survey)\n const surveyStyleSheet = style(survey.appearance)\n shadow.appendChild(Object.assign(document.createElement('style'), { innerText: surveyStyleSheet }))\n Preact.render(\n <FeedbackWidget\n key={'feedback-survey'}\n posthog={this.posthog}\n survey={survey}\n removeSurveyFromFocus={this.removeSurveyFromFocus}\n />,\n shadow\n )\n }\n\n private handleWidgetSelector = (survey: Survey): void => {\n const selectorOnPage =\n survey.appearance?.widgetSelector && document.querySelector(survey.appearance.widgetSelector)\n if (selectorOnPage) {\n if (document.querySelectorAll(`.PostHogWidget${survey.id}`).length === 0) {\n this.handleWidget(survey)\n } else if (document.querySelectorAll(`.PostHogWidget${survey.id}`).length === 1) {\n // we have to check if user selector already has a survey listener attached to it because we always have to check if it's on the page or not\n if (!selectorOnPage.getAttribute('PHWidgetSurveyClickListener')) {\n const surveyPopup = document\n .querySelector(`.PostHogWidget${survey.id}`)\n ?.shadowRoot?.querySelector(`.survey-form`) as HTMLFormElement\n selectorOnPage.addEventListener('click', () => {\n if (surveyPopup) {\n surveyPopup.style.display = surveyPopup.style.display === 'none' ? 'block' : 'none'\n surveyPopup.addEventListener('PHSurveyClosed', () => {\n this.removeSurveyFromFocus(survey.id)\n surveyPopup.style.display = 'none'\n })\n }\n })\n selectorOnPage.setAttribute('PHWidgetSurveyClickListener', 'true')\n }\n }\n }\n }\n\n /**\n * Sorts surveys by their appearance delay in ascending order. If a survey does not have an appearance delay,\n * it is considered to have a delay of 0.\n * @param surveys\n * @returns The surveys sorted by their appearance delay\n */\n private sortSurveysByAppearanceDelay(surveys: Survey[]): Survey[] {\n return surveys.sort(\n (a, b) => (a.appearance?.surveyPopupDelaySeconds || 0) - (b.appearance?.surveyPopupDelaySeconds || 0)\n )\n }\n\n /**\n * Checks the feature flags associated with this Survey to see if the survey can be rendered.\n * @param survey\n * @param instance\n */\n public canRenderSurvey = (survey: Survey): SurveyRenderReason => {\n const renderReason: SurveyRenderReason = {\n visible: false,\n }\n\n if (survey.end_date) {\n renderReason.disabledReason = `survey was completed on ${survey.end_date}`\n return renderReason\n }\n\n if (survey.type != SurveyType.Popover) {\n renderReason.disabledReason = `Only Popover survey types can be rendered`\n return renderReason\n }\n\n const linkedFlagCheck = survey.linked_flag_key\n ? this.posthog.featureFlags.isFeatureEnabled(survey.linked_flag_key)\n : true\n\n if (!linkedFlagCheck) {\n renderReason.disabledReason = `linked feature flag ${survey.linked_flag_key} is false`\n return renderReason\n }\n\n const targetingFlagCheck = survey.targeting_flag_key\n ? this.posthog.featureFlags.isFeatureEnabled(survey.targeting_flag_key)\n : true\n\n if (!targetingFlagCheck) {\n renderReason.disabledReason = `targeting feature flag ${survey.targeting_flag_key} is false`\n return renderReason\n }\n\n const internalTargetingFlagCheck = survey.internal_targeting_flag_key\n ? this.posthog.featureFlags.isFeatureEnabled(survey.internal_targeting_flag_key)\n : true\n\n if (!internalTargetingFlagCheck) {\n renderReason.disabledReason = `internal targeting feature flag ${survey.internal_targeting_flag_key} is false`\n return renderReason\n }\n\n renderReason.visible = true\n return renderReason\n }\n\n public renderSurvey = (survey: Survey, selector: Element): void => {\n Preact.render(\n <SurveyPopup\n key={'popover-survey'}\n posthog={this.posthog}\n survey={survey}\n removeSurveyFromFocus={this.removeSurveyFromFocus}\n isPopup={false}\n />,\n selector\n )\n }\n\n public callSurveysAndEvaluateDisplayLogic = (forceReload: boolean = false): void => {\n this.posthog?.getActiveMatchingSurveys((surveys) => {\n const nonAPISurveys = surveys.filter((survey) => survey.type !== 'api')\n\n // Create a queue of surveys sorted by their appearance delay. We will evaluate the display logic\n // for each survey in the queue in order, and only display one survey at a time.\n const nonAPISurveyQueue = this.sortSurveysByAppearanceDelay(nonAPISurveys)\n\n nonAPISurveyQueue.forEach((survey) => {\n // We only evaluate the display logic for one survey at a time\n if (!isNull(this.surveyInFocus)) {\n return\n }\n if (survey.type === SurveyType.Widget) {\n if (\n survey.appearance?.widgetType === 'tab' &&\n document.querySelectorAll(`.PostHogWidget${survey.id}`).length === 0\n ) {\n this.handleWidget(survey)\n }\n if (survey.appearance?.widgetType === 'selector' && survey.appearance?.widgetSelector) {\n this.handleWidgetSelector(survey)\n }\n }\n\n if (survey.type === SurveyType.Popover && this.canShowNextEventBasedSurvey()) {\n this.handlePopoverSurvey(survey)\n }\n })\n }, forceReload)\n }\n\n private addSurveyToFocus = (id: string): void => {\n if (!isNull(this.surveyInFocus)) {\n logger.error(`Survey ${[...this.surveyInFocus]} already in focus. Cannot add survey ${id}.`)\n }\n this.surveyInFocus = id\n }\n\n private removeSurveyFromFocus = (id: string): void => {\n if (this.surveyInFocus !== id) {\n logger.error(`Survey ${id} is not in focus. Cannot remove survey ${id}.`)\n }\n this.surveyInFocus = null\n }\n\n // Expose internal state and methods for testing\n public getTestAPI() {\n return {\n addSurveyToFocus: this.addSurveyToFocus,\n removeSurveyFromFocus: this.removeSurveyFromFocus,\n surveyInFocus: this.surveyInFocus,\n canShowNextEventBasedSurvey: this.canShowNextEventBasedSurvey,\n handleWidget: this.handleWidget,\n handlePopoverSurvey: this.handlePopoverSurvey,\n handleWidgetSelector: this.handleWidgetSelector,\n sortSurveysByAppearanceDelay: this.sortSurveysByAppearanceDelay,\n }\n }\n}\n\nexport const renderSurveysPreview = ({\n survey,\n parentElement,\n previewPageIndex,\n forceDisableHtml,\n}: {\n survey: Survey\n parentElement: HTMLElement\n previewPageIndex: number\n forceDisableHtml?: boolean\n}) => {\n const surveyStyleSheet = style(survey.appearance)\n const styleElement = Object.assign(document.createElement('style'), { innerText: surveyStyleSheet })\n\n // Remove previously attached <style>\n Array.from(parentElement.children).forEach((child) => {\n if (child instanceof HTMLStyleElement) {\n parentElement.removeChild(child)\n }\n })\n\n parentElement.appendChild(styleElement)\n const textColor = getContrastingTextColor(\n survey.appearance?.backgroundColor || defaultSurveyAppearance.backgroundColor || 'white'\n )\n\n Preact.render(\n <SurveyPopup\n key=\"surveys-render-preview\"\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={{\n position: 'relative',\n right: 0,\n borderBottom: `1px solid ${survey.appearance?.borderColor}`,\n borderRadius: 10,\n color: textColor,\n }}\n previewPageIndex={previewPageIndex}\n removeSurveyFromFocus={() => {}}\n isPopup={true}\n />,\n parentElement\n )\n}\n\nexport const renderFeedbackWidgetPreview = ({\n survey,\n root,\n forceDisableHtml,\n}: {\n survey: Survey\n root: HTMLElement\n forceDisableHtml?: boolean\n}) => {\n const widgetStyleSheet = createWidgetStyle(survey.appearance?.widgetColor)\n const styleElement = Object.assign(document.createElement('style'), { innerText: widgetStyleSheet })\n root.appendChild(styleElement)\n Preact.render(\n <FeedbackWidget\n key={'feedback-render-preview'}\n forceDisableHtml={forceDisableHtml}\n survey={survey}\n readOnly={true}\n removeSurveyFromFocus={() => {}}\n />,\n root\n )\n}\n\n// This is the main exported function\nexport function generateSurveys(posthog: PostHog) {\n // NOTE: Important to ensure we never try and run surveys without a window environment\n if (!document || !window) {\n return\n }\n\n const surveyManager = new SurveyManager(posthog)\n surveyManager.callSurveysAndEvaluateDisplayLogic(true)\n\n // recalculate surveys every second to check if URL or selectors have changed\n setInterval(() => {\n surveyManager.callSurveysAndEvaluateDisplayLogic(false)\n }, 1000)\n return surveyManager\n}\n\nexport function usePopupVisibility(\n survey: Survey,\n posthog: PostHog | undefined,\n millisecondDelay: number,\n isPreviewMode: boolean,\n removeSurveyFromFocus: (id: string) => void\n) {\n const [isPopupVisible, setIsPopupVisible] = useState(isPreviewMode || millisecondDelay === 0)\n const [isSurveySent, setIsSurveySent] = useState(false)\n\n useEffect(() => {\n if (isPreviewMode || !posthog) {\n return\n }\n\n const handleSurveyClosed = () => {\n removeSurveyFromFocus(survey.id)\n setIsPopupVisible(false)\n }\n\n const handleSurveySent = () => {\n if (!survey.appearance?.displayThankYouMessage) {\n removeSurveyFromFocus(survey.id)\n setIsPopupVisible(false)\n } else {\n setIsSurveySent(true)\n removeSurveyFromFocus(survey.id)\n if (survey.appearance?.autoDisappear) {\n setTimeout(() => {\n setIsPopupVisible(false)\n }, 5000)\n }\n }\n }\n\n const showSurvey = () => {\n setIsPopupVisible(true)\n window.dispatchEvent(new Event('PHSurveyShown'))\n posthog.capture('survey shown', {\n $survey_name: survey.name,\n $survey_id: survey.id,\n $survey_iteration: survey.current_iteration,\n $survey_iteration_start_date: survey.current_iteration_start_date,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n })\n localStorage.setItem('lastSeenSurveyDate', new Date().toISOString())\n }\n\n const handleShowSurveyWithDelay = () => {\n const timeoutId = setTimeout(() => {\n showSurvey()\n }, millisecondDelay)\n\n return () => {\n clearTimeout(timeoutId)\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed)\n window.removeEventListener('PHSurveySent', handleSurveySent)\n }\n }\n\n const handleShowSurveyImmediately = () => {\n showSurvey()\n return () => {\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed)\n window.removeEventListener('PHSurveySent', handleSurveySent)\n }\n }\n\n window.addEventListener('PHSurveyClosed', handleSurveyClosed)\n window.addEventListener('PHSurveySent', handleSurveySent)\n\n if (millisecondDelay > 0) {\n return handleShowSurveyWithDelay()\n } else {\n return handleShowSurveyImmediately()\n }\n }, [])\n\n return { isPopupVisible, isSurveySent, setIsPopupVisible }\n}\n\nexport function SurveyPopup({\n survey,\n forceDisableHtml,\n posthog,\n style,\n previewPageIndex,\n removeSurveyFromFocus,\n isPopup,\n}: {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n style?: React.CSSProperties\n previewPageIndex?: number | undefined\n removeSurveyFromFocus: (id: string) => void\n isPopup?: boolean\n}) {\n const isPreviewMode = Number.isInteger(previewPageIndex)\n // NB: The client-side code passes the millisecondDelay in seconds, but setTimeout expects milliseconds, so we multiply by 1000\n const surveyPopupDelayMilliseconds = survey.appearance?.surveyPopupDelaySeconds\n ? survey.appearance.surveyPopupDelaySeconds * 1000\n : 0\n const { isPopupVisible, isSurveySent, setIsPopupVisible } = usePopupVisibility(\n survey,\n posthog,\n surveyPopupDelayMilliseconds,\n isPreviewMode,\n removeSurveyFromFocus\n )\n const shouldShowConfirmation = isSurveySent || previewPageIndex === survey.questions.length\n const confirmationBoxLeftStyle = style?.left && isNumber(style?.left) ? { left: style.left - 40 } : {}\n\n if (isPreviewMode) {\n style = style || {}\n style.left = 'unset'\n style.right = 'unset'\n style.transform = 'unset'\n }\n\n return isPopupVisible ? (\n <SurveyContext.Provider\n value={{\n isPreviewMode,\n previewPageIndex: previewPageIndex,\n handleCloseSurveyPopup: () => dismissedSurveyEvent(survey, posthog, isPreviewMode),\n isPopup: isPopup || false,\n }}\n >\n {!shouldShowConfirmation ? (\n <Questions\n survey={survey}\n forceDisableHtml={!!forceDisableHtml}\n posthog={posthog}\n styleOverrides={style}\n />\n ) : (\n <ConfirmationMessage\n header={survey.appearance?.thankYouMessageHeader || 'Thank you!'}\n description={survey.appearance?.thankYouMessageDescription || ''}\n forceDisableHtml={!!forceDisableHtml}\n contentType={survey.appearance?.thankYouMessageDescriptionContentType}\n appearance={survey.appearance || defaultSurveyAppearance}\n styleOverrides={{ ...style, ...confirmationBoxLeftStyle }}\n onClose={() => setIsPopupVisible(false)}\n />\n )}\n </SurveyContext.Provider>\n ) : (\n <></>\n )\n}\n\nexport function Questions({\n survey,\n forceDisableHtml,\n posthog,\n styleOverrides,\n}: {\n survey: Survey\n forceDisableHtml: boolean\n posthog?: PostHog\n styleOverrides?: React.CSSProperties\n}) {\n const textColor = getContrastingTextColor(\n survey.appearance?.backgroundColor || defaultSurveyAppearance.backgroundColor\n )\n const [questionsResponses, setQuestionsResponses] = useState({})\n const { isPreviewMode, previewPageIndex, handleCloseSurveyPopup, isPopup } = useContext(SurveyContext)\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(previewPageIndex || 0)\n const surveyQuestions = useMemo(() => getDisplayOrderQuestions(survey), [survey])\n\n // Sync preview state\n useEffect(() => {\n setCurrentQuestionIndex(previewPageIndex ?? 0)\n }, [previewPageIndex])\n\n const onNextButtonClick = ({\n res,\n originalQuestionIndex,\n displayQuestionIndex,\n }: {\n res: string | string[] | number | null\n originalQuestionIndex: number\n displayQuestionIndex: number\n }) => {\n if (!posthog) {\n return\n }\n\n const responseKey =\n originalQuestionIndex === 0 ? `$survey_response` : `$survey_response_${originalQuestionIndex}`\n\n setQuestionsResponses({ ...questionsResponses, [responseKey]: res })\n\n // Old SDK, no branching\n if (!posthog.getNextSurveyStep) {\n const isLastDisplayedQuestion = displayQuestionIndex === survey.questions.length - 1\n if (isLastDisplayedQuestion) {\n sendSurveyEvent({ ...questionsResponses, [responseKey]: res }, survey, posthog)\n } else {\n setCurrentQuestionIndex(displayQuestionIndex + 1)\n }\n return\n }\n\n const nextStep = posthog.getNextSurveyStep(survey, displayQuestionIndex, res)\n if (nextStep === SurveyQuestionBranchingType.End) {\n sendSurveyEvent({ ...questionsResponses, [responseKey]: res }, survey, posthog)\n } else {\n setCurrentQuestionIndex(nextStep)\n }\n }\n\n return (\n <form\n className=\"survey-form\"\n style={\n isPopup\n ? {\n color: textColor,\n borderColor: survey.appearance?.borderColor,\n ...styleOverrides,\n }\n : {}\n }\n >\n {surveyQuestions.map((question, displayQuestionIndex) => {\n const { originalQuestionIndex } = question\n\n const isVisible = isPreviewMode\n ? currentQuestionIndex === originalQuestionIndex\n : currentQuestionIndex === displayQuestionIndex\n return (\n isVisible && (\n <div\n className=\"survey-box\"\n style={\n isPopup\n ? {\n backgroundColor:\n survey.appearance?.backgroundColor ||\n defaultSurveyAppearance.backgroundColor,\n }\n : {}\n }\n >\n {isPopup && <Cancel onClick={() => handleCloseSurveyPopup()} />}\n {getQuestionComponent({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance: survey.appearance || defaultSurveyAppearance,\n onSubmit: (res) =>\n onNextButtonClick({\n res,\n originalQuestionIndex,\n displayQuestionIndex,\n }),\n })}\n </div>\n )\n )\n })}\n </form>\n )\n}\n\nexport function FeedbackWidget({\n survey,\n forceDisableHtml,\n posthog,\n readOnly,\n removeSurveyFromFocus,\n}: {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n readOnly?: boolean\n removeSurveyFromFocus: (id: string) => void\n}): JSX.Element {\n const [showSurvey, setShowSurvey] = useState(false)\n const [styleOverrides, setStyle] = useState({})\n const widgetRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (readOnly || !posthog) {\n return\n }\n\n if (survey.appearance?.widgetType === 'tab') {\n if (widgetRef.current) {\n const widgetPos = widgetRef.current.getBoundingClientRect()\n const style = {\n top: '50%',\n left: parseInt(`${widgetPos.right - 360}`),\n bottom: 'auto',\n borderRadius: 10,\n borderBottom: `1.5px solid ${survey.appearance?.borderColor || '#c9c6c6'}`,\n }\n setStyle(style)\n }\n }\n if (survey.appearance?.widgetType === 'selector') {\n const widget = document.querySelector(survey.appearance.widgetSelector || '')\n widget?.addEventListener('click', () => {\n setShowSurvey(!showSurvey)\n })\n widget?.setAttribute('PHWidgetSurveyClickListener', 'true')\n }\n }, [])\n\n return (\n <>\n {survey.appearance?.widgetType === 'tab' && (\n <div\n className=\"ph-survey-widget-tab\"\n ref={widgetRef}\n onClick={() => !readOnly && setShowSurvey(!showSurvey)}\n style={{ color: getContrastingTextColor(survey.appearance.widgetColor) }}\n >\n <div className=\"ph-survey-widget-tab-icon\"></div>\n {survey.appearance?.widgetLabel || ''}\n </div>\n )}\n {showSurvey && (\n <SurveyPopup\n key={'feedback-widget-survey'}\n posthog={posthog}\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={styleOverrides}\n removeSurveyFromFocus={removeSurveyFromFocus}\n isPopup={true}\n />\n )}\n </>\n )\n}\n\ninterface GetQuestionComponentProps {\n question: SurveyQuestion\n forceDisableHtml: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n onSubmit: (res: string | string[] | number | null) => void\n}\n\nconst getQuestionComponent = ({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n}: GetQuestionComponentProps): JSX.Element => {\n const questionComponents = {\n [SurveyQuestionType.Open]: OpenTextQuestion,\n [SurveyQuestionType.Link]: LinkQuestion,\n [SurveyQuestionType.Rating]: RatingQuestion,\n [SurveyQuestionType.SingleChoice]: MultipleChoiceQuestion,\n [SurveyQuestionType.MultipleChoice]: MultipleChoiceQuestion,\n }\n\n const commonProps = {\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n }\n\n const additionalProps: Record<SurveyQuestionType, any> = {\n [SurveyQuestionType.Open]: {},\n [SurveyQuestionType.Link]: {},\n [SurveyQuestionType.Rating]: { displayQuestionIndex },\n [SurveyQuestionType.SingleChoice]: { displayQuestionIndex },\n [SurveyQuestionType.MultipleChoice]: { displayQuestionIndex },\n }\n\n const Component = questionComponents[question.type]\n const componentProps = { ...commonProps, ...additionalProps[question.type] }\n\n return <Component {...componentProps} />\n}\n"]}
@@ -251,6 +251,10 @@ export declare class PostHog {
251
251
  getSurveys(callback: SurveyCallback, forceReload?: boolean): void;
252
252
  /** Get surveys that should be enabled for the current user. */
253
253
  getActiveMatchingSurveys(callback: SurveyCallback, forceReload?: boolean): void;
254
+ /** Render a survey on a specific element. */
255
+ renderSurvey(surveyId: string, selector: string): void;
256
+ /** Checks the feature flags associated with this Survey to see if the survey can be rendered. */
257
+ canRenderSurvey(surveyId: string): void;
254
258
  /** Get the next step of the survey: a question index or `end` */
255
259
  getNextSurveyStep(survey: Survey, currentQuestionIndex: number, response: string | string[] | number | null): number | SurveyQuestionBranchingType.End;
256
260
  /**
@@ -1012,6 +1012,14 @@ var PostHog = /** @class */ (function () {
1012
1012
  if (forceReload === void 0) { forceReload = false; }
1013
1013
  this.surveys.getActiveMatchingSurveys(callback, forceReload);
1014
1014
  };
1015
+ /** Render a survey on a specific element. */
1016
+ PostHog.prototype.renderSurvey = function (surveyId, selector) {
1017
+ this.surveys.renderSurvey(surveyId, selector);
1018
+ };
1019
+ /** Checks the feature flags associated with this Survey to see if the survey can be rendered. */
1020
+ PostHog.prototype.canRenderSurvey = function (surveyId) {
1021
+ this.surveys.canRenderSurvey(surveyId);
1022
+ };
1015
1023
  /** Get the next step of the survey: a question index or `end` */
1016
1024
  PostHog.prototype.getNextSurveyStep = function (survey, currentQuestionIndex, response) {
1017
1025
  return this.surveys.getNextSurveyStep(survey, currentQuestionIndex, response);