@flamingo-stack/openframe-frontend-core 0.0.234 → 0.0.235-snapshot.20260609090033

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 (100) hide show
  1. package/dist/{chunk-Z46NRJWW.js → chunk-265KKBV2.js} +2 -2
  2. package/dist/{chunk-BOF5MSRY.js → chunk-2LEMRJ7Z.js} +3 -3
  3. package/dist/{chunk-EO3RG6II.cjs → chunk-7SOVT7RJ.cjs} +16 -16
  4. package/dist/{chunk-EO3RG6II.cjs.map → chunk-7SOVT7RJ.cjs.map} +1 -1
  5. package/dist/{chunk-YZDUOUMB.js → chunk-AGU44B7B.js} +2 -2
  6. package/dist/{chunk-DHCGJW3G.js → chunk-AZGRKZJ7.js} +10 -6
  7. package/dist/chunk-AZGRKZJ7.js.map +1 -0
  8. package/dist/{chunk-W7P7RH2X.cjs → chunk-BXMMMSIK.cjs} +1278 -1274
  9. package/dist/chunk-BXMMMSIK.cjs.map +1 -0
  10. package/dist/{chunk-IBSZ27Y7.cjs → chunk-E3VQ53IM.cjs} +7 -7
  11. package/dist/{chunk-IBSZ27Y7.cjs.map → chunk-E3VQ53IM.cjs.map} +1 -1
  12. package/dist/chunk-FIG2RKZF.cjs +169 -0
  13. package/dist/chunk-FIG2RKZF.cjs.map +1 -0
  14. package/dist/{chunk-E6B4B7GM.cjs → chunk-GRTZ23GL.cjs} +49 -49
  15. package/dist/{chunk-E6B4B7GM.cjs.map → chunk-GRTZ23GL.cjs.map} +1 -1
  16. package/dist/{chunk-F6F525T7.js → chunk-HGYOMQM3.js} +2 -2
  17. package/dist/{chunk-GSD52WAS.js → chunk-JNXFCV7K.js} +4 -4
  18. package/dist/{chunk-D3S2ODUI.js → chunk-KIGEKMBB.js} +4 -4
  19. package/dist/{chunk-GYRRSOTR.cjs → chunk-LPJPTBRI.cjs} +38 -38
  20. package/dist/{chunk-GYRRSOTR.cjs.map → chunk-LPJPTBRI.cjs.map} +1 -1
  21. package/dist/{chunk-UYWJM2LS.cjs → chunk-NOS6DCYY.cjs} +12 -12
  22. package/dist/{chunk-UYWJM2LS.cjs.map → chunk-NOS6DCYY.cjs.map} +1 -1
  23. package/dist/{chunk-LLTUSEHF.js → chunk-Q3GY66ST.js} +3 -3
  24. package/dist/chunk-XTCBRQN2.js +169 -0
  25. package/dist/chunk-XTCBRQN2.js.map +1 -0
  26. package/dist/{chunk-MWW7LKDN.cjs → chunk-Z4IBEIWD.cjs} +8 -8
  27. package/dist/{chunk-MWW7LKDN.cjs.map → chunk-Z4IBEIWD.cjs.map} +1 -1
  28. package/dist/{chunk-52PRKXK4.cjs → chunk-ZP2DKI5P.cjs} +32 -32
  29. package/dist/{chunk-52PRKXK4.cjs.map → chunk-ZP2DKI5P.cjs.map} +1 -1
  30. package/dist/components/chat/index.cjs +10 -6
  31. package/dist/components/chat/index.cjs.map +1 -1
  32. package/dist/components/chat/index.d.ts +1 -0
  33. package/dist/components/chat/index.d.ts.map +1 -1
  34. package/dist/components/chat/index.js +9 -5
  35. package/dist/components/contact/index.cjs +7 -7
  36. package/dist/components/contact/index.js +6 -6
  37. package/dist/components/features/index.cjs +6 -6
  38. package/dist/components/features/index.js +5 -5
  39. package/dist/components/icons/index.cjs +3 -3
  40. package/dist/components/icons/index.js +2 -2
  41. package/dist/components/index.cjs +241 -238
  42. package/dist/components/index.cjs.map +1 -1
  43. package/dist/components/index.js +13 -10
  44. package/dist/components/index.js.map +1 -1
  45. package/dist/components/navigation/index.cjs +6 -6
  46. package/dist/components/navigation/index.js +5 -5
  47. package/dist/components/onboarding-guides/index.cjs +30 -30
  48. package/dist/components/onboarding-guides/index.js +7 -7
  49. package/dist/components/resizable.d.ts +1 -1
  50. package/dist/components/tickets/index.cjs +89 -89
  51. package/dist/components/tickets/index.js +8 -8
  52. package/dist/components/ui/file-manager/index.cjs +69 -69
  53. package/dist/components/ui/file-manager/index.js +2 -2
  54. package/dist/components/ui/index.cjs +10 -6
  55. package/dist/components/ui/index.cjs.map +1 -1
  56. package/dist/components/ui/index.js +9 -5
  57. package/dist/components/vendor-display-button.d.ts.map +1 -1
  58. package/dist/hooks/index.cjs +4 -4
  59. package/dist/hooks/index.js +3 -3
  60. package/dist/index.cjs +10 -6
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.js +9 -5
  63. package/dist/platform-domains.cjs +149 -0
  64. package/dist/platform-domains.cjs.map +1 -0
  65. package/dist/platform-domains.d.ts +106 -0
  66. package/dist/platform-domains.d.ts.map +1 -0
  67. package/dist/platform-domains.js +134 -0
  68. package/dist/platform-domains.js.map +1 -0
  69. package/dist/types/index.cjs +87 -0
  70. package/dist/types/index.cjs.map +1 -1
  71. package/dist/types/index.js +87 -0
  72. package/dist/types/index.js.map +1 -1
  73. package/dist/utils/cn.d.ts +8 -43
  74. package/dist/utils/cn.d.ts.map +1 -1
  75. package/dist/utils/index.cjs +113 -72
  76. package/dist/utils/index.cjs.map +1 -1
  77. package/dist/utils/index.d.ts +3 -2
  78. package/dist/utils/index.d.ts.map +1 -1
  79. package/dist/utils/index.js +113 -72
  80. package/dist/utils/index.js.map +1 -1
  81. package/package.json +7 -1
  82. package/src/__tests__/platform-domains.test.ts +189 -0
  83. package/src/components/chat/index.ts +1 -0
  84. package/src/components/vendor-display-button.tsx +4 -3
  85. package/src/platform-domains.ts +299 -0
  86. package/src/utils/cn.ts +18 -134
  87. package/src/utils/index.ts +7 -2
  88. package/dist/chunk-2TBN53KY.cjs +0 -122
  89. package/dist/chunk-2TBN53KY.cjs.map +0 -1
  90. package/dist/chunk-DHCGJW3G.js.map +0 -1
  91. package/dist/chunk-W7P7RH2X.cjs.map +0 -1
  92. package/dist/chunk-YICWWZ3Z.js +0 -122
  93. package/dist/chunk-YICWWZ3Z.js.map +0 -1
  94. /package/dist/{chunk-Z46NRJWW.js.map → chunk-265KKBV2.js.map} +0 -0
  95. /package/dist/{chunk-BOF5MSRY.js.map → chunk-2LEMRJ7Z.js.map} +0 -0
  96. /package/dist/{chunk-YZDUOUMB.js.map → chunk-AGU44B7B.js.map} +0 -0
  97. /package/dist/{chunk-F6F525T7.js.map → chunk-HGYOMQM3.js.map} +0 -0
  98. /package/dist/{chunk-GSD52WAS.js.map → chunk-JNXFCV7K.js.map} +0 -0
  99. /package/dist/{chunk-D3S2ODUI.js.map → chunk-KIGEKMBB.js.map} +0 -0
  100. /package/dist/{chunk-LLTUSEHF.js.map → chunk-Q3GY66ST.js.map} +0 -0
