@labmgm/patterns 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/palette.ts","../src/rng.ts","../src/colour-graph.ts","../src/shapes.ts","../src/tiles-catalog.ts","../src/tiles.ts","../src/variants.ts","../src/generator.ts"],"names":["out"],"mappings":"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","file":"generator.cjs","sourcesContent":["/**\n * The fixed 5-colour palette used by every pattern block.\n *\n * Brand spec §5.2: \"Use all four brand colors plus white. Never substitute\n * or omit one.\" The colours themselves come from spec §2.1.\n */\n\nexport type PaletteColor = \"blue\" | \"yellow\" | \"red\" | \"green\" | \"white\";\n\nexport const PALETTE: readonly PaletteColor[] = [\"blue\", \"yellow\", \"red\", \"green\", \"white\"] as const;\n\n/** CSS-variable hooks so the palette switches with the active theme. */\nexport const PALETTE_VAR: Record<PaletteColor, string> = {\n blue: \"var(--brand-blue)\",\n yellow: \"var(--brand-yellow)\",\n red: \"var(--brand-red)\",\n green: \"var(--brand-green)\",\n white: \"var(--surface)\",\n};\n\n/** Hard-coded hex for stand-alone SVG (no CSS-var support). */\nexport const PALETTE_HEX: Record<PaletteColor, string> = {\n blue: \"#3a6dc5\",\n yellow: \"#f7bf33\",\n red: \"#f94141\",\n green: \"#0f8657\",\n white: \"#ffffff\",\n};\n\n/** Contrast pair — given a background palette colour, which fill reads best. */\nexport function contrastShapeColor(bg: PaletteColor): PaletteColor {\n // White bg → coloured shape; coloured bg → white shape. Brand spec §5.2.\n return bg === \"white\" ? \"blue\" : \"white\";\n}\n","/**\n * Mulberry32 — a tiny 32-bit deterministic PRNG.\n *\n * Returns the same sequence for the same seed across every JS engine. Used by\n * the pattern engine so a given `(grid, variant, seed, cellSize)` tuple always\n * produces byte-identical SVG.\n *\n * See <https://github.com/bryc/code/blob/master/jshash/PRNGs.md#mulberry32>.\n */\nexport function mulberry32(seed: number): () => number {\n let a = seed >>> 0;\n return function () {\n a |= 0;\n a = (a + 0x6d2b79f5) | 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** Inclusive integer in [min, max]. */\nexport function randInt(rng: () => number, min: number, max: number): number {\n return Math.floor(rng() * (max - min + 1)) + min;\n}\n\n/** Pick one item deterministically. */\nexport function pick<T>(rng: () => number, items: readonly T[]): T {\n return items[Math.floor(rng() * items.length)]!;\n}\n\n/** Fisher–Yates shuffle, in-place. */\nexport function shuffle<T>(rng: () => number, items: T[]): T[] {\n for (let i = items.length - 1; i > 0; i--) {\n const j = Math.floor(rng() * (i + 1));\n [items[i], items[j]] = [items[j]!, items[i]!];\n }\n return items;\n}\n","/**\n * Adjacency colour-graph solver.\n *\n * Brand spec §5.2: \"No two adjacent cells share the same dominant color.\"\n *\n * Given a grid of cells (4-connected) and a palette of 5 colours, we want\n * to assign every cell a background colour so no neighbour matches. With\n * 5 colours on a rectangular grid this is always solvable — but we want\n * the assignment to be *deterministic by seed* so the same `(grid, seed)`\n * always renders identically.\n *\n * Algorithm: greedy with backtracking.\n * 1. Visit cells in a seed-shuffled order.\n * 2. Try each palette colour, also in seed-shuffled order.\n * 3. Skip colours that match any already-assigned neighbour.\n * 4. If no colour fits, backtrack to the previous cell and pick the next\n * candidate. With 5 colours and ≤ 4 neighbours, a fit is always\n * reachable from any prefix — we still cap recursion at `MAX_DEPTH`\n * to guard against pathological inputs.\n */\n\nimport { PALETTE, type PaletteColor } from \"./palette.js\";\nimport { mulberry32, shuffle } from \"./rng.js\";\n\nexport interface GridCell {\n row: number;\n col: number;\n}\n\nexport interface ColouredCell extends GridCell {\n background: PaletteColor;\n}\n\nexport interface SolverOptions {\n rows: number;\n cols: number;\n seed: number;\n}\n\nconst MAX_BACKTRACKS = 10_000;\n\nexport function colourGrid({ rows, cols, seed }: SolverOptions): ColouredCell[] {\n const rng = mulberry32(seed);\n const total = rows * cols;\n const ids = Array.from({ length: total }, (_, i) => i);\n const order = shuffle(rng, [...ids]);\n\n // Each cell's candidate-colour order is seeded independently so different\n // grids of the same size with different seeds produce different palettes.\n const candidates: PaletteColor[][] = ids.map(() => shuffle(rng, [...PALETTE]));\n const assignment = new Array<PaletteColor | undefined>(total).fill(undefined);\n const tried = new Array<number>(total).fill(0);\n\n const neighbours = (idx: number): number[] => {\n const r = Math.floor(idx / cols);\n const c = idx % cols;\n const out: number[] = [];\n if (r > 0) out.push((r - 1) * cols + c);\n if (r < rows - 1) out.push((r + 1) * cols + c);\n if (c > 0) out.push(r * cols + (c - 1));\n if (c < cols - 1) out.push(r * cols + (c + 1));\n return out;\n };\n\n let cursor = 0;\n let backtracks = 0;\n\n while (cursor < order.length) {\n const idx = order[cursor]!;\n const cands = candidates[idx]!;\n let placed = false;\n\n while (tried[idx]! < cands.length) {\n const candidate = cands[tried[idx]!]!;\n tried[idx] = tried[idx]! + 1;\n const ok = neighbours(idx).every((n) => assignment[n] !== candidate);\n if (ok) {\n assignment[idx] = candidate;\n placed = true;\n break;\n }\n }\n\n if (placed) {\n cursor += 1;\n } else {\n // Reset this cell's trial counter for next time and step back.\n tried[idx] = 0;\n assignment[idx] = undefined;\n cursor -= 1;\n backtracks += 1;\n if (cursor < 0 || backtracks > MAX_BACKTRACKS) {\n throw new Error(\n `colourGrid: could not satisfy adjacency constraint after ${MAX_BACKTRACKS} backtracks (rows=${rows}, cols=${cols}, seed=${seed}).`,\n );\n }\n }\n }\n\n const out: ColouredCell[] = [];\n for (let i = 0; i < total; i++) {\n out.push({\n row: Math.floor(i / cols),\n col: i % cols,\n background: assignment[i]!,\n });\n }\n return out;\n}\n","/**\n * The geometric shape vocabulary — brand spec §5.1.\n *\n * Each shape is a pure SVG body function returning the inner markup for a\n * single cell of size `cellSize`. The cell's background is rendered by the\n * pattern composer; shapes draw on top in `shapeColor`.\n */\n\nexport type ShapeName =\n | \"circle\"\n | \"circle-ring\"\n | \"square\"\n | \"square-inset\"\n | \"triangle\"\n | \"x\"\n | \"plus\"\n | \"quarter-disc\"\n | \"half-disc\"\n | \"flower\"\n | \"diamond\";\n\nexport const SHAPES: readonly ShapeName[] = [\n \"circle\",\n \"circle-ring\",\n \"square\",\n \"square-inset\",\n \"triangle\",\n \"x\",\n \"plus\",\n \"quarter-disc\",\n \"half-disc\",\n \"flower\",\n \"diamond\",\n] as const;\n\nexport interface RenderArgs {\n /** Cell side in user units (the cell origin is at 0,0). */\n size: number;\n /** Fill / stroke colour for the shape. */\n color: string;\n}\n\n/**\n * Returns the inner SVG markup for the named shape, sized to `size`.\n * Coordinates are local to the cell — the composer translates the result\n * to its final grid position.\n */\nexport function renderShape(name: ShapeName, args: RenderArgs): string {\n const { size: s, color } = args;\n const cx = s / 2;\n const cy = s / 2;\n const r = s * 0.4; // shape radius inside the cell\n switch (name) {\n case \"circle\":\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"${r}\" fill=\"${color}\"/>`;\n case \"circle-ring\": {\n // 8% stroke per spec §5.1, painted as currentColor.\n const sw = s * 0.08;\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"${r - sw / 2}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"${sw}\"/>`;\n }\n case \"square\": {\n const side = s * 0.7;\n const off = (s - side) / 2;\n return `<rect x=\"${off}\" y=\"${off}\" width=\"${side}\" height=\"${side}\" fill=\"${color}\"/>`;\n }\n case \"square-inset\": {\n const outer = s * 0.7;\n const outOff = (s - outer) / 2;\n const inner = outer * 0.4;\n const inOff = (s - inner) / 2;\n const sw = s * 0.06;\n return `<rect x=\"${outOff}\" y=\"${outOff}\" width=\"${outer}\" height=\"${outer}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"${sw}\"/><rect x=\"${inOff}\" y=\"${inOff}\" width=\"${inner}\" height=\"${inner}\" fill=\"${color}\"/>`;\n }\n case \"triangle\": {\n const h = s * 0.78;\n const w = h * 1.155; // equilateral\n const x0 = (s - w) / 2;\n const y0 = (s - h) / 2;\n return `<path d=\"M ${x0 + w / 2} ${y0} L ${x0 + w} ${y0 + h} L ${x0} ${y0 + h} Z\" fill=\"${color}\"/>`;\n }\n case \"x\": {\n // Stroke ~16% of bounding box per spec §5.1.\n const sw = s * 0.16;\n const pad = s * 0.15;\n return `<path d=\"M ${pad} ${pad} L ${s - pad} ${s - pad} M ${s - pad} ${pad} L ${pad} ${s - pad}\" stroke=\"${color}\" stroke-width=\"${sw}\" stroke-linecap=\"round\"/>`;\n }\n case \"plus\": {\n // Stroke ~22% of bounding box per spec §5.1.\n const sw = s * 0.22;\n const pad = s * 0.18;\n return `<path d=\"M ${cx} ${pad} L ${cx} ${s - pad} M ${pad} ${cy} L ${s - pad} ${cy}\" stroke=\"${color}\" stroke-width=\"${sw}\" stroke-linecap=\"round\"/>`;\n }\n case \"quarter-disc\": {\n // 90° pie slice anchored at the top-left of the cell.\n return `<path d=\"M 0 0 L ${s} 0 A ${s} ${s} 0 0 1 0 ${s} Z\" fill=\"${color}\"/>`;\n }\n case \"half-disc\": {\n // Top half of a circle filling the cell's centre.\n return `<path d=\"M 0 ${cy} A ${cx} ${cy} 0 0 1 ${s} ${cy} L 0 ${cy} Z\" fill=\"${color}\"/>`;\n }\n case \"flower\": {\n // Four quarter-discs meeting at the centre — spec §5.1 four-petal flower.\n return [\n `<path d=\"M 0 0 L ${cx} 0 A ${cx} ${cy} 0 0 1 0 ${cy} Z\" fill=\"${color}\"/>`,\n `<path d=\"M ${cx} 0 L ${s} 0 L ${s} ${cy} A ${cx} ${cy} 0 0 0 ${cx} 0 Z\" fill=\"${color}\"/>`,\n `<path d=\"M 0 ${cy} A ${cx} ${cy} 0 0 0 ${cx} ${s} L 0 ${s} Z\" fill=\"${color}\"/>`,\n `<path d=\"M ${cx} ${s} A ${cx} ${cy} 0 0 0 ${s} ${cy} L ${s} ${s} Z\" fill=\"${color}\"/>`,\n ].join(\"\");\n }\n case \"diamond\": {\n const inset = s * 0.15;\n const p0 = `${cx},${inset}`;\n const p1 = `${s - inset},${cy}`;\n const p2 = `${cx},${s - inset}`;\n const p3 = `${inset},${cy}`;\n return `<polygon points=\"${p0} ${p1} ${p2} ${p3}\" fill=\"${color}\"/>`;\n }\n default:\n return \"\";\n }\n}\n","/**\n * Auto-generated tile catalog. Do not edit by hand — run `pnpm gen:tiles`.\n *\n * Each entry maps a file in ./patterns/ to the data the generator needs:\n * - `background` — palette name of the tile's original background.\n * - `shapeColor` — palette name of the tile's original shape colour.\n * - `shapeMarkup` — the inner SVG (paths/circles/rects) with the original\n * background <rect> removed and every occurrence of the original shape\n * colour replaced by the placeholder `{{SHAPE_COLOR}}`. Renderers\n * substitute a contrast-aware palette colour at composition time.\n *\n * All tiles share the same 100×100 viewBox.\n */\nimport type { PaletteColor } from \"./palette.js\";\n\nexport interface Tile {\n id: string;\n background: PaletteColor;\n shapeColor: PaletteColor;\n shapeMarkup: string;\n}\n\nexport const TILE_VIEWBOX_SIZE = 100;\n\nexport const TILES: readonly Tile[] = [\n {\n \"id\": \"p-1\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-2\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-3\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-4\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-5\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-6\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-7\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-8\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-9\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-10\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-11\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-12\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-13\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-14\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-15\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-16\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-17\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-18\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-19\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-20\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-21\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-22\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-23\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-24\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-25\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-26\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-27\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-28\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-29\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-30\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-31\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-32\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-33\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-34\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-35\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-36\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-37\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-38\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-39\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-40\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-41\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-42\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-43\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-44\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-45\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-46\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-47\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-48\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-49\",\n \"background\": \"blue\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-50\",\n \"background\": \"white\",\n \"shapeColor\": \"blue\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-51\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-52\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-53\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-54\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-55\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-56\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-57\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-58\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-59\",\n \"background\": \"yellow\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-60\",\n \"background\": \"white\",\n \"shapeColor\": \"yellow\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-61\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-62\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-63\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-64\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-65\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-66\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-67\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-68\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-69\",\n \"background\": \"red\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-70\",\n \"background\": \"white\",\n \"shapeColor\": \"red\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-71\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H2C29.6142 0 52 22.3858 52 50V52H50C22.3858 52 0 29.6142 0 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H2C29.6142 100 52 77.6142 52 50V48H50C22.3858 48 0 70.3858 0 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0H98C70.3858 0 48 22.3858 48 50V52H50C77.6142 52 100 29.6142 100 2V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100H98C70.3858 100 48 77.6142 48 50V48H50C77.6142 48 100 70.3858 100 98V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-72\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M0 100L100 0M100 100L0 0\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-73\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-74\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<rect x=\\\"10\\\" y=\\\"10\\\" width=\\\"80\\\" height=\\\"80\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n },\n {\n \"id\": \"p-75\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M100 0C100 27.6142 77.6142 50 50 50C22.3858 50 0 27.6142 0 0C0 -27.6142 22.3858 -50 50 -50C77.6142 -50 100 -27.6142 100 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100C100 127.614 77.6142 150 50 150C22.3858 150 0 127.614 0 100C0 72.3858 22.3858 50 50 50C77.6142 50 100 72.3858 100 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-76\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M150 0C150 27.6142 127.614 50 100 50C72.3858 50 50 27.6142 50 0C50 -27.6142 72.3858 -50 100 -50C127.614 -50 150 -27.6142 150 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M150 100C150 127.614 127.614 150 100 150C72.3858 150 50 127.614 50 100C50 72.3858 72.3858 50 100 50C127.614 50 150 72.3858 150 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C50 27.6142 27.6142 50 0 50C-27.6142 50 -50 27.6142 -50 0C-50 -27.6142 -27.6142 -50 0 -50C27.6142 -50 50 -27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C50 127.614 27.6142 150 0 150C-27.6142 150 -50 127.614 -50 100C-50 72.3858 -27.6142 50 0 50C27.6142 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-77\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M0 0C27.6142 0 50 22.3858 50 50C22.3858 50 0 27.6142 0 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100C27.6142 100 50 77.6142 50 50C22.3858 50 0 72.3858 0 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 0C77.6142 0 100 22.3858 100 50C72.3858 50 50 27.6142 50 0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 100C77.6142 100 100 77.6142 100 50C72.3858 50 50 72.3858 50 100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-78\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M0 0H25C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50C11.1929 50 0 38.8071 0 25V0Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 0V25C100 38.8071 88.8071 50 75 50C61.1929 50 50 38.8071 50 25C50 11.1929 61.1929 0 75 0H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M0 100H25C38.8071 100 50 88.8071 50 75C50 61.1929 38.8071 50 25 50C11.1929 50 0 61.1929 0 75V100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M100 100V75C100 61.1929 88.8071 50 75 50C61.1929 50 50 61.1929 50 75C50 88.8071 61.1929 100 75 100H100Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-79\",\n \"background\": \"green\",\n \"shapeColor\": \"white\",\n \"shapeMarkup\": \"<path d=\\\"M50 50H25C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V25C50 11.1929 61.1929 0 75 0C88.8071 0 100 11.1929 100 25C100 38.8071 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50H25C11.1929 50 0 61.1929 0 75C0 88.8071 11.1929 100 25 100C38.8071 100 50 88.8071 50 75V50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\\n<path d=\\\"M50 50V75C50 88.8071 61.1929 100 75 100C88.8071 100 100 88.8071 100 75C100 61.1929 88.8071 50 75 50H50Z\\\" fill=\\\"{{SHAPE_COLOR}}\\\"/>\"\n },\n {\n \"id\": \"p-80\",\n \"background\": \"white\",\n \"shapeColor\": \"green\",\n \"shapeMarkup\": \"<path d=\\\"M50 0V100\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\\n<path d=\\\"M100 50H3.93391e-06\\\" stroke=\\\"{{SHAPE_COLOR}}\\\" stroke-width=\\\"20\\\"/>\"\n }\n] as const;\n\nexport const TILE_BY_ID: Readonly<Record<string, Tile>> = Object.freeze(\n Object.fromEntries(TILES.map((t) => [t.id, t])),\n);\n","/**\n * Tile helpers — selecting + recolouring entries from the auto-generated\n * catalog (./tiles-catalog.ts, sourced from ./patterns/*.svg).\n *\n * When the generator is invoked with `base` or `pool`, every cell is rendered\n * from a tile rather than from the procedural shape vocabulary in shapes.ts.\n * The cell's background is still assigned by the adjacency colour-graph; the\n * tile is recoloured to a contrast-aware palette colour so the shape stays\n * visible against whatever background the solver picked.\n */\n\nimport { PALETTE_HEX, PALETTE_VAR, contrastShapeColor, type PaletteColor } from \"./palette.js\";\nimport { pick } from \"./rng.js\";\nimport { TILES, TILE_BY_ID, TILE_VIEWBOX_SIZE, type Tile } from \"./tiles-catalog.js\";\n\nexport { TILES, TILE_BY_ID, TILE_VIEWBOX_SIZE };\nexport type { Tile };\n\n/** Thrown when a caller references a tile id that isn't in the catalog. */\nexport class UnknownTileError extends Error {\n constructor(public readonly id: string) {\n super(`Unknown tile id: \"${id}\". Known ids: ${TILES.map((t) => t.id).join(\", \")}.`);\n this.name = \"UnknownTileError\";\n }\n}\n\n/**\n * Resolve a `base` (single id) or `pool` (id list) into a concrete tile array.\n * Returns the full catalog when neither is supplied.\n */\nexport function resolveTilePool(opts: { base?: string; pool?: readonly string[] }): readonly Tile[] {\n if (opts.base !== undefined) {\n const tile = TILE_BY_ID[opts.base];\n if (!tile) throw new UnknownTileError(opts.base);\n return [tile];\n }\n if (opts.pool !== undefined) {\n if (opts.pool.length === 0) {\n throw new Error(\"Pattern pool is empty — supply at least one tile id or omit `pool`.\");\n }\n return opts.pool.map((id) => {\n const tile = TILE_BY_ID[id];\n if (!tile) throw new UnknownTileError(id);\n return tile;\n });\n }\n return TILES;\n}\n\n/**\n * Pick a tile deterministically from `pool`. The choice is made entirely from\n * the seeded RNG so a `(pool, seed)` pair always returns the same tile.\n *\n * The whole pool is eligible regardless of the cell's bg colour — the tile is\n * recoloured at render time via `recolourTileMarkup`. This keeps every tile\n * useful for every cell.\n */\nexport function pickTile(rng: () => number, pool: readonly Tile[]): Tile {\n return pick(rng, pool);\n}\n\n/**\n * Substitute the `{{SHAPE_COLOR}}` placeholder inside a tile's markup with a\n * concrete palette colour (CSS variable or hex, per `useHex`).\n */\nexport function recolourTileMarkup(\n markup: string,\n shapeColor: PaletteColor,\n useHex: boolean,\n): string {\n const palette = useHex ? PALETTE_HEX : PALETTE_VAR;\n return markup.replaceAll(\"{{SHAPE_COLOR}}\", palette[shapeColor]);\n}\n\n/**\n * Resolve the shape colour for a tile placed against a background. Mirrors\n * the procedural renderer: white bg → coloured shape; coloured bg → white.\n */\nexport function tileShapeColorFor(bg: PaletteColor): PaletteColor {\n return contrastShapeColor(bg);\n}\n\n/**\n * Scale factor to convert tile-local coordinates (always in a 100×100 box)\n * into the generator's `cellSize`.\n */\nexport function tileScaleFor(cellSize: number): number {\n return cellSize / TILE_VIEWBOX_SIZE;\n}\n","/**\n * Shape variants — the placement contexts brand spec §5.3 allows.\n *\n * - `corner` — square / rectangular cluster anchored at a corner.\n * - `edge-strip` — vertical strip along one side (auth-page banner).\n * - `divider-strip`— horizontal strip between two sections.\n * - `dado-footer` — the 8 px alternating row at the bottom of every page.\n * - `full-scene` — 404 / empty-state illustration (left half of asymmetric 5/7).\n */\n\nimport type { PaletteColor } from \"./palette.js\";\n\nexport type PatternVariant =\n | \"corner\"\n | \"edge-strip\"\n | \"divider-strip\"\n | \"dado-footer\"\n | \"full-scene\";\n\nexport type GridShape = `${number}x${number}`;\n\nexport interface VariantDimensions {\n rows: number;\n cols: number;\n}\n\nexport function parseGrid(grid: GridShape): VariantDimensions {\n const m = grid.match(/^(\\d+)x(\\d+)$/);\n if (!m) throw new Error(`Invalid grid shape: ${grid}. Use \"<rows>x<cols>\".`);\n return { rows: parseInt(m[1]!, 10), cols: parseInt(m[2]!, 10) };\n}\n\nexport interface ResolvedVariant extends VariantDimensions {\n cellSize: number;\n}\n\n/**\n * Resolve a variant against an optional grid / cellSize override.\n * Each variant has a sensible default — overrides are merged in.\n */\nexport function resolveVariant(\n variant: PatternVariant,\n overrides: { grid?: GridShape; cellSize?: number } = {},\n): ResolvedVariant {\n const baseGrid: Record<PatternVariant, VariantDimensions> = {\n corner: { rows: 3, cols: 3 },\n \"edge-strip\": { rows: 9, cols: 2 },\n \"divider-strip\": { rows: 1, cols: 12 },\n \"dado-footer\": { rows: 1, cols: 32 },\n \"full-scene\": { rows: 5, cols: 6 },\n };\n const baseSize: Record<PatternVariant, number> = {\n corner: 40,\n \"edge-strip\": 40,\n \"divider-strip\": 32,\n \"dado-footer\": 8,\n \"full-scene\": 80,\n };\n const dims = overrides.grid ? parseGrid(overrides.grid) : baseGrid[variant];\n const cellSize = overrides.cellSize ?? baseSize[variant];\n return { ...dims, cellSize };\n}\n\n/**\n * The dado variant uses a strict cycle through the 4 brand colours rather\n * than the graph-colouring algorithm — that's the literal rule from §7.8.\n */\nexport const DADO_CYCLE: readonly PaletteColor[] = [\"blue\", \"yellow\", \"red\", \"green\"] as const;\n","/**\n * Pattern SVG generator.\n *\n * Two render modes share the same adjacency-safe colour-graph backbone:\n *\n * 1. **Procedural shape mode** (default) — picks a shape from `SHAPES` per\n * cell and renders it via `renderShape()`. The historical behaviour.\n *\n * 2. **Tile mode** — when the caller supplies `base` (single id) or `pool`\n * (list of ids), every cell renders one of those tiles from the\n * auto-generated catalog (./tiles-catalog.ts, sourced from\n * ./patterns/*.svg). The tile's shape markup is recoloured to contrast\n * against the cell's assigned background.\n *\n * Output is deterministic by `(variant, grid, seed, cellSize, base | pool)`.\n */\n\nimport { colourGrid, type ColouredCell } from \"./colour-graph.js\";\nimport { PALETTE_HEX, PALETTE_VAR, contrastShapeColor } from \"./palette.js\";\nimport { mulberry32, pick } from \"./rng.js\";\nimport { SHAPES, renderShape, type ShapeName } from \"./shapes.js\";\nimport {\n pickTile,\n recolourTileMarkup,\n resolveTilePool,\n TILE_VIEWBOX_SIZE,\n type Tile,\n} from \"./tiles.js\";\nimport { DADO_CYCLE, resolveVariant, type GridShape, type PatternVariant } from \"./variants.js\";\n\nexport interface PatternOptions {\n variant: PatternVariant;\n /** Override the default grid dimensions for the variant. */\n grid?: GridShape;\n /** Override the cell side in pixels. */\n cellSize?: number;\n /** Determinism seed. */\n seed?: number;\n /** Use raw hex (`#3a6dc5`) instead of CSS variables — useful when the SVG is exported. */\n useHex?: boolean;\n /**\n * Render every cell from the named tile in ./patterns (e.g. `\"p-1\"`).\n * The tile's shape is recoloured per-cell so it contrasts the adjacency-safe\n * background the colour-graph picks.\n */\n base?: string;\n /**\n * Like `base` but the generator picks one of the listed tiles per cell.\n * Ignored when `base` is also supplied.\n */\n pool?: readonly string[];\n}\n\nexport interface PatternCell extends ColouredCell {\n shape: ShapeName | null;\n shapeColor: string;\n backgroundColor: string;\n /** Set when the cell was rendered from a tile (tile mode). */\n tile: Tile | null;\n /** Inline SVG markup for the tile's shape, recoloured. Empty in procedural mode. */\n tileMarkup: string;\n}\n\nexport interface PatternData {\n cells: PatternCell[];\n width: number;\n height: number;\n rows: number;\n cols: number;\n cellSize: number;\n viewBox: string;\n /** True when cells were rendered from the tile catalog. */\n tileMode: boolean;\n /** When `tileMode` is true, the tile viewBox edge length (always 100). */\n tileViewBox: number;\n}\n\nexport function generatePatternData(options: PatternOptions): PatternData {\n const { variant, seed = 0, useHex = false, base, pool } = options;\n const { rows, cols, cellSize } = resolveVariant(variant, {\n ...(options.grid !== undefined && { grid: options.grid }),\n ...(options.cellSize !== undefined && { cellSize: options.cellSize }),\n });\n const palette = useHex ? PALETTE_HEX : PALETTE_VAR;\n // Tile mode is opt-in. The dado footer keeps its strict colour cycle and\n // never renders shapes, so it never enters tile mode.\n const tileMode = variant !== \"dado-footer\" && (base !== undefined || pool !== undefined);\n const tilePool = tileMode ? resolveTilePool({ ...(base !== undefined && { base }), ...(pool !== undefined && { pool }) }) : [];\n\n let coloured: ColouredCell[];\n if (variant === \"dado-footer\") {\n // The dado is a strict cycle — no graph-colouring, no shapes.\n coloured = Array.from({ length: rows * cols }, (_, i) => ({\n row: Math.floor(i / cols),\n col: i % cols,\n background: DADO_CYCLE[i % DADO_CYCLE.length]!,\n }));\n } else {\n coloured = colourGrid({ rows, cols, seed });\n }\n\n const rng = mulberry32(seed ^ 0x9e3779b9);\n const cells: PatternCell[] = coloured.map((c) => {\n if (variant === \"dado-footer\") {\n return {\n ...c,\n shape: null,\n backgroundColor: palette[c.background],\n shapeColor: palette[c.background],\n tile: null,\n tileMarkup: \"\",\n };\n }\n const shapeColor = contrastShapeColor(c.background);\n if (tileMode) {\n const tile = pickTile(rng, tilePool);\n return {\n ...c,\n shape: null,\n backgroundColor: palette[c.background],\n shapeColor: palette[shapeColor],\n tile,\n tileMarkup: recolourTileMarkup(tile.shapeMarkup, shapeColor, useHex),\n };\n }\n const shape = pick(rng, SHAPES);\n return {\n ...c,\n shape,\n backgroundColor: palette[c.background],\n shapeColor: palette[shapeColor],\n tile: null,\n tileMarkup: \"\",\n };\n });\n\n const width = cols * cellSize;\n const height = rows * cellSize;\n return {\n cells,\n width,\n height,\n rows,\n cols,\n cellSize,\n viewBox: `0 0 ${width} ${height}`,\n tileMode,\n tileViewBox: TILE_VIEWBOX_SIZE,\n };\n}\n\n/**\n * Render the pattern to a standalone SVG string.\n *\n * Useful for the docs site's \"Copy SVG\" affordance — produces a paste-ready\n * `<svg>` block with hex colours baked in (`useHex: true`) so the artwork\n * renders without our CSS variables.\n */\nexport function generatePatternSvg(options: PatternOptions): string {\n const data = generatePatternData(options);\n const cellSvg = data.cells\n .map((c) => {\n const tx = c.col * data.cellSize;\n const ty = c.row * data.cellSize;\n if (c.tile) {\n // Nested <svg> with the 100×100 viewBox naturally clips paths that\n // bleed outside the tile bounds (e.g. p-5's half-discs).\n return (\n `<svg x=\"${tx}\" y=\"${ty}\" width=\"${data.cellSize}\" height=\"${data.cellSize}\" viewBox=\"0 0 ${data.tileViewBox} ${data.tileViewBox}\" overflow=\"hidden\">` +\n `<rect width=\"${data.tileViewBox}\" height=\"${data.tileViewBox}\" fill=\"${c.backgroundColor}\"/>` +\n c.tileMarkup +\n `</svg>`\n );\n }\n const bg = `<rect width=\"${data.cellSize}\" height=\"${data.cellSize}\" fill=\"${c.backgroundColor}\"/>`;\n const shape = c.shape ? renderShape(c.shape, { size: data.cellSize, color: c.shapeColor }) : \"\";\n return `<g transform=\"translate(${tx} ${ty})\">${bg}${shape}</g>`;\n })\n .join(\"\");\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${data.viewBox}\" width=\"${data.width}\" height=\"${data.height}\" aria-hidden=\"true\">${cellSvg}</svg>`;\n}\n\nexport type { ShapeName } from \"./shapes.js\";\nexport type { PaletteColor } from \"./palette.js\";\nexport type { PatternVariant, GridShape } from \"./variants.js\";\nexport type { Tile } from \"./tiles.js\";\n"]}
@@ -0,0 +1 @@
1
+ export { G as GridShape, c as PaletteColor, d as PatternCell, e as PatternData, f as PatternOptions, g as PatternVariant, h as ShapeName, k as Tile, m as generatePatternData, n as generatePatternSvg } from './generator-URuC3uDY.cjs';
@@ -0,0 +1 @@
1
+ export { G as GridShape, c as PaletteColor, d as PatternCell, e as PatternData, f as PatternOptions, g as PatternVariant, h as ShapeName, k as Tile, m as generatePatternData, n as generatePatternSvg } from './generator-URuC3uDY.js';