{
  "version": 3,
  "sources": ["../src/toSVG.ts"],
  "sourcesContent": ["import { Box2 } from 'vecks'\n\nimport denormalise from './denormalise'\nimport dimensionToSVG, { getDimensionGeometryBBox } from './dimensionToSVG'\nimport entityToPolyline from './entityToPolyline'\nimport getRGBForEntity from './getRGBForEntity'\nimport escapeXmlText from './util/escapeXmlText'\nimport logger from './util/logger'\nimport rgbToColorAttribute from './util/rgbToColorAttribute'\nimport rotate from './util/rotate'\nimport toPiecewiseBezier, { multiplicity } from './util/toPiecewiseBezier'\nimport transformBoundingBoxAndElement from './util/transformBoundingBoxAndElement'\n\nimport type {\n  ArcEntity,\n  CircleEntity,\n  DimensionEntity,\n  EllipseEntity,\n  Entity,\n  LeaderEntity,\n  MTextEntity,\n  ParsedDXF,\n  ShapeEntity,\n  SplineEntity,\n  TextEntity,\n  ToleranceEntity,\n  ToSVGOptions,\n} from './types'\nimport type { BoundsAndElement } from './types/svg'\n\nconst addFlipXIfApplicable = (\n  entity: Entity,\n  { bbox, element }: BoundsAndElement,\n): BoundsAndElement => {\n  if (entity.extrusionZ === -1) {\n    return {\n      bbox: new Box2()\n        .expandByPoint({ x: -bbox.min.x, y: bbox.min.y })\n        .expandByPoint({ x: -bbox.max.x, y: bbox.max.y }),\n      element: `<g transform=\"matrix(-1 0 0 1 0 0)\">\n        ${element}\n      </g>`,\n    }\n  } else {\n    return { bbox, element }\n  }\n}\n\n/**\n * Create a <path /> element. Interpolates curved entities.\n */\nconst polyline = (entity: Entity): BoundsAndElement => {\n  const vertices = entityToPolyline(entity as any)\n  const bbox = vertices.reduce(\n    (acc, [x, y]) => acc.expandByPoint({ x, y }),\n    new Box2(),\n  )\n  const d = vertices.reduce((acc, point, i) => {\n    acc += i === 0 ? 'M' : 'L'\n    acc += point[0] + ',' + point[1]\n    return acc\n  }, '')\n  // Empirically it appears that flipping horizontally does not apply to polyline\n  return transformBoundingBoxAndElement(\n    bbox,\n    `<path d=\"${d}\" />`,\n    entity.transforms ?? [],\n  )\n}\n\n/**\n * Create a <path /> element. Interpolates curved entities.\n * lwpolyline is the same as polyline but addFlipXIfApplicable does apply\n */\nconst lwpolyline = (entity: Entity): BoundsAndElement => {\n  const vertices = entityToPolyline(entity as any)\n  const bbox0 = vertices.reduce(\n    (acc, [x, y]) => acc.expandByPoint({ x, y }),\n    new Box2(),\n  )\n  const d = vertices.reduce((acc, point, i) => {\n    acc += i === 0 ? 'M' : 'L'\n    acc += point[0] + ',' + point[1]\n    return acc\n  }, '')\n  const element0 = `<path d=\"${d}\" />`\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(\n    bbox,\n    element,\n    entity.transforms ?? [],\n  )\n}\n\nconst leader = (entity: LeaderEntity): BoundsAndElement | null => {\n  if (!entity.vertices || entity.vertices.length < 2) return null\n\n  const bbox0 = entity.vertices.reduce(\n    (acc, p) => acc.expandByPoint({ x: p.x, y: p.y }),\n    new Box2(),\n  )\n  const d = entity.vertices.reduce((acc, p, i) => {\n    acc += i === 0 ? 'M' : 'L'\n    acc += p.x + ',' + p.y\n    return acc\n  }, '')\n\n  return transformBoundingBoxAndElement(\n    bbox0,\n    `<path d=\"${d}\" />`,\n    entity.transforms ?? [],\n  )\n}\n\n\n/**\n * Create a <circle /> element for the CIRCLE entity.\n */\nconst circle = (entity: CircleEntity): BoundsAndElement => {\n  const bbox0 = new Box2()\n    .expandByPoint({\n      x: entity.x + entity.r,\n      y: entity.y + entity.r,\n    })\n    .expandByPoint({\n      x: entity.x - entity.r,\n      y: entity.y - entity.r,\n    })\n  const element0 = `<circle cx=\"${entity.x}\" cy=\"${entity.y}\" r=\"${entity.r}\" />`\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\ninterface EllipticArcParams {\n  cx: number\n  cy: number\n  majorX: number\n  majorY: number\n  axisRatio: number\n  startAngle: number\n  endAngle: number\n  flipX?: boolean\n}\n\n/**\n * Create a a <path d=\"A...\" /> or <ellipse /> element for the ARC or ELLIPSE\n * DXF entity (<ellipse /> if start and end point are the same).\n */\nconst ellipseOrArc = (params: EllipticArcParams): BoundsAndElement => {\n  const { cx, cy, majorX, majorY, axisRatio, startAngle, endAngle } = params\n  const rx = Math.hypot(majorX, majorY)\n  const ry = axisRatio * rx\n  const rotationAngle = -Math.atan2(-majorY, majorX)\n\n  const bbox = bboxEllipseOrArc(params)\n\n  if (\n    Math.abs(startAngle - endAngle) < 1e-9 ||\n    Math.abs(startAngle - endAngle + Math.PI * 2) < 1e-9\n  ) {\n    // Use a native <ellipse> when start and end angles are the same, and\n    // arc paths with same start and end points don't render (at least on Safari)\n    const element = `<g transform=\"rotate(${(rotationAngle / Math.PI) * 180\n      } ${cx}, ${cy})\">\n      <ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" />\n    </g>`\n    return { bbox, element }\n  } else {\n    const startOffset = rotate(\n      {\n        x: Math.cos(startAngle) * rx,\n        y: Math.sin(startAngle) * ry,\n      },\n      rotationAngle,\n    )\n    const startPoint = {\n      x: cx + startOffset.x,\n      y: cy + startOffset.y,\n    }\n    const endOffset = rotate(\n      {\n        x: Math.cos(endAngle) * rx,\n        y: Math.sin(endAngle) * ry,\n      },\n      rotationAngle,\n    )\n    const endPoint = {\n      x: cx + endOffset.x,\n      y: cy + endOffset.y,\n    }\n    const adjustedEndAngle =\n      endAngle < startAngle ? endAngle + Math.PI * 2 : endAngle\n    const largeArcFlag = adjustedEndAngle - startAngle < Math.PI ? 0 : 1\n    const d = `M ${startPoint.x} ${startPoint.y} A ${rx} ${ry} ${(rotationAngle / Math.PI) * 180\n      } ${largeArcFlag} 1 ${endPoint.x} ${endPoint.y}`\n    const element = `<path d=\"${d}\" />`\n    return { bbox, element }\n  }\n}\n\n/**\n * Compute the bounding box of an elliptical arc, given the DXF entity parameters\n */\n\nconst bboxEllipseOrArc = (params: EllipticArcParams): Box2 => {\n  const { cx, cy, majorX, majorY, axisRatio } = params\n  let { startAngle, endAngle } = params\n\n  // The bounding box will be defined by the starting point of the ellipse, and ending point,\n  // and any extrema on the ellipse that are between startAngle and endAngle.\n  // The extrema are found by setting either the x or y component of the ellipse's\n  // tangent vector to zero and solving for the angle.\n\n  // Ensure start and end angles are > 0 and well-ordered\n  while (startAngle < 0) startAngle += Math.PI * 2\n  while (endAngle <= startAngle) endAngle += Math.PI * 2\n\n  // When rotated, the extrema of the ellipse will be found at these angles\n  const angles = []\n\n  if (Math.abs(majorX) < 1e-12 || Math.abs(majorY) < 1e-12) {\n    // Special case for majorX or majorY = 0\n    for (let i = 0; i < 4; i++) {\n      angles.push((i / 2) * Math.PI)\n    }\n  } else {\n    // reference https://github.com/bjnortier/dxf/issues/47#issuecomment-545915042\n    angles[0] = Math.atan((-majorY * axisRatio) / majorX) - Math.PI // Ensure angles < 0\n    angles[1] = Math.atan((majorX * axisRatio) / majorY) - Math.PI\n    angles[2] = angles[0] - Math.PI\n    angles[3] = angles[1] - Math.PI\n  }\n\n  // Remove angles not falling between start and end\n  for (let i = 4; i >= 0; i--) {\n    while (angles[i] < startAngle) angles[i] += Math.PI * 2\n    if (angles[i] > endAngle) {\n      angles.splice(i, 1)\n    }\n  }\n\n  // Also to consider are the starting and ending points:\n  angles.push(startAngle, endAngle)\n\n  // Compute points lying on the unit circle at these angles\n  const pts = angles.map((a) => ({\n    x: Math.cos(a),\n    y: Math.sin(a),\n  }))\n\n  // Transformation matrix, formed by the major and minor axes\n  const M = [\n    [majorX, -majorY * axisRatio],\n    [majorY, majorX * axisRatio],\n  ]\n\n  // Rotate, scale, and translate points\n  const rotatedPts = pts.map((p) => ({\n    x: p.x * M[0][0] + p.y * M[0][1] + cx,\n    y: p.x * M[1][0] + p.y * M[1][1] + cy,\n  }))\n\n  // Compute extents of bounding box\n  const bbox = rotatedPts.reduce((acc, p) => {\n    acc.expandByPoint(p)\n    return acc\n  }, new Box2())\n\n  return bbox\n}\n\n/**\n * An ELLIPSE is defined by the major axis, convert to X and Y radius with\n * a rotation angle\n */\nconst ellipse = (entity: EllipseEntity): BoundsAndElement => {\n  const { bbox: bbox0, element: element0 } = ellipseOrArc({\n    cx: entity.x,\n    cy: entity.y,\n    majorX: entity.majorX,\n    majorY: entity.majorY,\n    axisRatio: entity.axisRatio,\n    startAngle: entity.startAngle,\n    endAngle: entity.endAngle,\n  })\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\n/**\n * An ARC is an ellipse with equal radii\n */\nconst arc = (entity: ArcEntity): BoundsAndElement => {\n  const { bbox: bbox0, element: element0 } = ellipseOrArc({\n    cx: entity.x,\n    cy: entity.y,\n    majorX: entity.r,\n    majorY: 0,\n    axisRatio: 1,\n    startAngle: entity.startAngle,\n    endAngle: entity.endAngle,\n    flipX: entity.extrusionZ === -1,\n  })\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\n/**\n * Create a <text /> element for TEXT entity\n */\nconst text = (entity: TextEntity): BoundsAndElement => {\n  const x = entity.x ?? 0\n  const y = entity.y ?? 0\n  const height = entity.textHeight ?? 1\n  const rotation = entity.rotation ?? 0\n  const content = entity.string ?? ''\n\n  // Estimate text bounding box (approximate)\n  const textWidth = content.length * height * 0.6\n  const bbox0 = new Box2()\n    .expandByPoint({ x, y })\n    .expandByPoint({ x: x + textWidth, y: y + height })\n\n  const rotationDegrees = (rotation * 180) / Math.PI\n  const element0 = `<text x=\"${x}\" y=\"${y}\" font-size=\"${height}\" transform=\"rotate(${-rotationDegrees} ${x} ${y}) scale(1,-1) translate(0 ${-2 * y})\">${escapeXmlText(content)}</text>`\n\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\n/**\n * Create a <text /> element for MTEXT entity\n */\nconst mtext = (entity: MTextEntity): BoundsAndElement => {\n  const x = entity.x ?? 0\n  const y = entity.y ?? 0\n  const height = entity.nominalTextHeight ?? entity.textHeight ?? 1\n  const content = entity.string ?? ''\n\n  // Estimate text bounding box (approximate)\n  const textWidth = (entity.refRectangleWidth ?? content.length * height * 0.6)\n  const bbox0 = new Box2()\n    .expandByPoint({ x, y })\n    .expandByPoint({ x: x + textWidth, y: y + height })\n\n  // Calculate rotation from x-axis direction\n  const rotation = entity.xAxisX !== undefined && entity.xAxisY !== undefined\n    ? Math.atan2(entity.xAxisY, entity.xAxisX)\n    : 0\n  const rotationDegrees = (rotation * 180) / Math.PI\n  const element0 = `<text x=\"${x}\" y=\"${y}\" font-size=\"${height}\" transform=\"rotate(${-rotationDegrees} ${x} ${y}) scale(1,-1) translate(0 ${-2 * y})\">${escapeXmlText(content)}</text>`\n\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\n/**\n * Minimal <text /> fallback for TOLERANCE entities.\n * DXF uses special control codes; we preserve the raw string.\n */\nconst tolerance = (entity: ToleranceEntity): BoundsAndElement => {\n  const x = entity.insertionPoint?.x ?? 0\n  const y = entity.insertionPoint?.y ?? 0\n  const height = 1\n  const content = entity.text ?? ''\n\n  const rotation = entity.xAxisDirection\n    ? Math.atan2(entity.xAxisDirection.y, entity.xAxisDirection.x)\n    : 0\n  const rotationDegrees = (rotation * 180) / Math.PI\n\n  const textWidth = content.length * height * 0.6\n  const bbox0 = new Box2()\n    .expandByPoint({ x, y })\n    .expandByPoint({ x: x + textWidth, y: y + height })\n\n  const element0 = `<text x=\"${x}\" y=\"${y}\" font-size=\"${height}\" transform=\"rotate(${-rotationDegrees} ${x} ${y}) scale(1,-1) translate(0 ${-2 * y})\">${escapeXmlText(content)}</text>`\n\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\n/**\n * Minimal <text /> fallback for SHAPE entities.\n * Rendering SHX-based shapes is out of scope; we render the name as text.\n */\nconst shape = (entity: ShapeEntity): BoundsAndElement => {\n  const x = entity.insertionPoint?.x ?? 0\n  const y = entity.insertionPoint?.y ?? 0\n  const height = entity.size ?? 1\n  const rotation = entity.rotation ?? 0\n  const content = entity.name ?? ''\n\n  const textWidth = content.length * height * 0.6\n  const bbox0 = new Box2()\n    .expandByPoint({ x, y })\n    .expandByPoint({ x: x + textWidth, y: y + height })\n\n  const rotationDegrees = (rotation * 180) / Math.PI\n  const element0 = `<text x=\"${x}\" y=\"${y}\" font-size=\"${height}\" transform=\"rotate(${-rotationDegrees} ${x} ${y}) scale(1,-1) translate(0 ${-2 * y})\">${escapeXmlText(content)}</text>`\n\n  const { bbox, element } = addFlipXIfApplicable(entity, {\n    bbox: bbox0,\n    element: element0,\n  })\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\n/**\n * Create dimension visualization with DIMSTYLE support\n */\nconst dimension = (\n  entity: DimensionEntity,\n  dimStyle?: any,\n  options?: ToSVGOptions,\n  viewport?: { width: number; height: number },\n): BoundsAndElement => {\n  const result = dimensionToSVG(entity, dimStyle, options, viewport)\n  return transformBoundingBoxAndElement(\n    result.bbox,\n    result.element,\n    entity.transforms ?? [],\n  )\n}\n\nexport const piecewiseToPaths = (\n  k: number,\n  knots: number[],\n  controlPoints: Array<{ x: number; y: number }>,\n): string[] => {\n  const paths: string[] = []\n  let controlPointIndex = 0\n  let knotIndex = k\n  while (knotIndex < knots.length - k + 1) {\n    const m = multiplicity(knots, knotIndex)\n    const cp = controlPoints.slice(controlPointIndex, controlPointIndex + k)\n    if (k === 4) {\n      paths.push(\n        `<path d=\"M ${cp[0].x} ${cp[0].y} C ${cp[1].x} ${cp[1].y} ${cp[2].x} ${cp[2].y} ${cp[3].x} ${cp[3].y}\" />`,\n      )\n    } else if (k === 3) {\n      paths.push(\n        `<path d=\"M ${cp[0].x} ${cp[0].y} Q ${cp[1].x} ${cp[1].y} ${cp[2].x} ${cp[2].y}\" />`,\n      )\n    }\n    controlPointIndex += m\n    knotIndex += m\n  }\n  return paths\n}\n\nconst bezier = (entity: SplineEntity): BoundsAndElement => {\n  let bbox = new Box2()\n  for (const p of entity.controlPoints) {\n    bbox = bbox.expandByPoint(p)\n  }\n  const k = entity.degree + 1\n  const piecewise = toPiecewiseBezier(k, entity.controlPoints, entity.knots)\n  const paths = piecewiseToPaths(k, piecewise.knots, piecewise.controlPoints)\n  const element = `<g>${paths.join('')}</g>`\n  return transformBoundingBoxAndElement(bbox, element, entity.transforms ?? [])\n}\n\n/**\n * Switch the appropriate function on entity type. CIRCLE, ARC and ELLIPSE\n * produce native SVG elements, the rest produce interpolated polylines.\n */\nconst entityToBoundsAndElement = (\n  entity: Entity,\n  dimStyles?: { [name: string]: any },\n  options?: ToSVGOptions,\n  viewport?: { width: number; height: number },\n): BoundsAndElement | null => {\n  switch (entity.type) {\n    case 'CIRCLE':\n      return circle(entity as CircleEntity)\n    case 'ELLIPSE':\n      return ellipse(entity as EllipseEntity)\n    case 'ARC':\n      return arc(entity as ArcEntity)\n    case 'TEXT':\n      return text(entity as TextEntity)\n    case 'MTEXT':\n      return mtext(entity as MTextEntity)\n    case 'DIMENSION': {\n      const dimEntity = entity as DimensionEntity\n      const styleName = typeof dimEntity.styleName === 'string'\n        ? dimEntity.styleName\n        : undefined\n      const dimStyle = styleName && dimStyles\n        ? dimStyles[styleName]\n        : undefined\n      return dimension(dimEntity, dimStyle, options, viewport)\n    }\n    case 'SPLINE': {\n      const splineEntity = entity as SplineEntity\n      const hasWeights = splineEntity.weights?.some((w: number) => w !== 1)\n      if ((splineEntity.degree === 2 || splineEntity.degree === 3) && !hasWeights) {\n        try {\n          return bezier(splineEntity)\n        } catch (err) {\n          const error = err as Error\n          logger.warn('bezier conversion failed, using polyline:', error.message)\n          return polyline(entity)\n        }\n      } else {\n        return polyline(entity)\n      }\n    }\n    case 'LINE':\n    case 'RAY':\n    case 'XLINE':\n    case 'POLYLINE': {\n      return polyline(entity)\n    }\n    case 'SOLID':\n    case 'TRACE': {\n      return polyline(entity)\n    }\n    case 'LWPOLYLINE': {\n      return lwpolyline(entity)\n    }\n    case 'WIPEOUT': {\n      return polyline(entity)\n    }\n    case 'LEADER': {\n      return leader(entity as LeaderEntity)\n    }\n    case 'TOLERANCE': {\n      return tolerance(entity as ToleranceEntity)\n    }\n    case 'SHAPE': {\n      return shape(entity as ShapeEntity)\n    }\n    default:\n      logger.warn('entity type not supported in SVG rendering:', entity.type)\n      return null\n  }\n}\n\nexport default function toSVG(parsed: ParsedDXF, options: ToSVGOptions = {}): string {\n  const entities = denormalise(parsed)\n  const dimStyles = parsed.tables.dimStyles\n\n  const geometryBBox = entities.reduce((acc: Box2, entity: Entity): Box2 => {\n    if (entity.type === 'DIMENSION') {\n      const bbox = getDimensionGeometryBBox(entity as DimensionEntity)\n      if (bbox.valid) {\n        acc.expandByPoint(bbox.min)\n        acc.expandByPoint(bbox.max)\n      }\n      return acc\n    }\n\n    const boundsAndElement = entityToBoundsAndElement(entity, dimStyles, options)\n    if (boundsAndElement?.bbox.valid) {\n      acc.expandByPoint(boundsAndElement.bbox.min)\n      acc.expandByPoint(boundsAndElement.bbox.max)\n    }\n    return acc\n  }, new Box2())\n\n  const viewport = geometryBBox.valid\n    ? {\n      width: geometryBBox.max.x - geometryBBox.min.x,\n      height: geometryBBox.max.y - geometryBBox.min.y,\n    }\n    : {\n      width: 0,\n      height: 0,\n    }\n\n  const { bbox, elements } = entities.reduce(\n    (\n      acc: { bbox: Box2; elements: string[] },\n      entity: Entity,\n    ): { bbox: Box2; elements: string[] } => {\n      const rgb = getRGBForEntity(parsed.tables.layers, entity)\n      const boundsAndElement = entityToBoundsAndElement(entity, dimStyles, options, viewport)\n      // Ignore entities that don't produce SVG elements or have unsupported types\n      if (boundsAndElement) {\n        const { bbox, element } = boundsAndElement\n        // Ignore invalid bounding boxes\n        if (bbox.valid) {\n          acc.bbox.expandByPoint(bbox.min)\n          acc.bbox.expandByPoint(bbox.max)\n        }\n        const color = rgbToColorAttribute(rgb)\n        const handleAttr = options?.includeHandles ? ` data-handle=\"${entity.handle}\" data-type=\"${entity.type}\" data-layer=\"${entity.layer}\" ` : ''\n        if (entity.type === 'SOLID' || entity.type === 'TRACE') {\n          acc.elements.push(`<g fill=\"${color}\" stroke=\"none\" ${handleAttr}>${element}</g>`)\n        } else {\n          acc.elements.push(`<g stroke=\"${color}\" ${handleAttr}>${element}</g>`)\n        }\n      }\n      return acc\n    },\n    {\n      bbox: new Box2(),\n      elements: [],\n    },\n  )\n\n  const viewBox = bbox.valid\n    ? {\n      x: bbox.min.x,\n      y: -bbox.max.y,\n      width: bbox.max.x - bbox.min.x,\n      height: bbox.max.y - bbox.min.y,\n    }\n    : {\n      x: 0,\n      y: 0,\n      width: 0,\n      height: 0,\n    }\n  return `<?xml version=\"1.0\"?>\n<svg\n  xmlns=\"http://www.w3.org/2000/svg\"\n  xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\"\n  preserveAspectRatio=\"xMinYMin meet\"\n  viewBox=\"${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}\"\n  width=\"100%\" height=\"100%\"\n>\n  <g stroke=\"#000000\" stroke-width=\"0.1%\" fill=\"none\" transform=\"matrix(1,0,0,-1,0,0)\">\n    ${elements.join('\\n')}\n  </g>\n</svg>`\n}\n"],
  "mappings": "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",
  "names": ["entityToPolyline", "transformBoundingBoxAndElement", "rotate", "escapeXmlText", "dimensionToSVG", "toPiecewiseBezier", "logger", "denormalise", "bbox", "getRGBForEntity", "rgbToColorAttribute"]
}
