@decentnetwork/beagle-ui 0.2.33 → 0.2.35
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/beagle-ui.js +61 -2
- package/package.json +1 -1
package/dist/beagle-ui.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const BEAGLE_UI_VERSION = "0.2.
|
|
1
|
+
export const BEAGLE_UI_VERSION = "0.2.35";
|
|
2
2
|
// src/icons.jsx
|
|
3
3
|
var ICON_PATHS = {
|
|
4
4
|
// ---- tab bar (the four must feel like one set) ----
|
|
@@ -1712,6 +1712,39 @@ ${lines}`, { assistant: { kind: "adopt", rows: fresh } }));
|
|
|
1712
1712
|
return { thread, handle, removeFriends, adoptServicePeers };
|
|
1713
1713
|
}
|
|
1714
1714
|
|
|
1715
|
+
// src/request-avatar.js
|
|
1716
|
+
var REQUEST_AVATAR_HOST = "ens-gateway.beaglechat.workers.dev";
|
|
1717
|
+
var MAX_URL = 2048;
|
|
1718
|
+
function requestAvatarUrl(r) {
|
|
1719
|
+
const u = r && r.avatarUrl;
|
|
1720
|
+
if (typeof u !== "string" || !u || u.length > MAX_URL)
|
|
1721
|
+
return null;
|
|
1722
|
+
let parsed;
|
|
1723
|
+
try {
|
|
1724
|
+
parsed = new URL(u);
|
|
1725
|
+
} catch {
|
|
1726
|
+
return null;
|
|
1727
|
+
}
|
|
1728
|
+
if (parsed.protocol !== "https:" || parsed.host !== REQUEST_AVATAR_HOST)
|
|
1729
|
+
return null;
|
|
1730
|
+
if (parsed.username || parsed.password)
|
|
1731
|
+
return null;
|
|
1732
|
+
return parsed.href;
|
|
1733
|
+
}
|
|
1734
|
+
function requestPunkId(r) {
|
|
1735
|
+
const p = r && r.punkId;
|
|
1736
|
+
return typeof p === "number" && Number.isInteger(p) && p >= 0 ? p : null;
|
|
1737
|
+
}
|
|
1738
|
+
function requestAvatarSource(r, skipUrl = false) {
|
|
1739
|
+
const url = skipUrl ? null : requestAvatarUrl(r);
|
|
1740
|
+
if (url)
|
|
1741
|
+
return { kind: "url", url };
|
|
1742
|
+
const id = requestPunkId(r);
|
|
1743
|
+
if (id != null)
|
|
1744
|
+
return { kind: "punk", id };
|
|
1745
|
+
return { kind: "ens" };
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1715
1748
|
// src/chat.jsx
|
|
1716
1749
|
var DK_CMD_HIST_KEY = "beagle.assistant.history";
|
|
1717
1750
|
var DK_CMD_HIST_MAX = 50;
|
|
@@ -1756,7 +1789,7 @@ function RequestsBlock({ T, requests, onAct }) {
|
|
|
1756
1789
|
display: "flex",
|
|
1757
1790
|
flexDirection: "column",
|
|
1758
1791
|
gap: 8
|
|
1759
|
-
} }, /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", gap: 8 } }, /* @__PURE__ */ React.createElement(
|
|
1792
|
+
} }, /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", gap: 8 } }, /* @__PURE__ */ React.createElement(DkRequestAvatar, { r, size: 30, radius: 7 }), /* @__PURE__ */ React.createElement("div", { style: { minWidth: 0, flex: 1 } }, r.name ? /* @__PURE__ */ React.createElement("div", { style: {
|
|
1760
1793
|
fontFamily: "var(--ui)",
|
|
1761
1794
|
fontSize: 13,
|
|
1762
1795
|
fontWeight: 600,
|
|
@@ -1773,6 +1806,32 @@ function RequestsBlock({ T, requests, onAct }) {
|
|
|
1773
1806
|
paddingLeft: 8
|
|
1774
1807
|
} }, r.descr), failed[r.id] && /* @__PURE__ */ React.createElement("div", { style: { fontFamily: "var(--ui)", fontSize: 11, color: "var(--danger)" } }, failed[r.id]), /* @__PURE__ */ React.createElement("div", { style: { display: "flex", gap: 6 } }, /* @__PURE__ */ React.createElement(Btn, { tone: "ok", icon: "check", size: "sm", onClick: () => act(r, "accept"), style: { flex: 1 } }, T.accept), /* @__PURE__ */ React.createElement(Btn, { tone: "danger", icon: "x", size: "sm", onClick: () => act(r, "reject"), style: { flex: 1 } }, T.reject))))));
|
|
1775
1808
|
}
|
|
1809
|
+
function DkRequestAvatar({ r, size, radius }) {
|
|
1810
|
+
const [urlBroken, setUrlBroken] = React.useState(false);
|
|
1811
|
+
const url = requestAvatarUrl(r);
|
|
1812
|
+
React.useEffect(() => {
|
|
1813
|
+
setUrlBroken(false);
|
|
1814
|
+
}, [url]);
|
|
1815
|
+
const src = requestAvatarSource(r, urlBroken);
|
|
1816
|
+
const seed = r.carrier || r.userid || r.id;
|
|
1817
|
+
if (src.kind === "url") {
|
|
1818
|
+
return /* @__PURE__ */ React.createElement(
|
|
1819
|
+
"img",
|
|
1820
|
+
{
|
|
1821
|
+
src: src.url,
|
|
1822
|
+
alt: "",
|
|
1823
|
+
width: size,
|
|
1824
|
+
height: size,
|
|
1825
|
+
referrerPolicy: "no-referrer",
|
|
1826
|
+
onError: () => setUrlBroken(true),
|
|
1827
|
+
style: { width: size, height: size, borderRadius: radius, objectFit: "cover", flexShrink: 0, background: "var(--panel-2)" }
|
|
1828
|
+
}
|
|
1829
|
+
);
|
|
1830
|
+
}
|
|
1831
|
+
if (src.kind === "punk")
|
|
1832
|
+
return /* @__PURE__ */ React.createElement(DkPunkAvatar, { id: src.id, size, radius, fallbackSeed: seed });
|
|
1833
|
+
return /* @__PURE__ */ React.createElement(DkEnsAvatar, { userid: r.userid || r.id, name: r.name, fallbackSeed: r.carrier, size, radius });
|
|
1834
|
+
}
|
|
1776
1835
|
function PeerRow({ peer, T, active, onClick, muted, isProtocol, fix }) {
|
|
1777
1836
|
const name = peer.alias || peer.userId;
|
|
1778
1837
|
const row = rosterRow(peer, isProtocol || (() => false), fix);
|
package/package.json
CHANGED