{"version":3,"file":"link-attributes.cjs","sources":["../../../src/presets/link-attributes.ts"],"sourcesContent":["import { util } from '@joint/core';\nimport { linkLabels } from './link-labels';\nimport { linkStyle } from './link-style';\nimport type { dia } from '@joint/core';\nimport type { LinkStyle } from './link-style';\nimport type { LinkLabel } from './link-labels';\n\n/**\n * Extra declarative link fields the React presets understand on top of a native\n * `dia.Link.Attributes`: `style`, `labelMap`, and `labelStyle`.\n * @group Types\n */\nexport interface LinkPresetAttributes {\n  /** Visual styling for the link's line and markers, expanded into `attrs` by {@link linkStyle}. */\n  style?: LinkStyle;\n  /** Labels keyed by id; each value is a {@link LinkLabel} expanded by {@link linkLabels}, and its key becomes the label's stable `id`. */\n  labelMap?: Record<string, LinkLabel>;\n  /** Shared {@link LinkLabel} styling merged into every `labelMap` entry before that entry's own values. */\n  labelStyle?: Partial<LinkLabel>;\n}\n\n/**\n * A link description for {@link linkAttributes}: native `dia.Link.Attributes`\n * plus the React preset shorthands `style`, `labelMap`, and `labelStyle`. No\n * `type` is required.\n * @expand\n * @group Types\n */\nexport interface LinkAttributes extends dia.Link.Attributes, LinkPresetAttributes {}\n\n/**\n * Expands the declarative React link shorthand (`style`, `labelMap`) into the\n * native attributes JointJS understands, so you can describe a link with the\n * friendly preset fields instead of raw `attrs` and `labels`.\n *\n * - `style` → SVG `attrs` via {@link linkStyle}.\n * - `labelMap` → a native `labels` array via {@link linkLabels}.\n * - `labels` (array) → passed through unchanged.\n * @param link - The link record to convert.\n * @returns JointJS-compatible cell attributes.\n * @throws When `link` is not an object, or when both `labelMap` and `labels` are set on the same link.\n * @example\n * Expand the declarative preset input into native attributes and hand them to\n * a cell model:\n * ```tsx\n * import { LinkModel, linkAttributes } from '@joint/react';\n *\n * const link = new LinkModel(\n *   linkAttributes({\n *     source: { id: 'a' },\n *     target: { id: 'b' },\n *     style: { color: '#333', width: 2 },           // preset shorthand\n *     labelMap: { mid: { text: 'edge', position: 0.5 } },\n *   })\n * );\n * ```\n * @group Presets\n */\nexport function linkAttributes(link: LinkAttributes): dia.Link.Attributes {\n  if (!util.isObject(link)) {\n    throw new TypeError('Invalid link data: expected an object with link properties.');\n  }\n\n  const { style, labelMap, labels, ...attributes } = link;\n\n  if (style) {\n    attributes.attrs = linkStyle(style);\n    attributes.style = style;\n  }\n\n  if (labelMap) {\n    if (labels) {\n      throw new Error('Cannot use both \"labelMap\" and \"labels\" on the same link.');\n    }\n    attributes.labels = linkLabels(labelMap, link.labelStyle);\n    attributes.labelMap = labelMap;\n  } else if (labels) {\n    attributes.labels = labels;\n  }\n\n  return attributes;\n}\n"],"names":["util","linkStyle","linkLabels"],"mappings":"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"}