@stokr/components-library 2.3.77 → 2.3.79

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 (98) hide show
  1. package/dist/analytics/index.js +3 -0
  2. package/dist/api/authenticationApi.js +13 -0
  3. package/dist/auth/index.js +34 -0
  4. package/dist/components/LearnMorePage/LearnMore.propTypes.js +20 -0
  5. package/dist/components/StatusDot/StatusDot.js +68 -0
  6. package/dist/components/StatusDot/StatusDot.styles.js +45 -0
  7. package/dist/config.js +28 -0
  8. package/dist/manifest.json +2 -2
  9. package/dist/routing/RouterWrapper.js +17 -0
  10. package/dist/routing/app-routes.js +22 -0
  11. package/dist/routing/navigate-app.js +36 -0
  12. package/dist/routing/resolve-app-href.js +149 -0
  13. package/dist/runtime-config.js +94 -0
  14. package/dist/static/animations/checked.lottie.js +4 -0
  15. package/dist/static/animations/progress.lottie.js +4 -0
  16. package/dist/static/animations/upload.lottie +0 -0
  17. package/dist/static/animations/upload.lottie.js +4 -0
  18. package/dist/static/fonts/Ionicons/Ionicons.ttf.js +4 -0
  19. package/dist/static/fonts/Ionicons/Ionicons.woff.js +4 -0
  20. package/dist/static/fonts/Ionicons/Ionicons.woff2.js +4 -0
  21. package/dist/static/fonts/Ionicons/ionicons.min.css.js +4 -0
  22. package/dist/static/fonts/OpenSans/OpenSans-Bold.ttf.js +4 -0
  23. package/dist/static/fonts/OpenSans/OpenSans-Bold.woff.js +4 -0
  24. package/dist/static/fonts/OpenSans/OpenSans-Bold.woff2.js +4 -0
  25. package/dist/static/fonts/OpenSans/OpenSans-ExtraBold.ttf.js +4 -0
  26. package/dist/static/fonts/OpenSans/OpenSans-ExtraBold.woff.js +4 -0
  27. package/dist/static/fonts/OpenSans/OpenSans-ExtraBold.woff2.js +4 -0
  28. package/dist/static/fonts/OpenSans/OpenSans-Light.ttf.js +4 -0
  29. package/dist/static/fonts/OpenSans/OpenSans-Light.woff.js +4 -0
  30. package/dist/static/fonts/OpenSans/OpenSans-Light.woff2.js +4 -0
  31. package/dist/static/fonts/OpenSans/OpenSans-Regular.ttf.js +4 -0
  32. package/dist/static/fonts/OpenSans/OpenSans-Regular.woff.js +4 -0
  33. package/dist/static/fonts/OpenSans/OpenSans-Regular.woff2.js +4 -0
  34. package/dist/static/fonts/OpenSans/OpenSans-SemiBold.ttf.js +4 -0
  35. package/dist/static/fonts/OpenSans/OpenSans-SemiBold.woff.js +4 -0
  36. package/dist/static/fonts/OpenSans/OpenSans-SemiBold.woff2.js +4 -0
  37. package/dist/static/fonts/icomoon/icomoon.eot.js +4 -0
  38. package/dist/static/fonts/icomoon/icomoon.svg.js +4 -0
  39. package/dist/static/fonts/icomoon/icomoon.ttf.js +4 -0
  40. package/dist/static/fonts/icomoon/icomoon.woff.js +4 -0
  41. package/dist/static/images/add-folder-icon.svg.js +5 -0
  42. package/dist/static/images/address-refreshing.gif.js +4 -0
  43. package/dist/static/images/arrow-down-black.svg.js +4 -0
  44. package/dist/static/images/avatar-placeholder.png.js +4 -0
  45. package/dist/static/images/background3.png.js +4 -0
  46. package/dist/static/images/check-icon.svg.js +5 -0
  47. package/dist/static/images/checkmark-circle-icon.svg.js +5 -0
  48. package/dist/static/images/close-circle-icon.svg.js +5 -0
  49. package/dist/static/images/copy_icon.svg.js +5 -0
  50. package/dist/static/images/cross-icon.svg.js +5 -0
  51. package/dist/static/images/currency/bitcoin-logo.png +0 -0
  52. package/dist/static/images/currency/bitcoin-logo.png.js +4 -0
  53. package/dist/static/images/currency/bmn2-logo.png +0 -0
  54. package/dist/static/images/currency/bmn2-logo.png.js +4 -0
  55. package/dist/static/images/currency/eth.svg +10 -0
  56. package/dist/static/images/currency/eth_logo.svg +9 -0
  57. package/dist/static/images/currency/eth_logo.svg.js +4 -0
  58. package/dist/static/images/currency/eur.svg +3 -0
  59. package/dist/static/images/currency/usdc-logo.svg +5 -0
  60. package/dist/static/images/currency/usdc-logo.svg.js +4 -0
  61. package/dist/static/images/currency/usdq-logo.png +0 -0
  62. package/dist/static/images/currency/usdq-logo.png.js +4 -0
  63. package/dist/static/images/currency/usdt-logo.png +0 -0
  64. package/dist/static/images/currency/usdt-logo.png.js +4 -0
  65. package/dist/static/images/early-adopter.png.js +4 -0
  66. package/dist/static/images/eth_logo.svg +8 -8
  67. package/dist/static/images/external-link-icon.svg.js +4 -0
  68. package/dist/static/images/filter-icon.svg.js +5 -0
  69. package/dist/static/images/google_auth.png.js +4 -0
  70. package/dist/static/images/graduation.png.js +4 -0
  71. package/dist/static/images/mangopay.svg.js +4 -0
  72. package/dist/static/images/numbers/number_eight.svg.js +5 -0
  73. package/dist/static/images/numbers/number_five.svg.js +5 -0
  74. package/dist/static/images/numbers/number_four.svg.js +5 -0
  75. package/dist/static/images/numbers/number_nine.svg.js +5 -0
  76. package/dist/static/images/numbers/number_one.svg.js +5 -0
  77. package/dist/static/images/numbers/number_seven.svg.js +5 -0
  78. package/dist/static/images/numbers/number_six.svg.js +5 -0
  79. package/dist/static/images/numbers/number_three.svg.js +5 -0
  80. package/dist/static/images/numbers/number_two.svg.js +5 -0
  81. package/dist/static/images/numbers/number_zero.svg.js +5 -0
  82. package/dist/static/images/process-waiting.gif.js +4 -0
  83. package/dist/static/images/search-icon.svg.js +5 -0
  84. package/dist/static/images/social/Facebook_Logo.png.js +4 -0
  85. package/dist/static/images/social/LI-In-Bug.png.js +4 -0
  86. package/dist/static/images/social/Telegram-Logo.png.js +4 -0
  87. package/dist/static/images/social/X-logo-black.png.js +4 -0
  88. package/dist/static/images/social/youtube_social_circle_red.png.js +4 -0
  89. package/dist/static/images/transfer-icon.svg.js +5 -0
  90. package/dist/static/images/warning-filled.svg.js +5 -0
  91. package/dist/styles/ioniconsStyles.js +31 -0
  92. package/dist/utils/app-urls-analytics-backoffice.js +30 -0
  93. package/dist/utils/app-urls.js +28 -0
  94. package/dist/utils/formatCurrencyValue.js +4 -2
  95. package/dist/utils/transition.js +101 -0
  96. package/package.json +1 -1
  97. package/dist/index.css +0 -1
  98. package/dist/utils/analytics.js +0 -44
