posthog-js 1.158.0 → 1.158.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/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/exception-autocapture.js.map +1 -1
  6. package/dist/lib/src/entrypoints/web-vitals.d.ts +4 -4
  7. package/dist/lib/src/extensions/replay/config.d.ts +1 -1
  8. package/dist/lib/src/extensions/replay/sessionrecording.d.ts +4 -0
  9. package/dist/lib/src/extensions/surveys.d.ts +2 -2
  10. package/dist/lib/src/utils/globals.d.ts +6 -6
  11. package/dist/lib/src/utils/logger.d.ts +1 -1
  12. package/dist/main.js +1 -1
  13. package/dist/main.js.map +1 -1
  14. package/dist/module.d.ts +4 -0
  15. package/dist/module.js +1 -1
  16. package/dist/module.js.map +1 -1
  17. package/dist/recorder-v2.js.map +1 -1
  18. package/dist/recorder.js.map +1 -1
  19. package/lib/package.json +14 -9
  20. package/lib/src/autocapture-utils.js.map +1 -1
  21. package/lib/src/autocapture.js.map +1 -1
  22. package/lib/src/consent.js +1 -1
  23. package/lib/src/consent.js.map +1 -1
  24. package/lib/src/decide.js.map +1 -1
  25. package/lib/src/entrypoints/exception-autocapture.js.map +1 -1
  26. package/lib/src/entrypoints/recorder.js +12 -12
  27. package/lib/src/entrypoints/recorder.js.map +1 -1
  28. package/lib/src/entrypoints/surveys.js.map +1 -1
  29. package/lib/src/entrypoints/tracing-headers.js.map +1 -1
  30. package/lib/src/entrypoints/web-vitals.d.ts +4 -4
  31. package/lib/src/extensions/exception-autocapture/error-conversion.js +2 -2
  32. package/lib/src/extensions/exception-autocapture/error-conversion.js.map +1 -1
  33. package/lib/src/extensions/exception-autocapture/index.js.map +1 -1
  34. package/lib/src/extensions/exception-autocapture/stack-trace.js.map +1 -1
  35. package/lib/src/extensions/exception-autocapture/type-checking.js +1 -1
  36. package/lib/src/extensions/exception-autocapture/type-checking.js.map +1 -1
  37. package/lib/src/extensions/rageclick.js.map +1 -1
  38. package/lib/src/extensions/replay/config.d.ts +1 -1
  39. package/lib/src/extensions/replay/config.js.map +1 -1
  40. package/lib/src/extensions/replay/external/denylist.js.map +1 -1
  41. package/lib/src/extensions/replay/mutation-rate-limiter.js.map +1 -1
  42. package/lib/src/extensions/replay/rrweb-plugins/patch.js.map +1 -1
  43. package/lib/src/extensions/replay/sessionrecording-utils.js.map +1 -1
  44. package/lib/src/extensions/replay/sessionrecording.d.ts +4 -0
  45. package/lib/src/extensions/replay/sessionrecording.js +22 -13
  46. package/lib/src/extensions/replay/sessionrecording.js.map +1 -1
  47. package/lib/src/extensions/segment-integration.js.map +1 -1
  48. package/lib/src/extensions/sentry-integration.js.map +1 -1
  49. package/lib/src/extensions/surveys/action-matcher.js.map +1 -1
  50. package/lib/src/extensions/surveys/components/BottomSection.jsx.map +1 -1
  51. package/lib/src/extensions/surveys/components/ConfirmationMessage.jsx.map +1 -1
  52. package/lib/src/extensions/surveys/components/QuestionTypes.jsx.map +1 -1
  53. package/lib/src/extensions/surveys/hooks/useContrastingTextColor.js.map +1 -1
  54. package/lib/src/extensions/surveys/surveys-utils.jsx.map +1 -1
  55. package/lib/src/extensions/surveys.d.ts +2 -2
  56. package/lib/src/extensions/surveys.jsx.map +1 -1
  57. package/lib/src/extensions/toolbar.js +2 -2
  58. package/lib/src/extensions/toolbar.js.map +1 -1
  59. package/lib/src/extensions/tracing-headers.js.map +1 -1
  60. package/lib/src/extensions/web-vitals/index.js.map +1 -1
  61. package/lib/src/heatmaps.js.map +1 -1
  62. package/lib/src/page-view.js.map +1 -1
  63. package/lib/src/posthog-core.js +5 -5
  64. package/lib/src/posthog-core.js.map +1 -1
  65. package/lib/src/posthog-featureflags.js.map +1 -1
  66. package/lib/src/posthog-persistence.js.map +1 -1
  67. package/lib/src/posthog-surveys.js.map +1 -1
  68. package/lib/src/rate-limiter.js.map +1 -1
  69. package/lib/src/request-queue.js.map +1 -1
  70. package/lib/src/request.js +2 -2
  71. package/lib/src/request.js.map +1 -1
  72. package/lib/src/retry-queue.js.map +1 -1
  73. package/lib/src/scroll-manager.js.map +1 -1
  74. package/lib/src/session-props.js.map +1 -1
  75. package/lib/src/sessionid.js.map +1 -1
  76. package/lib/src/storage.js +10 -10
  77. package/lib/src/storage.js.map +1 -1
  78. package/lib/src/types.js.map +1 -1
  79. package/lib/src/utils/blocked-uas.js.map +1 -1
  80. package/lib/src/utils/event-utils.js +13 -13
  81. package/lib/src/utils/event-utils.js.map +1 -1
  82. package/lib/src/utils/globals.d.ts +6 -6
  83. package/lib/src/utils/index.js +3 -3
  84. package/lib/src/utils/index.js.map +1 -1
  85. package/lib/src/utils/logger.d.ts +1 -1
  86. package/lib/src/utils/logger.js.map +1 -1
  87. package/lib/src/utils/request-router.js +11 -2
  88. package/lib/src/utils/request-router.js.map +1 -1
  89. package/lib/src/utils/request-utils.js +1 -1
  90. package/lib/src/utils/request-utils.js.map +1 -1
  91. package/lib/src/utils/simple-event-emitter.js.map +1 -1
  92. package/lib/src/utils/survey-event-receiver.js.map +1 -1
  93. package/lib/src/utils/type-utils.js.map +1 -1
  94. package/lib/src/utils/user-agent-utils.js.map +1 -1
  95. package/lib/src/uuidv7.js.map +1 -1
  96. package/package.json +14 -9
