@exyconn/common 2.1.0 → 2.3.3
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.
- package/README.md +969 -261
- package/dist/client/hooks/index.d.mts +1042 -0
- package/dist/client/hooks/index.d.ts +1042 -0
- package/dist/client/hooks/index.js +2276 -0
- package/dist/client/hooks/index.js.map +1 -0
- package/dist/client/hooks/index.mjs +2217 -0
- package/dist/client/hooks/index.mjs.map +1 -0
- package/dist/client/http/index.d.mts +217 -49
- package/dist/client/http/index.d.ts +217 -49
- package/dist/client/http/index.js +473 -94
- package/dist/client/http/index.js.map +1 -1
- package/dist/client/http/index.mjs +441 -84
- package/dist/client/http/index.mjs.map +1 -1
- package/dist/client/index.d.mts +6 -4
- package/dist/client/index.d.ts +6 -4
- package/dist/client/index.js +481 -319
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +449 -290
- package/dist/client/index.mjs.map +1 -1
- package/dist/client/utils/index.d.mts +3 -279
- package/dist/client/utils/index.d.ts +3 -279
- package/dist/client/web/index.d.mts +1461 -0
- package/dist/client/web/index.d.ts +1461 -0
- package/dist/client/web/index.js +2681 -0
- package/dist/client/web/index.js.map +1 -0
- package/dist/client/web/index.mjs +2618 -0
- package/dist/client/web/index.mjs.map +1 -0
- package/dist/data/brand-identity.d.mts +149 -0
- package/dist/data/brand-identity.d.ts +149 -0
- package/dist/data/brand-identity.js +235 -0
- package/dist/data/brand-identity.js.map +1 -0
- package/dist/data/brand-identity.mjs +220 -0
- package/dist/data/brand-identity.mjs.map +1 -0
- package/dist/data/countries.d.mts +61 -0
- package/dist/data/countries.d.ts +61 -0
- package/dist/data/countries.js +987 -0
- package/dist/data/countries.js.map +1 -0
- package/dist/data/countries.mjs +971 -0
- package/dist/data/countries.mjs.map +1 -0
- package/dist/data/currencies.d.mts +19 -0
- package/dist/data/currencies.d.ts +19 -0
- package/dist/data/currencies.js +162 -0
- package/dist/data/currencies.js.map +1 -0
- package/dist/data/currencies.mjs +153 -0
- package/dist/data/currencies.mjs.map +1 -0
- package/dist/data/index.d.mts +7 -0
- package/dist/data/index.d.ts +7 -0
- package/dist/data/index.js +2087 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/index.mjs +1948 -0
- package/dist/data/index.mjs.map +1 -0
- package/dist/data/phone-codes.d.mts +15 -0
- package/dist/data/phone-codes.d.ts +15 -0
- package/dist/data/phone-codes.js +219 -0
- package/dist/data/phone-codes.js.map +1 -0
- package/dist/data/phone-codes.mjs +211 -0
- package/dist/data/phone-codes.mjs.map +1 -0
- package/dist/data/regex.d.mts +287 -0
- package/dist/data/regex.d.ts +287 -0
- package/dist/data/regex.js +306 -0
- package/dist/data/regex.js.map +1 -0
- package/dist/data/regex.mjs +208 -0
- package/dist/data/regex.mjs.map +1 -0
- package/dist/data/timezones.d.mts +16 -0
- package/dist/data/timezones.d.ts +16 -0
- package/dist/data/timezones.js +98 -0
- package/dist/data/timezones.js.map +1 -0
- package/dist/data/timezones.mjs +89 -0
- package/dist/data/timezones.mjs.map +1 -0
- package/dist/index-BZf42T3R.d.mts +305 -0
- package/dist/index-CF0D8PGE.d.ts +305 -0
- package/dist/index-Ckhm_HaX.d.mts +138 -0
- package/dist/index-DKn4raO7.d.ts +222 -0
- package/dist/index-NS8dS0p9.d.mts +222 -0
- package/dist/index-Nqm5_lwT.d.ts +188 -0
- package/dist/index-br6POSyA.d.ts +138 -0
- package/dist/index-jBi3V6e5.d.mts +188 -0
- package/dist/index.d.mts +21 -580
- package/dist/index.d.ts +21 -580
- package/dist/index.js +1839 -347
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1850 -359
- package/dist/index.mjs.map +1 -1
- package/dist/packageCheck-B_qfsD6R.d.ts +280 -0
- package/dist/packageCheck-C2_FT_Rl.d.mts +280 -0
- package/dist/server/configs/index.d.mts +602 -0
- package/dist/server/configs/index.d.ts +602 -0
- package/dist/server/configs/index.js +707 -0
- package/dist/server/configs/index.js.map +1 -0
- package/dist/server/configs/index.mjs +665 -0
- package/dist/server/configs/index.mjs.map +1 -0
- package/dist/server/index.d.mts +4 -1
- package/dist/server/index.d.ts +4 -1
- package/dist/server/index.js +1330 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +1286 -2
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middleware/index.d.mts +283 -2
- package/dist/server/middleware/index.d.ts +283 -2
- package/dist/server/middleware/index.js +761 -0
- package/dist/server/middleware/index.js.map +1 -1
- package/dist/server/middleware/index.mjs +751 -1
- package/dist/server/middleware/index.mjs.map +1 -1
- package/dist/shared/config/index.d.mts +40 -0
- package/dist/shared/config/index.d.ts +40 -0
- package/dist/shared/config/index.js +58 -0
- package/dist/shared/config/index.js.map +1 -0
- package/dist/shared/config/index.mjs +51 -0
- package/dist/shared/config/index.mjs.map +1 -0
- package/dist/shared/constants/index.d.mts +593 -0
- package/dist/shared/constants/index.d.ts +593 -0
- package/dist/shared/constants/index.js +391 -0
- package/dist/shared/constants/index.js.map +1 -0
- package/dist/shared/constants/index.mjs +360 -0
- package/dist/shared/constants/index.mjs.map +1 -0
- package/dist/shared/index.d.mts +5 -1
- package/dist/shared/index.d.ts +5 -1
- package/dist/shared/types/index.d.mts +140 -0
- package/dist/shared/types/index.d.ts +140 -0
- package/dist/shared/types/index.js +4 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/types/index.mjs +3 -0
- package/dist/shared/types/index.mjs.map +1 -0
- package/dist/shared/utils/index.d.mts +255 -0
- package/dist/shared/utils/index.d.ts +255 -0
- package/dist/shared/utils/index.js +623 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/shared/utils/index.mjs +324 -0
- package/dist/shared/utils/index.mjs.map +1 -0
- package/dist/shared/validation/index.d.mts +258 -0
- package/dist/shared/validation/index.d.ts +258 -0
- package/dist/shared/validation/index.js +185 -0
- package/dist/shared/validation/index.js.map +1 -0
- package/dist/shared/validation/index.mjs +172 -0
- package/dist/shared/validation/index.mjs.map +1 -0
- package/package.json +127 -62
- package/dist/index-BcxL4_V4.d.ts +0 -2946
- package/dist/index-DEzgM15j.d.ts +0 -67
- package/dist/index-DNFVgQx8.d.ts +0 -1375
- package/dist/index-DbV04Dx8.d.mts +0 -67
- package/dist/index-DfqEP6Oe.d.mts +0 -1375
- package/dist/index-bvvCev9Q.d.mts +0 -2946
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brand Identity Configuration
|
|
3
|
+
* Complete brand identity for all Exyconn projects including logos,
|
|
4
|
+
* colors, contact info, and social links
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Logo variants interface
|
|
8
|
+
* - light: Logo for light backgrounds (dark colored logo)
|
|
9
|
+
* - dark: Logo for dark backgrounds (light colored logo)
|
|
10
|
+
* - logoOnly: Just the icon/symbol without text (light bg)
|
|
11
|
+
* - darkLogoOnly: Just the icon/symbol without text (dark bg)
|
|
12
|
+
*/
|
|
13
|
+
interface LogoSet {
|
|
14
|
+
/** Full logo with text for light backgrounds */
|
|
15
|
+
light: string;
|
|
16
|
+
/** Full logo with text for dark backgrounds */
|
|
17
|
+
dark: string;
|
|
18
|
+
/** Icon only for light backgrounds */
|
|
19
|
+
logoOnly: string;
|
|
20
|
+
/** Icon only for dark backgrounds */
|
|
21
|
+
darkLogoOnly: string;
|
|
22
|
+
/** Favicon URL */
|
|
23
|
+
favicon: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Brand colors
|
|
27
|
+
*/
|
|
28
|
+
interface BrandColors {
|
|
29
|
+
primary: string;
|
|
30
|
+
secondary: string;
|
|
31
|
+
accent?: string;
|
|
32
|
+
background?: string;
|
|
33
|
+
foreground?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Social media links
|
|
37
|
+
*/
|
|
38
|
+
interface SocialLinks {
|
|
39
|
+
twitter?: string;
|
|
40
|
+
facebook?: string;
|
|
41
|
+
instagram?: string;
|
|
42
|
+
linkedin?: string;
|
|
43
|
+
github?: string;
|
|
44
|
+
youtube?: string;
|
|
45
|
+
discord?: string;
|
|
46
|
+
tiktok?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Contact information
|
|
50
|
+
*/
|
|
51
|
+
interface ContactInfo {
|
|
52
|
+
supportEmail: string;
|
|
53
|
+
salesEmail?: string;
|
|
54
|
+
phone?: string;
|
|
55
|
+
address?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* SEO Configuration
|
|
59
|
+
*/
|
|
60
|
+
interface SEOConfig {
|
|
61
|
+
title: string;
|
|
62
|
+
description: string;
|
|
63
|
+
keywords: string[];
|
|
64
|
+
ogImage?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Complete Brand Identity
|
|
68
|
+
*/
|
|
69
|
+
interface BrandIdentity {
|
|
70
|
+
id: string;
|
|
71
|
+
name: string;
|
|
72
|
+
tagline: string;
|
|
73
|
+
domain: string;
|
|
74
|
+
logo: LogoSet;
|
|
75
|
+
colors: BrandColors;
|
|
76
|
+
contact: ContactInfo;
|
|
77
|
+
social?: SocialLinks;
|
|
78
|
+
seo?: SEOConfig;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* App configuration for runtime
|
|
82
|
+
* Use this in your apps for consistent branding
|
|
83
|
+
*/
|
|
84
|
+
interface AppConfig {
|
|
85
|
+
name: string;
|
|
86
|
+
tagline: string;
|
|
87
|
+
domain: string;
|
|
88
|
+
supportEmail: string;
|
|
89
|
+
logo: LogoSet;
|
|
90
|
+
colors: BrandColors;
|
|
91
|
+
}
|
|
92
|
+
declare const BRANDS: Record<string, BrandIdentity>;
|
|
93
|
+
/**
|
|
94
|
+
* Pre-configured APP objects for each project
|
|
95
|
+
* Import directly: import { APP } from '@exyconn/common'
|
|
96
|
+
* Then configure which APP to use based on environment
|
|
97
|
+
*/
|
|
98
|
+
declare const APPS: {
|
|
99
|
+
readonly BOTIFY: AppConfig;
|
|
100
|
+
readonly EXYCONN: AppConfig;
|
|
101
|
+
readonly PARTYWINGS: AppConfig;
|
|
102
|
+
readonly SIBERA: AppConfig;
|
|
103
|
+
readonly SPENTIVA: AppConfig;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Create an AppConfig from a brand
|
|
107
|
+
*/
|
|
108
|
+
declare function createAppConfig(brandId: string): AppConfig;
|
|
109
|
+
/**
|
|
110
|
+
* Get brand by ID
|
|
111
|
+
*/
|
|
112
|
+
declare function getBrandById(id: string): BrandIdentity | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* Get brand by domain
|
|
115
|
+
*/
|
|
116
|
+
declare function getBrandByDomain(domain: string): BrandIdentity | undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Get all brands
|
|
119
|
+
*/
|
|
120
|
+
declare function getAllBrands(): BrandIdentity[];
|
|
121
|
+
/**
|
|
122
|
+
* Get all brand IDs
|
|
123
|
+
*/
|
|
124
|
+
declare function getAllBrandIds(): string[];
|
|
125
|
+
/**
|
|
126
|
+
* Get logo for a brand
|
|
127
|
+
* @param brandId - Brand identifier
|
|
128
|
+
* @param variant - 'light' | 'dark' | 'logoOnly' | 'darkLogoOnly'
|
|
129
|
+
*/
|
|
130
|
+
declare function getLogo(brandId: string, variant: keyof LogoSet): string | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Get appropriate logo based on theme
|
|
133
|
+
* @param brandId - Brand identifier
|
|
134
|
+
* @param theme - 'light' | 'dark'
|
|
135
|
+
* @param iconOnly - Whether to return icon only logo
|
|
136
|
+
*/
|
|
137
|
+
declare function getThemedLogo(brandId: string, theme: 'light' | 'dark', iconOnly?: boolean): string | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Get current app config based on domain
|
|
140
|
+
* Useful for multi-tenant applications
|
|
141
|
+
*/
|
|
142
|
+
declare function getAppConfigByDomain(domain: string): AppConfig | undefined;
|
|
143
|
+
/**
|
|
144
|
+
* Detect brand from current window.location.hostname
|
|
145
|
+
* For browser environments only
|
|
146
|
+
*/
|
|
147
|
+
declare function detectCurrentBrand(): BrandIdentity | undefined;
|
|
148
|
+
|
|
149
|
+
export { APPS, type AppConfig, BRANDS, type BrandColors, type BrandIdentity, type ContactInfo, type LogoSet, type SEOConfig, type SocialLinks, createAppConfig, BRANDS as default, detectCurrentBrand, getAllBrandIds, getAllBrands, getAppConfigByDomain, getBrandByDomain, getBrandById, getLogo, getThemedLogo };
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brand Identity Configuration
|
|
3
|
+
* Complete brand identity for all Exyconn projects including logos,
|
|
4
|
+
* colors, contact info, and social links
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Logo variants interface
|
|
8
|
+
* - light: Logo for light backgrounds (dark colored logo)
|
|
9
|
+
* - dark: Logo for dark backgrounds (light colored logo)
|
|
10
|
+
* - logoOnly: Just the icon/symbol without text (light bg)
|
|
11
|
+
* - darkLogoOnly: Just the icon/symbol without text (dark bg)
|
|
12
|
+
*/
|
|
13
|
+
interface LogoSet {
|
|
14
|
+
/** Full logo with text for light backgrounds */
|
|
15
|
+
light: string;
|
|
16
|
+
/** Full logo with text for dark backgrounds */
|
|
17
|
+
dark: string;
|
|
18
|
+
/** Icon only for light backgrounds */
|
|
19
|
+
logoOnly: string;
|
|
20
|
+
/** Icon only for dark backgrounds */
|
|
21
|
+
darkLogoOnly: string;
|
|
22
|
+
/** Favicon URL */
|
|
23
|
+
favicon: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Brand colors
|
|
27
|
+
*/
|
|
28
|
+
interface BrandColors {
|
|
29
|
+
primary: string;
|
|
30
|
+
secondary: string;
|
|
31
|
+
accent?: string;
|
|
32
|
+
background?: string;
|
|
33
|
+
foreground?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Social media links
|
|
37
|
+
*/
|
|
38
|
+
interface SocialLinks {
|
|
39
|
+
twitter?: string;
|
|
40
|
+
facebook?: string;
|
|
41
|
+
instagram?: string;
|
|
42
|
+
linkedin?: string;
|
|
43
|
+
github?: string;
|
|
44
|
+
youtube?: string;
|
|
45
|
+
discord?: string;
|
|
46
|
+
tiktok?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Contact information
|
|
50
|
+
*/
|
|
51
|
+
interface ContactInfo {
|
|
52
|
+
supportEmail: string;
|
|
53
|
+
salesEmail?: string;
|
|
54
|
+
phone?: string;
|
|
55
|
+
address?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* SEO Configuration
|
|
59
|
+
*/
|
|
60
|
+
interface SEOConfig {
|
|
61
|
+
title: string;
|
|
62
|
+
description: string;
|
|
63
|
+
keywords: string[];
|
|
64
|
+
ogImage?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Complete Brand Identity
|
|
68
|
+
*/
|
|
69
|
+
interface BrandIdentity {
|
|
70
|
+
id: string;
|
|
71
|
+
name: string;
|
|
72
|
+
tagline: string;
|
|
73
|
+
domain: string;
|
|
74
|
+
logo: LogoSet;
|
|
75
|
+
colors: BrandColors;
|
|
76
|
+
contact: ContactInfo;
|
|
77
|
+
social?: SocialLinks;
|
|
78
|
+
seo?: SEOConfig;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* App configuration for runtime
|
|
82
|
+
* Use this in your apps for consistent branding
|
|
83
|
+
*/
|
|
84
|
+
interface AppConfig {
|
|
85
|
+
name: string;
|
|
86
|
+
tagline: string;
|
|
87
|
+
domain: string;
|
|
88
|
+
supportEmail: string;
|
|
89
|
+
logo: LogoSet;
|
|
90
|
+
colors: BrandColors;
|
|
91
|
+
}
|
|
92
|
+
declare const BRANDS: Record<string, BrandIdentity>;
|
|
93
|
+
/**
|
|
94
|
+
* Pre-configured APP objects for each project
|
|
95
|
+
* Import directly: import { APP } from '@exyconn/common'
|
|
96
|
+
* Then configure which APP to use based on environment
|
|
97
|
+
*/
|
|
98
|
+
declare const APPS: {
|
|
99
|
+
readonly BOTIFY: AppConfig;
|
|
100
|
+
readonly EXYCONN: AppConfig;
|
|
101
|
+
readonly PARTYWINGS: AppConfig;
|
|
102
|
+
readonly SIBERA: AppConfig;
|
|
103
|
+
readonly SPENTIVA: AppConfig;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Create an AppConfig from a brand
|
|
107
|
+
*/
|
|
108
|
+
declare function createAppConfig(brandId: string): AppConfig;
|
|
109
|
+
/**
|
|
110
|
+
* Get brand by ID
|
|
111
|
+
*/
|
|
112
|
+
declare function getBrandById(id: string): BrandIdentity | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* Get brand by domain
|
|
115
|
+
*/
|
|
116
|
+
declare function getBrandByDomain(domain: string): BrandIdentity | undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Get all brands
|
|
119
|
+
*/
|
|
120
|
+
declare function getAllBrands(): BrandIdentity[];
|
|
121
|
+
/**
|
|
122
|
+
* Get all brand IDs
|
|
123
|
+
*/
|
|
124
|
+
declare function getAllBrandIds(): string[];
|
|
125
|
+
/**
|
|
126
|
+
* Get logo for a brand
|
|
127
|
+
* @param brandId - Brand identifier
|
|
128
|
+
* @param variant - 'light' | 'dark' | 'logoOnly' | 'darkLogoOnly'
|
|
129
|
+
*/
|
|
130
|
+
declare function getLogo(brandId: string, variant: keyof LogoSet): string | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Get appropriate logo based on theme
|
|
133
|
+
* @param brandId - Brand identifier
|
|
134
|
+
* @param theme - 'light' | 'dark'
|
|
135
|
+
* @param iconOnly - Whether to return icon only logo
|
|
136
|
+
*/
|
|
137
|
+
declare function getThemedLogo(brandId: string, theme: 'light' | 'dark', iconOnly?: boolean): string | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Get current app config based on domain
|
|
140
|
+
* Useful for multi-tenant applications
|
|
141
|
+
*/
|
|
142
|
+
declare function getAppConfigByDomain(domain: string): AppConfig | undefined;
|
|
143
|
+
/**
|
|
144
|
+
* Detect brand from current window.location.hostname
|
|
145
|
+
* For browser environments only
|
|
146
|
+
*/
|
|
147
|
+
declare function detectCurrentBrand(): BrandIdentity | undefined;
|
|
148
|
+
|
|
149
|
+
export { APPS, type AppConfig, BRANDS, type BrandColors, type BrandIdentity, type ContactInfo, type LogoSet, type SEOConfig, type SocialLinks, createAppConfig, BRANDS as default, detectCurrentBrand, getAllBrandIds, getAllBrands, getAppConfigByDomain, getBrandByDomain, getBrandById, getLogo, getThemedLogo };
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/data/brand-identity.ts
|
|
6
|
+
var BRANDS = {
|
|
7
|
+
botify: {
|
|
8
|
+
id: "botify",
|
|
9
|
+
name: "Botify",
|
|
10
|
+
tagline: "AI-Powered Chatbots",
|
|
11
|
+
domain: "botify.life",
|
|
12
|
+
logo: {
|
|
13
|
+
light: "https://botify.life/logos/botify-full-light.svg",
|
|
14
|
+
dark: "https://botify.life/logos/botify-full-dark.svg",
|
|
15
|
+
logoOnly: "https://botify.life/logos/botify-icon-light.svg",
|
|
16
|
+
darkLogoOnly: "https://botify.life/logos/botify-icon-dark.svg",
|
|
17
|
+
favicon: "https://botify.life/favicon.ico"
|
|
18
|
+
},
|
|
19
|
+
colors: {
|
|
20
|
+
primary: "#6366F1",
|
|
21
|
+
secondary: "#8B5CF6",
|
|
22
|
+
accent: "#A78BFA"
|
|
23
|
+
},
|
|
24
|
+
contact: {
|
|
25
|
+
supportEmail: "support@botify.life",
|
|
26
|
+
salesEmail: "sales@botify.life"
|
|
27
|
+
},
|
|
28
|
+
social: {
|
|
29
|
+
twitter: "https://twitter.com/botifylife",
|
|
30
|
+
github: "https://github.com/botifylife"
|
|
31
|
+
},
|
|
32
|
+
seo: {
|
|
33
|
+
title: "Botify - AI-Powered Chatbots",
|
|
34
|
+
description: "Create intelligent chatbots with Botify. AI-powered conversations for your business.",
|
|
35
|
+
keywords: ["chatbot", "AI", "conversational AI", "customer support", "automation"]
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
exyconn: {
|
|
39
|
+
id: "exyconn",
|
|
40
|
+
name: "Exyconn",
|
|
41
|
+
tagline: "Connect. Create. Collaborate.",
|
|
42
|
+
domain: "exyconn.com",
|
|
43
|
+
logo: {
|
|
44
|
+
light: "https://exyconn.com/logos/exyconn-full-light.svg",
|
|
45
|
+
dark: "https://exyconn.com/logos/exyconn-full-dark.svg",
|
|
46
|
+
logoOnly: "https://exyconn.com/logos/exyconn-icon-light.svg",
|
|
47
|
+
darkLogoOnly: "https://exyconn.com/logos/exyconn-icon-dark.svg",
|
|
48
|
+
favicon: "https://exyconn.com/favicon.ico"
|
|
49
|
+
},
|
|
50
|
+
colors: {
|
|
51
|
+
primary: "#0EA5E9",
|
|
52
|
+
secondary: "#06B6D4",
|
|
53
|
+
accent: "#22D3EE"
|
|
54
|
+
},
|
|
55
|
+
contact: {
|
|
56
|
+
supportEmail: "support@exyconn.com",
|
|
57
|
+
salesEmail: "sales@exyconn.com"
|
|
58
|
+
},
|
|
59
|
+
social: {
|
|
60
|
+
twitter: "https://twitter.com/exyconn",
|
|
61
|
+
linkedin: "https://linkedin.com/company/exyconn",
|
|
62
|
+
github: "https://github.com/exyconn"
|
|
63
|
+
},
|
|
64
|
+
seo: {
|
|
65
|
+
title: "Exyconn - Connect. Create. Collaborate.",
|
|
66
|
+
description: "The platform that brings teams together. Connect, create, and collaborate seamlessly.",
|
|
67
|
+
keywords: ["collaboration", "team", "productivity", "communication", "workspace"]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
partywings: {
|
|
71
|
+
id: "partywings",
|
|
72
|
+
name: "PartyWings",
|
|
73
|
+
tagline: "Your Party, Your Rules",
|
|
74
|
+
domain: "partywings.fun",
|
|
75
|
+
logo: {
|
|
76
|
+
light: "https://partywings.fun/logos/partywings-full-light.svg",
|
|
77
|
+
dark: "https://partywings.fun/logos/partywings-full-dark.svg",
|
|
78
|
+
logoOnly: "https://partywings.fun/logos/partywings-icon-light.svg",
|
|
79
|
+
darkLogoOnly: "https://partywings.fun/logos/partywings-icon-dark.svg",
|
|
80
|
+
favicon: "https://partywings.fun/favicon.ico"
|
|
81
|
+
},
|
|
82
|
+
colors: {
|
|
83
|
+
primary: "#EC4899",
|
|
84
|
+
secondary: "#F472B6",
|
|
85
|
+
accent: "#F9A8D4"
|
|
86
|
+
},
|
|
87
|
+
contact: {
|
|
88
|
+
supportEmail: "support@partywings.fun"
|
|
89
|
+
},
|
|
90
|
+
social: {
|
|
91
|
+
instagram: "https://instagram.com/partywingsfun",
|
|
92
|
+
tiktok: "https://tiktok.com/@partywingsfun"
|
|
93
|
+
},
|
|
94
|
+
seo: {
|
|
95
|
+
title: "PartyWings - Your Party, Your Rules",
|
|
96
|
+
description: "Plan unforgettable parties and events. Your party, your rules with PartyWings.",
|
|
97
|
+
keywords: ["party", "events", "celebration", "planning", "entertainment"]
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
sibera: {
|
|
101
|
+
id: "sibera",
|
|
102
|
+
name: "Sibera",
|
|
103
|
+
tagline: "Work Smarter, Together",
|
|
104
|
+
domain: "sibera.work",
|
|
105
|
+
logo: {
|
|
106
|
+
light: "https://sibera.work/logos/sibera-full-light.svg",
|
|
107
|
+
dark: "https://sibera.work/logos/sibera-full-dark.svg",
|
|
108
|
+
logoOnly: "https://sibera.work/logos/sibera-icon-light.svg",
|
|
109
|
+
darkLogoOnly: "https://sibera.work/logos/sibera-icon-dark.svg",
|
|
110
|
+
favicon: "https://sibera.work/favicon.ico"
|
|
111
|
+
},
|
|
112
|
+
colors: {
|
|
113
|
+
primary: "#10B981",
|
|
114
|
+
secondary: "#34D399",
|
|
115
|
+
accent: "#6EE7B7"
|
|
116
|
+
},
|
|
117
|
+
contact: {
|
|
118
|
+
supportEmail: "support@sibera.work",
|
|
119
|
+
salesEmail: "sales@sibera.work"
|
|
120
|
+
},
|
|
121
|
+
social: {
|
|
122
|
+
twitter: "https://twitter.com/siberawork",
|
|
123
|
+
linkedin: "https://linkedin.com/company/sibera"
|
|
124
|
+
},
|
|
125
|
+
seo: {
|
|
126
|
+
title: "Sibera - Work Smarter, Together",
|
|
127
|
+
description: "Streamline your workflow and collaborate efficiently with Sibera.",
|
|
128
|
+
keywords: ["work management", "productivity", "team collaboration", "project management"]
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
spentiva: {
|
|
132
|
+
id: "spentiva",
|
|
133
|
+
name: "Spentiva",
|
|
134
|
+
tagline: "Smart Spending, Smart Living",
|
|
135
|
+
domain: "spentiva.com",
|
|
136
|
+
logo: {
|
|
137
|
+
light: "https://spentiva.com/logos/spentiva-full-light.svg",
|
|
138
|
+
dark: "https://spentiva.com/logos/spentiva-full-dark.svg",
|
|
139
|
+
logoOnly: "https://spentiva.com/logos/spentiva-icon-light.svg",
|
|
140
|
+
darkLogoOnly: "https://spentiva.com/logos/spentiva-icon-dark.svg",
|
|
141
|
+
favicon: "https://spentiva.com/favicon.ico"
|
|
142
|
+
},
|
|
143
|
+
colors: {
|
|
144
|
+
primary: "#F59E0B",
|
|
145
|
+
secondary: "#FBBF24",
|
|
146
|
+
accent: "#FCD34D"
|
|
147
|
+
},
|
|
148
|
+
contact: {
|
|
149
|
+
supportEmail: "support@spentiva.com",
|
|
150
|
+
salesEmail: "hello@spentiva.com"
|
|
151
|
+
},
|
|
152
|
+
social: {
|
|
153
|
+
twitter: "https://twitter.com/spentiva",
|
|
154
|
+
instagram: "https://instagram.com/spentiva"
|
|
155
|
+
},
|
|
156
|
+
seo: {
|
|
157
|
+
title: "Spentiva - Smart Spending, Smart Living",
|
|
158
|
+
description: "Take control of your finances with Spentiva. Smart spending for smart living.",
|
|
159
|
+
keywords: ["finance", "budgeting", "expense tracking", "money management", "personal finance"]
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
var APPS = {
|
|
164
|
+
BOTIFY: createAppConfig("botify"),
|
|
165
|
+
EXYCONN: createAppConfig("exyconn"),
|
|
166
|
+
PARTYWINGS: createAppConfig("partywings"),
|
|
167
|
+
SIBERA: createAppConfig("sibera"),
|
|
168
|
+
SPENTIVA: createAppConfig("spentiva")
|
|
169
|
+
};
|
|
170
|
+
function createAppConfig(brandId) {
|
|
171
|
+
const brand = BRANDS[brandId.toLowerCase()];
|
|
172
|
+
if (!brand) {
|
|
173
|
+
throw new Error(`Brand "${brandId}" not found`);
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
name: brand.name,
|
|
177
|
+
tagline: brand.tagline,
|
|
178
|
+
domain: brand.domain,
|
|
179
|
+
supportEmail: brand.contact.supportEmail,
|
|
180
|
+
logo: brand.logo,
|
|
181
|
+
colors: brand.colors
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function getBrandById(id) {
|
|
185
|
+
return BRANDS[id.toLowerCase()];
|
|
186
|
+
}
|
|
187
|
+
function getBrandByDomain(domain) {
|
|
188
|
+
return Object.values(BRANDS).find((b) => b.domain === domain);
|
|
189
|
+
}
|
|
190
|
+
function getAllBrands() {
|
|
191
|
+
return Object.values(BRANDS);
|
|
192
|
+
}
|
|
193
|
+
function getAllBrandIds() {
|
|
194
|
+
return Object.keys(BRANDS);
|
|
195
|
+
}
|
|
196
|
+
function getLogo(brandId, variant) {
|
|
197
|
+
const brand = getBrandById(brandId);
|
|
198
|
+
return brand?.logo[variant];
|
|
199
|
+
}
|
|
200
|
+
function getThemedLogo(brandId, theme, iconOnly = false) {
|
|
201
|
+
const brand = getBrandById(brandId);
|
|
202
|
+
if (!brand) return void 0;
|
|
203
|
+
if (iconOnly) {
|
|
204
|
+
return theme === "light" ? brand.logo.logoOnly : brand.logo.darkLogoOnly;
|
|
205
|
+
}
|
|
206
|
+
return brand.logo[theme];
|
|
207
|
+
}
|
|
208
|
+
function getAppConfigByDomain(domain) {
|
|
209
|
+
const brand = getBrandByDomain(domain);
|
|
210
|
+
if (!brand) return void 0;
|
|
211
|
+
return createAppConfig(brand.id);
|
|
212
|
+
}
|
|
213
|
+
function detectCurrentBrand() {
|
|
214
|
+
if (typeof window === "undefined") return void 0;
|
|
215
|
+
const hostname = window.location.hostname;
|
|
216
|
+
return Object.values(BRANDS).find(
|
|
217
|
+
(b) => hostname === b.domain || hostname.endsWith(`.${b.domain}`)
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
var brand_identity_default = BRANDS;
|
|
221
|
+
|
|
222
|
+
exports.APPS = APPS;
|
|
223
|
+
exports.BRANDS = BRANDS;
|
|
224
|
+
exports.createAppConfig = createAppConfig;
|
|
225
|
+
exports.default = brand_identity_default;
|
|
226
|
+
exports.detectCurrentBrand = detectCurrentBrand;
|
|
227
|
+
exports.getAllBrandIds = getAllBrandIds;
|
|
228
|
+
exports.getAllBrands = getAllBrands;
|
|
229
|
+
exports.getAppConfigByDomain = getAppConfigByDomain;
|
|
230
|
+
exports.getBrandByDomain = getBrandByDomain;
|
|
231
|
+
exports.getBrandById = getBrandById;
|
|
232
|
+
exports.getLogo = getLogo;
|
|
233
|
+
exports.getThemedLogo = getThemedLogo;
|
|
234
|
+
//# sourceMappingURL=brand-identity.js.map
|
|
235
|
+
//# sourceMappingURL=brand-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data/brand-identity.ts"],"names":[],"mappings":"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","file":"brand-identity.js","sourcesContent":["/**\r\n * Brand Identity Configuration\r\n * Complete brand identity for all Exyconn projects including logos,\r\n * colors, contact info, and social links\r\n */\r\n\r\n// ==========================================\r\n// LOGO INTERFACES\r\n// ==========================================\r\n\r\n/**\r\n * Logo variants interface\r\n * - light: Logo for light backgrounds (dark colored logo)\r\n * - dark: Logo for dark backgrounds (light colored logo)\r\n * - logoOnly: Just the icon/symbol without text (light bg)\r\n * - darkLogoOnly: Just the icon/symbol without text (dark bg)\r\n */\r\nexport interface LogoSet {\r\n /** Full logo with text for light backgrounds */\r\n light: string;\r\n /** Full logo with text for dark backgrounds */\r\n dark: string;\r\n /** Icon only for light backgrounds */\r\n logoOnly: string;\r\n /** Icon only for dark backgrounds */\r\n darkLogoOnly: string;\r\n /** Favicon URL */\r\n favicon: string;\r\n}\r\n\r\n/**\r\n * Brand colors\r\n */\r\nexport interface BrandColors {\r\n primary: string;\r\n secondary: string;\r\n accent?: string;\r\n background?: string;\r\n foreground?: string;\r\n}\r\n\r\n/**\r\n * Social media links\r\n */\r\nexport interface SocialLinks {\r\n twitter?: string;\r\n facebook?: string;\r\n instagram?: string;\r\n linkedin?: string;\r\n github?: string;\r\n youtube?: string;\r\n discord?: string;\r\n tiktok?: string;\r\n}\r\n\r\n/**\r\n * Contact information\r\n */\r\nexport interface ContactInfo {\r\n supportEmail: string;\r\n salesEmail?: string;\r\n phone?: string;\r\n address?: string;\r\n}\r\n\r\n/**\r\n * SEO Configuration\r\n */\r\nexport interface SEOConfig {\r\n title: string;\r\n description: string;\r\n keywords: string[];\r\n ogImage?: string;\r\n}\r\n\r\n/**\r\n * Complete Brand Identity\r\n */\r\nexport interface BrandIdentity {\r\n id: string;\r\n name: string;\r\n tagline: string;\r\n domain: string;\r\n logo: LogoSet;\r\n colors: BrandColors;\r\n contact: ContactInfo;\r\n social?: SocialLinks;\r\n seo?: SEOConfig;\r\n}\r\n\r\n// ==========================================\r\n// APP CONFIG - For Runtime Use\r\n// ==========================================\r\n\r\n/**\r\n * App configuration for runtime\r\n * Use this in your apps for consistent branding\r\n */\r\nexport interface AppConfig {\r\n name: string;\r\n tagline: string;\r\n domain: string;\r\n supportEmail: string;\r\n logo: LogoSet;\r\n colors: BrandColors;\r\n}\r\n\r\n// ==========================================\r\n// BRAND DEFINITIONS\r\n// ==========================================\r\n\r\nexport const BRANDS: Record<string, BrandIdentity> = {\r\n botify: {\r\n id: 'botify',\r\n name: 'Botify',\r\n tagline: 'AI-Powered Chatbots',\r\n domain: 'botify.life',\r\n logo: {\r\n light: 'https://botify.life/logos/botify-full-light.svg',\r\n dark: 'https://botify.life/logos/botify-full-dark.svg',\r\n logoOnly: 'https://botify.life/logos/botify-icon-light.svg',\r\n darkLogoOnly: 'https://botify.life/logos/botify-icon-dark.svg',\r\n favicon: 'https://botify.life/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#6366F1',\r\n secondary: '#8B5CF6',\r\n accent: '#A78BFA',\r\n },\r\n contact: {\r\n supportEmail: 'support@botify.life',\r\n salesEmail: 'sales@botify.life',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/botifylife',\r\n github: 'https://github.com/botifylife',\r\n },\r\n seo: {\r\n title: 'Botify - AI-Powered Chatbots',\r\n description: 'Create intelligent chatbots with Botify. AI-powered conversations for your business.',\r\n keywords: ['chatbot', 'AI', 'conversational AI', 'customer support', 'automation'],\r\n },\r\n },\r\n exyconn: {\r\n id: 'exyconn',\r\n name: 'Exyconn',\r\n tagline: 'Connect. Create. Collaborate.',\r\n domain: 'exyconn.com',\r\n logo: {\r\n light: 'https://exyconn.com/logos/exyconn-full-light.svg',\r\n dark: 'https://exyconn.com/logos/exyconn-full-dark.svg',\r\n logoOnly: 'https://exyconn.com/logos/exyconn-icon-light.svg',\r\n darkLogoOnly: 'https://exyconn.com/logos/exyconn-icon-dark.svg',\r\n favicon: 'https://exyconn.com/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#0EA5E9',\r\n secondary: '#06B6D4',\r\n accent: '#22D3EE',\r\n },\r\n contact: {\r\n supportEmail: 'support@exyconn.com',\r\n salesEmail: 'sales@exyconn.com',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/exyconn',\r\n linkedin: 'https://linkedin.com/company/exyconn',\r\n github: 'https://github.com/exyconn',\r\n },\r\n seo: {\r\n title: 'Exyconn - Connect. Create. Collaborate.',\r\n description: 'The platform that brings teams together. Connect, create, and collaborate seamlessly.',\r\n keywords: ['collaboration', 'team', 'productivity', 'communication', 'workspace'],\r\n },\r\n },\r\n partywings: {\r\n id: 'partywings',\r\n name: 'PartyWings',\r\n tagline: 'Your Party, Your Rules',\r\n domain: 'partywings.fun',\r\n logo: {\r\n light: 'https://partywings.fun/logos/partywings-full-light.svg',\r\n dark: 'https://partywings.fun/logos/partywings-full-dark.svg',\r\n logoOnly: 'https://partywings.fun/logos/partywings-icon-light.svg',\r\n darkLogoOnly: 'https://partywings.fun/logos/partywings-icon-dark.svg',\r\n favicon: 'https://partywings.fun/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#EC4899',\r\n secondary: '#F472B6',\r\n accent: '#F9A8D4',\r\n },\r\n contact: {\r\n supportEmail: 'support@partywings.fun',\r\n },\r\n social: {\r\n instagram: 'https://instagram.com/partywingsfun',\r\n tiktok: 'https://tiktok.com/@partywingsfun',\r\n },\r\n seo: {\r\n title: 'PartyWings - Your Party, Your Rules',\r\n description: 'Plan unforgettable parties and events. Your party, your rules with PartyWings.',\r\n keywords: ['party', 'events', 'celebration', 'planning', 'entertainment'],\r\n },\r\n },\r\n sibera: {\r\n id: 'sibera',\r\n name: 'Sibera',\r\n tagline: 'Work Smarter, Together',\r\n domain: 'sibera.work',\r\n logo: {\r\n light: 'https://sibera.work/logos/sibera-full-light.svg',\r\n dark: 'https://sibera.work/logos/sibera-full-dark.svg',\r\n logoOnly: 'https://sibera.work/logos/sibera-icon-light.svg',\r\n darkLogoOnly: 'https://sibera.work/logos/sibera-icon-dark.svg',\r\n favicon: 'https://sibera.work/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#10B981',\r\n secondary: '#34D399',\r\n accent: '#6EE7B7',\r\n },\r\n contact: {\r\n supportEmail: 'support@sibera.work',\r\n salesEmail: 'sales@sibera.work',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/siberawork',\r\n linkedin: 'https://linkedin.com/company/sibera',\r\n },\r\n seo: {\r\n title: 'Sibera - Work Smarter, Together',\r\n description: 'Streamline your workflow and collaborate efficiently with Sibera.',\r\n keywords: ['work management', 'productivity', 'team collaboration', 'project management'],\r\n },\r\n },\r\n spentiva: {\r\n id: 'spentiva',\r\n name: 'Spentiva',\r\n tagline: 'Smart Spending, Smart Living',\r\n domain: 'spentiva.com',\r\n logo: {\r\n light: 'https://spentiva.com/logos/spentiva-full-light.svg',\r\n dark: 'https://spentiva.com/logos/spentiva-full-dark.svg',\r\n logoOnly: 'https://spentiva.com/logos/spentiva-icon-light.svg',\r\n darkLogoOnly: 'https://spentiva.com/logos/spentiva-icon-dark.svg',\r\n favicon: 'https://spentiva.com/favicon.ico',\r\n },\r\n colors: {\r\n primary: '#F59E0B',\r\n secondary: '#FBBF24',\r\n accent: '#FCD34D',\r\n },\r\n contact: {\r\n supportEmail: 'support@spentiva.com',\r\n salesEmail: 'hello@spentiva.com',\r\n },\r\n social: {\r\n twitter: 'https://twitter.com/spentiva',\r\n instagram: 'https://instagram.com/spentiva',\r\n },\r\n seo: {\r\n title: 'Spentiva - Smart Spending, Smart Living',\r\n description: 'Take control of your finances with Spentiva. Smart spending for smart living.',\r\n keywords: ['finance', 'budgeting', 'expense tracking', 'money management', 'personal finance'],\r\n },\r\n },\r\n};\r\n\r\n// ==========================================\r\n// APP CONFIGS - Ready to use in projects\r\n// ==========================================\r\n\r\n/**\r\n * Pre-configured APP objects for each project\r\n * Import directly: import { APP } from '@exyconn/common'\r\n * Then configure which APP to use based on environment\r\n */\r\nexport const APPS = {\r\n BOTIFY: createAppConfig('botify'),\r\n EXYCONN: createAppConfig('exyconn'),\r\n PARTYWINGS: createAppConfig('partywings'),\r\n SIBERA: createAppConfig('sibera'),\r\n SPENTIVA: createAppConfig('spentiva'),\r\n} as const;\r\n\r\n// ==========================================\r\n// HELPER FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Create an AppConfig from a brand\r\n */\r\nexport function createAppConfig(brandId: string): AppConfig {\r\n const brand = BRANDS[brandId.toLowerCase()];\r\n if (!brand) {\r\n throw new Error(`Brand \"${brandId}\" not found`);\r\n }\r\n return {\r\n name: brand.name,\r\n tagline: brand.tagline,\r\n domain: brand.domain,\r\n supportEmail: brand.contact.supportEmail,\r\n logo: brand.logo,\r\n colors: brand.colors,\r\n };\r\n}\r\n\r\n/**\r\n * Get brand by ID\r\n */\r\nexport function getBrandById(id: string): BrandIdentity | undefined {\r\n return BRANDS[id.toLowerCase()];\r\n}\r\n\r\n/**\r\n * Get brand by domain\r\n */\r\nexport function getBrandByDomain(domain: string): BrandIdentity | undefined {\r\n return Object.values(BRANDS).find((b) => b.domain === domain);\r\n}\r\n\r\n/**\r\n * Get all brands\r\n */\r\nexport function getAllBrands(): BrandIdentity[] {\r\n return Object.values(BRANDS);\r\n}\r\n\r\n/**\r\n * Get all brand IDs\r\n */\r\nexport function getAllBrandIds(): string[] {\r\n return Object.keys(BRANDS);\r\n}\r\n\r\n/**\r\n * Get logo for a brand\r\n * @param brandId - Brand identifier\r\n * @param variant - 'light' | 'dark' | 'logoOnly' | 'darkLogoOnly'\r\n */\r\nexport function getLogo(\r\n brandId: string,\r\n variant: keyof LogoSet\r\n): string | undefined {\r\n const brand = getBrandById(brandId);\r\n return brand?.logo[variant];\r\n}\r\n\r\n/**\r\n * Get appropriate logo based on theme\r\n * @param brandId - Brand identifier\r\n * @param theme - 'light' | 'dark'\r\n * @param iconOnly - Whether to return icon only logo\r\n */\r\nexport function getThemedLogo(\r\n brandId: string,\r\n theme: 'light' | 'dark',\r\n iconOnly = false\r\n): string | undefined {\r\n const brand = getBrandById(brandId);\r\n if (!brand) return undefined;\r\n\r\n if (iconOnly) {\r\n return theme === 'light' ? brand.logo.logoOnly : brand.logo.darkLogoOnly;\r\n }\r\n return brand.logo[theme];\r\n}\r\n\r\n/**\r\n * Get current app config based on domain\r\n * Useful for multi-tenant applications\r\n */\r\nexport function getAppConfigByDomain(domain: string): AppConfig | undefined {\r\n const brand = getBrandByDomain(domain);\r\n if (!brand) return undefined;\r\n return createAppConfig(brand.id);\r\n}\r\n\r\n/**\r\n * Detect brand from current window.location.hostname\r\n * For browser environments only\r\n */\r\nexport function detectCurrentBrand(): BrandIdentity | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n const hostname = window.location.hostname;\r\n return Object.values(BRANDS).find(\r\n (b) => hostname === b.domain || hostname.endsWith(`.${b.domain}`)\r\n );\r\n}\r\n\r\nexport default BRANDS;\r\n"]}
|