@bigbinary/neeto-molecules 5.3.27 → 5.3.28

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWhatsNewChangesCount-C9DSz8TY.js","sources":["../../src/components/FloatingActionMenu/constants.js","../../src/components/FloatingActionMenu/hooks/useWhatsNewChangesCount.js"],"sourcesContent":["import { t } from \"i18next\";\n\nexport const MY_ORGANIZATION_URL = \"/auth/organization/edit\";\nexport const DELETE_WORKSPACE_URL = \"/auth/organization/delete\";\nexport const ENGAGE_WIDGET_TRIGGER_ID = \"neetoengage-trigger\";\n\nexport const DEFAULT_MENU_LINK_PROPS = {\n engageProps: {\n id: ENGAGE_WIDGET_TRIGGER_ID,\n label: t(\"neetoMolecules.sidebar.helpLinks.whatsNew\"),\n \"data-testid\": \"help-link-engage-button\",\n },\n keyboardShortcutProps: {\n label: t(\"neetoMolecules.sidebar.helpLinks.keyboardShortcuts\"),\n \"data-testid\": \"help-link-keyboard-shortcut-button\",\n },\n};\n\n// Theme switcher\nexport const APP_THEME_LOCALSTORAGE_KEY = \"appTheme\";\n\nexport const THEMES = {\n LIGHT: \"neeto-ui-theme--light\",\n DARK: \"neeto-ui-theme--dark\",\n};\n\nexport const NEETO_AUTH_BILLING_INFO_URL =\n \"/neeto_sso/api/v1/subscription/billing\";\n","import { useEffect, useState } from \"react\";\n\n// Shared source of truth for the neetoEngage changelog unread count.\n//\n// The widget reports the count by calling `window.Nv.onReceiveData({ unreadCount })`\n// and clears it via `window.Nv.onShow()`. Both the FloatingActionMenu and the\n// Sidebar surface this count, so this module installs a SINGLE set of\n// `window.Nv` handlers (chaining onto any pre-existing ones) and fans the value\n// out to every subscribed component. Installation happens on the first\n// subscriber and is torn down only when the last one unsubscribes — so\n// interleaved mount/unmount of the two surfaces can never leave a stale handler\n// on the global object.\n\nlet currentCount = null;\nconst subscribers = new Set();\nlet isInstalled = false;\nlet previousOnReceiveData;\nlet previousOnShow;\n\nconst notify = () => subscribers.forEach(setCount => setCount(currentCount));\n\nconst install = () => {\n if (isInstalled) return;\n isInstalled = true;\n\n const existing = window.Nv || {};\n previousOnReceiveData = existing.onReceiveData;\n previousOnShow = existing.onShow;\n\n window.Nv = Object.assign(existing, {\n onReceiveData: data => {\n previousOnReceiveData?.(data);\n // Only react to a numeric unreadCount; `0` clears the badge (a non-zero\n // count would otherwise stay stale until the pane is opened).\n if (typeof data?.unreadCount === \"number\") {\n currentCount = data.unreadCount || null;\n notify();\n }\n },\n onShow: () => {\n previousOnShow?.();\n currentCount = null;\n notify();\n },\n });\n};\n\nconst uninstall = () => {\n if (!isInstalled) return;\n isInstalled = false;\n\n if (window.Nv) {\n window.Nv.onReceiveData = previousOnReceiveData;\n window.Nv.onShow = previousOnShow;\n }\n currentCount = null;\n};\n\nconst useWhatsNewChangesCount = () => {\n const [changesCount, setChangesCount] = useState(currentCount);\n\n useEffect(() => {\n install();\n subscribers.add(setChangesCount);\n setChangesCount(currentCount);\n\n return () => {\n subscribers.delete(setChangesCount);\n if (subscribers.size === 0) uninstall();\n };\n }, []);\n\n return changesCount;\n};\n\nexport default useWhatsNewChangesCount;\n"],"names":["MY_ORGANIZATION_URL","DELETE_WORKSPACE_URL","ENGAGE_WIDGET_TRIGGER_ID","DEFAULT_MENU_LINK_PROPS","engageProps","id","label","t","keyboardShortcutProps","APP_THEME_LOCALSTORAGE_KEY","THEMES","LIGHT","DARK","NEETO_AUTH_BILLING_INFO_URL","currentCount","subscribers","Set","isInstalled","previousOnReceiveData","previousOnShow","notify","forEach","setCount","install","existing","window","Nv","onReceiveData","onShow","Object","assign","data","_previousOnReceiveDat","unreadCount","_previousOnShow","uninstall","useWhatsNewChangesCount","_useState","useState","_useState2","_slicedToArray","changesCount","setChangesCount","useEffect","add","size"],"mappings":"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"}
@@ -25,12 +25,13 @@ var axios = require('axios');
25
25
  var search = require('../search-DoXqXFel.js');
