{"version":3,"file":"clear-view.cjs","sources":["../../../src/store/clear-view.ts"],"sourcesContent":["import type { dia } from '@joint/core';\nimport type { CellId } from '../types/cell.types';\nimport type { IncrementalChange } from '../state/incremental.types';\n\n/**\n * Cache entry for batched clearView updates.\n */\nexport interface ClearViewCacheEntry {\n  /** Callback to validate which links should be cleared */\n  onValidateLink?: (link: dia.Link) => boolean;\n}\n\n/**\n * Merges two clearView validators.\n * - If no validator (clear all links), that takes precedence\n * - If both have validators, creates union validator\n * @param existing - Existing validator\n * @param incoming - New validator\n * @returns Merged validator or undefined\n */\nexport function mergeClearViewValidators(\n  existing: ClearViewCacheEntry | undefined,\n  incoming: ClearViewCacheEntry\n): ClearViewCacheEntry {\n  // No existing entry - use new\n  if (!existing) {\n    return incoming;\n  }\n\n  const { onValidateLink } = incoming;\n\n  // No validator means clear all links - this takes precedence\n  if (!onValidateLink) {\n    return { onValidateLink: undefined };\n  }\n\n  // If existing has validator, create union\n  if (existing.onValidateLink) {\n    const existingValidator = existing.onValidateLink;\n    const newValidator = onValidateLink;\n    return {\n      onValidateLink: (link: dia.Link) => existingValidator(link) || newValidator(link),\n    };\n  }\n\n  // Existing has no validator (clear all) - keep that behavior\n  return existing;\n}\n\n/**\n * Determines if a link should be cleared based on cell connection.\n * @param link - The link to check\n * @param cellId - The cell ID to check against\n * @param onValidateLink - Optional callback to determine if link should be cleared\n * @returns True if the link should be cleared\n */\nexport function shouldClearLink(\n  link: dia.Link,\n  cellId: CellId,\n  onValidateLink?: (link: dia.Link) => boolean\n): boolean {\n  const target = link.target();\n  const source = link.source();\n  const isElementLink = target.id === cellId || source.id === cellId;\n  return isElementLink && (!onValidateLink || onValidateLink(link));\n}\n\n/**\n * Clears connected link views for a cell in a paper.\n * @param paper - The JointJS Paper instance\n * @param graph - The JointJS Graph instance\n * @param cellId - The cell ID whose connected links to clear\n * @param onValidateLink - Optional callback to determine which links to keep\n * @returns A map of changes for the cleared link views\n */\nexport function clearConnectedLinkViews(\n  paper: dia.Paper,\n  graph: dia.Graph,\n  cellId: CellId,\n  onValidateLink?: (link: dia.Link) => boolean\n) {\n  const changes: Map<CellId, IncrementalChange<dia.Cell>> = new Map();\n  const cell = graph.getCell(cellId);\n  if (!cell) {\n    return changes;\n  }\n\n  for (const link of graph.getConnectedLinks(cell)) {\n    if (!shouldClearLink(link, cellId, onValidateLink)) {\n      continue;\n    }\n\n    const linkView = link.findView(paper);\n    if (!linkView) {\n      continue;\n    }\n\n    // @ts-expect-error we use private jointjs api method\n    linkView._sourceMagnet = null;\n    // @ts-expect-error we use private jointjs api method\n    linkView._targetMagnet = null;\n    // @ts-expect-error we use private jointjs api method\n    linkView.requestConnectionUpdate({ async: true });\n    changes.set(String(link.id), { type: 'change', data: link });\n  }\n  return changes;\n}\n\n/**\n * Executes clearView for a single cell across all papers.\n * @param papers - Iterable of paper stores with paper property\n * @param graph - The JointJS Graph instance\n * @param cellId - The cell ID to clear\n * @param onValidateLink - Optional callback to determine which links to keep\n */\nexport function executeClearViewForCell(\n  papers: Iterable<{ readonly paper?: dia.Paper }>,\n  graph: dia.Graph,\n  cellId: CellId,\n  onValidateLink?: (link: dia.Link) => boolean\n): void {\n  for (const paperStore of papers) {\n    const { paper } = paperStore;\n    if (!paper) {\n      continue;\n    }\n\n    const elementView = paper.getCellView(cellId);\n    if (!elementView) {\n      continue;\n    }\n\n    elementView.cleanNodesCache();\n    clearConnectedLinkViews(paper, graph, cellId, onValidateLink);\n  }\n}\n"],"names":[],"mappings":";;;;;;;;;AAwDO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,eAAA,CACd,CAAA,CAAA,CAAA,CAAA,EACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,cAAA,CAAA,CACS,CAAA;AACT,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,EAAK,MAAA,CAAA,CAAO,CAAA;AAC3B,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,EAAK,MAAA,CAAA,CAAO,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,KAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA;AACjE,CAAA;AAUO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,KAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAwD,GAAA,CAAA,CAAI,CAAA;AAClE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,IAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,MAAM,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACT,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAG,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,KAAK,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA;AAEzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA;AAEzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAI,MAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE,CAAA,EAAG,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,IAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA;AAAA,CAAA,CAC7D,CAAA;AACA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA;;;"}