{"version":3,"file":"cell-interactivity.cjs","sources":["../../../src/presets/cell-interactivity.ts"],"sourcesContent":["import type { dia } from '@joint/core';\n\n/** Name of a cell interactivity feature (e.g. `'elementMove'`, `'labelMove'`, `'linkMove'`). */\ntype CellInteraction = keyof dia.CellView.InteractivityOptions;\n\n/**\n * Context handed to the function form of {@link CellInteractivity}. JointJS calls\n * the callback once per cell with that cell, then reads the specific interactivity\n * flag it needs from the value you return. In practice only `model` is reliably\n * populated — see the individual fields.\n * @group Types\n * @expand\n */\nexport interface CellInteractivityParams {\n  /** The cell whose interactivity is being resolved. */\n  readonly model: dia.Cell;\n  /**\n   * Always `undefined` at runtime: JointJS does not pass an interaction name to the\n   * callback. It reads the relevant flag from the value you return instead.\n   */\n  readonly interaction: CellInteraction;\n  /**\n   * The cell's paper. JointJS binds the callback to the cell view's options rather\n   * than to the `dia.Paper`, so this is not guaranteed to be the paper; capture the\n   * `dia.Paper` from your own scope if you need it.\n   */\n  readonly paper: dia.Paper;\n  /**\n   * The graph the cell belongs to. Derived from `paper`, so it carries the same\n   * caveat; capture the `dia.Graph` from your own scope if you need it.\n   */\n  readonly graph: dia.Graph;\n}\n\n/**\n * Function form of the `interactive` Paper prop. Receives a structured\n * context (instead of the native positional `(cellView)` form) and\n * returns either a boolean or the native `InteractivityOptions` object.\n * @group Types\n */\ntype CellInteractivityCallback = (\n  context: CellInteractivityParams\n) => boolean | dia.CellView.InteractivityOptions;\n\n/**\n * Controls which pointer interactions (moving, linking, label dragging, …) are\n * enabled on cells. Accepts a boolean to switch everything on or off, an\n * `InteractivityOptions` object to toggle individual interactions, or a function\n * that returns either form per cell from a {@link CellInteractivityParams}\n * context. Pass it to the `interactive` prop of `<Paper>`. By default, label\n * dragging (`labelMove`) and moving links (`linkMove`) stay disabled; link\n * endpoints (`arrowheadMove`) remain draggable.\n * @group Types\n * @example\n * ```tsx\n * import { GraphProvider, Paper } from '@joint/react';\n * import type { CellInteractivity } from '@joint/react';\n *\n * // Lock cells flagged as readonly; leave the rest interactive.\n * const interactive: CellInteractivity = ({ model }) => !model.get('readonly');\n *\n * <GraphProvider>\n *   <Paper interactive={interactive} renderElement={() => <rect width={80} height={40} />} />\n * </GraphProvider>;\n * ```\n */\nexport type CellInteractivity =\n  | boolean\n  | dia.CellView.InteractivityOptions\n  | CellInteractivityCallback;\n\n/**\n * joint-react defaults applied when the user supplies no `interactive` prop,\n * passes `interactive={true}`, or as the base merged under user-supplied object\n * values. Preserves the JointJS native `labelMove: false` and adds\n * `linkMove: false` so moving the whole link is disabled by default (link\n * endpoints, governed by `arrowheadMove`, stay draggable).\n */\nconst DEFAULT_INTERACTIVE: dia.CellView.InteractivityOptions = {\n  labelMove: false,\n  linkMove: false,\n};\n\ntype StaticInteractivity = boolean | dia.CellView.InteractivityOptions | undefined;\n\n/**\n * Resolve a static `interactive` value to the native shape, applying\n * `DEFAULT_INTERACTIVE` as the baseline so every shape that means\n * \"interactivity on\" produces the same defaults.\n */\nfunction normalizeStaticInteractivity(\n  value: StaticInteractivity\n): false | dia.CellView.InteractivityOptions {\n  if (value === false) return false;\n  if (value === true || value == null) return { ...DEFAULT_INTERACTIVE };\n  if (typeof value === 'object') return { ...DEFAULT_INTERACTIVE, ...value };\n  return { ...DEFAULT_INTERACTIVE };\n}\n\n/**\n * Adapt the `interactive` prop to the native form.\n *\n * - `undefined` → defaults (`labelMove`/`linkMove` disabled, rest implicit true).\n * - `true` → same defaults.\n * - `false` → pass through (every interaction disabled).\n * - object → defaults applied first, user keys win.\n * - function → wrapped so the user callback receives a {@link CellInteractivityParams}\n *   instead of the native positional `(cellView)` argument. The\n *   callback's return value is normalized identically to the static shapes,\n *   so `() => true` and `() => ({})` both resolve to `DEFAULT_INTERACTIVE`.\n * @param value - prop value\n * @returns native `dia.Paper.Options['interactive']`\n */\nexport function toNativeCellInteractivity(\n  value: CellInteractivity | undefined\n): dia.Paper.Options['interactive'] {\n  if (typeof value !== 'function') return normalizeStaticInteractivity(value);\n  return function (this: dia.Paper, cellView: dia.CellView, interaction: string) {\n    const result = value({\n      model: cellView.model,\n      interaction: interaction as CellInteraction,\n      paper: this,\n      graph: this.model,\n    });\n    return normalizeStaticInteractivity(result as StaticInteractivity);\n  };\n}\n"],"names":[],"mappings":"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"}