@xyo-network/xl1-blockies 2.0.7 → 2.0.9

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.
@@ -0,0 +1,17 @@
1
+ import type { AvatarProps } from '@mui/material';
2
+ import React from 'react';
3
+ import type { RingsOptions } from './rings.ts';
4
+ export interface RingsAvatarProps extends AvatarProps {
5
+ ringsOptions?: Partial<RingsOptions>;
6
+ }
7
+ export declare const RingsAvatar: React.FC<RingsAvatarProps>;
8
+ export interface RingsAvatarAddressProps extends AvatarProps {
9
+ /** Size of the border is the size prop * borderSizeFactor and rounded up */
10
+ borderSizeFactor?: number;
11
+ /** The seed to render the avatar from */
12
+ seed?: string;
13
+ /** The size of the avatar in pixels, defaults to 24 */
14
+ size?: number;
15
+ }
16
+ export declare const RingsAvatarAddress: React.FC<RingsAvatarAddressProps>;
17
+ //# sourceMappingURL=RingsAvatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RingsAvatar.d.ts","sourceRoot":"","sources":["../../../../src/components/blockies/RingsAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhD,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CACrC;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAUlD,CAAA;AAED,MAAM,WAAW,uBAAwB,SAAQ,WAAW;IAC1D,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAyBhE,CAAA"}
@@ -1,4 +1,6 @@
1
1
  export * from './Account.tsx';
2
2
  export * from './Avatar.tsx';
3
3
  export * from './blockies.ts';
4
+ export * from './rings.ts';
5
+ export * from './RingsAvatar.tsx';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/blockies/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/blockies/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Self-contained port of the DiceBear "rings" avatar style.
3
+ *
4
+ * Path data and palette: https://github.com/dicebear/dicebear (@dicebear/rings, CC0 1.0)
5
+ * Selection/PRNG logic: @dicebear/core v9 (MIT) — the xorshift PRNG and pick/integer
6
+ * helpers are reproduced verbatim so a given seed yields the same rings as dicebear.com.
7
+ *
8
+ * Unlike blockies.ts (which renders to a <canvas>) this returns an SVG string, so it
9
+ * works in any build target (browser/node/neutral) with no DOM dependency.
10
+ */
11
+ export type RingVariant = 'eighth' | 'full' | 'half' | 'quarter';
12
+ /** Default ring color palette (hex, no leading #) from the DiceBear rings schema. */
13
+ export declare const DEFAULT_RING_COLORS: readonly string[];
14
+ export interface RingsOptions {
15
+ /** Solid background fill (hex, no leading #). Omit for transparent. */
16
+ backgroundColor?: string;
17
+ /** Corner radius as a percentage 0–50 (50 = full circle clip). Defaults to 0. */
18
+ radius: number;
19
+ ringColor: readonly string[];
20
+ ringFive: readonly RingVariant[];
21
+ ringFiveRotation: readonly number[];
22
+ ringFour: readonly RingVariant[];
23
+ ringFourRotation: readonly number[];
24
+ ringOne: readonly RingVariant[];
25
+ ringOneRotation: readonly number[];
26
+ ringRotation: readonly number[];
27
+ ringThree: readonly RingVariant[];
28
+ ringThreeRotation: readonly number[];
29
+ ringTwo: readonly RingVariant[];
30
+ ringTwoRotation: readonly number[];
31
+ /** Deterministic seed string the avatar is derived from. */
32
+ seed: string;
33
+ /** Rendered SVG width/height in pixels. Omit to keep the avatar fluid. */
34
+ size?: number;
35
+ }
36
+ export declare function buildRingsOptions(opts: Partial<RingsOptions>): RingsOptions;
37
+ /** Renders a DiceBear "rings" avatar as an SVG string. */
38
+ export declare function createRingsSvg(opts: Partial<RingsOptions>): string;
39
+ /** Renders a DiceBear "rings" avatar as a `data:` URI suitable for an `<img src>`. */
40
+ export declare function createRingsDataUri(opts: Partial<RingsOptions>): string;
41
+ //# sourceMappingURL=rings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rings.d.ts","sourceRoot":"","sources":["../../../../src/components/blockies/rings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AA6ChE,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAiBhD,CAAA;AAID,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;IAChC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;IAChC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,SAAS,EAAE,SAAS,WAAW,EAAE,CAAA;IACjC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAmB3E;AA+BD,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAwClE;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAEtE"}
@@ -167,13 +167,221 @@ var BlockiesAvatarAddressApproved = ({
167
167
  }
168
168
  );
169
169
  };
