@pendo/agent 2.306.1 → 2.307.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dom.esm.js CHANGED
@@ -7360,7 +7360,7 @@ function getScreenPosition(element) {
7360
7360
  };
7361
7361
  }
7362
7362
 
7363
- var VERSION = '2.306.1_';
7363
+ var VERSION = '2.307.1_';
7364
7364
 
7365
7365
  var decodeURIComponent = _.isFunction(window.decodeURIComponent) ? window.decodeURIComponent : _.identity;
7366
7366
 
@@ -3905,8 +3905,8 @@ let SERVER = '';
3905
3905
  let ASSET_HOST = '';
3906
3906
  let ASSET_PATH = '';
3907
3907
  let DESIGNER_SERVER = '';
3908
- let VERSION = '2.306.1_';
3909
- let PACKAGE_VERSION = '2.306.1';
3908
+ let VERSION = '2.307.1_';
3909
+ let PACKAGE_VERSION = '2.307.1';
3910
3910
  let LOADER = 'xhr';
3911
3911
  /* eslint-enable agent-eslint-rules/no-gulp-env-references */
3912
3912
  /**
@@ -13920,7 +13920,12 @@ var whenLoadedCall = function (callback, win) {
13920
13920
  callback();
13921
13921
  }
13922
13922
  else {
13923
- return attachEventInternal(win, 'load', callback);
13923
+ return attachEventInternal(win, 'load', function () {
13924
+ // some apps fire "fake" load events APP-139170 (https://github.com/rtCamp/rt-optimizer/blob/main/rt-scripts-optimizer.php#L173)
13925
+ if (document.readyState === 'complete') {
13926
+ callback();
13927
+ }
13928
+ });
13924
13929
  }
13925
13930
  return _.noop;
13926
13931
  };
@@ -15495,29 +15500,55 @@ function addInlineStyles(config, id, styles, element = document.head) {
15495
15500
  return styleTag;
15496
15501
  }
15497
15502
 
15498
- function syncColorMode(step, rerender = false) {
15503
+ const DARK_MODE_ATTR = 'data-pendo-dark-mode';
15504
+ /**
15505
+ * Applies data-pendo-dark-mode attribute for CSS pseudo-styles. Requires step.guideElement.
15506
+ */
15507
+ function applyDarkModeAttr(step) {
15508
+ if (!step.guideElement)
15509
+ return;
15510
+ const guideContainer = dom('#pendo-guide-container', step.guideElement)[0];
15511
+ if (!guideContainer)
15512
+ return;
15513
+ if (step.isDarkMode) {
15514
+ guideContainer.setAttribute(DARK_MODE_ATTR, '');
15515
+ }
15516
+ else {
15517
+ guideContainer.removeAttribute(DARK_MODE_ATTR);
15518
+ }
15519
+ }
15520
+ /**
15521
+ * Sets step.isDarkMode based on selector. Call before buildNodeFromJSON.
15522
+ */
15523
+ function detectColorMode(step) {
15499
15524
  const darkModeSelector = _.get(step, 'attributes.darkMode.selector', '');
15500
15525
  if (!darkModeSelector)
15501
15526
  return;
15502
- // Determine the target dark mode state
15503
15527
  let targetDarkMode;
15504
15528
  if (pendo$1.designerEnabled && _.has(step, 'attributes.darkMode.override')) {
15505
- // In designer mode, use the override value
15506
15529
  targetDarkMode = step.attributes.darkMode.override;
15507
15530
  }
15508
15531
  else {
15509
- // In client mode, detect based on selector
15510
15532
  try {
15511
15533
  targetDarkMode = pendo$1.Sizzle(darkModeSelector).length > 0;
15512
15534
  }
15513
15535
  catch (e) {
15514
- // Invalid selector - default to light mode
15515
15536
  targetDarkMode = false;
15516
15537
  }
15517
15538
  }
15518
- // Update and rerender if the state changed
15519
- if (step.isDarkMode !== targetDarkMode) {
15520
- step.isDarkMode = targetDarkMode;
15539
+ step.isDarkMode = targetDarkMode;
15540
+ }
15541
+ /**
15542
+ * Syncs color mode for live updates. Detects, applies attribute, and optionally rerenders.
15543
+ */
15544
+ function syncColorMode(step, rerender = false) {
15545
+ const darkModeSelector = _.get(step, 'attributes.darkMode.selector', '');
15546
+ if (!darkModeSelector)
15547
+ return;
15548
+ const previousMode = step.isDarkMode;
15549
+ detectColorMode(step);
15550
+ if (previousMode !== step.isDarkMode) {
15551
+ applyDarkModeAttr(step);
15521
15552
  if (rerender) {
15522
15553
  step.hide();
15523
15554
  step.show(step.seenReason);
@@ -16603,7 +16634,6 @@ var BuildingBlockTooltips = (function () {
16603
16634
  var caretDimensions = {
16604
16635
  height: parseInt(containerDomJson.props['data-caret-height'], 10) || 0,
16605
16636
  width: parseInt(containerDomJson.props['data-caret-width'], 10) || 0,
16606
- backgroundColor: containerDomJson.props.style['background-color'],
16607
16637
  offset: TOOLTIP_CONSTANTS.DEFAULT_CARET_OFFSET,
16608
16638
  borderWidth: 0
16609
16639
  };
@@ -16623,6 +16653,16 @@ var BuildingBlockTooltips = (function () {
16623
16653
  caretDimensions.borderColor = guideBorderArray[2];
16624
16654
  caretDimensions.borderWidth = parseInt(guideBorderArray[0], 10) || 0;
16625
16655
  }
16656
+ const lightStyle = _.get(containerDomJson, 'props.style');
16657
+ const darkModeStyle = _.get(containerDomJson, 'darkModeProps.style');
16658
+ const backgroundColor = _.get(lightStyle, 'background-color');
16659
+ const darkModeBackgroundColor = _.get(darkModeStyle, 'background-color');
16660
+ if (step && step.isDarkMode && darkModeBackgroundColor) {
16661
+ caretDimensions.backgroundColor = darkModeBackgroundColor;
16662
+ }
16663
+ else if (backgroundColor) {
16664
+ caretDimensions.backgroundColor = backgroundColor;
16665
+ }
16626
16666
  const tooltipSizes = {
16627
16667
  width: guideContainer.offsetWidth,
16628
16668
  height: guideContainer.offsetHeight,
@@ -18293,11 +18333,12 @@ function buildNodeFromJSON(json, step, guides) {
18293
18333
  }
18294
18334
  let css = json.css;
18295
18335
  if (json.forDarkMode) {
18296
- const darkModeSelector = _.get(step, 'attributes.darkMode.selector', '');
18336
+ // Use data attribute on pendo-guide-container as the selector prefix
18337
+ // syncColorMode toggles this attribute, making dark mode styles apply/not apply
18297
18338
  css = _.map(css, function (rule) {
18298
18339
  return {
18299
18340
  styles: rule.styles,
18300
- selector: `${darkModeSelector} ${rule.selector}`
18341
+ selector: `[data-pendo-dark-mode] ${rule.selector}`
18301
18342
  };
18302
18343
  });
18303
18344
  }
@@ -19123,7 +19164,7 @@ var BuildingBlockResourceCenter = (function () {
19123
19164
  renderNativeIntegration(integrationProvider);
19124
19165
  var step = module.steps[0];
19125
19166
  if (step.isDarkMode === undefined) {
19126
- syncColorMode(step);
19167
+ detectColorMode(step);
19127
19168
  }
19128
19169
  var domJsonToRender = updatePseudoStyleSelectors(step.domJson);
19129
19170
  domJsonToRender.props['data-pendo-guide-id'] = module.id;
@@ -19157,6 +19198,8 @@ var BuildingBlockResourceCenter = (function () {
19157
19198
  }
19158
19199
  step.guideElement = dom(resourceCenterContainer);
19159
19200
  step.elements.push(step.guideElement[0]);
19201
+ // Apply data-pendo-dark-mode attribute for CSS pseudo-styles
19202
+ applyDarkModeAttr(step);
19160
19203
  // At this point, the RC is in a state where both the module/homeView currently shown and the
19161
19204
  // module/homeView we are transitioning to are in the DOM. guideContainer is the module/homeView
19162
19205
  // we are transitioning to so we send that to adjustResourceCenterWidth so it's width can be
@@ -28831,8 +28874,9 @@ var BuildingBlockGuides = (function () {
28831
28874
  function renderGuideFromJSON(json, step, guides, options) {
28832
28875
  options = options || {};
28833
28876
  var guide = step.getGuide();
28877
+ // Set step.isDarkMode before build (used for inline styles, SVGs, dark mode props)
28834
28878
  if (step.isDarkMode === undefined) {
28835
- syncColorMode(step);
28879
+ detectColorMode(step);
28836
28880
  }
28837
28881
  var containerJSON = findGuideContainerJSON(json);
28838
28882
  var isResourceCenter = _.get(guide, 'attributes.resourceCenter');
@@ -28848,6 +28892,8 @@ var BuildingBlockGuides = (function () {
28848
28892
  var modifiableJSON = unwrapFirefoxObject(json);
28849
28893
  var guideToAppend = BuildingBlockGuides.buildNodeFromJSON(modifiableJSON, step, guides);
28850
28894
  step.guideElement = guideToAppend;
28895
+ // Apply data-pendo-dark-mode attribute to guide container for CSS pseudo-styles
28896
+ applyDarkModeAttr(step);
28851
28897
  var guideContainer = guideToAppend.find('#' + step.containerId);
28852
28898
  var verticalAlignmentAttr = 'data-vertical-alignment';
28853
28899
  var relativeToElement = guideContainer.attr(verticalAlignmentAttr) === 'Relative to Element';
@@ -29601,7 +29647,7 @@ const privacyFilterCache = new Map();
29601
29647
  *
29602
29648
  * @access public
29603
29649
  * @category Events
29604
- * @param {string} type type of the collected agentic event ['prompt', 'system_response', 'user_reaction']
29650
+ * @param {string} type type of the collected agentic event ['prompt', 'agent_response', 'user_reaction']
29605
29651
  * @param {Object} props event-specific properties object
29606
29652
  * @example
29607
29653
  * pendo.trackAgent('type_of_event', {
@@ -29616,7 +29662,7 @@ const privacyFilterCache = new Map();
29616
29662
  * })
29617
29663
  */
29618
29664
  function trackAgent(type, props) {
29619
- const filteredTypes = ['prompt', 'system_response'];
29665
+ const filteredTypes = ['prompt', 'agent_response'];
29620
29666
  if (_.contains(filteredTypes, type)) {
29621
29667
  props = applyPrivacyFilters(props);
29622
29668
  }
@@ -38390,6 +38436,12 @@ const EmbeddedGuides = (function () {
38390
38436
  function processEmbeddedGuides() {
38391
38437
  _.forEach(embeddedGuides, function (guide) {
38392
38438
  guide.process();
38439
+ if (guide.isShownInThisFrame()) {
38440
+ const activeStep = guide.getActiveStep();
38441
+ if (activeStep) {
38442
+ syncColorMode(activeStep, true);
38443
+ }
38444
+ }
38393
38445
  });
38394
38446
  }
38395
38447
  function hideAllEmbeddedGuides() {