schematex 0.9.10 → 0.9.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/ai-sdk.cjs +10 -9
- package/dist/ai/ai-sdk.cjs.map +1 -1
- package/dist/ai/ai-sdk.d.cts +5 -5
- package/dist/ai/ai-sdk.d.ts +5 -5
- package/dist/ai/ai-sdk.js +5 -4
- package/dist/ai/ai-sdk.js.map +1 -1
- package/dist/ai/index.cjs +19 -18
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +4 -4
- package/dist/ai/index.d.ts +4 -4
- package/dist/ai/index.js +6 -5
- package/dist/ai/index.js.map +1 -1
- package/dist/{api-D_d-JklT.d.ts → api-C9ufsgIb.d.ts} +2 -2
- package/dist/{api-DnTyW-6F.d.cts → api-DAUFeETp.d.cts} +2 -2
- package/dist/browser.cjs +11 -10
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +3 -3
- package/dist/browser.d.ts +3 -3
- package/dist/browser.js +5 -4
- package/dist/browser.js.map +1 -1
- package/dist/{chunk-IHX6J4HF.js → chunk-32LOZTNP.js} +178 -4
- package/dist/chunk-32LOZTNP.js.map +1 -0
- package/dist/{chunk-CXA45HIT.js → chunk-6KW7XSUR.js} +203 -12
- package/dist/chunk-6KW7XSUR.js.map +1 -0
- package/dist/{chunk-TXWVJAMR.cjs → chunk-HEGDKO2E.cjs} +178 -4
- package/dist/chunk-HEGDKO2E.cjs.map +1 -0
- package/dist/chunk-IBZKIMT5.cjs +826 -0
- package/dist/chunk-IBZKIMT5.cjs.map +1 -0
- package/dist/{chunk-T5QOVX2I.js → chunk-JLLDJCLW.js} +13194 -13037
- package/dist/chunk-JLLDJCLW.js.map +1 -0
- package/dist/{chunk-OY2CXLVY.cjs → chunk-MGMR6V6N.cjs} +13196 -13037
- package/dist/chunk-MGMR6V6N.cjs.map +1 -0
- package/dist/{chunk-MXV3XJFH.cjs → chunk-OGF7QM74.cjs} +80 -17
- package/dist/chunk-OGF7QM74.cjs.map +1 -0
- package/dist/chunk-PGMKMIGM.js +818 -0
- package/dist/chunk-PGMKMIGM.js.map +1 -0
- package/dist/{chunk-MVTYPWHO.js → chunk-Q5MQLUOH.js} +80 -17
- package/dist/chunk-Q5MQLUOH.js.map +1 -0
- package/dist/{chunk-CA54ESRT.cjs → chunk-YLG7S4SM.cjs} +205 -14
- package/dist/chunk-YLG7S4SM.cjs.map +1 -0
- package/dist/{diagnostics-D2qkBfFx.d.cts → diagnostics-DSxLohjY.d.cts} +9 -3
- package/dist/{diagnostics-D2qkBfFx.d.ts → diagnostics-DSxLohjY.d.ts} +9 -3
- package/dist/diagrams/blockdiagram/index.d.cts +1 -1
- package/dist/diagrams/blockdiagram/index.d.ts +1 -1
- package/dist/diagrams/circuit/index.cjs +8 -8
- package/dist/diagrams/circuit/index.d.cts +1 -1
- package/dist/diagrams/circuit/index.d.ts +1 -1
- package/dist/diagrams/circuit/index.js +1 -1
- package/dist/diagrams/ecomap/index.d.cts +1 -1
- package/dist/diagrams/ecomap/index.d.ts +1 -1
- package/dist/diagrams/entity/index.d.cts +1 -1
- package/dist/diagrams/entity/index.d.ts +1 -1
- package/dist/diagrams/fishbone/index.d.cts +1 -1
- package/dist/diagrams/fishbone/index.d.ts +1 -1
- package/dist/diagrams/flowchart/index.d.cts +2 -2
- package/dist/diagrams/flowchart/index.d.ts +2 -2
- package/dist/diagrams/genogram/index.d.cts +1 -1
- package/dist/diagrams/genogram/index.d.ts +1 -1
- package/dist/diagrams/ladder/index.d.cts +1 -1
- package/dist/diagrams/ladder/index.d.ts +1 -1
- package/dist/diagrams/logic/index.d.cts +1 -1
- package/dist/diagrams/logic/index.d.ts +1 -1
- package/dist/diagrams/orgchart/index.d.cts +1 -1
- package/dist/diagrams/orgchart/index.d.ts +1 -1
- package/dist/diagrams/pedigree/index.d.cts +1 -1
- package/dist/diagrams/pedigree/index.d.ts +1 -1
- package/dist/diagrams/phylo/index.d.cts +1 -1
- package/dist/diagrams/phylo/index.d.ts +1 -1
- package/dist/diagrams/siteplan/index.cjs +38 -0
- package/dist/diagrams/siteplan/index.cjs.map +1 -0
- package/dist/diagrams/siteplan/index.d.cts +122 -0
- package/dist/diagrams/siteplan/index.d.ts +122 -0
- package/dist/diagrams/siteplan/index.js +5 -0
- package/dist/diagrams/siteplan/index.js.map +1 -0
- package/dist/diagrams/sld/index.cjs +7 -7
- package/dist/diagrams/sld/index.d.cts +4 -1
- package/dist/diagrams/sld/index.d.ts +4 -1
- package/dist/diagrams/sld/index.js +1 -1
- package/dist/diagrams/sociogram/index.d.cts +1 -1
- package/dist/diagrams/sociogram/index.d.ts +1 -1
- package/dist/diagrams/timing/index.d.cts +1 -1
- package/dist/diagrams/timing/index.d.ts +1 -1
- package/dist/diagrams/venn/index.d.cts +1 -1
- package/dist/diagrams/venn/index.d.ts +1 -1
- package/dist/{index-JZlLiE6K.d.cts → index-CDDfbChc.d.cts} +1 -1
- package/dist/{index-D9u0YRxL.d.ts → index-CZa2pU0T.d.ts} +1 -1
- package/dist/index.cjs +56 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -5
- package/dist/index.d.ts +10 -5
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +5 -4
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +4 -3
- package/dist/react.js.map +1 -1
- package/dist/{tools-DAKYNcPv.d.cts → tools-Bvw6dwIR.d.cts} +2 -2
- package/dist/{tools-DM0aLCbc.d.ts → tools-DtuvE-K4.d.ts} +2 -2
- package/package.json +6 -1
- package/dist/chunk-CA54ESRT.cjs.map +0 -1
- package/dist/chunk-CXA45HIT.js.map +0 -1
- package/dist/chunk-IHX6J4HF.js.map +0 -1
- package/dist/chunk-MVTYPWHO.js.map +0 -1
- package/dist/chunk-MXV3XJFH.cjs.map +0 -1
- package/dist/chunk-OY2CXLVY.cjs.map +0 -1
- package/dist/chunk-T5QOVX2I.js.map +0 -1
- package/dist/chunk-TXWVJAMR.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/diagrams/siteplan/parser.ts","../src/diagrams/siteplan/layout.ts","../src/diagrams/siteplan/renderer.ts","../src/diagrams/siteplan/index.ts"],"names":["line","path","text","DEFAULT_FONT_FAMILY","el","TITLE","title","desc","defs","rect","circle","p","group","svgRoot","polygon","parts","a","b","dx","dy","dist"],"mappings":"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","file":"chunk-IBZKIMT5.cjs","sourcesContent":["import type {\n Point,\n SiteplanAst,\n SiteplanCallout,\n SiteplanDimension,\n SiteplanLine,\n SiteplanLineRole,\n SiteplanMarker,\n SiteplanMarkerKind,\n SiteplanPath,\n SiteplanPathRole,\n SiteplanPolygon,\n SiteplanPolygonRole,\n SiteplanUnit,\n} from \"./types\";\n\nexport class SiteplanParseError extends Error {\n readonly line: number;\n constructor(message: string, line: number) {\n super(`line ${line}: ${message}`);\n this.name = \"SiteplanParseError\";\n this.line = line;\n }\n}\n\ntype Tok = { word: string } | { str: string };\n\nconst POLYGON_ROLES: readonly SiteplanPolygonRole[] = [\"parcel\", \"structure\", \"zone\", \"landscape\", \"parking\"];\nconst PATH_ROLES: readonly SiteplanPathRole[] = [\"road\", \"driveway\", \"walkway\", \"trail\"];\nconst LINE_ROLES: readonly SiteplanLineRole[] = [\"setback\", \"easement\", \"fence\", \"utility\", \"frontage\", \"dimension\", \"boundary\"];\nconst MARKER_KINDS: readonly SiteplanMarkerKind[] = [\"tree\", \"car\", \"pin\", \"entry\", \"hydrant\", \"well\"];\n\nfunction normalizeQuotes(line: string): string {\n return line.replace(/[“”「」『』]/g, '\"').replace(/[‘’]/g, \"'\");\n}\n\nfunction stripComment(line: string): string {\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"') quoted = !quoted;\n if (!quoted && ch === \"#\" && !/^#[0-9a-fA-F]{3,8}\\b/.test(line.slice(i))) return line.slice(0, i);\n }\n return line;\n}\n\nfunction tokenize(line: string): Tok[] {\n const out: Tok[] = [];\n const re = /\"([^\"]*)\"|(\\S+)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(line))) {\n if (m[1] !== undefined) out.push({ str: m[1] });\n else out.push({ word: m[2]! });\n }\n return out;\n}\n\nconst isWord = (t: Tok | undefined, w?: string): t is { word: string } =>\n t !== undefined && \"word\" in t && (w === undefined || t.word.toLowerCase() === w);\nconst isStr = (t: Tok | undefined): t is { str: string } => t !== undefined && \"str\" in t;\n\nfunction tokenText(t: Tok): string {\n return \"word\" in t ? t.word : t.str;\n}\n\nfunction shiftStringIfNext(tok: Tok[]): string | undefined {\n const first = tok[0];\n if (!isStr(first)) return undefined;\n tok.shift();\n return first.str;\n}\n\nfunction parseNum(t: Tok | undefined, what: string, line: number): number {\n if (!isWord(t)) throw new SiteplanParseError(`expected a number for ${what}`, line);\n const n = Number(t.word);\n if (!Number.isFinite(n)) throw new SiteplanParseError(`expected a number for ${what}, got \"${t.word}\"`, line);\n return n;\n}\n\nfunction parsePointToken(t: Tok | undefined, what: string, line: number): Point {\n if (!isWord(t)) throw new SiteplanParseError(`expected \"x,y\" for ${what}`, line);\n const m = /^(-?\\d*\\.?\\d+),(-?\\d*\\.?\\d+)$/.exec(t.word);\n if (!m) throw new SiteplanParseError(`expected \"x,y\" for ${what}, got \"${t.word}\"`, line);\n return { x: Number(m[1]), y: Number(m[2]) };\n}\n\nfunction parseDimsToken(t: Tok | undefined, what: string, line: number): { w: number; h: number } {\n if (!isWord(t)) throw new SiteplanParseError(`expected \"WxH\" for ${what}`, line);\n const m = /^(\\d*\\.?\\d+)[x×](\\d*\\.?\\d+)$/i.exec(t.word);\n if (!m) throw new SiteplanParseError(`expected \"WxH\" for ${what}, got \"${t.word}\"`, line);\n return { w: Number(m[1]), h: Number(m[2]) };\n}\n\nfunction parseId(t: Tok | undefined, what: string, line: number): string {\n if (!isWord(t)) throw new SiteplanParseError(`expected ${what}`, line);\n return t.word;\n}\n\nfunction parsePoints(tok: Tok[], line: number, min = 2): Point[] {\n const points: Point[] = [];\n while (tok.length && isWord(tok[0]) && /^-?\\d*\\.?\\d+,-?\\d*\\.?\\d+$/.test(tok[0].word)) {\n points.push(parsePointToken(tok.shift(), \"points\", line));\n }\n if (points.length < min) {\n throw new SiteplanParseError(`expected at least ${min} point${min === 1 ? \"\" : \"s\"}`, line);\n }\n return points;\n}\n\nfunction parseOptionalLabel(tok: Tok[], obj: { label?: string }): void {\n const label = shiftStringIfNext(tok);\n if (label !== undefined) obj.label = label;\n}\n\nfunction parseHeader(tok: Tok[], ast: SiteplanAst, line: number): void {\n while (tok.length) {\n const t = tok.shift()!;\n if (isStr(t)) ast.title = t.str;\n else if (isWord(t, \"unit\")) {\n const unit = parseId(tok.shift(), \"unit (ft|m)\", line).toLowerCase();\n if (unit !== \"ft\" && unit !== \"m\") throw new SiteplanParseError(`unit must be \"ft\" or \"m\", got \"${unit}\"`, line);\n ast.unit = unit as SiteplanUnit;\n } else throw new SiteplanParseError(`siteplan: unexpected token \"${tokenText(t)}\"`, line);\n }\n}\n\nfunction parsePolygon(role: SiteplanPolygonRole, tok: Tok[], line: number): SiteplanPolygon {\n const poly: SiteplanPolygon = { role, id: parseId(tok.shift(), `${role} id`, line), points: [], line };\n parseOptionalLabel(tok, poly);\n if (!isWord(tok.shift(), \"points\")) throw new SiteplanParseError(`${role}: expected \"points\"`, line);\n poly.points = parsePoints(tok, line, 3);\n while (tok.length) {\n const t = tok.shift()!;\n if (!isWord(t)) throw new SiteplanParseError(`${role}: unexpected string \"${tokenText(t)}\"`, line);\n if (t.word === \"fill\") poly.fill = parseId(tok.shift(), \"fill color\", line);\n else if (t.word === \"label\") {\n const label = shiftStringIfNext(tok);\n if (label !== undefined) poly.label = label;\n else throw new SiteplanParseError(`${role}: label expects a quoted string`, line);\n }\n else throw new SiteplanParseError(`${role}: unexpected token \"${t.word}\"`, line);\n }\n return poly;\n}\n\nfunction parsePath(role: SiteplanPathRole, tok: Tok[], line: number): SiteplanPath {\n const path: SiteplanPath = { role, id: parseId(tok.shift(), `${role} id`, line), points: [], width: role === \"road\" ? 20 : 8, line };\n parseOptionalLabel(tok, path);\n const head = tok.shift();\n if (isWord(head, \"from\")) {\n path.points = [parsePointToken(tok.shift(), \"from\", line)];\n if (!isWord(tok.shift(), \"to\")) throw new SiteplanParseError(`${role}: expected \"to\"`, line);\n path.points.push(parsePointToken(tok.shift(), \"to\", line));\n } else if (isWord(head, \"points\")) {\n path.points = parsePoints(tok, line, 2);\n } else throw new SiteplanParseError(`${role}: expected \"from\" or \"points\"`, line);\n\n while (tok.length) {\n const t = tok.shift()!;\n if (!isWord(t)) throw new SiteplanParseError(`${role}: unexpected string \"${tokenText(t)}\"`, line);\n if (t.word === \"width\") path.width = parseNum(tok.shift(), \"width\", line);\n else if (t.word === \"label\") {\n const label = shiftStringIfNext(tok);\n if (label !== undefined) path.label = label;\n else throw new SiteplanParseError(`${role}: label expects a quoted string`, line);\n }\n else throw new SiteplanParseError(`${role}: unexpected token \"${t.word}\"`, line);\n }\n return path;\n}\n\nfunction parseLine(role: SiteplanLineRole, tok: Tok[], line: number): SiteplanLine {\n const ln: SiteplanLine = { role, id: parseId(tok.shift(), `${role} id`, line), points: [], line };\n parseOptionalLabel(tok, ln);\n const head = tok.shift();\n if (isWord(head, \"from\")) {\n ln.points = [parsePointToken(tok.shift(), \"from\", line)];\n if (!isWord(tok.shift(), \"to\")) throw new SiteplanParseError(`${role}: expected \"to\"`, line);\n ln.points.push(parsePointToken(tok.shift(), \"to\", line));\n } else if (isWord(head, \"points\")) {\n ln.points = parsePoints(tok, line, 2);\n } else throw new SiteplanParseError(`${role}: expected \"from\" or \"points\"`, line);\n\n while (tok.length) {\n const t = tok.shift()!;\n if (!isWord(t)) throw new SiteplanParseError(`${role}: unexpected string \"${tokenText(t)}\"`, line);\n if (t.word === \"label\") {\n const label = shiftStringIfNext(tok);\n if (label !== undefined) ln.label = label;\n else throw new SiteplanParseError(`${role}: label expects a quoted string`, line);\n }\n else throw new SiteplanParseError(`${role}: unexpected token \"${t.word}\"`, line);\n }\n return ln;\n}\n\nfunction parseMarker(kind: SiteplanMarkerKind, tok: Tok[], line: number): SiteplanMarker {\n let id = `${kind}${line}`;\n const first = tok[0];\n if (first && \"word\" in first && first.word.toLowerCase() !== \"at\") {\n tok.shift();\n id = first.word;\n }\n const marker: SiteplanMarker = { kind, id, at: { x: 0, y: 0 }, size: kind === \"car\" ? 16 : 8, rotate: 0, line };\n parseOptionalLabel(tok, marker);\n while (tok.length) {\n const t = tok.shift()!;\n if (!isWord(t)) marker.label = tokenText(t);\n else if (t.word === \"at\") marker.at = parsePointToken(tok.shift(), \"at\", line);\n else if (t.word === \"size\") {\n const next = tok.shift();\n if (isWord(next) && /[x×]/i.test(next.word)) {\n const d = parseDimsToken(next, \"size\", line);\n marker.size = Math.max(d.w, d.h);\n } else marker.size = parseNum(next, \"size\", line);\n } else if (t.word === \"rotate\") marker.rotate = parseNum(tok.shift(), \"rotate\", line);\n else if (t.word === \"label\") {\n const label = shiftStringIfNext(tok);\n if (label !== undefined) marker.label = label;\n else throw new SiteplanParseError(`${kind}: label expects a quoted string`, line);\n }\n else throw new SiteplanParseError(`${kind}: unexpected token \"${t.word}\"`, line);\n }\n return marker;\n}\n\nfunction parseCallout(tok: Tok[], line: number): SiteplanCallout {\n const first = tok.shift();\n if (!isStr(first)) throw new SiteplanParseError(`callout: expected quoted label`, line);\n if (!isWord(tok.shift(), \"at\")) throw new SiteplanParseError(`callout: expected \"at\"`, line);\n const at = parsePointToken(tok.shift(), \"at\", line);\n if (!isWord(tok.shift(), \"to\")) throw new SiteplanParseError(`callout: expected \"to\"`, line);\n return { label: first.str, at, to: parsePointToken(tok.shift(), \"to\", line), line };\n}\n\nfunction parseDimension(tok: Tok[], line: number): SiteplanDimension {\n let label = \"\";\n label = shiftStringIfNext(tok) ?? label;\n if (!isWord(tok.shift(), \"from\")) throw new SiteplanParseError(`dimension: expected \"from\"`, line);\n const from = parsePointToken(tok.shift(), \"from\", line);\n if (!isWord(tok.shift(), \"to\")) throw new SiteplanParseError(`dimension: expected \"to\"`, line);\n const to = parsePointToken(tok.shift(), \"to\", line);\n while (tok.length) {\n const t = tok.shift()!;\n if (isWord(t, \"label\")) {\n const next = shiftStringIfNext(tok);\n if (next !== undefined) label = next;\n else throw new SiteplanParseError(`dimension: label expects a quoted string`, line);\n }\n else throw new SiteplanParseError(`dimension: unexpected token`, line);\n }\n return { label, from, to, line };\n}\n\nexport function parseSiteplan(text: string): SiteplanAst {\n const ast: SiteplanAst = {\n type: \"siteplan\",\n title: \"Site Plan\",\n unit: \"ft\",\n legend: true,\n polygons: [],\n paths: [],\n lines: [],\n markers: [],\n callouts: [],\n dimensions: [],\n };\n\n const lines = text.split(/\\r?\\n/);\n let sawHeader = false;\n for (let i = 0; i < lines.length; i++) {\n const lineNo = i + 1;\n const raw = stripComment(normalizeQuotes(lines[i] ?? \"\")).trim();\n if (!raw) continue;\n const tok = tokenize(raw);\n const head = tok.shift();\n if (!isWord(head)) throw new SiteplanParseError(`unexpected string at line start`, lineNo);\n const keyword = head.word.toLowerCase();\n if (!sawHeader) {\n if (keyword !== \"siteplan\" && keyword !== \"plotplan\" && keyword !== \"parcelmap\" && keyword !== \"propertymap\") {\n throw new SiteplanParseError(`expected siteplan header`, lineNo);\n }\n parseHeader(tok, ast, lineNo);\n sawHeader = true;\n continue;\n }\n\n if ((POLYGON_ROLES as readonly string[]).includes(keyword)) {\n ast.polygons.push(parsePolygon(keyword as SiteplanPolygonRole, tok, lineNo));\n } else if ((PATH_ROLES as readonly string[]).includes(keyword)) {\n ast.paths.push(parsePath(keyword as SiteplanPathRole, tok, lineNo));\n } else if ((LINE_ROLES as readonly string[]).includes(keyword)) {\n ast.lines.push(parseLine(keyword as SiteplanLineRole, tok, lineNo));\n } else if ((MARKER_KINDS as readonly string[]).includes(keyword)) {\n ast.markers.push(parseMarker(keyword as SiteplanMarkerKind, tok, lineNo));\n } else if (keyword === \"callout\") {\n ast.callouts.push(parseCallout(tokenize(raw).slice(1), lineNo));\n } else if (keyword === \"dim\" || keyword === \"measure\") {\n ast.dimensions.push(parseDimension(tok, lineNo));\n } else if (keyword === \"north\") {\n ast.north = tok.length ? parseNum(tok.shift(), \"north\", lineNo) : 0;\n } else if (keyword === \"scale\") {\n ast.scale = parseNum(tok.shift(), \"scale\", lineNo);\n } else if (keyword === \"legend\") {\n const v = parseId(tok.shift(), \"legend (on|off)\", lineNo).toLowerCase();\n ast.legend = v !== \"off\";\n } else {\n throw new SiteplanParseError(`unknown siteplan keyword \"${keyword}\"`, lineNo);\n }\n }\n\n if (!sawHeader) throw new SiteplanParseError(`missing siteplan header`, 1);\n return ast;\n}\n","import type {\n Point,\n SiteplanAst,\n SiteplanLayoutResult,\n SiteplanLegendItem,\n} from \"./types\";\n\nconst EMPTY_BOUNDS = { minX: 0, minY: 0, maxX: 100, maxY: 70 };\n\nfunction includePoint(bounds: { minX: number; minY: number; maxX: number; maxY: number }, p: Point, pad = 0): void {\n bounds.minX = Math.min(bounds.minX, p.x - pad);\n bounds.minY = Math.min(bounds.minY, p.y - pad);\n bounds.maxX = Math.max(bounds.maxX, p.x + pad);\n bounds.maxY = Math.max(bounds.maxY, p.y + pad);\n}\n\nfunction polygonArea(points: Point[]): number {\n let sum = 0;\n for (let i = 0; i < points.length; i++) {\n const a = points[i]!;\n const b = points[(i + 1) % points.length]!;\n sum += a.x * b.y - b.x * a.y;\n }\n return Math.abs(sum) / 2;\n}\n\nfunction legendItems(ast: SiteplanAst): SiteplanLegendItem[] {\n const seen = new Set<string>();\n const items: SiteplanLegendItem[] = [];\n const add = (key: string, label: string): void => {\n if (seen.has(key)) return;\n seen.add(key);\n items.push({ key, label });\n };\n for (const p of ast.polygons) add(p.role, p.role === \"parcel\" ? \"Parcel boundary\" : p.role);\n for (const p of ast.paths) add(p.role, p.role);\n for (const l of ast.lines) add(l.role, l.role);\n for (const m of ast.markers) add(m.kind, m.kind);\n return items;\n}\n\nexport function layoutSiteplan(ast: SiteplanAst): SiteplanLayoutResult {\n const bounds = { minX: Infinity, minY: Infinity, maxX: -Infinity, maxY: -Infinity };\n const warnings: string[] = [];\n\n for (const p of ast.polygons) {\n for (const pt of p.points) includePoint(bounds, pt);\n if (p.points.length >= 3 && polygonArea(p.points) < 1) {\n warnings.push(`${p.role} \"${p.id}\" has very small area — check point order or units`);\n }\n }\n for (const p of ast.paths) for (const pt of p.points) includePoint(bounds, pt, p.width / 2);\n for (const l of ast.lines) for (const pt of l.points) includePoint(bounds, pt, 2);\n for (const m of ast.markers) includePoint(bounds, m.at, m.size / 2);\n for (const c of ast.callouts) {\n includePoint(bounds, c.at, 8);\n includePoint(bounds, c.to);\n }\n for (const d of ast.dimensions) {\n includePoint(bounds, d.from, 5);\n includePoint(bounds, d.to, 5);\n }\n\n const finalBounds = Number.isFinite(bounds.minX) ? bounds : { ...EMPTY_BOUNDS };\n\n return {\n title: ast.title,\n unit: ast.unit,\n north: ast.north,\n scale: ast.scale,\n legend: ast.legend,\n polygons: ast.polygons,\n paths: ast.paths,\n lines: ast.lines,\n markers: ast.markers,\n callouts: ast.callouts,\n dimensions: ast.dimensions,\n bounds: finalBounds,\n warnings,\n legendItems: legendItems(ast),\n };\n}\n\nexport function formatSiteLength(n: number, unit: \"ft\" | \"m\"): string {\n if (unit === \"ft\") return `${Math.round(n)} ft`;\n return `${Math.round(n * 10) / 10} m`;\n}\n","import type { RenderConfig } from \"../../core/types\";\nimport {\n circle,\n defs,\n desc as svgDesc,\n el,\n group,\n line as svgLine,\n path as svgPath,\n polygon as svgPolygon,\n rect,\n svgRoot,\n text as svgText,\n title as svgTitle,\n} from \"../../core/svg\";\nimport { DEFAULT_FONT_FAMILY, TITLE } from \"../../core/theme\";\nimport { parseSiteplan } from \"./parser\";\nimport { formatSiteLength, layoutSiteplan } from \"./layout\";\nimport type {\n Point,\n SiteplanLayoutResult,\n SiteplanMarkerKind,\n SiteplanPath,\n SiteplanPolygon,\n} from \"./types\";\n\nconst PAPER = \"#ffffff\";\nconst INK = \"#111827\";\nconst MUTED = \"#5f6b7a\";\nconst PLAN_LINE = \"#1f2937\";\nconst FAINT_LINE = \"#d6dbe3\";\nconst LEGEND_COLS = 1;\nconst LEGEND_LIMIT = 9;\nconst SIDE_PANEL_W = 188;\nconst SIDE_PANEL_GAP = 24;\n\nconst r2 = (n: number): number => Math.round(n * 100) / 100;\n\nexport function renderSiteplan(text: string, config?: RenderConfig): string {\n return renderSiteplanLayout(layoutSiteplan(parseSiteplan(text)), config);\n}\n\nfunction polyPoints(points: Point[], sx: (n: number) => number, sy: (n: number) => number): string {\n return points.map((p) => `${sx(p.x).toFixed(1)},${sy(p.y).toFixed(1)}`).join(\" \");\n}\n\nfunction pathD(points: Point[], sx: (n: number) => number, sy: (n: number) => number): string {\n return points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${sx(p.x).toFixed(1)} ${sy(p.y).toFixed(1)}`).join(\" \");\n}\n\nfunction centroid(points: Point[]): Point {\n let x = 0;\n let y = 0;\n for (const p of points) {\n x += p.x;\n y += p.y;\n }\n return { x: x / points.length, y: y / points.length };\n}\n\nexport function renderSiteplanLayout(lay: SiteplanLayoutResult, config?: RenderConfig): string {\n const fontFamily = config?.fontFamily ?? DEFAULT_FONT_FAMILY;\n const pad = config?.padding ?? 28;\n const titleBand = lay.title ? 34 : 14;\n const hasPanel = (lay.legend && lay.legendItems.length > 0) || lay.north !== undefined || lay.scale !== undefined;\n const panelW = hasPanel ? SIDE_PANEL_W : 0;\n const panelGap = hasPanel ? SIDE_PANEL_GAP : 0;\n const targetW = 980;\n const targetH = 660;\n const spanX = Math.max(1, lay.bounds.maxX - lay.bounds.minX);\n const spanY = Math.max(1, lay.bounds.maxY - lay.bounds.minY);\n const drawingMaxW = targetW - pad * 2 - panelW - panelGap;\n const drawingMaxH = targetH - pad * 2 - titleBand;\n const scale = Math.min(drawingMaxW / spanX, drawingMaxH / spanY);\n const drawingW = spanX * scale;\n const drawingH = spanY * scale;\n const contentW = drawingW + panelW + panelGap;\n const width = Math.max(520, contentW + pad * 2);\n const height = Math.max(420, drawingH + pad * 2 + titleBand);\n const contentX = pad + Math.max(0, (width - pad * 2 - contentW) / 2);\n const plotY = titleBand + pad + Math.max(0, (height - titleBand - pad * 2 - drawingH) / 2);\n const panelX = contentX + drawingW + panelGap;\n const ox = contentX - lay.bounds.minX * scale;\n const oy = plotY - lay.bounds.minY * scale;\n const sx = (n: number) => ox + n * scale;\n const sy = (n: number) => oy + n * scale;\n const len = (n: number) => n * scale;\n\n const style = el(\n \"style\",\n {},\n `\n.sx-sp-bg { fill: ${PAPER}; }\n.sx-sp-sheet { fill: none; stroke: ${PLAN_LINE}; stroke-width: 1; }\n.sx-sp-sheet-rule { stroke: ${FAINT_LINE}; stroke-width: 1; }\n.sx-sp-title { fill: ${INK}; font-size: 15px; font-weight: ${TITLE.weight}; letter-spacing: 0; }\n.sx-sp-note { fill: ${MUTED}; font-size: 11px; }\n.sx-sp-parcel { stroke: #111827; stroke-width: 2.2; }\n.sx-sp-structure { stroke: #253041; stroke-width: 1.6; }\n.sx-sp-roofline { fill: none; stroke: #9aa4b2; stroke-width: 0.75; }\n.sx-sp-zone { stroke: #9aa4b2; stroke-width: 1; stroke-dasharray: 7 4; }\n.sx-sp-landscape { stroke: #899481; stroke-width: 0.9; }\n.sx-sp-parking { stroke: #8e99a8; stroke-width: 0.9; }\n.sx-sp-road { fill: none; stroke: #f1f3f6; stroke-linecap: butt; stroke-linejoin: round; }\n.sx-sp-road-center { fill: none; stroke: #9aa4b2; stroke-width: 0.9; stroke-linecap: butt; stroke-linejoin: round; }\n.sx-sp-driveway-edge { fill: none; stroke: #aeb8c4; stroke-linecap: round; stroke-linejoin: round; }\n.sx-sp-driveway { fill: none; stroke: #d8dde5; stroke-linecap: round; stroke-linejoin: round; }\n.sx-sp-driveway-mark { fill: none; stroke: ${PAPER}; stroke-width: 1.15; stroke-linecap: butt; stroke-dasharray: 7 7; }\n.sx-sp-driveway-arrow { fill: ${PAPER}; stroke: #8a94a3; stroke-width: 0.35; }\n.sx-sp-walkway, .sx-sp-trail { fill: none; stroke: #d7d0c3; stroke-linecap: round; stroke-linejoin: round; }\n.sx-sp-setback { fill: none; stroke: #6b7280; stroke-width: 1; stroke-dasharray: 8 5; }\n.sx-sp-easement { fill: none; stroke: #6b7280; stroke-width: 1; stroke-dasharray: 2 5; }\n.sx-sp-fence { fill: none; stroke: #344054; stroke-width: 1; stroke-dasharray: 8 3 1.5 3; }\n.sx-sp-utility { fill: none; stroke: #2563eb; stroke-width: 1; stroke-dasharray: 2 5; }\n.sx-sp-frontage { fill: none; stroke: #111827; stroke-width: 1.7; }\n.sx-sp-boundary { fill: none; stroke: #111827; stroke-width: 1.8; }\n.sx-sp-dim { fill: none; stroke: #475467; stroke-width: 0.9; }\n.sx-sp-callout { fill: none; stroke: #344054; stroke-width: 0.9; marker-end: url(#sx-sp-arrow); }\n.sx-sp-label { fill: ${INK}; font-size: 10.2px; font-weight: 600; paint-order: stroke; stroke: ${PAPER}; stroke-width: 3.4px; stroke-linejoin: round; }\n.sx-sp-small { fill: ${INK}; font-size: 8.8px; paint-order: stroke; stroke: ${PAPER}; stroke-width: 2.8px; stroke-linejoin: round; }\n.sx-sp-marker { fill: #fbfdf8; stroke: #3f684b; stroke-width: 1.05; }\n.sx-sp-marker-line { fill: none; stroke: #3f684b; stroke-width: 0.7; }\n.sx-sp-car { fill: #fafafa; stroke: #667085; stroke-width: 0.9; }\n.sx-sp-pin { fill: #ffffff; stroke: #b42318; stroke-width: 1; }\n.sx-sp-entry { fill: #ffffff; stroke: #475467; stroke-width: 1; }\n.sx-sp-legend-box { fill: ${PAPER}; stroke: #cfd5dd; stroke-width: 0.9; }\n.sx-sp-legend-title { fill: ${INK}; font-size: 10px; font-weight: 700; }\n.sx-sp-legend-text { fill: ${MUTED}; font-size: 9.4px; }\n`.trim()\n );\n\n const children: string[] = [\n svgTitle(lay.title),\n svgDesc(`Site plan with ${lay.polygons.length} polygons, ${lay.paths.length} paths, ${lay.lines.length} line features, and ${lay.markers.length} markers.`),\n defs([\n el(\"marker\", { id: \"sx-sp-arrow\", markerWidth: 8, markerHeight: 8, refX: 7, refY: 4, orient: \"auto\" }, [\n svgPath({ d: \"M1 1 L7 4 L1 7 Z\", fill: \"#344054\" }),\n ]),\n el(\"pattern\", { id: \"sx-sp-structure-hatch\", patternUnits: \"userSpaceOnUse\", width: 7, height: 7 }, [\n rect({ x: 0, y: 0, width: 7, height: 7, fill: \"#fbfcfd\" }),\n svgPath({ d: \"M-2 7 L7 -2 M2 9 L9 2\", stroke: \"#d6dbe3\", \"stroke-width\": 0.65 }),\n ]),\n el(\"pattern\", { id: \"sx-sp-parking-hatch\", patternUnits: \"userSpaceOnUse\", width: 24, height: 18 }, [\n rect({ x: 0, y: 0, width: 24, height: 18, fill: \"#f4f6f8\" }),\n svgPath({ d: \"M4 18 L4 6 M12 18 L12 6 M20 18 L20 6\", stroke: \"#c5ccd6\", \"stroke-width\": 0.8 }),\n ]),\n el(\"pattern\", { id: \"sx-sp-landscape-dot\", patternUnits: \"userSpaceOnUse\", width: 12, height: 12 }, [\n rect({ x: 0, y: 0, width: 12, height: 12, fill: \"#fcfdf9\" }),\n circle({ cx: 3, cy: 4, r: 0.8, fill: \"#a6b99d\" }),\n circle({ cx: 9, cy: 9, r: 0.8, fill: \"#a6b99d\" }),\n ]),\n ]),\n style,\n rect({ x: 0, y: 0, width, height, class: \"sx-sp-bg\" }),\n rect({ x: 8, y: 8, width: r2(width - 16), height: r2(height - 16), class: \"sx-sp-sheet\" }),\n ];\n\n if (lay.title) {\n children.push(svgText({ x: pad, y: 26, class: \"sx-sp-title\", \"font-family\": fontFamily, \"text-anchor\": \"start\" }, lay.title));\n children.push(svgLine({ x1: pad, y1: titleBand, x2: r2(width - pad), y2: titleBand, class: \"sx-sp-sheet-rule\" }));\n }\n\n const roads: string[] = [];\n const surfaces: string[] = [];\n const structures: string[] = [];\n const paths: string[] = [];\n const overlays: string[] = [];\n const dims: string[] = [];\n const markers: string[] = [];\n const callouts: string[] = [];\n const labels: string[] = [];\n for (const p of lay.paths.filter((p) => p.role === \"road\")) {\n roads.push(renderPath(p, sx, sy, len, true));\n if (p.label) labels.push(labelOnLine(p.points, p.label, sx, sy, fontFamily, \"sx-sp-small\", -4));\n }\n for (const p of lay.polygons) {\n if (p.role === \"structure\") structures.push(renderPolygon(p, sx, sy, fontFamily));\n else surfaces.push(renderPolygon(p, sx, sy, fontFamily));\n }\n for (const p of lay.paths.filter((p) => p.role !== \"road\")) {\n paths.push(renderPath(p, sx, sy, len, false));\n if (p.label) labels.push(labelOnLine(p.points, p.label, sx, sy, fontFamily, \"sx-sp-small\", -5));\n }\n for (const l of lay.lines) {\n const d = pathD(l.points, sx, sy);\n overlays.push(svgPath({ d, class: `sx-sp-${l.role}`, \"data-line\": l.id }));\n if (l.label) labels.push(labelOnLine(l.points, l.label, sx, sy, fontFamily, \"sx-sp-small\", l.role === \"frontage\" ? 11 : -5));\n }\n for (const d of lay.dimensions) dims.push(renderDimension(d.from, d.to, d.label, sx, sy, fontFamily));\n for (const m of lay.markers) markers.push(renderMarker(m.kind, sx(m.at.x), sy(m.at.y), len(m.size), m.rotate, m.label, fontFamily));\n for (const c of lay.callouts) {\n callouts.push(svgPath({ d: `M${r2(sx(c.at.x))} ${r2(sy(c.at.y))} L${r2(sx(c.to.x))} ${r2(sy(c.to.y))}`, class: \"sx-sp-callout\" }));\n callouts.push(svgText({ x: sx(c.at.x), y: sy(c.at.y) - 5, class: \"sx-sp-small\", \"font-family\": fontFamily, \"text-anchor\": \"middle\" }, c.label));\n }\n const scene = [\n group({ class: \"sx-sp-roads\" }, roads),\n group({ class: \"sx-sp-surfaces\" }, surfaces),\n group({ class: \"sx-sp-structures\" }, structures),\n group({ class: \"sx-sp-paths\" }, paths),\n group({ class: \"sx-sp-overlays\" }, overlays),\n group({ class: \"sx-sp-dimensions\" }, dims),\n group({ class: \"sx-sp-markers\" }, markers),\n group({ class: \"sx-sp-callouts\" }, callouts),\n group({ class: \"sx-sp-labels\" }, labels),\n ];\n\n children.push(group({ class: \"sx-siteplan-scene\" }, scene));\n if (hasPanel) {\n children.push(svgLine({ x1: r2(panelX - 12), y1: titleBand + 14, x2: r2(panelX - 12), y2: r2(height - pad), class: \"sx-sp-sheet-rule\" }));\n const panelParts: string[] = [];\n let cursorY = titleBand + pad + 36;\n if (lay.north !== undefined) {\n panelParts.push(renderNorth(panelX + panelW / 2, cursorY, lay.north, fontFamily));\n cursorY += 72;\n }\n if (lay.legend && lay.legendItems.length) {\n panelParts.push(renderLegend(lay, panelX, cursorY, panelW, fontFamily));\n cursorY += 34 + Math.ceil(Math.min(lay.legendItems.length, LEGEND_LIMIT) / LEGEND_COLS) * 20;\n }\n if (lay.scale) {\n const scaleWidth = Math.min(Math.max(52, len(lay.scale)), panelW - 18);\n panelParts.push(renderScaleBar(panelX + 4, Math.max(cursorY + 26, height - pad - 34), scaleWidth, formatSiteLength(lay.scale, lay.unit), fontFamily));\n }\n children.push(group({ class: \"sx-sp-accessories\" }, panelParts));\n }\n\n return svgRoot({ width: Math.round(width), height: Math.round(height), viewBox: `0 0 ${Math.round(width)} ${Math.round(height)}`, class: \"sx-sp\", role: \"img\" }, children);\n}\n\nfunction renderPolygon(p: SiteplanPolygon, sx: (n: number) => number, sy: (n: number) => number, fontFamily: string): string {\n const c = centroid(p.points);\n const attrs: Record<string, string | number | undefined> = {\n points: polyPoints(p.points, sx, sy),\n class: `sx-sp-${p.role}`,\n \"data-polygon\": p.id,\n fill: p.fill ?? defaultPolygonFill(p.role),\n };\n return group({ class: \"sx-sp-polygon\" }, [\n svgPolygon(attrs),\n ...(p.role === \"structure\" ? renderRoofLines(p.points, sx, sy) : []),\n ...(p.label\n ? [svgText({ x: sx(c.x), y: sy(c.y), class: \"sx-sp-label\", \"font-family\": fontFamily, \"text-anchor\": \"middle\", \"dominant-baseline\": \"central\" }, p.label)]\n : []),\n ]);\n}\n\nfunction defaultPolygonFill(role: SiteplanPolygon[\"role\"]): string {\n switch (role) {\n case \"parcel\":\n return \"#fffefd\";\n case \"structure\":\n return \"url(#sx-sp-structure-hatch)\";\n case \"zone\":\n return \"#fbfdf8\";\n case \"landscape\":\n return \"url(#sx-sp-landscape-dot)\";\n case \"parking\":\n return \"url(#sx-sp-parking-hatch)\";\n }\n}\n\nfunction renderRoofLines(points: Point[], sx: (n: number) => number, sy: (n: number) => number): string[] {\n if (points.length < 4 || points.length > 8) return [];\n const c = centroid(points);\n return points.map((p) => svgLine({ x1: sx(c.x), y1: sy(c.y), x2: sx(p.x), y2: sy(p.y), class: \"sx-sp-roofline\" }));\n}\n\nfunction renderPath(p: SiteplanPath, sx: (n: number) => number, sy: (n: number) => number, len: (n: number) => number, road: boolean): string {\n const d = pathD(p.points, sx, sy);\n const ratio = road ? 0.44 : p.role === \"driveway\" ? 0.42 : 0.34;\n const maxWidth = road ? 44 : p.role === \"driveway\" ? 24 : 16;\n const visualWidth = Math.min(Math.max(2.5, len(p.width) * ratio), maxWidth);\n if (p.role === \"driveway\") {\n const parts = [\n svgPath({ d, class: \"sx-sp-driveway-edge\", \"stroke-width\": r2(visualWidth + 1.8), \"data-path\": p.id }),\n svgPath({ d, class: \"sx-sp-driveway\", \"stroke-width\": visualWidth }),\n ];\n if (p.width >= 12) parts.push(svgPath({ d, class: \"sx-sp-driveway-mark\" }));\n if (p.width >= 14) parts.push(...renderDrivewayArrows(p.points, sx, sy, visualWidth));\n return group({ class: \"sx-sp-path sx-sp-path-driveway\" }, parts);\n }\n const parts = [svgPath({ d, class: `sx-sp-${p.role}`, \"stroke-width\": visualWidth, \"data-path\": p.id })];\n if (road) parts.push(svgPath({ d, class: \"sx-sp-road-center\" }));\n return group({ class: `sx-sp-path sx-sp-path-${p.role}` }, parts);\n}\n\ninterface ScreenPoint {\n x: number;\n y: number;\n}\n\nfunction screenPoints(points: Point[], sx: (n: number) => number, sy: (n: number) => number): ScreenPoint[] {\n return points.map((p) => ({ x: sx(p.x), y: sy(p.y) }));\n}\n\nfunction polylineLength(points: ScreenPoint[]): number {\n let total = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i]!;\n const b = points[i + 1]!;\n total += Math.hypot(b.x - a.x, b.y - a.y);\n }\n return total;\n}\n\nfunction samplePolyline(points: ScreenPoint[], distance: number): { x: number; y: number; angle: number } {\n let walked = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i]!;\n const b = points[i + 1]!;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const seg = Math.hypot(dx, dy);\n if (walked + seg >= distance) {\n const t = seg === 0 ? 0 : (distance - walked) / seg;\n return {\n x: a.x + dx * t,\n y: a.y + dy * t,\n angle: (Math.atan2(dy, dx) * 180) / Math.PI,\n };\n }\n walked += seg;\n }\n const a = points[Math.max(0, points.length - 2)]!;\n const b = points[points.length - 1]!;\n return { x: b.x, y: b.y, angle: (Math.atan2(b.y - a.y, b.x - a.x) * 180) / Math.PI };\n}\n\nfunction renderDrivewayArrows(points: Point[], sx: (n: number) => number, sy: (n: number) => number, visualWidth: number): string[] {\n const screen = screenPoints(points, sx, sy);\n const total = polylineLength(screen);\n if (total < 64) return [];\n const count = Math.min(3, Math.max(1, Math.floor(total / 180)));\n const size = Math.min(Math.max(visualWidth * 0.44, 7), 12);\n const arrows: string[] = [];\n for (let i = 0; i < count; i++) {\n const f = count === 1 ? 0.52 : (i + 1) / (count + 1);\n const s = samplePolyline(screen, total * f);\n arrows.push(renderDrivewayArrow(s.x, s.y, s.angle, size));\n }\n return arrows;\n}\n\nfunction renderDrivewayArrow(x: number, y: number, angle: number, size: number): string {\n const s = size;\n const d =\n `M${r2(-s * 0.55)} ${r2(-s * 0.18)} L${r2(s * 0.12)} ${r2(-s * 0.18)} ` +\n `L${r2(s * 0.12)} ${r2(-s * 0.4)} L${r2(s * 0.62)} 0 ` +\n `L${r2(s * 0.12)} ${r2(s * 0.4)} L${r2(s * 0.12)} ${r2(s * 0.18)} ` +\n `L${r2(-s * 0.55)} ${r2(s * 0.18)} Z`;\n return group({ class: \"sx-sp-driveway-arrow-g\", transform: `translate(${r2(x)},${r2(y)}) rotate(${r2(angle)})` }, [\n svgPath({ d, class: \"sx-sp-driveway-arrow\" }),\n ]);\n}\n\nfunction labelOnLine(points: Point[], label: string, sx: (n: number) => number, sy: (n: number) => number, fontFamily: string, cls: string, yOffset: number): string {\n let best = { a: points[0]!, b: points[Math.min(1, points.length - 1)]!, dist: -1 };\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i]!;\n const b = points[i + 1]!;\n const dx = sx(b.x) - sx(a.x);\n const dy = sy(b.y) - sy(a.y);\n const dist = Math.hypot(dx, dy);\n if (dist > best.dist) best = { a, b, dist };\n }\n const ax = sx(best.a.x);\n const ay = sy(best.a.y);\n const bx = sx(best.b.x);\n const by = sy(best.b.y);\n const dx = bx - ax;\n const dy = by - ay;\n const dist = Math.max(1, Math.hypot(dx, dy));\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI;\n if (angle > 90) angle -= 180;\n if (angle < -90) angle += 180;\n const x = r2((ax + bx) / 2 + (-dy / dist) * yOffset);\n const y = r2((ay + by) / 2 + (dx / dist) * yOffset);\n return svgText(\n {\n x,\n y,\n class: cls,\n \"font-family\": fontFamily,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": \"central\",\n transform: Math.abs(angle) > 3 ? `rotate(${r2(angle)} ${x} ${y})` : undefined,\n },\n label\n );\n}\n\nfunction renderDimension(from: Point, to: Point, label: string, sx: (n: number) => number, sy: (n: number) => number, fontFamily: string): string {\n const x1 = sx(from.x);\n const y1 = sy(from.y);\n const x2 = sx(to.x);\n const y2 = sy(to.y);\n const vertical = Math.abs(y2 - y1) > Math.abs(x2 - x1);\n const tick = 3.8;\n const tickA = (x: number, y: number): string => svgLine({ x1: r2(x - tick), y1: r2(y + tick), x2: r2(x + tick), y2: r2(y - tick), class: \"sx-sp-dim\" });\n const midX = r2((x1 + x2) / 2);\n const midY = r2((y1 + y2) / 2);\n const textAttrs: Record<string, string | number | undefined> = {\n class: \"sx-sp-small\",\n \"font-family\": fontFamily,\n \"text-anchor\": \"middle\",\n };\n return group({ class: \"sx-sp-measure\" }, [\n svgLine({ x1, y1, x2, y2, class: \"sx-sp-dim\" }),\n tickA(x1, y1),\n tickA(x2, y2),\n svgText(\n vertical\n ? { ...textAttrs, x: r2(midX - 6), y: midY, transform: `rotate(-90 ${r2(midX - 6)} ${midY})` }\n : { ...textAttrs, x: midX, y: r2(midY - 5) },\n label\n ),\n ]);\n}\n\nfunction renderMarker(kind: SiteplanMarkerKind, x: number, y: number, sizePx: number, rotate: number, label: string | undefined, fontFamily: string): string {\n const s = Math.max(8, sizePx);\n const parts: string[] = [];\n if (kind === \"tree\") {\n parts.push(circle({ cx: x, cy: y, r: s / 2, class: \"sx-sp-marker\", \"data-marker\": kind }));\n parts.push(circle({ cx: x, cy: y, r: s * 0.28, class: \"sx-sp-marker\" }));\n parts.push(svgLine({ x1: x - s * 0.42, y1: y, x2: x + s * 0.42, y2: y, class: \"sx-sp-marker-line\" }));\n parts.push(svgLine({ x1: x, y1: y - s * 0.42, x2: x, y2: y + s * 0.42, class: \"sx-sp-marker-line\" }));\n } else if (kind === \"car\") {\n parts.push(\n group({ transform: `translate(${x},${y}) rotate(${rotate})`, \"data-marker\": kind }, [\n rect({ x: -s * 0.28, y: -s * 0.5, width: s * 0.56, height: s, rx: s * 0.12, class: \"sx-sp-car\" }),\n svgLine({ x1: -s * 0.2, y1: -s * 0.2, x2: s * 0.2, y2: -s * 0.2, class: \"sx-sp-car\" }),\n svgLine({ x1: -s * 0.2, y1: s * 0.22, x2: s * 0.2, y2: s * 0.22, class: \"sx-sp-car\" }),\n ])\n );\n } else {\n const cls = kind === \"entry\" ? \"sx-sp-entry\" : kind === \"pin\" ? \"sx-sp-pin\" : \"sx-sp-marker\";\n parts.push(circle({ cx: x, cy: y, r: s / 3, class: cls, \"data-marker\": kind }));\n }\n if (label) parts.push(svgText({ x, y: y - s / 2 - 5, class: \"sx-sp-small\", \"font-family\": fontFamily, \"text-anchor\": \"middle\" }, label));\n return group({ class: `sx-sp-marker-${kind}` }, parts);\n}\n\nfunction renderNorth(x: number, y: number, deg: number, fontFamily: string): string {\n return group({ class: \"sx-sp-north\", transform: `translate(${x},${y})` }, [\n circle({ cx: 0, cy: 0, r: 17, fill: \"none\", stroke: \"#475467\", \"stroke-width\": 0.9 }),\n group({ transform: `rotate(${deg})` }, [\n svgPath({ d: \"M0 -14 L5 5 L0 1 L-5 5 Z\", fill: \"#344054\" }),\n svgLine({ x1: 0, y1: 1, x2: 0, y2: 13, stroke: \"#344054\", \"stroke-width\": 1.1 }),\n ]),\n svgText({ x: 0, y: -22, class: \"sx-sp-small\", \"font-family\": fontFamily, \"text-anchor\": \"middle\" }, \"N\"),\n ]);\n}\n\nfunction renderScaleBar(x: number, y: number, w: number, label: string, fontFamily: string): string {\n const ww = Math.max(36, w);\n const seg = ww / 4;\n const bars = [0, 1, 2, 3].map((i) =>\n rect({ x: r2(x + seg * i), y: r2(y - 4), width: r2(seg), height: 8, fill: i % 2 === 0 ? \"#111827\" : PAPER, stroke: \"#111827\", \"stroke-width\": 0.7 })\n );\n return group({ class: \"sx-sp-scale\" }, [\n ...bars,\n svgText({ x: r2(x + ww / 2), y: r2(y - 10), class: \"sx-sp-small\", \"font-family\": fontFamily, \"text-anchor\": \"middle\" }, label),\n svgText({ x, y: r2(y + 17), class: \"sx-sp-small\", \"font-family\": fontFamily, \"text-anchor\": \"middle\" }, \"0\"),\n ]);\n}\n\nfunction renderLegend(lay: SiteplanLayoutResult, x: number, y: number, availableWidth: number, fontFamily: string): string {\n const parts: string[] = [];\n const colW = Math.max(160, availableWidth / LEGEND_COLS);\n const rowH = 20;\n const items = lay.legendItems.slice(0, LEGEND_LIMIT);\n const rows = Math.ceil(items.length / LEGEND_COLS);\n const boxH = 26 + rows * rowH + 10;\n parts.push(rect({ x, y: r2(y - 16), width: availableWidth, height: boxH, rx: 3, class: \"sx-sp-legend-box\" }));\n parts.push(svgText({ x: x + 10, y: y, class: \"sx-sp-legend-title\", \"font-family\": fontFamily }, \"Legend\"));\n for (const [i, item] of items.entries()) {\n const cx = x + (i % LEGEND_COLS) * colW;\n const cy = y + 24 + Math.floor(i / LEGEND_COLS) * rowH;\n parts.push(renderLegendSymbol(item.key, cx + 10, cy - 4));\n parts.push(svgText({ x: cx + 48, y: cy, class: \"sx-sp-legend-text\", \"font-family\": fontFamily }, item.label));\n }\n return group({ class: \"sx-sp-legend\" }, parts);\n}\n\nfunction renderLegendSymbol(key: string, x: number, y: number): string {\n if (key === \"tree\") return circle({ cx: x + 14, cy: y - 1, r: 6, class: \"sx-sp-marker\" });\n if (key === \"pin\" || key === \"entry\" || key === \"hydrant\" || key === \"well\") {\n return circle({ cx: x + 14, cy: y - 1, r: 5, class: `sx-sp-${key === \"pin\" ? \"pin\" : \"entry\"}` });\n }\n if ([\"road\", \"driveway\", \"walkway\", \"trail\"].includes(key)) {\n const width = key === \"road\" ? 7 : key === \"driveway\" ? 5 : 4;\n if (key === \"driveway\") {\n return group({ class: \"sx-sp-legend-driveway\" }, [\n svgLine({ x1: x, y1: y, x2: x + 28, y2: y, class: \"sx-sp-driveway-edge\", \"stroke-width\": width + 2 }),\n svgLine({ x1: x, y1: y, x2: x + 28, y2: y, class: \"sx-sp-driveway\", \"stroke-width\": width }),\n svgLine({ x1: x + 3, y1: y, x2: x + 25, y2: y, class: \"sx-sp-driveway-mark\" }),\n ]);\n }\n return svgLine({ x1: x, y1: y, x2: x + 28, y2: y, class: `sx-sp-${key}`, \"stroke-width\": width });\n }\n if ([\"setback\", \"easement\", \"fence\", \"utility\", \"frontage\", \"boundary\"].includes(key)) {\n return svgLine({ x1: x, y1: y, x2: x + 28, y2: y, class: `sx-sp-${key}` });\n }\n const fill = key === \"parcel\" ? \"#fffefd\" : key === \"structure\" ? \"url(#sx-sp-structure-hatch)\" : key === \"parking\" ? \"url(#sx-sp-parking-hatch)\" : key === \"landscape\" ? \"url(#sx-sp-landscape-dot)\" : \"#fffefd\";\n return rect({ x, y: y - 7, width: 28, height: 12, rx: 1, class: `sx-sp-${key}`, fill });\n}\n","import type { DiagramPlugin, RenderConfig } from \"../../core/types\";\nimport type { SchematexDiagnostic } from \"../../core/diagnostics\";\nimport { parseSiteplan } from \"./parser\";\nimport { layoutSiteplan } from \"./layout\";\nimport { renderSiteplan } from \"./renderer\";\n\nexport const siteplan: DiagramPlugin = {\n type: \"siteplan\" as DiagramPlugin[\"type\"],\n detect(text: string): boolean {\n for (const raw of text.split(/\\r?\\n/)) {\n const t = raw.trim();\n if (!t || t.startsWith(\"#\") || t.startsWith(\"//\")) continue;\n return /^(siteplan|plotplan|parcelmap|propertymap)\\b/i.test(t);\n }\n return false;\n },\n parse: parseSiteplan,\n render(text: string, config?: RenderConfig): string {\n return renderSiteplan(text, config);\n },\n lint(text: string): SchematexDiagnostic[] {\n try {\n const lay = layoutSiteplan(parseSiteplan(text));\n return lay.warnings.map((message) => ({\n severity: \"warning\",\n code: \"siteplan/warning\",\n message,\n fatal: false,\n }));\n } catch {\n return [];\n }\n },\n};\n\nexport { parseSiteplan, SiteplanParseError } from \"./parser\";\nexport { layoutSiteplan, formatSiteLength } from \"./layout\";\nexport { renderSiteplan, renderSiteplanLayout } from \"./renderer\";\nexport type * from \"./types\";\n"]}
|