@xyo-network/xl1-blockies 2.0.10 → 2.0.12
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
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
[![logo][]]
|
|
1
|
+
[![logo][]](https://xyo.network)
|
|
2
2
|
|
|
3
3
|
# @xyo-network/xl1-blockies
|
|
4
4
|
|
|
@@ -87,13 +87,10 @@ See the [LICENSE](./LICENSE) file (LGPL-3.0-only).
|
|
|
87
87
|
|
|
88
88
|
## Credits
|
|
89
89
|
|
|
90
|
-
[Made with 🔥 and ❄️ by XYO](https://xyo.network)
|
|
91
|
-
|
|
92
|
-
[logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
|
|
93
|
-
[logo-link]: https://xyo.network
|
|
90
|
+
[Made with 🔥 and ❄️ by XYO Foundation](https://xyo.network)
|
|
94
91
|
|
|
95
92
|
[npm-badge]: https://img.shields.io/npm/v/@xyo-network/xl1-blockies.svg
|
|
96
93
|
[npm-link]: https://www.npmjs.com/package/@xyo-network/xl1-blockies
|
|
97
|
-
|
|
98
94
|
[license-badge]: https://img.shields.io/npm/l/@xyo-network/xl1-blockies.svg
|
|
99
95
|
[license-link]: ./LICENSE
|
|
96
|
+
[logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
|
|
@@ -1 +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,
|
|
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,CA0ClE;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAEtE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
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('&', '&')\n .replaceAll('\\'', ''')\n .replaceAll('\"', '"')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\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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
|
|
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('&', '&')\n .replaceAll('\\'', ''')\n .replaceAll('\"', '"')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\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 // The SVG namespace is a fixed identifier, not a fetchable URL \u2014 it must stay http:// or the data: URI will not render.\n\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
6
|
"names": ["useMemo", "jsx", "useMemo", "Avatar", "useTheme", "grey", "alphaCss", "useMemo", "jsx", "useMemo", "Avatar", "useTheme", "alphaCss", "grey"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/xl1-blockies",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.12",
|
|
5
5
|
"description": "XL1 React SDK Blockies",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
8
|
-
"url": "
|
|
8
|
+
"url": "https://github.com/XYOracleNetwork/xl1-protocol/issues",
|
|
9
9
|
"email": "support@xylabs.com"
|
|
10
10
|
},
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
|
-
"url": "git+https://github.com/
|
|
13
|
+
"url": "git+https://github.com/XYOracleNetwork/xl1-protocol.git"
|
|
14
14
|
},
|
|
15
15
|
"license": "LGPL-3.0-only",
|
|
16
16
|
"author": {
|
|
@@ -39,28 +39,30 @@
|
|
|
39
39
|
"README.md"
|
|
40
40
|
],
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@mui/icons-material": "^9.0
|
|
43
|
-
"@mui/material": "^9.0
|
|
42
|
+
"@mui/icons-material": "^9.1.0",
|
|
43
|
+
"@mui/material": "^9.1.0",
|
|
44
44
|
"@opentelemetry/api": "^1.9.1",
|
|
45
45
|
"@opentelemetry/sdk-trace-base": "^2.7.1",
|
|
46
46
|
"@react-spring/web": "~10.1.0",
|
|
47
47
|
"@storybook/react-vite": "^10.4.2",
|
|
48
|
-
"@types/react": "^19.2.
|
|
49
|
-
"@xylabs/react-theme": "~9.0.
|
|
50
|
-
"@xylabs/sdk-js": "^6.0.
|
|
51
|
-
"@xylabs/toolchain": "~8.1.
|
|
52
|
-
"@xylabs/tsconfig": "~8.1.
|
|
53
|
-
"@xylabs/tsconfig-dom": "~8.1.
|
|
54
|
-
"@xylabs/tsconfig-react": "~8.1.
|
|
48
|
+
"@types/react": "^19.2.17",
|
|
49
|
+
"@xylabs/react-theme": "~9.0.4",
|
|
50
|
+
"@xylabs/sdk-js": "^6.0.10",
|
|
51
|
+
"@xylabs/toolchain": "~8.1.19",
|
|
52
|
+
"@xylabs/tsconfig": "~8.1.19",
|
|
53
|
+
"@xylabs/tsconfig-dom": "~8.1.19",
|
|
54
|
+
"@xylabs/tsconfig-react": "~8.1.19",
|
|
55
55
|
"async-mutex": "^0.5.0",
|
|
56
56
|
"bn.js": "^5.2.3",
|
|
57
57
|
"buffer": "^6.0.3",
|
|
58
58
|
"eslint": "^10.4.1",
|
|
59
59
|
"ethers": "^6.16.0",
|
|
60
|
-
"pako": "^2.1.0",
|
|
61
60
|
"react": "^19.2.7",
|
|
62
61
|
"react-dom": "^19.2.7",
|
|
63
|
-
"
|
|
62
|
+
"react-is": "^19.2.7",
|
|
63
|
+
"react-router-dom": "^7.17.0",
|
|
64
|
+
"recharts": "^3.8.1",
|
|
65
|
+
"storybook": "^10.4.3",
|
|
64
66
|
"typescript": "~6.0.3",
|
|
65
67
|
"vite": "^8.0.16",
|
|
66
68
|
"zod": "~4.4.3"
|
|
@@ -77,9 +79,11 @@
|
|
|
77
79
|
"bn.js": "^5.2",
|
|
78
80
|
"buffer": "^6.0",
|
|
79
81
|
"ethers": "^6.16",
|
|
80
|
-
"pako": "^2.1",
|
|
81
82
|
"react": "^19.2",
|
|
82
83
|
"react-dom": "^19.2",
|
|
84
|
+
"react-is": "^19.2",
|
|
85
|
+
"react-router-dom": "^7.15",
|
|
86
|
+
"recharts": "^3.8",
|
|
83
87
|
"zod": "~4.4"
|
|
84
88
|
},
|
|
85
89
|
"engines": {
|