@bigbinary/neeto-molecules 5.5.0-beta1 → 5.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/BrowserSupport.js +116 -51
  2. package/dist/BrowserSupport.js.map +1 -1
  3. package/dist/{Columns-C20zru7a.js → Columns-CpCh1cnJ.js} +6 -4
  4. package/dist/Columns-CpCh1cnJ.js.map +1 -0
  5. package/dist/{ConfigureView-D-2SQf3j.js → ConfigureView-re6uU4Lp.js} +6 -4
  6. package/dist/ConfigureView-re6uU4Lp.js.map +1 -0
  7. package/dist/EmailForm.js +3 -1
  8. package/dist/EmailForm.js.map +1 -1
  9. package/dist/FinderModal.js +14 -1
  10. package/dist/FinderModal.js.map +1 -1
  11. package/dist/FloatingActionMenu.js +175 -55
  12. package/dist/FloatingActionMenu.js.map +1 -1
  13. package/dist/IpRestriction.js +19 -9
  14. package/dist/IpRestriction.js.map +1 -1
  15. package/dist/ProductEmbed.js +35 -23
  16. package/dist/ProductEmbed.js.map +1 -1
  17. package/dist/ShareViaLink.js +4 -4
  18. package/dist/ShareViaLink.js.map +1 -1
  19. package/dist/Sidebar.js +43 -5
  20. package/dist/Sidebar.js.map +1 -1
  21. package/dist/StickyRibbonsContainer.js +27 -18
  22. package/dist/StickyRibbonsContainer.js.map +1 -1
  23. package/dist/cjs/BrowserSupport.js +119 -51
  24. package/dist/cjs/BrowserSupport.js.map +1 -1
  25. package/dist/cjs/{Columns-rqa7goJu.js → Columns-Gcp48xQM.js} +5 -3
  26. package/dist/cjs/Columns-Gcp48xQM.js.map +1 -0
  27. package/dist/cjs/{ConfigureView-CNWEfiae.js → ConfigureView-CAdrpELW.js} +6 -4
  28. package/dist/cjs/ConfigureView-CAdrpELW.js.map +1 -0
  29. package/dist/cjs/EmailForm.js +3 -1
  30. package/dist/cjs/EmailForm.js.map +1 -1
  31. package/dist/cjs/FinderModal.js +14 -1
  32. package/dist/cjs/FinderModal.js.map +1 -1
  33. package/dist/cjs/FloatingActionMenu.js +189 -69
  34. package/dist/cjs/FloatingActionMenu.js.map +1 -1
  35. package/dist/cjs/IpRestriction.js +19 -9
  36. package/dist/cjs/IpRestriction.js.map +1 -1
  37. package/dist/cjs/ProductEmbed.js +34 -22
  38. package/dist/cjs/ProductEmbed.js.map +1 -1
  39. package/dist/cjs/ShareViaLink.js +4 -4
  40. package/dist/cjs/ShareViaLink.js.map +1 -1
  41. package/dist/cjs/Sidebar.js +43 -5
  42. package/dist/cjs/Sidebar.js.map +1 -1
  43. package/dist/cjs/StickyRibbonsContainer.js +29 -20
  44. package/dist/cjs/StickyRibbonsContainer.js.map +1 -1
  45. package/dist/cjs/mail-Di35Ay-Z.js +20 -0
  46. package/dist/cjs/mail-Di35Ay-Z.js.map +1 -0
  47. package/dist/cjs/performanceDiagnostics-CS7NTxaH.js +93 -0
  48. package/dist/cjs/performanceDiagnostics-CS7NTxaH.js.map +1 -0
  49. package/dist/cjs/{phone-number-DVlbgxBG.js → phone-number-BydWe8Mf.js} +22 -3
  50. package/dist/cjs/phone-number-BydWe8Mf.js.map +1 -0
  51. package/dist/cjs/useWhatsNewChangesCount-BVkLLk7f.js +121 -0
  52. package/dist/cjs/useWhatsNewChangesCount-BVkLLk7f.js.map +1 -0
  53. package/dist/cjs/useWhatsNewChangesCount-CyOUS5U3.js +106 -0
  54. package/dist/cjs/useWhatsNewChangesCount-CyOUS5U3.js.map +1 -0
  55. package/dist/cjs/v2/BrowserSupport.js +119 -51
  56. package/dist/cjs/v2/BrowserSupport.js.map +1 -1
  57. package/dist/cjs/v2/Builder.js +17 -13
  58. package/dist/cjs/v2/Builder.js.map +1 -1
  59. package/dist/cjs/v2/CalendarView.js +2 -2
  60. package/dist/cjs/v2/Columns.js +1 -1
  61. package/dist/cjs/v2/ConfigurePageSidebar.js +1 -1
  62. package/dist/cjs/v2/DndTable.js +1 -0
  63. package/dist/cjs/v2/DndTable.js.map +1 -1
  64. package/dist/cjs/v2/DynamicVariables.js +17 -8
  65. package/dist/cjs/v2/DynamicVariables.js.map +1 -1
  66. package/dist/cjs/v2/EmailForm.js +97 -10
  67. package/dist/cjs/v2/EmailForm.js.map +1 -1
  68. package/dist/cjs/v2/EmailPreview.js +1 -1
  69. package/dist/cjs/v2/EmailPreview.js.map +1 -1
  70. package/dist/cjs/v2/Engagements.js +10 -7
  71. package/dist/cjs/v2/Engagements.js.map +1 -1
  72. package/dist/cjs/v2/FinderModal.js +104 -72
  73. package/dist/cjs/v2/FinderModal.js.map +1 -1
  74. package/dist/cjs/v2/FloatingActionMenu.js +267 -110
  75. package/dist/cjs/v2/FloatingActionMenu.js.map +1 -1
  76. package/dist/cjs/v2/IpRestriction.js +17 -7
  77. package/dist/cjs/v2/IpRestriction.js.map +1 -1
  78. package/dist/cjs/v2/MadeWith.js +5 -3
  79. package/dist/cjs/v2/MadeWith.js.map +1 -1
  80. package/dist/cjs/v2/MoreDropdown.js +5 -2
  81. package/dist/cjs/v2/MoreDropdown.js.map +1 -1
  82. package/dist/cjs/v2/OptionFields.js +1 -0
  83. package/dist/cjs/v2/OptionFields.js.map +1 -1
  84. package/dist/cjs/v2/PhoneNumber.js +1 -1
  85. package/dist/cjs/v2/ProductEmbed.js +25 -13
  86. package/dist/cjs/v2/ProductEmbed.js.map +1 -1
  87. package/dist/cjs/v2/SessionEnvironment.js +3 -16
  88. package/dist/cjs/v2/SessionEnvironment.js.map +1 -1
  89. package/dist/cjs/v2/Sidebar.js +95 -32
  90. package/dist/cjs/v2/Sidebar.js.map +1 -1
  91. package/dist/cjs/v2/StickyRibbonsContainer.js +29 -19
  92. package/dist/cjs/v2/StickyRibbonsContainer.js.map +1 -1
  93. package/dist/cjs/v2/SubHeader.js +1 -1
  94. package/dist/cjs/v2/Taxonomy.js +1 -1
  95. package/dist/mail-CkquKByM.js +18 -0
  96. package/dist/mail-CkquKByM.js.map +1 -0
  97. package/dist/performanceDiagnostics-DJcT0dfG.js +88 -0
  98. package/dist/performanceDiagnostics-DJcT0dfG.js.map +1 -0
  99. package/dist/{phone-number-ClrmOx58.js → phone-number-n0BLV3g6.js} +24 -5
  100. package/dist/phone-number-n0BLV3g6.js.map +1 -0
  101. package/dist/useWhatsNewChangesCount-C71JkNHv.js +96 -0
  102. package/dist/useWhatsNewChangesCount-C71JkNHv.js.map +1 -0
  103. package/dist/useWhatsNewChangesCount-CQxhUCpt.js +106 -0
  104. package/dist/useWhatsNewChangesCount-CQxhUCpt.js.map +1 -0
  105. package/dist/v2/BrowserSupport.js +116 -51
  106. package/dist/v2/BrowserSupport.js.map +1 -1
  107. package/dist/v2/Builder.js +17 -13
  108. package/dist/v2/Builder.js.map +1 -1
  109. package/dist/v2/CalendarView.js +2 -2
  110. package/dist/v2/Columns.js +1 -1
  111. package/dist/v2/ConfigurePageSidebar.js +1 -1
  112. package/dist/v2/DndTable.js +1 -0
  113. package/dist/v2/DndTable.js.map +1 -1
  114. package/dist/v2/DynamicVariables.js +18 -9
  115. package/dist/v2/DynamicVariables.js.map +1 -1
  116. package/dist/v2/EmailForm.js +100 -13
  117. package/dist/v2/EmailForm.js.map +1 -1
  118. package/dist/v2/EmailPreview.js +1 -1
  119. package/dist/v2/EmailPreview.js.map +1 -1
  120. package/dist/v2/Engagements.js +10 -7
  121. package/dist/v2/Engagements.js.map +1 -1
  122. package/dist/v2/FinderModal.js +105 -73
  123. package/dist/v2/FinderModal.js.map +1 -1
  124. package/dist/v2/FloatingActionMenu.js +238 -81
  125. package/dist/v2/FloatingActionMenu.js.map +1 -1
  126. package/dist/v2/IpRestriction.js +17 -7
  127. package/dist/v2/IpRestriction.js.map +1 -1
  128. package/dist/v2/MadeWith.js +5 -3
  129. package/dist/v2/MadeWith.js.map +1 -1
  130. package/dist/v2/MoreDropdown.js +5 -2
  131. package/dist/v2/MoreDropdown.js.map +1 -1
  132. package/dist/v2/OptionFields.js +1 -0
  133. package/dist/v2/OptionFields.js.map +1 -1
  134. package/dist/v2/PhoneNumber.js +2 -2
  135. package/dist/v2/ProductEmbed.js +26 -14
  136. package/dist/v2/ProductEmbed.js.map +1 -1
  137. package/dist/v2/SessionEnvironment.js +2 -15
  138. package/dist/v2/SessionEnvironment.js.map +1 -1
  139. package/dist/v2/Sidebar.js +95 -32
  140. package/dist/v2/Sidebar.js.map +1 -1
  141. package/dist/v2/StickyRibbonsContainer.js +27 -17
  142. package/dist/v2/StickyRibbonsContainer.js.map +1 -1
  143. package/dist/v2/SubHeader.js +1 -1
  144. package/dist/v2/Taxonomy.js +1 -1
  145. package/package.json +8 -8
  146. package/src/translations/ar.json +19 -3
  147. package/src/translations/bg.json +19 -3
  148. package/src/translations/ca.json +19 -3
  149. package/src/translations/cs.json +19 -3
  150. package/src/translations/da.json +19 -3
  151. package/src/translations/de.json +19 -3
  152. package/src/translations/en.json +18 -2
  153. package/src/translations/es-MX.json +19 -3
  154. package/src/translations/es.json +19 -3
  155. package/src/translations/et.json +19 -3
  156. package/src/translations/fi.json +19 -3
  157. package/src/translations/fil.json +19 -3
  158. package/src/translations/fr.json +19 -3
  159. package/src/translations/he.json +19 -3
  160. package/src/translations/hi.json +19 -3
  161. package/src/translations/hr.json +19 -3
  162. package/src/translations/hu.json +19 -3
  163. package/src/translations/id.json +19 -3
  164. package/src/translations/it.json +19 -3
  165. package/src/translations/ja.json +19 -3
  166. package/src/translations/ko.json +19 -3
  167. package/src/translations/lv.json +995 -0
  168. package/src/translations/nl.json +19 -3
  169. package/src/translations/pl.json +19 -3
  170. package/src/translations/pt-BR.json +19 -3
  171. package/src/translations/pt.json +19 -3
  172. package/src/translations/ro.json +19 -3
  173. package/src/translations/ru.json +19 -3
  174. package/src/translations/sk.json +19 -3
  175. package/src/translations/sl.json +19 -3
  176. package/src/translations/sv.json +19 -3
  177. package/src/translations/th.json +19 -3
  178. package/src/translations/tr.json +19 -3
  179. package/src/translations/uk.json +19 -3
  180. package/src/translations/vi.json +19 -3
  181. package/src/translations/zh-CN.json +19 -3
  182. package/src/translations/zh-TW.json +19 -3
  183. package/types/BrowserSupport.d.ts +128 -39
  184. package/types/v2/EmailForm.d.ts +1 -0
  185. package/types/v2/EmailFormProvider.d.ts +3 -1
  186. package/dist/Columns-C20zru7a.js.map +0 -1
  187. package/dist/ConfigureView-D-2SQf3j.js.map +0 -1
  188. package/dist/cjs/Columns-rqa7goJu.js.map +0 -1
  189. package/dist/cjs/ConfigureView-CNWEfiae.js.map +0 -1
  190. package/dist/cjs/phone-number-DVlbgxBG.js.map +0 -1
  191. package/dist/phone-number-ClrmOx58.js.map +0 -1
@@ -23,17 +23,20 @@ var jsxRuntime = require('react/jsx-runtime');
23
23
  var reactQuery = require('@tanstack/react-query');
24
24
  var axios = require('axios');
25
25
  var search = require('../search-DoXqXFel.js');
26
+ var performanceDiagnostics = require('../performanceDiagnostics-CS7NTxaH.js');
26
27
  var useBreakpoints = require('@bigbinary/neeto-commons-frontend/v2/react-utils/useBreakpoints');
27
- var i18next = require('i18next');
28
+ var useWhatsNewChangesCount = require('../useWhatsNewChangesCount-BVkLLk7f.js');
28
29
  var createLucideIcon = require('../createLucideIcon-BbuuRL2u.js');
29
30
  var circleQuestionMark = require('../circle-question-mark-BijjM_4y.js');
30
31
  var chevronRight = require('../chevron-right-BVivH_B-.js');
31
32
  var user = require('../user-bZmvS8wE.js');
32
33
  var useLocalStorage = require('@bigbinary/neeto-commons-frontend/v2/react-utils/useLocalStorage');
34
+ var i18next = require('i18next');
33
35
  var utils = require('@bigbinary/neeto-commons-frontend/v2/utils');
34
36
  var axios$1 = require('@bigbinary/neeto-commons-frontend/v2/utils/axios');
35
37
  var general = require('@bigbinary/neeto-commons-frontend/v2/utils/general');
36
38
  var v2_CopyToClipboardButton = require('./CopyToClipboardButton.js');
39
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
37
40
  require('../useKeyboardShortcutsPaneState-DZUnpw9v.js');
38
41
  require('zustand/shallow');
39
42
  require('@bigbinary/neeto-commons-frontend/v2/react-utils/withImmutableActions');
@@ -70,7 +73,7 @@ var AppIcons__namespace = /*#__PURE__*/_interopNamespaceDefault(AppIcons);
70
73
  */
71
74
 
72
75
 
73
- const __iconNode$9 = [
76
+ const __iconNode$c = [
74
77
  [
75
78
  "path",
76
79
  {
@@ -79,7 +82,7 @@ const __iconNode$9 = [
79
82
  }
80
83
  ]
81
84
  ];
82
- const Activity = createLucideIcon.createLucideIcon("activity", __iconNode$9);
85
+ const Activity = createLucideIcon.createLucideIcon("activity", __iconNode$c);
83
86
 
84
87
  /**
85
88
  * @license lucide-react v1.24.0 - ISC
@@ -89,7 +92,7 @@ const Activity = createLucideIcon.createLucideIcon("activity", __iconNode$9);
89
92
  */
90
93
 
91
94
 
92
- const __iconNode$8 = [
95
+ const __iconNode$b = [
93
96
  ["path", { d: "M12 7v14", key: "1akyts" }],
94
97
  [
95
98
  "path",
@@ -99,7 +102,7 @@ const __iconNode$8 = [
99
102
  }
100
103
  ]
101
104
  ];
102
- const BookOpen = createLucideIcon.createLucideIcon("book-open", __iconNode$8);
105
+ const BookOpen = createLucideIcon.createLucideIcon("book-open", __iconNode$b);
103
106
 
104
107
  /**
105
108
  * @license lucide-react v1.24.0 - ISC
@@ -109,11 +112,11 @@ const BookOpen = createLucideIcon.createLucideIcon("book-open", __iconNode$8);
109
112
  */
110
113
 
111
114
 
112
- const __iconNode$7 = [
115
+ const __iconNode$a = [
113
116
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
114
117
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
115
118
  ];
116
- const CircleCheck = createLucideIcon.createLucideIcon("circle-check", __iconNode$7);
119
+ const CircleCheck = createLucideIcon.createLucideIcon("circle-check", __iconNode$a);
117
120
 
118
121
  /**
119
122
  * @license lucide-react v1.24.0 - ISC
@@ -123,12 +126,12 @@ const CircleCheck = createLucideIcon.createLucideIcon("circle-check", __iconNode
123
126
  */
124
127
 
125
128
 
126
- const __iconNode$6 = [
129
+ const __iconNode$9 = [
127
130
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
128
131
  ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
129
132
  ["path", { d: "m9 9 6 6", key: "z0biqf" }]
130
133
  ];
131
- const CircleX = createLucideIcon.createLucideIcon("circle-x", __iconNode$6);
134
+ const CircleX = createLucideIcon.createLucideIcon("circle-x", __iconNode$9);
132
135
 
133
136
  /**
134
137
  * @license lucide-react v1.24.0 - ISC
@@ -138,7 +141,7 @@ const CircleX = createLucideIcon.createLucideIcon("circle-x", __iconNode$6);
138
141
  */
139
142
 
140
143
 
141
- const __iconNode$5 = [
144
+ const __iconNode$8 = [
142
145
  [
143
146
  "path",
144
147
  {
@@ -148,7 +151,7 @@ const __iconNode$5 = [
148
151
  ],
149
152
  ["path", { d: "M5 21h14", key: "11awu3" }]
150
153
  ];
151
- const Crown = createLucideIcon.createLucideIcon("crown", __iconNode$5);
154
+ const Crown = createLucideIcon.createLucideIcon("crown", __iconNode$8);
152
155
 
153
156
  /**
154
157
  * @license lucide-react v1.24.0 - ISC
@@ -158,12 +161,68 @@ const Crown = createLucideIcon.createLucideIcon("crown", __iconNode$5);
158
161
  */
159
162
 
160
163
 
161
- const __iconNode$4 = [
164
+ const __iconNode$7 = [
165
+ ["path", { d: "m12 14 4-4", key: "9kzdfg" }],
166
+ ["path", { d: "M3.34 19a10 10 0 1 1 17.32 0", key: "19p75a" }]
167
+ ];
168
+ const Gauge = createLucideIcon.createLucideIcon("gauge", __iconNode$7);
169
+
170
+ /**
171
+ * @license lucide-react v1.24.0 - ISC
172
+ *
173
+ * This source code is licensed under the ISC license.
174
+ * See the LICENSE file in the root directory of this source tree.
175
+ */
176
+
177
+
178
+ const __iconNode$6 = [
179
+ [
180
+ "path",
181
+ {
182
+ d: "M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",
183
+ key: "1gvzjb"
184
+ }
185
+ ],
186
+ ["path", { d: "M9 18h6", key: "x1upvd" }],
187
+ ["path", { d: "M10 22h4", key: "ceow96" }]
188
+ ];
189
+ const Lightbulb = createLucideIcon.createLucideIcon("lightbulb", __iconNode$6);
190
+
191
+ /**
192
+ * @license lucide-react v1.24.0 - ISC
193
+ *
194
+ * This source code is licensed under the ISC license.
195
+ * See the LICENSE file in the root directory of this source tree.
196
+ */
197
+
198
+
199
+ const __iconNode$5 = [
162
200
  ["path", { d: "m16 17 5-5-5-5", key: "1bji2h" }],
163
201
  ["path", { d: "M21 12H9", key: "dn1m92" }],
164
202
  ["path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4", key: "1uf3rs" }]
165
203
  ];
166
- const LogOut = createLucideIcon.createLucideIcon("log-out", __iconNode$4);
204
+ const LogOut = createLucideIcon.createLucideIcon("log-out", __iconNode$5);
205
+
206
+ /**
207
+ * @license lucide-react v1.24.0 - ISC
208
+ *
209
+ * This source code is licensed under the ISC license.
210
+ * See the LICENSE file in the root directory of this source tree.
211
+ */
212
+
213
+
214
+ const __iconNode$4 = [
215
+ [
216
+ "path",
217
+ {
218
+ d: "M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",
219
+ key: "169xi5"
220
+ }
221
+ ],
222
+ ["path", { d: "M15 5.764v15", key: "1pn4in" }],
223
+ ["path", { d: "M9 3.236v15", key: "1uimfh" }]
224
+ ];
225
+ const Map = createLucideIcon.createLucideIcon("map", __iconNode$4);
167
226
 
168
227
  /**
169
228
  * @license lucide-react v1.24.0 - ISC
@@ -530,39 +589,6 @@ var Modal = reactUtils.withT(function (_ref) {
530
589
  });
531
590
  });
532
591
 
533
- var MY_ORGANIZATION_URL = "/auth/organization/edit";
534
- var BILLING_URL = "/auth/admin_billing";
535
- var DELETE_WORKSPACE_URL = "/auth/organization/delete";
536
- var ENGAGE_WIDGET_TRIGGER_ID = "neetoengage-trigger";
537
- var DEFAULT_MENU_LINK_PROPS = {
538
- engageProps: {
539
- id: ENGAGE_WIDGET_TRIGGER_ID,
540
- label: i18next.t("neetoMolecules.sidebar.helpLinks.whatsNew"),
541
- "data-testid": "help-link-engage-button"
542
- },
543
- keyboardShortcutProps: {
544
- label: i18next.t("neetoMolecules.sidebar.helpLinks.keyboardShortcuts"),
545
- "data-testid": "help-link-keyboard-shortcut-button"
546
- }
547
- };
548
-
549
- // Theme switcher
550
- var APP_THEME_LOCALSTORAGE_KEY = "appTheme";
551
- var THEMES = {
552
- LIGHT: "light",
553
- DARK: "dark"
554
- };
555
-
556
- // Legacy neetoUI theme classes — kept until full migration is complete.
557
- var LEGACY_THEMES = {
558
- LIGHT: "neeto-ui-theme--light",
559
- DARK: "neeto-ui-theme--dark"
560
- };
561
- var NEETO_AUTH_BILLING_INFO_URL = "/neeto_sso/api/v1/subscription/billing";
562
- 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]";
563
- 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";
564
- var THEME_ICON_BASE = "transition-transform duration-300 ease-out";
565
-
566
592
  var _excluded$2 = ["className"];
567
593
  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; }
568
594
  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; }
@@ -570,19 +596,19 @@ var MenuItem = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
570
596
  var className = _ref.className,
571
597
  props = _objectWithoutProperties(_ref, _excluded$2);
572
598
  return /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu.MenuItem, _objectSpread$4({
573
- className: classnames(MENU_ITEM_CLASSES, className),
599
+ className: classnames(useWhatsNewChangesCount.MENU_ITEM_CLASSES, className),
574
600
  ref: forwardedRef
575
601
  }, props));
576
602
  });
577
603
  MenuItem.displayName = "FloatingActionMenu.MenuItem";
578
604
 
579
605
  var HelpItems = reactUtils.withT(function (_ref) {
580
- var _globalProps;
581
- var t = _ref.t;
606
+ var t = _ref.t,
607
+ onReportSlowness = _ref.onReportSlowness;
582
608
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
583
609
  children: [/*#__PURE__*/jsxRuntime.jsx(MenuItem, {
584
610
  "data-testid": "help-link-help-articles-button",
585
- href: "https://help.".concat(ramda.toLower(((_globalProps = globalProps) === null || _globalProps === void 0 ? void 0 : _globalProps.appName) || ""), ".com/"),
611
+ href: "".concat(performanceDiagnostics.getNeetoUrl("help"), "/"),
586
612
  prefix: /*#__PURE__*/jsxRuntime.jsx(BookOpen, {
587
613
  size: 18
588
614
  }),
@@ -609,6 +635,24 @@ var HelpItems = reactUtils.withT(function (_ref) {
609
635
  rel: "noreferrer",
610
636
  target: "_blank",
611
637
  children: t("neetoMolecules.sidebar.helpLinks.askTheCommunity")
638
+ }), /*#__PURE__*/jsxRuntime.jsx(MenuItem, {
639
+ "data-testid": "help-link-request-feature-button",
640
+ href: "".concat(performanceDiagnostics.getNeetoUrl("engage"), "/feature-requests"),
641
+ prefix: /*#__PURE__*/jsxRuntime.jsx(Lightbulb, {
642
+ size: 18
643
+ }),
644
+ rel: "noreferrer",
645
+ target: "_blank",
646
+ children: t("neetoMolecules.sidebar.helpLinks.requestFeature")
647
+ }), /*#__PURE__*/jsxRuntime.jsx(MenuItem, {
648
+ "data-testid": "help-link-roadmap-button",
649
+ href: "".concat(performanceDiagnostics.getNeetoUrl("engage"), "/product-roadmap"),
650
+ prefix: /*#__PURE__*/jsxRuntime.jsx(Map, {
651
+ size: 18
652
+ }),
653
+ rel: "noreferrer",
654
+ target: "_blank",
655
+ children: t("neetoMolecules.sidebar.helpLinks.roadmap")
612
656
  }), /*#__PURE__*/jsxRuntime.jsx(MenuItem, {
613
657
  "data-testid": "help-link-status-button",
614
658
  href: "https://neetostatus.com/",
@@ -618,11 +662,19 @@ var HelpItems = reactUtils.withT(function (_ref) {
618
662
  rel: "noreferrer",
619
663
  target: "_blank",
620
664
  children: t("neetoMolecules.sidebar.helpLinks.systemStatus")
665
+ }), performanceDiagnostics.isPerformanceDiagnosticsEnabled() && /*#__PURE__*/jsxRuntime.jsx(MenuItem, {
666
+ "data-testid": "help-link-report-slowness-button",
667
+ prefix: /*#__PURE__*/jsxRuntime.jsx(Gauge, {
668
+ size: 18
669
+ }),
670
+ onClick: onReportSlowness,
671
+ children: t("neetoMolecules.sidebar.helpLinks.reportSlowness")
621
672
  })]
622
673
  });
623
674
  });
624
675
 
625
- var MobileHelpMenu = function MobileHelpMenu() {
676
+ var MobileHelpMenu = function MobileHelpMenu(_ref) {
677
+ var onReportSlowness = _ref.onReportSlowness;
626
678
  var _useTranslation = reactI18next.useTranslation(),
627
679
  t = _useTranslation.t;
628
680
  var _useState = React.useState(false),
@@ -635,7 +687,7 @@ var MobileHelpMenu = function MobileHelpMenu() {
635
687
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
636
688
  asChild: true,
637
689
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
638
- className: classnames("group", MENU_ITEM_CLASSES),
690
+ className: classnames("group", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
639
691
  "data-testid": "help-menu-button",
640
692
  onSelect: function onSelect(e) {
641
693
  return e.preventDefault();
@@ -652,21 +704,26 @@ var MobileHelpMenu = function MobileHelpMenu() {
652
704
  })
653
705
  }), /*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleContent, {
654
706
  className: "flex flex-col gap-0.5 ps-6 pt-1",
655
- children: /*#__PURE__*/jsxRuntime.jsx(HelpItems, {})
707
+ children: /*#__PURE__*/jsxRuntime.jsx(HelpItems, {
708
+ onReportSlowness: onReportSlowness
709
+ })
656
710
  })]
657
711
  });
658
712
  };
659
713
 
660
- var HelpMenu = function HelpMenu() {
714
+ var HelpMenu = function HelpMenu(_ref) {
715
+ var onReportSlowness = _ref.onReportSlowness;
661
716
  var _useBreakpoints = useBreakpoints(),
662
717
  isSize = _useBreakpoints.isSize;
663
718
  var isMobile = isSize("mobile");
664
719
  var _useTranslation = reactI18next.useTranslation(),
665
720
  t = _useTranslation.t;
666
- if (isMobile) return /*#__PURE__*/jsxRuntime.jsx(MobileHelpMenu, {});
721
+ if (isMobile) return /*#__PURE__*/jsxRuntime.jsx(MobileHelpMenu, {
722
+ onReportSlowness: onReportSlowness
723
+ });
667
724
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
668
725
  children: [/*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSubTrigger, {
669
- className: MENU_ITEM_CLASSES,
726
+ className: useWhatsNewChangesCount.MENU_ITEM_CLASSES,
670
727
  "data-testid": "help-menu-button",
671
728
  children: [/*#__PURE__*/jsxRuntime.jsx(circleQuestionMark.CircleQuestionMark, {
672
729
  className: "size-[18px]"
@@ -678,7 +735,9 @@ var HelpMenu = function HelpMenu() {
678
735
  className: "z-[99999]",
679
736
  collisionPadding: 16,
680
737
  sideOffset: 8,
681
- children: /*#__PURE__*/jsxRuntime.jsx(HelpItems, {})
738
+ children: /*#__PURE__*/jsxRuntime.jsx(HelpItems, {
739
+ onReportSlowness: onReportSlowness
740
+ })
682
741
  })]
683
742
  });
684
743
  };
@@ -796,7 +855,7 @@ var MobileOrganizationSwitcher = function MobileOrganizationSwitcher(_ref) {
796
855
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
797
856
  asChild: true,
798
857
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
799
- className: classnames("group", MENU_ITEM_CLASSES),
858
+ className: classnames("group", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
800
859
  "data-testid": "organization-switcher-button",
801
860
  onSelect: function onSelect(e) {
802
861
  return e.preventDefault();
@@ -839,7 +898,7 @@ var OrganizationSwitcher = function OrganizationSwitcher() {
839
898
  }
840
899
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
841
900
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
842
- className: MENU_ITEM_CLASSES,
901
+ className: useWhatsNewChangesCount.MENU_ITEM_CLASSES,
843
902
  "data-testid": "organization-switcher-button",
844
903
  children: /*#__PURE__*/jsxRuntime.jsx("span", {
845
904
  className: "flex-1",
@@ -861,7 +920,7 @@ var Dropdown = reactUtils.withT(function (_ref) {
861
920
  var t = _ref.t;
862
921
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
863
922
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
864
- className: MENU_ITEM_CLASSES,
923
+ className: useWhatsNewChangesCount.MENU_ITEM_CLASSES,
865
924
  "data-testid": "product-switcher-button",
866
925
  children: t("neetoMolecules.sidebar.productSwitcher")
867
926
  }), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubContent, {
@@ -910,7 +969,7 @@ var ProfileItems = reactUtils.withT(function (_ref) {
910
969
  children: t("neetoMolecules.sidebar.myProfile")
911
970
  }), ((_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, {
912
971
  "data-testid": "profile-cancel-account-button",
913
- href: DELETE_WORKSPACE_URL,
972
+ href: useWhatsNewChangesCount.DELETE_WORKSPACE_URL,
914
973
  prefix: /*#__PURE__*/jsxRuntime.jsx(CircleX, {
915
974
  size: 18
916
975
  }),
@@ -970,7 +1029,7 @@ var MobileProfileExpandMenu = function MobileProfileExpandMenu(_ref) {
970
1029
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
971
1030
  asChild: true,
972
1031
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
973
- className: classnames("group", MENU_ITEM_CLASSES),
1032
+ className: classnames("group", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
974
1033
  "data-testid": "profile-expand-menu-button",
975
1034
  onSelect: function onSelect(e) {
976
1035
  return e.preventDefault();
@@ -1010,7 +1069,7 @@ var ProfileExpandMenu = function ProfileExpandMenu(_ref) {
1010
1069
  }
1011
1070
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
1012
1071
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
1013
- className: classnames("group items-center", MENU_ITEM_CLASSES),
1072
+ className: classnames("group items-center", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
1014
1073
  "data-testid": "profile-expand-menu-button",
1015
1074
  children: /*#__PURE__*/jsxRuntime.jsx(ProfileHeader, {
1016
1075
  profileInfo: profileInfo
@@ -1074,30 +1133,30 @@ var getProfileInfo = function getProfileInfo(profileInfoOverrides, isConsumer) {
1074
1133
  // Theme switcher utils.
1075
1134
  var setDarkTheme = function setDarkTheme() {
1076
1135
  if (!document.body) return;
1077
- document.body.classList.remove(THEMES.LIGHT, LEGACY_THEMES.LIGHT);
1078
- document.body.classList.add(THEMES.DARK, LEGACY_THEMES.DARK);
1136
+ document.body.classList.remove(useWhatsNewChangesCount.THEMES.LIGHT, useWhatsNewChangesCount.LEGACY_THEMES.LIGHT);
1137
+ document.body.classList.add(useWhatsNewChangesCount.THEMES.DARK, useWhatsNewChangesCount.LEGACY_THEMES.DARK);
1079
1138
  };
1080
1139
  var setLightTheme = function setLightTheme() {
1081
1140
  if (!document.body) return;
1082
- document.body.classList.remove(THEMES.DARK, LEGACY_THEMES.DARK);
1083
- document.body.classList.add(THEMES.LIGHT, LEGACY_THEMES.LIGHT);
1141
+ document.body.classList.remove(useWhatsNewChangesCount.THEMES.DARK, useWhatsNewChangesCount.LEGACY_THEMES.DARK);
1142
+ document.body.classList.add(useWhatsNewChangesCount.THEMES.LIGHT, useWhatsNewChangesCount.LEGACY_THEMES.LIGHT);
1084
1143
  };
1085
1144
  var setAppTheme = function setAppTheme() {
1086
- var storedTheme = utils.getFromLocalStorage(APP_THEME_LOCALSTORAGE_KEY);
1087
- var isDarkTheme = storedTheme === THEMES.DARK || storedTheme === LEGACY_THEMES.DARK;
1145
+ var storedTheme = utils.getFromLocalStorage(useWhatsNewChangesCount.APP_THEME_LOCALSTORAGE_KEY);
1146
+ var isDarkTheme = storedTheme === useWhatsNewChangesCount.THEMES.DARK || storedTheme === useWhatsNewChangesCount.LEGACY_THEMES.DARK;
1088
1147
  isDarkTheme ? setDarkTheme() : setLightTheme();
1089
1148
  };
1090
1149
 
1091
1150
  var ThemeSwitcher = function ThemeSwitcher() {
1092
1151
  var _useTranslation = reactI18next.useTranslation(),
1093
1152
  t = _useTranslation.t;
1094
- var _useLocalStorage = useLocalStorage(APP_THEME_LOCALSTORAGE_KEY, THEMES.LIGHT),
1153
+ var _useLocalStorage = useLocalStorage(useWhatsNewChangesCount.APP_THEME_LOCALSTORAGE_KEY, useWhatsNewChangesCount.THEMES.LIGHT),
1095
1154
  _useLocalStorage2 = _slicedToArray(_useLocalStorage, 2),
1096
1155
  appTheme = _useLocalStorage2[0],
1097
1156
  setAppTheme = _useLocalStorage2[1];
1098
- var isDarkThemeSelected = appTheme === THEMES.DARK || appTheme === LEGACY_THEMES.DARK;
1157
+ var isDarkThemeSelected = appTheme === useWhatsNewChangesCount.THEMES.DARK || appTheme === useWhatsNewChangesCount.LEGACY_THEMES.DARK;
1099
1158
  var switchTheme = function switchTheme(theme) {
1100
- theme === THEMES.LIGHT ? setLightTheme() : setDarkTheme();
1159
+ theme === useWhatsNewChangesCount.THEMES.LIGHT ? setLightTheme() : setDarkTheme();
1101
1160
  setAppTheme(theme);
1102
1161
  };
1103
1162
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -1122,34 +1181,34 @@ var ThemeSwitcher = function ThemeSwitcher() {
1122
1181
  asChild: true,
1123
1182
  onSelect: function onSelect(e) {
1124
1183
  e.preventDefault();
1125
- switchTheme(THEMES.LIGHT);
1184
+ switchTheme(useWhatsNewChangesCount.THEMES.LIGHT);
1126
1185
  },
1127
1186
  children: /*#__PURE__*/jsxRuntime.jsxs("button", {
1128
1187
  "aria-checked": !isDarkThemeSelected,
1129
1188
  "data-testid": "theme-switcher-light-button",
1130
1189
  role: "menuitemradio",
1131
1190
  type: "button",
1132
- className: classnames(THEME_BUTTON_BASE, isDarkThemeSelected ? "text-muted-foreground hover:text-foreground" : "text-foreground"),
1191
+ className: classnames(useWhatsNewChangesCount.THEME_BUTTON_BASE, isDarkThemeSelected ? "text-muted-foreground hover:text-foreground" : "text-foreground"),
1133
1192
  children: [/*#__PURE__*/jsxRuntime.jsx(Sun, {
1134
1193
  size: 13,
1135
- className: classnames(THEME_ICON_BASE, isDarkThemeSelected ? "scale-90 -rotate-45" : "rotate-0")
1194
+ className: classnames(useWhatsNewChangesCount.THEME_ICON_BASE, isDarkThemeSelected ? "scale-90 -rotate-45" : "rotate-0")
1136
1195
  }), t("neetoMolecules.sidebar.themeSwitcher.light")]
1137
1196
  })
1138
1197
  }), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuItem, {
1139
1198
  asChild: true,
1140
1199
  onSelect: function onSelect(e) {
1141
1200
  e.preventDefault();
1142
- switchTheme(THEMES.DARK);
1201
+ switchTheme(useWhatsNewChangesCount.THEMES.DARK);
1143
1202
  },
1144
1203
  children: /*#__PURE__*/jsxRuntime.jsxs("button", {
1145
1204
  "aria-checked": isDarkThemeSelected,
1146
1205
  "data-testid": "theme-switcher-dark-button",
1147
1206
  role: "menuitemradio",
1148
1207
  type: "button",
1149
- className: classnames(THEME_BUTTON_BASE, isDarkThemeSelected ? "text-foreground" : "text-muted-foreground hover:text-foreground"),
1208
+ className: classnames(useWhatsNewChangesCount.THEME_BUTTON_BASE, isDarkThemeSelected ? "text-foreground" : "text-muted-foreground hover:text-foreground"),
1150
1209
  children: [/*#__PURE__*/jsxRuntime.jsx(Moon, {
1151
1210
  size: 13,
1152
- className: classnames(THEME_ICON_BASE, isDarkThemeSelected ? "rotate-0" : "scale-90 rotate-45")
1211
+ className: classnames(useWhatsNewChangesCount.THEME_ICON_BASE, isDarkThemeSelected ? "rotate-0" : "scale-90 rotate-45")
1153
1212
  }), t("neetoMolecules.sidebar.themeSwitcher.dark")]
1154
1213
  })
1155
1214
  })]
@@ -1186,13 +1245,13 @@ var WorkspaceItems = reactUtils.withT(function (_ref) {
1186
1245
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1187
1246
  children: [/*#__PURE__*/jsxRuntime.jsx(MenuItem, {
1188
1247
  "data-testid": "profile-organization-settings-button",
1189
- href: MY_ORGANIZATION_URL,
1248
+ href: useWhatsNewChangesCount.MY_ORGANIZATION_URL,
1190
1249
  rel: "noreferrer",
1191
1250
  target: "_blank",
1192
1251
  children: t("neetoMolecules.sidebar.workspaceMenu.settings")
1193
1252
  }), /*#__PURE__*/jsxRuntime.jsx(MenuItem, {
1194
1253
  "data-testid": "profile-organization-billing-button",
1195
- href: BILLING_URL,
1254
+ href: useWhatsNewChangesCount.BILLING_URL,
1196
1255
  children: t("neetoMolecules.sidebar.workspaceMenu.billing")
1197
1256
  }), ((_globalProps$organiza = initializers.globalProps.organization) === null || _globalProps$organiza === void 0 ? void 0 : _globalProps$organiza.subdomain) && /*#__PURE__*/jsxRuntime.jsx("div", {
1198
1257
  className: "border-border my-1 border-t"
@@ -1239,7 +1298,7 @@ var MobileWorkspaceMenu = function MobileWorkspaceMenu() {
1239
1298
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CollapsibleTrigger, {
1240
1299
  asChild: true,
1241
1300
  children: /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuItem, {
1242
- className: classnames("group items-center", MENU_ITEM_CLASSES),
1301
+ className: classnames("group items-center", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
1243
1302
  "data-testid": "workspace-display",
1244
1303
  onSelect: function onSelect(e) {
1245
1304
  return e.preventDefault();
@@ -1263,7 +1322,7 @@ var WorkspaceMenu = function WorkspaceMenu() {
1263
1322
  if (isMobile) return /*#__PURE__*/jsxRuntime.jsx(MobileWorkspaceMenu, {});
1264
1323
  return /*#__PURE__*/jsxRuntime.jsxs(primitives.DropdownMenuSub, {
1265
1324
  children: [/*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubTrigger, {
1266
- className: classnames("group items-center", MENU_ITEM_CLASSES),
1325
+ className: classnames("group items-center", useWhatsNewChangesCount.MENU_ITEM_CLASSES),
1267
1326
  "data-testid": "workspace-display",
1268
1327
  children: /*#__PURE__*/jsxRuntime.jsx(TriggerContent, {})
1269
1328
  }), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSubContent, {
@@ -1290,33 +1349,35 @@ var ProfileMenu = function ProfileMenu(_ref) {
1290
1349
  isOrganizationSwitcherEnabled = _ref.isOrganizationSwitcherEnabled,
1291
1350
  isConsumer = _ref.isConsumer,
1292
1351
  enableSubscriptionUpgradeRequest = _ref.enableSubscriptionUpgradeRequest,
1293
- openUpgradeModal = _ref.openUpgradeModal;
1352
+ openUpgradeModal = _ref.openUpgradeModal,
1353
+ onReportSlowness = _ref.onReportSlowness;
1294
1354
  var isAuthenticated = profileInfo.isAuthenticated;
1295
1355
  var _useTranslation = reactI18next.useTranslation(),
1296
1356
  t = _useTranslation.t;
1297
- var normalizedPlan = (((_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.subscriptionPlan) || "").toLowerCase();
1298
- var isFreePlan = normalizedPlan === "free";
1357
+
1358
+ // A paid plan can be named more than one thing, so the badge follows the
1359
+ // isPro flag the backend sends alongside the plan; the plan name is display
1360
+ // text only.
1361
+ var isPro = Boolean((_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.isPro);
1299
1362
  var isOwner = (_globalProps$user2 = globalProps.user) === null || _globalProps$user2 === void 0 ? void 0 : _globalProps$user2.isOwner;
1300
- var showUpgradeModal = isFreePlan && enableSubscriptionUpgradeRequest && !isOwner;
1363
+ var showUpgradeModal = !isPro && enableSubscriptionUpgradeRequest && !isOwner;
1301
1364
  var getSubscriptionPlanAction = function getSubscriptionPlanAction() {
1302
1365
  if (showUpgradeModal) return {
1303
1366
  onClick: openUpgradeModal
1304
1367
  };
1305
- if (isFreePlan && isOwner && enableSubscriptionUpgradeRequest) {
1306
- var _globalProps$organiza;
1368
+ if (!isPro && isOwner && enableSubscriptionUpgradeRequest) {
1307
1369
  return {
1308
- href: "".concat((_globalProps$organiza = globalProps.organization) === null || _globalProps$organiza === void 0 ? void 0 : _globalProps$organiza.authAppUrl, "/admin/billing/overview")
1370
+ href: performanceDiagnostics.getProductBillingUrl()
1309
1371
  };
1310
1372
  }
1311
1373
  return {
1312
- href: NEETO_AUTH_BILLING_INFO_URL
1374
+ href: useWhatsNewChangesCount.NEETO_AUTH_BILLING_INFO_URL
1313
1375
  };
1314
1376
  };
1315
- var isProPlan = normalizedPlan === "pro";
1316
1377
  var subscriptionPlanLink = _objectSpread$2({
1317
1378
  label: /*#__PURE__*/jsxRuntime.jsxs("span", {
1318
1379
  className: "flex items-center gap-2",
1319
- children: [globalProps.appName, isProPlan ? /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
1380
+ children: [globalProps.appName, isPro ? /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
1320
1381
  label: neetoCist.humanize((_globalProps$user3 = globalProps.user) === null || _globalProps$user3 === void 0 ? void 0 : _globalProps$user3.subscriptionPlan),
1321
1382
  style: {
1322
1383
  "--accent-foreground": "var(--color-amber-950)"
@@ -1360,7 +1421,9 @@ var ProfileMenu = function ProfileMenu(_ref) {
1360
1421
  links: [subscriptionPlanLink]
1361
1422
  }), showProductSwitcher && /*#__PURE__*/jsxRuntime.jsx(ProductSwitcher, {
1362
1423
  toggleModal: toggleModal
1363
- }), /*#__PURE__*/jsxRuntime.jsx(HelpMenu, {}), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSeparator, {
1424
+ }), /*#__PURE__*/jsxRuntime.jsx(HelpMenu, {
1425
+ onReportSlowness: onReportSlowness
1426
+ }), /*#__PURE__*/jsxRuntime.jsx(primitives.DropdownMenuSeparator, {
1364
1427
  className: "my-2"
1365
1428
  })]
1366
1429
  }), isAuthenticated && !isConsumer && /*#__PURE__*/jsxRuntime.jsx(ProfileExpandMenu, {
@@ -1375,6 +1438,103 @@ var ProfileMenu = function ProfileMenu(_ref) {
1375
1438
  });
1376
1439
  };
1377
1440
 
1441
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = false, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = true, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), true), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
1442
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
1443
+ var ReportSlownessModal = function ReportSlownessModal(_ref) {
1444
+ var reportedAt = _ref.reportedAt,
1445
+ onClose = _ref.onClose;
1446
+ var _useTranslation = reactI18next.useTranslation(),
1447
+ t = _useTranslation.t;
1448
+ var _useState = React.useState(""),
1449
+ _useState2 = _slicedToArray(_useState, 2),
1450
+ description = _useState2[0],
1451
+ setDescription = _useState2[1];
1452
+ var _useState3 = React.useState(false),
1453
+ _useState4 = _slicedToArray(_useState3, 2),
1454
+ isSubmitting = _useState4[0],
1455
+ setIsSubmitting = _useState4[1];
1456
+ var handleClose = function handleClose() {
1457
+ setDescription("");
1458
+ onClose();
1459
+ };
1460
+ var handleSubmit = /*#__PURE__*/function () {
1461
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
1462
+ var report;
1463
+ return _regenerator().w(function (_context) {
1464
+ while (1) switch (_context.n) {
1465
+ case 0:
1466
+ setIsSubmitting(true);
1467
+ _context.n = 1;
1468
+ return performanceDiagnostics.reportSlowness({
1469
+ description: description.trim(),
1470
+ reportedAt: reportedAt
1471
+ });
1472
+ case 1:
1473
+ report = _context.v;
1474
+ setIsSubmitting(false);
1475
+ if (report) {
1476
+ _context.n = 2;
1477
+ break;
1478
+ }
1479
+ neetoAtoms.Toastr.error(t("neetoMolecules.reportSlowness.error"));
1480
+ return _context.a(2);
1481
+ case 2:
1482
+ neetoAtoms.Toastr.success(t("neetoMolecules.reportSlowness.success"), report.replay_url ? {
1483
+ buttonLabel: t("neetoMolecules.reportSlowness.viewReplay"),
1484
+ onClick: function onClick() {
1485
+ return window.open(report.replay_url, "_blank", "noopener,noreferrer");
1486
+ }
1487
+ } : {});
1488
+ handleClose();
1489
+ case 3:
1490
+ return _context.a(2);
1491
+ }
1492
+ }, _callee);
1493
+ }));
1494
+ return function handleSubmit() {
1495
+ return _ref2.apply(this, arguments);
1496
+ };
1497
+ }();
1498
+ return /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Dialog, {
1499
+ "aria-describedby": undefined,
1500
+ closeOnEsc: !isSubmitting,
1501
+ closeOnOutsideClick: !isSubmitting,
1502
+ isOpen: Boolean(reportedAt),
1503
+ onClose: handleClose,
1504
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Dialog.Header, {
1505
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Dialog.Title, {
1506
+ children: t("neetoMolecules.reportSlowness.title")
1507
+ })
1508
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Dialog.Body, {
1509
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Textarea, {
1510
+ dataTestId: "report-slowness-description",
1511
+ label: t("neetoMolecules.reportSlowness.descriptionLabel"),
1512
+ maxLength: useWhatsNewChangesCount.SLOWNESS_DESCRIPTION_MAX_LENGTH,
1513
+ value: description,
1514
+ placeholder: t("neetoMolecules.reportSlowness.descriptionPlaceholder"),
1515
+ onChange: function onChange(e) {
1516
+ return setDescription(e.target.value);
1517
+ }
1518
+ })
1519
+ }), /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Dialog.Footer, {
1520
+ className: "flex gap-x-2",
1521
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
1522
+ "data-testid": "report-slowness-cancel-button",
1523
+ disabled: isSubmitting,
1524
+ label: t("neetoMolecules.reportSlowness.cancel"),
1525
+ variant: "secondary",
1526
+ onClick: handleClose
1527
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
1528
+ "data-testid": "report-slowness-submit-button",
1529
+ disabled: isSubmitting,
1530
+ label: t("neetoMolecules.reportSlowness.submit"),
1531
+ loading: isSubmitting,
1532
+ onClick: handleSubmit
1533
+ })]
1534
+ })]
1535
+ });
1536
+ };
1537
+
1378
1538
  function ownKeys$1(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; }
1379
1539
  function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1380
1540
  var ProfileButton = function ProfileButton(_ref) {
@@ -1403,8 +1563,9 @@ var ProfileButton = function ProfileButton(_ref) {
1403
1563
  setIsMenuOpen = _useState6[1];
1404
1564
  var _useState7 = React.useState(null),
1405
1565
  _useState8 = _slicedToArray(_useState7, 2),
1406
- changesCount = _useState8[0],
1407
- setChangesCount = _useState8[1];
1566
+ slownessReportedAt = _useState8[0],
1567
+ setSlownessReportedAt = _useState8[1];
1568
+ var changesCount = useWhatsNewChangesCount.useWhatsNewChangesCount();
1408
1569
  var _KeyboardShortcuts$us = v2_KeyboardShortcuts.usePaneState(),
1409
1570
  _KeyboardShortcuts$us2 = _slicedToArray(_KeyboardShortcuts$us, 2),
1410
1571
  setIsOpen = _KeyboardShortcuts$us2[1];
@@ -1414,21 +1575,9 @@ var ProfileButton = function ProfileButton(_ref) {
1414
1575
  mode: "global"
1415
1576
  });
1416
1577
  var profileInfo = getProfileInfo(profileInfoOverrides, isConsumer);
1417
- React.useEffect(function () {
1418
- var Nv = {
1419
- onReceiveData: function onReceiveData(data) {
1420
- if (!data.unreadCount) return;
1421
- setChangesCount(data.unreadCount);
1422
- },
1423
- onShow: function onShow() {
1424
- setChangesCount(null);
1425
- }
1426
- };
1427
- window.Nv = window.Nv ? Object.assign(window.Nv, Nv) : Nv;
1428
- }, []);
1429
1578
  var newBottomLinks = [].concat(_toConsumableArray(getDefaultBottomLinks(profileInfo.isAuthenticated, isConsumer)), _toConsumableArray(bottomLinks));
1430
- var defaultLinks = Object.keys(DEFAULT_MENU_LINK_PROPS).map(function (key) {
1431
- return _objectSpread$1(_objectSpread$1(_objectSpread$1({}, DEFAULT_MENU_LINK_PROPS[key]), key === "keyboardShortcutProps" && {
1579
+ var defaultLinks = Object.keys(useWhatsNewChangesCount.DEFAULT_MENU_LINK_PROPS).map(function (key) {
1580
+ return _objectSpread$1(_objectSpread$1(_objectSpread$1({}, useWhatsNewChangesCount.DEFAULT_MENU_LINK_PROPS[key]), key === "keyboardShortcutProps" && {
1432
1581
  onClick: function onClick() {
1433
1582
  return setIsOpen(function (prev) {
1434
1583
  return !prev;
@@ -1491,13 +1640,21 @@ var ProfileButton = function ProfileButton(_ref) {
1491
1640
  openUpgradeModal: function openUpgradeModal() {
1492
1641
  return setIsUpgradeModalOpen(true);
1493
1642
  },
1494
- toggleModal: setIsModalOpen
1643
+ toggleModal: setIsModalOpen,
1644
+ onReportSlowness: function onReportSlowness() {
1645
+ return setSlownessReportedAt(Date.now());
1646
+ }
1495
1647
  })
1496
1648
  })]
1497
1649
  }), neetoCist.isPresent(changesCount) && /*#__PURE__*/jsxRuntime.jsx("span", {
1498
1650
  className: "bg-foreground text-background pointer-events-none absolute end-0 top-0 z-[3] flex h-[0.9375rem] min-w-[0.9375rem] items-center justify-center rounded-full border border-white px-1 text-[10px] select-none",
1499
1651
  "data-testid": "help-icon-changes-count",
1500
1652
  children: changesCount
1653
+ }), /*#__PURE__*/jsxRuntime.jsx(ReportSlownessModal, {
1654
+ reportedAt: slownessReportedAt,
1655
+ onClose: function onClose() {
1656
+ return setSlownessReportedAt(null);
1657
+ }
1501
1658
  }), /*#__PURE__*/jsxRuntime.jsx(Modal, {
1502
1659
  isOpen: isModalOpen,
1503
1660
  onClose: function onClose() {