@@ -73,6 +73,9 @@ function initAnalytics() {
73
73
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
74
74
  if (initialized) return;
75
75
  if (!token) return;
76
+ if (typeof navigator !== 'undefined' && /Ghost Inspector/i.test(navigator.userAgent)) {
77
+ return;
78
+ }
76
79
  _mixpanelBrowser.default.init(token, {
77
80
  api_host: apiHost,
78
81
  autocapture: {
@@ -0,0 +1,13 @@
1
+ import axiosInstance from "../model/axios.js";
2
+ const authenticationApi = {
3
+ /**
4
+ * @param {string} pathSegment — appended to `auth/` (e.g. `forgotPass` → `POST auth/forgotPass`)
5
+ * @param {Record<string, unknown>} body
6
+ */
7
+ post(pathSegment, body) {
8
+ return axiosInstance.post(`auth/${pathSegment}`, body);
9
+ }
10
+ };
11
+ export {
12
+ authenticationApi
13
+ };
@@ -0,0 +1,34 @@
1
+ import { configure } from "../config.js";
2
+ import { default as default2 } from "../components/2FA/Connect2FA.js";
3
+ import { default as default3 } from "../components/2FA/enable-2fa-flow.js";
4
+ import { default as default4 } from "../components/2FA/EnterCode.js";
5
+ import { default as default5 } from "../components/2FA/InstallAuthApp.js";
6
+ import { default as default6 } from "../components/2FA/login-with-otp-flow.js";
7
+ import { default as default7 } from "../components/2FA/Sucess2FA.js";
8
+ import { default as default8 } from "../components/2FA/main-flow.js";
9
+ import { default as default9 } from "../components/2FA/ResetCode.js";
10
+ import { Auth, DEFAULT_TOKEN_EXPIRY_MS } from "../context/Auth.js";
11
+ import { AuthConsumer, AuthContext, AuthProvider } from "../context/AuthContext.js";
12
+ import { LoadingDots, StokrLoader, StokrLoaderBox } from "../components/StokrLoader/StokrLoader.js";
13
+ import { getConfig, resetRuntimeConfig } from "../runtime-config.js";
14
+ export {
15
+ Auth,
16
+ AuthConsumer,
17
+ AuthContext,
18
+ AuthProvider,
19
+ default2 as Connect2FA,
20
+ DEFAULT_TOKEN_EXPIRY_MS,
21
+ default3 as Enable2FAFlow,
22
+ default4 as EnterCode,
23
+ default5 as InstallAuthApp,
24
+ LoadingDots,
25
+ default6 as LoginWithOTPFlow,
26
+ default8 as Main2FAFlow,
27
+ default9 as ResetCode,
28
+ StokrLoader,
29
+ StokrLoaderBox,
30
+ default7 as Sucess2FA,
31
+ configure,
32
+ getConfig,
33
+ resetRuntimeConfig
34
+ };
@@ -0,0 +1,20 @@
1
+ import PropTypes from "prop-types";
2
+ const learnMoreCategoryPropTypes = {
3
+ title: PropTypes.string.isRequired,
4
+ inProgress: PropTypes.bool,
5
+ complete: PropTypes.bool,
6
+ tooltip: PropTypes.node
7
+ };
8
+ const learnMorePostPropTypes = {
9
+ id: PropTypes.string.isRequired,
10
+ title: PropTypes.string.isRequired,
11
+ excerpt: PropTypes.string.isRequired,
12
+ content: PropTypes.string.isRequired,
13
+ postType: PropTypes.oneOf(["video", "text"]),
14
+ cover: PropTypes.string,
15
+ videoSrc: PropTypes.string
16
+ };
17
+ export {
18
+ learnMoreCategoryPropTypes,
19
+ learnMorePostPropTypes
20
+ };
@@ -0,0 +1,68 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { colors } from "../../styles/colors.js";
4
+ import { Root, Dot, Label } from "./StatusDot.styles.js";
5
+ const VARIANT_PRESETS = {
6
+ pending: {
7
+ color: colors.grey2,
8
+ backgroundColor: "rgba(155, 155, 155, 0.14)"
9
+ },
10
+ initiated: {
11
+ color: colors.blue,
12
+ backgroundColor: "#0050CA0D"
13
+ },
14
+ paid: {
15
+ color: colors.fernGreen,
16
+ backgroundColor: "#4D97410D"
17
+ },
18
+ declined: {
19
+ color: colors.darkRed,
20
+ backgroundColor: "rgba(210, 32, 13, 0.08)"
21
+ }
22
+ };
23
+ const StatusDot = ({
24
+ children,
25
+ variant,
26
+ color,
27
+ backgroundColor,
28
+ surface = "transparent",
29
+ uppercase = false,
30
+ dotSize = 6,
31
+ className,
32
+ style,
33
+ labelStyle,
34
+ onClick,
35
+ ...rest
36
+ }) => {
37
+ const preset = variant && VARIANT_PRESETS[variant] ? VARIANT_PRESETS[variant] : null;
38
+ const resolvedColor = color ?? preset?.color ?? colors.black;
39
+ const isSubtle = surface === "subtle";
40
+ const resolvedBackground = isSubtle && (backgroundColor !== void 0 ? backgroundColor : preset?.backgroundColor);
41
+ return /* @__PURE__ */ jsxs(
42
+ Root,
43
+ {
44
+ $subtle: isSubtle,
45
+ $backgroundColor: resolvedBackground,
46
+ $hasClick: Boolean(onClick),
47
+ className,
48
+ style,
49
+ onClick,
50
+ role: onClick ? "button" : void 0,
51
+ tabIndex: onClick ? 0 : void 0,
52
+ onKeyDown: onClick ? (e) => {
53
+ if (e.key === "Enter" || e.key === " ") {
54
+ e.preventDefault();
55
+ onClick(e);
56
+ }
57
+ } : void 0,
58
+ ...rest,
59
+ children: [
60
+ /* @__PURE__ */ jsx(Dot, { $size: dotSize, $color: resolvedColor }),
61
+ /* @__PURE__ */ jsx(Label, { $color: resolvedColor, $uppercase: uppercase, style: labelStyle, children })
62
+ ]
63
+ }
64
+ );
65
+ };
66
+ export {
67
+ StatusDot
68
+ };
@@ -0,0 +1,45 @@
1
+ import styled from "styled-components";
2
+ const Root = styled.div.withConfig({
3
+ shouldForwardProp: (prop) => !["$subtle", "$backgroundColor", "$hasClick"].includes(prop)
4
+ })`
5
+ display: inline-flex;
6
+ align-items: center;
7
+ gap: 8px;
8
+ box-sizing: border-box;
9
+ padding: ${(p) => p.$subtle ? "2px 8px" : "0"};
10
+ background-color: ${(p) => p.$subtle && p.$backgroundColor ? p.$backgroundColor : "transparent"};
11
+ border-radius: ${(p) => p.$subtle ? "2px" : "0"};
12
+ cursor: ${(p) => p.$hasClick ? "pointer" : "default"};
13
+ white-space: nowrap;
14
+ transition: opacity 0.2s ease;
15
+
16
+ ${(p) => p.$hasClick && `
17
+ &:hover {
18
+ opacity: 0.85;
19
+ }
20
+ `}
21
+ `;
22
+ const Dot = styled.span.withConfig({
23
+ shouldForwardProp: (prop) => !["$size", "$color"].includes(prop)
24
+ })`
25
+ width: ${(p) => p.$size}px;
26
+ height: ${(p) => p.$size}px;
27
+ border-radius: 50%;
28
+ background-color: ${(p) => p.$color};
29
+ flex-shrink: 0;
30
+ `;
31
+ const Label = styled.span.withConfig({
32
+ shouldForwardProp: (prop) => !["$color", "$uppercase"].includes(prop)
33
+ })`
34
+ font-size: ${(p) => p.$uppercase ? "11px" : "12px"};
35
+ font-weight: ${(p) => p.$uppercase ? "700" : "400"};
36
+ line-height: 20px;
37
+ color: ${(p) => p.$color};
38
+ text-transform: ${(p) => p.$uppercase ? "uppercase" : "none"};
39
+ letter-spacing: ${(p) => p.$uppercase ? "2px" : "0.6px"};
40
+ `;
41
+ export {
42
+ Dot,
43
+ Label,
44
+ Root
45
+ };
package/dist/config.js ADDED
@@ -0,0 +1,28 @@
1
+ import { initFirebase } from "./firebase-config.js";
2
+ import axiosInstance from "./model/axios.js";
3
+ import axiosInstance$1 from "./model/axiosPublic.js";
4
+ import { assignRuntimeConfig } from "./runtime-config.js";
5
+ import { getConfig, resetRuntimeConfig } from "./runtime-config.js";
6
+ let _lastFirebaseConfig = null;
7
+ function configure(config = {}) {
8
+ assignRuntimeConfig(config);
9
+ if (config.apiUrl != null) {
10
+ axiosInstance.defaults.baseURL = config.apiUrl;
11
+ }
12
+ if (config.baseUrlPublic != null) {
13
+ axiosInstance$1.defaults.baseURL = config.baseUrlPublic;
14
+ }
15
+ if (config.firebase) {
16
+ _lastFirebaseConfig = config.firebase;
17
+ initFirebase(config.firebase);
18
+ }
19
+ }
20
+ function getLastFirebaseConfig() {
21
+ return _lastFirebaseConfig;
22
+ }
23
+ export {
24
+ configure,
25
+ getConfig,
26
+ getLastFirebaseConfig,
27
+ resetRuntimeConfig
28
+ };
@@ -1,6 +1,6 @@
1
1
  {
2
- "short_name": "React App",
3
- "name": "Create React App Sample",
2
+ "short_name": "Vite React App",
3
+ "name": "Vite React App",
4
4
  "icons": [
5
5
  {
6
6
  "src": "favicon.ico",
@@ -0,0 +1,17 @@
1
+ import { jsx, Fragment } from "react/jsx-runtime";
2
+ import "react";
3
+ import PropTypes from "prop-types";
4
+ import { useInRouterContext, BrowserRouter } from "react-router-dom";
5
+ function RouterWrapper({ children }) {
6
+ const inRouter = useInRouterContext();
7
+ if (inRouter) {
8
+ return /* @__PURE__ */ jsx(Fragment, { children });
9
+ }
10
+ return /* @__PURE__ */ jsx(BrowserRouter, { future: { v7_relativeSplatPath: false, v7_startTransition: false }, children });
11
+ }
12
+ RouterWrapper.propTypes = {
13
+ children: PropTypes.node
14
+ };
15
+ export {
16
+ RouterWrapper
17
+ };
@@ -0,0 +1,22 @@
1
+ const AppSurface = Object.freeze({
2
+ ONBOARDING: "onboarding",
3
+ DASHBOARD: "dashboard",
4
+ ADMIN: "admin",
5
+ BACKOFFICE: "backoffice",
6
+ /** Apex / public app origin (`https://{websiteDomain}`; path mode uses the same base as {@link getPlatformURL}). */
7
+ INVESTOR_ROOT: "investorRoot",
8
+ /** Register / sign-up entry from login flows. */
9
+ REGISTER: "register",
10
+ /** Default Mixpanel proxy host (subdomain or path). */
11
+ ANALYTICS: "analytics"
12
+ });
13
+ const AppRoute = Object.freeze({
14
+ WELCOME: "/welcome",
15
+ RESEND_ACTIVATION: "/resend-activation-email",
16
+ CHECKLIST: "/checklist",
17
+ OVERVIEW: "/overview"
18
+ });
19
+ export {
20
+ AppRoute,
21
+ AppSurface
22
+ };
@@ -0,0 +1,36 @@
1
+ import { resolveAppHref } from "./resolve-app-href.js";
2
+ function pathnameIfSameOrigin(absoluteHref) {
3
+ if (typeof window === "undefined" || !absoluteHref) return null;
4
+ try {
5
+ const u = new URL(absoluteHref, window.location.href);
6
+ if (u.origin === window.location.origin) {
7
+ return `${u.pathname}${u.search}${u.hash}`;
8
+ }
9
+ } catch {
10
+ }
11
+ return null;
12
+ }
13
+ function navigateApp(navigate, surface, relativePath = "") {
14
+ const href = resolveAppHref(surface, relativePath);
15
+ if (!href) return;
16
+ const internal = pathnameIfSameOrigin(href);
17
+ if (internal != null && typeof navigate === "function") {
18
+ navigate(internal);
19
+ return;
20
+ }
21
+ window.location.assign(href);
22
+ }
23
+ function navigateToHref(navigate, href) {
24
+ if (!href) return;
25
+ const internal = pathnameIfSameOrigin(href);
26
+ if (internal != null && typeof navigate === "function") {
27
+ navigate(internal);
28
+ return;
29
+ }
30
+ window.location.assign(href);
31
+ }
32
+ export {
33
+ navigateApp,
34
+ navigateToHref,
35
+ pathnameIfSameOrigin
36
+ };
@@ -0,0 +1,149 @@
1
+ import { getPlatformURL } from "../constants/globalVariables.js";
2
+ import { getConfig } from "../runtime-config.js";
3
+ import { AppSurface } from "./app-routes.js";
4
+ import { getAnalyticsIngestUrl, getBackofficeAppUrl } from "../utils/app-urls-analytics-backoffice.js";
5
+ const DEFAULT_APP_PATHS = {
6
+ onboarding: "/signin",
7
+ registerEntry: "/signup",
8
+ dashboard: "/dashboard",
9
+ admin: "/admin"
10
+ };
11
+ const SURFACE_ROUTING_PATH_KEYS = Object.freeze([
12
+ "onboarding",
13
+ "dashboard",
14
+ "admin",
15
+ "registerEntry",
16
+ "investorRoot"
17
+ ]);
18
+ function routingModeRaw() {
19
+ const v = getConfig("routingMode");
20
+ return typeof v === "string" ? v.trim().toLowerCase() : "";
21
+ }
22
+ function isPathBasedRouting() {
23
+ return routingModeRaw() === "path";
24
+ }
25
+ function isPathForSurface(pathKey) {
26
+ const per = getConfig("surfaceRoutingMode");
27
+ if (!per || typeof per !== "object" || Array.isArray(per)) return isPathBasedRouting();
28
+ if (!Object.prototype.hasOwnProperty.call(per, pathKey)) return isPathBasedRouting();
29
+ const v = per[pathKey];
30
+ if (v === "path") return true;
31
+ if (v === "subdomain") return false;
32
+ return isPathBasedRouting();
33
+ }
34
+ function mergedPaths() {
35
+ const o = getConfig("appUrlPaths");
36
+ if (o && typeof o === "object" && !Array.isArray(o)) {
37
+ return { ...DEFAULT_APP_PATHS, ...o };
38
+ }
39
+ return { ...DEFAULT_APP_PATHS };
40
+ }
41
+ function stripTrailingSlash(s) {
42
+ return String(s).replace(/\/+$/, "");
43
+ }
44
+ function normalizeLeading(path) {
45
+ if (path == null || path === "") return "";
46
+ const p = String(path);
47
+ return p.startsWith("/") ? p : `/${p}`;
48
+ }
49
+ function isNonEmptyString(v) {
50
+ return v != null && String(v).trim() !== "";
51
+ }
52
+ function trimmedWebsiteDomain() {
53
+ const d = getConfig("websiteDomain");
54
+ return isNonEmptyString(d) ? String(d).trim() : "";
55
+ }
56
+ function getAppPublicOrigin() {
57
+ const u = getPlatformURL();
58
+ if (!isNonEmptyString(u)) return "";
59
+ return stripTrailingSlash(String(u).trim());
60
+ }
61
+ function subdomainOrigin(sub) {
62
+ const domain = trimmedWebsiteDomain();
63
+ if (!domain) return "";
64
+ return `https://${sub}.${domain}`;
65
+ }
66
+ function surfaceBase(pathKey, legacySubdomain) {
67
+ if (isPathForSurface(pathKey)) {
68
+ const origin = getAppPublicOrigin();
69
+ if (!origin) return "";
70
+ const seg = stripTrailingSlash(normalizeLeading(mergedPaths()[pathKey]));
71
+ return `${origin}${seg}`;
72
+ }
73
+ return subdomainOrigin(legacySubdomain);
74
+ }
75
+ function onboardingBase() {
76
+ return surfaceBase("onboarding", "signup");
77
+ }
78
+ function dashboardBase() {
79
+ return surfaceBase("dashboard", "dashboard");
80
+ }
81
+ function adminBase() {
82
+ return surfaceBase("admin", "admin");
83
+ }
84
+ function investorRootBase() {
85
+ if (isPathForSurface("investorRoot")) return getAppPublicOrigin() || "";
86
+ const domain = trimmedWebsiteDomain();
87
+ if (!domain) return "";
88
+ return `https://${domain}`;
89
+ }
90
+ function registerEntryHref() {
91
+ if (isPathForSurface("registerEntry")) {
92
+ const origin = getAppPublicOrigin();
93
+ if (!origin) return "";
94
+ const seg = stripTrailingSlash(normalizeLeading(mergedPaths().registerEntry));
95
+ return `${origin}${seg}`;
96
+ }
97
+ const domain = trimmedWebsiteDomain();
98
+ if (!domain) return "";
99
+ return `https://${domain}/signup`;
100
+ }
101
+ function resolveAppHref(surface, relativePath = "") {
102
+ let base = "";
103
+ switch (surface) {
104
+ case AppSurface.ONBOARDING:
105
+ base = onboardingBase();
106
+ break;
107
+ case AppSurface.DASHBOARD:
108
+ base = dashboardBase();
109
+ break;
110
+ case AppSurface.ADMIN:
111
+ base = adminBase();
112
+ break;
113
+ case AppSurface.BACKOFFICE:
114
+ base = getBackofficeAppUrl("");
115
+ break;
116
+ case AppSurface.INVESTOR_ROOT:
117
+ base = investorRootBase();
118
+ break;
119
+ case AppSurface.REGISTER:
120
+ return registerEntryHref();
121
+ case AppSurface.ANALYTICS:
122
+ return getAnalyticsIngestUrl();
123
+ default:
124
+ return "";
125
+ }
126
+ const p = normalizeLeading(relativePath);
127
+ if (!base) return "";
128
+ const root = stripTrailingSlash(base);
129
+ return p ? `${root}${p}` : root;
130
+ }
131
+ function isAlreadyOnOnboardingFlow() {
132
+ if (typeof window === "undefined") return false;
133
+ const { href, hostname } = window.location;
134
+ if (isPathForSurface("onboarding")) {
135
+ const base = onboardingBase();
136
+ if (base && href.startsWith(base)) return true;
137
+ const seg = mergedPaths().onboarding.replace(/^\//, "");
138
+ return href.includes(`/${seg}/`) || href.includes(`/${seg}?`) || href.endsWith(`/${seg}`);
139
+ }
140
+ return Boolean(hostname?.startsWith("signup.") || href.includes("signup."));
141
+ }
142
+ export {
143
+ SURFACE_ROUTING_PATH_KEYS,
144
+ getAppPublicOrigin,
145
+ isAlreadyOnOnboardingFlow,
146
+ isPathBasedRouting,
147
+ isPathForSurface,
148
+ resolveAppHref
149
+ };
@@ -0,0 +1,94 @@
1
+ const __vite_import_meta_env__ = { "BASE_URL": "/", "DEV": false, "MODE": "production", "PROD": true, "SSR": false };
2
+ const _overrides = {};
3
+ const ENV_KEY_BY_CONFIG = {
4
+ apiUrl: "VITE_API_URL",
5
+ baseUrlPublic: "VITE_BASE_URL_PUBLIC",
6
+ cookieDomain: "VITE_COOKIE_DOMAIN",
7
+ websiteDomain: "VITE_WEBSITE_DOMAIN",
8
+ photoApiUrl: "VITE_PHOTO_API_URL",
9
+ /** `'path'` = single-origin URLs (`https://DOMAIN/dashboard`, …). Anything else = legacy subdomains (`dashboard.`, `signup.`, …). */
10
+ routingMode: "VITE_ROUTING_MODE"
11
+ };
12
+ const FIREBASE_ENV_VARS = [
13
+ "VITE_FIREBASE_API_KEY",
14
+ "VITE_FIREBASE_AUTH_DOMAIN",
15
+ "VITE_FIREBASE_PROJECT_ID",
16
+ "VITE_FIREBASE_STORAGE_BUCKET",
17
+ "VITE_FIREBASE_MESSAGING_SENDER_ID",
18
+ "VITE_FIREBASE_APP_ID"
19
+ ];
20
+ let hasWarnedMissingEnv = false;
21
+ function env(name) {
22
+ try {
23
+ return __vite_import_meta_env__?.[name];
24
+ } catch {
25
+ return void 0;
26
+ }
27
+ }
28
+ function isProvided(value) {
29
+ if (value == null) return false;
30
+ if (typeof value === "string") return value.trim() !== "";
31
+ return true;
32
+ }
33
+ function getMissingRuntimeEnvVarNames() {
34
+ const missing = [];
35
+ for (const [configKey, envName] of Object.entries(ENV_KEY_BY_CONFIG)) {
36
+ const resolved = _overrides[configKey] ?? env(envName);
37
+ if (!isProvided(resolved)) missing.push(envName);
38
+ }
39
+ if (!_overrides.firebase) {
40
+ for (const envName of FIREBASE_ENV_VARS) {
41
+ if (!isProvided(env(envName))) missing.push(envName);
42
+ }
43
+ }
44
+ return missing;
45
+ }
46
+ function warnMissingRuntimeEnvOnce() {
47
+ if (hasWarnedMissingEnv || typeof console === "undefined" || !console.warn) return;
48
+ const missing = getMissingRuntimeEnvVarNames();
49
+ if (missing.length === 0) return;
50
+ hasWarnedMissingEnv = true;
51
+ console.warn(
52
+ "[@stokr/components-library] Missing runtime configuration: no value from configure() / AuthProvider and no Vite env fallback for:\n - " + missing.join("\n - ")
53
+ );
54
+ }
55
+ function assignRuntimeConfig(config = {}) {
56
+ Object.assign(_overrides, config);
57
+ warnMissingRuntimeEnvOnce();
58
+ }
59
+ function resetRuntimeConfig() {
60
+ for (const k of Object.keys(_overrides)) {
61
+ delete _overrides[k];
62
+ }
63
+ hasWarnedMissingEnv = false;
64
+ }
65
+ function buildFirebaseConfigFromEnv() {
66
+ return {
67
+ apiKey: env("VITE_FIREBASE_API_KEY"),
68
+ authDomain: env("VITE_FIREBASE_AUTH_DOMAIN"),
69
+ projectId: env("VITE_FIREBASE_PROJECT_ID"),
70
+ storageBucket: env("VITE_FIREBASE_STORAGE_BUCKET"),
71
+ messagingSenderId: env("VITE_FIREBASE_MESSAGING_SENDER_ID"),
72
+ appId: env("VITE_FIREBASE_APP_ID"),
73
+ measurementId: env("VITE_FIREBASE_MEASUREMENT_ID")
74
+ };
75
+ }
76
+ function getConfig(key) {
77
+ if (key === "firebase") {
78
+ return _overrides.firebase ?? buildFirebaseConfigFromEnv();
79
+ }
80
+ if (key === "appUrlPaths") {
81
+ return _overrides.appUrlPaths;
82
+ }
83
+ const envName = ENV_KEY_BY_CONFIG[key];
84
+ if (envName) {
85
+ return _overrides[key] ?? env(envName);
86
+ }
87
+ return _overrides[key];
88
+ }
89
+ export {
90
+ assignRuntimeConfig,
91
+ getConfig,
92
+ getMissingRuntimeEnvVarNames,
93
+ resetRuntimeConfig
94
+ };
@@ -0,0 +1,4 @@
1
+ const successAnimation = "data:application/octet-stream;base64,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";
2
+ export {
3
+ successAnimation as default
4
+ };
@@ -0,0 +1,4 @@
1
+ const progressAnimation = "data:application/octet-stream;base64,UEsDBBQAAAAIAMhlkVv8EF7IaAAAAJkAAAANAAAAbWFuaWZlc3QuanNvbo2NOwqFQAxF95L6PT9gZeUGXIFYBCboyDiRJAoi7t1U1nb3cy73goNEI2dooYYfTJRJ0Fjcd4EtsVmk8lX/Rbu6aIrKWdxt/gbmuKL5iUI7XBCDbzbhSUjV6y3h2XMgTzPLignu8X4AUEsDBBQAAAAIAMhlkVt5yYml/QMAAGwbAAAYAAAAYW5pbWF0aW9ucy9wcm9ncmVzcy5qc29u7VnbbtpAEP0VtM8L8voOb616eY2Uqi8oDy6Y4GIwst2mUcS/98zu2qwNhAQCaWhEfGFnvJ45c3xmcR7YbzZgXi/ouYyzSc4GjsVZsmQDHDIchIeTOzbwLByn+riY46KrPLvN46LAdePxWF4QFUVcFmwwvOEsje7jnM4fanOywFFwVt6zgatnKZPRrIMpCtwaphmueGAZ7SJ5zQzDdMvkD07EijP4GbbKYsGCaA3L0HY9bnsutxAM+diICXs4wsd0tDg+2gkhaCcZyNqJgtCbdvW1K02IgOFXTKNlrFKmFNltjsSSUmFQZ87ilPJtTh/2PI6tCnUzm3WIDowSus9pmiyLuHMVldOOwJzzBUY/fPr4ufM9HpVZ3rmmgDrdjvaEyxRxTKK0iFdcB1mUGB61kuXyY9xwR0VcmEAOw9RXBg+GFLMSnj/lYQ6wUPQfiLxi0HWZZ7N4e+hf82g5TUYIXnltjb0kgFtAuUCy64qebYK5WfGq3jsrbSS/lXL+blQCmhQDmxcRXkUzGG0hwCQo3/JoUUyyfM5WCKFRaBvZLpCug4JpRms4NXW3oJj9Wm6FzuSmfC4xi+LDlAxqPvU01qHCE/4KPblHgICgNQJBGQ497qIQGEQxPJxgHGzQIdRlUTqyl767s3hh8gogarKXJOO87O1aIC7vilq03jx5VREJpd3UxbcDqbtHVoUTcmxvX1bbzDy/rpKqXgwpqxo/TkuMPoOW5XyDf5UyI5JYG0hVlejSAIxDqxc6DgLDHPq8wkFZhR/UVjqHFdwPPHmzoYXvCIANQhuNTw4R1JRpVaomplVuMCBThCNRrKFK5pL4xXb2fEnSMs5BHnJsoED3W68aHSocHgH6LgGlIBvLQCBtLgPnUbLojJJ8lBIjT7AY9C1u4yE6cjG4o3rc2JuVbIxvVBXj9d6scGNcVRvRV6WtV6EE6bnDCHsV74RAFLS9TiRVGH2L468Kov0YrLE6xZrd9kOO7RWay8FSo1EVLeyddZU0vppvNawGAZ+rLXjUjtSWx3qq1evbfVeIwHcDywdHAlt4fujbgesJoowT4Edg3xJ9/9DWC406X+udENFeIkdKpMrxGCY8sdEQOkq1TThQ03QfGOTz9PUxJKexnrusdQjYdPAvu2YHFh79BN7ThLHAMZswtHCc3e1pwy+1gAkxUU0ixax+UDFrzatntnnP6dl460P7va2+6/q8a4f/YLs3sGm0+wZG9GZObpfX304igq1H+VyC5dKrva5jNV7uXZZqHfM+SqsWMZ5kS9P7MdGCWu0ULfmK7LSyhUesJVvCqjvi/65ba3DaumWA9C5c78J1OcIF5sr1luY3CIqDUi64zKN8pv4NdrP6C1BLAQIUABQAAAAIAMhlkVv8EF7IaAAAAJkAAAANAAAAAAAAAAAAAAAAAAAAAABtYW5pZmVzdC5qc29uUEsBAhQAFAAAAAgAyGWRW3nJiaX9AwAAbBsAABgAAAAAAAAAAAAAAAAAkwAAAGFuaW1hdGlvbnMvcHJvZ3Jlc3MuanNvblBLBQYAAAAAAgACAIEAAADGBAAAAAA=";
2
+ export {
3
+ progressAnimation as default
4
+ };
@@ -0,0 +1,4 @@
1
+ const uploadAnimation = "data:application/octet-stream;base64,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";
2
+ export {
3
+ uploadAnimation as default
4
+ };