26
26
  var urls = require('../urls-DtjJggEY.js');
27
27
  var useBreakpoints = require('@bigbinary/neeto-commons-frontend/v2/react-utils/useBreakpoints');
28
- var i18next = require('i18next');
28
+ var useWhatsNewChangesCount = require('../useWhatsNewChangesCount-Bx_vHoMO.js');
29
29
  var createLucideIcon = require('../createLucideIcon-BbuuRL2u.js');
30
30
  var circleQuestionMark = require('../circle-question-mark-BijjM_4y.js');
31
31
  var chevronRight = require('../chevron-right-BVivH_B-.js');
32
32
  var user = require('../user-bZmvS8wE.js');
33
33
  var useLocalStorage = require('@bigbinary/neeto-commons-frontend/v2/react-utils/useLocalStorage');
34
+ var i18next = require('i18next');
34
35
  var utils = require('@bigbinary/neeto-commons-frontend/v2/utils');
35
36
  var axios$1 = require('@bigbinary/neeto-commons-frontend/v2/utils/axios');
36
37
  var general = require('@bigbinary/neeto-commons-frontend/v2/utils/general');
@@ -573,39 +574,6 @@ var Modal = reactUtils.withT(function (_ref) {
573
574
  });
574
575
  });
575
576
 
576
- var MY_ORGANIZATION_URL = "/auth/organization/edit";
577
- var BILLING_URL = "/auth/admin_billing";
578
- var DELETE_WORKSPACE_URL = "/auth/organization/delete";
579
- var ENGAGE_WIDGET_TRIGGER_ID = "neetoengage-trigger";
580
- var DEFAULT_MENU_LINK_PROPS = {
581
- engageProps: {
582
- id: ENGAGE_WIDGET_TRIGGER_ID,
583
- label: i18next.t("neetoMolecules.sidebar.helpLinks.whatsNew"),
584
- "data-testid": "help-link-engage-button"
585
- },
586
- keyboardShortcutProps: {
587
- label: i18next.t("neetoMolecules.sidebar.helpLinks.keyboardShortcuts"),
588
- "data-testid": "help-link-keyboard-shortcut-button"
589
- }
590
- };
591
-
592
- // Theme switcher
593
- var APP_THEME_LOCALSTORAGE_KEY = "appTheme";
594
- var THEMES = {
595
- LIGHT: "light",
596
- DARK: "dark"
597
- };
598
-
599
- // Legacy neetoUI theme classes — kept until full migration is complete.
600
- var LEGACY_THEMES = {
601
- LIGHT: "neeto-ui-theme--light",
602
- DARK: "neeto-ui-theme--dark"
603
- };
604
- var NEETO_AUTH_BILLING_INFO_URL = "/neeto_sso/api/v1/subscription/billing";
605
- var MENU_ITEM_CLASSES = "gap-2.5 px-2.5 py-2 font-medium [&>[data-slot=menu-item-prefix]>svg]:!size-[18px] [&>[data-slot=menu-item-suffix]>svg]:!size-[18px]";
606
- var THEME_BUTTON_BASE = "relative z-10 flex items-center justify-center gap-1 rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors focus-visible:outline-none";
607
- var THEME_ICON_BASE = "transition-transform duration-300 ease-out";
608
-
609
577
  var _excluded$2 = ["className"];
610
578
  function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
611
579
  function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -613,7 +581,7 @@ var MenuItem = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
613
581
  var className = _ref.className,
614
582
  props = _objectWithoutProperties(_ref, _excluded$2);
