{"version":3,"file":"hooks.mjs","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":";AASO,SAASA,EAA2CC,GAGxD;AACD,WAASC,EAAoBC,GAA+B;AACtD,QAAAC,IAAOH,EAAQ,QAAQE,CAAG;AAE9B,QAAKC;AAEL,aAAO,CAACC,EAAOD,EAAK,MAAM,KAAG;AAC3B,cAAME,IAAWF,EAAK,QAChBG,IAASN,EAAQ,QAAQK,CAAQ;AAIvC,YAFI,CAACC,KAEDH,EAAK,YAAYG,EAAO,WAAWH,EAAK,YAAYG,EAAO;AAC7D;AAGF,QAAIH,EAAK,WACPG,EAAO,UAAUA,EAAO,SAAS,MAAM,CAAAC,MAAQA,EAAK,OAAO,GACpDD,EAAA,UAAU,CAACA,EAAO,YAEzBA,EAAO,UAAU,IACVA,EAAA,UAAUA,EAAO,SAAS,KAAK,OAAQC,EAAK,WAAWA,EAAK,OAAO,IAGrEJ,IAAAG;AAAA,MAAA;AAAA,EACT;AAGF,WAASE,EAAkBN,GAA+B;AAClD,UAAAO,IAAaT,EAAQ,QAAQE,CAAG;AAEtC,QAAI,CAACO,EAAY;AAEjB,UAAMC,IAAU,OAAOV,EAAQ,eAAgB,aAAaA,EAAQ,cAAcW,GAC5EC,IAAUH,EAAW,SACrBI,IAAUJ,EAAW,SAErBK,IAAO,CAAC,GAAIL,EAAW,QAAgB;AAEzC,QAAAN;AAEJ,WAAOW,EAAK;AAGN,MAFJX,IAAOW,EAAK,MAAM,GAEd,CAAAJ,EAAQP,CAAI,MAEhBA,EAAK,UAAUS,GACfT,EAAK,UAAUU,GAEXV,EAAK,SAAS,UACXW,EAAA,KAAK,GAAIX,EAAK,QAAgB;AAAA,EAEvC;AAGK,SAAA;AAAA,IACL,qBAAAF;AAAA,IACA,mBAAAO;AAAA,EACF;AACF;"}