posthog-js 1.310.0 → 1.310.1

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 (77) hide show
  1. package/dist/all-external-dependencies.js +1 -1
  2. package/dist/all-external-dependencies.js.map +1 -1
  3. package/dist/array.full.es5.js +1 -1
  4. package/dist/array.full.es5.js.map +1 -1
  5. package/dist/array.full.js +1 -1
  6. package/dist/array.full.js.map +1 -1
  7. package/dist/array.full.no-external.js +1 -1
  8. package/dist/array.full.no-external.js.map +1 -1
  9. package/dist/array.js +1 -1
  10. package/dist/array.no-external.js +1 -1
  11. package/dist/customizations.full.js +1 -1
  12. package/dist/lazy-recorder.js +1 -1
  13. package/dist/main.js +1 -1
  14. package/dist/main.js.map +1 -1
  15. package/dist/module.d.ts +7 -2
  16. package/dist/module.full.d.ts +7 -2
  17. package/dist/module.full.js +1 -1
  18. package/dist/module.full.js.map +1 -1
  19. package/dist/module.full.no-external.d.ts +7 -2
  20. package/dist/module.full.no-external.js +1 -1
  21. package/dist/module.full.no-external.js.map +1 -1
  22. package/dist/module.js +1 -1
  23. package/dist/module.js.map +1 -1
  24. package/dist/module.no-external.d.ts +7 -2
  25. package/dist/module.no-external.js +1 -1
  26. package/dist/module.no-external.js.map +1 -1
  27. package/dist/posthog-recorder.js +1 -1
  28. package/dist/product-tours-preview.d.ts +63 -0
  29. package/dist/product-tours-preview.js +2 -0
  30. package/dist/product-tours-preview.js.map +1 -0
  31. package/dist/product-tours.js +1 -1
  32. package/dist/product-tours.js.map +1 -1
  33. package/dist/src/entrypoints/product-tours-preview.es.d.ts +1 -0
  34. package/dist/src/extensions/product-tours/components/ProductTourSurveyStepInner.d.ts +12 -0
  35. package/dist/src/extensions/product-tours/components/ProductTourTooltip.d.ts +2 -1
  36. package/dist/src/extensions/product-tours/components/ProductTourTooltipInner.d.ts +12 -0
  37. package/dist/src/extensions/product-tours/preview.d.ts +11 -0
  38. package/dist/src/extensions/product-tours/product-tours-utils.d.ts +1 -2
  39. package/dist/src/extensions/surveys/surveys-extension-utils.d.ts +3 -0
  40. package/dist/src/posthog-product-tours-types.d.ts +6 -1
  41. package/dist/surveys-preview.d.ts +6 -1
  42. package/dist/surveys-preview.js +1 -1
  43. package/dist/surveys-preview.js.map +1 -1
  44. package/dist/surveys.js +1 -1
  45. package/dist/surveys.js.map +1 -1
  46. package/lib/package.json +1 -1
  47. package/lib/src/entrypoints/product-tours-preview.es.d.ts +1 -0
  48. package/lib/src/entrypoints/product-tours-preview.es.js +6 -0
  49. package/lib/src/entrypoints/product-tours-preview.es.js.map +1 -0
  50. package/lib/src/extensions/product-tours/components/ProductTourSurveyStepInner.d.ts +12 -0
  51. package/lib/src/extensions/product-tours/components/{ProductTourSurveyStep.js → ProductTourSurveyStepInner.js} +26 -34
  52. package/lib/src/extensions/product-tours/components/ProductTourSurveyStepInner.js.map +1 -0
  53. package/lib/src/extensions/product-tours/components/ProductTourTooltip.d.ts +2 -1
  54. package/lib/src/extensions/product-tours/components/ProductTourTooltip.js +71 -99
  55. package/lib/src/extensions/product-tours/components/ProductTourTooltip.js.map +1 -1
  56. package/lib/src/extensions/product-tours/components/ProductTourTooltipInner.d.ts +12 -0
  57. package/lib/src/extensions/product-tours/components/ProductTourTooltipInner.js +18 -0
  58. package/lib/src/extensions/product-tours/components/ProductTourTooltipInner.js.map +1 -0
  59. package/lib/src/extensions/product-tours/preview.d.ts +11 -0
  60. package/lib/src/extensions/product-tours/preview.js +39 -0
  61. package/lib/src/extensions/product-tours/preview.js.map +1 -0
  62. package/lib/src/extensions/product-tours/product-tours-utils.d.ts +1 -2
  63. package/lib/src/extensions/product-tours/product-tours-utils.js +24 -16
  64. package/lib/src/extensions/product-tours/product-tours-utils.js.map +1 -1
  65. package/lib/src/extensions/product-tours/product-tours.js +19 -11
  66. package/lib/src/extensions/product-tours/product-tours.js.map +1 -1
  67. package/lib/src/extensions/surveys/surveys-extension-utils.d.ts +3 -0
  68. package/lib/src/extensions/surveys/surveys-extension-utils.js +20 -2
  69. package/lib/src/extensions/surveys/surveys-extension-utils.js.map +1 -1
  70. package/lib/src/posthog-product-tours-types.d.ts +6 -1
  71. package/lib/src/posthog-product-tours-types.js +4 -1
  72. package/lib/src/posthog-product-tours-types.js.map +1 -1
  73. package/lib/tsconfig.tsbuildinfo +1 -1
  74. package/package.json +1 -1
  75. package/dist/src/extensions/product-tours/components/ProductTourSurveyStep.d.ts +0 -12
  76. package/lib/src/extensions/product-tours/components/ProductTourSurveyStep.d.ts +0 -12
  77. package/lib/src/extensions/product-tours/components/ProductTourSurveyStep.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"surveys-extension-utils.js","sourceRoot":"","sources":["../../../../src/extensions/surveys/surveys-extension-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { VNode, cloneElement, createContext, type JSX } from 'preact'\nimport { PostHog } from '../../posthog-core'\nimport {\n MultipleSurveyQuestion,\n Survey,\n SurveyAppearance,\n SurveyEventName,\n SurveyEventProperties,\n SurveyPosition,\n SurveyQuestion,\n SurveySchedule,\n SurveyType,\n SurveyWidgetType,\n} from '../../posthog-surveys-types'\nimport { document as _document, window as _window, userAgent } from '../../utils/globals'\nimport {\n getSurveyInteractionProperty,\n getSurveySeenKey,\n getSurveyAbandonedKey,\n SURVEY_LOGGER as logger,\n setSurveySeenOnLocalStorage,\n SURVEY_IN_PROGRESS_PREFIX,\n} from '../../utils/survey-utils'\nimport { isArray, isNullish } from '@posthog/core'\n\nimport { detectDeviceType } from '@posthog/core'\nimport { propertyComparisons } from '../../utils/property-utils'\nimport { PropertyMatchType } from '../../types'\nimport { prepareStylesheet } from '../utils/stylesheet-loader'\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\nimport surveyStyles from './survey.css'\nimport { useContext } from 'preact/hooks'\n\nexport function getFontFamily(fontFamily?: string): string {\n if (fontFamily === 'inherit') {\n return 'inherit'\n }\n\n const defaultFontStack =\n 'BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"'\n return fontFamily ? `${fontFamily}, ${defaultFontStack}` : `-apple-system, ${defaultFontStack}`\n}\n\nexport function getSurveyResponseKey(questionId: string) {\n return `$survey_response_${questionId}`\n}\n\nconst BLACK_TEXT_COLOR = '#020617' // Maps out to text-slate-950 from tailwind colors. Intended for text use outside interactive elements like buttons\n\n// Keep in sync with defaultSurveyAppearance on the main app\nexport const defaultSurveyAppearance = {\n fontFamily: 'inherit',\n backgroundColor: '#eeeded',\n submitButtonColor: 'black',\n submitButtonTextColor: 'white',\n ratingButtonColor: 'white',\n ratingButtonActiveColor: 'black',\n borderColor: '#c9c6c6',\n placeholder: 'Start typing...',\n whiteLabel: false,\n displayThankYouMessage: true,\n thankYouMessageHeader: 'Thank you for your feedback!',\n position: SurveyPosition.Right,\n widgetType: SurveyWidgetType.Tab,\n widgetLabel: 'Feedback',\n widgetColor: 'black',\n zIndex: '2147483647',\n disabledButtonOpacity: '0.6',\n maxWidth: '300px',\n textSubtleColor: '#939393',\n boxPadding: '20px 24px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n borderRadius: '10px',\n shuffleQuestions: false,\n surveyPopupDelaySeconds: undefined,\n // Not customizable atm\n outlineColor: 'rgba(59, 130, 246, 0.8)',\n inputBackground: 'white',\n inputTextColor: BLACK_TEXT_COLOR,\n scrollbarThumbColor: 'var(--ph-survey-border-color)',\n scrollbarTrackColor: 'var(--ph-survey-background-color)',\n} as const\n\nexport const addSurveyCSSVariablesToElement = (\n element: HTMLElement,\n type: SurveyType,\n appearance?: SurveyAppearance | null\n) => {\n const effectiveAppearance = { ...defaultSurveyAppearance, ...appearance }\n const hostStyle = element.style\n\n const surveyHasBottomBorder =\n ![SurveyPosition.Center, SurveyPosition.Left, SurveyPosition.Right].includes(effectiveAppearance.position) ||\n (type === SurveyType.Widget && appearance?.widgetType === SurveyWidgetType.Tab)\n\n hostStyle.setProperty('--ph-survey-font-family', getFontFamily(effectiveAppearance.fontFamily))\n hostStyle.setProperty('--ph-survey-box-padding', effectiveAppearance.boxPadding)\n hostStyle.setProperty('--ph-survey-max-width', effectiveAppearance.maxWidth)\n hostStyle.setProperty('--ph-survey-z-index', effectiveAppearance.zIndex)\n hostStyle.setProperty('--ph-survey-border-color', effectiveAppearance.borderColor)\n // Non-bottom surveys or tab surveys have the border bottom\n if (surveyHasBottomBorder) {\n hostStyle.setProperty('--ph-survey-border-radius', effectiveAppearance.borderRadius)\n hostStyle.setProperty('--ph-survey-border-bottom', '1.5px solid var(--ph-survey-border-color)')\n } else {\n hostStyle.setProperty('--ph-survey-border-bottom', 'none')\n hostStyle.setProperty(\n '--ph-survey-border-radius',\n `${effectiveAppearance.borderRadius} ${effectiveAppearance.borderRadius} 0 0`\n )\n }\n hostStyle.setProperty('--ph-survey-background-color', effectiveAppearance.backgroundColor)\n hostStyle.setProperty('--ph-survey-box-shadow', effectiveAppearance.boxShadow)\n hostStyle.setProperty('--ph-survey-disabled-button-opacity', effectiveAppearance.disabledButtonOpacity)\n hostStyle.setProperty('--ph-survey-submit-button-color', effectiveAppearance.submitButtonColor)\n hostStyle.setProperty(\n '--ph-survey-submit-button-text-color',\n appearance?.submitButtonTextColor || getContrastingTextColor(effectiveAppearance.submitButtonColor)\n )\n hostStyle.setProperty('--ph-survey-rating-bg-color', effectiveAppearance.ratingButtonColor)\n hostStyle.setProperty('--ph-survey-rating-active-bg-color', effectiveAppearance.ratingButtonActiveColor)\n // Active rating text is always auto-calculated for contrast with active background\n hostStyle.setProperty(\n '--ph-survey-rating-active-text-color',\n getContrastingTextColor(effectiveAppearance.ratingButtonActiveColor)\n )\n // Primary text color: use override if provided, otherwise auto-calculate from background\n hostStyle.setProperty(\n '--ph-survey-text-primary-color',\n appearance?.textColor || getContrastingTextColor(effectiveAppearance.backgroundColor)\n )\n hostStyle.setProperty('--ph-survey-text-subtle-color', effectiveAppearance.textSubtleColor)\n hostStyle.setProperty('--ph-widget-color', effectiveAppearance.widgetColor)\n hostStyle.setProperty('--ph-widget-text-color', getContrastingTextColor(effectiveAppearance.widgetColor))\n hostStyle.setProperty('--ph-widget-z-index', effectiveAppearance.zIndex)\n\n // Use user-provided inputBackground (or deprecated inputBackgroundColor for backwards compat)\n // Fallback to internal default, with slight adjustment for white backgrounds\n const userInputBg = appearance?.inputBackground || appearance?.inputBackgroundColor\n let inputBgColor = userInputBg || effectiveAppearance.inputBackground\n if (!userInputBg && effectiveAppearance.backgroundColor === 'white') {\n inputBgColor = '#f8f8f8'\n }\n hostStyle.setProperty('--ph-survey-input-background', inputBgColor)\n // Input text color applies to both text inputs and inactive rating buttons\n const inputTextColor = appearance?.inputTextColor || getContrastingTextColor(inputBgColor)\n hostStyle.setProperty('--ph-survey-input-text-color', inputTextColor)\n hostStyle.setProperty('--ph-survey-rating-text-color', inputTextColor)\n hostStyle.setProperty('--ph-survey-scrollbar-thumb-color', effectiveAppearance.scrollbarThumbColor)\n hostStyle.setProperty('--ph-survey-scrollbar-track-color', effectiveAppearance.scrollbarTrackColor)\n hostStyle.setProperty('--ph-survey-outline-color', effectiveAppearance.outlineColor)\n}\n\nfunction nameToHex(name: string) {\n return {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n 'indianred ': '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgrey: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370d8',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#d87093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n }[name.toLowerCase()]\n}\n\nfunction hex2rgb(c: string) {\n if (c[0] === '#') {\n const hexColor = c.replace(/^#/, '')\n const r = parseInt(hexColor.slice(0, 2), 16)\n const g = parseInt(hexColor.slice(2, 4), 16)\n const b = parseInt(hexColor.slice(4, 6), 16)\n return 'rgb(' + r + ',' + g + ',' + b + ')'\n }\n return 'rgb(255, 255, 255)'\n}\n\nfunction getContrastingTextColor(color: string = defaultSurveyAppearance.backgroundColor) {\n let rgb\n if (color[0] === '#') {\n rgb = hex2rgb(color)\n }\n if (color.startsWith('rgb')) {\n rgb = color\n }\n // otherwise it's a color name\n const nameColorToHex = nameToHex(color)\n if (nameColorToHex) {\n rgb = hex2rgb(nameColorToHex)\n }\n if (!rgb) {\n return BLACK_TEXT_COLOR\n }\n const colorMatch = rgb.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/)\n if (colorMatch) {\n const r = parseInt(colorMatch[1])\n const g = parseInt(colorMatch[2])\n const b = parseInt(colorMatch[3])\n const hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b))\n return hsp > 127.5 ? BLACK_TEXT_COLOR : 'white'\n }\n return BLACK_TEXT_COLOR\n}\n\nexport function getSurveyStylesheet(posthog?: PostHog) {\n const stylesheet = prepareStylesheet(document, typeof surveyStyles === 'string' ? surveyStyles : '', posthog)\n stylesheet?.setAttribute('data-ph-survey-style', 'true')\n return stylesheet\n}\n\nexport const retrieveSurveyShadow = (\n survey: Pick<Survey, 'id' | 'appearance' | 'type'>,\n posthog?: PostHog,\n element?: Element\n) => {\n const widgetClassName = getSurveyContainerClass(survey)\n const existingDiv = document.querySelector(`.${widgetClassName}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n // If it doesn't exist, create it\n const div = document.createElement('div')\n addSurveyCSSVariablesToElement(div, survey.type, survey.appearance)\n div.className = widgetClassName\n const shadow = div.attachShadow({ mode: 'open' })\n const stylesheet = getSurveyStylesheet(posthog)\n if (stylesheet) {\n const existingStylesheet = shadow.querySelector('style')\n if (existingStylesheet) {\n shadow.removeChild(existingStylesheet)\n }\n shadow.appendChild(stylesheet)\n }\n ;(element ? element : document.body).appendChild(div)\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\ninterface SendSurveyEventArgs {\n responses: Record<string, string | number | string[] | null>\n survey: Survey\n surveySubmissionId: string\n isSurveyCompleted: boolean\n posthog?: PostHog\n}\n\nconst getSurveyResponseValue = (responses: Record<string, string | number | string[] | null>, questionId?: string) => {\n if (!questionId) {\n return null\n }\n const response = responses[getSurveyResponseKey(questionId)]\n if (isArray(response)) {\n return [...response]\n }\n return response\n}\n\nexport const sendSurveyEvent = ({\n responses,\n survey,\n surveySubmissionId,\n posthog,\n isSurveyCompleted,\n}: SendSurveyEventArgs) => {\n if (!posthog) {\n logger.error('[survey sent] event not captured, PostHog instance not found.')\n return\n }\n setSurveySeenOnLocalStorage(survey)\n posthog.capture(SurveyEventName.SENT, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(responses, question.id),\n })),\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: surveySubmissionId,\n [SurveyEventProperties.SURVEY_COMPLETED]: isSurveyCompleted,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...responses,\n $set: {\n [getSurveyInteractionProperty(survey, 'responded')]: true,\n },\n })\n if (isSurveyCompleted) {\n // Only dispatch PHSurveySent if the survey is completed, as that removes the survey from focus\n window.dispatchEvent(new CustomEvent('PHSurveySent', { detail: { surveyId: survey.id } }))\n clearInProgressSurveyState(survey)\n }\n}\n\nconst _surveyHasResponses = (inProgressSurvey: InProgressSurveyState | null) => {\n return Object.values(inProgressSurvey?.responses || {}).filter((resp) => !isNullish(resp)).length > 0\n}\n\nconst _buildSurveyEventProperties = (\n survey: Survey,\n inProgressSurvey: InProgressSurveyState | null,\n posthog: PostHog\n) => ({\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n [SurveyEventProperties.SURVEY_PARTIALLY_COMPLETED]: _surveyHasResponses(inProgressSurvey),\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...inProgressSurvey?.responses,\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: inProgressSurvey?.surveySubmissionId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(inProgressSurvey?.responses || {}, question.id),\n })),\n})\n\nexport const dismissedSurveyEvent = (survey: Survey, posthog?: PostHog, readOnly?: boolean) => {\n if (!posthog) {\n logger.error('[survey dismissed] event not captured, PostHog instance not found.')\n return\n }\n if (readOnly) {\n return\n }\n\n const inProgressSurvey = getInProgressSurveyState(survey)\n posthog.capture(SurveyEventName.DISMISSED, {\n ..._buildSurveyEventProperties(survey, inProgressSurvey, posthog),\n $set: {\n [getSurveyInteractionProperty(survey, 'dismissed')]: true,\n },\n })\n clearInProgressSurveyState(survey)\n setSurveySeenOnLocalStorage(survey)\n window.dispatchEvent(new CustomEvent('PHSurveyClosed', { detail: { surveyId: survey.id } }))\n}\n\nexport const sendSurveyAbandonedEvent = (survey: Survey, posthog?: PostHog) => {\n if (!posthog) {\n logger.error('[survey abandoned] event not captured, PostHog instance not found.')\n return\n }\n\n const abandonedKey = getSurveyAbandonedKey(survey)\n try {\n if (localStorage.getItem(abandonedKey) === 'true') {\n return\n }\n } catch {\n // localStorage not available\n return\n }\n\n const inProgressSurvey = getInProgressSurveyState(survey)\n if (!inProgressSurvey) {\n return\n }\n\n try {\n localStorage.setItem(abandonedKey, 'true')\n } catch {\n // localStorage not available\n }\n\n posthog.capture(SurveyEventName.ABANDONED, _buildSurveyEventProperties(survey, inProgressSurvey, posthog), {\n transport: 'sendBeacon',\n })\n}\n\n// Use the Fisher-yates algorithm to shuffle this array\n// https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\nexport const shuffle = (array: any[]) => {\n return array\n .map((a) => ({ sort: Math.floor(Math.random() * 10), value: a }))\n .sort((a, b) => a.sort - b.sort)\n .map((a) => a.value)\n}\n\nconst reverseIfUnshuffled = (unshuffled: any[], shuffled: any[]): any[] => {\n if (unshuffled.length === shuffled.length && unshuffled.every((val, index) => val === shuffled[index])) {\n return shuffled.reverse()\n }\n\n return shuffled\n}\n\nexport const getDisplayOrderChoices = (question: MultipleSurveyQuestion): string[] => {\n if (!question.shuffleOptions) {\n return question.choices\n }\n\n const displayOrderChoices = question.choices\n let openEndedChoice = ''\n if (question.hasOpenChoice) {\n // if the question has an open-ended choice, its always the last element in the choices array.\n openEndedChoice = displayOrderChoices.pop()!\n }\n\n const shuffledOptions = reverseIfUnshuffled(displayOrderChoices, shuffle(displayOrderChoices))\n\n if (question.hasOpenChoice) {\n question.choices.push(openEndedChoice)\n shuffledOptions.push(openEndedChoice)\n }\n\n return shuffledOptions\n}\n\nexport const getDisplayOrderQuestions = (survey: Survey): SurveyQuestion[] => {\n if (!survey.appearance || !survey.appearance.shuffleQuestions || survey.enable_partial_responses) {\n return survey.questions\n }\n\n return reverseIfUnshuffled(survey.questions, shuffle(survey.questions))\n}\n\nexport const hasEvents = (survey: Pick<Survey, 'conditions'>): boolean => {\n return survey.conditions?.events?.values?.length != undefined && survey.conditions?.events?.values?.length > 0\n}\n\nexport const canActivateRepeatedly = (\n survey: Pick<Survey, 'schedule' | 'conditions' | 'id' | 'current_iteration'>\n): boolean => {\n return (\n !!(survey.conditions?.events?.repeatedActivation && hasEvents(survey)) ||\n survey.schedule === SurveySchedule.Always ||\n isSurveyInProgress(survey)\n )\n}\n\n/**\n * getSurveySeen checks local storage for the surveySeen Key a\n * and overrides this value if the survey can be repeatedly activated by its events.\n * @param survey\n */\nexport const getSurveySeen = (survey: Survey): boolean => {\n const surveySeen = localStorage.getItem(getSurveySeenKey(survey))\n if (surveySeen) {\n // if a survey has already been seen,\n // we will override it with the event repeated activation value.\n return !canActivateRepeatedly(survey)\n }\n\n return false\n}\n\nconst LAST_SEEN_SURVEY_DATE_KEY = 'lastSeenSurveyDate'\n\nexport const hasWaitPeriodPassed = (waitPeriodInDays: number | undefined): boolean => {\n const lastSeenSurveyDate = localStorage.getItem(LAST_SEEN_SURVEY_DATE_KEY)\n if (!waitPeriodInDays || !lastSeenSurveyDate) {\n return true\n }\n\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 return diffDaysFromToday > waitPeriodInDays\n}\n\ninterface SurveyContextProps {\n isPreviewMode: boolean\n previewPageIndex: number | undefined\n onPopupSurveyDismissed: () => void\n isPopup: boolean\n onPreviewSubmit: (res: string | string[] | number | null) => void\n surveySubmissionId: string\n}\n\nexport const SurveyContext = createContext<SurveyContextProps>({\n isPreviewMode: false,\n previewPageIndex: 0,\n onPopupSurveyDismissed: () => {},\n isPopup: true,\n onPreviewSubmit: () => {},\n surveySubmissionId: '',\n})\n\nexport const useSurveyContext = () => {\n return useContext(SurveyContext)\n}\n\ninterface RenderProps {\n component: VNode<{ className: string }>\n children: string\n renderAsHtml?: boolean\n style?: JSX.CSSProperties\n}\n\nexport const renderChildrenAsTextOrHtml = ({ component, children, renderAsHtml, style }: RenderProps) => {\n return renderAsHtml\n ? cloneElement(component, {\n dangerouslySetInnerHTML: { __html: children },\n style,\n })\n : cloneElement(component, {\n children,\n style,\n })\n}\n\nfunction defaultMatchType(matchType?: PropertyMatchType): PropertyMatchType {\n return matchType ?? 'icontains'\n}\n\n// use urlMatchType to validate url condition, fallback to contains for backwards compatibility\nexport function doesSurveyUrlMatch(survey: Pick<Survey, 'conditions'>): boolean {\n if (!survey.conditions?.url) {\n return true\n }\n // if we dont know the url, assume it is not a match\n const href = window?.location?.href\n if (!href) {\n return false\n }\n const targets = [survey.conditions.url]\n const matchType = defaultMatchType(survey.conditions?.urlMatchType)\n return propertyComparisons[matchType](targets, [href])\n}\n\nexport function doesSurveyDeviceTypesMatch(survey: Survey): boolean {\n if (!survey.conditions?.deviceTypes || survey.conditions?.deviceTypes.length === 0) {\n return true\n }\n // if we dont know the device type, assume it is not a match\n if (!userAgent) {\n return false\n }\n\n const deviceType = detectDeviceType(userAgent)\n return propertyComparisons[defaultMatchType(survey.conditions?.deviceTypesMatchType)](\n survey.conditions.deviceTypes,\n [deviceType]\n )\n}\n\nexport function doesSurveyMatchSelector(survey: Survey): boolean {\n if (!survey.conditions?.selector) {\n return true\n }\n return !!document?.querySelector(survey.conditions.selector)\n}\n\ninterface InProgressSurveyState {\n surveySubmissionId: string\n lastQuestionIndex: number\n responses: Record<string, string | number | string[] | null>\n}\n\nconst getInProgressSurveyStateKey = (survey: Pick<Survey, 'id' | 'current_iteration'>): string => {\n let key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}_${survey.current_iteration}`\n }\n return key\n}\n\nexport const setInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>,\n state: InProgressSurveyState\n): void => {\n try {\n localStorage.setItem(getInProgressSurveyStateKey(survey), JSON.stringify(state))\n } catch (e) {\n logger.error('Error setting in-progress survey state in localStorage', e)\n }\n}\n\nexport const getInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>\n): InProgressSurveyState | null => {\n try {\n const stateString = localStorage.getItem(getInProgressSurveyStateKey(survey))\n if (stateString) {\n return JSON.parse(stateString) as InProgressSurveyState\n }\n } catch (e) {\n logger.error('Error getting in-progress survey state from localStorage', e)\n }\n return null\n}\n\nexport const isSurveyInProgress = (survey: Pick<Survey, 'id' | 'current_iteration'>): boolean => {\n const state = getInProgressSurveyState(survey)\n return !isNullish(state?.surveySubmissionId)\n}\n\nexport const clearInProgressSurveyState = (survey: Pick<Survey, 'id' | 'current_iteration'>): void => {\n try {\n localStorage.removeItem(getInProgressSurveyStateKey(survey))\n } catch (e) {\n logger.error('Error clearing in-progress survey state from localStorage', e)\n }\n}\n\nexport function getSurveyContainerClass(survey: Pick<Survey, 'id'>, asSelector = false): string {\n const className = `PostHogSurvey-${survey.id}`\n return asSelector ? `.${className}` : className\n}\n"]}
1
+ {"version":3,"file":"surveys-extension-utils.js","sourceRoot":"","sources":["../../../../src/extensions/surveys/surveys-extension-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { VNode, cloneElement, createContext, type JSX } from 'preact'\nimport { PostHog } from '../../posthog-core'\nimport {\n MultipleSurveyQuestion,\n Survey,\n SurveyAppearance,\n SurveyEventName,\n SurveyEventProperties,\n SurveyPosition,\n SurveyQuestion,\n SurveySchedule,\n SurveyType,\n SurveyWidgetType,\n} from '../../posthog-surveys-types'\nimport { document as _document, window as _window, userAgent } from '../../utils/globals'\nimport {\n getSurveyInteractionProperty,\n getSurveySeenKey,\n getSurveyAbandonedKey,\n SURVEY_LOGGER as logger,\n setSurveySeenOnLocalStorage,\n SURVEY_IN_PROGRESS_PREFIX,\n} from '../../utils/survey-utils'\nimport { isArray, isNullish } from '@posthog/core'\n\nimport { detectDeviceType } from '@posthog/core'\nimport { propertyComparisons } from '../../utils/property-utils'\nimport { PropertyMatchType } from '../../types'\nimport { prepareStylesheet } from '../utils/stylesheet-loader'\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\nimport surveyStyles from './survey.css'\nimport { useContext } from 'preact/hooks'\n\nexport function getFontFamily(fontFamily?: string): string {\n if (fontFamily === 'inherit') {\n return 'inherit'\n }\n\n const defaultFontStack =\n 'BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"'\n return fontFamily ? `${fontFamily}, ${defaultFontStack}` : `-apple-system, ${defaultFontStack}`\n}\n\nexport function getSurveyResponseKey(questionId: string) {\n return `$survey_response_${questionId}`\n}\n\nconst BLACK_TEXT_COLOR = '#020617' // Maps out to text-slate-950 from tailwind colors. Intended for text use outside interactive elements like buttons\n\n// Keep in sync with defaultSurveyAppearance on the main app\nexport const defaultSurveyAppearance = {\n fontFamily: 'inherit',\n backgroundColor: '#eeeded',\n submitButtonColor: 'black',\n submitButtonTextColor: 'white',\n ratingButtonColor: 'white',\n ratingButtonActiveColor: 'black',\n borderColor: '#c9c6c6',\n placeholder: 'Start typing...',\n whiteLabel: false,\n displayThankYouMessage: true,\n thankYouMessageHeader: 'Thank you for your feedback!',\n position: SurveyPosition.Right,\n widgetType: SurveyWidgetType.Tab,\n widgetLabel: 'Feedback',\n widgetColor: 'black',\n zIndex: '2147483647',\n disabledButtonOpacity: '0.6',\n maxWidth: '300px',\n textSubtleColor: '#939393',\n boxPadding: '20px 24px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n borderRadius: '10px',\n shuffleQuestions: false,\n surveyPopupDelaySeconds: undefined,\n // Not customizable atm\n outlineColor: 'rgba(59, 130, 246, 0.8)',\n inputBackground: 'white',\n inputTextColor: BLACK_TEXT_COLOR,\n scrollbarThumbColor: 'var(--ph-survey-border-color)',\n scrollbarTrackColor: 'var(--ph-survey-background-color)',\n} as const\n\nexport const addSurveyCSSVariablesToElement = (\n element: HTMLElement,\n type: SurveyType,\n appearance?: SurveyAppearance | null\n) => {\n const effectiveAppearance = { ...defaultSurveyAppearance, ...appearance }\n const hostStyle = element.style\n\n const surveyHasBottomBorder =\n ![SurveyPosition.Center, SurveyPosition.Left, SurveyPosition.Right].includes(effectiveAppearance.position) ||\n (type === SurveyType.Widget && appearance?.widgetType === SurveyWidgetType.Tab)\n\n hostStyle.setProperty('--ph-survey-font-family', getFontFamily(effectiveAppearance.fontFamily))\n hostStyle.setProperty('--ph-survey-box-padding', effectiveAppearance.boxPadding)\n hostStyle.setProperty('--ph-survey-max-width', effectiveAppearance.maxWidth)\n hostStyle.setProperty('--ph-survey-z-index', effectiveAppearance.zIndex)\n hostStyle.setProperty('--ph-survey-border-color', effectiveAppearance.borderColor)\n // Non-bottom surveys or tab surveys have the border bottom\n if (surveyHasBottomBorder) {\n hostStyle.setProperty('--ph-survey-border-radius', effectiveAppearance.borderRadius)\n hostStyle.setProperty('--ph-survey-border-bottom', '1.5px solid var(--ph-survey-border-color)')\n } else {\n hostStyle.setProperty('--ph-survey-border-bottom', 'none')\n hostStyle.setProperty(\n '--ph-survey-border-radius',\n `${effectiveAppearance.borderRadius} ${effectiveAppearance.borderRadius} 0 0`\n )\n }\n hostStyle.setProperty('--ph-survey-background-color', effectiveAppearance.backgroundColor)\n hostStyle.setProperty('--ph-survey-box-shadow', effectiveAppearance.boxShadow)\n hostStyle.setProperty('--ph-survey-disabled-button-opacity', effectiveAppearance.disabledButtonOpacity)\n hostStyle.setProperty('--ph-survey-submit-button-color', effectiveAppearance.submitButtonColor)\n hostStyle.setProperty(\n '--ph-survey-submit-button-text-color',\n appearance?.submitButtonTextColor || getContrastingTextColor(effectiveAppearance.submitButtonColor)\n )\n hostStyle.setProperty('--ph-survey-rating-bg-color', effectiveAppearance.ratingButtonColor)\n hostStyle.setProperty('--ph-survey-rating-active-bg-color', effectiveAppearance.ratingButtonActiveColor)\n // Active rating text is always auto-calculated for contrast with active background\n hostStyle.setProperty(\n '--ph-survey-rating-active-text-color',\n getContrastingTextColor(effectiveAppearance.ratingButtonActiveColor)\n )\n // Primary text color: use override if provided, otherwise auto-calculate from background\n hostStyle.setProperty(\n '--ph-survey-text-primary-color',\n appearance?.textColor || getContrastingTextColor(effectiveAppearance.backgroundColor)\n )\n hostStyle.setProperty('--ph-survey-text-subtle-color', effectiveAppearance.textSubtleColor)\n hostStyle.setProperty('--ph-widget-color', effectiveAppearance.widgetColor)\n hostStyle.setProperty('--ph-widget-text-color', getContrastingTextColor(effectiveAppearance.widgetColor))\n hostStyle.setProperty('--ph-widget-z-index', effectiveAppearance.zIndex)\n\n // Use user-provided inputBackground (or deprecated inputBackgroundColor for backwards compat)\n // Fallback to internal default, with slight adjustment for white backgrounds\n const userInputBg = appearance?.inputBackground || appearance?.inputBackgroundColor\n let inputBgColor = userInputBg || effectiveAppearance.inputBackground\n if (!userInputBg && effectiveAppearance.backgroundColor === 'white') {\n inputBgColor = '#f8f8f8'\n }\n hostStyle.setProperty('--ph-survey-input-background', inputBgColor)\n // Input text color applies to both text inputs and inactive rating buttons\n const inputTextColor = appearance?.inputTextColor || getContrastingTextColor(inputBgColor)\n hostStyle.setProperty('--ph-survey-input-text-color', inputTextColor)\n hostStyle.setProperty('--ph-survey-rating-text-color', inputTextColor)\n hostStyle.setProperty('--ph-survey-scrollbar-thumb-color', effectiveAppearance.scrollbarThumbColor)\n hostStyle.setProperty('--ph-survey-scrollbar-track-color', effectiveAppearance.scrollbarTrackColor)\n hostStyle.setProperty('--ph-survey-outline-color', effectiveAppearance.outlineColor)\n}\n\nfunction nameToHex(name: string) {\n return {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n 'indianred ': '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgrey: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370d8',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#d87093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n }[name.toLowerCase()]\n}\n\nexport function hex2rgb(c: string): string {\n if (c.startsWith('#')) {\n let hexColor = c.replace(/^#/, '')\n // Handle 3-character shorthand (e.g., #111 -> #111111, #abc -> #aabbcc)\n if (/^[0-9A-Fa-f]{3}$/.test(hexColor)) {\n hexColor = hexColor[0] + hexColor[0] + hexColor[1] + hexColor[1] + hexColor[2] + hexColor[2]\n }\n if (!/^[0-9A-Fa-f]{6}$/.test(hexColor)) {\n return 'rgb(255, 255, 255)'\n }\n const r = parseInt(hexColor.slice(0, 2), 16)\n const g = parseInt(hexColor.slice(2, 4), 16)\n const b = parseInt(hexColor.slice(4, 6), 16)\n return `rgb(${r},${g},${b})`\n }\n return 'rgb(255, 255, 255)'\n}\n\nexport function hexToRgba(hex: string, opacity: number): string {\n const rgb = hex2rgb(hex)\n const match = rgb.match(/^rgb\\((\\d+),(\\d+),(\\d+)\\)$/)\n if (!match) {\n return hex\n }\n return `rgba(${match[1]}, ${match[2]}, ${match[3]}, ${opacity})`\n}\n\nexport function getContrastingTextColor(color: string = defaultSurveyAppearance.backgroundColor) {\n let rgb\n if (color[0] === '#') {\n rgb = hex2rgb(color)\n }\n if (color.startsWith('rgb')) {\n rgb = color\n }\n // otherwise it's a color name\n const nameColorToHex = nameToHex(color)\n if (nameColorToHex) {\n rgb = hex2rgb(nameColorToHex)\n }\n if (!rgb) {\n return BLACK_TEXT_COLOR\n }\n const colorMatch = rgb.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/)\n if (colorMatch) {\n const r = parseInt(colorMatch[1])\n const g = parseInt(colorMatch[2])\n const b = parseInt(colorMatch[3])\n const hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b))\n return hsp > 127.5 ? BLACK_TEXT_COLOR : 'white'\n }\n return BLACK_TEXT_COLOR\n}\n\nexport function getSurveyStylesheet(posthog?: PostHog) {\n const stylesheet = prepareStylesheet(document, typeof surveyStyles === 'string' ? surveyStyles : '', posthog)\n stylesheet?.setAttribute('data-ph-survey-style', 'true')\n return stylesheet\n}\n\nexport const retrieveSurveyShadow = (\n survey: Pick<Survey, 'id' | 'appearance' | 'type'>,\n posthog?: PostHog,\n element?: Element\n) => {\n const widgetClassName = getSurveyContainerClass(survey)\n const existingDiv = document.querySelector(`.${widgetClassName}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n // If it doesn't exist, create it\n const div = document.createElement('div')\n addSurveyCSSVariablesToElement(div, survey.type, survey.appearance)\n div.className = widgetClassName\n const shadow = div.attachShadow({ mode: 'open' })\n const stylesheet = getSurveyStylesheet(posthog)\n if (stylesheet) {\n const existingStylesheet = shadow.querySelector('style')\n if (existingStylesheet) {\n shadow.removeChild(existingStylesheet)\n }\n shadow.appendChild(stylesheet)\n }\n ;(element ? element : document.body).appendChild(div)\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\ninterface SendSurveyEventArgs {\n responses: Record<string, string | number | string[] | null>\n survey: Survey\n surveySubmissionId: string\n isSurveyCompleted: boolean\n posthog?: PostHog\n}\n\nconst getSurveyResponseValue = (responses: Record<string, string | number | string[] | null>, questionId?: string) => {\n if (!questionId) {\n return null\n }\n const response = responses[getSurveyResponseKey(questionId)]\n if (isArray(response)) {\n return [...response]\n }\n return response\n}\n\nexport const sendSurveyEvent = ({\n responses,\n survey,\n surveySubmissionId,\n posthog,\n isSurveyCompleted,\n}: SendSurveyEventArgs) => {\n if (!posthog) {\n logger.error('[survey sent] event not captured, PostHog instance not found.')\n return\n }\n setSurveySeenOnLocalStorage(survey)\n posthog.capture(SurveyEventName.SENT, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(responses, question.id),\n })),\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: surveySubmissionId,\n [SurveyEventProperties.SURVEY_COMPLETED]: isSurveyCompleted,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...responses,\n $set: {\n [getSurveyInteractionProperty(survey, 'responded')]: true,\n },\n })\n if (isSurveyCompleted) {\n // Only dispatch PHSurveySent if the survey is completed, as that removes the survey from focus\n window.dispatchEvent(new CustomEvent('PHSurveySent', { detail: { surveyId: survey.id } }))\n clearInProgressSurveyState(survey)\n }\n}\n\nconst _surveyHasResponses = (inProgressSurvey: InProgressSurveyState | null) => {\n return Object.values(inProgressSurvey?.responses || {}).filter((resp) => !isNullish(resp)).length > 0\n}\n\nconst _buildSurveyEventProperties = (\n survey: Survey,\n inProgressSurvey: InProgressSurveyState | null,\n posthog: PostHog\n) => ({\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n [SurveyEventProperties.SURVEY_PARTIALLY_COMPLETED]: _surveyHasResponses(inProgressSurvey),\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...inProgressSurvey?.responses,\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: inProgressSurvey?.surveySubmissionId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(inProgressSurvey?.responses || {}, question.id),\n })),\n})\n\nexport const dismissedSurveyEvent = (survey: Survey, posthog?: PostHog, readOnly?: boolean) => {\n if (!posthog) {\n logger.error('[survey dismissed] event not captured, PostHog instance not found.')\n return\n }\n if (readOnly) {\n return\n }\n\n const inProgressSurvey = getInProgressSurveyState(survey)\n posthog.capture(SurveyEventName.DISMISSED, {\n ..._buildSurveyEventProperties(survey, inProgressSurvey, posthog),\n $set: {\n [getSurveyInteractionProperty(survey, 'dismissed')]: true,\n },\n })\n clearInProgressSurveyState(survey)\n setSurveySeenOnLocalStorage(survey)\n window.dispatchEvent(new CustomEvent('PHSurveyClosed', { detail: { surveyId: survey.id } }))\n}\n\nexport const sendSurveyAbandonedEvent = (survey: Survey, posthog?: PostHog) => {\n if (!posthog) {\n logger.error('[survey abandoned] event not captured, PostHog instance not found.')\n return\n }\n\n const abandonedKey = getSurveyAbandonedKey(survey)\n try {\n if (localStorage.getItem(abandonedKey) === 'true') {\n return\n }\n } catch {\n // localStorage not available\n return\n }\n\n const inProgressSurvey = getInProgressSurveyState(survey)\n if (!inProgressSurvey) {\n return\n }\n\n try {\n localStorage.setItem(abandonedKey, 'true')\n } catch {\n // localStorage not available\n }\n\n posthog.capture(SurveyEventName.ABANDONED, _buildSurveyEventProperties(survey, inProgressSurvey, posthog), {\n transport: 'sendBeacon',\n })\n}\n\n// Use the Fisher-yates algorithm to shuffle this array\n// https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\nexport const shuffle = (array: any[]) => {\n return array\n .map((a) => ({ sort: Math.floor(Math.random() * 10), value: a }))\n .sort((a, b) => a.sort - b.sort)\n .map((a) => a.value)\n}\n\nconst reverseIfUnshuffled = (unshuffled: any[], shuffled: any[]): any[] => {\n if (unshuffled.length === shuffled.length && unshuffled.every((val, index) => val === shuffled[index])) {\n return shuffled.reverse()\n }\n\n return shuffled\n}\n\nexport const getDisplayOrderChoices = (question: MultipleSurveyQuestion): string[] => {\n if (!question.shuffleOptions) {\n return question.choices\n }\n\n const displayOrderChoices = question.choices\n let openEndedChoice = ''\n if (question.hasOpenChoice) {\n // if the question has an open-ended choice, its always the last element in the choices array.\n openEndedChoice = displayOrderChoices.pop()!\n }\n\n const shuffledOptions = reverseIfUnshuffled(displayOrderChoices, shuffle(displayOrderChoices))\n\n if (question.hasOpenChoice) {\n question.choices.push(openEndedChoice)\n shuffledOptions.push(openEndedChoice)\n }\n\n return shuffledOptions\n}\n\nexport const getDisplayOrderQuestions = (survey: Survey): SurveyQuestion[] => {\n if (!survey.appearance || !survey.appearance.shuffleQuestions || survey.enable_partial_responses) {\n return survey.questions\n }\n\n return reverseIfUnshuffled(survey.questions, shuffle(survey.questions))\n}\n\nexport const hasEvents = (survey: Pick<Survey, 'conditions'>): boolean => {\n return survey.conditions?.events?.values?.length != undefined && survey.conditions?.events?.values?.length > 0\n}\n\nexport const canActivateRepeatedly = (\n survey: Pick<Survey, 'schedule' | 'conditions' | 'id' | 'current_iteration'>\n): boolean => {\n return (\n !!(survey.conditions?.events?.repeatedActivation && hasEvents(survey)) ||\n survey.schedule === SurveySchedule.Always ||\n isSurveyInProgress(survey)\n )\n}\n\n/**\n * getSurveySeen checks local storage for the surveySeen Key a\n * and overrides this value if the survey can be repeatedly activated by its events.\n * @param survey\n */\nexport const getSurveySeen = (survey: Survey): boolean => {\n const surveySeen = localStorage.getItem(getSurveySeenKey(survey))\n if (surveySeen) {\n // if a survey has already been seen,\n // we will override it with the event repeated activation value.\n return !canActivateRepeatedly(survey)\n }\n\n return false\n}\n\nconst LAST_SEEN_SURVEY_DATE_KEY = 'lastSeenSurveyDate'\n\nexport const hasWaitPeriodPassed = (waitPeriodInDays: number | undefined): boolean => {\n const lastSeenSurveyDate = localStorage.getItem(LAST_SEEN_SURVEY_DATE_KEY)\n if (!waitPeriodInDays || !lastSeenSurveyDate) {\n return true\n }\n\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 return diffDaysFromToday > waitPeriodInDays\n}\n\ninterface SurveyContextProps {\n isPreviewMode: boolean\n previewPageIndex: number | undefined\n onPopupSurveyDismissed: () => void\n isPopup: boolean\n onPreviewSubmit: (res: string | string[] | number | null) => void\n surveySubmissionId: string\n}\n\nexport const SurveyContext = createContext<SurveyContextProps>({\n isPreviewMode: false,\n previewPageIndex: 0,\n onPopupSurveyDismissed: () => {},\n isPopup: true,\n onPreviewSubmit: () => {},\n surveySubmissionId: '',\n})\n\nexport const useSurveyContext = () => {\n return useContext(SurveyContext)\n}\n\ninterface RenderProps {\n component: VNode<{ className: string }>\n children: string\n renderAsHtml?: boolean\n style?: JSX.CSSProperties\n}\n\nexport const renderChildrenAsTextOrHtml = ({ component, children, renderAsHtml, style }: RenderProps) => {\n return renderAsHtml\n ? cloneElement(component, {\n dangerouslySetInnerHTML: { __html: children },\n style,\n })\n : cloneElement(component, {\n children,\n style,\n })\n}\n\nfunction defaultMatchType(matchType?: PropertyMatchType): PropertyMatchType {\n return matchType ?? 'icontains'\n}\n\n// use urlMatchType to validate url condition, fallback to contains for backwards compatibility\nexport function doesSurveyUrlMatch(survey: Pick<Survey, 'conditions'>): boolean {\n if (!survey.conditions?.url) {\n return true\n }\n // if we dont know the url, assume it is not a match\n const href = window?.location?.href\n if (!href) {\n return false\n }\n const targets = [survey.conditions.url]\n const matchType = defaultMatchType(survey.conditions?.urlMatchType)\n return propertyComparisons[matchType](targets, [href])\n}\n\nexport function doesSurveyDeviceTypesMatch(survey: Survey): boolean {\n if (!survey.conditions?.deviceTypes || survey.conditions?.deviceTypes.length === 0) {\n return true\n }\n // if we dont know the device type, assume it is not a match\n if (!userAgent) {\n return false\n }\n\n const deviceType = detectDeviceType(userAgent)\n return propertyComparisons[defaultMatchType(survey.conditions?.deviceTypesMatchType)](\n survey.conditions.deviceTypes,\n [deviceType]\n )\n}\n\nexport function doesSurveyMatchSelector(survey: Survey): boolean {\n if (!survey.conditions?.selector) {\n return true\n }\n return !!document?.querySelector(survey.conditions.selector)\n}\n\ninterface InProgressSurveyState {\n surveySubmissionId: string\n lastQuestionIndex: number\n responses: Record<string, string | number | string[] | null>\n}\n\nconst getInProgressSurveyStateKey = (survey: Pick<Survey, 'id' | 'current_iteration'>): string => {\n let key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}_${survey.current_iteration}`\n }\n return key\n}\n\nexport const setInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>,\n state: InProgressSurveyState\n): void => {\n try {\n localStorage.setItem(getInProgressSurveyStateKey(survey), JSON.stringify(state))\n } catch (e) {\n logger.error('Error setting in-progress survey state in localStorage', e)\n }\n}\n\nexport const getInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>\n): InProgressSurveyState | null => {\n try {\n const stateString = localStorage.getItem(getInProgressSurveyStateKey(survey))\n if (stateString) {\n return JSON.parse(stateString) as InProgressSurveyState\n }\n } catch (e) {\n logger.error('Error getting in-progress survey state from localStorage', e)\n }\n return null\n}\n\nexport const isSurveyInProgress = (survey: Pick<Survey, 'id' | 'current_iteration'>): boolean => {\n const state = getInProgressSurveyState(survey)\n return !isNullish(state?.surveySubmissionId)\n}\n\nexport const clearInProgressSurveyState = (survey: Pick<Survey, 'id' | 'current_iteration'>): void => {\n try {\n localStorage.removeItem(getInProgressSurveyStateKey(survey))\n } catch (e) {\n logger.error('Error clearing in-progress survey state from localStorage', e)\n }\n}\n\nexport function getSurveyContainerClass(survey: Pick<Survey, 'id'>, asSelector = false): string {\n const className = `PostHogSurvey-${survey.id}`\n return asSelector ? `.${className}` : className\n}\n"]}
@@ -10,6 +10,7 @@ export interface JSONContent {
10
10
  }[];
11
11
  text?: string;
12
12
  }
13
+ export type ProductTourStepType = 'element' | 'modal' | 'survey';
13
14
  export type ProductTourSurveyQuestionType = 'open' | 'rating';
14
15
  export interface ProductTourSurveyQuestion {
15
16
  type: ProductTourSurveyQuestionType;
@@ -25,6 +26,7 @@ export interface ProductTourSurveyQuestion {
25
26
  }
26
27
  export interface ProductTourStep {
27
28
  id: string;
29
+ type: ProductTourStepType;
28
30
  selector?: string;
29
31
  progressionTrigger: 'button' | 'click';
30
32
  content: JSONContent | null;
@@ -54,9 +56,12 @@ export interface ProductTourAppearance {
54
56
  backgroundColor?: string;
55
57
  textColor?: string;
56
58
  buttonColor?: string;
57
- buttonTextColor?: string;
58
59
  borderRadius?: number;
60
+ buttonBorderRadius?: number;
59
61
  borderColor?: string;
62
+ fontFamily?: string;
63
+ boxShadow?: string;
64
+ showOverlay?: boolean;
60
65
  whiteLabel?: boolean;
61
66
  }
62
67
  export interface ProductTour {
@@ -5,9 +5,12 @@ exports.DEFAULT_PRODUCT_TOUR_APPEARANCE = {
5
5
  backgroundColor: '#ffffff',
6
6
  textColor: '#1d1f27',
7
7
  buttonColor: '#1d1f27',
8
- buttonTextColor: '#ffffff',
9
8
  borderRadius: 8,
9
+ buttonBorderRadius: 6,
10
10
  borderColor: '#e5e7eb',
11
+ fontFamily: 'system-ui',
12
+ boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
13
+ showOverlay: true,
11
14
  whiteLabel: false,
12
15
  };
13
16
  //# sourceMappingURL=posthog-product-tours-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-product-tours-types.js","sourceRoot":"","sources":["../../src/posthog-product-tours-types.ts"],"names":[],"mappings":";;;AA6Fa,QAAA,+BAA+B,GAAoC;IAC5E,eAAe,EAAE,SAAS;IAC1B,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,eAAe,EAAE,SAAS;IAC1B,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,KAAK;CACpB,CAAA","sourcesContent":["import { PropertyMatchType } from './types'\nimport { SurveyActionType, SurveyEventWithFilters } from './posthog-surveys-types'\n\nexport interface JSONContent {\n type?: string\n attrs?: Record<string, any>\n content?: JSONContent[]\n marks?: { type: string; attrs?: Record<string, any> }[]\n text?: string\n}\n\nexport type ProductTourSurveyQuestionType = 'open' | 'rating'\n\nexport interface ProductTourSurveyQuestion {\n type: ProductTourSurveyQuestionType\n questionText: string\n /** Rating display type - emoji or number */\n display?: 'emoji' | 'number'\n /** Rating scale - 3 or 5 for emoji, 5 or 10 for number */\n scale?: 3 | 5 | 10\n /** Label for low end of rating scale (e.g., \"Not likely\") */\n lowerBoundLabel?: string\n /** Label for high end of rating scale (e.g., \"Very likely\") */\n upperBoundLabel?: string\n}\n\nexport interface ProductTourStep {\n id: string\n selector?: string\n progressionTrigger: 'button' | 'click'\n content: JSONContent | null\n /** Inline survey question config - if present, this is a survey step */\n survey?: ProductTourSurveyQuestion\n /** ID of the auto-created survey for this step (set by backend) */\n linkedSurveyId?: string\n /** ID of the survey question (set by backend, used for event tracking) */\n linkedSurveyQuestionId?: string\n}\n\nexport interface ProductTourConditions {\n url?: string\n urlMatchType?: PropertyMatchType\n selector?: string\n autoShowDelaySeconds?: number\n events?: {\n values: SurveyEventWithFilters[]\n } | null\n cancelEvents?: {\n values: SurveyEventWithFilters[]\n } | null\n actions?: {\n values: SurveyActionType[]\n } | null\n}\n\nexport interface ProductTourAppearance {\n backgroundColor?: string\n textColor?: string\n buttonColor?: string\n buttonTextColor?: string\n borderRadius?: number\n borderColor?: string\n whiteLabel?: boolean\n}\n\nexport interface ProductTour {\n id: string\n name: string\n description?: string\n type: 'product_tour'\n auto_launch?: boolean\n start_date: string | null\n end_date: string | null\n current_iteration?: number\n conditions?: ProductTourConditions\n appearance?: ProductTourAppearance\n steps: ProductTourStep[]\n internal_targeting_flag_key?: string\n linked_flag_key?: string\n}\n\nexport type ProductTourCallback = (tours: ProductTour[], context?: { isLoaded: boolean; error?: string }) => void\n\nexport type ProductTourSelectorError = 'not_found' | 'multiple_matches' | 'not_visible'\n\nexport type ProductTourDismissReason =\n | 'user_clicked_skip'\n | 'user_clicked_outside'\n | 'escape_key'\n | 'element_unavailable'\n\nexport type ProductTourRenderReason = 'auto' | 'api' | 'trigger' | 'event'\n\nexport const DEFAULT_PRODUCT_TOUR_APPEARANCE: Required<ProductTourAppearance> = {\n backgroundColor: '#ffffff',\n textColor: '#1d1f27',\n buttonColor: '#1d1f27',\n buttonTextColor: '#ffffff',\n borderRadius: 8,\n borderColor: '#e5e7eb',\n whiteLabel: false,\n}\n\nexport interface ShowTourOptions {\n reason?: ProductTourRenderReason\n enableStrictValidation?: boolean\n}\n"]}
1
+ {"version":3,"file":"posthog-product-tours-types.js","sourceRoot":"","sources":["../../src/posthog-product-tours-types.ts"],"names":[],"mappings":";;;AAmGa,QAAA,+BAA+B,GAAoC;IAC5E,eAAe,EAAE,SAAS;IAC1B,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,CAAC;IACf,kBAAkB,EAAE,CAAC;IACrB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,gCAAgC;IAC3C,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,KAAK;CACpB,CAAA","sourcesContent":["import { PropertyMatchType } from './types'\nimport { SurveyActionType, SurveyEventWithFilters } from './posthog-surveys-types'\n\nexport interface JSONContent {\n type?: string\n attrs?: Record<string, any>\n content?: JSONContent[]\n marks?: { type: string; attrs?: Record<string, any> }[]\n text?: string\n}\n\nexport type ProductTourStepType = 'element' | 'modal' | 'survey'\n\nexport type ProductTourSurveyQuestionType = 'open' | 'rating'\n\nexport interface ProductTourSurveyQuestion {\n type: ProductTourSurveyQuestionType\n questionText: string\n /** Rating display type - emoji or number */\n display?: 'emoji' | 'number'\n /** Rating scale - 3 or 5 for emoji, 5 or 10 for number */\n scale?: 3 | 5 | 10\n /** Label for low end of rating scale (e.g., \"Not likely\") */\n lowerBoundLabel?: string\n /** Label for high end of rating scale (e.g., \"Very likely\") */\n upperBoundLabel?: string\n}\n\nexport interface ProductTourStep {\n id: string\n type: ProductTourStepType\n selector?: string\n progressionTrigger: 'button' | 'click'\n content: JSONContent | null\n /** Inline survey question config - if present, this is a survey step */\n survey?: ProductTourSurveyQuestion\n /** ID of the auto-created survey for this step (set by backend) */\n linkedSurveyId?: string\n /** ID of the survey question (set by backend, used for event tracking) */\n linkedSurveyQuestionId?: string\n}\n\nexport interface ProductTourConditions {\n url?: string\n urlMatchType?: PropertyMatchType\n selector?: string\n autoShowDelaySeconds?: number\n events?: {\n values: SurveyEventWithFilters[]\n } | null\n cancelEvents?: {\n values: SurveyEventWithFilters[]\n } | null\n actions?: {\n values: SurveyActionType[]\n } | null\n}\n\nexport interface ProductTourAppearance {\n backgroundColor?: string\n textColor?: string\n buttonColor?: string\n borderRadius?: number\n buttonBorderRadius?: number\n borderColor?: string\n fontFamily?: string\n boxShadow?: string\n showOverlay?: boolean\n whiteLabel?: boolean\n}\n\nexport interface ProductTour {\n id: string\n name: string\n description?: string\n type: 'product_tour'\n auto_launch?: boolean\n start_date: string | null\n end_date: string | null\n current_iteration?: number\n conditions?: ProductTourConditions\n appearance?: ProductTourAppearance\n steps: ProductTourStep[]\n internal_targeting_flag_key?: string\n linked_flag_key?: string\n}\n\nexport type ProductTourCallback = (tours: ProductTour[], context?: { isLoaded: boolean; error?: string }) => void\n\nexport type ProductTourSelectorError = 'not_found' | 'multiple_matches' | 'not_visible'\n\nexport type ProductTourDismissReason =\n | 'user_clicked_skip'\n | 'user_clicked_outside'\n | 'escape_key'\n | 'element_unavailable'\n\nexport type ProductTourRenderReason = 'auto' | 'api' | 'trigger' | 'event'\n\nexport const DEFAULT_PRODUCT_TOUR_APPEARANCE: Required<ProductTourAppearance> = {\n backgroundColor: '#ffffff',\n textColor: '#1d1f27',\n buttonColor: '#1d1f27',\n borderRadius: 8,\n buttonBorderRadius: 6,\n borderColor: '#e5e7eb',\n fontFamily: 'system-ui',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n showOverlay: true,\n whiteLabel: false,\n}\n\nexport interface ShowTourOptions {\n reason?: ProductTourRenderReason\n enableStrictValidation?: boolean\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/autocapture-utils.ts","../src/autocapture.ts","../src/config.ts","../src/consent.ts","../src/constants.ts","../src/declaration.d.ts","../src/heatmaps.ts","../src/page-view.ts","../src/posthog-conversations-types.ts","../src/posthog-core.ts","../src/posthog-exceptions.ts","../src/posthog-featureflags.ts","../src/posthog-persistence.ts","../src/posthog-product-tours-types.ts","../src/posthog-product-tours.ts","../src/posthog-surveys-types.ts","../src/posthog-surveys.ts","../src/rate-limiter.ts","../src/remote-config.ts","../src/request-queue.ts","../src/request.ts","../src/retry-queue.ts","../src/scroll-manager.ts","../src/session-props.ts","../src/sessionid.ts","../src/site-apps.ts","../src/storage.ts","../src/types.ts","../src/uuidv7.ts","../src/web-experiments-types.ts","../src/web-experiments.ts","../src/web-types.d.ts","../src/customizations/before-send.ts","../src/customizations/index.ts","../src/customizations/posthogReduxLogger.ts","../src/customizations/setAllPersonProfilePropertiesAsPersonPropertiesForFlags.ts","../src/entrypoints/all-external-dependencies.ts","../src/entrypoints/array.full.es5.ts","../src/entrypoints/array.full.no-external.ts","../src/entrypoints/array.full.ts","../src/entrypoints/array.no-external.ts","../src/entrypoints/array.ts","../src/entrypoints/conversations.ts","../src/entrypoints/crisp-chat-integration.ts","../src/entrypoints/customizations.full.ts","../src/entrypoints/dead-clicks-autocapture.ts","../src/entrypoints/exception-autocapture.ts","../src/entrypoints/external-scripts-loader.ts","../src/entrypoints/intercom-integration.ts","../src/entrypoints/lazy-recorder.ts","../src/entrypoints/main.cjs.ts","../src/entrypoints/module.es.ts","../src/entrypoints/module.full.es.ts","../src/entrypoints/module.full.no-external.es.ts","../src/entrypoints/module.no-external.es.ts","../src/entrypoints/posthog-recorder.ts","../src/entrypoints/product-tours.ts","../src/entrypoints/recorder-v2.ts","../src/entrypoints/recorder.ts","../src/entrypoints/surveys-preview.es.ts","../src/entrypoints/surveys.ts","../src/entrypoints/tracing-headers.ts","../src/entrypoints/web-vitals.ts","../src/extensions/dead-clicks-autocapture.ts","../src/extensions/external-integration.ts","../src/extensions/history-autocapture.ts","../src/extensions/rageclick.ts","../src/extensions/sampling.ts","../src/extensions/segment-integration.ts","../src/extensions/sentry-integration.ts","../src/extensions/surveys.tsx","../src/extensions/toolbar.ts","../src/extensions/tracing-headers.ts","../src/extensions/conversations/posthog-conversations.ts","../src/extensions/conversations/external/index.tsx","../src/extensions/conversations/external/persistence.ts","../src/extensions/conversations/external/components/CloseChatButton.tsx","../src/extensions/conversations/external/components/ConversationsWidget.tsx","../src/extensions/conversations/external/components/OpenChatButton.tsx","../src/extensions/conversations/external/components/SendMessageButton.tsx","../src/extensions/conversations/external/components/styles.ts","../src/extensions/exception-autocapture/index.ts","../src/extensions/product-tours/constants.ts","../src/extensions/product-tours/index.ts","../src/extensions/product-tours/product-tours-utils.ts","../src/extensions/product-tours/product-tours.tsx","../src/extensions/product-tours/components/ProductTourSurveyStep.tsx","../src/extensions/product-tours/components/ProductTourTooltip.tsx","../src/extensions/replay/session-recording.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/denylist.ts","../src/extensions/replay/external/flushed-size-tracker.ts","../src/extensions/replay/external/lazy-loaded-session-recorder.ts","../src/extensions/replay/external/mutation-throttler.ts","../src/extensions/replay/external/network-plugin.ts","../src/extensions/replay/external/sessionrecording-utils.ts","../src/extensions/replay/external/triggerMatching.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/types/rrweb-types.ts","../src/extensions/replay/types/rrweb.ts","../src/extensions/surveys/action-matcher.ts","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/components/BottomSection.tsx","../src/extensions/surveys/components/ConfirmationMessage.tsx","../src/extensions/surveys/components/PostHogLogo.tsx","../src/extensions/surveys/components/QuestionHeader.tsx","../src/extensions/surveys/components/QuestionTypes.tsx","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/web-vitals/index.ts","../src/utils/blocked-uas.ts","../src/utils/element-utils.ts","../src/utils/elements-chain-utils.ts","../src/utils/encode-utils.ts","../src/utils/event-receiver.ts","../src/utils/event-utils.ts","../src/utils/globals.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/product-tour-event-receiver.ts","../src/utils/product-tour-utils.ts","../src/utils/property-utils.ts","../src/utils/prototype-utils.ts","../src/utils/regex-utils.ts","../src/utils/request-router.ts","../src/utils/request-utils.ts","../src/utils/simple-event-emitter.ts","../src/utils/survey-event-receiver.ts","../src/utils/survey-url-prefill.ts","../src/utils/survey-utils.ts","../src/utils/type-utils.ts"],"version":"5.8.2"}
1
+ {"root":["../src/autocapture-utils.ts","../src/autocapture.ts","../src/config.ts","../src/consent.ts","../src/constants.ts","../src/declaration.d.ts","../src/heatmaps.ts","../src/page-view.ts","../src/posthog-conversations-types.ts","../src/posthog-core.ts","../src/posthog-exceptions.ts","../src/posthog-featureflags.ts","../src/posthog-persistence.ts","../src/posthog-product-tours-types.ts","../src/posthog-product-tours.ts","../src/posthog-surveys-types.ts","../src/posthog-surveys.ts","../src/rate-limiter.ts","../src/remote-config.ts","../src/request-queue.ts","../src/request.ts","../src/retry-queue.ts","../src/scroll-manager.ts","../src/session-props.ts","../src/sessionid.ts","../src/site-apps.ts","../src/storage.ts","../src/types.ts","../src/uuidv7.ts","../src/web-experiments-types.ts","../src/web-experiments.ts","../src/web-types.d.ts","../src/customizations/before-send.ts","../src/customizations/index.ts","../src/customizations/posthogReduxLogger.ts","../src/customizations/setAllPersonProfilePropertiesAsPersonPropertiesForFlags.ts","../src/entrypoints/all-external-dependencies.ts","../src/entrypoints/array.full.es5.ts","../src/entrypoints/array.full.no-external.ts","../src/entrypoints/array.full.ts","../src/entrypoints/array.no-external.ts","../src/entrypoints/array.ts","../src/entrypoints/conversations.ts","../src/entrypoints/crisp-chat-integration.ts","../src/entrypoints/customizations.full.ts","../src/entrypoints/dead-clicks-autocapture.ts","../src/entrypoints/exception-autocapture.ts","../src/entrypoints/external-scripts-loader.ts","../src/entrypoints/intercom-integration.ts","../src/entrypoints/lazy-recorder.ts","../src/entrypoints/main.cjs.ts","../src/entrypoints/module.es.ts","../src/entrypoints/module.full.es.ts","../src/entrypoints/module.full.no-external.es.ts","../src/entrypoints/module.no-external.es.ts","../src/entrypoints/posthog-recorder.ts","../src/entrypoints/product-tours-preview.es.ts","../src/entrypoints/product-tours.ts","../src/entrypoints/recorder-v2.ts","../src/entrypoints/recorder.ts","../src/entrypoints/surveys-preview.es.ts","../src/entrypoints/surveys.ts","../src/entrypoints/tracing-headers.ts","../src/entrypoints/web-vitals.ts","../src/extensions/dead-clicks-autocapture.ts","../src/extensions/external-integration.ts","../src/extensions/history-autocapture.ts","../src/extensions/rageclick.ts","../src/extensions/sampling.ts","../src/extensions/segment-integration.ts","../src/extensions/sentry-integration.ts","../src/extensions/surveys.tsx","../src/extensions/toolbar.ts","../src/extensions/tracing-headers.ts","../src/extensions/conversations/posthog-conversations.ts","../src/extensions/conversations/external/index.tsx","../src/extensions/conversations/external/persistence.ts","../src/extensions/conversations/external/components/CloseChatButton.tsx","../src/extensions/conversations/external/components/ConversationsWidget.tsx","../src/extensions/conversations/external/components/OpenChatButton.tsx","../src/extensions/conversations/external/components/SendMessageButton.tsx","../src/extensions/conversations/external/components/styles.ts","../src/extensions/exception-autocapture/index.ts","../src/extensions/product-tours/constants.ts","../src/extensions/product-tours/index.ts","../src/extensions/product-tours/preview.tsx","../src/extensions/product-tours/product-tours-utils.ts","../src/extensions/product-tours/product-tours.tsx","../src/extensions/product-tours/components/ProductTourSurveyStepInner.tsx","../src/extensions/product-tours/components/ProductTourTooltip.tsx","../src/extensions/product-tours/components/ProductTourTooltipInner.tsx","../src/extensions/replay/session-recording.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/denylist.ts","../src/extensions/replay/external/flushed-size-tracker.ts","../src/extensions/replay/external/lazy-loaded-session-recorder.ts","../src/extensions/replay/external/mutation-throttler.ts","../src/extensions/replay/external/network-plugin.ts","../src/extensions/replay/external/sessionrecording-utils.ts","../src/extensions/replay/external/triggerMatching.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/types/rrweb-types.ts","../src/extensions/replay/types/rrweb.ts","../src/extensions/surveys/action-matcher.ts","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/components/BottomSection.tsx","../src/extensions/surveys/components/ConfirmationMessage.tsx","../src/extensions/surveys/components/PostHogLogo.tsx","../src/extensions/surveys/components/QuestionHeader.tsx","../src/extensions/surveys/components/QuestionTypes.tsx","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/web-vitals/index.ts","../src/utils/blocked-uas.ts","../src/utils/element-utils.ts","../src/utils/elements-chain-utils.ts","../src/utils/encode-utils.ts","../src/utils/event-receiver.ts","../src/utils/event-utils.ts","../src/utils/globals.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/product-tour-event-receiver.ts","../src/utils/product-tour-utils.ts","../src/utils/property-utils.ts","../src/utils/prototype-utils.ts","../src/utils/regex-utils.ts","../src/utils/request-router.ts","../src/utils/request-utils.ts","../src/utils/simple-event-emitter.ts","../src/utils/survey-event-receiver.ts","../src/utils/survey-url-prefill.ts","../src/utils/survey-utils.ts","../src/utils/type-utils.ts"],"version":"5.8.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.310.0",
3
+ "version": "1.310.1",
4
4
  "description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
5
5
  "repository": "https://github.com/PostHog/posthog-js",
6
6
  "author": "hey@posthog.com",
@@ -1,12 +0,0 @@
1
- import { h } from 'preact';
2
- import { ProductTour, ProductTourStep, ProductTourDismissReason } from '../../../posthog-product-tours-types';
3
- export interface ProductTourSurveyStepProps {
4
- tour: ProductTour;
5
- step: ProductTourStep;
6
- stepIndex: number;
7
- totalSteps: number;
8
- onSubmit: (response: string | number | null) => void;
9
- onPrevious: () => void;
10
- onDismiss: (reason: ProductTourDismissReason) => void;
11
- }
12
- export declare function ProductTourSurveyStep({ tour, step, stepIndex, totalSteps, onSubmit, onPrevious, onDismiss, }: ProductTourSurveyStepProps): h.JSX.Element;
@@ -1,12 +0,0 @@
1
- import { h } from 'preact';
2
- import { ProductTour, ProductTourStep, ProductTourDismissReason } from '../../../posthog-product-tours-types';
3
- export interface ProductTourSurveyStepProps {
4
- tour: ProductTour;
5
- step: ProductTourStep;
6
- stepIndex: number;
7
- totalSteps: number;
8
- onSubmit: (response: string | number | null) => void;
9
- onPrevious: () => void;
10
- onDismiss: (reason: ProductTourDismissReason) => void;
11
- }
12
- export declare function ProductTourSurveyStep({ tour, step, stepIndex, totalSteps, onSubmit, onPrevious, onDismiss, }: ProductTourSurveyStepProps): h.JSX.Element;
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductTourSurveyStep.js","sourceRoot":"","sources":["../../../../../src/extensions/product-tours/components/ProductTourSurveyStep.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from 'preact'\nimport { useState, useRef, useEffect } from 'preact/hooks'\nimport {\n ProductTour,\n ProductTourStep,\n ProductTourDismissReason,\n ProductTourSurveyQuestion,\n} from '../../../posthog-product-tours-types'\nimport { mergeAppearance } from '../product-tours-utils'\nimport { cancelSVG, IconPosthogLogo } from '../../surveys/icons'\nimport {\n dissatisfiedEmoji,\n neutralEmoji,\n satisfiedEmoji,\n veryDissatisfiedEmoji,\n verySatisfiedEmoji,\n} from '../../surveys/icons'\n\nexport interface ProductTourSurveyStepProps {\n tour: ProductTour\n step: ProductTourStep\n stepIndex: number\n totalSteps: number\n onSubmit: (response: string | number | null) => void\n onPrevious: () => void\n onDismiss: (reason: ProductTourDismissReason) => void\n}\n\nconst threeScaleEmojis = [dissatisfiedEmoji, neutralEmoji, satisfiedEmoji]\nconst fiveScaleEmojis = [veryDissatisfiedEmoji, dissatisfiedEmoji, neutralEmoji, satisfiedEmoji, verySatisfiedEmoji]\n\nfunction getScaleNumbers(scale: number): number[] {\n switch (scale) {\n case 5:\n return [1, 2, 3, 4, 5]\n case 10:\n return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n default:\n return [1, 2, 3, 4, 5]\n }\n}\n\nfunction OpenTextInput({\n value,\n onChange,\n onSubmit,\n}: {\n value: string\n onChange: (text: string) => void\n onSubmit: () => void\n}): h.JSX.Element {\n const inputRef = useRef<HTMLTextAreaElement>(null)\n\n useEffect(() => {\n setTimeout(() => inputRef.current?.focus(), 100)\n }, [])\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && e.metaKey) {\n e.preventDefault()\n onSubmit()\n }\n }\n\n return (\n <textarea\n ref={inputRef}\n class=\"ph-tour-survey-textarea\"\n rows={3}\n placeholder=\"Your feedback (optional)...\"\n value={value}\n onInput={(e) => onChange((e.target as HTMLTextAreaElement).value)}\n onKeyDown={handleKeyDown}\n />\n )\n}\n\nfunction RatingInput({\n survey,\n onSubmit,\n}: {\n survey: ProductTourSurveyQuestion\n onSubmit: (rating: number) => void\n}): h.JSX.Element {\n const [selectedRating, setSelectedRating] = useState<number | null>(null)\n const display = survey.display || 'emoji'\n const scale = survey.scale || 5\n\n const handleSelect = (rating: number) => {\n setSelectedRating(rating)\n // Auto-submit on selection for ratings\n onSubmit(rating)\n }\n\n if (display === 'emoji') {\n const emojis = scale === 3 ? threeScaleEmojis : fiveScaleEmojis\n return (\n <div class=\"ph-tour-survey-rating-container\">\n <div class=\"ph-tour-survey-rating-emoji\">\n {emojis.map((emoji, idx) => {\n const rating = idx + 1\n const isActive = selectedRating === rating\n return (\n <button\n key={idx}\n type=\"button\"\n class={`ph-tour-survey-emoji-button ${isActive ? 'ph-tour-survey-emoji-button--active' : ''}`}\n onClick={() => handleSelect(rating)}\n aria-label={`Rate ${rating}`}\n >\n {emoji}\n </button>\n )\n })}\n </div>\n {(survey.lowerBoundLabel || survey.upperBoundLabel) && (\n <div class=\"ph-tour-survey-rating-labels\">\n <span>{survey.lowerBoundLabel}</span>\n <span>{survey.upperBoundLabel}</span>\n </div>\n )}\n </div>\n )\n }\n\n // Number display\n const numbers = getScaleNumbers(scale)\n return (\n <div class=\"ph-tour-survey-rating-container\">\n <div\n class=\"ph-tour-survey-rating-numbers\"\n style={{ gridTemplateColumns: `repeat(${numbers.length}, minmax(0, 1fr))` }}\n >\n {numbers.map((num) => {\n const isActive = selectedRating === num\n return (\n <button\n key={num}\n type=\"button\"\n class={`ph-tour-survey-number-button ${isActive ? 'ph-tour-survey-number-button--active' : ''}`}\n onClick={() => handleSelect(num)}\n aria-label={`Rate ${num}`}\n >\n {num}\n </button>\n )\n })}\n </div>\n {(survey.lowerBoundLabel || survey.upperBoundLabel) && (\n <div class=\"ph-tour-survey-rating-labels\">\n <span>{survey.lowerBoundLabel}</span>\n <span>{survey.upperBoundLabel}</span>\n </div>\n )}\n </div>\n )\n}\n\nexport function ProductTourSurveyStep({\n tour,\n step,\n stepIndex,\n totalSteps,\n onSubmit,\n onPrevious,\n onDismiss,\n}: ProductTourSurveyStepProps): h.JSX.Element {\n const [textValue, setTextValue] = useState('')\n const appearance = mergeAppearance(tour.appearance)\n const survey = step.survey\n const isFirstStep = stepIndex === 0\n const isOpenText = survey?.type === 'open'\n\n const handleTextSubmit = () => {\n onSubmit(textValue.trim() || null)\n }\n\n if (!survey) {\n return <div />\n }\n\n const handleOverlayClick = (e: MouseEvent) => {\n e.stopPropagation()\n onDismiss('user_clicked_outside')\n }\n\n const handleCardClick = (e: MouseEvent) => {\n e.stopPropagation()\n }\n\n const containerStyle = {\n '--ph-tour-background-color': appearance.backgroundColor,\n '--ph-tour-text-color': appearance.textColor,\n '--ph-tour-button-color': appearance.buttonColor,\n '--ph-tour-button-text-color': appearance.buttonTextColor,\n '--ph-tour-border-radius': `${appearance.borderRadius}px`,\n '--ph-tour-border-color': appearance.borderColor,\n } as h.JSX.CSSProperties\n\n return (\n <div class=\"ph-tour-container\" style={containerStyle}>\n <div class=\"ph-tour-click-overlay\" onClick={handleOverlayClick} />\n <div class=\"ph-tour-modal-overlay\" />\n\n <div class=\"ph-tour-tooltip ph-tour-tooltip--modal ph-tour-survey-step\" onClick={handleCardClick}>\n <button\n class=\"ph-tour-dismiss\"\n onClick={() => onDismiss('user_clicked_skip')}\n aria-label=\"Close survey\"\n >\n {cancelSVG}\n </button>\n\n <div class=\"ph-tour-survey-question\">{survey.questionText}</div>\n\n {isOpenText ? (\n <OpenTextInput value={textValue} onChange={setTextValue} onSubmit={handleTextSubmit} />\n ) : (\n <RatingInput survey={survey} onSubmit={onSubmit} />\n )}\n\n <div class=\"ph-tour-footer\">\n <span class=\"ph-tour-progress\">\n {stepIndex + 1} of {totalSteps}\n </span>\n\n <div class=\"ph-tour-buttons\">\n {!isFirstStep && (\n <button class=\"ph-tour-button ph-tour-button--secondary\" onClick={onPrevious}>\n Back\n </button>\n )}\n {isOpenText && (\n <button class=\"ph-tour-button ph-tour-button--primary\" onClick={handleTextSubmit}>\n Submit\n </button>\n )}\n </div>\n </div>\n\n {!appearance.whiteLabel && (\n <a\n href=\"https://posthog.com/product-tours\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"ph-tour-branding\"\n >\n Survey by {IconPosthogLogo}\n </a>\n )}\n </div>\n </div>\n )\n}\n"]}