170
+
171
+ // src/components/blockies/rings.ts
172
+ var MIN = -2147483648;
173
+ var MAX = 2147483647;
174
+ function xorshift(value) {
175
+ value ^= value << 13;
176
+ value ^= value >> 17;
177
+ value ^= value << 5;
178
+ return value;
179
+ }
180
+ function hashSeed(seed) {
181
+ let hash = 0;
182
+ for (let i = 0; i < seed.length; i++) {
183
+ hash = (hash << 5) - hash + seed.codePointAt(i);
184
+ hash = xorshift(hash);
185
+ }
186
+ return hash;
187
+ }
188
+ function createPrng(seed) {
189
+ let value = hashSeed(seed) || 1;
190
+ const next = () => value = xorshift(value);
191
+ const integer = (min, max) => Math.floor((next() - MIN) / (MAX - MIN) * (max + 1 - min) + min);
192
+ return {
193
+ next,
194
+ integer,
195
+ pick(arr, fallback) {
196
+ if (arr.length === 0) {
197
+ next();
198
+ return fallback;
199
+ }
200
+ return arr[integer(0, arr.length - 1)] ?? fallback;
201
+ }
202
+ };
203
+ }
204
+ function escapeXml(content) {
205
+ return content.replaceAll("&", "&amp;").replaceAll("'", "&apos;").replaceAll('"', "&quot;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
206
+ }
207
+ function convertColor(color) {
208
+ return color === "transparent" ? color : `#${color}`;
209
+ }
210
+ var ringOne = {
211
+ half: (color) => `<path d="M90 50h10c0-27.614-22.386-50-50-50S0 22.386 0 50h10c0-22.091 17.909-40 40-40s40 17.909 40 40Z" fill="${escapeXml(color)}"/>`,
212
+ quarter: (color) => `<path d="M50 10V0C22.386 0 0 22.386 0 50h10c0-22.091 17.909-40 40-40Z" fill="${escapeXml(color)}"/>`,
213
+ eighth: (color) => `<path d="M21.716 21.716C14.477 28.954 10 38.954 10 50H0c0-13.807 5.596-26.307 14.645-35.355l7.07 7.07Z" fill="${escapeXml(color)}"/>`,
214
+ full: (color) => `<circle cx="50" cy="50" r="45" stroke="${escapeXml(color)}" stroke-width="10"/>`
215
+ };
216
+ var ringTwo = {
217
+ eighth: (color) => `<path d="M20 50c0-8.284 3.358-15.784 8.787-21.213l-7.071-7.071C14.477 28.954 10 38.954 10 50h10Z" fill="${escapeXml(color)}"/>`,
218
+ quarter: (color) => `<path d="M50 10c-22.091 0-40 17.909-40 40h10c0-16.569 13.431-30 30-30V10Z" fill="${escapeXml(color)}"/>`,
219
+ half: (color) => `<path d="M90 50c0-22.091-17.909-40-40-40S10 27.909 10 50h10c0-16.569 13.431-30 30-30 16.569 0 30 13.431 30 30h10Z" fill="${escapeXml(color)}"/>`,
220
+ full: (color) => `<circle cx="50" cy="50" r="35" stroke="${escapeXml(color)}" stroke-width="10"/>`
221
+ };
222
+ var ringThree = {
223
+ eighth: (color) => `<path d="M30 50a19.937 19.937 0 0 1 5.858-14.142l-7.071-7.071C23.357 34.216 20 41.716 20 50h10Z" fill="${escapeXml(color)}"/>`,
224
+ quarter: (color) => `<path d="M50 20c-16.569 0-30 13.431-30 30h10c0-11.046 8.954-20 20-20V20Z" fill="${escapeXml(color)}"/>`,
225
+ half: (color) => `<path d="M80 50c0-16.569-13.431-30-30-30-16.569 0-30 13.431-30 30h10c0-11.046 8.954-20 20-20s20 8.954 20 20h10Z" fill="${escapeXml(color)}"/>`,
226
+ full: (color) => `<circle cx="50" cy="50" r="25" stroke="${escapeXml(color)}" stroke-width="10"/>`
227
+ };
228
+ var ringFour = {
229
+ eighth: (color) => `<path d="M40 50a9.97 9.97 0 0 1 2.929-7.071l-7.071-7.071A19.937 19.937 0 0 0 30 50h10Z" fill="${escapeXml(color)}"/>`,
230
+ quarter: (color) => `<path d="M50 30c-11.046 0-20 8.954-20 20h10c0-5.523 4.477-10 10-10V30Z" fill="${escapeXml(color)}"/>`,
231
+ half: (color) => `<path d="M70 50c0-11.046-8.954-20-20-20s-20 8.954-20 20h10c0-5.523 4.477-10 10-10s10 4.477 10 10h10Z" fill="${escapeXml(color)}"/>`,
232
+ full: (color) => `<circle cx="50" cy="50" r="15" stroke="${escapeXml(color)}" stroke-width="10"/>`
233
+ };
234
+ var ringFive = {
235
+ eighth: (color) => `<path d="m42.929 42.929 7.07 7.07H40a9.97 9.97 0 0 1 2.93-7.07Z" fill="${escapeXml(color)}"/>`,
236
+ quarter: (color) => `<path d="M50 40v10H40c0-5.523 4.477-10 10-10Z" fill="${escapeXml(color)}"/>`,
237
+ half: (color) => `<path d="M60 50c0-5.523-4.477-10-10-10s-10 4.477-10 10h20Z" fill="${escapeXml(color)}"/>`,
238
+ full: (color) => `<circle cx="50" cy="50" r="10" fill="${escapeXml(color)}"/>`
239
+ };
240
+ var FIXED_CIRCLES = '<circle cx="50" cy="50" r="45" stroke="#fff" stroke-opacity=".25" stroke-width="10" style="mix-blend-mode:lighten"/><circle cx="50" cy="50" r="25" stroke="#fff" stroke-opacity=".25" stroke-width="10" style="mix-blend-mode:lighten"/><circle cx="50" cy="50" r="10" fill="#fff" fill-opacity=".25" style="mix-blend-mode:lighten"/>';
241
+ var DEFAULT_RING_COLORS = [
242
+ "ffd54f",
243
+ "64b5f6",
244
+ "4dd0e1",
245
+ "ff8a65",
246
+ "9575cd",
247
+ "81c784",
248
+ "7986cb",
249
+ "4fc3f7",
250
+ "aed581",
251
+ "dce775",
252
+ "ffb74d",
253
+ "f06292",
254
+ "ba68c8",
255
+ "e57373",
256
+ "4db6ac",
257
+ "fff176"
258
+ ];
259
+ var ROTATION = [-180, 180];
260
+ function buildRingsOptions(opts) {
261
+ return {
262
+ seed: opts.seed ?? Math.floor(Math.random() * 10 ** 16).toString(16),
263
+ size: opts.size,
264
+ radius: opts.radius ?? 0,
265
+ backgroundColor: opts.backgroundColor,
266
+ ringColor: opts.ringColor ?? DEFAULT_RING_COLORS,
267
+ ringOne: opts.ringOne ?? ["half", "quarter"],
268
+ ringTwo: opts.ringTwo ?? ["quarter", "half"],
269
+ ringThree: opts.ringThree ?? ["quarter", "half"],
270
+ ringFour: opts.ringFour ?? ["quarter", "half"],
271
+ ringFive: opts.ringFive ?? ["full"],
272
+ ringRotation: opts.ringRotation ?? ROTATION,
273
+ ringOneRotation: opts.ringOneRotation ?? ROTATION,
274
+ ringTwoRotation: opts.ringTwoRotation ?? ROTATION,
275
+ ringThreeRotation: opts.ringThreeRotation ?? ROTATION,
276
+ ringFourRotation: opts.ringFourRotation ?? ROTATION,
277
+ ringFiveRotation: opts.ringFiveRotation ?? ROTATION
278
+ };
279
+ }
280
+ function pickLayer(prng, values, rotationRange) {
281
+ const variant = prng.pick(values);
282
+ const rotation = prng.integer(Math.min(...rotationRange), Math.max(...rotationRange));
283
+ prng.integer(0, 0);
284
+ prng.integer(0, 0);
285
+ return { variant, rotation };
286
+ }
287
+ function rotateGroup(markup, rotation) {
288
+ return rotation ? `<g transform="translate(0, 0) rotate(${rotation} 50 50)">${markup}</g>` : markup;
289
+ }
290
+ function mirror(markup) {
291
+ return `<g transform="matrix(1 0 0 -1 0 100)">${markup}</g>`;
292
+ }
293
+ function renderLayer(shapes, layer, color) {
294
+ return layer.variant ? rotateGroup(shapes[layer.variant](color), layer.rotation) : "";
295
+ }
296
+ function createRingsSvg(opts) {
297
+ const options = buildRingsOptions(opts);
298
+ const prng = createPrng(options.seed);
299
+ const ringPick = pickLayer(prng, ["container"], options.ringRotation);
300
+ const one = pickLayer(prng, options.ringOne, options.ringOneRotation);
301
+ const two = pickLayer(prng, options.ringTwo, options.ringTwoRotation);
302
+ const three = pickLayer(prng, options.ringThree, options.ringThreeRotation);
303
+ const four = pickLayer(prng, options.ringFour, options.ringFourRotation);
304
+ const five = pickLayer(prng, options.ringFive, options.ringFiveRotation);
305
+ const color = convertColor(prng.pick(options.ringColor, "transparent") ?? "transparent");
306
+ const oneStr = renderLayer(ringOne, one, color);
307
+ const twoStr = renderLayer(ringTwo, two, color);
308
+ const threeStr = renderLayer(ringThree, three, color);
309
+ const fourStr = renderLayer(ringFour, four, color);
310
+ const fiveStr = renderLayer(ringFive, five, color);
311
+ const container = oneStr + twoStr + threeStr + fourStr + fiveStr + mirror(oneStr) + mirror(twoStr) + mirror(threeStr) + mirror(fourStr) + mirror(fiveStr) + FIXED_CIRCLES;
312
+ let body = rotateGroup(container, ringPick.rotation);
313
+ if (options.backgroundColor) {
314
+ body = `<rect fill="${convertColor(options.backgroundColor)}" width="100" height="100" x="0" y="0" />${body}`;
315
+ }
316
+ if (options.radius) {
317
+ const maskId = `rings-mask-${(hashSeed(options.seed) >>> 0).toString(16)}`;
318
+ body = `<mask id="${maskId}"><rect width="100" height="100" rx="${options.radius}" ry="${options.radius}" x="0" y="0" fill="#fff" /></mask><g mask="url(#${maskId})">${body}</g>`;
319
+ }
320
+ const sizeAttrs = options.size === void 0 ? "" : ` width="${options.size}" height="${options.size}"`;
321
+ return `<svg xmlns="http://www.w3.org/2000/svg"${sizeAttrs} viewBox="0 0 100 100" fill="none" shape-rendering="crispEdges">${body}</svg>`;
322
+ }
323
+ function createRingsDataUri(opts) {
324
+ return `data:image/svg+xml;utf8,${encodeURIComponent(createRingsSvg(opts))}`;
325
+ }
326
+
327
+ // src/components/blockies/RingsAvatar.tsx
328
+ import { Avatar as Avatar2, useTheme as useTheme2 } from "@mui/material";
329
+ import { grey as grey2 } from "@mui/material/colors";
330
+ import { alphaCss as alphaCss2 } from "@xylabs/react-theme";
331
+ import { useMemo as useMemo3 } from "react";
332
+ import { jsx as jsx3 } from "react/jsx-runtime";
333
+ var RingsAvatar = ({ ringsOptions, ...props }) => {
334
+ const img = useMemo3(() => {
335
+ if (ringsOptions?.seed !== void 0) {
336
+ return createRingsDataUri(ringsOptions);
337
+ }
338
+ }, [ringsOptions]);
339
+ return /* @__PURE__ */ jsx3(Avatar2, { component: "span", src: img, ...props });
340
+ };
341
+ var RingsAvatarAddress = ({
342
+ seed,
343
+ borderSizeFactor = 0.0833,
344
+ size = 24,
345
+ sx,
346
+ ...props
347
+ }) => {
348
+ const theme = useTheme2();
349
+ const options = useMemo3(() => {
350
+ if (seed !== void 0) {
351
+ return {
352
+ seed,
353
+ size: size * 2,
354
+ radius: 50
355
+ };
356
+ }
357
+ }, [seed, size]);
358
+ return /* @__PURE__ */ jsx3(
359
+ RingsAvatar,
360
+ {
361
+ ringsOptions: options,
362
+ sx: {
363
+ width: size,
364
+ height: size,
365
+ border: `${Math.ceil(size * borderSizeFactor)}px solid ${alphaCss2(theme.vars?.palette.text.primary ?? grey2[500], 0.8)}`,
366
+ ...sx
367
+ },
368
+ ...props
369
+ }
370
+ );
371
+ };
170
372
  export {
171
373
  BlockiesAccount,
172
374
  BlockiesAvatar,
173
375
  BlockiesAvatarAddress,
174
376
  BlockiesAvatarAddressApproved,
377
+ DEFAULT_RING_COLORS,
378
+ RingsAvatar,
379
+ RingsAvatarAddress,
175
380
  buildOpts,
381
+ buildRingsOptions,
176
382
  createIcon,
383
+ createRingsDataUri,
384
+ createRingsSvg,
177
385
  renderIcon
178
386
  };
179
387
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/components/blockies/Account.tsx", "../../src/components/blockies/blockies.ts", "../../src/components/blockies/Avatar.tsx"],
4
- "sourcesContent": ["import React, { useMemo } from 'react'\n\nimport type { BlockiesOptions } from './blockies.ts'\nimport { createIcon } from './blockies.ts'\n\nexport interface BlockiesAccountProps extends Partial<BlockiesOptions> {}\n\nexport const BlockiesAccount: React.FC<BlockiesAccountProps> = ({ ...options }) => {\n const img = useMemo(() => {\n if (options.seed !== undefined) {\n return createIcon(options).toDataURL()\n }\n }, [options])\n\n return <img src={img} />\n}\n", "/**\n * inspired by https://github.com/download13/blockies/blob/master/src/blockies.mjs\n */\n\n// The random number is a js implementation of the Xorshift PRNG\nconst randomSeed: number[] = Array.from({ length: 4 }) // Xorshift: [x, y, z, w] 32 bit values\n\nfunction seedRandom(seed: string) {\n for (let i = 0; i < randomSeed.length; i++) {\n randomSeed[i] = 0\n }\n for (let i = 0; i < seed.length; i++) {\n randomSeed[i % 4] = ((randomSeed[i % 4] << 5) - randomSeed[i % 4]) + seed.codePointAt(i)!\n }\n}\n\nfunction rand() {\n // based on Java's String.hashCode(), expanded to 4 32bit values\n const t = randomSeed[0] ^ (randomSeed[0] << 11)\n\n randomSeed[0] = randomSeed[1]\n randomSeed[1] = randomSeed[2]\n randomSeed[2] = randomSeed[3]\n randomSeed[3] = (randomSeed[3] ^ (randomSeed[3] >> 19) ^ t ^ (t >> 8))\n\n return (randomSeed[3] >>> 0) / ((1 << 31) >>> 0)\n}\n\nfunction createColor() {\n // saturation is the whole color spectrum\n const h = Math.floor(rand() * 360)\n // saturation goes from 40 to 100, it avoids greyish colors\n const s = ((rand() * 60) + 40) + '%'\n // lightness can be anything from 0 to 100, but probabilities are a bell curve around 50%\n const l = ((rand() + rand() + rand() + rand()) * 25) + '%'\n\n return 'hsl(' + h + ',' + s + ',' + l + ')'\n}\n\nfunction createImageData(size: number) {\n const width = size // Only support square icons for now\n const height = size\n\n const dataWidth = Math.ceil(width / 2)\n const mirrorWidth = width - dataWidth\n\n const data = []\n for (let y = 0; y < height; y++) {\n let row = []\n for (let x = 0; x < dataWidth; x++) {\n // this makes foreground and background color to have a 43% (1/2.3) probability\n // spot color has 13% chance\n row[x] = Math.floor(rand() * 2.3)\n }\n const r = row.slice(0, mirrorWidth)\n r.reverse()\n row = [...row, ...r]\n\n for (const element of row) {\n data.push(element)\n }\n }\n\n return data\n}\n\nexport interface BlockiesOptions {\n bgcolor: string\n color: string\n scale: number\n seed: string\n size: number\n spotcolor: string\n}\n\nexport function buildOpts(opts: Partial<BlockiesOptions>): BlockiesOptions {\n const newOpts = {} as BlockiesOptions\n\n newOpts.seed = opts.seed ?? Math.floor((Math.random() * Math.pow(10, 16))).toString(16)\n\n seedRandom(newOpts.seed)\n\n newOpts.size = opts.size ?? 8\n newOpts.scale = opts.scale ?? 4\n newOpts.color = opts.color ?? createColor()\n newOpts.bgcolor = opts.bgcolor ?? createColor()\n newOpts.spotcolor = opts.spotcolor ?? createColor()\n\n return newOpts\n}\n\nexport function renderIcon(opts: Partial<BlockiesOptions>, canvas: HTMLCanvasElement) {\n const updatedOptions = buildOpts(opts ?? {})\n const imageData = createImageData(updatedOptions.size)\n const width = Math.sqrt(imageData.length)\n\n canvas.width = canvas.height = updatedOptions.size * updatedOptions.scale\n\n const cc = canvas.getContext('2d')\n if (cc === null) throw new Error('unable to get 2d context')\n cc.fillStyle = updatedOptions.bgcolor\n cc.fillRect(0, 0, canvas.width, canvas.height)\n cc.fillStyle = updatedOptions.color\n\n for (const [i, imageDatum] of imageData.entries()) {\n // if data is 0, leave the background\n if (imageDatum > 0) {\n const row = Math.floor(i / width)\n const col = i % width\n\n // if data is 2, choose spot color, if 1 choose foreground\n cc.fillStyle = (imageDatum == 1) ? updatedOptions.color : updatedOptions.spotcolor\n\n cc.fillRect(col * updatedOptions.scale, row * updatedOptions.scale, updatedOptions.scale, updatedOptions.scale)\n }\n }\n\n return canvas\n}\n\nexport function createIcon(opts: Partial<BlockiesOptions>) {\n const canvas = document.createElement('canvas')\n\n renderIcon(opts, canvas)\n\n return canvas\n}\n", "import { Circle } from '@mui/icons-material'\nimport type { AvatarProps, BadgeProps } from '@mui/material'\nimport {\n Avatar, Badge, useTheme,\n} from '@mui/material'\nimport { grey } from '@mui/material/colors'\nimport { alphaCss } from '@xylabs/react-theme'\nimport React, { useMemo } from 'react'\n\nimport type { BlockiesOptions } from './blockies.ts'\nimport { createIcon } from './blockies.ts'\n\nexport interface BlockiesAvatarProps extends AvatarProps {\n blockiesOptions?: Partial<BlockiesOptions>\n}\n\nexport const BlockiesAvatar: React.FC<BlockiesAvatarProps> = ({ blockiesOptions, ...props }) => {\n const img = useMemo(() => {\n if (blockiesOptions?.seed !== undefined) {\n return createIcon(blockiesOptions).toDataURL()\n }\n }, [blockiesOptions])\n\n return (\n <Avatar component=\"span\" src={img} {...props} />\n )\n}\n\nexport interface BlockiesAvatarAddressProps extends AvatarProps {\n /** The Address to display */\n address?: string\n /** Size of the border is the size prop * borderSizeFactor and rounded up */\n borderSizeFactor?: number\n /** The size of the avatar in pixels, defaults to 24 */\n size?: number\n}\n\nexport const BlockiesAvatarAddress: React.FC<BlockiesAvatarAddressProps> = ({\n address, borderSizeFactor = 0.0833, size = 24, sx, ...props\n}) => {\n const theme = useTheme()\n const options = useMemo(() => {\n if (address !== undefined) {\n return { seed: address }\n }\n }, [address])\n\n return (\n <BlockiesAvatar\n blockiesOptions={options}\n sx={{\n width: size,\n height: size,\n border: `${Math.ceil(size * borderSizeFactor)}px solid ${alphaCss(theme.vars?.palette.text.primary ?? grey[500], 0.8)}`,\n ...sx,\n }}\n {...props}\n />\n )\n}\n\nexport interface BlockiesAvatarAddressApprovedProps extends BlockiesAvatarAddressProps {\n /** Whether to show the approved badge */\n approved?: boolean\n badgeVariant?: BadgeProps['variant']\n}\n\nexport const BlockiesAvatarAddressApproved: React.FC<BlockiesAvatarAddressApprovedProps> = ({\n approved, badgeVariant, ...props\n}) => {\n const sx = badgeVariant === 'dot'\n ? {}\n : {\n bgcolor: 'white', borderRadius: 12, fontSize: '0.83333rem',\n }\n const dotPlacement = badgeVariant === 'dot' ? 3 : 5\n return (\n <Badge\n color={badgeVariant === 'dot' ? 'success' : 'default'}\n variant={badgeVariant}\n invisible={!approved}\n badgeContent={approved ? <Circle color=\"success\" sx={sx} /> : ''}\n sx={{\n '& .MuiBadge-badge': {\n top: dotPlacement,\n right: dotPlacement,\n },\n }}\n >\n <BlockiesAvatarAddress {...props} />\n </Badge>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["useMemo", "jsx", "useMemo"]
3
+ "sources": ["../../src/components/blockies/Account.tsx", "../../src/components/blockies/blockies.ts", "../../src/components/blockies/Avatar.tsx", "../../src/components/blockies/rings.ts", "../../src/components/blockies/RingsAvatar.tsx"],
4
+ "sourcesContent": ["import React, { useMemo } from 'react'\n\nimport type { BlockiesOptions } from './blockies.ts'\nimport { createIcon } from './blockies.ts'\n\nexport interface BlockiesAccountProps extends Partial<BlockiesOptions> {}\n\nexport const BlockiesAccount: React.FC<BlockiesAccountProps> = ({ ...options }) => {\n const img = useMemo(() => {\n if (options.seed !== undefined) {\n return createIcon(options).toDataURL()\n }\n }, [options])\n\n return <img src={img} />\n}\n", "/**\n * inspired by https://github.com/download13/blockies/blob/master/src/blockies.mjs\n */\n\n// The random number is a js implementation of the Xorshift PRNG\nconst randomSeed: number[] = Array.from({ length: 4 }) // Xorshift: [x, y, z, w] 32 bit values\n\nfunction seedRandom(seed: string) {\n for (let i = 0; i < randomSeed.length; i++) {\n randomSeed[i] = 0\n }\n for (let i = 0; i < seed.length; i++) {\n randomSeed[i % 4] = ((randomSeed[i % 4] << 5) - randomSeed[i % 4]) + seed.codePointAt(i)!\n }\n}\n\nfunction rand() {\n // based on Java's String.hashCode(), expanded to 4 32bit values\n const t = randomSeed[0] ^ (randomSeed[0] << 11)\n\n randomSeed[0] = randomSeed[1]\n randomSeed[1] = randomSeed[2]\n randomSeed[2] = randomSeed[3]\n randomSeed[3] = (randomSeed[3] ^ (randomSeed[3] >> 19) ^ t ^ (t >> 8))\n\n return (randomSeed[3] >>> 0) / ((1 << 31) >>> 0)\n}\n\nfunction createColor() {\n // saturation is the whole color spectrum\n const h = Math.floor(rand() * 360)\n // saturation goes from 40 to 100, it avoids greyish colors\n const s = ((rand() * 60) + 40) + '%'\n // lightness can be anything from 0 to 100, but probabilities are a bell curve around 50%\n const l = ((rand() + rand() + rand() + rand()) * 25) + '%'\n\n return 'hsl(' + h + ',' + s + ',' + l + ')'\n}\n\nfunction createImageData(size: number) {\n const width = size // Only support square icons for now\n const height = size\n\n const dataWidth = Math.ceil(width / 2)\n const mirrorWidth = width - dataWidth\n\n const data = []\n for (let y = 0; y < height; y++) {\n let row = []\n for (let x = 0; x < dataWidth; x++) {\n // this makes foreground and background color to have a 43% (1/2.3) probability\n // spot color has 13% chance\n row[x] = Math.floor(rand() * 2.3)\n }\n const r = row.slice(0, mirrorWidth)\n r.reverse()\n row = [...row, ...r]\n\n for (const element of row) {\n data.push(element)\n }\n }\n\n return data\n}\n\nexport interface BlockiesOptions {\n bgcolor: string\n color: string\n scale: number\n seed: string\n size: number\n spotcolor: string\n}\n\nexport function buildOpts(opts: Partial<BlockiesOptions>): BlockiesOptions {\n const newOpts = {} as BlockiesOptions\n\n newOpts.seed = opts.seed ?? Math.floor((Math.random() * Math.pow(10, 16))).toString(16)\n\n seedRandom(newOpts.seed)\n\n newOpts.size = opts.size ?? 8\n newOpts.scale = opts.scale ?? 4\n newOpts.color = opts.color ?? createColor()\n newOpts.bgcolor = opts.bgcolor ?? createColor()\n newOpts.spotcolor = opts.spotcolor ?? createColor()\n\n return newOpts\n}\n\nexport function renderIcon(opts: Partial<BlockiesOptions>, canvas: HTMLCanvasElement) {\n const updatedOptions = buildOpts(opts ?? {})\n const imageData = createImageData(updatedOptions.size)\n const width = Math.sqrt(imageData.length)\n\n canvas.width = canvas.height = updatedOptions.size * updatedOptions.scale\n\n const cc = canvas.getContext('2d')\n if (cc === null) throw new Error('unable to get 2d context')\n cc.fillStyle = updatedOptions.bgcolor\n cc.fillRect(0, 0, canvas.width, canvas.height)\n cc.fillStyle = updatedOptions.color\n\n for (const [i, imageDatum] of imageData.entries()) {\n // if data is 0, leave the background\n if (imageDatum > 0) {\n const row = Math.floor(i / width)\n const col = i % width\n\n // if data is 2, choose spot color, if 1 choose foreground\n cc.fillStyle = (imageDatum == 1) ? updatedOptions.color : updatedOptions.spotcolor\n\n cc.fillRect(col * updatedOptions.scale, row * updatedOptions.scale, updatedOptions.scale, updatedOptions.scale)\n }\n }\n\n return canvas\n}\n\nexport function createIcon(opts: Partial<BlockiesOptions>) {\n const canvas = document.createElement('canvas')\n\n renderIcon(opts, canvas)\n\n return canvas\n}\n", "import { Circle } from '@mui/icons-material'\nimport type { AvatarProps, BadgeProps } from '@mui/material'\nimport {\n Avatar, Badge, useTheme,\n} from '@mui/material'\nimport { grey } from '@mui/material/colors'\nimport { alphaCss } from '@xylabs/react-theme'\nimport React, { useMemo } from 'react'\n\nimport type { BlockiesOptions } from './blockies.ts'\nimport { createIcon } from './blockies.ts'\n\nexport interface BlockiesAvatarProps extends AvatarProps {\n blockiesOptions?: Partial<BlockiesOptions>\n}\n\nexport const BlockiesAvatar: React.FC<BlockiesAvatarProps> = ({ blockiesOptions, ...props }) => {\n const img = useMemo(() => {\n if (blockiesOptions?.seed !== undefined) {\n return createIcon(blockiesOptions).toDataURL()\n }\n }, [blockiesOptions])\n\n return (\n <Avatar component=\"span\" src={img} {...props} />\n )\n}\n\nexport interface BlockiesAvatarAddressProps extends AvatarProps {\n /** The Address to display */\n address?: string\n /** Size of the border is the size prop * borderSizeFactor and rounded up */\n borderSizeFactor?: number\n /** The size of the avatar in pixels, defaults to 24 */\n size?: number\n}\n\nexport const BlockiesAvatarAddress: React.FC<BlockiesAvatarAddressProps> = ({\n address, borderSizeFactor = 0.0833, size = 24, sx, ...props\n}) => {\n const theme = useTheme()\n const options = useMemo(() => {\n if (address !== undefined) {\n return { seed: address }\n }\n }, [address])\n\n return (\n <BlockiesAvatar\n blockiesOptions={options}\n sx={{\n width: size,\n height: size,\n border: `${Math.ceil(size * borderSizeFactor)}px solid ${alphaCss(theme.vars?.palette.text.primary ?? grey[500], 0.8)}`,\n ...sx,\n }}\n {...props}\n />\n )\n}\n\nexport interface BlockiesAvatarAddressApprovedProps extends BlockiesAvatarAddressProps {\n /** Whether to show the approved badge */\n approved?: boolean\n badgeVariant?: BadgeProps['variant']\n}\n\nexport const BlockiesAvatarAddressApproved: React.FC<BlockiesAvatarAddressApprovedProps> = ({\n approved, badgeVariant, ...props\n}) => {\n const sx = badgeVariant === 'dot'\n ? {}\n : {\n bgcolor: 'white', borderRadius: 12, fontSize: '0.83333rem',\n }\n const dotPlacement = badgeVariant === 'dot' ? 3 : 5\n return (\n <Badge\n color={badgeVariant === 'dot' ? 'success' : 'default'}\n variant={badgeVariant}\n invisible={!approved}\n badgeContent={approved ? <Circle color=\"success\" sx={sx} /> : ''}\n sx={{\n '& .MuiBadge-badge': {\n top: dotPlacement,\n right: dotPlacement,\n },\n }}\n >\n <BlockiesAvatarAddress {...props} />\n </Badge>\n )\n}\n", "/**\n * Self-contained port of the DiceBear \"rings\" avatar style.\n *\n * Path data and palette: https://github.com/dicebear/dicebear (@dicebear/rings, CC0 1.0)\n * Selection/PRNG logic: @dicebear/core v9 (MIT) \u2014 the xorshift PRNG and pick/integer\n * helpers are reproduced verbatim so a given seed yields the same rings as dicebear.com.\n *\n * Unlike blockies.ts (which renders to a <canvas>) this returns an SVG string, so it\n * works in any build target (browser/node/neutral) with no DOM dependency.\n */\n\n// --- (ported from @dicebear/core v9 utils/prng.ts) ---------------------\n\nconst MIN = -2_147_483_648\nconst MAX = 2_147_483_647\n\nfunction xorshift(value: number): number {\n value ^= value << 13\n value ^= value >> 17\n value ^= value << 5\n return value\n}\n\nfunction hashSeed(seed: string): number {\n let hash = 0\n for (let i = 0; i < seed.length; i++) {\n // No explicit 32-bit coercion needed: xorshift's `<< 13` applies ToInt32 to its input.\n hash = (hash << 5) - hash + seed.codePointAt(i)!\n hash = xorshift(hash)\n }\n return hash\n}\n\ninterface Prng {\n integer: (min: number, max: number) => number\n next: () => number\n pick: <T>(arr: readonly T[], fallback?: T) => T | undefined\n}\n\nfunction createPrng(seed: string): Prng {\n let value = hashSeed(seed) || 1\n const next = (): number => (value = xorshift(value))\n const integer = (min: number, max: number): number =>\n Math.floor(((next() - MIN) / (MAX - MIN)) * (max + 1 - min) + min)\n return {\n next,\n integer,\n pick<T>(arr: readonly T[], fallback?: T): T | undefined {\n if (arr.length === 0) {\n next()\n return fallback\n }\n return arr[integer(0, arr.length - 1)] ?? fallback\n },\n }\n}\n\n// --- helpers (ported from @dicebear/core / @dicebear/rings) ------------------\n\nfunction escapeXml(content: string): string {\n return content\n .replaceAll('&', '&amp;')\n .replaceAll('\\'', '&apos;')\n .replaceAll('\"', '&quot;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n}\n\nfunction convertColor(color: string): string {\n return color === 'transparent' ? color : `#${color}`\n}\n\n// --- ring component path data (from @dicebear/rings components/*) ------------\n\nexport type RingVariant = 'eighth' | 'full' | 'half' | 'quarter'\n\ntype RingShapes = Record<RingVariant, (color: string) => string>\n\nconst ringOne: RingShapes = {\n half: color => `<path d=\"M90 50h10c0-27.614-22.386-50-50-50S0 22.386 0 50h10c0-22.091 17.909-40 40-40s40 17.909 40 40Z\" fill=\"${escapeXml(color)}\"/>`,\n quarter: color => `<path d=\"M50 10V0C22.386 0 0 22.386 0 50h10c0-22.091 17.909-40 40-40Z\" fill=\"${escapeXml(color)}\"/>`,\n eighth: color => `<path d=\"M21.716 21.716C14.477 28.954 10 38.954 10 50H0c0-13.807 5.596-26.307 14.645-35.355l7.07 7.07Z\" fill=\"${escapeXml(color)}\"/>`,\n full: color => `<circle cx=\"50\" cy=\"50\" r=\"45\" stroke=\"${escapeXml(color)}\" stroke-width=\"10\"/>`,\n}\n\nconst ringTwo: RingShapes = {\n eighth: color => `<path d=\"M20 50c0-8.284 3.358-15.784 8.787-21.213l-7.071-7.071C14.477 28.954 10 38.954 10 50h10Z\" fill=\"${escapeXml(color)}\"/>`,\n quarter: color => `<path d=\"M50 10c-22.091 0-40 17.909-40 40h10c0-16.569 13.431-30 30-30V10Z\" fill=\"${escapeXml(color)}\"/>`,\n half: color => `<path d=\"M90 50c0-22.091-17.909-40-40-40S10 27.909 10 50h10c0-16.569 13.431-30 30-30 16.569 0 30 13.431 30 30h10Z\" fill=\"${escapeXml(color)}\"/>`,\n full: color => `<circle cx=\"50\" cy=\"50\" r=\"35\" stroke=\"${escapeXml(color)}\" stroke-width=\"10\"/>`,\n}\n\nconst ringThree: RingShapes = {\n eighth: color => `<path d=\"M30 50a19.937 19.937 0 0 1 5.858-14.142l-7.071-7.071C23.357 34.216 20 41.716 20 50h10Z\" fill=\"${escapeXml(color)}\"/>`,\n quarter: color => `<path d=\"M50 20c-16.569 0-30 13.431-30 30h10c0-11.046 8.954-20 20-20V20Z\" fill=\"${escapeXml(color)}\"/>`,\n half: color => `<path d=\"M80 50c0-16.569-13.431-30-30-30-16.569 0-30 13.431-30 30h10c0-11.046 8.954-20 20-20s20 8.954 20 20h10Z\" fill=\"${escapeXml(color)}\"/>`,\n full: color => `<circle cx=\"50\" cy=\"50\" r=\"25\" stroke=\"${escapeXml(color)}\" stroke-width=\"10\"/>`,\n}\n\nconst ringFour: RingShapes = {\n eighth: color => `<path d=\"M40 50a9.97 9.97 0 0 1 2.929-7.071l-7.071-7.071A19.937 19.937 0 0 0 30 50h10Z\" fill=\"${escapeXml(color)}\"/>`,\n quarter: color => `<path d=\"M50 30c-11.046 0-20 8.954-20 20h10c0-5.523 4.477-10 10-10V30Z\" fill=\"${escapeXml(color)}\"/>`,\n half: color => `<path d=\"M70 50c0-11.046-8.954-20-20-20s-20 8.954-20 20h10c0-5.523 4.477-10 10-10s10 4.477 10 10h10Z\" fill=\"${escapeXml(color)}\"/>`,\n full: color => `<circle cx=\"50\" cy=\"50\" r=\"15\" stroke=\"${escapeXml(color)}\" stroke-width=\"10\"/>`,\n}\n\nconst ringFive: RingShapes = {\n eighth: color => `<path d=\"m42.929 42.929 7.07 7.07H40a9.97 9.97 0 0 1 2.93-7.07Z\" fill=\"${escapeXml(color)}\"/>`,\n quarter: color => `<path d=\"M50 40v10H40c0-5.523 4.477-10 10-10Z\" fill=\"${escapeXml(color)}\"/>`,\n half: color => `<path d=\"M60 50c0-5.523-4.477-10-10-10s-10 4.477-10 10h20Z\" fill=\"${escapeXml(color)}\"/>`,\n full: color => `<circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"${escapeXml(color)}\"/>`,\n}\n\n// Fixed concentric highlights drawn on top of every rings avatar.\nconst FIXED_CIRCLES\n = '<circle cx=\"50\" cy=\"50\" r=\"45\" stroke=\"#fff\" stroke-opacity=\".25\" stroke-width=\"10\" style=\"mix-blend-mode:lighten\"/>'\n + '<circle cx=\"50\" cy=\"50\" r=\"25\" stroke=\"#fff\" stroke-opacity=\".25\" stroke-width=\"10\" style=\"mix-blend-mode:lighten\"/>'\n + '<circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#fff\" fill-opacity=\".25\" style=\"mix-blend-mode:lighten\"/>'\n\n/** Default ring color palette (hex, no leading #) from the DiceBear rings schema. */\nexport const DEFAULT_RING_COLORS: readonly string[] = [\n 'ffd54f',\n '64b5f6',\n '4dd0e1',\n 'ff8a65',\n '9575cd',\n '81c784',\n '7986cb',\n '4fc3f7',\n 'aed581',\n 'dce775',\n 'ffb74d',\n 'f06292',\n 'ba68c8',\n 'e57373',\n '4db6ac',\n 'fff176',\n]\n\n// --- options -----------------------------------------------------------------\n\nexport interface RingsOptions {\n /** Solid background fill (hex, no leading #). Omit for transparent. */\n backgroundColor?: string\n /** Corner radius as a percentage 0\u201350 (50 = full circle clip). Defaults to 0. */\n radius: number\n ringColor: readonly string[]\n ringFive: readonly RingVariant[]\n ringFiveRotation: readonly number[]\n ringFour: readonly RingVariant[]\n ringFourRotation: readonly number[]\n ringOne: readonly RingVariant[]\n ringOneRotation: readonly number[]\n ringRotation: readonly number[]\n ringThree: readonly RingVariant[]\n ringThreeRotation: readonly number[]\n ringTwo: readonly RingVariant[]\n ringTwoRotation: readonly number[]\n /** Deterministic seed string the avatar is derived from. */\n seed: string\n /** Rendered SVG width/height in pixels. Omit to keep the avatar fluid. */\n size?: number\n}\n\nconst ROTATION: readonly number[] = [-180, 180]\n\nexport function buildRingsOptions(opts: Partial<RingsOptions>): RingsOptions {\n return {\n seed: opts.seed ?? Math.floor(Math.random() * 10 ** 16).toString(16),\n size: opts.size,\n radius: opts.radius ?? 0,\n backgroundColor: opts.backgroundColor,\n ringColor: opts.ringColor ?? DEFAULT_RING_COLORS,\n ringOne: opts.ringOne ?? ['half', 'quarter'],\n ringTwo: opts.ringTwo ?? ['quarter', 'half'],\n ringThree: opts.ringThree ?? ['quarter', 'half'],\n ringFour: opts.ringFour ?? ['quarter', 'half'],\n ringFive: opts.ringFive ?? ['full'],\n ringRotation: opts.ringRotation ?? ROTATION,\n ringOneRotation: opts.ringOneRotation ?? ROTATION,\n ringTwoRotation: opts.ringTwoRotation ?? ROTATION,\n ringThreeRotation: opts.ringThreeRotation ?? ROTATION,\n ringFourRotation: opts.ringFourRotation ?? ROTATION,\n ringFiveRotation: opts.ringFiveRotation ?? ROTATION,\n }\n}\n\n// --- rendering ---------------------------------------------------------------\n\ninterface PickedLayer<T extends string> {\n rotation: number\n variant: T | undefined\n}\n\n// Consumes the PRNG in the exact order DiceBear's pickComponent does\n// (variant, rotation, offsetX, offsetY) so seeded output stays identical.\nfunction pickLayer<T extends string>(prng: Prng, values: readonly T[], rotationRange: readonly number[]): PickedLayer<T> {\n const variant = prng.pick(values)\n const rotation = prng.integer(Math.min(...rotationRange), Math.max(...rotationRange))\n prng.integer(0, 0) // offsetX (always 0)\n prng.integer(0, 0) // offsetY (always 0)\n return { variant, rotation }\n}\n\nfunction rotateGroup(markup: string, rotation: number): string {\n return rotation ? `<g transform=\"translate(0, 0) rotate(${rotation} 50 50)\">${markup}</g>` : markup\n}\n\nfunction mirror(markup: string): string {\n return `<g transform=\"matrix(1 0 0 -1 0 100)\">${markup}</g>`\n}\n\nfunction renderLayer(shapes: RingShapes, layer: PickedLayer<RingVariant>, color: string): string {\n return layer.variant ? rotateGroup(shapes[layer.variant](color), layer.rotation) : ''\n}\n\n/** Renders a DiceBear \"rings\" avatar as an SVG string. */\nexport function createRingsSvg(opts: Partial<RingsOptions>): string {\n const options = buildRingsOptions(opts)\n const prng = createPrng(options.seed)\n\n // Pick order matches DiceBear: ring (container) first, then layers one\u2013five, then color.\n const ringPick = pickLayer(prng, ['container'], options.ringRotation)\n const one = pickLayer(prng, options.ringOne, options.ringOneRotation)\n const two = pickLayer(prng, options.ringTwo, options.ringTwoRotation)\n const three = pickLayer(prng, options.ringThree, options.ringThreeRotation)\n const four = pickLayer(prng, options.ringFour, options.ringFourRotation)\n const five = pickLayer(prng, options.ringFive, options.ringFiveRotation)\n const color = convertColor(prng.pick(options.ringColor, 'transparent') ?? 'transparent')\n\n const oneStr = renderLayer(ringOne, one, color)\n const twoStr = renderLayer(ringTwo, two, color)\n const threeStr = renderLayer(ringThree, three, color)\n const fourStr = renderLayer(ringFour, four, color)\n const fiveStr = renderLayer(ringFive, five, color)\n\n const container\n = oneStr + twoStr + threeStr + fourStr + fiveStr\n + mirror(oneStr) + mirror(twoStr) + mirror(threeStr) + mirror(fourStr) + mirror(fiveStr)\n + FIXED_CIRCLES\n\n let body = rotateGroup(container, ringPick.rotation)\n\n if (options.backgroundColor) {\n body = `<rect fill=\"${convertColor(options.backgroundColor)}\" width=\"100\" height=\"100\" x=\"0\" y=\"0\" />${body}`\n }\n\n if (options.radius) {\n // Seed-derived id avoids mask collisions when several avatars share a page.\n const maskId = `rings-mask-${(hashSeed(options.seed) >>> 0).toString(16)}`\n body\n = `<mask id=\"${maskId}\"><rect width=\"100\" height=\"100\" rx=\"${options.radius}\" ry=\"${options.radius}\" x=\"0\" y=\"0\" fill=\"#fff\" /></mask>`\n + `<g mask=\"url(#${maskId})\">${body}</g>`\n }\n\n const sizeAttrs = options.size === undefined ? '' : ` width=\"${options.size}\" height=\"${options.size}\"`\n return `<svg xmlns=\"http://www.w3.org/2000/svg\"${sizeAttrs} viewBox=\"0 0 100 100\" fill=\"none\" shape-rendering=\"crispEdges\">${body}</svg>`\n}\n\n/** Renders a DiceBear \"rings\" avatar as a `data:` URI suitable for an `<img src>`. */\nexport function createRingsDataUri(opts: Partial<RingsOptions>): string {\n return `data:image/svg+xml;utf8,${encodeURIComponent(createRingsSvg(opts))}`\n}\n", "import type { AvatarProps } from '@mui/material'\nimport { Avatar, useTheme } from '@mui/material'\nimport { grey } from '@mui/material/colors'\nimport { alphaCss } from '@xylabs/react-theme'\nimport React, { useMemo } from 'react'\n\nimport type { RingsOptions } from './rings.ts'\nimport { createRingsDataUri } from './rings.ts'\n\nexport interface RingsAvatarProps extends AvatarProps {\n ringsOptions?: Partial<RingsOptions>\n}\n\nexport const RingsAvatar: React.FC<RingsAvatarProps> = ({ ringsOptions, ...props }) => {\n const img = useMemo(() => {\n if (ringsOptions?.seed !== undefined) {\n return createRingsDataUri(ringsOptions)\n }\n }, [ringsOptions])\n\n return (\n <Avatar component=\"span\" src={img} {...props} />\n )\n}\n\nexport interface RingsAvatarAddressProps extends AvatarProps {\n /** Size of the border is the size prop * borderSizeFactor and rounded up */\n borderSizeFactor?: number\n /** The seed to render the avatar from */\n seed?: string\n /** The size of the avatar in pixels, defaults to 24 */\n size?: number\n}\n\nexport const RingsAvatarAddress: React.FC<RingsAvatarAddressProps> = ({\n seed, borderSizeFactor = 0.0833, size = 24, sx, ...props\n}) => {\n const theme = useTheme()\n const options = useMemo(() => {\n if (seed !== undefined) {\n // size * 2 keeps the rendered SVG crisp on high-DPI displays; radius 50 clips to a circle.\n return {\n seed, size: size * 2, radius: 50,\n }\n }\n }, [seed, size])\n\n return (\n <RingsAvatar\n ringsOptions={options}\n sx={{\n width: size,\n height: size,\n border: `${Math.ceil(size * borderSizeFactor)}px solid ${alphaCss(theme.vars?.palette.text.primary ?? grey[500], 0.8)}`,\n ...sx,\n }}\n {...props}\n />\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["useMemo", "jsx", "useMemo", "Avatar", "useTheme", "grey", "alphaCss", "useMemo", "jsx", "useMemo", "Avatar", "useTheme", "alphaCss", "grey"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/xl1-blockies",
4
- "version": "2.0.7",
4
+ "version": "2.0.9",
5
5
  "description": "XL1 React SDK Blockies",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -48,10 +48,10 @@
48
48
  "@types/react": "^19.2.16",
49
49
  "@xylabs/react-theme": "~9.0.2",
50
50
  "@xylabs/sdk-js": "^6.0.6",
51
- "@xylabs/toolchain": "~8.1.8",
52
- "@xylabs/tsconfig": "~8.1.8",
53
- "@xylabs/tsconfig-dom": "~8.1.8",
54
- "@xylabs/tsconfig-react": "~8.1.8",
51
+ "@xylabs/toolchain": "~8.1.12",
52
+ "@xylabs/tsconfig": "~8.1.12",
53
+ "@xylabs/tsconfig-dom": "~8.1.12",
54
+ "@xylabs/tsconfig-react": "~8.1.12",
55
55
  "async-mutex": "^0.5.0",
56
56
  "bn.js": "^5.2.3",
57
57
  "buffer": "^6.0.3",