{"version":3,"file":"element-mapper.cjs","sources":["../../../../src/state/data-mapping/element-mapper.ts"],"sourcesContent":["import { type dia } from '@joint/core';\nimport type { ElementJSONInit, ElementRecord } from '../../types/cell.types';\nimport { elementAttributes } from '../../presets/element-attributes';\n\n/**\n * Fill missing position/size/angle/data with framework defaults so the\n * record satisfies `Computed<ElementRecord>`'s required-field contract.\n * @param attributes\n */\nfunction ensureDefaults(attributes: dia.Element.JSONInit): dia.Element.JSONInit {\n  const { position, size } = attributes;\n  if (position !== undefined) {\n    attributes.position = { x: position.x ?? 0, y: position.y ?? 0 };\n  }\n  if (size !== undefined) {\n    attributes.size = { width: size.width ?? 0, height: size.height ?? 0 };\n  }\n  attributes.angle ??= 0;\n  attributes.data ??= {};\n  return attributes;\n}\n\n/**\n * Convert a React element record to JointJS-ready cell attributes.\n * applies preset transforms (`portMap` → native `ports`) and fills\n * framework defaults for `position` / `size` / `angle` / `data`.\n * @param element\n */\nexport function mapElementToAttributes(element: ElementJSONInit): dia.Element.JSONInit {\n  return ensureDefaults(elementAttributes(element) as dia.Element.JSONInit);\n}\n\n/**\n * Converts JointJS element attributes back to an element record.\n *\n * - `portMap` on model → return `portMap` (ignore native `ports`).\n * - No `portMap` → return `ports` as-is.\n *\n * 1:1 mapping, no `presentation` wrapper.\n * @param attributes\n */\nexport function mapAttributesToElement<ElementData = unknown>(\n  attributes: dia.Element.Attributes\n): ElementRecord<ElementData> {\n  const {\n    // Ports\n    portMap,\n    ports,\n    // 1:1 mapping of all other fields directly on the model\n    ...elementRecord\n  } = attributes;\n\n  // The element record can have either `portMap` or `ports`, but not both.\n  // If `portMap` is present, it means the `ports` were generated from it.\n  if (portMap) {\n    elementRecord.portMap = portMap;\n  } else if (ports) {\n    elementRecord.ports = ports;\n  }\n\n  return elementRecord as ElementRecord<ElementData>;\n}\n\n/** Function signature that maps raw JointJS element attributes to an `ElementRecord`. */\nexport type MapAttributesToElement<ElementData = unknown> =\n  typeof mapAttributesToElement<ElementData>;\n\n/** Function signature that maps an `ElementRecord` back to JointJS element attributes. */\nexport type MapElementToAttributes = typeof mapElementToAttributes;\n"],"names":["elementAttributes"],"mappings":"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"}