{"version":3,"file":"useNodeExpandEventBroadcast.mjs","names":[],"sources":["../../../../../../../packages/components/tree/src/model/useNodeExpandEventBroadcast.ts"],"sourcesContent":["import { inject, onBeforeUnmount, provide } from 'vue'\nimport { TREE_NODE_MAP_INJECTION_KEY } from '../tokens'\n\nimport type Node from '../model/node'\n\ninterface NodeMap {\n  treeNodeExpand(node?: Node): void\n  children: Set<NodeMap>\n}\n\ninterface Props {\n  node?: Node\n  accordion: boolean\n}\n\nexport function useNodeExpandEventBroadcast(props: Props) {\n  const parentNodeMap = inject(\n    TREE_NODE_MAP_INJECTION_KEY,\n    null\n  ) as NodeMap | null\n  let currentNodeMap: NodeMap | null = {\n    treeNodeExpand: (node) => {\n      if (props.node !== node) {\n        props.node?.collapse()\n      }\n    },\n    children: new Set(),\n  }\n\n  if (parentNodeMap) {\n    parentNodeMap.children.add(currentNodeMap)\n  }\n\n  onBeforeUnmount(() => {\n    if (parentNodeMap) {\n      parentNodeMap.children.delete(currentNodeMap!)\n    }\n    currentNodeMap = null\n  })\n\n  provide(TREE_NODE_MAP_INJECTION_KEY, currentNodeMap)\n\n  return {\n    broadcastExpanded: (node?: Node): void => {\n      if (!props.accordion) return\n      for (const childNode of currentNodeMap!.children) {\n        childNode.treeNodeExpand(node)\n      }\n    },\n  }\n}\n"],"mappings":";;;;AAeA,SAAgB,4BAA4B,OAAc;CACxD,MAAM,gBAAgB,OACpB,6BACA,KACD;CACD,IAAI,iBAAiC;EACnC,iBAAiB,SAAS;AACxB,OAAI,MAAM,SAAS,KACjB,OAAM,MAAM,UAAU;;EAG1B,0BAAU,IAAI,KAAK;EACpB;AAED,KAAI,cACF,eAAc,SAAS,IAAI,eAAe;AAG5C,uBAAsB;AACpB,MAAI,cACF,eAAc,SAAS,OAAO,eAAgB;AAEhD,mBAAiB;GACjB;AAEF,SAAQ,6BAA6B,eAAe;AAEpD,QAAO,EACL,oBAAoB,SAAsB;AACxC,MAAI,CAAC,MAAM,UAAW;AACtB,OAAK,MAAM,aAAa,eAAgB,SACtC,WAAU,eAAe,KAAK;IAGnC"}