@nuskin/nextgen-header 1.36.0 → 1.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -101049,6 +101049,13 @@ var GTM_TRACKING_CONFIG = {
101049
101049
  // Loyalty is always an anchor (`data-gtm-loyalty`); selector works for GTM delegation.
101050
101050
  clickSelector: "[data-gtm-loyalty]"
101051
101051
  },
101052
+ topRibbon: {
101053
+ componentName: "Top Ribbon",
101054
+ clickEvent: "top_ribbon_click",
101055
+ clickElement: "CTA Click",
101056
+ clickSelector: "a",
101057
+ extractClickData: true
101058
+ },
101052
101059
  logo: {
101053
101060
  componentName: "Logo",
101054
101061
  clickEvent: "logo_click",
@@ -108118,13 +108125,6 @@ var isServer = typeof window === "undefined";
108118
108125
 
108119
108126
  /** Stable reference — default `customFields = {}` in params creates a new object every render. */
108120
108127
  var EMPTY_CUSTOM_FIELDS = {};
108121
- function pageNameFromPathname(pathname) {
108122
- var parts = String(pathname || "").split("/").filter(Boolean);
108123
- if (parts.length <= 2) {
108124
- return "";
108125
- }
108126
- return parts.slice(2).join("/");
108127
- }
108128
108128
  var GTMTracker = function GTMTracker(_ref) {
108129
108129
  var componentName = _ref.componentName,
108130
108130
  impressionEvent = _ref.impressionEvent,
@@ -108137,6 +108137,8 @@ var GTMTracker = function GTMTracker(_ref) {
108137
108137
  clickSelector = _ref$clickSelector === void 0 ? "a" : _ref$clickSelector,
108138
108138
  _ref$clickEventAction = _ref.clickEventAction,
108139
108139
  clickEventAction = _ref$clickEventAction === void 0 ? "click" : _ref$clickEventAction,
108140
+ _ref$extractClickData = _ref.extractClickData,
108141
+ extractClickData = _ref$extractClickData === void 0 ? false : _ref$extractClickData,
108140
108142
  customFields = _ref.customFields,
108141
108143
  children = _ref.children;
108142
108144
  // On the server, just render children — tracking is client-only.
@@ -108155,6 +108157,7 @@ var GTMTracker = function GTMTracker(_ref) {
108155
108157
  clickTriggerType: clickTriggerType,
108156
108158
  clickSelector: clickSelector,
108157
108159
  clickEventAction: clickEventAction,
108160
+ extractClickData: extractClickData,
108158
108161
  customFields: customFields !== null && customFields !== void 0 ? customFields : EMPTY_CUSTOM_FIELDS,
108159
108162
  children: children
108160
108163
  });
@@ -108171,11 +108174,12 @@ function GTMTrackerClient(_ref2) {
108171
108174
  clickTriggerType = _ref2.clickTriggerType,
108172
108175
  clickSelector = _ref2.clickSelector,
108173
108176
  clickEventAction = _ref2.clickEventAction,
108177
+ extractClickData = _ref2.extractClickData,
108174
108178
  customFields = _ref2.customFields,
108175
108179
  children = _ref2.children;
108176
108180
  var componentRef = (0,external_react_.useRef)(null);
108177
108181
  var impressionTrackedRef = (0,external_react_.useRef)(false);
108178
- var pageName = pageNameFromPathname(typeof window !== "undefined" ? window.location.pathname : "");
108182
+ var pageUrl = typeof window !== "undefined" ? window.location.href : "";
108179
108183
  (0,external_react_.useEffect)(function () {
108180
108184
  if (!impressionEvent) return;
108181
108185
  var observer = new IntersectionObserver(function (entries) {
@@ -108186,7 +108190,7 @@ function GTMTrackerClient(_ref2) {
108186
108190
  component_name: componentName,
108187
108191
  event: impressionEvent,
108188
108192
  event_action: "view",
108189
- page_name: pageName
108193
+ page_url: pageUrl
108190
108194
  }, impressionElement && {
108191
108195
  element: impressionElement
108192
108196
  }), impressionTriggerType && {
@@ -108206,7 +108210,7 @@ function GTMTrackerClient(_ref2) {
108206
108210
  observer.unobserve(el);
108207
108211
  }
108208
108212
  };
108209
- }, [componentName, impressionEvent, customFields, pageName, impressionElement, impressionTriggerType]);
108213
+ }, [componentName, impressionEvent, customFields, pageUrl, impressionElement, impressionTriggerType]);
108210
108214
  (0,external_react_.useEffect)(function () {
108211
108215
  if (!clickEvent) return;
108212
108216
  var el = componentRef.current;
@@ -108214,23 +108218,28 @@ function GTMTrackerClient(_ref2) {
108214
108218
  var handleClick = function handleClick(e) {
108215
108219
  var target = e.target.closest(clickSelector);
108216
108220
  if (target) {
108217
- trackVisualBuilderEvent(GTMTracker_objectSpread(GTMTracker_objectSpread(GTMTracker_objectSpread({
108221
+ var _target$textContent;
108222
+ var dynamicData = extractClickData ? {
108223
+ text: (_target$textContent = target.textContent) === null || _target$textContent === void 0 ? void 0 : _target$textContent.trim(),
108224
+ url: target.href
108225
+ } : {};
108226
+ trackVisualBuilderEvent(GTMTracker_objectSpread(GTMTracker_objectSpread(GTMTracker_objectSpread(GTMTracker_objectSpread({
108218
108227
  component_name: componentName,
108219
108228
  event: clickEvent,
108220
108229
  event_action: clickEventAction,
108221
- page_name: pageName
108230
+ page_url: pageUrl
108222
108231
  }, clickElement && {
108223
108232
  element: clickElement
108224
108233
  }), clickTriggerType && {
108225
108234
  trigger_type: clickTriggerType
108226
- }), customFields));
108235
+ }), customFields), dynamicData));
108227
108236
  }
108228
108237
  };
108229
108238
  el.addEventListener("click", handleClick, true);
108230
108239
  return function () {
108231
108240
  return el.removeEventListener("click", handleClick, true);
108232
108241
  };
108233
- }, [componentName, clickEvent, clickElement, clickTriggerType, clickSelector, clickEventAction, customFields, pageName]);
108242
+ }, [componentName, clickEvent, clickElement, clickTriggerType, clickSelector, clickEventAction, extractClickData, customFields, pageUrl]);
108234
108243
  return /*#__PURE__*/(0,jsx_runtime_.jsx)(GTMTrackerRoot, {
108235
108244
  ref: componentRef,
108236
108245
  children: children
@@ -108246,6 +108255,7 @@ GTMTracker.propTypes = {
108246
108255
  clickTriggerType: (external_prop_types_default()).string,
108247
108256
  clickSelector: (external_prop_types_default()).string,
108248
108257
  clickEventAction: (external_prop_types_default()).string,
108258
+ extractClickData: (external_prop_types_default()).bool,
108249
108259
  customFields: (external_prop_types_default()).object,
108250
108260
  children: (external_prop_types_default()).node.isRequired
108251
108261
  };
@@ -108525,22 +108535,6 @@ var TopRibbon = function TopRibbon(_ref) {
108525
108535
  return null;
108526
108536
  }
108527
108537
  var editing = isEditingMode();
108528
-
108529
- /**
108530
- * Fires a GTM dataLayer event when a link is clicked.
108531
- * Does NOT call preventDefault — native target="_blank" behaviour is preserved.
108532
- * SSR-safe: guarded behind typeof window check.
108533
- *
108534
- * @param {Object} item - The navigation item that was clicked
108535
- */
108536
- var handleClick = function handleClick(item) {
108537
- if (typeof window === "undefined" || !Array.isArray(window.dataLayer)) return;
108538
- window.dataLayer.push(TopRibbon_objectSpread({
108539
- event: "top_ribbon_click",
108540
- link_text: item.label,
108541
- link_url: item.url
108542
- }, item.gtmEvent));
108543
- };
108544
108538
  return /*#__PURE__*/(0,jsx_runtime_.jsx)(StyledTopRibbon, {
108545
108539
  className: className,
108546
108540
  "data-testid": dataTestId,
@@ -108572,9 +108566,6 @@ var TopRibbon = function TopRibbon(_ref) {
108572
108566
  href: linkHref,
108573
108567
  target: "_blank",
108574
108568
  rel: "noopener noreferrer",
108575
- onClick: function onClick() {
108576
- return handleClick(item);
108577
- },
108578
108569
  "aria-label": linkAriaLabel,
108579
108570
  "data-testid": linkTestId,
108580
108571
  children: /*#__PURE__*/(0,jsx_runtime_.jsx)("span", TopRibbon_objectSpread(TopRibbon_objectSpread({}, editing ? (_item$$ = item.$) === null || _item$$ === void 0 ? void 0 : _item$$.label : null), {}, {
@@ -111218,14 +111209,30 @@ function LoyaltyComponent(_ref3) {
111218
111209
  LoyaltyComponent.propTypes = {
111219
111210
  data: (external_prop_types_default()).object
111220
111211
  };
111212
+ function TopRibbonComponent(_ref4) {
111213
+ var _data$top_ribbon_aria;
111214
+ var data = _ref4.data,
111215
+ _ref4$parentTags = _ref4.parentTags,
111216
+ parentTags = _ref4$parentTags === void 0 ? {} : _ref4$parentTags;
111217
+ if (!(data !== null && data !== void 0 && data.show_top_ribbon)) return null;
111218
+ return withTracking(/*#__PURE__*/(0,jsx_runtime_.jsx)("div", HeaderView_objectSpread(HeaderView_objectSpread(HeaderView_objectSpread({}, (parentTags === null || parentTags === void 0 ? void 0 : parentTags.top_ribbon) || {}), (parentTags === null || parentTags === void 0 ? void 0 : parentTags.top_ribbon__parent) || {}), {}, {
111219
+ children: /*#__PURE__*/(0,jsx_runtime_.jsx)(top_ribbon_TopRibbon, {
111220
+ links: [data],
111221
+ ariaLabel: (_data$top_ribbon_aria = data.top_ribbon_aria_label) !== null && _data$top_ribbon_aria !== void 0 ? _data$top_ribbon_aria : "Top Ribbon",
111222
+ dataTestId: "header-top-ribbon"
111223
+ })
111224
+ })), {
111225
+ componentType: "topRibbon"
111226
+ });
111227
+ }
111221
111228
  function LogoComponent(props) {
111222
111229
  return withTracking(/*#__PURE__*/(0,jsx_runtime_.jsx)(Brand, HeaderView_objectSpread({}, props)), {
111223
111230
  componentType: "logo"
111224
111231
  });
111225
111232
  }
111226
- function CartComponent(_ref4) {
111227
- var data = _ref4.data,
111228
- parent$ = _ref4.parent$;
111233
+ function CartComponent(_ref5) {
111234
+ var data = _ref5.data,
111235
+ parent$ = _ref5.parent$;
111229
111236
  return withTracking(/*#__PURE__*/(0,jsx_runtime_.jsx)(HeaderCartRegion, {
111230
111237
  data: data,
111231
111238
  parent$: parent$
@@ -111237,14 +111244,14 @@ CartComponent.propTypes = {
111237
111244
  data: (external_prop_types_default()).object,
111238
111245
  parent$: (external_prop_types_default()).object
111239
111246
  };
111240
- function HeaderView(_ref5) {
111241
- var _headerEntry$logo, _headerEntry$locale_s, _utilityLinksEntry$lo, _utilityLinksEntry$lo2, _headerEntry$cart, _storefrontParams$car, _headerEntry$$, _headerEntry$top_ribb, _headerEntry$market_s, _headerEntry$translat, _headerEntry$translat2, _topRibbon$top_ribbon, _headerEntry$$2, _ref6, _headerEntry$locale, _headerEntry$$3, _headerEntry$$4;
111242
- var country = _ref5.country,
111243
- language = _ref5.language,
111244
- locale = _ref5.locale,
111245
- headerEntry = _ref5.headerEntry,
111246
- searchConfig = _ref5.searchConfig,
111247
- storefrontParams = _ref5.storefrontParams;
111247
+ function HeaderView(_ref6) {
111248
+ var _headerEntry$logo, _headerEntry$locale_s, _utilityLinksEntry$lo, _utilityLinksEntry$lo2, _headerEntry$cart, _storefrontParams$car, _headerEntry$$, _headerEntry$top_ribb, _headerEntry$market_s, _headerEntry$translat, _headerEntry$translat2, _headerEntry$$2, _ref7, _headerEntry$locale, _headerEntry$$3, _headerEntry$$4;
111249
+ var country = _ref6.country,
111250
+ language = _ref6.language,
111251
+ locale = _ref6.locale,
111252
+ headerEntry = _ref6.headerEntry,
111253
+ searchConfig = _ref6.searchConfig,
111254
+ storefrontParams = _ref6.storefrontParams;
111248
111255
  var _useState = (0,external_react_.useState)(false),
111249
111256
  _useState2 = HeaderView_slicedToArray(_useState, 2),
111250
111257
  isMobileMenuOpen = _useState2[0],
@@ -111281,13 +111288,10 @@ function HeaderView(_ref5) {
111281
111288
  "data-country": country,
111282
111289
  "data-language": language,
111283
111290
  "data-locale": locale,
111284
- children: [(topRibbon === null || topRibbon === void 0 ? void 0 : topRibbon.show_top_ribbon) && /*#__PURE__*/(0,jsx_runtime_.jsx)("div", HeaderView_objectSpread(HeaderView_objectSpread(HeaderView_objectSpread({}, ($ === null || $ === void 0 ? void 0 : $.top_ribbon) || {}), ($ === null || $ === void 0 ? void 0 : $.top_ribbon__parent) || {}), {}, {
111285
- children: /*#__PURE__*/(0,jsx_runtime_.jsx)(top_ribbon_TopRibbon, {
111286
- links: [topRibbon],
111287
- ariaLabel: (_topRibbon$top_ribbon = topRibbon.top_ribbon_aria_label) !== null && _topRibbon$top_ribbon !== void 0 ? _topRibbon$top_ribbon : "Top Ribbon",
111288
- dataTestId: "header-top-ribbon"
111289
- })
111290
- })), /*#__PURE__*/(0,jsx_runtime_.jsxs)(TopHeaderRow, {
111291
+ children: [/*#__PURE__*/(0,jsx_runtime_.jsx)(TopRibbonComponent, {
111292
+ data: topRibbon,
111293
+ parentTags: $
111294
+ }), /*#__PURE__*/(0,jsx_runtime_.jsxs)(TopHeaderRow, {
111291
111295
  children: [/*#__PURE__*/(0,jsx_runtime_.jsx)(MobileMenuButton, {
111292
111296
  onClick: function onClick() {
111293
111297
  return setIsMobileMenuOpen(true);
@@ -111324,7 +111328,7 @@ function HeaderView(_ref5) {
111324
111328
  children: [/*#__PURE__*/(0,jsx_runtime_.jsx)(MarketSelector, {
111325
111329
  data: marketSelector,
111326
111330
  logo: logoData,
111327
- locale: String((_ref6 = (_headerEntry$locale = headerEntry === null || headerEntry === void 0 ? void 0 : headerEntry.locale) !== null && _headerEntry$locale !== void 0 ? _headerEntry$locale : locale) !== null && _ref6 !== void 0 ? _ref6 : "").trim(),
111331
+ locale: String((_ref7 = (_headerEntry$locale = headerEntry === null || headerEntry === void 0 ? void 0 : headerEntry.locale) !== null && _headerEntry$locale !== void 0 ? _headerEntry$locale : locale) !== null && _ref7 !== void 0 ? _ref7 : "").trim(),
111328
111332
  parent$: headerEntry === null || headerEntry === void 0 || (_headerEntry$$3 = headerEntry.$) === null || _headerEntry$$3 === void 0 ? void 0 : _headerEntry$$3.market_selector__0,
111329
111333
  mobileTriggerMode: "drawerPortal",
111330
111334
  drawerOpen: isMobileMenuOpen,
@@ -111382,6 +111386,10 @@ HeaderView.propTypes = {
111382
111386
  customerData: (external_prop_types_default()).object
111383
111387
  })
111384
111388
  };
111389
+ TopRibbonComponent.propTypes = {
111390
+ data: (external_prop_types_default()).object,
111391
+ parentTags: (external_prop_types_default()).object
111392
+ };
111385
111393
  ;// ./src/styles/Main.styled.js
111386
111394
 
111387
111395
  function Main_styled_EMOTION_STRINGIFIED_CSS_ERROR_() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }