@stokr/components-library 2.3.66 → 2.3.67

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.
@@ -4,12 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.alias = alias;
7
+ exports.getAmountBucket = getAmountBucket;
8
+ exports.getTokenBucket = getTokenBucket;
7
9
  exports.hasOptedIn = hasOptedIn;
8
10
  exports.identify = identify;
9
11
  exports.initAnalytics = initAnalytics;
10
12
  exports.optIn = optIn;
11
13
  exports.optOut = optOut;
12
14
  exports.reset = reset;
15
+ exports.setUserProperties = setUserProperties;
13
16
  exports.timeEvent = timeEvent;
14
17
  exports.track = track;
15
18
  var _mixpanelBrowser = _interopRequireDefault(require("mixpanel-browser"));
@@ -91,6 +94,9 @@ function initAnalytics() {
91
94
  app
92
95
  });
93
96
  }
97
+ _mixpanelBrowser.default.register({
98
+ source: 'frontend'
99
+ });
94
100
  initialized = true;
95
101
  }
96
102
 
@@ -146,6 +152,23 @@ function identify(userId) {
146
152
  }
147
153
  }
148
154
 
155
+ /**
156
+ * Update properties on the current user's Mixpanel profile.
157
+ * Call this whenever user state changes after login — KYC approval,
158
+ * tier upgrade, onboarding step completion, etc.
159
+ * Props go through the same sanitizer as track().
160
+ *
161
+ * @param {Record<string, unknown>} props — non-PII properties only
162
+ */
163
+ function setUserProperties() {
164
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
165
+ if (!initialized) return;
166
+ const sanitized = sanitize(props);
167
+ if (Object.keys(sanitized).length > 0) {
168
+ _mixpanelBrowser.default.people.set(sanitized);
169
+ }
170
+ }
171
+
149
172
  /**
150
173
  * Only needed for legacy Mixpanel projects (Original ID Merge).
151
174
  * New projects (post-2023) handle merging automatically via identify().
@@ -159,4 +182,26 @@ function alias(userId) {
159
182
  function reset() {
160
183
  if (!initialized) return;
161
184
  _mixpanelBrowser.default.reset();
185
+ }
186
+
187
+ /** Returns a bucket label for an investment amount (EUR/USD). */
188
+ function getAmountBucket(amount) {
189
+ if (amount < 125000) return '<125k';
190
+ if (amount < 250000) return '125k-250k';
191
+ if (amount < 500000) return '250k-500k';
192
+ if (amount < 1000000) return '500k-1M';
193
+ if (amount < 5000000) return '1M-5M';
194
+ return '5M+';
195
+ }
196
+
197
+ /** Returns a bucket label for a token quantity. */
198
+ function getTokenBucket(qty) {
199
+ if (qty <= 1) return '0-1';
200
+ if (qty <= 10) return '2-10';
201
+ if (qty <= 100) return '11-100';
202
+ if (qty <= 1000) return '101-1k';
203
+ if (qty <= 10000) return '1k-10k';
204
+ if (qty <= 100000) return '10k-100k';
205
+ if (qty <= 1000000) return '100k-1M';
206
+ return '1M+';
162
207
  }
@@ -25,6 +25,7 @@ var _Grid = require("../Grid/Grid.styles");
25
25
  var _FooterLayout = require("../Footer/FooterLayout");
26
26
  var _globalVariables = require("../../constants/globalVariables");
27
27
  var _rwd = require("../../styles/rwd");
28
+ var _analytics = require("../../analytics");
28
29
  const _excluded = ["activeMenu", "activateMenu", "user", "userPhoto", "logoutUser", "onLoginClick", "onSignUpClick", "useRelativePathForMenu", "useRelativePathForUserMenu", "progress", "withSidebar", "isSidebarExpanded", "sidebarHandler", "signupFlow", "noFixedPosition", "withoutLoginSignupButton"]; //import { Wrapper } from '../Input/Input.styles'
29
30
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
30
31
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
@@ -32,20 +33,40 @@ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i
32
33
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
33
34
  const productMenuItems = [{
34
35
  name: 'End-to-End Tokenization',
35
- onClick: () => window.location.href = "".concat(_globalVariables.platformURL, "/solutions/asset-tokenization"),
36
+ onClick: () => {
37
+ (0, _analytics.track)('header_link_clicked', {
38
+ link: 'end-to-end tokenization'
39
+ });
40
+ window.location.href = "".concat(_globalVariables.platformURL, "/solutions/asset-tokenization");
41
+ },
36
42
  link: '/solutions/asset-tokenization'
37
43
  }, {
38
44
  name: 'Tokenization-as-a-Service',
39
- onClick: () => window.location.href = "".concat(_globalVariables.platformURL, "/solutions/tokenization-as-service"),
45
+ onClick: () => {
46
+ (0, _analytics.track)('header_link_clicked', {
47
+ link: 'tokenization-as-a-service'
48
+ });
49
+ window.location.href = "".concat(_globalVariables.platformURL, "/solutions/tokenization-as-service");
50
+ },
40
51
  link: '/solutions/tokenization-as-service'
41
52
  }];
42
53
  const mediaMenuItems = [{
43
54
  name: 'Press Releases',
44
- onClick: () => window.location.href = "".concat(_globalVariables.platformURL, "/press-releases"),
55
+ onClick: () => {
56
+ (0, _analytics.track)('header_link_clicked', {
57
+ link: 'press releases'
58
+ });
59
+ window.location.href = "".concat(_globalVariables.platformURL, "/press-releases");
60
+ },
45
61
  link: '/press-releases'
46
62
  }, {
47
63
  name: 'Stoke Post',
48
- onClick: () => window.location.href = "".concat(_globalVariables.platformURL, "/stoke-post"),
64
+ onClick: () => {
65
+ (0, _analytics.track)('header_link_clicked', {
66
+ link: 'stoke post'
67
+ });
68
+ window.location.href = "".concat(_globalVariables.platformURL, "/stoke-post");
69
+ },
49
70
  link: '/stoke-post'
50
71
  }];
51
72
  const investorMenuItems = [{
@@ -217,16 +238,32 @@ const Header = _ref3 => {
217
238
  "data-cy": "logo-nav-link"
218
239
  }, /*#__PURE__*/_react.default.createElement(_SvgIcons.LogoSvg, null))), !progress && /*#__PURE__*/_react.default.createElement(_Header.HeaderMainNav, null, /*#__PURE__*/_react.default.createElement(_MenuNav.default, null, /*#__PURE__*/_react.default.createElement("ul", null, /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("a", {
219
240
  href: newPlatformUrl + '/featured-assets',
220
- "data-cy": "invest-nav-link"
241
+ "data-cy": "invest-nav-link",
242
+ onClick: () => (0, _analytics.track)('header_link_clicked', {
243
+ link: 'invest'
244
+ })
221
245
  }, "Invest")), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("a", {
222
- onClick: () => toggleMenu('products'),
246
+ onClick: () => {
247
+ (0, _analytics.track)('header_link_clicked', {
248
+ link: 'solutions'
249
+ });
250
+ toggleMenu('products');
251
+ },
223
252
  "data-cy": "products-nav-link"
224
253
  }, "Solutions")), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("a", {
225
- onClick: () => toggleMenu('media'),
254
+ onClick: () => {
255
+ (0, _analytics.track)('header_link_clicked', {
256
+ link: 'media'
257
+ });
258
+ toggleMenu('media');
259
+ },
226
260
  "data-cy": "media-nav-link"
227
261
  }, "Media")), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("a", {
228
262
  href: newPlatformUrl + '/team',
229
- "data-cy": "team-nav-link"
263
+ "data-cy": "team-nav-link",
264
+ onClick: () => (0, _analytics.track)('header_link_clicked', {
265
+ link: 'team'
266
+ })
230
267
  }, "Team")))))), progress && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, signupFlow ? /*#__PURE__*/_react.default.createElement(_StepsProgress.StepsProgressSignup, {
231
268
  user: user
232
269
  }) : /*#__PURE__*/_react.default.createElement(_Header.ProgressWrap, null, /*#__PURE__*/_react.default.createElement(_StepsProgress.StepsProgressHeader, {
@@ -260,10 +297,18 @@ const Header = _ref3 => {
260
297
  })), (0, _checkTodoStatus.default)(user) > 0 && /*#__PURE__*/_react.default.createElement(_NotificationCounter.default, {
261
298
  avatar: true
262
299
  }, (0, _checkTodoStatus.default)(user))))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, withoutLoginSignupButton ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_breakdown.default, null, /*#__PURE__*/_react.default.createElement(_Header.LoginButton, {
263
- onClick: onLoginClick,
300
+ onClick: () => {
301
+ (0, _analytics.track)('header_link_clicked', {
302
+ link: 'login'
303
+ });
304
+ onLoginClick();
305
+ },
264
306
  "data-cy": "login-nav-button"
265
307
  }, "Log in")), /*#__PURE__*/_react.default.createElement(_Header.SignupButton, {
266
- onClick: onSignUpClick,
308
+ onClick: () => {
309
+ (0, _analytics.track)('signup_cta_clicked');
310
+ onSignUpClick();
311
+ },
267
312
  "data-cy": "signup-nav-button"
268
313
  }, "Sign Up")))))), /*#__PURE__*/_react.default.createElement(_Header.MobileMenu, {
269
314
  isActive: currentActiveMenu === 'main',
@@ -331,7 +376,12 @@ const Header = _ref3 => {
331
376
  }, "log out"))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, withoutLoginSignupButton ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_breakdown.default, {
332
377
  alignCenter: true
333
378
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
334
- onClick: onLoginClick,
379
+ onClick: () => {
380
+ (0, _analytics.track)('header_link_clicked', {
381
+ link: 'login'
382
+ });
383
+ onLoginClick();
384
+ },
335
385
  secondary: true,
336
386
  isLoginMobile: true
337
387
  }, "Log in")), /*#__PURE__*/_react.default.createElement("div", {
@@ -341,7 +391,10 @@ const Header = _ref3 => {
341
391
  paddingBottom: 30
342
392
  }
343
393
  }, /*#__PURE__*/_react.default.createElement(_Header.SignupButton, {
344
- onClick: onSignUpClick,
394
+ onClick: () => {
395
+ (0, _analytics.track)('signup_cta_clicked');
396
+ onSignUpClick();
397
+ },
345
398
  isMobile: true
346
399
  }, "Sign Up"))), socialLinks.length > 0 && /*#__PURE__*/_react.default.createElement(_Header.CTAContainer, null, /*#__PURE__*/_react.default.createElement("span", null, "FOLLOW US"), /*#__PURE__*/_react.default.createElement(_Header.SocialLinksContainer, {
347
400
  isHeader: true
@@ -230,6 +230,7 @@ class AuthProviderClass extends _react.Component {
230
230
  customValidateGetUser
231
231
  } = _this.props;
232
232
  try {
233
+ var _user$email$endsWith, _user$email;
233
234
  const result = await _Auth.default.getUser();
234
235
  let firebaseUser = _this.state.firebaseUser;
235
236
  if (!firebaseUser) {
@@ -253,7 +254,8 @@ class AuthProviderClass extends _react.Component {
253
254
  isFetchingUser: false
254
255
  });
255
256
  (0, _analytics.identify)(user._id, {
256
- role: user.user_type
257
+ role: user.user_type,
258
+ is_internal: (_user$email$endsWith = (_user$email = user.email) === null || _user$email === void 0 ? void 0 : _user$email.endsWith('@stokr.io')) !== null && _user$email$endsWith !== void 0 ? _user$email$endsWith : false
257
259
  });
258
260
 
259
261
  //redirect to home if user is on login or signup route (affects homepage only)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stokr/components-library",
3
- "version": "2.3.66",
3
+ "version": "2.3.67",
4
4
  "description": "STOKR - Components Library",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",