{"version":3,"file":"hooks.cjs","sources":["../../../components/tree/hooks.ts"],"sourcesContent":["import { isNull, toFalse } from '@vexip-ui/utils'\n\nexport interface CascadedNode {\n  checked: boolean,\n  partial: boolean,\n  parent?: string | number | symbol,\n  children: CascadedNode[]\n}\n\nexport function useCascadedChecked<T extends CascadedNode>(options: {\n  getNode: (key: string | number | symbol) => T | null | undefined | void,\n  disableNode?: (node: T) => boolean\n}) {\n  function updateCheckedUpward(key: string | number | symbol) {\n    let node = options.getNode(key)\n\n    if (!node) return\n\n    while (!isNull(node.parent)) {\n      const parentId = node.parent\n      const parent = options.getNode(parentId)\n\n      if (!parent) break\n\n      if (node.checked === parent.checked && node.partial === parent.partial) {\n        break\n      }\n\n      if (node.checked) {\n        parent.checked = parent.children.every(item => item.checked)\n        parent.partial = !parent.checked\n      } else {\n        parent.checked = false\n        parent.partial = parent.children.some(item => item.checked || item.partial)\n      }\n\n      node = parent\n    }\n  }\n\n  function updateCheckedDown(key: string | number | symbol) {\n    const originNode = options.getNode(key)\n\n    if (!originNode) return\n\n    const disable = typeof options.disableNode === 'function' ? options.disableNode : toFalse\n    const checked = originNode.checked\n    const partial = originNode.partial\n\n    const loop = [...(originNode.children as T[])]\n\n    let node: T\n\n    while (loop.length) {\n      node = loop.shift()!\n\n      if (disable(node)) continue\n\n      node.checked = checked\n      node.partial = partial\n\n      if (node.children.length) {\n        loop.push(...(node.children as T[]))\n      }\n    }\n  }\n\n  return {\n    updateCheckedUpward,\n    updateCheckedDown,\n  }\n}\n"],"names":["useCascadedChecked","options","updateCheckedUpward","key","node","isNull","parentId","parent","item","updateCheckedDown","originNode","disable","toFalse","checked","partial","loop"],"mappings":"mHASO,SAASA,EAA2CC,EAGxD,CACD,SAASC,EAAoBC,EAA+B,CACtD,IAAAC,EAAOH,EAAQ,QAAQE,CAAG,EAE9B,GAAKC,EAEL,KAAO,CAACC,EAAA,OAAOD,EAAK,MAAM,GAAG,CAC3B,MAAME,EAAWF,EAAK,OAChBG,EAASN,EAAQ,QAAQK,CAAQ,EAIvC,GAFI,CAACC,GAEDH,EAAK,UAAYG,EAAO,SAAWH,EAAK,UAAYG,EAAO,QAC7D,MAGEH,EAAK,SACPG,EAAO,QAAUA,EAAO,SAAS,MAAMC,GAAQA,EAAK,OAAO,EACpDD,EAAA,QAAU,CAACA,EAAO,UAEzBA,EAAO,QAAU,GACVA,EAAA,QAAUA,EAAO,SAAS,QAAaC,EAAK,SAAWA,EAAK,OAAO,GAGrEJ,EAAAG,CAAA,CACT,CAGF,SAASE,EAAkBN,EAA+B,CAClD,MAAAO,EAAaT,EAAQ,QAAQE,CAAG,EAEtC,GAAI,CAACO,EAAY,OAEjB,MAAMC,EAAU,OAAOV,EAAQ,aAAgB,WAAaA,EAAQ,YAAcW,EAAA,QAC5EC,EAAUH,EAAW,QACrBI,EAAUJ,EAAW,QAErBK,EAAO,CAAC,GAAIL,EAAW,QAAgB,EAEzC,IAAAN,EAEJ,KAAOW,EAAK,QACVX,EAAOW,EAAK,MAAM,EAEd,CAAAJ,EAAQP,CAAI,IAEhBA,EAAK,QAAUS,EACfT,EAAK,QAAUU,EAEXV,EAAK,SAAS,QACXW,EAAA,KAAK,GAAIX,EAAK,QAAgB,EAEvC,CAGK,MAAA,CACL,oBAAAF,EACA,kBAAAO,CACF,CACF"}