@liquidityio/brand 2.3.0

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 ADDED
@@ -0,0 +1,110 @@
1
+ # @liquidityio/brand
2
+
3
+ Liquidity's org config, theme seeds, fonts, and logo assets. Thin wrapper over [`@hanzo/branding`](https://github.com/hanzoai/branding).
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add @liquidityio/brand
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Tamagui
14
+
15
+ ```typescript
16
+ import { tamaguiConfig } from '@liquidityio/brand'
17
+ import { GuiProvider } from '@hanzo/gui'
18
+
19
+ <GuiProvider config={tamaguiConfig}>
20
+ <App />
21
+ </GuiProvider>
22
+ ```
23
+
24
+ ### Tailwind / shadcn
25
+
26
+ One import in your app's main CSS:
27
+
28
+ ```css
29
+ @import '@liquidityio/brand/tw-liquidity.css';
30
+ ```
31
+
32
+ This pulls in `tailwindcss`, Liquidity's easing/fonts, the generated palettes, and the shadcn semantic color mappings — in the right order.
33
+
34
+ ### Brand data
35
+
36
+ ```typescript
37
+ import { config, brandIdentity } from '@liquidityio/brand'
38
+ import type { BrandIdentity, OrgConfig } from '@liquidityio/brand'
39
+ import brandJson from '@liquidityio/brand/brand.json'
40
+
41
+ // Logo assets
42
+ // @liquidityio/brand/assets/logo/logo.svg
43
+ // @liquidityio/brand/assets/logo/favicon.svg
44
+ // @liquidityio/brand/assets/logo/wordmark.svg
45
+ ```
46
+
47
+ ## Structure
48
+
49
+ ```
50
+ src/
51
+ ├── brand.json # identity + theme seeds (source of truth)
52
+ ├── brand-palettes.css # generated by prebuild (gitignored)
53
+ ├── liquidity-tw-additions.css # org-specific non-color TW tokens (easing, fonts)
54
+ ├── tw-liquidity.css # bundle: tailwind + additions + palettes + semantic
55
+ ├── fonts.ts # Liquidity font defs (pplxSans)
56
+ ├── tamagui-config.ts # calls createTamaguiConfig
57
+ ├── types.ts # BrandIdentity, OrgConfig
58
+ └── index.ts # re-exports config, brandIdentity, tamaguiConfig
59
+ assets/
60
+ └── logo/ # logo, logo-mono, logo-white, wordmark, favicon (SVG)
61
+ ```
62
+
63
+ ## Exports
64
+
65
+ | Path | What |
66
+ |------|------|
67
+ | `@liquidityio/brand` | `config`, `brandIdentity`, `tamaguiConfig`, types |
68
+ | `@liquidityio/brand/brand.json` | Raw brand data |
69
+ | `@liquidityio/brand/tw-liquidity.css` | Single CSS bundle for apps |
70
+ | `@liquidityio/brand/assets/*` | Logo files |
71
+
72
+ ## How it works
73
+
74
+ Almost everything — theme engine, palette generation, components, shadcn mappings — lives in `@hanzo/branding`. This package just provides Liquidity-specific data:
75
+
76
+ - **`brand.json`** — identity (name, domains, social, etc.) and 7 theme seeds
77
+ - **`fonts.ts`** — pplxSans font definitions
78
+ - **`liquidity-tw-additions.css`** — easing curves and font families
79
+ - **`tamagui-config.ts`** — calls `createTamaguiConfig` from `@hanzo/branding/tg-config` with our seeds and fonts
80
+
81
+ The `prebuild` script runs `generate-palettes` (shipped by `@hanzo/branding`), which reads `src/brand.json` and writes `src/brand-palettes.css`.
82
+
83
+ ## Build
84
+
85
+ ```bash
86
+ pnpm build # runs prebuild (generate-palettes), then tsup
87
+ pnpm tc # typecheck
88
+ pnpm dev # watch mode
89
+ ```
90
+
91
+ ## Publish
92
+
93
+ ```bash
94
+ pnpm pub # bump patch
95
+ pnpm pub minor # bump minor
96
+ pnpm pub major # bump major
97
+ pnpm pub 2.0.0 # exact version
98
+ ```
99
+
100
+ The script builds, bumps version, commits as `v{version}`, tags, and publishes. It refuses to run on a dirty tree. Push is left to you:
101
+
102
+ ```bash
103
+ git push && git push --tags
104
+ ```
105
+
106
+ ## Consumers
107
+
108
+ - `liquidityio/exchange` — securities exchange frontend
109
+ - `liquidityio/id` — auth + onboarding app
110
+ - `liquidityio/superadmin` — operator admin panel
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 1024 1024">
2
+ <rect width="1024" height="1024" rx="200" fill="#111827"/>
3
+ <path d="M 220 220 L 220 720 L 680 720 L 680 620 L 330 620 L 330 220 Z" fill="white"/>
4
+ <path d="M 400 500 Q 500 420 600 500 Q 700 580 800 500" stroke="rgba(255,255,255,0.35)" stroke-width="12" fill="none" stroke-linecap="round"/>
5
+ <path d="M 400 560 Q 500 480 600 560 Q 700 640 800 560" stroke="rgba(255,255,255,0.2)" stroke-width="8" fill="none" stroke-linecap="round"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
2
+ <rect width="1024" height="1024" rx="200" fill="#111827"/>
3
+ <path d="M 220 220 L 220 720 L 680 720 L 680 620 L 330 620 L 330 220 Z" fill="white"/>
4
+ <path d="M 400 500 Q 500 420 600 500 Q 700 580 800 500" stroke="rgba(255,255,255,0.35)" stroke-width="12" fill="none" stroke-linecap="round"/>
5
+ <path d="M 400 560 Q 500 480 600 560 Q 700 640 800 560" stroke="rgba(255,255,255,0.2)" stroke-width="8" fill="none" stroke-linecap="round"/>
6
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
2
+ <path d="M 220 220 L 220 720 L 680 720 L 680 620 L 330 620 L 330 220 Z" fill="white"/>
3
+ <path d="M 400 500 Q 500 420 600 500 Q 700 580 800 500" stroke="rgba(255,255,255,0.5)" stroke-width="12" fill="none" stroke-linecap="round"/>
4
+ <path d="M 400 560 Q 500 480 600 560 Q 700 640 800 560" stroke="rgba(255,255,255,0.3)" stroke-width="8" fill="none" stroke-linecap="round"/>
5
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
2
+ <defs>
3
+ <linearGradient id="lqdtyGrad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#3B82F6"/>
5
+ <stop offset="100%" style="stop-color:#1D4ED8"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="1024" height="1024" rx="200" fill="url(#lqdtyGrad)"/>
9
+ <path d="M 220 220 L 220 720 L 680 720 L 680 620 L 330 620 L 330 220 Z" fill="white"/>
10
+ <path d="M 400 500 Q 500 420 600 500 Q 700 580 800 500" stroke="rgba(255,255,255,0.4)" stroke-width="12" fill="none" stroke-linecap="round"/>
11
+ <path d="M 400 560 Q 500 480 600 560 Q 700 640 800 560" stroke="rgba(255,255,255,0.25)" stroke-width="8" fill="none" stroke-linecap="round"/>
12
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="400" height="80" viewBox="0 0 400 80">
2
+ <text x="10" y="58" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
3
+ font-size="52" font-weight="700" letter-spacing="-1" fill="white">LIQUIDITY</text>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="400" height="80" viewBox="0 0 400 80">
2
+ <text x="10" y="58" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
3
+ font-size="52" font-weight="700" letter-spacing="-1" fill="#111827">LIQUIDITY</text>
4
+ </svg>
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@liquidityio/brand",
3
+ "version": "2.3.0",
4
+ "description": "Org config, theme seeds, and assets for Liquidity",
5
+ "main": "./src/index.ts",
6
+ "types": "./src/index.ts",
7
+ "exports": {
8
+ ".": "./src/index.ts",
9
+ "./brand.json": "./src/brand.json",
10
+ "./tw-liquidity.css": "./src/tw-liquidity.css",
11
+ "./assets/*": "./assets/*"
12
+ },
13
+ "files": [
14
+ "src",
15
+ "assets"
16
+ ],
17
+ "scripts": {
18
+ "tc": "tsc --noEmit",
19
+ "prebuild": "generate-palettes",
20
+ "build": "tsup src/index.ts --format cjs,esm --dts --clean",
21
+ "dev": "tsup src/index.ts --format cjs,esm --dts --watch",
22
+ "pub": "./scripts/publish.sh"
23
+ },
24
+ "dependencies": {
25
+ "@hanzo/branding": "^2.0.2"
26
+ },
27
+ "devDependencies": {
28
+ "tsup": "^8.0.0",
29
+ "typescript": "^5.9.3"
30
+ },
31
+ "author": "Liquidity",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/liquidityio/brand"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ }
39
+ }
@@ -0,0 +1,175 @@
1
+ /* Generated by @hanzo/branding — do not edit manually */
2
+
3
+ :root {
4
+ --color-neutral-1: #fafafa;
5
+ --color-neutral-2: #f5f5f5;
6
+ --color-neutral-3: #ededed;
7
+ --color-neutral-4: #e0e0e0;
8
+ --color-neutral-5: #cccccc;
9
+ --color-neutral-6: #b3b3b3;
10
+ --color-neutral-7: #949494;
11
+ --color-neutral-8: #757575;
12
+ --color-neutral-9: #5c5c5c;
13
+ --color-neutral-10: #424242;
14
+ --color-neutral-11: #2e2e2e;
15
+ --color-neutral-12: #1a1a1a;
16
+ --color-primary-1: #f9fafb;
17
+ --color-primary-2: #f3f4f6;
18
+ --color-primary-3: #eaecf1;
19
+ --color-primary-4: #dadee7;
20
+ --color-primary-5: #bfc7d9;
21
+ --color-primary-6: #9daac8;
22
+ --color-primary-7: #7387b5;
23
+ --color-primary-8: #4e669c;
24
+ --color-primary-9: #3b4f7d;
25
+ --color-primary-10: #28385c;
26
+ --color-primary-11: #1b2741;
27
+ --color-primary-12: #0e1525;
28
+ --color-secondary-1: #faf9fb;
29
+ --color-secondary-2: #f4f2f8;
30
+ --color-secondary-3: #ece7f3;
31
+ --color-secondary-4: #dfd5ec;
32
+ --color-secondary-5: #c9b6e2;
33
+ --color-secondary-6: #ad8dd8;
34
+ --color-secondary-7: #8c5acd;
35
+ --color-secondary-8: #6c30ba;
36
+ --color-secondary-9: #542196;
37
+ --color-secondary-10: #3c1570;
38
+ --color-secondary-11: #290c50;
39
+ --color-secondary-12: #17052e;
40
+ --color-info-1: #f9f9fb;
41
+ --color-info-2: #f2f4f8;
42
+ --color-info-3: #e7ebf3;
43
+ --color-info-4: #d4dced;
44
+ --color-info-5: #b4c3e4;
45
+ --color-info-6: #8ba4da;
46
+ --color-info-7: #577dd1;
47
+ --color-info-8: #2d5abe;
48
+ --color-info-9: #1e459a;
49
+ --color-info-10: #123072;
50
+ --color-info-11: #0a2152;
51
+ --color-info-12: #04122f;
52
+ --color-success-1: #f9fbfa;
53
+ --color-success-2: #f2f8f4;
54
+ --color-success-3: #e7f3ec;
55
+ --color-success-4: #d5ecdd;
56
+ --color-success-5: #b6e2c6;
57
+ --color-success-6: #8ed7a9;
58
+ --color-success-7: #5ccc85;
59
+ --color-success-8: #33b864;
60
+ --color-success-9: #23944d;
61
+ --color-success-10: #166e37;
62
+ --color-success-11: #0d4f25;
63
+ --color-success-12: #062d14;
64
+ --color-warning-1: #fbfaf8;
65
+ --color-warning-2: #f8f5f1;
66
+ --color-warning-3: #f4eee6;
67
+ --color-warning-4: #efe1d2;
68
+ --color-warning-5: #e7ceb1;
69
+ --color-warning-6: #dfb686;
70
+ --color-warning-7: #d9994f;
71
+ --color-warning-8: #c87b23;
72
+ --color-warning-9: #a26116;
73
+ --color-warning-10: #79460c;
74
+ --color-warning-11: #573105;
75
+ --color-warning-12: #321b01;
76
+ --color-danger-1: #fbf9f9;
77
+ --color-danger-2: #f7f2f2;
78
+ --color-danger-3: #f3e8e8;
79
+ --color-danger-4: #ebd6d6;
80
+ --color-danger-5: #e0b8b8;
81
+ --color-danger-6: #d59090;
82
+ --color-danger-7: #c95f5f;
83
+ --color-danger-8: #b43636;
84
+ --color-danger-9: #912626;
85
+ --color-danger-10: #6c1919;
86
+ --color-danger-11: #4d0f0f;
87
+ --color-danger-12: #2c0707;
88
+ }
89
+
90
+ [data-color-scheme='dark'] {
91
+ --color-neutral-1: #0d0d0d;
92
+ --color-neutral-2: #1a1a1a;
93
+ --color-neutral-3: #242424;
94
+ --color-neutral-4: #303030;
95
+ --color-neutral-5: #424242;
96
+ --color-neutral-6: #575757;
97
+ --color-neutral-7: #707070;
98
+ --color-neutral-8: #8c8c8c;
99
+ --color-neutral-9: #a8a8a8;
100
+ --color-neutral-10: #c2c2c2;
101
+ --color-neutral-11: #dbdbdb;
102
+ --color-neutral-12: #f0f0f0;
103
+ --color-primary-1: #070b12;
104
+ --color-primary-2: #0f1524;
105
+ --color-primary-3: #161e32;
106
+ --color-primary-4: #1f2a42;
107
+ --color-primary-5: #2c3a58;
108
+ --color-primary-6: #3c4d71;
109
+ --color-primary-7: #51648f;
110
+ --color-primary-8: #7081a9;
111
+ --color-primary-9: #95a1bb;
112
+ --color-primary-10: #b6bdcd;
113
+ --color-primary-11: #d5d9e1;
114
+ --color-primary-12: #eeeff2;
115
+ --color-secondary-1: #0b0317;
116
+ --color-secondary-2: #17072c;
117
+ --color-secondary-3: #200b3c;
118
+ --color-secondary-4: #2c124f;
119
+ --color-secondary-5: #3d1b69;
120
+ --color-secondary-6: #502885;
121
+ --color-secondary-7: #693aa7;
122
+ --color-secondary-8: #865abe;
123
+ --color-secondary-9: #a487ca;
124
+ --color-secondary-10: #bfadd6;
125
+ --color-secondary-11: #dad1e6;
126
+ --color-secondary-12: #efecf3;
127
+ --color-info-1: #020917;
128
+ --color-info-2: #06122d;
129
+ --color-info-3: #0a1a3e;
130
+ --color-info-4: #102451;
131
+ --color-info-5: #19336b;
132
+ --color-info-6: #264488;
133
+ --color-info-7: #365baa;
134
+ --color-info-8: #5778c1;
135
+ --color-info-9: #859bcc;
136
+ --color-info-10: #acbad8;
137
+ --color-info-11: #d1d7e6;
138
+ --color-info-12: #eceef4;
139
+ --color-success-1: #03160a;
140
+ --color-success-2: #072c15;
141
+ --color-success-3: #0c3b1d;
142
+ --color-success-4: #134e29;
143
+ --color-success-5: #1d6838;
144
+ --color-success-6: #2a844b;
145
+ --color-success-7: #3ba562;
146
+ --color-success-8: #5cbd80;
147
+ --color-success-9: #88c9a0;
148
+ --color-success-10: #aed6bd;
149
+ --color-success-11: #d1e5d9;
150
+ --color-success-12: #ecf3ef;
151
+ --color-warning-1: #190e01;
152
+ --color-warning-2: #301b03;
153
+ --color-warning-3: #412606;
154
+ --color-warning-4: #56330b;
155
+ --color-warning-5: #714614;
156
+ --color-warning-6: #8f5b1f;
157
+ --color-warning-7: #b2752f;
158
+ --color-warning-8: #c89150;
159
+ --color-warning-9: #d1ab80;
160
+ --color-warning-10: #dbc4a9;
161
+ --color-warning-11: #e8dccf;
162
+ --color-warning-12: #f4f0eb;
163
+ --color-danger-1: #160404;
164
+ --color-danger-2: #2b0808;
165
+ --color-danger-3: #3a0d0d;
166
+ --color-danger-4: #4d1414;
167
+ --color-danger-5: #661f1f;
168
+ --color-danger-6: #812c2c;
169
+ --color-danger-7: #a23e3e;
170
+ --color-danger-8: #ba5e5e;
171
+ --color-danger-9: #c78a8a;
172
+ --color-danger-10: #d5afaf;
173
+ --color-danger-11: #e5d2d2;
174
+ --color-danger-12: #f3ecec;
175
+ }
package/src/brand.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "identity": {
3
+ "name": "Liquidity",
4
+ "title": "Liquidity | Regulated Digital Assets",
5
+ "description": "Regulated digital asset exchange",
6
+ "shortName": "LQDTY",
7
+ "labsName": "Liquidity",
8
+ "legalEntity": "Liquidity Inc.",
9
+ "walletName": "Liquidity Wallet",
10
+ "protocolName": "Liquidity Protocol",
11
+ "copyrightHolder": "Liquidity Inc.",
12
+ "appDomain": "liquidity.io",
13
+ "docsDomain": "docs.liquidity.io",
14
+ "infoDomain": "info.liquidity.io",
15
+ "gatewayDomain": "api.liquidity.io",
16
+ "wsDomain": "ws.liquidity.io",
17
+ "helpUrl": "https://docs.liquidity.io",
18
+ "termsUrl": "https://liquidity.io/terms",
19
+ "privacyUrl": "https://liquidity.io/privacy",
20
+ "downloadUrl": "https://liquidity.io/wallet",
21
+ "complianceEmail": "compliance@liquidity.io",
22
+ "supportEmail": "support@liquidity.io",
23
+ "twitter": "https://x.com/liquidityio",
24
+ "farcaster": "",
25
+ "linkedin": "",
26
+ "tiktok": "",
27
+ "github": "https://github.com/liquidityio",
28
+ "discord": "",
29
+ "logoUrl": "https://cdn.jsdelivr.net/npm/@liquidityio/brand@latest/assets/logo/logo.svg",
30
+ "faviconUrl": "https://cdn.jsdelivr.net/npm/@liquidityio/brand@latest/assets/logo/favicon.svg"
31
+ },
32
+ "themes": {
33
+ "neutral": { "seed": "#808080" },
34
+ "primary": { "seed": "#1a2744" },
35
+ "secondary": { "seed": "#721be4" },
36
+ "info": { "seed": "#2563eb" },
37
+ "success": { "seed": "#16a34a" },
38
+ "warning": { "seed": "#d97706" },
39
+ "danger": { "seed": "#dc2626" }
40
+ },
41
+ "chains": {
42
+ "defaultChainId": 8675309,
43
+ "supported": [
44
+ 8675309,
45
+ 8675310,
46
+ 8675311,
47
+ 1337,
48
+ 31337
49
+ ]
50
+ },
51
+ "rpc": {
52
+ "1": "https://eth.llamarpc.com",
53
+ "494949": "https://rpc.liquidity.io",
54
+ "42161": "https://arb1.arbitrum.io/rpc",
55
+ "8453": "https://mainnet.base.org",
56
+ "137": "https://polygon-rpc.com",
57
+ "8675309": "https://rpc.main.satschel.com",
58
+ "8675310": "https://rpc.test.satschel.com",
59
+ "8675311": "https://rpc.dev.satschel.com",
60
+ "1337": "http://localhost:8545/ext/bc/C/rpc",
61
+ "31337": "http://localhost:8545/ext/bc/C/rpc"
62
+ },
63
+ "api": {
64
+ "graphql": "",
65
+ "gateway": "https://api.liquidity.io",
66
+ "insights": "https://insights.satschel.com"
67
+ },
68
+ "iam": {
69
+ "provider": "https://id.liquidity.io",
70
+ "clientId": "liquidity-app"
71
+ },
72
+ "walletConnect": {
73
+ "projectId": ""
74
+ }
75
+ }
package/src/fonts.ts ADDED
@@ -0,0 +1,45 @@
1
+ import type { FontDef } from '@hanzo/branding/tg-config'
2
+
3
+ export const bodyFont: FontDef = {
4
+ family: '"pplxSans", ui-sans-serif, system-ui, -apple-system, sans-serif',
5
+ size: {
6
+ 1: 11, 2: 12, 3: 13, 4: 14, true: 14, 5: 15, 6: 16,
7
+ 7: 18, 8: 20, 9: 24, 10: 30, 11: 36, 12: 44,
8
+ 13: 52, 14: 62, 15: 74, 16: 88,
9
+ },
10
+ lineHeight: {
11
+ 1: 16, 2: 18, 3: 19, 4: 21, true: 21, 5: 22, 6: 24,
12
+ 7: 27, 8: 30, 9: 34, 10: 42, 11: 50, 12: 60,
13
+ 13: 70, 14: 82, 15: 98, 16: 116,
14
+ },
15
+ weight: { 1: '400', 6: '500' },
16
+ letterSpacing: { 1: 0.15, 4: 0.1, true: 0.1, 6: 0, 8: -0.35, 12: -0.75 },
17
+ }
18
+
19
+ export const headingFont: FontDef = {
20
+ family: '"pplxSans", ui-sans-serif, system-ui, -apple-system, sans-serif',
21
+ size: {
22
+ 1: 12, 2: 14, 3: 16, 4: 18, true: 18, 5: 20,
23
+ 6: 24, 7: 30, 8: 36, 9: 44, 10: 52, 11: 62, 12: 74,
24
+ },
25
+ lineHeight: {
26
+ 1: 16, 2: 18, 3: 22, 4: 24, true: 24, 5: 26,
27
+ 6: 30, 7: 36, 8: 44, 9: 52, 10: 62, 11: 74, 12: 86,
28
+ },
29
+ weight: { 1: '500', 6: '550' },
30
+ letterSpacing: { 1: 0.2, 4: 0, 6: -0.2, 8: -0.5, 12: -1 },
31
+ }
32
+
33
+ export const monoFont: FontDef = {
34
+ family: '"pplxSansMono", ui-monospace, monospace',
35
+ size: {
36
+ 1: 11, 2: 12, 3: 13, 4: 14, true: 14, 5: 15,
37
+ 6: 16, 7: 18, 8: 20, 9: 24, 10: 30,
38
+ },
39
+ lineHeight: {
40
+ 1: 18, 2: 20, 3: 22, 4: 24, true: 24, 5: 26,
41
+ 6: 28, 7: 30, 8: 34, 9: 40, 10: 48,
42
+ },
43
+ weight: { 1: '400' },
44
+ letterSpacing: { 4: 0, true: 0 },
45
+ }
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { OrgConfig } from './types'
2
+ import brandJson from './brand.json'
3
+
4
+ export const config: OrgConfig = brandJson as OrgConfig
5
+ export const brandIdentity = config.identity as Required<typeof config.identity>
6
+
7
+ export { tamaguiConfig } from './tamagui-config'
8
+ export type { BrandIdentity, OrgConfig } from './types'
@@ -0,0 +1,21 @@
1
+ /* ============================================================
2
+ Liquidity-specific Tailwind additions (non-color tokens)
3
+ ============================================================
4
+ Org-specific easing curves and typography on top of @hanzo/branding.
5
+ */
6
+
7
+ @theme {
8
+ /* Easing */
9
+ --ease-out-cubic: cubic-bezier(.33, 1, .68, 1);
10
+ --ease-in-out-cubic: cubic-bezier(.65, 0, .35, 1);
11
+ --ease-out-soft: cubic-bezier(.36, 1.3, .64, 1);
12
+ --ease-in-out-quart: cubic-bezier(.76, 0, .24, 1);
13
+ --ease-out-quint: cubic-bezier(.22, 1, .36, 1);
14
+ --ease-in-cubic: cubic-bezier(.32, 0, .67, 0);
15
+ --ease-in-out-sine: cubic-bezier(.37, 0, .63, 1);
16
+
17
+ /* Typography */
18
+ --font-sans: "pplxSans", ui-sans-serif, system-ui, -apple-system, sans-serif;
19
+ --font-mono: "pplxSansMono", ui-monospace, monospace;
20
+ --font-serif: "pplxSerif", ui-serif, Georgia, serif;
21
+ }
@@ -0,0 +1,9 @@
1
+ import { createTamaguiConfig, type ThemesConfig } from '@hanzo/branding/tg-config'
2
+ import brandJson from './brand.json'
3
+ import { bodyFont, headingFont, monoFont } from './fonts'
4
+
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ export const tamaguiConfig: any = createTamaguiConfig({
7
+ themes: brandJson.themes as ThemesConfig,
8
+ fonts: { body: bodyFont, heading: headingFont, mono: monoFont },
9
+ })
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Tailwind bundle for Liquidity apps.
3
+ * Apps just import this single file.
4
+ */
5
+
6
+ @import 'tailwindcss';
7
+ @import './liquidity-tw-additions.css';
8
+ @import './brand-palettes.css';
9
+ @import '@hanzo/branding/shadcn-semantic-tw-colors.css';
package/src/types.ts ADDED
@@ -0,0 +1,66 @@
1
+ import type { ThemesConfig } from '@hanzo/branding/tg-config'
2
+
3
+ /** Brand identity — name, domains, social, assets. */
4
+ export interface BrandIdentity {
5
+ name: string
6
+ title: string
7
+ description: string
8
+ shortName: string
9
+ labsName: string
10
+ legalEntity: string
11
+ walletName: string
12
+ protocolName: string
13
+ copyrightHolder: string
14
+
15
+ // Domains
16
+ appDomain: string
17
+ docsDomain: string
18
+ infoDomain: string
19
+ gatewayDomain: string
20
+ wsDomain: string
21
+
22
+ // Links
23
+ helpUrl: string
24
+ termsUrl: string
25
+ privacyUrl: string
26
+ downloadUrl: string
27
+
28
+ // Contact
29
+ complianceEmail: string
30
+ supportEmail: string
31
+
32
+ // Social
33
+ twitter: string
34
+ farcaster: string
35
+ linkedin: string
36
+ tiktok: string
37
+ github: string
38
+ discord: string
39
+
40
+ // Assets
41
+ logoUrl: string
42
+ faviconUrl: string
43
+ }
44
+
45
+ /** Full org config — the shape of brand.json. */
46
+ export interface OrgConfig {
47
+ identity: Partial<BrandIdentity>
48
+ themes: ThemesConfig
49
+ chains: {
50
+ defaultChainId: number
51
+ supported: number[]
52
+ }
53
+ rpc: Record<string, string>
54
+ api: {
55
+ graphql: string
56
+ gateway: string
57
+ insights: string
58
+ }
59
+ iam?: {
60
+ provider: string
61
+ clientId: string
62
+ }
63
+ walletConnect: {
64
+ projectId: string
65
+ }
66
+ }