@signals-protocol/v1-sdk 1.5.0 → 1.6.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/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/profile-context/index.d.ts +2 -0
- package/dist/profile-context/index.js +5 -0
- package/dist/profile-context/profile-context-image.d.ts +3 -0
- package/dist/profile-context/profile-context-image.js +227 -0
- package/dist/profile-context/tier-badges.d.ts +2 -0
- package/dist/profile-context/tier-badges.js +15 -0
- package/dist/profile-context/types.d.ts +7 -0
- package/dist/profile-context/types.js +2 -0
- package/dist/share/assets.d.ts +3 -1
- package/dist/share/assets.js +21 -1
- package/dist/share/profile-image.js +9 -130
- package/dist/share/tier-theme-shared.d.ts +10 -0
- package/dist/share/tier-theme-shared.js +79 -0
- package/dist/share/types.d.ts +5 -7
- package/package.json +6 -1
package/dist/index.d.ts
CHANGED
|
@@ -10,4 +10,4 @@ export * as MathUtils from "./utils/math";
|
|
|
10
10
|
export { toWAD, toMicroUSDC } from "./clmsr-sdk";
|
|
11
11
|
export { createCLMSRSDK, createSignalsSDK } from "./clmsr-sdk";
|
|
12
12
|
export * from "./share";
|
|
13
|
-
export declare const VERSION = "1.
|
|
13
|
+
export declare const VERSION = "1.6.0";
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildProfileContextVNode = void 0;
|
|
4
|
+
var profile_context_image_1 = require("./profile-context-image");
|
|
5
|
+
Object.defineProperty(exports, "buildProfileContextVNode", { enumerable: true, get: function () { return profile_context_image_1.buildProfileContextVNode; } });
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildProfileContextVNode = buildProfileContextVNode;
|
|
4
|
+
const h_1 = require("../share/h");
|
|
5
|
+
const assets_1 = require("../share/assets");
|
|
6
|
+
const avatar_1 = require("../share/avatar");
|
|
7
|
+
const tier_theme_shared_1 = require("../share/tier-theme-shared");
|
|
8
|
+
const tier_badges_1 = require("./tier-badges");
|
|
9
|
+
const CARD_WIDTH = 1200;
|
|
10
|
+
const CARD_HEIGHT = 630;
|
|
11
|
+
const PAGE_BG = "#eef7ff";
|
|
12
|
+
const PRIMARY = "#1444c2";
|
|
13
|
+
const INK = "#242424";
|
|
14
|
+
const INK_MUTED = "#737373";
|
|
15
|
+
const AVATAR_BG = "#ffffff";
|
|
16
|
+
const AVATAR_BORDER = "#d9e6f5";
|
|
17
|
+
const AVATAR_SIZE = 240;
|
|
18
|
+
const HERO_LEFT = 80;
|
|
19
|
+
const HERO_RIGHT = 80;
|
|
20
|
+
const HERO_GAP = 48;
|
|
21
|
+
const IDENTITY_WIDTH = CARD_WIDTH - HERO_LEFT - HERO_RIGHT - AVATAR_SIZE - HERO_GAP;
|
|
22
|
+
function shortenAddress(address) {
|
|
23
|
+
const normalized = address.trim();
|
|
24
|
+
return `${normalized.slice(0, 6)}…${normalized.slice(-4)}`;
|
|
25
|
+
}
|
|
26
|
+
function resolveHandle(realHandle) {
|
|
27
|
+
const resolved = realHandle?.trim();
|
|
28
|
+
return resolved ? resolved : null;
|
|
29
|
+
}
|
|
30
|
+
function ellipsizeLongHandle(handle) {
|
|
31
|
+
if (handle.length <= 32)
|
|
32
|
+
return handle;
|
|
33
|
+
return `${handle.slice(0, 16)}…${handle.slice(-14)}`;
|
|
34
|
+
}
|
|
35
|
+
function buildIdentityText(input) {
|
|
36
|
+
const address = shortenAddress(input.address);
|
|
37
|
+
const handle = resolveHandle(input.realHandle);
|
|
38
|
+
if (!handle) {
|
|
39
|
+
return {
|
|
40
|
+
handle: address,
|
|
41
|
+
addressLine: null,
|
|
42
|
+
isAddressFallback: true,
|
|
43
|
+
sourceLength: address.length,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
handle: ellipsizeLongHandle(handle),
|
|
48
|
+
addressLine: address,
|
|
49
|
+
isAddressFallback: false,
|
|
50
|
+
sourceLength: handle.length,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function getHandleFontSize(identity) {
|
|
54
|
+
if (identity.isAddressFallback)
|
|
55
|
+
return 88;
|
|
56
|
+
if (identity.sourceLength <= 14)
|
|
57
|
+
return 116;
|
|
58
|
+
if (identity.sourceLength <= 20)
|
|
59
|
+
return 96;
|
|
60
|
+
if (identity.sourceLength <= 26)
|
|
61
|
+
return 80;
|
|
62
|
+
if (identity.sourceLength <= 32)
|
|
63
|
+
return 64;
|
|
64
|
+
return 56;
|
|
65
|
+
}
|
|
66
|
+
function buildBrandStamp() {
|
|
67
|
+
return (0, h_1.h)("div", {
|
|
68
|
+
style: {
|
|
69
|
+
position: "absolute",
|
|
70
|
+
top: 56,
|
|
71
|
+
left: 64,
|
|
72
|
+
display: "flex",
|
|
73
|
+
alignItems: "center",
|
|
74
|
+
gap: 16,
|
|
75
|
+
},
|
|
76
|
+
}, (0, h_1.h)("img", {
|
|
77
|
+
src: (0, assets_1.buildLogoSquaresSVG)("light"),
|
|
78
|
+
width: 56,
|
|
79
|
+
height: 52,
|
|
80
|
+
style: { display: "flex", flexShrink: 0 },
|
|
81
|
+
}), (0, h_1.h)("div", {
|
|
82
|
+
style: {
|
|
83
|
+
display: "flex",
|
|
84
|
+
fontSize: 52,
|
|
85
|
+
fontWeight: 700,
|
|
86
|
+
color: PRIMARY,
|
|
87
|
+
letterSpacing: "-0.01em",
|
|
88
|
+
},
|
|
89
|
+
}, "Signals"));
|
|
90
|
+
}
|
|
91
|
+
function buildAvatar(address) {
|
|
92
|
+
const avatar = (0, avatar_1.getAvatarData)(address, "light");
|
|
93
|
+
return (0, h_1.h)("div", {
|
|
94
|
+
style: {
|
|
95
|
+
width: AVATAR_SIZE,
|
|
96
|
+
height: AVATAR_SIZE,
|
|
97
|
+
borderRadius: 36,
|
|
98
|
+
background: AVATAR_BG,
|
|
99
|
+
border: `1px solid ${AVATAR_BORDER}`,
|
|
100
|
+
display: "flex",
|
|
101
|
+
flexDirection: "column",
|
|
102
|
+
overflow: "hidden",
|
|
103
|
+
flexShrink: 0,
|
|
104
|
+
},
|
|
105
|
+
}, ...avatar.pattern.map((row, y) => (0, h_1.h)("div", {
|
|
106
|
+
style: {
|
|
107
|
+
display: "flex",
|
|
108
|
+
width: "100%",
|
|
109
|
+
height: "20%",
|
|
110
|
+
},
|
|
111
|
+
}, ...row.map((isFilled, x) => (0, h_1.h)("div", {
|
|
112
|
+
style: {
|
|
113
|
+
width: "20%",
|
|
114
|
+
height: "100%",
|
|
115
|
+
backgroundColor: isFilled
|
|
116
|
+
? (y + x) % 2 === 0
|
|
117
|
+
? avatar.primary
|
|
118
|
+
: avatar.secondary
|
|
119
|
+
: "transparent",
|
|
120
|
+
},
|
|
121
|
+
})))));
|
|
122
|
+
}
|
|
123
|
+
function buildTierChip(tier) {
|
|
124
|
+
const tierTheme = tier_theme_shared_1.TIER_CHIP_THEMES[tier].light;
|
|
125
|
+
return (0, h_1.h)("div", {
|
|
126
|
+
style: {
|
|
127
|
+
display: "flex",
|
|
128
|
+
alignItems: "center",
|
|
129
|
+
gap: 10,
|
|
130
|
+
padding: "10px 20px",
|
|
131
|
+
borderRadius: 999,
|
|
132
|
+
border: `1px solid ${tierTheme.border}`,
|
|
133
|
+
background: `linear-gradient(135deg, ${tierTheme.from}, ${tierTheme.to})`,
|
|
134
|
+
color: INK,
|
|
135
|
+
fontSize: 28,
|
|
136
|
+
fontWeight: 500,
|
|
137
|
+
lineHeight: 1,
|
|
138
|
+
marginBottom: 16,
|
|
139
|
+
alignSelf: "flex-start",
|
|
140
|
+
flexShrink: 0,
|
|
141
|
+
},
|
|
142
|
+
}, (0, h_1.h)("img", {
|
|
143
|
+
src: tier_badges_1.TIER_BADGE_DATA_URIS[tier],
|
|
144
|
+
width: 32,
|
|
145
|
+
height: 32,
|
|
146
|
+
style: { display: "flex", flexShrink: 0 },
|
|
147
|
+
}), (0, h_1.h)("div", { style: { display: "flex" } }, (0, tier_theme_shared_1.formatTierName)(tier)));
|
|
148
|
+
}
|
|
149
|
+
function buildHandle(identity) {
|
|
150
|
+
return (0, h_1.h)("div", {
|
|
151
|
+
style: {
|
|
152
|
+
display: "flex",
|
|
153
|
+
maxWidth: IDENTITY_WIDTH,
|
|
154
|
+
fontFamily: identity.isAddressFallback ? "JetBrains Mono" : "Inter",
|
|
155
|
+
fontSize: getHandleFontSize(identity),
|
|
156
|
+
fontWeight: 700,
|
|
157
|
+
color: PRIMARY,
|
|
158
|
+
letterSpacing: identity.isAddressFallback ? "-0.005em" : "-0.025em",
|
|
159
|
+
lineHeight: 0.95,
|
|
160
|
+
whiteSpace: "nowrap",
|
|
161
|
+
overflow: "hidden",
|
|
162
|
+
textOverflow: "ellipsis",
|
|
163
|
+
},
|
|
164
|
+
}, identity.handle);
|
|
165
|
+
}
|
|
166
|
+
function buildAddressLine(identity) {
|
|
167
|
+
if (!identity.addressLine)
|
|
168
|
+
return null;
|
|
169
|
+
return (0, h_1.h)("div", {
|
|
170
|
+
style: {
|
|
171
|
+
display: "flex",
|
|
172
|
+
fontFamily: "JetBrains Mono",
|
|
173
|
+
fontSize: 30,
|
|
174
|
+
color: INK_MUTED,
|
|
175
|
+
fontWeight: 500,
|
|
176
|
+
marginTop: 18,
|
|
177
|
+
letterSpacing: "0.01em",
|
|
178
|
+
},
|
|
179
|
+
}, identity.addressLine);
|
|
180
|
+
}
|
|
181
|
+
function buildIdentityColumn(input) {
|
|
182
|
+
const identity = buildIdentityText(input);
|
|
183
|
+
const children = [];
|
|
184
|
+
// Guard against runtime tier values outside the declared union (e.g. a
|
|
185
|
+
// future "UNRANKED" snapshot that downstream pushes through unchecked).
|
|
186
|
+
// Skip the chip rather than throw so the OG render keeps working.
|
|
187
|
+
if (input.tier && tier_theme_shared_1.TIER_CHIP_THEMES[input.tier]) {
|
|
188
|
+
children.push(buildTierChip(input.tier));
|
|
189
|
+
}
|
|
190
|
+
children.push(buildHandle(identity));
|
|
191
|
+
const addressLine = buildAddressLine(identity);
|
|
192
|
+
if (addressLine) {
|
|
193
|
+
children.push(addressLine);
|
|
194
|
+
}
|
|
195
|
+
return (0, h_1.h)("div", {
|
|
196
|
+
style: {
|
|
197
|
+
display: "flex",
|
|
198
|
+
flexDirection: "column",
|
|
199
|
+
minWidth: 0,
|
|
200
|
+
flex: 1,
|
|
201
|
+
},
|
|
202
|
+
}, ...children);
|
|
203
|
+
}
|
|
204
|
+
function buildProfileContextVNode(input) {
|
|
205
|
+
return (0, h_1.h)("div", {
|
|
206
|
+
style: {
|
|
207
|
+
width: CARD_WIDTH,
|
|
208
|
+
height: CARD_HEIGHT,
|
|
209
|
+
display: "flex",
|
|
210
|
+
position: "relative",
|
|
211
|
+
overflow: "hidden",
|
|
212
|
+
fontFamily: "Inter",
|
|
213
|
+
background: PAGE_BG,
|
|
214
|
+
},
|
|
215
|
+
}, buildBrandStamp(), (0, h_1.h)("div", {
|
|
216
|
+
style: {
|
|
217
|
+
position: "absolute",
|
|
218
|
+
top: "50%",
|
|
219
|
+
left: HERO_LEFT,
|
|
220
|
+
right: HERO_RIGHT,
|
|
221
|
+
transform: "translateY(-50%)",
|
|
222
|
+
display: "flex",
|
|
223
|
+
alignItems: "center",
|
|
224
|
+
gap: HERO_GAP,
|
|
225
|
+
},
|
|
226
|
+
}, buildAvatar(input.address), buildIdentityColumn(input)));
|
|
227
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TIER_BADGE_DATA_URIS = void 0;
|
|
4
|
+
const BRONZE_BADGE_DATA_URI = "data:image/png;base64,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";
|
|
5
|
+
const SILVER_BADGE_DATA_URI = "data:image/png;base64,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";
|
|
6
|
+
const GOLD_BADGE_DATA_URI = "data:image/png;base64,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";
|
|
7
|
+
const PLATINUM_BADGE_DATA_URI = "data:image/png;base64,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";
|
|
8
|
+
const DIAMOND_BADGE_DATA_URI = "data:image/png;base64,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";
|
|
9
|
+
exports.TIER_BADGE_DATA_URIS = {
|
|
10
|
+
BRONZE: BRONZE_BADGE_DATA_URI,
|
|
11
|
+
SILVER: SILVER_BADGE_DATA_URI,
|
|
12
|
+
GOLD: GOLD_BADGE_DATA_URI,
|
|
13
|
+
PLATINUM: PLATINUM_BADGE_DATA_URI,
|
|
14
|
+
DIAMOND: DIAMOND_BADGE_DATA_URI,
|
|
15
|
+
};
|
package/dist/share/assets.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { SatoriNode } from "./types";
|
|
2
|
-
export declare
|
|
2
|
+
export declare function buildLogoSquaresSVG(theme: "light" | "dark"): string;
|
|
3
|
+
/** @deprecated Use buildLogoSquaresSVG("light") for theme-aware rendering. */
|
|
4
|
+
export declare const SIGNALS_LOGO_URI: string;
|
|
3
5
|
export declare function buildLogoStrokeSVG(size: number, theme: "light" | "dark"): SatoriNode;
|
package/dist/share/assets.js
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SIGNALS_LOGO_URI = void 0;
|
|
4
|
+
exports.buildLogoSquaresSVG = buildLogoSquaresSVG;
|
|
4
5
|
exports.buildLogoStrokeSVG = buildLogoStrokeSVG;
|
|
5
6
|
const h_1 = require("./h");
|
|
7
|
+
const LOGO_SQUARES = [
|
|
8
|
+
{ x: "8.50024", y: "0" },
|
|
9
|
+
{ x: "8.50024", y: "4.00006" },
|
|
10
|
+
{ x: "0.5", y: "12" },
|
|
11
|
+
{ x: "12.5", y: "8.00006" },
|
|
12
|
+
{ x: "12.5", y: "0" },
|
|
13
|
+
{ x: "4.50024", y: "0" },
|
|
14
|
+
{ x: "12.5", y: "4.00006" },
|
|
15
|
+
{ x: "4.50024", y: "8.00006" },
|
|
16
|
+
];
|
|
17
|
+
function buildLogoSquaresSVG(theme) {
|
|
18
|
+
const fill = theme === "dark" ? "#FFFFFF" : "#1444c2";
|
|
19
|
+
const rects = LOGO_SQUARES.map(({ x, y }) => `<rect x="${x}" y="${y}" width="4" height="4" fill="${fill}"/>`).join("");
|
|
20
|
+
const svg = `<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">${rects}</svg>`;
|
|
21
|
+
// Use btoa for cross-platform compatibility (browser + Node 16+).
|
|
22
|
+
// SVG is ASCII only so direct btoa is safe (no UTF-8 escape needed).
|
|
23
|
+
return `data:image/svg+xml;base64,${btoa(svg)}`;
|
|
24
|
+
}
|
|
6
25
|
// Signals logo SVG (pixel block pattern) as base64 data URI
|
|
7
|
-
|
|
26
|
+
/** @deprecated Use buildLogoSquaresSVG("light") for theme-aware rendering. */
|
|
27
|
+
exports.SIGNALS_LOGO_URI = buildLogoSquaresSVG("light");
|
|
8
28
|
function buildLogoStrokeSVG(size, theme) {
|
|
9
29
|
const stroke = theme === "dark" ? "white" : "#1444c2";
|
|
10
30
|
return (0, h_1.h)("svg", {
|
|
@@ -4,13 +4,14 @@ exports.buildProfileVNode = buildProfileVNode;
|
|
|
4
4
|
const h_1 = require("./h");
|
|
5
5
|
const assets_1 = require("./assets");
|
|
6
6
|
const avatar_1 = require("./avatar");
|
|
7
|
+
const tier_theme_shared_1 = require("./tier-theme-shared");
|
|
7
8
|
const CARD_WIDTH = 1200;
|
|
8
9
|
const CARD_HEIGHT = 630;
|
|
9
10
|
const OUTER_PADDING = 24;
|
|
10
11
|
const CARD_PADDING_X = 32;
|
|
11
12
|
const CARD_PADDING_Y = 28;
|
|
12
13
|
const CHART_WIDTH = CARD_WIDTH - OUTER_PADDING * 2 - CARD_PADDING_X * 2;
|
|
13
|
-
const CHART_HEIGHT =
|
|
14
|
+
const CHART_HEIGHT = 308;
|
|
14
15
|
const PLOT_LEFT = 56;
|
|
15
16
|
const PLOT_RIGHT = 18;
|
|
16
17
|
const PLOT_TOP = 14;
|
|
@@ -45,78 +46,6 @@ const OG_THEMES = {
|
|
|
45
46
|
neutralBg: "#27272A", // surface-muted
|
|
46
47
|
},
|
|
47
48
|
};
|
|
48
|
-
const TIER_CHIP_THEMES = {
|
|
49
|
-
BRONZE: {
|
|
50
|
-
light: {
|
|
51
|
-
from: "#FFE6CC",
|
|
52
|
-
to: "#FFC999",
|
|
53
|
-
border: "#C97E3D",
|
|
54
|
-
icon: "#8B4513",
|
|
55
|
-
},
|
|
56
|
-
dark: {
|
|
57
|
-
from: "#3D2B1A",
|
|
58
|
-
to: "#5C3A1E",
|
|
59
|
-
border: "#8B5E2B",
|
|
60
|
-
icon: "#F5E5D4",
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
SILVER: {
|
|
64
|
-
light: {
|
|
65
|
-
from: "#F2F5F8",
|
|
66
|
-
to: "#E2E7EE",
|
|
67
|
-
border: "#BFC6CE",
|
|
68
|
-
icon: "#6B7280",
|
|
69
|
-
},
|
|
70
|
-
dark: {
|
|
71
|
-
from: "#2A2D31",
|
|
72
|
-
to: "#363A40",
|
|
73
|
-
border: "#6B7280",
|
|
74
|
-
icon: "#F3F4F6",
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
GOLD: {
|
|
78
|
-
light: {
|
|
79
|
-
from: "#FFF0B8",
|
|
80
|
-
to: "#FFD875",
|
|
81
|
-
border: "#D9A441",
|
|
82
|
-
icon: "#DA9100",
|
|
83
|
-
},
|
|
84
|
-
dark: {
|
|
85
|
-
from: "#3D3520",
|
|
86
|
-
to: "#4A3D1A",
|
|
87
|
-
border: "#B8892E",
|
|
88
|
-
icon: "#FFE9B3",
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
PLATINUM: {
|
|
92
|
-
light: {
|
|
93
|
-
from: "#E4FFF7",
|
|
94
|
-
to: "#CDEFE5",
|
|
95
|
-
border: "#8FD7C6",
|
|
96
|
-
icon: "#059669",
|
|
97
|
-
},
|
|
98
|
-
dark: {
|
|
99
|
-
from: "#1A3D33",
|
|
100
|
-
to: "#1F3B31",
|
|
101
|
-
border: "#4DAE96",
|
|
102
|
-
icon: "#BAEBD9",
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
DIAMOND: {
|
|
106
|
-
light: {
|
|
107
|
-
from: "#E2F4FF",
|
|
108
|
-
to: "#C9E9FF",
|
|
109
|
-
border: "#89D0FF",
|
|
110
|
-
icon: "#0284C7",
|
|
111
|
-
},
|
|
112
|
-
dark: {
|
|
113
|
-
from: "#1A2F3D",
|
|
114
|
-
to: "#1E3545",
|
|
115
|
-
border: "#5AAFE0",
|
|
116
|
-
icon: "#5EC0F2",
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
49
|
const PRICE_TICK_STEPS = [
|
|
121
50
|
10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000, 100000,
|
|
122
51
|
250000, 500000, 1000000,
|
|
@@ -188,8 +117,6 @@ function buildMainText(input) {
|
|
|
188
117
|
const handle = resolveDisplayName(input.realHandle ?? null);
|
|
189
118
|
if (handle)
|
|
190
119
|
return handle;
|
|
191
|
-
if (input.hideWallet)
|
|
192
|
-
return "A Signals trader";
|
|
193
120
|
return resolveDisplayName(input.displayName) ?? shortenAddress(input.address);
|
|
194
121
|
}
|
|
195
122
|
function formatCallCopy(totalCalls) {
|
|
@@ -197,8 +124,6 @@ function formatCallCopy(totalCalls) {
|
|
|
197
124
|
}
|
|
198
125
|
function buildSubline(input) {
|
|
199
126
|
const callCopy = formatCallCopy(input.totalCalls);
|
|
200
|
-
if (input.hideWallet)
|
|
201
|
-
return `${callCopy} on Signals`;
|
|
202
127
|
if (resolveDisplayName(input.realHandle ?? null) !== null) {
|
|
203
128
|
return `${shortenAddress(input.address)} with ${callCopy}`;
|
|
204
129
|
}
|
|
@@ -371,11 +296,8 @@ function buildHistoryPath(btcHistory, scaleX, scaleY) {
|
|
|
371
296
|
function clamp(value, min, max) {
|
|
372
297
|
return Math.min(Math.max(value, min), max);
|
|
373
298
|
}
|
|
374
|
-
function formatTierName(tier) {
|
|
375
|
-
return `${tier[0]}${tier.slice(1).toLowerCase()}`;
|
|
376
|
-
}
|
|
377
299
|
function buildTierChip(tier, themeName, theme) {
|
|
378
|
-
const tierTheme = TIER_CHIP_THEMES[tier][themeName];
|
|
300
|
+
const tierTheme = tier_theme_shared_1.TIER_CHIP_THEMES[tier][themeName];
|
|
379
301
|
return (0, h_1.h)("div", {
|
|
380
302
|
style: {
|
|
381
303
|
display: "flex",
|
|
@@ -399,7 +321,7 @@ function buildTierChip(tier, themeName, theme) {
|
|
|
399
321
|
}, (0, h_1.h)("polygon", {
|
|
400
322
|
points: "8 1 15 8 8 15 1 8",
|
|
401
323
|
fill: tierTheme.icon,
|
|
402
|
-
})), (0, h_1.h)("div", { style: { display: "flex" } }, formatTierName(tier)));
|
|
324
|
+
})), (0, h_1.h)("div", { style: { display: "flex" } }, (0, tier_theme_shared_1.formatTierName)(tier)));
|
|
403
325
|
}
|
|
404
326
|
function buildAddressAvatar(address, themeName, theme) {
|
|
405
327
|
const avatar = (0, avatar_1.getAvatarData)(address, themeName);
|
|
@@ -433,44 +355,10 @@ function buildAddressAvatar(address, themeName, theme) {
|
|
|
433
355
|
},
|
|
434
356
|
})))));
|
|
435
357
|
}
|
|
436
|
-
function buildGenericAvatar(theme) {
|
|
437
|
-
return (0, h_1.h)("div", {
|
|
438
|
-
style: {
|
|
439
|
-
width: AVATAR_SIZE,
|
|
440
|
-
height: AVATAR_SIZE,
|
|
441
|
-
display: "flex",
|
|
442
|
-
alignItems: "center",
|
|
443
|
-
justifyContent: "center",
|
|
444
|
-
overflow: "hidden",
|
|
445
|
-
borderRadius: 22,
|
|
446
|
-
border: `1px solid ${theme.border}`,
|
|
447
|
-
background: theme.primary,
|
|
448
|
-
flexShrink: 0,
|
|
449
|
-
},
|
|
450
|
-
}, (0, h_1.h)("div", {
|
|
451
|
-
style: {
|
|
452
|
-
width: 58,
|
|
453
|
-
height: 58,
|
|
454
|
-
display: "flex",
|
|
455
|
-
alignItems: "center",
|
|
456
|
-
justifyContent: "center",
|
|
457
|
-
borderRadius: 999,
|
|
458
|
-
background: theme.card,
|
|
459
|
-
},
|
|
460
|
-
}, (0, h_1.h)("img", {
|
|
461
|
-
src: assets_1.SIGNALS_LOGO_URI,
|
|
462
|
-
width: 34,
|
|
463
|
-
height: 32,
|
|
464
|
-
style: { display: "flex" },
|
|
465
|
-
})));
|
|
466
|
-
}
|
|
467
358
|
function buildAvatar(input, theme) {
|
|
468
|
-
if (input.hideWallet) {
|
|
469
|
-
return buildGenericAvatar(theme);
|
|
470
|
-
}
|
|
471
359
|
return buildAddressAvatar(input.address, input.theme, theme);
|
|
472
360
|
}
|
|
473
|
-
function buildBrandWordmark(theme) {
|
|
361
|
+
function buildBrandWordmark(themeName, theme) {
|
|
474
362
|
return (0, h_1.h)("div", {
|
|
475
363
|
style: {
|
|
476
364
|
display: "flex",
|
|
@@ -479,7 +367,7 @@ function buildBrandWordmark(theme) {
|
|
|
479
367
|
flexShrink: 0,
|
|
480
368
|
},
|
|
481
369
|
}, (0, h_1.h)("img", {
|
|
482
|
-
src: assets_1.
|
|
370
|
+
src: (0, assets_1.buildLogoSquaresSVG)(themeName),
|
|
483
371
|
width: 34,
|
|
484
372
|
height: 32,
|
|
485
373
|
style: { display: "flex" },
|
|
@@ -496,7 +384,7 @@ function buildHeader(input, theme, mainText, subline) {
|
|
|
496
384
|
return (0, h_1.h)("div", {
|
|
497
385
|
style: {
|
|
498
386
|
display: "flex",
|
|
499
|
-
alignItems: "
|
|
387
|
+
alignItems: "flex-start",
|
|
500
388
|
justifyContent: "space-between",
|
|
501
389
|
gap: 24,
|
|
502
390
|
minHeight: AVATAR_SIZE,
|
|
@@ -546,7 +434,7 @@ function buildHeader(input, theme, mainText, subline) {
|
|
|
546
434
|
textOverflow: "ellipsis",
|
|
547
435
|
whiteSpace: "nowrap",
|
|
548
436
|
},
|
|
549
|
-
}, subline))), buildBrandWordmark(theme));
|
|
437
|
+
}, subline))), buildBrandWordmark(input.theme, theme));
|
|
550
438
|
}
|
|
551
439
|
function buildStatItem(label, value, valueColor, theme) {
|
|
552
440
|
return (0, h_1.h)("div", {
|
|
@@ -885,14 +773,5 @@ function buildProfileVNode(input) {
|
|
|
885
773
|
style: {
|
|
886
774
|
display: "flex",
|
|
887
775
|
},
|
|
888
|
-
}, buildChartArea(theme, input.btcHistory, input.positions)), buildStatRow(input, theme, pnlValue, roiValue, bestMultValue)
|
|
889
|
-
style: {
|
|
890
|
-
display: "flex",
|
|
891
|
-
justifyContent: "flex-end",
|
|
892
|
-
marginTop: 16,
|
|
893
|
-
fontSize: 13,
|
|
894
|
-
fontWeight: 500,
|
|
895
|
-
color: theme.inkMuted,
|
|
896
|
-
},
|
|
897
|
-
}, "signals.wtf · Pick your range"))));
|
|
776
|
+
}, buildChartArea(theme, input.btcHistory, input.positions)), buildStatRow(input, theme, pnlValue, roiValue, bestMultValue))));
|
|
898
777
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ProfileTier = "BRONZE" | "SILVER" | "GOLD" | "PLATINUM" | "DIAMOND";
|
|
2
|
+
export type TierThemeName = "light" | "dark";
|
|
3
|
+
export interface TierChipTheme {
|
|
4
|
+
from: string;
|
|
5
|
+
to: string;
|
|
6
|
+
border: string;
|
|
7
|
+
icon: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const TIER_CHIP_THEMES: Record<ProfileTier, Record<TierThemeName, TierChipTheme>>;
|
|
10
|
+
export declare function formatTierName(tier: ProfileTier): string;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TIER_CHIP_THEMES = void 0;
|
|
4
|
+
exports.formatTierName = formatTierName;
|
|
5
|
+
exports.TIER_CHIP_THEMES = {
|
|
6
|
+
BRONZE: {
|
|
7
|
+
light: {
|
|
8
|
+
from: "#FFE6CC",
|
|
9
|
+
to: "#FFC999",
|
|
10
|
+
border: "#C97E3D",
|
|
11
|
+
icon: "#8B4513",
|
|
12
|
+
},
|
|
13
|
+
dark: {
|
|
14
|
+
from: "#3D2B1A",
|
|
15
|
+
to: "#5C3A1E",
|
|
16
|
+
border: "#8B5E2B",
|
|
17
|
+
icon: "#F5E5D4",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
SILVER: {
|
|
21
|
+
light: {
|
|
22
|
+
from: "#F2F5F8",
|
|
23
|
+
to: "#E2E7EE",
|
|
24
|
+
border: "#BFC6CE",
|
|
25
|
+
icon: "#6B7280",
|
|
26
|
+
},
|
|
27
|
+
dark: {
|
|
28
|
+
from: "#2A2D31",
|
|
29
|
+
to: "#363A40",
|
|
30
|
+
border: "#6B7280",
|
|
31
|
+
icon: "#F3F4F6",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
GOLD: {
|
|
35
|
+
light: {
|
|
36
|
+
from: "#FFF0B8",
|
|
37
|
+
to: "#FFD875",
|
|
38
|
+
border: "#D9A441",
|
|
39
|
+
icon: "#DA9100",
|
|
40
|
+
},
|
|
41
|
+
dark: {
|
|
42
|
+
from: "#3D3520",
|
|
43
|
+
to: "#4A3D1A",
|
|
44
|
+
border: "#B8892E",
|
|
45
|
+
icon: "#FFE9B3",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
PLATINUM: {
|
|
49
|
+
light: {
|
|
50
|
+
from: "#E4FFF7",
|
|
51
|
+
to: "#CDEFE5",
|
|
52
|
+
border: "#8FD7C6",
|
|
53
|
+
icon: "#059669",
|
|
54
|
+
},
|
|
55
|
+
dark: {
|
|
56
|
+
from: "#1A3D33",
|
|
57
|
+
to: "#1F3B31",
|
|
58
|
+
border: "#4DAE96",
|
|
59
|
+
icon: "#BAEBD9",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
DIAMOND: {
|
|
63
|
+
light: {
|
|
64
|
+
from: "#E2F4FF",
|
|
65
|
+
to: "#C9E9FF",
|
|
66
|
+
border: "#89D0FF",
|
|
67
|
+
icon: "#0284C7",
|
|
68
|
+
},
|
|
69
|
+
dark: {
|
|
70
|
+
from: "#1A2F3D",
|
|
71
|
+
to: "#1E3545",
|
|
72
|
+
border: "#5AAFE0",
|
|
73
|
+
icon: "#5EC0F2",
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
function formatTierName(tier) {
|
|
78
|
+
return `${tier[0]}${tier.slice(1).toLowerCase()}`;
|
|
79
|
+
}
|
package/dist/share/types.d.ts
CHANGED
|
@@ -31,19 +31,16 @@ export interface ProfileChartPosition {
|
|
|
31
31
|
}
|
|
32
32
|
export interface ProfileImageInput {
|
|
33
33
|
/**
|
|
34
|
-
* User-facing display fallback used when `realHandle` is empty
|
|
35
|
-
*
|
|
36
|
-
* legacy callers; it is never shown while `hideWallet` is true.
|
|
34
|
+
* User-facing display fallback used when `realHandle` is empty. This may
|
|
35
|
+
* include an address fallback supplied by legacy callers.
|
|
37
36
|
*/
|
|
38
37
|
displayName: string | null;
|
|
39
38
|
/**
|
|
40
|
-
* Real, human-friendly handle (e.g. Namoshi name)
|
|
41
|
-
* even when `hideWallet` is true.
|
|
39
|
+
* Real, human-friendly handle (e.g. Namoshi name).
|
|
42
40
|
*
|
|
43
41
|
* Pass null when no real handle exists. Do not pass a truncated address
|
|
44
42
|
* fallback here; that belongs in `displayName`. Optional for backward
|
|
45
|
-
* compatibility
|
|
46
|
-
* fallback semantics.
|
|
43
|
+
* compatibility.
|
|
47
44
|
*/
|
|
48
45
|
realHandle?: string | null;
|
|
49
46
|
address: string;
|
|
@@ -67,6 +64,7 @@ export interface ProfileImageInput {
|
|
|
67
64
|
}>;
|
|
68
65
|
positions: ProfileChartPosition[];
|
|
69
66
|
theme: "light" | "dark";
|
|
67
|
+
/** @deprecated Has no effect since 1.5.1. */
|
|
70
68
|
hideWallet: boolean;
|
|
71
69
|
hideAmounts: boolean;
|
|
72
70
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signals-protocol/v1-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Signals v1 SDK for CLMSR market calculations and utilities",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -59,6 +59,11 @@
|
|
|
59
59
|
"require": "./dist/index.js",
|
|
60
60
|
"types": "./dist/index.d.ts"
|
|
61
61
|
},
|
|
62
|
+
"./profile-context": {
|
|
63
|
+
"import": "./dist/profile-context/index.js",
|
|
64
|
+
"require": "./dist/profile-context/index.js",
|
|
65
|
+
"types": "./dist/profile-context/index.d.ts"
|
|
66
|
+
},
|
|
62
67
|
"./package.json": "./package.json"
|
|
63
68
|
}
|
|
64
69
|
}
|