@@ -1 +1 @@
1
- {"version":3,"file":"segment-integration.js","sourceRoot":"","sources":["../../../src/extensions/segment-integration.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extend Segment with extra PostHog JS functionality. Required for things like Recordings and feature flags to work correctly.\n *\n * ### Usage\n *\n * ```js\n * // After your standard segment anyalytics install\n * analytics.load(\"GOEDfA21zZTtR7clsBuDvmBKAtAdZ6Np\");\n *\n * analytics.ready(() => {\n * posthog.init('<posthog-api-key>', {\n * capture_pageview: false,\n * segment: window.analytics, // NOTE: Be sure to use window.analytics here!\n * });\n * window.analytics.page();\n * })\n * ```\n */\nimport { PostHog } from '../posthog-core'\nimport { logger } from '../utils/logger'\n\nimport { uuidv7 } from '../uuidv7'\nimport { isFunction } from '../utils/type-utils'\nimport { USER_STATE } from '../constants'\n\nexport type SegmentUser = {\n anonymousId(): string | undefined\n id(): string | undefined\n}\n\nexport type SegmentAnalytics = {\n user: () => SegmentUser | Promise<SegmentUser>\n register: (integration: SegmentPlugin) => Promise<void>\n}\n\n// Loosely based on https://github.com/segmentio/analytics-next/blob/master/packages/core/src/plugins/index.ts\nexport interface SegmentContext {\n event: {\n event: string\n userId?: string\n anonymousId?: string\n properties: any\n }\n}\n\ntype SegmentFunction = (ctx: SegmentContext) => Promise<SegmentContext> | SegmentContext\n\nexport interface SegmentPlugin {\n name: string\n version: string\n type: 'enrichment'\n isLoaded: () => boolean\n load: (ctx: SegmentContext, instance: any, config?: any) => Promise<unknown>\n unload?: (ctx: SegmentContext, instance: any) => Promise<unknown> | unknown\n ready?: () => Promise<unknown>\n track?: SegmentFunction\n identify?: SegmentFunction\n page?: SegmentFunction\n group?: SegmentFunction\n alias?: SegmentFunction\n screen?: SegmentFunction\n}\n\nconst createSegmentIntegration = (posthog: PostHog): SegmentPlugin => {\n if (!Promise || !Promise.resolve) {\n logger.warn('This browser does not have Promise support, and can not use the segment integration')\n }\n\n const enrichEvent = (ctx: SegmentContext, eventName: string | undefined) => {\n if (!eventName) {\n return ctx\n }\n if (!ctx.event.userId && ctx.event.anonymousId !== posthog.get_distinct_id()) {\n // This is our only way of detecting that segment's analytics.reset() has been called so we also call it\n logger.info('Segment integration does not have a userId set, resetting PostHog')\n posthog.reset()\n }\n if (ctx.event.userId && ctx.event.userId !== posthog.get_distinct_id()) {\n logger.info('Segment integration has a userId set, identifying with PostHog')\n posthog.identify(ctx.event.userId)\n }\n\n const additionalProperties = posthog._calculate_event_properties(\n eventName,\n ctx.event.properties ?? {},\n new Date()\n )\n ctx.event.properties = Object.assign({}, additionalProperties, ctx.event.properties)\n return ctx\n }\n\n return {\n name: 'PostHog JS',\n type: 'enrichment',\n version: '1.0.0',\n isLoaded: () => true,\n // check and early return above\n // eslint-disable-next-line compat/compat\n load: () => Promise.resolve(),\n track: (ctx) => enrichEvent(ctx, ctx.event.event),\n page: (ctx) => enrichEvent(ctx, '$pageview'),\n identify: (ctx) => enrichEvent(ctx, '$identify'),\n screen: (ctx) => enrichEvent(ctx, '$screen'),\n }\n}\n\nfunction setupPostHogFromSegment(posthog: PostHog, done: () => void) {\n const segment = posthog.config.segment\n if (!segment) {\n return done()\n }\n\n const bootstrapUser = (user: SegmentUser) => {\n // Use segments anonymousId instead\n const getSegmentAnonymousId = () => user.anonymousId() || uuidv7()\n posthog.config.get_device_id = getSegmentAnonymousId\n\n // If a segment user ID exists, set it as the distinct_id\n if (user.id()) {\n posthog.register({\n distinct_id: user.id(),\n $device_id: getSegmentAnonymousId(),\n })\n posthog.persistence!.set_property(USER_STATE, 'identified')\n }\n\n done()\n }\n\n const segmentUser = segment.user()\n\n // If segmentUser is a promise then we need to wait for it to resolve\n if ('then' in segmentUser && isFunction(segmentUser.then)) {\n segmentUser.then((user) => bootstrapUser(user))\n } else {\n bootstrapUser(segmentUser as SegmentUser)\n }\n}\n\nexport function setupSegmentIntegration(posthog: PostHog, done: () => void) {\n const segment = posthog.config.segment\n if (!segment) {\n return done()\n }\n\n setupPostHogFromSegment(posthog, () => {\n segment.register(createSegmentIntegration(posthog)).then(() => {\n done()\n })\n })\n}\n"]}
1
+ {"version":3,"file":"segment-integration.js","sourceRoot":"","sources":["../../../src/extensions/segment-integration.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extend Segment with extra PostHog JS functionality. Required for things like Recordings and feature flags to work correctly.\n *\n * ### Usage\n *\n * ```js\n * // After your standard segment anyalytics install\n * analytics.load(\"GOEDfA21zZTtR7clsBuDvmBKAtAdZ6Np\");\n *\n * analytics.ready(() => {\n * posthog.init('<posthog-api-key>', {\n * capture_pageview: false,\n * segment: window.analytics, // NOTE: Be sure to use window.analytics here!\n * });\n * window.analytics.page();\n * })\n * ```\n */\nimport { PostHog } from '../posthog-core'\nimport { logger } from '../utils/logger'\n\nimport { uuidv7 } from '../uuidv7'\nimport { isFunction } from '../utils/type-utils'\nimport { USER_STATE } from '../constants'\n\nexport type SegmentUser = {\n anonymousId(): string | undefined\n id(): string | undefined\n}\n\nexport type SegmentAnalytics = {\n user: () => SegmentUser | Promise<SegmentUser>\n register: (integration: SegmentPlugin) => Promise<void>\n}\n\n// Loosely based on https://github.com/segmentio/analytics-next/blob/master/packages/core/src/plugins/index.ts\nexport interface SegmentContext {\n event: {\n event: string\n userId?: string\n anonymousId?: string\n properties: any\n }\n}\n\ntype SegmentFunction = (ctx: SegmentContext) => Promise<SegmentContext> | SegmentContext\n\nexport interface SegmentPlugin {\n name: string\n version: string\n type: 'enrichment'\n isLoaded: () => boolean\n load: (ctx: SegmentContext, instance: any, config?: any) => Promise<unknown>\n unload?: (ctx: SegmentContext, instance: any) => Promise<unknown> | unknown\n ready?: () => Promise<unknown>\n track?: SegmentFunction\n identify?: SegmentFunction\n page?: SegmentFunction\n group?: SegmentFunction\n alias?: SegmentFunction\n screen?: SegmentFunction\n}\n\nconst createSegmentIntegration = (posthog: PostHog): SegmentPlugin => {\n if (!Promise || !Promise.resolve) {\n logger.warn('This browser does not have Promise support, and can not use the segment integration')\n }\n\n const enrichEvent = (ctx: SegmentContext, eventName: string | undefined) => {\n if (!eventName) {\n return ctx\n }\n if (!ctx.event.userId && ctx.event.anonymousId !== posthog.get_distinct_id()) {\n // This is our only way of detecting that segment's analytics.reset() has been called so we also call it\n logger.info('Segment integration does not have a userId set, resetting PostHog')\n posthog.reset()\n }\n if (ctx.event.userId && ctx.event.userId !== posthog.get_distinct_id()) {\n logger.info('Segment integration has a userId set, identifying with PostHog')\n posthog.identify(ctx.event.userId)\n }\n\n const additionalProperties = posthog._calculate_event_properties(\n eventName,\n ctx.event.properties ?? {},\n new Date()\n )\n ctx.event.properties = Object.assign({}, additionalProperties, ctx.event.properties)\n return ctx\n }\n\n return {\n name: 'PostHog JS',\n type: 'enrichment',\n version: '1.0.0',\n isLoaded: () => true,\n // check and early return above\n // eslint-disable-next-line compat/compat\n load: () => Promise.resolve(),\n track: (ctx) => enrichEvent(ctx, ctx.event.event),\n page: (ctx) => enrichEvent(ctx, '$pageview'),\n identify: (ctx) => enrichEvent(ctx, '$identify'),\n screen: (ctx) => enrichEvent(ctx, '$screen'),\n }\n}\n\nfunction setupPostHogFromSegment(posthog: PostHog, done: () => void) {\n const segment = posthog.config.segment\n if (!segment) {\n return done()\n }\n\n const bootstrapUser = (user: SegmentUser) => {\n // Use segments anonymousId instead\n const getSegmentAnonymousId = () => user.anonymousId() || uuidv7()\n posthog.config.get_device_id = getSegmentAnonymousId\n\n // If a segment user ID exists, set it as the distinct_id\n if (user.id()) {\n posthog.register({\n distinct_id: user.id(),\n $device_id: getSegmentAnonymousId(),\n })\n posthog.persistence!.set_property(USER_STATE, 'identified')\n }\n\n done()\n }\n\n const segmentUser = segment.user()\n\n // If segmentUser is a promise then we need to wait for it to resolve\n if ('then' in segmentUser && isFunction(segmentUser.then)) {\n segmentUser.then((user) => bootstrapUser(user))\n } else {\n bootstrapUser(segmentUser as SegmentUser)\n }\n}\n\nexport function setupSegmentIntegration(posthog: PostHog, done: () => void) {\n const segment = posthog.config.segment\n if (!segment) {\n return done()\n }\n\n setupPostHogFromSegment(posthog, () => {\n segment.register(createSegmentIntegration(posthog)).then(() => {\n done()\n })\n })\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sentry-integration.js","sourceRoot":"","sources":["../../../src/extensions/sentry-integration.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integrate Sentry with PostHog. This will add a direct link to the person in Sentry, and an $exception event in PostHog\n *\n * ### Usage\n *\n * Sentry.init({\n * dsn: 'https://example',\n * integrations: [\n * new posthog.SentryIntegration(posthog)\n * ]\n * })\n *\n * @param {Object} [posthog] The posthog object\n * @param {string} [organization] Optional: The Sentry organization, used to send a direct link from PostHog to Sentry\n * @param {Number} [projectId] Optional: The Sentry project id, used to send a direct link from PostHog to Sentry\n * @param {string} [prefix] Optional: Url of a self-hosted sentry instance (default: https://sentry.io/organizations/)\n */\n\nimport { PostHog } from '../posthog-core'\nimport { SeverityLevel } from '../types'\nimport { BASE_ERROR_ENDPOINT } from './exception-autocapture'\n\n// NOTE - we can't import from @sentry/types because it changes frequently and causes clashes\n// We only use a small subset of the types, so we can just define the integration overall and use any for the rest\n\n// import {\n// Event as _SentryEvent,\n// EventProcessor as _SentryEventProcessor,\n// Hub as _SentryHub,\n// Integration as _SentryIntegration,\n// SeverityLevel as _SeverityLevel,\n// IntegrationClass as _SentryIntegrationClass,\n// } from '@sentry/types'\n\n// Uncomment the above and comment the below to get type checking for development\n\ntype _SentryEvent = any\ntype _SentryEventProcessor = any\ntype _SentryHub = any\n\ninterface _SentryIntegrationClass {\n name: string\n setupOnce(addGlobalEventProcessor: (callback: _SentryEventProcessor) => void, getCurrentHub: () => _SentryHub): void\n}\n\ninterface _SentryIntegration {\n name: string\n processEvent(event: _SentryEvent): _SentryEvent\n}\n\ninterface SentryExceptionProperties {\n $sentry_event_id: any\n $sentry_exception: any\n $sentry_exception_message: any\n $sentry_exception_type: any\n $sentry_tags: any\n $sentry_url?: string\n}\n\nexport type SentryIntegrationOptions = {\n organization?: string\n projectId?: number\n prefix?: string\n /**\n * By default, only errors are sent to PostHog. You can set this to '*' to send all events.\n * Or to an error of SeverityLevel to only send events matching the provided levels.\n * e.g. ['error', 'fatal'] to send only errors and fatals\n * e.g. ['error'] to send only errors -- the default when omitted\n * e.g. '*' to send all events\n */\n severityAllowList?: SeverityLevel[] | '*'\n}\n\nconst NAME = 'posthog-js'\n\nexport function createEventProcessor(\n _posthog: PostHog,\n { organization, projectId, prefix, severityAllowList = ['error'] }: SentryIntegrationOptions = {}\n): (event: _SentryEvent) => _SentryEvent {\n return (event) => {\n const shouldProcessLevel = severityAllowList === '*' || severityAllowList.includes(event.level as SeverityLevel)\n if (!shouldProcessLevel || !_posthog.__loaded) return event\n if (!event.tags) event.tags = {}\n\n const personUrl = _posthog.requestRouter.endpointFor(\n 'ui',\n `/project/${_posthog.config.token}/person/${_posthog.get_distinct_id()}`\n )\n event.tags['PostHog Person URL'] = personUrl\n if (_posthog.sessionRecordingStarted()) {\n event.tags['PostHog Recording URL'] = _posthog.get_session_replay_url({ withTimestamp: true })\n }\n\n const exceptions = event.exception?.values || []\n\n const data: SentryExceptionProperties & {\n // two properties added to match any exception auto-capture\n // added manually to avoid any dependency on the lazily loaded content\n $exception_message: any\n $exception_type: any\n $exception_personURL: string\n $exception_level: SeverityLevel\n $level: SeverityLevel\n } = {\n // PostHog Exception Properties,\n $exception_message: exceptions[0]?.value || event.message,\n $exception_type: exceptions[0]?.type,\n $exception_personURL: personUrl,\n $exception_level: event.level,\n // Sentry Exception Properties\n $sentry_event_id: event.event_id,\n $sentry_exception: event.exception,\n $sentry_exception_message: exceptions[0]?.value || event.message,\n $sentry_exception_type: exceptions[0]?.type,\n $sentry_tags: event.tags,\n $level: event.level,\n }\n\n if (organization && projectId) {\n data['$sentry_url'] =\n (prefix || 'https://sentry.io/organizations/') +\n organization +\n '/issues/?project=' +\n projectId +\n '&query=' +\n event.event_id\n }\n\n // we take the URL from the exception observer\n // so that when we add error specific URL for ingestion\n // these errors are sent there too\n _posthog.capture('$exception', data, { _url: _posthog.exceptionObserver?.endpoint || BASE_ERROR_ENDPOINT })\n\n return event\n }\n}\n\n// V8 integration - function based\nexport function sentryIntegration(_posthog: PostHog, options?: SentryIntegrationOptions): _SentryIntegration {\n const processor = createEventProcessor(_posthog, options)\n return {\n name: NAME,\n processEvent(event) {\n return processor(event)\n },\n }\n}\n// V7 integration - class based\nexport class SentryIntegration implements _SentryIntegrationClass {\n name: string\n\n setupOnce: (\n addGlobalEventProcessor: (callback: _SentryEventProcessor) => void,\n getCurrentHub: () => _SentryHub\n ) => void\n\n constructor(\n _posthog: PostHog,\n organization?: string,\n projectId?: number,\n prefix?: string,\n /**\n * By default, only errors are sent to PostHog. You can set this to '*' to send all events.\n * Or to an error of SeverityLevel to only send events matching the provided levels.\n * e.g. ['error', 'fatal'] to send only errors and fatals\n * e.g. ['error'] to send only errors -- the default when omitted\n * e.g. '*' to send all events\n */\n severityAllowList?: SeverityLevel[] | '*'\n ) {\n // setupOnce gets called by Sentry when it intializes the plugin\n this.name = NAME\n this.setupOnce = function (addGlobalEventProcessor: (callback: _SentryEventProcessor) => void) {\n addGlobalEventProcessor(\n createEventProcessor(_posthog, { organization, projectId, prefix, severityAllowList })\n )\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sentry-integration.js","sourceRoot":"","sources":["../../../src/extensions/sentry-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAqD7D,IAAM,IAAI,GAAG,YAAY,CAAA;AAEzB,MAAM,UAAU,oBAAoB,CAChC,QAAiB,EACjB,EAAiG;QAAjG,qBAA+F,EAAE,KAAA,EAA/F,YAAY,kBAAA,EAAE,SAAS,eAAA,EAAE,MAAM,YAAA,EAAE,yBAA6B,EAA7B,iBAAiB,mBAAG,CAAC,OAAO,CAAC,KAAA;IAEhE,OAAO,UAAC,KAAK;;QACT,IAAM,kBAAkB,GAAG,iBAAiB,KAAK,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAsB,CAAC,CAAA;QAChH,IAAI,CAAC,kBAAkB,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QAC3D,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;QAEhC,IAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAChD,IAAI,EACJ,mBAAY,QAAQ,CAAC,MAAM,CAAC,KAAK,qBAAW,QAAQ,CAAC,eAAe,EAAE,CAAE,CAC3E,CAAA;QACD,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAA;QAC5C,IAAI,QAAQ,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,QAAQ,CAAC,sBAAsB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAClG,CAAC;QAED,IAAM,UAAU,GAAG,CAAA,MAAA,KAAK,CAAC,SAAS,0CAAE,MAAM,KAAI,EAAE,CAAA;QAEhD,IAAM,IAAI,GAQN;YACA,gCAAgC;YAChC,kBAAkB,EAAE,CAAA,MAAA,UAAU,CAAC,CAAC,CAAC,0CAAE,KAAK,KAAI,KAAK,CAAC,OAAO;YACzD,eAAe,EAAE,MAAA,UAAU,CAAC,CAAC,CAAC,0CAAE,IAAI;YACpC,oBAAoB,EAAE,SAAS;YAC/B,gBAAgB,EAAE,KAAK,CAAC,KAAK;YAC7B,8BAA8B;YAC9B,gBAAgB,EAAE,KAAK,CAAC,QAAQ;YAChC,iBAAiB,EAAE,KAAK,CAAC,SAAS;YAClC,yBAAyB,EAAE,CAAA,MAAA,UAAU,CAAC,CAAC,CAAC,0CAAE,KAAK,KAAI,KAAK,CAAC,OAAO;YAChE,sBAAsB,EAAE,MAAA,UAAU,CAAC,CAAC,CAAC,0CAAE,IAAI;YAC3C,YAAY,EAAE,KAAK,CAAC,IAAI;YACxB,MAAM,EAAE,KAAK,CAAC,KAAK;SACtB,CAAA;QAED,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC;gBACf,CAAC,MAAM,IAAI,kCAAkC,CAAC;oBAC9C,YAAY;oBACZ,mBAAmB;oBACnB,SAAS;oBACT,SAAS;oBACT,KAAK,CAAC,QAAQ,CAAA;QACtB,CAAC;QAED,8CAA8C;QAC9C,uDAAuD;QACvD,kCAAkC;QAClC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAA,MAAA,QAAQ,CAAC,iBAAiB,0CAAE,QAAQ,KAAI,mBAAmB,EAAE,CAAC,CAAA;QAE3G,OAAO,KAAK,CAAA;IAChB,CAAC,CAAA;AACL,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,iBAAiB,CAAC,QAAiB,EAAE,OAAkC;IACnF,IAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzD,OAAO;QACH,IAAI,EAAE,IAAI;QACV,YAAY,YAAC,KAAK;YACd,OAAO,SAAS,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;KACJ,CAAA;AACL,CAAC;AACD,+BAA+B;AAC/B;IAQI,2BACI,QAAiB,EACjB,YAAqB,EACrB,SAAkB,EAClB,MAAe;IACf;;;;;;OAMG;IACH,iBAAyC;QAEzC,gEAAgE;QAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,UAAU,uBAAkE;YACzF,uBAAuB,CACnB,oBAAoB,CAAC,QAAQ,EAAE,EAAE,YAAY,cAAA,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,iBAAiB,mBAAA,EAAE,CAAC,CACzF,CAAA;QACL,CAAC,CAAA;IACL,CAAC;IACL,wBAAC;AAAD,CAAC,AA9BD,IA8BC","sourcesContent":["/**\n * Integrate Sentry with PostHog. This will add a direct link to the person in Sentry, and an $exception event in PostHog\n *\n * ### Usage\n *\n * Sentry.init({\n * dsn: 'https://example',\n * integrations: [\n * new posthog.SentryIntegration(posthog)\n * ]\n * })\n *\n * @param {Object} [posthog] The posthog object\n * @param {string} [organization] Optional: The Sentry organization, used to send a direct link from PostHog to Sentry\n * @param {Number} [projectId] Optional: The Sentry project id, used to send a direct link from PostHog to Sentry\n * @param {string} [prefix] Optional: Url of a self-hosted sentry instance (default: https://sentry.io/organizations/)\n */\n\nimport { PostHog } from '../posthog-core'\nimport { SeverityLevel } from '../types'\nimport { BASE_ERROR_ENDPOINT } from './exception-autocapture'\n\n// NOTE - we can't import from @sentry/types because it changes frequently and causes clashes\n// We only use a small subset of the types, so we can just define the integration overall and use any for the rest\n\n// import {\n// Event as _SentryEvent,\n// EventProcessor as _SentryEventProcessor,\n// Hub as _SentryHub,\n// Integration as _SentryIntegration,\n// SeverityLevel as _SeverityLevel,\n// IntegrationClass as _SentryIntegrationClass,\n// } from '@sentry/types'\n\n// Uncomment the above and comment the below to get type checking for development\n\ntype _SentryEvent = any\ntype _SentryEventProcessor = any\ntype _SentryHub = any\n\ninterface _SentryIntegrationClass {\n name: string\n setupOnce(addGlobalEventProcessor: (callback: _SentryEventProcessor) => void, getCurrentHub: () => _SentryHub): void\n}\n\ninterface _SentryIntegration {\n name: string\n processEvent(event: _SentryEvent): _SentryEvent\n}\n\ninterface SentryExceptionProperties {\n $sentry_event_id: any\n $sentry_exception: any\n $sentry_exception_message: any\n $sentry_exception_type: any\n $sentry_tags: any\n $sentry_url?: string\n}\n\nexport type SentryIntegrationOptions = {\n organization?: string\n projectId?: number\n prefix?: string\n /**\n * By default, only errors are sent to PostHog. You can set this to '*' to send all events.\n * Or to an error of SeverityLevel to only send events matching the provided levels.\n * e.g. ['error', 'fatal'] to send only errors and fatals\n * e.g. ['error'] to send only errors -- the default when omitted\n * e.g. '*' to send all events\n */\n severityAllowList?: SeverityLevel[] | '*'\n}\n\nconst NAME = 'posthog-js'\n\nexport function createEventProcessor(\n _posthog: PostHog,\n { organization, projectId, prefix, severityAllowList = ['error'] }: SentryIntegrationOptions = {}\n): (event: _SentryEvent) => _SentryEvent {\n return (event) => {\n const shouldProcessLevel = severityAllowList === '*' || severityAllowList.includes(event.level as SeverityLevel)\n if (!shouldProcessLevel || !_posthog.__loaded) return event\n if (!event.tags) event.tags = {}\n\n const personUrl = _posthog.requestRouter.endpointFor(\n 'ui',\n `/project/${_posthog.config.token}/person/${_posthog.get_distinct_id()}`\n )\n event.tags['PostHog Person URL'] = personUrl\n if (_posthog.sessionRecordingStarted()) {\n event.tags['PostHog Recording URL'] = _posthog.get_session_replay_url({ withTimestamp: true })\n }\n\n const exceptions = event.exception?.values || []\n\n const data: SentryExceptionProperties & {\n // two properties added to match any exception auto-capture\n // added manually to avoid any dependency on the lazily loaded content\n $exception_message: any\n $exception_type: any\n $exception_personURL: string\n $exception_level: SeverityLevel\n $level: SeverityLevel\n } = {\n // PostHog Exception Properties,\n $exception_message: exceptions[0]?.value || event.message,\n $exception_type: exceptions[0]?.type,\n $exception_personURL: personUrl,\n $exception_level: event.level,\n // Sentry Exception Properties\n $sentry_event_id: event.event_id,\n $sentry_exception: event.exception,\n $sentry_exception_message: exceptions[0]?.value || event.message,\n $sentry_exception_type: exceptions[0]?.type,\n $sentry_tags: event.tags,\n $level: event.level,\n }\n\n if (organization && projectId) {\n data['$sentry_url'] =\n (prefix || 'https://sentry.io/organizations/') +\n organization +\n '/issues/?project=' +\n projectId +\n '&query=' +\n event.event_id\n }\n\n // we take the URL from the exception observer\n // so that when we add error specific URL for ingestion\n // these errors are sent there too\n _posthog.capture('$exception', data, { _url: _posthog.exceptionObserver?.endpoint || BASE_ERROR_ENDPOINT })\n\n return event\n }\n}\n\n// V8 integration - function based\nexport function sentryIntegration(_posthog: PostHog, options?: SentryIntegrationOptions): _SentryIntegration {\n const processor = createEventProcessor(_posthog, options)\n return {\n name: NAME,\n processEvent(event) {\n return processor(event)\n },\n }\n}\n// V7 integration - class based\nexport class SentryIntegration implements _SentryIntegrationClass {\n name: string\n\n setupOnce: (\n addGlobalEventProcessor: (callback: _SentryEventProcessor) => void,\n getCurrentHub: () => _SentryHub\n ) => void\n\n constructor(\n _posthog: PostHog,\n organization?: string,\n projectId?: number,\n prefix?: string,\n /**\n * By default, only errors are sent to PostHog. You can set this to '*' to send all events.\n * Or to an error of SeverityLevel to only send events matching the provided levels.\n * e.g. ['error', 'fatal'] to send only errors and fatals\n * e.g. ['error'] to send only errors -- the default when omitted\n * e.g. '*' to send all events\n */\n severityAllowList?: SeverityLevel[] | '*'\n ) {\n // setupOnce gets called by Sentry when it intializes the plugin\n this.name = NAME\n this.setupOnce = function (addGlobalEventProcessor: (callback: _SentryEventProcessor) => void) {\n addGlobalEventProcessor(\n createEventProcessor(_posthog, { organization, projectId, prefix, severityAllowList })\n )\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"action-matcher.js","sourceRoot":"","sources":["../../../../src/extensions/surveys/action-matcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from '../../posthog-core'\nimport { ActionStepStringMatching, ActionStepType, ActionType, SurveyElement } from '../../posthog-surveys-types'\nimport { SimpleEventEmitter } from '../../utils/simple-event-emitter'\nimport { CaptureResult } from '../../types'\nimport { isUndefined } from '../../utils/type-utils'\nimport { window } from '../../utils/globals'\nimport { isUrlMatchingRegex } from '../../utils/request-utils'\n\nexport class ActionMatcher {\n private readonly actionRegistry?: Set<ActionType>\n private readonly instance?: PostHog\n private readonly actionEvents: Set<string>\n private _debugEventEmitter = new SimpleEventEmitter()\n\n constructor(instance?: PostHog) {\n this.instance = instance\n this.actionEvents = new Set<string>()\n this.actionRegistry = new Set<ActionType>()\n }\n\n init() {\n if (!isUndefined(this.instance?._addCaptureHook)) {\n const matchEventToAction = (eventName: string, eventPayload: any) => {\n this.on(eventName, eventPayload)\n }\n this.instance?._addCaptureHook(matchEventToAction)\n }\n }\n\n register(actions: ActionType[]): void {\n if (isUndefined(this.instance?._addCaptureHook)) {\n return\n }\n\n actions.forEach((action) => {\n this.actionRegistry?.add(action)\n action.steps?.forEach((step) => {\n this.actionEvents?.add(step?.event || '')\n })\n })\n\n if (this.instance?.autocapture) {\n const selectorsToWatch: Set<string> = new Set<string>()\n actions.forEach((action) => {\n action.steps?.forEach((step) => {\n if (step?.selector) {\n selectorsToWatch.add(step?.selector)\n }\n })\n })\n this.instance?.autocapture.setElementSelectors(selectorsToWatch)\n }\n }\n\n on(eventName: string, eventPayload?: CaptureResult) {\n if (eventPayload == null || eventName.length == 0) {\n return\n }\n\n if (!this.actionEvents.has(eventName) && !this.actionEvents.has(<string>eventPayload?.event)) {\n return\n }\n\n if (this.actionRegistry && this.actionRegistry?.size > 0) {\n this.actionRegistry.forEach((action) => {\n if (this.checkAction(eventPayload, action)) {\n this._debugEventEmitter.emit('actionCaptured', action.name)\n }\n })\n }\n }\n\n _addActionHook(callback: (actionName: string, eventPayload?: any) => void): void {\n this.onAction('actionCaptured', (data) => callback(data))\n }\n\n private checkAction(event?: CaptureResult, action?: ActionType): boolean {\n if (action?.steps == null) {\n return false\n }\n\n for (const step of action.steps) {\n if (this.checkStep(event, step)) {\n return true\n }\n }\n\n return false\n }\n\n onAction(event: 'actionCaptured', cb: (...args: any[]) => void): () => void {\n return this._debugEventEmitter.on(event, cb)\n }\n\n private checkStep = (event?: CaptureResult, step?: ActionStepType): boolean => {\n return this.checkStepEvent(event, step) && this.checkStepUrl(event, step) && this.checkStepElement(event, step)\n }\n\n private checkStepEvent = (event?: CaptureResult, step?: ActionStepType): boolean => {\n // CHECK CONDITIONS, OTHERWISE SKIPPED\n if (step?.event && event?.event !== step?.event) {\n return false // EVENT NAME IS A MISMATCH\n }\n return true\n }\n\n private checkStepUrl(event?: CaptureResult, step?: ActionStepType): boolean {\n // CHECK CONDITIONS, OTHERWISE SKIPPED\n if (step?.url) {\n const eventUrl = event?.properties?.$current_url\n if (!eventUrl || typeof eventUrl !== 'string') {\n return false // URL IS UNKNOWN\n }\n if (!ActionMatcher.matchString(eventUrl, step?.url, step?.url_matching || 'contains')) {\n return false // URL IS A MISMATCH\n }\n }\n return true\n }\n\n private static matchString(url: string, pattern: string, matching: ActionStepStringMatching): boolean {\n switch (matching) {\n case 'regex':\n return !!window && isUrlMatchingRegex(url, pattern)\n case 'exact':\n return pattern === url\n case 'contains':\n // Simulating SQL LIKE behavior (_ = any single character, % = any zero or more characters)\n // eslint-disable-next-line no-case-declarations\n const adjustedRegExpStringPattern = ActionMatcher.escapeStringRegexp(pattern)\n .replace(/_/g, '.')\n .replace(/%/g, '.*')\n return isUrlMatchingRegex(url, adjustedRegExpStringPattern)\n\n default:\n return false\n }\n }\n\n private static escapeStringRegexp(pattern: string): string {\n // Escape characters with special meaning either inside or outside character sets.\n // Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n return pattern.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d')\n }\n\n private checkStepElement(event?: CaptureResult, step?: ActionStepType): boolean {\n // CHECK CONDITIONS, OTHERWISE SKIPPED\n if (step?.href || step?.tag_name || step?.text) {\n const elements = this.getElementsList(event)\n if (\n !elements.some((element) => {\n if (\n step?.href &&\n !ActionMatcher.matchString(element.href || '', step?.href, step?.href_matching || 'exact')\n ) {\n return false // ELEMENT HREF IS A MISMATCH\n }\n if (step?.tag_name && element.tag_name !== step?.tag_name) {\n return false // ELEMENT TAG NAME IS A MISMATCH\n }\n if (\n step?.text &&\n !(\n ActionMatcher.matchString(element.text || '', step?.text, step?.text_matching || 'exact') ||\n ActionMatcher.matchString(\n element.$el_text || '',\n step?.text,\n step?.text_matching || 'exact'\n )\n )\n ) {\n return false // ELEMENT TEXT IS A MISMATCH\n }\n return true\n })\n ) {\n // AT LEAST ONE ELEMENT MUST BE A SUBMATCH\n return false\n }\n }\n\n if (step?.selector) {\n const elementSelectors = event?.properties?.$element_selectors as unknown as string[]\n if (!elementSelectors) {\n return false // SELECTOR IS A MISMATCH\n }\n if (!elementSelectors.includes(step?.selector)) {\n return false // SELECTOR IS A MISMATCH\n }\n }\n\n return true\n }\n\n private getElementsList(event?: CaptureResult): SurveyElement[] {\n if (event?.properties.$elements == null) {\n return []\n }\n\n return event?.properties.$elements as unknown as SurveyElement[]\n }\n}\n"]}
1
+ {"version":3,"file":"action-matcher.js","sourceRoot":"","sources":["../../../../src/extensions/surveys/action-matcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from '../../posthog-core'\nimport { ActionStepStringMatching, ActionStepType, ActionType, SurveyElement } from '../../posthog-surveys-types'\nimport { SimpleEventEmitter } from '../../utils/simple-event-emitter'\nimport { CaptureResult } from '../../types'\nimport { isUndefined } from '../../utils/type-utils'\nimport { window } from '../../utils/globals'\nimport { isUrlMatchingRegex } from '../../utils/request-utils'\n\nexport class ActionMatcher {\n private readonly actionRegistry?: Set<ActionType>\n private readonly instance?: PostHog\n private readonly actionEvents: Set<string>\n private _debugEventEmitter = new SimpleEventEmitter()\n\n constructor(instance?: PostHog) {\n this.instance = instance\n this.actionEvents = new Set<string>()\n this.actionRegistry = new Set<ActionType>()\n }\n\n init() {\n if (!isUndefined(this.instance?._addCaptureHook)) {\n const matchEventToAction = (eventName: string, eventPayload: any) => {\n this.on(eventName, eventPayload)\n }\n this.instance?._addCaptureHook(matchEventToAction)\n }\n }\n\n register(actions: ActionType[]): void {\n if (isUndefined(this.instance?._addCaptureHook)) {\n return\n }\n\n actions.forEach((action) => {\n this.actionRegistry?.add(action)\n action.steps?.forEach((step) => {\n this.actionEvents?.add(step?.event || '')\n })\n })\n\n if (this.instance?.autocapture) {\n const selectorsToWatch: Set<string> = new Set<string>()\n actions.forEach((action) => {\n action.steps?.forEach((step) => {\n if (step?.selector) {\n selectorsToWatch.add(step?.selector)\n }\n })\n })\n this.instance?.autocapture.setElementSelectors(selectorsToWatch)\n }\n }\n\n on(eventName: string, eventPayload?: CaptureResult) {\n if (eventPayload == null || eventName.length == 0) {\n return\n }\n\n if (!this.actionEvents.has(eventName) && !this.actionEvents.has(<string>eventPayload?.event)) {\n return\n }\n\n if (this.actionRegistry && this.actionRegistry?.size > 0) {\n this.actionRegistry.forEach((action) => {\n if (this.checkAction(eventPayload, action)) {\n this._debugEventEmitter.emit('actionCaptured', action.name)\n }\n })\n }\n }\n\n _addActionHook(callback: (actionName: string, eventPayload?: any) => void): void {\n this.onAction('actionCaptured', (data) => callback(data))\n }\n\n private checkAction(event?: CaptureResult, action?: ActionType): boolean {\n if (action?.steps == null) {\n return false\n }\n\n for (const step of action.steps) {\n if (this.checkStep(event, step)) {\n return true\n }\n }\n\n return false\n }\n\n onAction(event: 'actionCaptured', cb: (...args: any[]) => void): () => void {\n return this._debugEventEmitter.on(event, cb)\n }\n\n private checkStep = (event?: CaptureResult, step?: ActionStepType): boolean => {\n return this.checkStepEvent(event, step) && this.checkStepUrl(event, step) && this.checkStepElement(event, step)\n }\n\n private checkStepEvent = (event?: CaptureResult, step?: ActionStepType): boolean => {\n // CHECK CONDITIONS, OTHERWISE SKIPPED\n if (step?.event && event?.event !== step?.event) {\n return false // EVENT NAME IS A MISMATCH\n }\n return true\n }\n\n private checkStepUrl(event?: CaptureResult, step?: ActionStepType): boolean {\n // CHECK CONDITIONS, OTHERWISE SKIPPED\n if (step?.url) {\n const eventUrl = event?.properties?.$current_url\n if (!eventUrl || typeof eventUrl !== 'string') {\n return false // URL IS UNKNOWN\n }\n if (!ActionMatcher.matchString(eventUrl, step?.url, step?.url_matching || 'contains')) {\n return false // URL IS A MISMATCH\n }\n }\n return true\n }\n\n private static matchString(url: string, pattern: string, matching: ActionStepStringMatching): boolean {\n switch (matching) {\n case 'regex':\n return !!window && isUrlMatchingRegex(url, pattern)\n case 'exact':\n return pattern === url\n case 'contains':\n // Simulating SQL LIKE behavior (_ = any single character, % = any zero or more characters)\n // eslint-disable-next-line no-case-declarations\n const adjustedRegExpStringPattern = ActionMatcher.escapeStringRegexp(pattern)\n .replace(/_/g, '.')\n .replace(/%/g, '.*')\n return isUrlMatchingRegex(url, adjustedRegExpStringPattern)\n\n default:\n return false\n }\n }\n\n private static escapeStringRegexp(pattern: string): string {\n // Escape characters with special meaning either inside or outside character sets.\n // Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n return pattern.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d')\n }\n\n private checkStepElement(event?: CaptureResult, step?: ActionStepType): boolean {\n // CHECK CONDITIONS, OTHERWISE SKIPPED\n if (step?.href || step?.tag_name || step?.text) {\n const elements = this.getElementsList(event)\n if (\n !elements.some((element) => {\n if (\n step?.href &&\n !ActionMatcher.matchString(element.href || '', step?.href, step?.href_matching || 'exact')\n ) {\n return false // ELEMENT HREF IS A MISMATCH\n }\n if (step?.tag_name && element.tag_name !== step?.tag_name) {\n return false // ELEMENT TAG NAME IS A MISMATCH\n }\n if (\n step?.text &&\n !(\n ActionMatcher.matchString(element.text || '', step?.text, step?.text_matching || 'exact') ||\n ActionMatcher.matchString(\n element.$el_text || '',\n step?.text,\n step?.text_matching || 'exact'\n )\n )\n ) {\n return false // ELEMENT TEXT IS A MISMATCH\n }\n return true\n })\n ) {\n // AT LEAST ONE ELEMENT MUST BE A SUBMATCH\n return false\n }\n }\n\n if (step?.selector) {\n const elementSelectors = event?.properties?.$element_selectors as unknown as string[]\n if (!elementSelectors) {\n return false // SELECTOR IS A MISMATCH\n }\n if (!elementSelectors.includes(step?.selector)) {\n return false // SELECTOR IS A MISMATCH\n }\n }\n\n return true\n }\n\n private getElementsList(event?: CaptureResult): SurveyElement[] {\n if (event?.properties.$elements == null) {\n return []\n }\n\n return event?.properties.$elements as unknown as SurveyElement[]\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSection.jsx","sourceRoot":"","sources":["../../../../../src/extensions/surveys/components/BottomSection.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAI/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAElG,MAAM,UAAU,aAAa,CAAC,EAY7B;QAXG,IAAI,UAAA,EACJ,cAAc,oBAAA,EACd,UAAU,gBAAA,EACV,QAAQ,cAAA,EACR,IAAI,UAAA;IAQE,IAAA,KAA6B,UAAU,CAAC,aAAa,CAAC,EAApD,aAAa,mBAAA,EAAE,OAAO,aAA8B,CAAA;IAC5D,IAAM,SAAS,GACX,UAAU,CAAC,qBAAqB;QAChC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAA;IACtG,OAAO,CACH,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAC3B;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CACpB;gBAAA,CAAC,MAAM,CACH,SAAS,CAAC,aAAa,CACvB,QAAQ,CAAC,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,CAC3C,IAAI,CAAC,QAAQ,CACb,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3C,OAAO,CAAC,CAAC;YACL,IAAI,aAAa;gBAAE,OAAM;YACzB,IAAI,IAAI,EAAE;gBACN,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,IAAI,CAAC,CAAA;aACrB;YACD,QAAQ,EAAE,CAAA;QACd,CAAC,CAAC,CAEF;oBAAA,CAAC,IAAI,CACT;gBAAA,EAAE,MAAM,CACZ;YAAA,EAAE,GAAG,CACL;YAAA,CAAC,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,AAAD,EAAG,CAC9C;QAAA,EAAE,GAAG,CAAC,CACT,CAAA;AACL,CAAC","sourcesContent":["import { window } from '../../../utils/globals'\n\nimport { SurveyAppearance } from '../../../posthog-surveys-types'\n\nimport { PostHogLogo } from './PostHogLogo'\nimport { useContext } from 'preact/hooks'\nimport { SurveyContext, defaultSurveyAppearance, getContrastingTextColor } from '../surveys-utils'\n\nexport function BottomSection({\n text,\n submitDisabled,\n appearance,\n onSubmit,\n link,\n}: {\n text: string\n submitDisabled: boolean\n appearance: SurveyAppearance\n onSubmit: () => void\n link?: string | null\n}) {\n const { isPreviewMode, isPopup } = useContext(SurveyContext)\n const textColor =\n appearance.submitButtonTextColor ||\n getContrastingTextColor(appearance.submitButtonColor || defaultSurveyAppearance.submitButtonColor)\n return (\n <div className=\"bottom-section\">\n <div className=\"buttons\">\n <button\n className=\"form-submit\"\n disabled={submitDisabled && !isPreviewMode}\n type=\"button\"\n style={isPopup ? { color: textColor } : {}}\n onClick={() => {\n if (isPreviewMode) return\n if (link) {\n window?.open(link)\n }\n onSubmit()\n }}\n >\n {text}\n </button>\n </div>\n {!appearance.whiteLabel && <PostHogLogo />}\n </div>\n )\n}\n"]}
1
+ {"version":3,"file":"BottomSection.jsx","sourceRoot":"","sources":["../../../../../src/extensions/surveys/components/BottomSection.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAI/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAElG,MAAM,UAAU,aAAa,CAAC,EAY7B;QAXG,IAAI,UAAA,EACJ,cAAc,oBAAA,EACd,UAAU,gBAAA,EACV,QAAQ,cAAA,EACR,IAAI,UAAA;IAQE,IAAA,KAA6B,UAAU,CAAC,aAAa,CAAC,EAApD,aAAa,mBAAA,EAAE,OAAO,aAA8B,CAAA;IAC5D,IAAM,SAAS,GACX,UAAU,CAAC,qBAAqB;QAChC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAA;IACtG,OAAO,CACH,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAC3B;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CACpB;gBAAA,CAAC,MAAM,CACH,SAAS,CAAC,aAAa,CACvB,QAAQ,CAAC,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,CAC3C,IAAI,CAAC,QAAQ,CACb,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3C,OAAO,CAAC,CAAC;YACL,IAAI,aAAa;gBAAE,OAAM;YACzB,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YACtB,CAAC;YACD,QAAQ,EAAE,CAAA;QACd,CAAC,CAAC,CAEF;oBAAA,CAAC,IAAI,CACT;gBAAA,EAAE,MAAM,CACZ;YAAA,EAAE,GAAG,CACL;YAAA,CAAC,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,AAAD,EAAG,CAC9C;QAAA,EAAE,GAAG,CAAC,CACT,CAAA;AACL,CAAC","sourcesContent":["import { window } from '../../../utils/globals'\n\nimport { SurveyAppearance } from '../../../posthog-surveys-types'\n\nimport { PostHogLogo } from './PostHogLogo'\nimport { useContext } from 'preact/hooks'\nimport { SurveyContext, defaultSurveyAppearance, getContrastingTextColor } from '../surveys-utils'\n\nexport function BottomSection({\n text,\n submitDisabled,\n appearance,\n onSubmit,\n link,\n}: {\n text: string\n submitDisabled: boolean\n appearance: SurveyAppearance\n onSubmit: () => void\n link?: string | null\n}) {\n const { isPreviewMode, isPopup } = useContext(SurveyContext)\n const textColor =\n appearance.submitButtonTextColor ||\n getContrastingTextColor(appearance.submitButtonColor || defaultSurveyAppearance.submitButtonColor)\n return (\n <div className=\"bottom-section\">\n <div className=\"buttons\">\n <button\n className=\"form-submit\"\n disabled={submitDisabled && !isPreviewMode}\n type=\"button\"\n style={isPopup ? { color: textColor } : {}}\n onClick={() => {\n if (isPreviewMode) return\n if (link) {\n window?.open(link)\n }\n onSubmit()\n }}\n >\n {text}\n </button>\n </div>\n {!appearance.whiteLabel && <PostHogLogo />}\n </div>\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationMessage.jsx","sourceRoot":"","sources":["../../../../../src/extensions/surveys/components/ConfirmationMessage.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAC/G,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,MAAM,UAAU,mBAAmB,CAAC,EAgBnC;QAfG,MAAM,YAAA,EACN,WAAW,iBAAA,EACX,WAAW,iBAAA,EACX,gBAAgB,sBAAA,EAChB,UAAU,gBAAA,EACV,OAAO,aAAA,EACP,cAAc,oBAAA;IAUd,IAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,CAAC,eAAe,IAAI,uBAAuB,CAAC,eAAe,CAAC,CAAA;IAExG,IAAA,OAAO,GAAK,UAAU,CAAC,aAAa,CAAC,QAA9B,CAA8B;IAE7C,OAAO,CACH,EACI;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,cAAM,cAAc,EAAG,CAC5D;gBAAA,CAAC,GAAG,CAAC,SAAS,CAAC,6BAA6B,CACxC;oBAAA,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAM,OAAA,OAAO,EAAE,EAAT,CAAS,CAAC,EAAG,CAChD;oBAAA,CAAC,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CACjE;wBAAA,CAAC,MAAM,CACX;oBAAA,EAAE,EAAE,CACJ;oBAAA,CAAC,WAAW;YACR,0BAA0B,CAAC;gBACvB,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC;gBAC5D,QAAQ,EAAE,WAAW;gBACrB,YAAY,EAAE,CAAC,gBAAgB,IAAI,WAAW,KAAK,MAAM;gBACzD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;aAC9B,CAAC,CACN;oBAAA,CAAC,OAAO,IAAI,CACR,CAAC,aAAa,CACV,IAAI,CAAC,CAAC,UAAU,CAAC,8BAA8B,IAAI,OAAO,CAAC,CAC3D,cAAc,CAAC,CAAC,KAAK,CAAC,CACtB,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,QAAQ,CAAC,CAAC,cAAM,OAAA,OAAO,EAAE,EAAT,CAAS,CAAC,EAC5B,CACL,CACL;gBAAA,EAAE,GAAG,CACT;YAAA,EAAE,GAAG,CACT;QAAA,GAAG,CACN,CAAA;AACL,CAAC","sourcesContent":["import { BottomSection } from './BottomSection'\nimport { Cancel } from './QuestionHeader'\nimport { SurveyAppearance, SurveyQuestionDescriptionContentType } from '../../../posthog-surveys-types'\nimport { defaultSurveyAppearance, getContrastingTextColor, renderChildrenAsTextOrHtml } from '../surveys-utils'\nimport { h } from 'preact'\n\nimport { useContext } from 'preact/hooks'\nimport { SurveyContext } from '../../surveys/surveys-utils'\n\nexport function ConfirmationMessage({\n header,\n description,\n contentType,\n forceDisableHtml,\n appearance,\n onClose,\n styleOverrides,\n}: {\n header: string\n description: string\n forceDisableHtml: boolean\n contentType?: SurveyQuestionDescriptionContentType\n appearance: SurveyAppearance\n onClose: () => void\n styleOverrides?: React.CSSProperties\n}) {\n const textColor = getContrastingTextColor(appearance.backgroundColor || defaultSurveyAppearance.backgroundColor)\n\n const { isPopup } = useContext(SurveyContext)\n\n return (\n <>\n <div className=\"thank-you-message\" style={{ ...styleOverrides }}>\n <div className=\"thank-you-message-container\">\n {isPopup && <Cancel onClick={() => onClose()} />}\n <h3 className=\"thank-you-message-header\" style={{ color: textColor }}>\n {header}\n </h3>\n {description &&\n renderChildrenAsTextOrHtml({\n component: h('div', { className: 'thank-you-message-body' }),\n children: description,\n renderAsHtml: !forceDisableHtml && contentType !== 'text',\n style: { color: textColor },\n })}\n {isPopup && (\n <BottomSection\n text={appearance.thankYouMessageCloseButtonText || 'Close'}\n submitDisabled={false}\n appearance={appearance}\n onSubmit={() => onClose()}\n />\n )}\n </div>\n </div>\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"ConfirmationMessage.jsx","sourceRoot":"","sources":["../../../../../src/extensions/surveys/components/ConfirmationMessage.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAC/G,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,MAAM,UAAU,mBAAmB,CAAC,EAgBnC;QAfG,MAAM,YAAA,EACN,WAAW,iBAAA,EACX,WAAW,iBAAA,EACX,gBAAgB,sBAAA,EAChB,UAAU,gBAAA,EACV,OAAO,aAAA,EACP,cAAc,oBAAA;IAUd,IAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,CAAC,eAAe,IAAI,uBAAuB,CAAC,eAAe,CAAC,CAAA;IAExG,IAAA,OAAO,GAAK,UAAU,CAAC,aAAa,CAAC,QAA9B,CAA8B;IAE7C,OAAO,CACH,EACI;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,aAAK,cAAc,EAAG,CAC5D;gBAAA,CAAC,GAAG,CAAC,SAAS,CAAC,6BAA6B,CACxC;oBAAA,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAM,OAAA,OAAO,EAAE,EAAT,CAAS,CAAC,EAAG,CAChD;oBAAA,CAAC,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CACjE;wBAAA,CAAC,MAAM,CACX;oBAAA,EAAE,EAAE,CACJ;oBAAA,CAAC,WAAW;YACR,0BAA0B,CAAC;gBACvB,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC;gBAC5D,QAAQ,EAAE,WAAW;gBACrB,YAAY,EAAE,CAAC,gBAAgB,IAAI,WAAW,KAAK,MAAM;gBACzD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;aAC9B,CAAC,CACN;oBAAA,CAAC,OAAO,IAAI,CACR,CAAC,aAAa,CACV,IAAI,CAAC,CAAC,UAAU,CAAC,8BAA8B,IAAI,OAAO,CAAC,CAC3D,cAAc,CAAC,CAAC,KAAK,CAAC,CACtB,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,QAAQ,CAAC,CAAC,cAAM,OAAA,OAAO,EAAE,EAAT,CAAS,CAAC,EAC5B,CACL,CACL;gBAAA,EAAE,GAAG,CACT;YAAA,EAAE,GAAG,CACT;QAAA,GAAG,CACN,CAAA;AACL,CAAC","sourcesContent":["import { BottomSection } from './BottomSection'\nimport { Cancel } from './QuestionHeader'\nimport { SurveyAppearance, SurveyQuestionDescriptionContentType } from '../../../posthog-surveys-types'\nimport { defaultSurveyAppearance, getContrastingTextColor, renderChildrenAsTextOrHtml } from '../surveys-utils'\nimport { h } from 'preact'\n\nimport { useContext } from 'preact/hooks'\nimport { SurveyContext } from '../../surveys/surveys-utils'\n\nexport function ConfirmationMessage({\n header,\n description,\n contentType,\n forceDisableHtml,\n appearance,\n onClose,\n styleOverrides,\n}: {\n header: string\n description: string\n forceDisableHtml: boolean\n contentType?: SurveyQuestionDescriptionContentType\n appearance: SurveyAppearance\n onClose: () => void\n styleOverrides?: React.CSSProperties\n}) {\n const textColor = getContrastingTextColor(appearance.backgroundColor || defaultSurveyAppearance.backgroundColor)\n\n const { isPopup } = useContext(SurveyContext)\n\n return (\n <>\n <div className=\"thank-you-message\" style={{ ...styleOverrides }}>\n <div className=\"thank-you-message-container\">\n {isPopup && <Cancel onClick={() => onClose()} />}\n <h3 className=\"thank-you-message-header\" style={{ color: textColor }}>\n {header}\n </h3>\n {description &&\n renderChildrenAsTextOrHtml({\n component: h('div', { className: 'thank-you-message-body' }),\n children: description,\n renderAsHtml: !forceDisableHtml && contentType !== 'text',\n style: { color: textColor },\n })}\n {isPopup && (\n <BottomSection\n text={appearance.thankYouMessageCloseButtonText || 'Close'}\n submitDisabled={false}\n appearance={appearance}\n onSubmit={() => onClose()}\n />\n )}\n </div>\n </div>\n </>\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionTypes.jsx","sourceRoot":"","sources":["../../../../../src/extensions/surveys/components/QuestionTypes.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n BasicSurveyQuestion,\n SurveyAppearance,\n LinkSurveyQuestion,\n RatingSurveyQuestion,\n MultipleSurveyQuestion,\n SurveyQuestionType,\n} from '../../../posthog-surveys-types'\nimport { RefObject } from 'preact'\nimport { useRef, useState, useMemo } from 'preact/hooks'\nimport { isNull, isArray } from '../../../utils/type-utils'\nimport { useContrastingTextColor } from '../hooks/useContrastingTextColor'\nimport {\n checkSVG,\n dissatisfiedEmoji,\n neutralEmoji,\n satisfiedEmoji,\n veryDissatisfiedEmoji,\n verySatisfiedEmoji,\n} from '../icons'\nimport { getDisplayOrderChoices } from '../surveys-utils'\nimport { BottomSection } from './BottomSection'\nimport { QuestionHeader } from './QuestionHeader'\n\nexport function OpenTextQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n}: {\n question: BasicSurveyQuestion\n forceDisableHtml: boolean\n appearance: SurveyAppearance\n onSubmit: (text: string) => void\n}) {\n const textRef = useRef(null)\n const [text, setText] = useState('')\n\n return (\n <div ref={textRef}>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n backgroundColor={appearance.backgroundColor}\n forceDisableHtml={forceDisableHtml}\n />\n <textarea rows={4} placeholder={appearance?.placeholder} onInput={(e) => setText(e.currentTarget.value)} />\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={!text && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(text)}\n />\n </div>\n )\n}\n\nexport function LinkQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n}: {\n question: LinkSurveyQuestion\n forceDisableHtml: boolean\n appearance: SurveyAppearance\n onSubmit: (clicked: string) => void\n}) {\n return (\n <>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n forceDisableHtml={forceDisableHtml}\n />\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={false}\n link={question.link}\n appearance={appearance}\n onSubmit={() => onSubmit('link clicked')}\n />\n </>\n )\n}\n\nexport function RatingQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n}: {\n question: RatingSurveyQuestion\n forceDisableHtml: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n onSubmit: (rating: number | null) => void\n}) {\n const scale = question.scale\n const starting = question.scale === 10 ? 0 : 1\n const [rating, setRating] = useState<number | null>(null)\n\n return (\n <>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n forceDisableHtml={forceDisableHtml}\n backgroundColor={appearance.backgroundColor}\n />\n <div className=\"rating-section\">\n <div className=\"rating-options\">\n {question.display === 'emoji' && (\n <div className=\"rating-options-emoji\">\n {(question.scale === 3 ? threeScaleEmojis : fiveScaleEmojis).map((emoji, idx) => {\n const active = idx + 1 === rating\n return (\n <button\n className={`ratings-emoji question-${displayQuestionIndex}-rating-${idx} ${\n active ? 'rating-active' : null\n }`}\n value={idx + 1}\n key={idx}\n type=\"button\"\n onClick={() => {\n setRating(idx + 1)\n }}\n style={{\n fill: active\n ? appearance.ratingButtonActiveColor\n : appearance.ratingButtonColor,\n borderColor: appearance.borderColor,\n }}\n >\n {emoji}\n </button>\n )\n })}\n </div>\n )}\n {question.display === 'number' && (\n <div\n className=\"rating-options-number\"\n style={{ gridTemplateColumns: `repeat(${scale - starting + 1}, minmax(0, 1fr))` }}\n >\n {getScaleNumbers(question.scale).map((number, idx) => {\n const active = rating === number\n return (\n <RatingButton\n key={idx}\n displayQuestionIndex={displayQuestionIndex}\n active={active}\n appearance={appearance}\n num={number}\n setActiveNumber={(num) => {\n setRating(num)\n }}\n />\n )\n })}\n </div>\n )}\n </div>\n <div className=\"rating-text\">\n <div>{question.lowerBoundLabel}</div>\n <div>{question.upperBoundLabel}</div>\n </div>\n </div>\n <BottomSection\n text={question.buttonText || appearance?.submitButtonText || 'Submit'}\n submitDisabled={isNull(rating) && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(rating)}\n />\n </>\n )\n}\n\nexport function RatingButton({\n num,\n active,\n displayQuestionIndex,\n appearance,\n setActiveNumber,\n}: {\n num: number\n active: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n setActiveNumber: (num: number) => void\n}) {\n const { textColor, ref } = useContrastingTextColor({ appearance, defaultTextColor: 'black', forceUpdate: active })\n return (\n <button\n ref={ref as RefObject<HTMLButtonElement>}\n className={`ratings-number question-${displayQuestionIndex}-rating-${num} ${\n active ? 'rating-active' : null\n }`}\n type=\"button\"\n onClick={() => {\n setActiveNumber(num)\n }}\n style={{\n color: textColor,\n backgroundColor: active ? appearance.ratingButtonActiveColor : appearance.ratingButtonColor,\n borderColor: appearance.borderColor,\n }}\n >\n {num}\n </button>\n )\n}\n\nexport function MultipleChoiceQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n}: {\n question: MultipleSurveyQuestion\n forceDisableHtml: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n onSubmit: (choices: string | string[] | null) => void\n}) {\n const textRef = useRef(null)\n const choices = useMemo(() => getDisplayOrderChoices(question), [question])\n const [selectedChoices, setSelectedChoices] = useState<string | string[] | null>(\n question.type === SurveyQuestionType.MultipleChoice ? [] : null\n )\n const [openChoiceSelected, setOpenChoiceSelected] = useState(false)\n const [openEndedInput, setOpenEndedInput] = useState('')\n\n const inputType = question.type === SurveyQuestionType.SingleChoice ? 'radio' : 'checkbox'\n return (\n <div ref={textRef}>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n forceDisableHtml={forceDisableHtml}\n backgroundColor={appearance.backgroundColor}\n />\n <div className=\"multiple-choice-options\">\n {/* Remove the last element from the choices, if hasOpenChoice is set */}\n {/* shuffle all other options here if question.shuffleOptions is set */}\n {/* Always ensure that the open ended choice is the last option */}\n {choices.map((choice: string, idx: number) => {\n let choiceClass = 'choice-option'\n const val = choice\n const option = choice\n if (!!question.hasOpenChoice && idx === question.choices.length - 1) {\n choiceClass += ' choice-option-open'\n }\n return (\n <div className={choiceClass}>\n <input\n type={inputType}\n id={`surveyQuestion${displayQuestionIndex}Choice${idx}`}\n name={`question${displayQuestionIndex}`}\n value={val}\n disabled={!val}\n onInput={() => {\n if (question.hasOpenChoice && idx === question.choices.length - 1) {\n return setOpenChoiceSelected(!openChoiceSelected)\n }\n if (question.type === SurveyQuestionType.SingleChoice) {\n return setSelectedChoices(val)\n }\n if (\n question.type === SurveyQuestionType.MultipleChoice &&\n isArray(selectedChoices)\n ) {\n if (selectedChoices.includes(val)) {\n // filter out values because clicking on a selected choice should deselect it\n return setSelectedChoices(\n selectedChoices.filter((choice) => choice !== val)\n )\n }\n return setSelectedChoices([...selectedChoices, val])\n }\n }}\n />\n <label\n htmlFor={`surveyQuestion${displayQuestionIndex}Choice${idx}`}\n style={{ color: 'black' }}\n >\n {question.hasOpenChoice && idx === question.choices.length - 1 ? (\n <>\n <span>{option}:</span>\n <input\n type=\"text\"\n id={`surveyQuestion${displayQuestionIndex}Choice${idx}Open`}\n name={`question${displayQuestionIndex}`}\n onInput={(e) => {\n const userValue = e.currentTarget.value\n if (question.type === SurveyQuestionType.SingleChoice) {\n return setSelectedChoices(userValue)\n }\n if (\n question.type === SurveyQuestionType.MultipleChoice &&\n isArray(selectedChoices)\n ) {\n return setOpenEndedInput(userValue)\n }\n }}\n />\n </>\n ) : (\n option\n )}\n </label>\n <span className=\"choice-check\" style={{ color: 'black' }}>\n {checkSVG}\n </span>\n </div>\n )\n })}\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={\n (isNull(selectedChoices) ||\n (isArray(selectedChoices) && !openChoiceSelected && selectedChoices.length === 0) ||\n (isArray(selectedChoices) &&\n openChoiceSelected &&\n !openEndedInput &&\n selectedChoices.length === 0 &&\n !question.optional)) &&\n !question.optional\n }\n appearance={appearance}\n onSubmit={() => {\n if (openChoiceSelected && question.type === SurveyQuestionType.MultipleChoice) {\n if (isArray(selectedChoices)) {\n onSubmit([...selectedChoices, openEndedInput])\n }\n } else {\n onSubmit(selectedChoices)\n }\n }}\n />\n </div>\n )\n}\n\nconst threeScaleEmojis = [dissatisfiedEmoji, neutralEmoji, satisfiedEmoji]\nconst fiveScaleEmojis = [veryDissatisfiedEmoji, dissatisfiedEmoji, neutralEmoji, satisfiedEmoji, verySatisfiedEmoji]\nconst fiveScaleNumbers = [1, 2, 3, 4, 5]\nconst sevenScaleNumbers = [1, 2, 3, 4, 5, 6, 7]\nconst tenScaleNumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\nfunction getScaleNumbers(scale: number): number[] {\n switch (scale) {\n case 5:\n return fiveScaleNumbers\n case 7:\n return sevenScaleNumbers\n case 10:\n return tenScaleNumbers\n default:\n return fiveScaleNumbers\n }\n}\n"]}
1
+ {"version":3,"file":"QuestionTypes.jsx","sourceRoot":"","sources":["../../../../../src/extensions/surveys/components/QuestionTypes.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n BasicSurveyQuestion,\n SurveyAppearance,\n LinkSurveyQuestion,\n RatingSurveyQuestion,\n MultipleSurveyQuestion,\n SurveyQuestionType,\n} from '../../../posthog-surveys-types'\nimport { RefObject } from 'preact'\nimport { useRef, useState, useMemo } from 'preact/hooks'\nimport { isNull, isArray } from '../../../utils/type-utils'\nimport { useContrastingTextColor } from '../hooks/useContrastingTextColor'\nimport {\n checkSVG,\n dissatisfiedEmoji,\n neutralEmoji,\n satisfiedEmoji,\n veryDissatisfiedEmoji,\n verySatisfiedEmoji,\n} from '../icons'\nimport { getDisplayOrderChoices } from '../surveys-utils'\nimport { BottomSection } from './BottomSection'\nimport { QuestionHeader } from './QuestionHeader'\n\nexport function OpenTextQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n}: {\n question: BasicSurveyQuestion\n forceDisableHtml: boolean\n appearance: SurveyAppearance\n onSubmit: (text: string) => void\n}) {\n const textRef = useRef(null)\n const [text, setText] = useState('')\n\n return (\n <div ref={textRef}>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n backgroundColor={appearance.backgroundColor}\n forceDisableHtml={forceDisableHtml}\n />\n <textarea rows={4} placeholder={appearance?.placeholder} onInput={(e) => setText(e.currentTarget.value)} />\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={!text && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(text)}\n />\n </div>\n )\n}\n\nexport function LinkQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n}: {\n question: LinkSurveyQuestion\n forceDisableHtml: boolean\n appearance: SurveyAppearance\n onSubmit: (clicked: string) => void\n}) {\n return (\n <>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n forceDisableHtml={forceDisableHtml}\n />\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={false}\n link={question.link}\n appearance={appearance}\n onSubmit={() => onSubmit('link clicked')}\n />\n </>\n )\n}\n\nexport function RatingQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n}: {\n question: RatingSurveyQuestion\n forceDisableHtml: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n onSubmit: (rating: number | null) => void\n}) {\n const scale = question.scale\n const starting = question.scale === 10 ? 0 : 1\n const [rating, setRating] = useState<number | null>(null)\n\n return (\n <>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n forceDisableHtml={forceDisableHtml}\n backgroundColor={appearance.backgroundColor}\n />\n <div className=\"rating-section\">\n <div className=\"rating-options\">\n {question.display === 'emoji' && (\n <div className=\"rating-options-emoji\">\n {(question.scale === 3 ? threeScaleEmojis : fiveScaleEmojis).map((emoji, idx) => {\n const active = idx + 1 === rating\n return (\n <button\n className={`ratings-emoji question-${displayQuestionIndex}-rating-${idx} ${\n active ? 'rating-active' : null\n }`}\n value={idx + 1}\n key={idx}\n type=\"button\"\n onClick={() => {\n setRating(idx + 1)\n }}\n style={{\n fill: active\n ? appearance.ratingButtonActiveColor\n : appearance.ratingButtonColor,\n borderColor: appearance.borderColor,\n }}\n >\n {emoji}\n </button>\n )\n })}\n </div>\n )}\n {question.display === 'number' && (\n <div\n className=\"rating-options-number\"\n style={{ gridTemplateColumns: `repeat(${scale - starting + 1}, minmax(0, 1fr))` }}\n >\n {getScaleNumbers(question.scale).map((number, idx) => {\n const active = rating === number\n return (\n <RatingButton\n key={idx}\n displayQuestionIndex={displayQuestionIndex}\n active={active}\n appearance={appearance}\n num={number}\n setActiveNumber={(num) => {\n setRating(num)\n }}\n />\n )\n })}\n </div>\n )}\n </div>\n <div className=\"rating-text\">\n <div>{question.lowerBoundLabel}</div>\n <div>{question.upperBoundLabel}</div>\n </div>\n </div>\n <BottomSection\n text={question.buttonText || appearance?.submitButtonText || 'Submit'}\n submitDisabled={isNull(rating) && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(rating)}\n />\n </>\n )\n}\n\nexport function RatingButton({\n num,\n active,\n displayQuestionIndex,\n appearance,\n setActiveNumber,\n}: {\n num: number\n active: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n setActiveNumber: (num: number) => void\n}) {\n const { textColor, ref } = useContrastingTextColor({ appearance, defaultTextColor: 'black', forceUpdate: active })\n return (\n <button\n ref={ref as RefObject<HTMLButtonElement>}\n className={`ratings-number question-${displayQuestionIndex}-rating-${num} ${\n active ? 'rating-active' : null\n }`}\n type=\"button\"\n onClick={() => {\n setActiveNumber(num)\n }}\n style={{\n color: textColor,\n backgroundColor: active ? appearance.ratingButtonActiveColor : appearance.ratingButtonColor,\n borderColor: appearance.borderColor,\n }}\n >\n {num}\n </button>\n )\n}\n\nexport function MultipleChoiceQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n}: {\n question: MultipleSurveyQuestion\n forceDisableHtml: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n onSubmit: (choices: string | string[] | null) => void\n}) {\n const textRef = useRef(null)\n const choices = useMemo(() => getDisplayOrderChoices(question), [question])\n const [selectedChoices, setSelectedChoices] = useState<string | string[] | null>(\n question.type === SurveyQuestionType.MultipleChoice ? [] : null\n )\n const [openChoiceSelected, setOpenChoiceSelected] = useState(false)\n const [openEndedInput, setOpenEndedInput] = useState('')\n\n const inputType = question.type === SurveyQuestionType.SingleChoice ? 'radio' : 'checkbox'\n return (\n <div ref={textRef}>\n <QuestionHeader\n question={question.question}\n description={question.description}\n descriptionContentType={question.descriptionContentType}\n forceDisableHtml={forceDisableHtml}\n backgroundColor={appearance.backgroundColor}\n />\n <div className=\"multiple-choice-options\">\n {/* Remove the last element from the choices, if hasOpenChoice is set */}\n {/* shuffle all other options here if question.shuffleOptions is set */}\n {/* Always ensure that the open ended choice is the last option */}\n {choices.map((choice: string, idx: number) => {\n let choiceClass = 'choice-option'\n const val = choice\n const option = choice\n if (!!question.hasOpenChoice && idx === question.choices.length - 1) {\n choiceClass += ' choice-option-open'\n }\n return (\n <div className={choiceClass}>\n <input\n type={inputType}\n id={`surveyQuestion${displayQuestionIndex}Choice${idx}`}\n name={`question${displayQuestionIndex}`}\n value={val}\n disabled={!val}\n onInput={() => {\n if (question.hasOpenChoice && idx === question.choices.length - 1) {\n return setOpenChoiceSelected(!openChoiceSelected)\n }\n if (question.type === SurveyQuestionType.SingleChoice) {\n return setSelectedChoices(val)\n }\n if (\n question.type === SurveyQuestionType.MultipleChoice &&\n isArray(selectedChoices)\n ) {\n if (selectedChoices.includes(val)) {\n // filter out values because clicking on a selected choice should deselect it\n return setSelectedChoices(\n selectedChoices.filter((choice) => choice !== val)\n )\n }\n return setSelectedChoices([...selectedChoices, val])\n }\n }}\n />\n <label\n htmlFor={`surveyQuestion${displayQuestionIndex}Choice${idx}`}\n style={{ color: 'black' }}\n >\n {question.hasOpenChoice && idx === question.choices.length - 1 ? (\n <>\n <span>{option}:</span>\n <input\n type=\"text\"\n id={`surveyQuestion${displayQuestionIndex}Choice${idx}Open`}\n name={`question${displayQuestionIndex}`}\n onInput={(e) => {\n const userValue = e.currentTarget.value\n if (question.type === SurveyQuestionType.SingleChoice) {\n return setSelectedChoices(userValue)\n }\n if (\n question.type === SurveyQuestionType.MultipleChoice &&\n isArray(selectedChoices)\n ) {\n return setOpenEndedInput(userValue)\n }\n }}\n />\n </>\n ) : (\n option\n )}\n </label>\n <span className=\"choice-check\" style={{ color: 'black' }}>\n {checkSVG}\n </span>\n </div>\n )\n })}\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={\n (isNull(selectedChoices) ||\n (isArray(selectedChoices) && !openChoiceSelected && selectedChoices.length === 0) ||\n (isArray(selectedChoices) &&\n openChoiceSelected &&\n !openEndedInput &&\n selectedChoices.length === 0 &&\n !question.optional)) &&\n !question.optional\n }\n appearance={appearance}\n onSubmit={() => {\n if (openChoiceSelected && question.type === SurveyQuestionType.MultipleChoice) {\n if (isArray(selectedChoices)) {\n onSubmit([...selectedChoices, openEndedInput])\n }\n } else {\n onSubmit(selectedChoices)\n }\n }}\n />\n </div>\n )\n}\n\nconst threeScaleEmojis = [dissatisfiedEmoji, neutralEmoji, satisfiedEmoji]\nconst fiveScaleEmojis = [veryDissatisfiedEmoji, dissatisfiedEmoji, neutralEmoji, satisfiedEmoji, verySatisfiedEmoji]\nconst fiveScaleNumbers = [1, 2, 3, 4, 5]\nconst sevenScaleNumbers = [1, 2, 3, 4, 5, 6, 7]\nconst tenScaleNumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\nfunction getScaleNumbers(scale: number): number[] {\n switch (scale) {\n case 5:\n return fiveScaleNumbers\n case 7:\n return sevenScaleNumbers\n case 10:\n return tenScaleNumbers\n default:\n return fiveScaleNumbers\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useContrastingTextColor.js","sourceRoot":"","sources":["../../../../../src/extensions/surveys/hooks/useContrastingTextColor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,MAAM,UAAU,uBAAuB,CAAC,OAIvC;;IAIG,IAAM,GAAG,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IAC/B,IAAA,KAAA,OAA4B,QAAQ,CAAC,MAAA,OAAO,CAAC,gBAAgB,mCAAI,OAAO,CAAC,IAAA,EAAxE,SAAS,QAAA,EAAE,YAAY,QAAiD,CAAA;IAE/E,4EAA4E;IAC5E,SAAS,CAAC;QACN,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,IAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACvC,YAAY,CAAC,KAAK,CAAC,CAAA;SACtB;IACL,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;IAE7C,OAAO;QACH,GAAG,KAAA;QACH,SAAS,WAAA;KACZ,CAAA;AACL,CAAC","sourcesContent":["import { useEffect, useRef, useState } from 'preact/hooks'\nimport { SurveyAppearance } from '../../../posthog-surveys-types'\nimport * as Preact from 'preact'\nimport { getTextColor } from '../surveys-utils'\n\nexport function useContrastingTextColor(options: {\n appearance: SurveyAppearance\n defaultTextColor?: string\n forceUpdate?: boolean\n}): {\n ref: Preact.RefObject<HTMLElement>\n textColor: string\n} {\n const ref = useRef<HTMLElement>(null)\n const [textColor, setTextColor] = useState(options.defaultTextColor ?? 'black')\n\n // TODO: useContext to get the background colors instead of querying the DOM\n useEffect(() => {\n if (ref.current) {\n const color = getTextColor(ref.current)\n setTextColor(color)\n }\n }, [options.appearance, options.forceUpdate])\n\n return {\n ref,\n textColor,\n }\n}\n"]}
1
+ {"version":3,"file":"useContrastingTextColor.js","sourceRoot":"","sources":["../../../../../src/extensions/surveys/hooks/useContrastingTextColor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,MAAM,UAAU,uBAAuB,CAAC,OAIvC;;IAIG,IAAM,GAAG,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IAC/B,IAAA,KAAA,OAA4B,QAAQ,CAAC,MAAA,OAAO,CAAC,gBAAgB,mCAAI,OAAO,CAAC,IAAA,EAAxE,SAAS,QAAA,EAAE,YAAY,QAAiD,CAAA;IAE/E,4EAA4E;IAC5E,SAAS,CAAC;QACN,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,IAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACvC,YAAY,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;IAE7C,OAAO;QACH,GAAG,KAAA;QACH,SAAS,WAAA;KACZ,CAAA;AACL,CAAC","sourcesContent":["import { useEffect, useRef, useState } from 'preact/hooks'\nimport { SurveyAppearance } from '../../../posthog-surveys-types'\nimport * as Preact from 'preact'\nimport { getTextColor } from '../surveys-utils'\n\nexport function useContrastingTextColor(options: {\n appearance: SurveyAppearance\n defaultTextColor?: string\n forceUpdate?: boolean\n}): {\n ref: Preact.RefObject<HTMLElement>\n textColor: string\n} {\n const ref = useRef<HTMLElement>(null)\n const [textColor, setTextColor] = useState(options.defaultTextColor ?? 'black')\n\n // TODO: useContext to get the background colors instead of querying the DOM\n useEffect(() => {\n if (ref.current) {\n const color = getTextColor(ref.current)\n setTextColor(color)\n }\n }, [options.appearance, options.forceUpdate])\n\n return {\n ref,\n textColor,\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"surveys-utils.jsx","sourceRoot":"","sources":["../../../../src/extensions/surveys/surveys-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from '../../posthog-core'\nimport { Survey, SurveyAppearance, MultipleSurveyQuestion, SurveyQuestion } from '../../posthog-surveys-types'\nimport { window as _window, document as _document } from '../../utils/globals'\nimport { VNode, cloneElement, createContext } from 'preact'\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 const style = (appearance: SurveyAppearance | null) => {\n const positions = {\n left: 'left: 30px;',\n right: 'right: 30px;',\n center: `\n left: 50%;\n transform: translateX(-50%);\n `,\n }\n return `\n .survey-form, .thank-you-message {\n position: fixed;\n margin: 0px;\n bottom: 0px;\n color: black;\n font-weight: normal;\n font-family: -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n text-align: left;\n max-width: ${parseInt(appearance?.maxWidth || '300')}px;\n width: 100%;\n z-index: ${parseInt(appearance?.zIndex || '99999')};\n border: 1.5px solid ${appearance?.borderColor || '#c9c6c6'};\n border-bottom: 0px;\n ${positions[appearance?.position || 'right'] || 'right: 30px;'}\n flex-direction: column;\n background: ${appearance?.backgroundColor || '#eeeded'};\n border-top-left-radius: 10px;\n border-top-right-radius: 10px;\n box-shadow: -6px 0 16px -8px rgb(0 0 0 / 8%), -9px 0 28px 0 rgb(0 0 0 / 5%), -12px 0 48px 16px rgb(0 0 0 / 3%);\n }\n \n .survey-box, .thank-you-message-container {\n padding: 20px 25px 10px;\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n }\n\n .thank-you-message {\n text-align: center;\n }\n\n .form-submit[disabled] {\n opacity: 0.6;\n filter: grayscale(50%);\n cursor: not-allowed;\n }\n .survey-form textarea {\n color: #2d2d2d;\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n background: white;\n color: black;\n outline: none;\n padding-left: 10px;\n padding-right: 10px;\n padding-top: 10px;\n border-radius: 6px;\n border-color: ${appearance?.borderColor || '#c9c6c6'};\n margin-top: 14px;\n width: 100%;\n box-sizing: border-box;\n }\n .survey-box:has(.survey-question:empty):not(:has(.survey-question-description)) textarea {\n margin-top: 0;\n }\n .form-submit {\n box-sizing: border-box;\n margin: 0;\n font-family: inherit;\n overflow: visible;\n text-transform: none;\n position: relative;\n display: inline-block;\n font-weight: 700;\n white-space: nowrap;\n text-align: center;\n border: 1.5px solid transparent;\n cursor: pointer;\n user-select: none;\n touch-action: manipulation;\n padding: 12px;\n font-size: 14px;\n border-radius: 6px;\n outline: 0;\n background: ${appearance?.submitButtonColor || 'black'} !important;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n width: 100%;\n }\n .form-cancel {\n display: flex;\n float: right;\n border: none;\n background: none;\n cursor: pointer;\n }\n .cancel-btn-wrapper {\n position: absolute;\n width: 35px;\n height: 35px;\n border-radius: 100%;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n background: white;\n border: 1.5px solid ${appearance?.borderColor || '#c9c6c6'};\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .bolded { font-weight: 600; }\n .buttons {\n display: flex;\n justify-content: center;\n }\n .footer-branding {\n font-size: 11px;\n margin-top: 10px;\n text-align: center;\n display: flex;\n justify-content: center;\n gap: 4px;\n align-items: center;\n font-weight: 500;\n background: ${appearance?.backgroundColor || '#eeeded'};\n text-decoration: none;\n backgroundColor: ${appearance?.backgroundColor || '#eeeded'};\n color: ${getContrastingTextColor(appearance?.backgroundColor || '#eeeded')};\n }\n .survey-question {\n font-weight: 500;\n font-size: 14px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .question-textarea-wrapper {\n display: flex;\n flex-direction: column;\n }\n .survey-question-description {\n font-size: 13px;\n padding-top: 5px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .ratings-number {\n font-size: 16px;\n font-weight: 600;\n padding: 8px 0px;\n border: none;\n }\n .ratings-number:hover {\n cursor: pointer;\n }\n .rating-options {\n margin-top: 14px;\n }\n .rating-options-number {\n display: grid;\n border-radius: 6px;\n overflow: hidden;\n border: 1.5px solid ${appearance?.borderColor || '#c9c6c6'};\n }\n .rating-options-number > .ratings-number {\n border-right: 1px solid ${appearance?.borderColor || '#c9c6c6'};\n }\n .rating-options-number > .ratings-number:last-of-type {\n border-right: 0px;\n }\n .rating-options-number .rating-active {\n background: ${appearance?.ratingButtonActiveColor || 'black'};\n }\n .rating-options-emoji {\n display: flex;\n justify-content: space-between;\n }\n .ratings-emoji {\n font-size: 16px;\n background-color: transparent;\n border: none;\n padding: 0px;\n }\n .ratings-emoji:hover {\n cursor: pointer;\n }\n .ratings-emoji.rating-active svg {\n fill: ${appearance?.ratingButtonActiveColor || 'black'};\n }\n .emoji-svg {\n fill: '#939393';\n }\n .rating-text {\n display: flex;\n flex-direction: row;\n font-size: 11px;\n justify-content: space-between;\n margin-top: 6px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n opacity: .60;\n }\n .multiple-choice-options {\n margin-top: 13px;\n font-size: 14px;\n }\n .survey-box:has(.survey-question:empty):not(:has(.survey-question-description)) .multiple-choice-options {\n margin-top: 0;\n }\n .multiple-choice-options .choice-option {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n cursor: pointer;\n margin-bottom: 5px;\n position: relative;\n }\n .multiple-choice-options > .choice-option:last-of-type {\n margin-bottom: 0px;\n }\n .multiple-choice-options input {\n cursor: pointer;\n position: absolute;\n opacity: 0;\n }\n .choice-check {\n position: absolute;\n right: 10px;\n background: white;\n }\n .choice-check svg {\n display: none;\n }\n .multiple-choice-options .choice-option:hover .choice-check svg {\n display: inline-block;\n opacity: .25;\n }\n .multiple-choice-options input:checked + label + .choice-check svg {\n display: inline-block;\n opacity: 100% !important;\n }\n .multiple-choice-options input:checked + label {\n font-weight: bold;\n border: 1.5px solid rgba(0,0,0);\n }\n .multiple-choice-options input:checked + label input {\n font-weight: bold;\n }\n .multiple-choice-options label {\n width: 100%;\n cursor: pointer;\n padding: 10px;\n border: 1.5px solid rgba(0,0,0,.25);\n border-radius: 4px;\n background: white;\n }\n .multiple-choice-options .choice-option-open label {\n padding-right: 30px;\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n max-width: 100%;\n }\n .multiple-choice-options .choice-option-open label span {\n width: 100%;\n }\n .multiple-choice-options .choice-option-open input:disabled + label {\n opacity: 0.6;\n }\n .multiple-choice-options .choice-option-open label input {\n position: relative;\n opacity: 1;\n flex-grow: 1;\n border: 0;\n outline: 0;\n }\n .thank-you-message-body {\n margin-top: 6px;\n font-size: 14px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .thank-you-message-header {\n margin: 10px 0px 0px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .thank-you-message-container .form-submit {\n margin-top: 20px;\n margin-bottom: 10px;\n }\n .thank-you-message-countdown {\n margin-left: 6px;\n }\n .bottom-section {\n margin-top: 14px;\n }\n `\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\nexport function getContrastingTextColor(color: string = defaultBackgroundColor) {\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'\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' : 'white'\n }\n return 'black'\n}\nexport function getTextColor(el: HTMLElement) {\n const backgroundColor = window.getComputedStyle(el).backgroundColor\n if (backgroundColor === 'rgba(0, 0, 0, 0)') {\n return 'black'\n }\n const colorMatch = backgroundColor.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/)\n if (!colorMatch) return 'black'\n\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' : 'white'\n}\n\nexport const defaultSurveyAppearance: SurveyAppearance = {\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: 'right',\n}\n\nexport const defaultBackgroundColor = '#eeeded'\n\nexport const createShadow = (styleSheet: string, surveyId: string, element?: Element) => {\n const div = document.createElement('div')\n div.className = `PostHogSurvey${surveyId}`\n const shadow = div.attachShadow({ mode: 'open' })\n if (styleSheet) {\n const styleElement = Object.assign(document.createElement('style'), {\n innerText: styleSheet,\n })\n shadow.appendChild(styleElement)\n }\n ;(element ? element : document.body).appendChild(div)\n return shadow\n}\n\nexport const sendSurveyEvent = (\n responses: Record<string, string | number | string[] | null> = {},\n survey: Survey,\n posthog?: PostHog\n) => {\n if (!posthog) return\n localStorage.setItem(getSurveySeenKey(survey), 'true')\n\n posthog.capture('survey sent', {\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 $survey_questions: survey.questions.map((question) => question.question),\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...responses,\n $set: {\n [getSurveyInteractionProperty(survey, 'responded')]: true,\n },\n })\n window.dispatchEvent(new Event('PHSurveySent'))\n}\n\nexport const dismissedSurveyEvent = (survey: Survey, posthog?: PostHog, readOnly?: boolean) => {\n // TODO: state management and unit tests for this would be nice\n if (readOnly || !posthog) {\n return\n }\n posthog.capture('survey dismissed', {\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 $set: {\n [getSurveyInteractionProperty(survey, 'dismissed')]: true,\n },\n })\n localStorage.setItem(getSurveySeenKey(survey), 'true')\n window.dispatchEvent(new Event('PHSurveyClosed'))\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 // retain the original questionIndex so we can correlate values in the webapp\n survey.questions.forEach((question, idx) => {\n question.originalQuestionIndex = idx\n })\n\n if (!survey.appearance || !survey.appearance.shuffleQuestions) {\n return survey.questions\n }\n\n return reverseIfUnshuffled(survey.questions, shuffle(survey.questions))\n}\n\nexport const hasEvents = (survey: Survey): boolean => {\n return survey.conditions?.events?.values?.length != undefined && survey.conditions?.events?.values?.length > 0\n}\n\nexport const canActivateRepeatedly = (survey: Survey): boolean => {\n return !!(survey.conditions?.events?.repeatedActivation && hasEvents(survey))\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\nexport const getSurveySeenKey = (survey: Survey): string => {\n let surveySeenKey = `seenSurvey_${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveySeenKey = `seenSurvey_${survey.id}_${survey.current_iteration}`\n }\n\n return surveySeenKey\n}\n\nconst getSurveyInteractionProperty = (survey: Survey, action: string): string => {\n let surveyProperty = `$survey_${action}/${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveyProperty = `$survey_${action}/${survey.id}/${survey.current_iteration}`\n }\n\n return surveyProperty\n}\n\nexport const SurveyContext = createContext<{\n isPreviewMode: boolean\n previewPageIndex: number | undefined\n handleCloseSurveyPopup: () => void\n isPopup: boolean\n}>({\n isPreviewMode: false,\n previewPageIndex: 0,\n handleCloseSurveyPopup: () => {},\n isPopup: true,\n})\n\ninterface RenderProps {\n component: VNode<{ className: string }>\n children: string\n renderAsHtml?: boolean\n style?: React.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"]}
1
+ {"version":3,"file":"surveys-utils.jsx","sourceRoot":"","sources":["../../../../src/extensions/surveys/surveys-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from '../../posthog-core'\nimport { Survey, SurveyAppearance, MultipleSurveyQuestion, SurveyQuestion } from '../../posthog-surveys-types'\nimport { window as _window, document as _document } from '../../utils/globals'\nimport { VNode, cloneElement, createContext } from 'preact'\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 const style = (appearance: SurveyAppearance | null) => {\n const positions = {\n left: 'left: 30px;',\n right: 'right: 30px;',\n center: `\n left: 50%;\n transform: translateX(-50%);\n `,\n }\n return `\n .survey-form, .thank-you-message {\n position: fixed;\n margin: 0px;\n bottom: 0px;\n color: black;\n font-weight: normal;\n font-family: -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n text-align: left;\n max-width: ${parseInt(appearance?.maxWidth || '300')}px;\n width: 100%;\n z-index: ${parseInt(appearance?.zIndex || '99999')};\n border: 1.5px solid ${appearance?.borderColor || '#c9c6c6'};\n border-bottom: 0px;\n ${positions[appearance?.position || 'right'] || 'right: 30px;'}\n flex-direction: column;\n background: ${appearance?.backgroundColor || '#eeeded'};\n border-top-left-radius: 10px;\n border-top-right-radius: 10px;\n box-shadow: -6px 0 16px -8px rgb(0 0 0 / 8%), -9px 0 28px 0 rgb(0 0 0 / 5%), -12px 0 48px 16px rgb(0 0 0 / 3%);\n }\n \n .survey-box, .thank-you-message-container {\n padding: 20px 25px 10px;\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n }\n\n .thank-you-message {\n text-align: center;\n }\n\n .form-submit[disabled] {\n opacity: 0.6;\n filter: grayscale(50%);\n cursor: not-allowed;\n }\n .survey-form textarea {\n color: #2d2d2d;\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n background: white;\n color: black;\n outline: none;\n padding-left: 10px;\n padding-right: 10px;\n padding-top: 10px;\n border-radius: 6px;\n border-color: ${appearance?.borderColor || '#c9c6c6'};\n margin-top: 14px;\n width: 100%;\n box-sizing: border-box;\n }\n .survey-box:has(.survey-question:empty):not(:has(.survey-question-description)) textarea {\n margin-top: 0;\n }\n .form-submit {\n box-sizing: border-box;\n margin: 0;\n font-family: inherit;\n overflow: visible;\n text-transform: none;\n position: relative;\n display: inline-block;\n font-weight: 700;\n white-space: nowrap;\n text-align: center;\n border: 1.5px solid transparent;\n cursor: pointer;\n user-select: none;\n touch-action: manipulation;\n padding: 12px;\n font-size: 14px;\n border-radius: 6px;\n outline: 0;\n background: ${appearance?.submitButtonColor || 'black'} !important;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n width: 100%;\n }\n .form-cancel {\n display: flex;\n float: right;\n border: none;\n background: none;\n cursor: pointer;\n }\n .cancel-btn-wrapper {\n position: absolute;\n width: 35px;\n height: 35px;\n border-radius: 100%;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n background: white;\n border: 1.5px solid ${appearance?.borderColor || '#c9c6c6'};\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .bolded { font-weight: 600; }\n .buttons {\n display: flex;\n justify-content: center;\n }\n .footer-branding {\n font-size: 11px;\n margin-top: 10px;\n text-align: center;\n display: flex;\n justify-content: center;\n gap: 4px;\n align-items: center;\n font-weight: 500;\n background: ${appearance?.backgroundColor || '#eeeded'};\n text-decoration: none;\n backgroundColor: ${appearance?.backgroundColor || '#eeeded'};\n color: ${getContrastingTextColor(appearance?.backgroundColor || '#eeeded')};\n }\n .survey-question {\n font-weight: 500;\n font-size: 14px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .question-textarea-wrapper {\n display: flex;\n flex-direction: column;\n }\n .survey-question-description {\n font-size: 13px;\n padding-top: 5px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .ratings-number {\n font-size: 16px;\n font-weight: 600;\n padding: 8px 0px;\n border: none;\n }\n .ratings-number:hover {\n cursor: pointer;\n }\n .rating-options {\n margin-top: 14px;\n }\n .rating-options-number {\n display: grid;\n border-radius: 6px;\n overflow: hidden;\n border: 1.5px solid ${appearance?.borderColor || '#c9c6c6'};\n }\n .rating-options-number > .ratings-number {\n border-right: 1px solid ${appearance?.borderColor || '#c9c6c6'};\n }\n .rating-options-number > .ratings-number:last-of-type {\n border-right: 0px;\n }\n .rating-options-number .rating-active {\n background: ${appearance?.ratingButtonActiveColor || 'black'};\n }\n .rating-options-emoji {\n display: flex;\n justify-content: space-between;\n }\n .ratings-emoji {\n font-size: 16px;\n background-color: transparent;\n border: none;\n padding: 0px;\n }\n .ratings-emoji:hover {\n cursor: pointer;\n }\n .ratings-emoji.rating-active svg {\n fill: ${appearance?.ratingButtonActiveColor || 'black'};\n }\n .emoji-svg {\n fill: '#939393';\n }\n .rating-text {\n display: flex;\n flex-direction: row;\n font-size: 11px;\n justify-content: space-between;\n margin-top: 6px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n opacity: .60;\n }\n .multiple-choice-options {\n margin-top: 13px;\n font-size: 14px;\n }\n .survey-box:has(.survey-question:empty):not(:has(.survey-question-description)) .multiple-choice-options {\n margin-top: 0;\n }\n .multiple-choice-options .choice-option {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n cursor: pointer;\n margin-bottom: 5px;\n position: relative;\n }\n .multiple-choice-options > .choice-option:last-of-type {\n margin-bottom: 0px;\n }\n .multiple-choice-options input {\n cursor: pointer;\n position: absolute;\n opacity: 0;\n }\n .choice-check {\n position: absolute;\n right: 10px;\n background: white;\n }\n .choice-check svg {\n display: none;\n }\n .multiple-choice-options .choice-option:hover .choice-check svg {\n display: inline-block;\n opacity: .25;\n }\n .multiple-choice-options input:checked + label + .choice-check svg {\n display: inline-block;\n opacity: 100% !important;\n }\n .multiple-choice-options input:checked + label {\n font-weight: bold;\n border: 1.5px solid rgba(0,0,0);\n }\n .multiple-choice-options input:checked + label input {\n font-weight: bold;\n }\n .multiple-choice-options label {\n width: 100%;\n cursor: pointer;\n padding: 10px;\n border: 1.5px solid rgba(0,0,0,.25);\n border-radius: 4px;\n background: white;\n }\n .multiple-choice-options .choice-option-open label {\n padding-right: 30px;\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n max-width: 100%;\n }\n .multiple-choice-options .choice-option-open label span {\n width: 100%;\n }\n .multiple-choice-options .choice-option-open input:disabled + label {\n opacity: 0.6;\n }\n .multiple-choice-options .choice-option-open label input {\n position: relative;\n opacity: 1;\n flex-grow: 1;\n border: 0;\n outline: 0;\n }\n .thank-you-message-body {\n margin-top: 6px;\n font-size: 14px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .thank-you-message-header {\n margin: 10px 0px 0px;\n background: ${appearance?.backgroundColor || '#eeeded'};\n }\n .thank-you-message-container .form-submit {\n margin-top: 20px;\n margin-bottom: 10px;\n }\n .thank-you-message-countdown {\n margin-left: 6px;\n }\n .bottom-section {\n margin-top: 14px;\n }\n `\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\nexport function getContrastingTextColor(color: string = defaultBackgroundColor) {\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'\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' : 'white'\n }\n return 'black'\n}\nexport function getTextColor(el: HTMLElement) {\n const backgroundColor = window.getComputedStyle(el).backgroundColor\n if (backgroundColor === 'rgba(0, 0, 0, 0)') {\n return 'black'\n }\n const colorMatch = backgroundColor.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/)\n if (!colorMatch) return 'black'\n\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' : 'white'\n}\n\nexport const defaultSurveyAppearance: SurveyAppearance = {\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: 'right',\n}\n\nexport const defaultBackgroundColor = '#eeeded'\n\nexport const createShadow = (styleSheet: string, surveyId: string, element?: Element) => {\n const div = document.createElement('div')\n div.className = `PostHogSurvey${surveyId}`\n const shadow = div.attachShadow({ mode: 'open' })\n if (styleSheet) {\n const styleElement = Object.assign(document.createElement('style'), {\n innerText: styleSheet,\n })\n shadow.appendChild(styleElement)\n }\n ;(element ? element : document.body).appendChild(div)\n return shadow\n}\n\nexport const sendSurveyEvent = (\n responses: Record<string, string | number | string[] | null> = {},\n survey: Survey,\n posthog?: PostHog\n) => {\n if (!posthog) return\n localStorage.setItem(getSurveySeenKey(survey), 'true')\n\n posthog.capture('survey sent', {\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 $survey_questions: survey.questions.map((question) => question.question),\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...responses,\n $set: {\n [getSurveyInteractionProperty(survey, 'responded')]: true,\n },\n })\n window.dispatchEvent(new Event('PHSurveySent'))\n}\n\nexport const dismissedSurveyEvent = (survey: Survey, posthog?: PostHog, readOnly?: boolean) => {\n // TODO: state management and unit tests for this would be nice\n if (readOnly || !posthog) {\n return\n }\n posthog.capture('survey dismissed', {\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 $set: {\n [getSurveyInteractionProperty(survey, 'dismissed')]: true,\n },\n })\n localStorage.setItem(getSurveySeenKey(survey), 'true')\n window.dispatchEvent(new Event('PHSurveyClosed'))\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 // retain the original questionIndex so we can correlate values in the webapp\n survey.questions.forEach((question, idx) => {\n question.originalQuestionIndex = idx\n })\n\n if (!survey.appearance || !survey.appearance.shuffleQuestions) {\n return survey.questions\n }\n\n return reverseIfUnshuffled(survey.questions, shuffle(survey.questions))\n}\n\nexport const hasEvents = (survey: Survey): boolean => {\n return survey.conditions?.events?.values?.length != undefined && survey.conditions?.events?.values?.length > 0\n}\n\nexport const canActivateRepeatedly = (survey: Survey): boolean => {\n return !!(survey.conditions?.events?.repeatedActivation && hasEvents(survey))\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\nexport const getSurveySeenKey = (survey: Survey): string => {\n let surveySeenKey = `seenSurvey_${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveySeenKey = `seenSurvey_${survey.id}_${survey.current_iteration}`\n }\n\n return surveySeenKey\n}\n\nconst getSurveyInteractionProperty = (survey: Survey, action: string): string => {\n let surveyProperty = `$survey_${action}/${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveyProperty = `$survey_${action}/${survey.id}/${survey.current_iteration}`\n }\n\n return surveyProperty\n}\n\nexport const SurveyContext = createContext<{\n isPreviewMode: boolean\n previewPageIndex: number | undefined\n handleCloseSurveyPopup: () => void\n isPopup: boolean\n}>({\n isPreviewMode: false,\n previewPageIndex: 0,\n handleCloseSurveyPopup: () => {},\n isPopup: true,\n})\n\ninterface RenderProps {\n component: VNode<{ className: string }>\n children: string\n renderAsHtml?: boolean\n style?: React.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"]}
@@ -40,12 +40,12 @@ export declare const renderSurveysPreview: ({ survey, parentElement, previewPage
40
40
  survey: Survey;
41
41
  parentElement: HTMLElement;
42
42
  previewPageIndex: number;
43
- forceDisableHtml?: boolean | undefined;
43
+ forceDisableHtml?: boolean;
44
44
  }) => void;
45
45
  export declare const renderFeedbackWidgetPreview: ({ survey, root, forceDisableHtml, }: {
46
46
  survey: Survey;
47
47
  root: HTMLElement;
48
- forceDisableHtml?: boolean | undefined;
48
+ forceDisableHtml?: boolean;
49
49
  }) => void;
50
50
  export declare function generateSurveys(posthog: PostHog): SurveyManager | undefined;
51
51
  export declare function usePopupVisibility(survey: Survey, posthog: PostHog | undefined, millisecondDelay: number, isPreviewMode: boolean, removeSurveyFromFocus: (id: string) => void): {