{
  "definitions": [
    {
      "callable": true,
      "callees": [
        {
          "file": "core/normalizers/math.normalizer.ts",
          "name": "roundTo",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-normalizers-math-normalizer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/normalizers/math.normalizer.ts",
            "label": "core/normalizers/math.normalizer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/normalizers/math.normalizer.ts.md",
            "ref": "anatomy:file-patterns-core-normalizers-math-normalizer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "flatTopPixel",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "flatTopPixel",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "pair",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "pair",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "renderHexGrid",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "renderHexGrid",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "warnMark",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "warnMark",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "warnMark",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 49,
      "name": "round",
      "signature": "const round = function round(value: number): number {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "renderHexGrid",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "renderHexGrid",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 129,
      "name": "svgDoc",
      "signature": "const svgDoc = function svgDoc(width: number, height: number, body: string): string {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "renderCell",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 80,
      "name": "warnMark",
      "signature": "const warnMark = function warnMark(center: Point, severity: string): string {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "hexCorners",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 53,
      "name": "pair",
      "signature": "const pair = function pair(x: number, y: number): string {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "renderHexGrid",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 120,
      "name": "renderFlow",
      "signature": "const renderFlow = function renderFlow(centers: readonly Point[]): string {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "renderFlow",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "svgDoc",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "svgDoc",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "callers": [],
      "exported": true,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 133,
      "name": "renderHexGrid",
      "signature": "export const renderHexGrid = function renderHexGrid(nodes: readonly WalkNode[], options: HexGridOptions = {}): string {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        },
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "round",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 57,
      "name": "flatTopPixel",
      "signature": "const flatTopPixel = function flatTopPixel(cell: Axial): Point {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "pair",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 61,
      "name": "hexCorners",
      "signature": "const hexCorners = function hexCorners(center: Point): string {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/renderers/walk.renderer.ts",
          "name": "warnMark",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/renderers/walk.renderer.ts",
            "label": "core/renderers/walk.renderer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.md",
            "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 89,
      "name": "renderCell",
      "signature": "const renderCell = function renderCell("
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 21,
      "name": "PRECISION",
      "signature": "const PRECISION = 2;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 22,
      "name": "HEX_SIZE",
      "signature": "const HEX_SIZE = 15;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 23,
      "name": "HEX_SIDES",
      "signature": "const HEX_SIDES = 6;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 24,
      "name": "HEX_ANGLE_STEP",
      "signature": "const HEX_ANGLE_STEP = 60;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 25,
      "name": "DOUBLE",
      "signature": "const DOUBLE = 2;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 26,
      "name": "HALF_TURN",
      "signature": "const HALF_TURN = 180;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 27,
      "name": "DEG_TO_RAD",
      "signature": "const DEG_TO_RAD = Math.PI / HALF_TURN;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 28,
      "name": "COL_RATIO",
      "signature": "const COL_RATIO = 1.5;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 29,
      "name": "SQRT3",
      "signature": "const SQRT3 = Math.sqrt(3);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 30,
      "name": "ARROW_EVERY",
      "signature": "const ARROW_EVERY = 6;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 31,
      "name": "ARROW_LEN",
      "signature": "const ARROW_LEN = 6;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 32,
      "name": "ARROW_WIDE",
      "signature": "const ARROW_WIDE = 3.2;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 33,
      "name": "MARGIN",
      "signature": "const MARGIN = 32;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 34,
      "name": "WARN_SCALE",
      "signature": "const WARN_SCALE = 0.66;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 35,
      "name": "WARN_WIDE",
      "signature": "const WARN_WIDE = 0.86;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 36,
      "name": "EMPTY_W",
      "signature": "const EMPTY_W = 360;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 37,
      "name": "EMPTY_H",
      "signature": "const EMPTY_H = 120;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 38,
      "name": "EMPTY_CX",
      "signature": "const EMPTY_CX = 180;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 39,
      "name": "EMPTY_CY",
      "signature": "const EMPTY_CY = 64;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 40,
      "name": "SVG_NS",
      "signature": "const SVG_NS = \"http://www.w3.org/2000/svg\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "interface_declaration",
      "line": 42,
      "name": "Bounds",
      "signature": "interface Bounds {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 63,
      "name": "angle",
      "signature": "const angle = DEG_TO_RAD * HEX_ANGLE_STEP * corner;"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 68,
      "name": "boundsOf",
      "signature": "const boundsOf = function boundsOf(centers: readonly Point[]): Bounds {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 69,
      "name": "xs",
      "signature": "const xs = centers.map((point) => point.x);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 70,
      "name": "ys",
      "signature": "const ys = centers.map((point) => point.y);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 71,
      "name": "pad",
      "signature": "const pad = HEX_SIZE + MARGIN;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 81,
      "name": "size",
      "signature": "const size = HEX_SIZE * WARN_SCALE;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 95,
      "name": "severity",
      "signature": "const severity = severityOf(cell, flagged);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 97,
      "name": "classes",
      "signature": "const classes = severity === undefined ? base : `${base} ${HEX_FLAG_PREFIX}${severity}`;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 98,
      "name": "polygon",
      "signature": "const polygon = `<polygon class=\"${escapeXml(classes)}\" ${HEX_REF_ATTRIBUTE}=\"${refOf(index)}\" points=\"${hexCorners(center)}\"/>`;"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 102,
      "name": "arrowAt",
      "signature": "const arrowAt = function arrowAt(from: Point, to: Point): string {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 103,
      "name": "dx",
      "signature": "const dx = to.x - from.x;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 104,
      "name": "dy",
      "signature": "const dy = to.y - from.y;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 105,
      "name": "len",
      "signature": "const len = Math.hypot(dx, dy) || 1;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 106,
      "name": "[ux, uy]",
      "signature": "const [ux, uy] = [dx / len, dy / len];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 107,
      "name": "mid",
      "signature": "const mid: Point = { x: (from.x + to.x) * HALF, y: (from.y + to.y) * HALF };"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 108,
      "name": "reach",
      "signature": "const reach = ARROW_LEN * HALF;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 109,
      "name": "base",
      "signature": "const base: Point = { x: mid.x - ux * reach, y: mid.y - uy * reach };"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 110,
      "name": "tip",
      "signature": "const tip = pair(mid.x + ux * reach, mid.y + uy * reach);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 111,
      "name": "left",
      "signature": "const left = pair(base.x - uy * ARROW_WIDE, base.y + ux * ARROW_WIDE);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 112,
      "name": "right",
      "signature": "const right = pair(base.x + uy * ARROW_WIDE, base.y - ux * ARROW_WIDE);"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 116,
      "name": "pointText",
      "signature": "const pointText = function pointText(point: Point): string {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 121,
      "name": "line",
      "signature": "const line = `<polyline class=\"${HEX_PATH_CLASS}\" points=\"${centers.map(pointText).join(\" \")}\"/>`;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 122,
      "name": "arrows",
      "signature": "const arrows = centers.flatMap((to, index) => {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 123,
      "name": "from",
      "signature": "const from = centers[index - 1];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 134,
      "name": "title",
      "signature": "const title = options.title ?? DEFAULT_WALK_TITLE;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 135,
      "name": "cells",
      "signature": "const cells = walkGrid(nodes);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 137,
      "name": "note",
      "signature": "const note = escapeXml(title + EMPTY_WALK_NOTE);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 138,
      "name": "label",
      "signature": "const label = `<text class=\"${HEX_EMPTY_CLASS}\" x=\"${EMPTY_CX}\" y=\"${EMPTY_CY}\" text-anchor=\"middle\">${note}</text>`;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 141,
      "name": "bounds",
      "signature": "const bounds = boundsOf(cells.map((cell) => flatTopPixel(cell.at)));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 142,
      "name": "centers",
      "signature": "const centers = cells.map((cell) => {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 143,
      "name": "pixel",
      "signature": "const pixel = flatTopPixel(cell.at);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 146,
      "name": "flagged",
      "signature": "const flagged = options.flagged ?? new Map<string, string>();"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 147,
      "name": "body",
      "signature": "const body = cells"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-walk-renderer-ts",
  "language": "typescript",
  "layer": "product",
  "name": "walk.renderer.ts",
  "path": "core/renderers/walk.renderer.ts",
  "ref": "anatomy:file-patterns-core-renderers-walk-renderer-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/patterns#folder-patterns-core-renderers",
          "json": "https://banes-lab.com/json/anatomy/patterns/folder-patterns-core-renderers",
          "label": "core/renderers",
          "markdown": "https://banes-lab.com/anatomy/patterns/folder-patterns-core-renderers.md",
          "ref": "chapter:/anatomy/patterns#folder-patterns-core-renderers"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-normalizers-math-normalizer-ts",
          "json": "https://banes-lab.com/json/source/patterns/core/normalizers/math.normalizer.ts",
          "label": "core/normalizers/math.normalizer.ts",
          "markdown": "https://banes-lab.com/source/patterns/core/normalizers/math.normalizer.ts.md",
          "ref": "anatomy:file-patterns-core-normalizers-math-normalizer-ts"
        }
      ],
      "relation": "uses"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/patterns#folder-patterns-core-normalizers",
          "json": "https://banes-lab.com/json/anatomy/patterns/folder-patterns-core-normalizers",
          "label": "core/normalizers",
          "markdown": "https://banes-lab.com/anatomy/patterns/folder-patterns-core-normalizers.md",
          "ref": "chapter:/anatomy/patterns#folder-patterns-core-normalizers"
        },
        {
          "href": "https://banes-lab.com/anatomy/patterns#folder-patterns-core-renderers",
          "json": "https://banes-lab.com/json/anatomy/patterns/folder-patterns-core-renderers",
          "label": "core/renderers",
          "markdown": "https://banes-lab.com/anatomy/patterns/folder-patterns-core-renderers.md",
          "ref": "chapter:/anatomy/patterns#folder-patterns-core-renderers"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": {
    "concern": "renderer",
    "subject": "walk",
    "variant": null
  },
  "stats": {
    "bytes": 6162,
    "callable": 12,
    "definitions": 63,
    "edges": 15,
    "exported": 10,
    "files": 1,
    "findings": {},
    "flows": {
      "relay": 3,
      "leaf": 2,
      "entry": 4,
      "isolated": 54
    },
    "lines": {
      "blank": 14,
      "code": 137,
      "total": 151
    }
  },
  "summary": "137 lines of code and 63 definitions.",
  "text": "https://banes-lab.com/source/patterns/core/renderers/walk.renderer.ts.txt",
  "tree": "patterns",
  "siblings": {
    "next": null,
    "previous": {
      "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-renderers-report-renderer-ts",
      "json": "https://banes-lab.com/json/source/patterns/core/renderers/report.renderer.ts",
      "label": "core/renderers/report.renderer.ts",
      "markdown": "https://banes-lab.com/source/patterns/core/renderers/report.renderer.ts.md",
      "ref": "anatomy:file-patterns-core-renderers-report-renderer-ts"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/patterns/core/renderers",
    "label": "core/renderers",
    "markdown": "https://banes-lab.com/api/source/patterns/core/renderers.md",
    "ref": "api:source/patterns/core/renderers"
  }
}