615
583
  return /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu.MenuItem, _objectSpread$4({
616
- className: classnames(MENU_ITEM_CLASSES, className),
584
+ className: classnames(useWhatsNewChangesCount.MENU_ITEM_CLASSES, className),
617
585
  ref: forwardedRef
618
586
  }, props));
619
587
  });
@@ -695,7 +663,7 @@ var MobileHelpMenu = function MobileHelpMenu() {
695
663
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
696
664
  asChild: true,
697
665
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
698
- className: classnames("group", MENU_ITEM_CLASSES),
666
+ className: classnames("group", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
699
667
  "data-testid": "help-menu-button",
700
668
  onSelect: function onSelect(e) {
701
669
  return e.preventDefault();
@@ -726,7 +694,7 @@ var HelpMenu = function HelpMenu() {
726
694
  if (isMobile) return /*#__PURE__*/jsxRuntime.jsx(MobileHelpMenu, {});
727
695
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
728
696
  children: [/*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSubTrigger, {
729
- className: MENU_ITEM_CLASSES,
697
+ className: useWhatsNewChangesCount.MENU_ITEM_CLASSES,
730
698
  "data-testid": "help-menu-button",
731
699
  children: [/*#__PURE__*/jsxRuntime.jsx(circleQuestionMark.CircleQuestionMark, {
732
700
  className: "size-[18px]"
@@ -856,7 +824,7 @@ var MobileOrganizationSwitcher = function MobileOrganizationSwitcher(_ref) {
856
824
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
857
825
  asChild: true,
858
826
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
859
- className: classnames("group", MENU_ITEM_CLASSES),
827
+ className: classnames("group", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
860
828
  "data-testid": "organization-switcher-button",
861
829
  onSelect: function onSelect(e) {
862
830
  return e.preventDefault();
@@ -899,7 +867,7 @@ var OrganizationSwitcher = function OrganizationSwitcher() {
899
867
  }
900
868
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
901
869
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
902
- className: MENU_ITEM_CLASSES,
870
+ className: useWhatsNewChangesCount.MENU_ITEM_CLASSES,
903
871
  "data-testid": "organization-switcher-button",
904
872
  children: /*#__PURE__*/jsxRuntime.jsx("span", {
905
873
  className: "flex-1",
@@ -921,7 +889,7 @@ var Dropdown = reactUtils.withT(function (_ref) {
921
889
  var t = _ref.t;
922
890
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
923
891
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
924
- className: MENU_ITEM_CLASSES,
892
+ className: useWhatsNewChangesCount.MENU_ITEM_CLASSES,
925
893
  "data-testid": "product-switcher-button",
926
894
  children: t("neetoMolecules.sidebar.productSwitcher")
927
895
  }), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubContent, {
@@ -970,7 +938,7 @@ var ProfileItems = reactUtils.withT(function (_ref) {
970
938
  children: t("neetoMolecules.sidebar.myProfile")
971
939
  }), ((_window$globalProps = window.globalProps) === null || _window$globalProps === void 0 || (_window$globalProps = _window$globalProps.user) === null || _window$globalProps === void 0 ? void 0 : _window$globalProps.isOwner) && /*#__PURE__*/jsxRuntime.jsx(MenuItem, {
972
940
  "data-testid": "profile-cancel-account-button",
973
- href: DELETE_WORKSPACE_URL,
941
+ href: useWhatsNewChangesCount.DELETE_WORKSPACE_URL,
974
942
  prefix: /*#__PURE__*/jsxRuntime.jsx(CircleX, {
975
943
  size: 18
976
944
  }),
@@ -1030,7 +998,7 @@ var MobileProfileExpandMenu = function MobileProfileExpandMenu(_ref) {
1030
998
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
1031
999
  asChild: true,
1032
1000
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
1033
- className: classnames("group", MENU_ITEM_CLASSES),
1001
+ className: classnames("group", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
1034
1002
  "data-testid": "profile-expand-menu-button",
1035
1003
  onSelect: function onSelect(e) {
1036
1004
  return e.preventDefault();
@@ -1070,7 +1038,7 @@ var ProfileExpandMenu = function ProfileExpandMenu(_ref) {
1070
1038
  }
1071
1039
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
1072
1040
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
1073
- className: classnames("group items-center", MENU_ITEM_CLASSES),
1041
+ className: classnames("group items-center", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
1074
1042
  "data-testid": "profile-expand-menu-button",
1075
1043
  children: /*#__PURE__*/jsxRuntime.jsx(ProfileHeader, {
1076
1044
  profileInfo: profileInfo
@@ -1134,30 +1102,30 @@ var getProfileInfo = function getProfileInfo(profileInfoOverrides, isConsumer) {
1134
1102
  // Theme switcher utils.
1135
1103
  var setDarkTheme = function setDarkTheme() {
1136
1104
  if (!document.body) return;
1137
- document.body.classList.remove(THEMES.LIGHT, LEGACY_THEMES.LIGHT);
1138
- document.body.classList.add(THEMES.DARK, LEGACY_THEMES.DARK);
1105
+ document.body.classList.remove(useWhatsNewChangesCount.THEMES.LIGHT, useWhatsNewChangesCount.LEGACY_THEMES.LIGHT);
1106
+ document.body.classList.add(useWhatsNewChangesCount.THEMES.DARK, useWhatsNewChangesCount.LEGACY_THEMES.DARK);
1139
1107
  };
1140
1108
  var setLightTheme = function setLightTheme() {
1141
1109
  if (!document.body) return;
1142
- document.body.classList.remove(THEMES.DARK, LEGACY_THEMES.DARK);
1143
- document.body.classList.add(THEMES.LIGHT, LEGACY_THEMES.LIGHT);
1110
+ document.body.classList.remove(useWhatsNewChangesCount.THEMES.DARK, useWhatsNewChangesCount.LEGACY_THEMES.DARK);
1111
+ document.body.classList.add(useWhatsNewChangesCount.THEMES.LIGHT, useWhatsNewChangesCount.LEGACY_THEMES.LIGHT);
1144
1112
  };
1145
1113
  var setAppTheme = function setAppTheme() {
1146
- var storedTheme = utils.getFromLocalStorage(APP_THEME_LOCALSTORAGE_KEY);
1147
- var isDarkTheme = storedTheme === THEMES.DARK || storedTheme === LEGACY_THEMES.DARK;
1114
+ var storedTheme = utils.getFromLocalStorage(useWhatsNewChangesCount.APP_THEME_LOCALSTORAGE_KEY);
1115
+ var isDarkTheme = storedTheme === useWhatsNewChangesCount.THEMES.DARK || storedTheme === useWhatsNewChangesCount.LEGACY_THEMES.DARK;
1148
1116
  isDarkTheme ? setDarkTheme() : setLightTheme();
1149
1117
  };
1150
1118
 
1151
1119
  var ThemeSwitcher = function ThemeSwitcher() {
1152
1120
  var _useTranslation = reactI18next.useTranslation(),
1153
1121
  t = _useTranslation.t;
1154
- var _useLocalStorage = useLocalStorage(APP_THEME_LOCALSTORAGE_KEY, THEMES.LIGHT),
1122
+ var _useLocalStorage = useLocalStorage(useWhatsNewChangesCount.APP_THEME_LOCALSTORAGE_KEY, useWhatsNewChangesCount.THEMES.LIGHT),
1155
1123
  _useLocalStorage2 = _slicedToArray(_useLocalStorage, 2),
1156
1124
  appTheme = _useLocalStorage2[0],
1157
1125
  setAppTheme = _useLocalStorage2[1];
1158
- var isDarkThemeSelected = appTheme === THEMES.DARK || appTheme === LEGACY_THEMES.DARK;
1126
+ var isDarkThemeSelected = appTheme === useWhatsNewChangesCount.THEMES.DARK || appTheme === useWhatsNewChangesCount.LEGACY_THEMES.DARK;
1159
1127
  var switchTheme = function switchTheme(theme) {
1160
- theme === THEMES.LIGHT ? setLightTheme() : setDarkTheme();
1128
+ theme === useWhatsNewChangesCount.THEMES.LIGHT ? setLightTheme() : setDarkTheme();
1161
1129
  setAppTheme(theme);
1162
1130
  };
1163
1131
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -1182,34 +1150,34 @@ var ThemeSwitcher = function ThemeSwitcher() {
1182
1150
  asChild: true,
1183
1151
  onSelect: function onSelect(e) {
1184
1152
  e.preventDefault();
1185
- switchTheme(THEMES.LIGHT);
1153
+ switchTheme(useWhatsNewChangesCount.THEMES.LIGHT);
1186
1154
  },
1187
1155
  children: /*#__PURE__*/jsxRuntime.jsxs("button", {
1188
1156
  "aria-checked": !isDarkThemeSelected,
1189
1157
  "data-testid": "theme-switcher-light-button",
1190
1158
  role: "menuitemradio",
1191
1159
  type: "button",
1192
- className: classnames(THEME_BUTTON_BASE, isDarkThemeSelected ? "text-muted-foreground hover:text-foreground" : "text-foreground"),
1160
+ className: classnames(useWhatsNewChangesCount.THEME_BUTTON_BASE, isDarkThemeSelected ? "text-muted-foreground hover:text-foreground" : "text-foreground"),
1193
1161
  children: [/*#__PURE__*/jsxRuntime.jsx(Sun, {
1194
1162
  size: 13,
1195
- className: classnames(THEME_ICON_BASE, isDarkThemeSelected ? "scale-90 -rotate-45" : "rotate-0")
1163
+ className: classnames(useWhatsNewChangesCount.THEME_ICON_BASE, isDarkThemeSelected ? "scale-90 -rotate-45" : "rotate-0")
1196
1164
  }), t("neetoMolecules.sidebar.themeSwitcher.light")]
1197
1165
  })
1198
1166
  }), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuItem, {
1199
1167
  asChild: true,
1200
1168
  onSelect: function onSelect(e) {
1201
1169
  e.preventDefault();
1202
- switchTheme(THEMES.DARK);
1170
+ switchTheme(useWhatsNewChangesCount.THEMES.DARK);
1203
1171
  },
1204
1172
  children: /*#__PURE__*/jsxRuntime.jsxs("button", {
1205
1173
  "aria-checked": isDarkThemeSelected,
1206
1174
  "data-testid": "theme-switcher-dark-button",
1207
1175
  role: "menuitemradio",
1208
1176
  type: "button",
1209
- className: classnames(THEME_BUTTON_BASE, isDarkThemeSelected ? "text-foreground" : "text-muted-foreground hover:text-foreground"),
1177
+ className: classnames(useWhatsNewChangesCount.THEME_BUTTON_BASE, isDarkThemeSelected ? "text-foreground" : "text-muted-foreground hover:text-foreground"),
1210
1178
  children: [/*#__PURE__*/jsxRuntime.jsx(Moon, {
1211
1179
  size: 13,
1212
- className: classnames(THEME_ICON_BASE, isDarkThemeSelected ? "rotate-0" : "scale-90 rotate-45")
1180
+ className: classnames(useWhatsNewChangesCount.THEME_ICON_BASE, isDarkThemeSelected ? "rotate-0" : "scale-90 rotate-45")
1213
1181
  }), t("neetoMolecules.sidebar.themeSwitcher.dark")]
1214
1182
  })
1215
1183
  })]
@@ -1246,13 +1214,13 @@ var WorkspaceItems = reactUtils.withT(function (_ref) {
1246
1214
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1247
1215
  children: [/*#__PURE__*/jsxRuntime.jsx(MenuItem, {
1248
1216
  "data-testid": "profile-organization-settings-button",
1249
- href: MY_ORGANIZATION_URL,
1217
+ href: useWhatsNewChangesCount.MY_ORGANIZATION_URL,
1250
1218
  rel: "noreferrer",
1251
1219
  target: "_blank",
1252
1220
  children: t("neetoMolecules.sidebar.workspaceMenu.settings")
1253
1221
  }), /*#__PURE__*/jsxRuntime.jsx(MenuItem, {
1254
1222
  "data-testid": "profile-organization-billing-button",
1255
- href: BILLING_URL,
1223
+ href: useWhatsNewChangesCount.BILLING_URL,
1256
1224
  children: t("neetoMolecules.sidebar.workspaceMenu.billing")
1257
1225
  }), ((_globalProps$organiza = initializers.globalProps.organization) === null || _globalProps$organiza === void 0 ? void 0 : _globalProps$organiza.subdomain) && /*#__PURE__*/jsxRuntime.jsx("div", {
1258
1226
  className: "border-border my-1 border-t"
@@ -1299,7 +1267,7 @@ var MobileWorkspaceMenu = function MobileWorkspaceMenu() {
1299
1267
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
1300
1268
  asChild: true,
1301
1269
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
1302
- className: classnames("group items-center", MENU_ITEM_CLASSES),
1270
+ className: classnames("group items-center", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
1303
1271
  "data-testid": "workspace-display",
1304
1272
  onSelect: function onSelect(e) {
1305
1273
  return e.preventDefault();
@@ -1323,7 +1291,7 @@ var WorkspaceMenu = function WorkspaceMenu() {
1323
1291
  if (isMobile) return /*#__PURE__*/jsxRuntime.jsx(MobileWorkspaceMenu, {});
1324
1292
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
1325
1293
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
1326
- className: classnames("group items-center", MENU_ITEM_CLASSES),
1294
+ className: classnames("group items-center", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
1327
1295
  "data-testid": "workspace-display",
1328
1296
  children: /*#__PURE__*/jsxRuntime.jsx(TriggerContent, {})
1329
1297
  }), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubContent, {
@@ -1371,7 +1339,7 @@ var ProfileMenu = function ProfileMenu(_ref) {
1371
1339
  };
1372
1340
  }
1373
1341
  return {
1374
- href: NEETO_AUTH_BILLING_INFO_URL
1342
+ href: useWhatsNewChangesCount.NEETO_AUTH_BILLING_INFO_URL
1375
1343
  };
1376
1344
  };
1377
1345
  var subscriptionPlanLink = _objectSpread$2({
@@ -1462,10 +1430,7 @@ var ProfileButton = function ProfileButton(_ref) {
1462
1430
  _useState6 = _slicedToArray(_useState5, 2),
1463
1431
  isMenuOpen = _useState6[0],
1464
1432
  setIsMenuOpen = _useState6[1];
1465
- var _useState7 = React.useState(null),
1466
- _useState8 = _slicedToArray(_useState7, 2),
1467
- changesCount = _useState8[0],
1468
- setChangesCount = _useState8[1];
1433
+ var changesCount = useWhatsNewChangesCount.useWhatsNewChangesCount();
1469
1434
  var _KeyboardShortcuts$us = v2_KeyboardShortcuts.usePaneState(),
1470
1435
  _KeyboardShortcuts$us2 = _slicedToArray(_KeyboardShortcuts$us, 2),
1471
1436
  setIsOpen = _KeyboardShortcuts$us2[1];
@@ -1475,21 +1440,9 @@ var ProfileButton = function ProfileButton(_ref) {
1475
1440
  mode: "global"
1476
1441
  });
1477
1442
  var profileInfo = getProfileInfo(profileInfoOverrides, isConsumer);
1478
- React.useEffect(function () {
1479
- var Nv = {
1480
- onReceiveData: function onReceiveData(data) {
1481
- if (!data.unreadCount) return;
1482
- setChangesCount(data.unreadCount);
1483
- },
1484
- onShow: function onShow() {
1485
- setChangesCount(null);
1486
- }
1487
- };
1488
- window.Nv = window.Nv ? Object.assign(window.Nv, Nv) : Nv;
1489
- }, []);
1490
1443
  var newBottomLinks = [].concat(_toConsumableArray(getDefaultBottomLinks(profileInfo.isAuthenticated, isConsumer)), _toConsumableArray(bottomLinks));
1491
- var defaultLinks = Object.keys(DEFAULT_MENU_LINK_PROPS).map(function (key) {
1492
- return _objectSpread$1(_objectSpread$1(_objectSpread$1({}, DEFAULT_MENU_LINK_PROPS[key]), key === "keyboardShortcutProps" && {
1444
+ var defaultLinks = Object.keys(useWhatsNewChangesCount.DEFAULT_MENU_LINK_PROPS).map(function (key) {
1445
+ return _objectSpread$1(_objectSpread$1(_objectSpread$1({}, useWhatsNewChangesCount.DEFAULT_MENU_LINK_PROPS[key]), key === "keyboardShortcutProps" && {
1493
1446
  onClick: function onClick() {
1494
1447
  return setIsOpen(function (prev) {
1495
1448
  return !prev;