@@ -1,9 +1,10 @@
1
- export { cn, getAllPlatformBaseDomains } from './cn';
1
+ export { cn } from './cn';
2
+ export { getPlatformProductionUrl, getAllPlatformBaseDomains } from '../platform-domains';
2
3
  export { formatDate, formatNumber, formatPrice, formatBytes } from './format';
3
4
  export { PLAY_ICON_PATH } from '../components/icons-v2-generated/media-playback/play-icon';
4
5
  export { getPlatformAccentColor, getCurrentPlatform, type ColorCategory, HEX_PATTERN } from './ods-color-utils';
5
6
  export { delay, generateRandomString, truncateString, deepClone, getSlackCommunityJoinUrl } from './common';
6
- export { getBaseUrl, getPlatformProductionUrl } from '../utils/cn';
7
+ export { getBaseUrl } from '../utils/cn';
7
8
  export * from './platform-config';
8
9
  export * from './os-platforms';
9
10
  export * from './access-code-client';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -6,52 +6,92 @@ import { Youtube, Video, Users, Twitter, TrendingUp, TableProperties, Star, Shie
6
6
  import { isValidPhoneNumber, parsePhoneNumber, getCountryCallingCode, getCountries } from 'libphonenumber-js';
7
7
 
8
8
  // src/utils/cn.ts
9
- var twMerge = extendTailwindMerge({
10
- extend: {
11
- classGroups: {
12
- "ods-typography": ["text-h1", "text-h2", "text-h3", "text-h4", "text-h5", "text-h6"]
13
- }
14
- }
15
- });
16
- function cn(...inputs) {
17
- return twMerge(clsx(inputs));
9
+
10
+ // src/platform-domains.ts
11
+ var PLATFORM_DOMAINS = [
12
+ { key: "marketing-hub", defaultUrl: "https://marketing-hub.flamingo.so", envVar: "NEXT_PUBLIC_MARKETING_HUB_URL" },
13
+ { key: "company-hub", defaultUrl: "https://company-hub.flamingo.so", envVar: "NEXT_PUBLIC_COMPANY_HUB_URL" },
14
+ { key: "product-hub", defaultUrl: "https://product-hub.flamingo.so", envVar: "NEXT_PUBLIC_PRODUCT_HUB_URL" },
15
+ { key: "revenue-hub", defaultUrl: "https://revenue-hub.flamingo.so", envVar: "NEXT_PUBLIC_REVENUE_HUB_URL" },
16
+ { key: "people-hub", defaultUrl: "https://people-hub.flamingo.so", envVar: "NEXT_PUBLIC_PEOPLE_HUB_URL" },
17
+ { key: "openmsp", defaultUrl: "https://www.openmsp.ai", envVar: "NEXT_PUBLIC_OPENMSP_URL" },
18
+ // ORDERING INVARIANT (first-wins, load-bearing): `flamingo` MUST precede `flamingo-teaser` + `universal`.
19
+ // All three resolve to www.flamingo.run; the reverse index is first-wins → flamingo claims the shared host,
20
+ // teaser keeps only its unique flamingo.cx aliases, universal contributes no unique host.
21
+ // ⚠️ DO NOT REORDER — enforced by the module-load self-check at the bottom of this file.
22
+ { key: "flamingo", defaultUrl: "https://www.flamingo.run", envVar: "NEXT_PUBLIC_FLAMINGO_URL" },
23
+ { key: "tmcg", defaultUrl: "https://www.tmcg.miami", envVar: "NEXT_PUBLIC_TMCG_URL" },
24
+ { key: "flamingo-teaser", defaultUrl: "https://www.flamingo.run", envVar: "NEXT_PUBLIC_FLAMINGO_URL", aliasHostnames: ["flamingo.cx", "www.flamingo.cx"] },
25
+ { key: "openframe", defaultUrl: "https://openframe.ai", envVar: "NEXT_PUBLIC_OPENFRAME_URL", aliasHostnames: ["openframe.ai", "www.openframe.ai", "hub.openframe.ai"] },
26
+ { key: "openframe-dashboard", defaultUrl: "https://openframe.ai", envVar: "NEXT_PUBLIC_OPENFRAME_DASHBOARD_URL", pseudo: true },
27
+ { key: "universal", defaultUrl: "https://www.flamingo.run", envVar: "NEXT_PUBLIC_FLAMINGO_URL" }
28
+ ];
29
+ var ENV_OVERRIDES = {
30
+ NEXT_PUBLIC_MARKETING_HUB_URL: process.env.NEXT_PUBLIC_MARKETING_HUB_URL,
31
+ NEXT_PUBLIC_COMPANY_HUB_URL: process.env.NEXT_PUBLIC_COMPANY_HUB_URL,
32
+ NEXT_PUBLIC_PRODUCT_HUB_URL: process.env.NEXT_PUBLIC_PRODUCT_HUB_URL,
33
+ NEXT_PUBLIC_REVENUE_HUB_URL: process.env.NEXT_PUBLIC_REVENUE_HUB_URL,
34
+ NEXT_PUBLIC_PEOPLE_HUB_URL: process.env.NEXT_PUBLIC_PEOPLE_HUB_URL,
35
+ NEXT_PUBLIC_OPENMSP_URL: process.env.NEXT_PUBLIC_OPENMSP_URL,
36
+ NEXT_PUBLIC_FLAMINGO_URL: process.env.NEXT_PUBLIC_FLAMINGO_URL,
37
+ NEXT_PUBLIC_TMCG_URL: process.env.NEXT_PUBLIC_TMCG_URL,
38
+ NEXT_PUBLIC_OPENFRAME_URL: process.env.NEXT_PUBLIC_OPENFRAME_URL,
39
+ NEXT_PUBLIC_OPENFRAME_DASHBOARD_URL: process.env.NEXT_PUBLIC_OPENFRAME_DASHBOARD_URL
40
+ };
41
+ function byKey(key) {
42
+ return PLATFORM_DOMAINS.find((e) => e.key === key);
43
+ }
44
+ function envOverrideFor(key) {
45
+ const envVar = byKey(key)?.envVar;
46
+ if (!envVar) return null;
47
+ return ENV_OVERRIDES[envVar] || null;
48
+ }
49
+ function ensureScheme(url) {
50
+ const trimmed = url.trim();
51
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed)) return trimmed;
52
+ return `https://${trimmed.replace(/^\/+/, "")}`;
18
53
  }
19
54
  function getPlatformProductionUrl(platform) {
20
- switch (platform) {
21
- // *-hub platforms — env var convention: NEXT_PUBLIC_<NAME>_HUB_URL
22
- case "marketing-hub":
23
- return process.env.NEXT_PUBLIC_MARKETING_HUB_URL || "https://marketing-hub.flamingo.so";
24
- case "company-hub":
25
- return process.env.NEXT_PUBLIC_COMPANY_HUB_URL || "https://company-hub.flamingo.so";
26
- case "product-hub":
27
- return process.env.NEXT_PUBLIC_PRODUCT_HUB_URL || "https://product-hub.flamingo.so";
28
- case "revenue-hub":
29
- return process.env.NEXT_PUBLIC_REVENUE_HUB_URL || "https://revenue-hub.flamingo.so";
30
- case "people-hub":
31
- return process.env.NEXT_PUBLIC_PEOPLE_HUB_URL || "https://people-hub.flamingo.so";
32
- // Standalone platforms — env var convention: NEXT_PUBLIC_<NAME>_URL
33
- case "openmsp":
34
- return process.env.NEXT_PUBLIC_OPENMSP_URL || "https://www.openmsp.ai";
35
- case "flamingo":
36
- return process.env.NEXT_PUBLIC_FLAMINGO_URL || "https://www.flamingo.run";
37
- case "tmcg":
38
- return process.env.NEXT_PUBLIC_TMCG_URL || "https://www.tmcg.miami";
39
- case "flamingo-teaser":
40
- return process.env.NEXT_PUBLIC_FLAMINGO_URL || "https://www.flamingo.run";
41
- case "openframe":
42
- return process.env.NEXT_PUBLIC_OPENFRAME_URL || "https://openframe.ai";
43
- // OpenFrame product / dashboard — the "Start Free Trial" CTA target. DISTINCT from
44
- // the `openframe` content hub above: production overrides that one to
45
- // hub.openframe.ai via NEXT_PUBLIC_OPENFRAME_URL (the knowledge/docs deployment),
46
- // so a product CTA must NOT reuse it. Defaults to the product apex so the CTA is
47
- // correct even when the (optional) dashboard override is unset.
48
- case "openframe-dashboard":
49
- return process.env.NEXT_PUBLIC_OPENFRAME_DASHBOARD_URL || "https://openframe.ai";
50
- case "universal":
51
- return process.env.NEXT_PUBLIC_FLAMINGO_URL || "https://www.flamingo.run";
52
- default:
53
- return process.env.NEXT_PUBLIC_FLAMINGO_URL || "https://www.flamingo.run";
55
+ const resolved = envOverrideFor(platform) ?? byKey(platform)?.defaultUrl ?? envOverrideFor("flamingo") ?? "https://www.flamingo.run";
56
+ return ensureScheme(resolved);
57
+ }
58
+ function hostOf(value) {
59
+ if (!value) return null;
60
+ try {
61
+ return new URL(value).hostname.toLowerCase();
62
+ } catch {
63
+ return null;
64
+ }
65
+ }
66
+ function expandWwwApex(host) {
67
+ if (host.startsWith("www.")) return [host, host.slice(4)];
68
+ if (host.split(".").length === 2) return [host, `www.${host}`];
69
+ return [host];
70
+ }
71
+ function toRegistrableBaseDomain(host) {
72
+ const parts = host.split(".");
73
+ if (parts.length >= 2) return parts.slice(-2).join(".");
74
+ return void 0;
75
+ }
76
+ function aliasHostsOf(key) {
77
+ return byKey(key)?.aliasHostnames ?? [];
78
+ }
79
+ function hostsForEntry(entry, opts) {
80
+ const resolved = hostOf(getPlatformProductionUrl(entry.key));
81
+ const hosts = resolved ? expandWwwApex(resolved) : [];
82
+ hosts.push(...aliasHostsOf(entry.key));
83
+ return hosts;
84
+ }
85
+ function getPlatformByHostname(hostname) {
86
+ const host = hostname.toLowerCase();
87
+ for (const entry of PLATFORM_DOMAINS) {
88
+ if (entry.pseudo) continue;
89
+ if (hostsForEntry(entry).includes(host)) return entry.key;
54
90
  }
91
+ return null;
92
+ }
93
+ function isPreviewHost(hostname) {
94
+ return hostname.endsWith(".vercel.app");
55
95
  }
56
96
  function getAllPlatformBaseDomains() {
57
97
  if (typeof window === "undefined") return [];
@@ -59,40 +99,41 @@ function getAllPlatformBaseDomains() {
59
99
  if (hostname === "localhost" || hostname === "127.0.0.1" || hostname.startsWith("127.")) {
60
100
  return [];
61
101
  }
62
- const isVercelPreview = process.env.VERCEL_ENV === "preview" || process.env.NEXT_PUBLIC_VERCEL_ENV === "preview" || hostname.includes(".vercel.app");
63
- if (isVercelPreview) {
102
+ const previewEnv = process.env.VERCEL_ENV === "preview" || process.env.NEXT_PUBLIC_VERCEL_ENV === "preview" || isPreviewHost(hostname);
103
+ if (previewEnv) {
64
104
  return [".vercel.app", "vercel.app"];
65
105
  }
66
- const platformIdentifiers = [
67
- "marketing-hub",
68
- "company-hub",
69
- "product-hub",
70
- "revenue-hub",
71
- "people-hub",
72
- "openmsp",
73
- "flamingo",
74
- "tmcg",
75
- "flamingo-teaser",
76
- "openframe",
77
- "universal"
78
- ];
79
106
  const baseDomains = /* @__PURE__ */ new Set();
80
- platformIdentifiers.forEach((platform) => {
81
- try {
82
- const url = getPlatformProductionUrl(platform);
83
- const urlHostname = new URL(url).hostname;
84
- const parts = urlHostname.split(".");
85
- if (parts.length >= 2) {
86
- const baseDomain = parts.slice(-2).join(".");
87
- baseDomains.add(`.${baseDomain}`);
88
- baseDomains.add(baseDomain);
89
- }
90
- } catch (error) {
91
- console.warn("[Platform Domains] Failed to parse URL for platform:", platform, error);
107
+ for (const entry of PLATFORM_DOMAINS) {
108
+ if (entry.pseudo) continue;
109
+ const host = hostOf(getPlatformProductionUrl(entry.key));
110
+ if (!host) continue;
111
+ const base = toRegistrableBaseDomain(host);
112
+ if (base) {
113
+ baseDomains.add(`.${base}`);
114
+ baseDomains.add(base);
92
115
  }
93
- });
116
+ }
94
117
  return Array.from(baseDomains);
95
118
  }
119
+ var _orderIdx = (k) => PLATFORM_DOMAINS.findIndex((e) => e.key === k);
120
+ if (_orderIdx("flamingo") > _orderIdx("flamingo-teaser") || _orderIdx("flamingo") > _orderIdx("universal") || getPlatformByHostname("flamingo.cx") !== "flamingo-teaser" || getPlatformByHostname("hub.openframe.ai") !== "openframe") {
121
+ console.error(
122
+ "[platform-domains] \u26A0\uFE0F PLATFORM_DOMAINS ordering invariant violated \u2014 `flamingo` must precede `flamingo-teaser`/`universal`, and the openframe/teaser aliases must be intact. Do not reorder the table."
123
+ );
124
+ }
125
+
126
+ // src/utils/cn.ts
127
+ var twMerge = extendTailwindMerge({
128
+ extend: {
129
+ classGroups: {
130
+ "ods-typography": ["text-h1", "text-h2", "text-h3", "text-h4", "text-h5", "text-h6"]
131
+ }
132
+ }
133
+ });
134
+ function cn(...inputs) {
135
+ return twMerge(clsx(inputs));
136
+ }
96
137
  function getBaseUrl(platform) {
97
138
  if (process.env.NODE_ENV !== "production") {
98
139
  return process.env.NEXT_PUBLIC_DEV_URL || "http://localhost:3000";
@@ -103,7 +144,7 @@ function getBaseUrl(platform) {
103
144
  if (process.env.VERCEL_PROJECT_PRODUCTION_URL) {
104
145
  return `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}`;
105
146
  }
106
- return "https://www.openmsp.ai";
147
+ return getPlatformProductionUrl(process.env.NEXT_PUBLIC_APP_TYPE || "openmsp");
107
148
  }
108
149
 
109
150
  // src/utils/format.ts