{"version":3,"file":"tree-store.mjs","names":[],"sources":["../../../../../../../packages/components/tree/src/model/tree-store.ts"],"sourcesContent":["import { nextTick } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { NOOP, hasOwn, isObject, isPropAbsent } from '@element-plus/utils'\nimport Node from './node'\nimport { getNodeKey } from './util'\n\nimport type {\n  FilterNodeMethodFunction,\n  FilterValue,\n  LoadFunction,\n  TreeData,\n  TreeKey,\n  TreeNodeData,\n  TreeOptionProps,\n  TreeStoreNodesMap,\n  TreeStoreOptions,\n} from '../tree.type'\n\nexport default class TreeStore {\n  currentNode: Node | null\n  currentNodeKey: TreeKey | null\n  nodesMap: TreeStoreNodesMap\n  root!: Node\n  data!: TreeData\n  lazy = false\n  load?: LoadFunction\n  filterNodeMethod?: FilterNodeMethodFunction\n  key!: TreeKey\n  defaultCheckedKeys?: TreeKey[]\n  checkStrictly = false\n  defaultExpandedKeys?: TreeKey[]\n  autoExpandParent = false\n  defaultExpandAll = false\n  checkDescendants = false\n  props!: TreeOptionProps\n\n  constructor(options: TreeStoreOptions) {\n    this.currentNode = null\n    this.currentNodeKey = null\n\n    for (const option in options) {\n      if (hasOwn(options, option)) {\n        this[option] = options[option]\n      }\n    }\n\n    this.nodesMap = {}\n  }\n\n  initialize() {\n    this.root = new Node({\n      data: this.data,\n      store: this,\n    })\n    this.root.initialize()\n\n    if (this.lazy && this.load) {\n      const loadFn = this.load\n      loadFn(\n        this.root,\n        (data) => {\n          this.root.doCreateChildren(data)\n          this._initDefaultCheckedNodes()\n        },\n        NOOP\n      )\n    } else {\n      this._initDefaultCheckedNodes()\n    }\n  }\n\n  filter(value: FilterValue): void {\n    const filterNodeMethod = this.filterNodeMethod\n    const lazy = this.lazy\n    const traverse = async function (node: TreeStore | Node) {\n      const childNodes = (node as TreeStore).root\n        ? (node as TreeStore).root.childNodes\n        : (node as Node).childNodes\n\n      for (const [index, child] of childNodes.entries()) {\n        child.visible = !!filterNodeMethod?.call(\n          child,\n          value,\n          child.data,\n          child\n        )\n\n        if (index % 80 === 0 && index > 0) {\n          await nextTick()\n        }\n        await traverse(child)\n      }\n\n      if (!(node as Node).visible && childNodes.length) {\n        let allHidden = true\n        allHidden = !childNodes.some((child) => child.visible)\n\n        if ((node as TreeStore).root) {\n          ;(node as TreeStore).root.visible = allHidden === false\n        } else {\n          ;(node as Node).visible = allHidden === false\n        }\n      }\n      if (!value) return\n\n      if ((node as Node).visible && !(node as Node).isLeaf) {\n        if (!lazy || (node as Node).loaded) {\n          ;(node as Node).expand()\n        }\n      }\n    }\n\n    traverse(this)\n  }\n\n  setData(newVal: TreeData): void {\n    const instanceChanged = newVal !== this.root.data\n    if (instanceChanged) {\n      this.nodesMap = {}\n      this.root.setData(newVal)\n      this._initDefaultCheckedNodes()\n      this.setCurrentNodeKey(this.currentNodeKey)\n    } else {\n      this.root.updateChildren()\n    }\n  }\n\n  getNode(data: TreeKey | TreeNodeData | Node): Node {\n    if (data instanceof Node) return data\n    const key = isObject(data) ? getNodeKey(this.key, data) : data\n    return this.nodesMap[key] || null\n  }\n\n  insertBefore(\n    data: TreeNodeData,\n    refData: TreeKey | TreeNodeData | Node\n  ): void {\n    const refNode = this.getNode(refData)\n    refNode.parent?.insertBefore({ data }, refNode)\n  }\n\n  insertAfter(\n    data: TreeNodeData,\n    refData: TreeKey | TreeNodeData | Node\n  ): void {\n    const refNode = this.getNode(refData)\n    refNode.parent?.insertAfter({ data }, refNode)\n  }\n\n  remove(data: TreeNodeData | Node): void {\n    const node = this.getNode(data)\n\n    if (node && node.parent) {\n      if (node === this.currentNode) {\n        this.currentNode = null\n      }\n      node.parent.removeChild(node)\n    }\n  }\n\n  append(data: TreeNodeData, parentData: TreeNodeData | TreeKey | Node): void {\n    const parentNode = !isPropAbsent(parentData)\n      ? this.getNode(parentData)\n      : this.root\n\n    if (parentNode) {\n      parentNode.insertChild({ data })\n    }\n  }\n\n  _initDefaultCheckedNodes(): void {\n    const defaultCheckedKeys = this.defaultCheckedKeys || []\n    const nodesMap = this.nodesMap\n\n    defaultCheckedKeys.forEach((checkedKey) => {\n      const node = nodesMap[checkedKey]\n\n      if (node) {\n        node.setChecked(true, !this.checkStrictly)\n      }\n    })\n  }\n\n  _initDefaultCheckedNode(node: Node): void {\n    const defaultCheckedKeys = this.defaultCheckedKeys || []\n\n    if (!isNil(node.key) && defaultCheckedKeys.includes(node.key)) {\n      node.setChecked(true, !this.checkStrictly)\n    }\n  }\n\n  setDefaultCheckedKey(newVal: TreeKey[]): void {\n    if (newVal !== this.defaultCheckedKeys) {\n      this.defaultCheckedKeys = newVal\n      this._initDefaultCheckedNodes()\n    }\n  }\n\n  registerNode(node: Node): void {\n    const key = this.key\n    if (!node || !node.data) return\n\n    if (!key) {\n      this.nodesMap[node.id] = node\n    } else {\n      const nodeKey = node.key\n      if (!isNil(nodeKey)) this.nodesMap[nodeKey] = node\n    }\n  }\n\n  deregisterNode(node: Node): void {\n    const key = this.key\n    if (!key || !node || !node.data) return\n\n    node.childNodes.forEach((child) => {\n      this.deregisterNode(child)\n    })\n\n    delete this.nodesMap[node.key!]\n  }\n\n  getCheckedNodes(\n    leafOnly = false,\n    includeHalfChecked = false\n  ): TreeNodeData[] {\n    const checkedNodes: TreeNodeData[] = []\n    const traverse = function (node: TreeStore | Node) {\n      const childNodes = (node as TreeStore).root\n        ? (node as TreeStore).root.childNodes\n        : (node as Node).childNodes\n\n      childNodes.forEach((child) => {\n        if (\n          (child.checked || (includeHalfChecked && child.indeterminate)) &&\n          (!leafOnly || (leafOnly && child.isLeaf))\n        ) {\n          checkedNodes.push(child.data)\n        }\n\n        traverse(child)\n      })\n    }\n\n    traverse(this)\n\n    return checkedNodes\n  }\n\n  getCheckedKeys(leafOnly = false): TreeKey[] {\n    return this.getCheckedNodes(leafOnly).map((data) => (data || {})[this.key])\n  }\n\n  getHalfCheckedNodes(): TreeNodeData[] {\n    const nodes: TreeNodeData[] = []\n    const traverse = function (node: TreeStore | Node) {\n      const childNodes = (node as TreeStore).root\n        ? (node as TreeStore).root.childNodes\n        : (node as Node).childNodes\n\n      childNodes.forEach((child) => {\n        if (child.indeterminate) {\n          nodes.push(child.data)\n        }\n\n        traverse(child)\n      })\n    }\n\n    traverse(this)\n\n    return nodes\n  }\n\n  getHalfCheckedKeys(): TreeKey[] {\n    return this.getHalfCheckedNodes().map((data) => (data || {})[this.key])\n  }\n\n  _getAllNodes(): Node[] {\n    const allNodes: Node[] = []\n    const nodesMap = this.nodesMap\n    for (const nodeKey in nodesMap) {\n      if (hasOwn(nodesMap, nodeKey)) {\n        allNodes.push(nodesMap[nodeKey])\n      }\n    }\n\n    return allNodes\n  }\n\n  updateChildren(key: TreeKey, data: TreeData): void {\n    const node = this.nodesMap[key]\n    if (!node) return\n    const childNodes = node.childNodes\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      const child = childNodes[i]\n      this.remove(child.data)\n    }\n    for (let i = 0, j = data.length; i < j; i++) {\n      const child = data[i]\n      this.append(child, node.data)\n    }\n  }\n\n  _setCheckedKeys(\n    key: TreeKey,\n    leafOnly = false,\n    checkedKeys: { [key: string]: boolean }\n  ) {\n    const allNodes = this._getAllNodes().sort((a, b) => a.level - b.level)\n    const cache: Record<TreeKey, boolean> = Object.create(null)\n    const keys = Object.keys(checkedKeys)\n    allNodes.forEach((node) => node.setChecked(false, false))\n    const cacheCheckedChild = (node: Node) => {\n      node.childNodes.forEach((child) => {\n        cache[child.data[key]] = true\n        if (child.childNodes?.length) {\n          cacheCheckedChild(child)\n        }\n      })\n    }\n    for (let i = 0, j = allNodes.length; i < j; i++) {\n      const node = allNodes[i]\n      const nodeKey: string = node.data[key].toString()\n      const checked = keys.includes(nodeKey)\n      if (!checked) {\n        if (node.checked && !cache[nodeKey]) {\n          node.setChecked(false, false)\n        }\n        continue\n      }\n\n      if (node.childNodes.length) {\n        cacheCheckedChild(node)\n      }\n\n      if (node.isLeaf || this.checkStrictly) {\n        node.setChecked(true, false)\n        continue\n      }\n      node.setChecked(true, true)\n\n      if (leafOnly) {\n        node.setChecked(false, false, true)\n        const traverse = function (node: Node): void {\n          const childNodes = node.childNodes\n          childNodes.forEach((child) => {\n            if (!child.isLeaf) {\n              child.setChecked(false, false, true)\n            }\n            traverse(child)\n          })\n          node.reInitChecked()\n        }\n        traverse(node)\n      }\n    }\n  }\n\n  setCheckedNodes(array: Node[], leafOnly = false): void {\n    const key = this.key\n    const checkedKeys: Record<TreeKey, boolean> = {}\n    array.forEach((item) => {\n      checkedKeys[((item || {}) as any)[key]] = true\n    })\n\n    this._setCheckedKeys(key, leafOnly, checkedKeys)\n  }\n\n  setCheckedKeys(keys: TreeKey[], leafOnly = false): void {\n    this.defaultCheckedKeys = keys\n    const key = this.key\n    const checkedKeys: Record<TreeKey, boolean> = {}\n    keys.forEach((key) => {\n      checkedKeys[key] = true\n    })\n\n    this._setCheckedKeys(key, leafOnly, checkedKeys)\n  }\n\n  setDefaultExpandedKeys(keys: TreeKey[]) {\n    keys = keys || []\n    this.defaultExpandedKeys = keys\n    keys.forEach((key) => {\n      const node = this.getNode(key)\n      if (node) node.expand(null, this.autoExpandParent)\n    })\n  }\n\n  setChecked(\n    data: TreeKey | TreeNodeData,\n    checked: boolean,\n    deep: boolean\n  ): void {\n    const node = this.getNode(data)\n\n    if (node) {\n      node.setChecked(!!checked, deep)\n    }\n  }\n\n  getCurrentNode() {\n    return this.currentNode\n  }\n\n  setCurrentNode(currentNode: Node): void {\n    const prevCurrentNode = this.currentNode\n    if (prevCurrentNode) {\n      prevCurrentNode.isCurrent = false\n    }\n    this.currentNode = currentNode\n    this.currentNode.isCurrent = true\n  }\n\n  setUserCurrentNode(node: Node, shouldAutoExpandParent = true): void {\n    const key = (node as any)[this.key]\n    const currNode = this.nodesMap[key]\n    this.setCurrentNode(currNode)\n    if (\n      shouldAutoExpandParent &&\n      this.currentNode &&\n      this.currentNode.level > 1\n    ) {\n      this.currentNode.parent?.expand(null, true)\n    }\n  }\n\n  setCurrentNodeKey(key: TreeKey | null, shouldAutoExpandParent = true): void {\n    this.currentNodeKey = key\n    if (isPropAbsent(key)) {\n      this.currentNode && (this.currentNode.isCurrent = false)\n      this.currentNode = null\n      return\n    }\n    const node = this.getNode(key)\n    if (node) {\n      this.setCurrentNode(node)\n      if (\n        shouldAutoExpandParent &&\n        this.currentNode &&\n        this.currentNode.level > 1\n      ) {\n        this.currentNode.parent?.expand(null, true)\n      }\n    }\n  }\n}\n"],"mappings":";;;;;;;;AAkBA,IAAqB,YAArB,MAA+B;CAkB7B,YAAY,SAA2B;EAZhC,KAAA,OAAA;EAKS,KAAA,gBAAA;EAEG,KAAA,mBAAA;EACA,KAAA,mBAAA;EACA,KAAA,mBAAA;EAIjB,KAAK,cAAc;EACnB,KAAK,iBAAiB;EAEtB,KAAK,MAAM,UAAU,SACnB,IAAI,OAAO,SAAS,MAAM,GACxB,KAAK,UAAU,QAAQ;EAI3B,KAAK,WAAW,CAAC;CACnB;CAEA,aAAa;EACX,KAAK,OAAO,IAAI,KAAK;GACnB,MAAM,KAAK;GACX,OAAO;EACT,CAAC;EACD,KAAK,KAAK,WAAW;EAErB,IAAI,KAAK,QAAQ,KAAK,MAAM;GAC1B,MAAM,SAAS,KAAK;GACpB,OACE,KAAK,OACJ,SAAS;IACR,KAAK,KAAK,iBAAiB,IAAI;IAC/B,KAAK,yBAAyB;GAChC,GACA,IACF;EACF,OACE,KAAK,yBAAyB;CAElC;CAEA,OAAO,OAA0B;EAC/B,MAAM,mBAAmB,KAAK;EAC9B,MAAM,OAAO,KAAK;EAClB,MAAM,WAAW,eAAgB,MAAwB;GACvD,MAAM,aAAc,KAAmB,OAClC,KAAmB,KAAK,aACxB,KAAc;GAEnB,KAAK,MAAM,CAAC,OAAO,UAAU,WAAW,QAAQ,GAAG;IACjD,MAAM,UAAU,CAAC,CAAC,kBAAkB,KAClC,OACA,OACA,MAAM,MACN,KACF;IAEA,IAAI,QAAQ,OAAO,KAAK,QAAQ,GAC9B,MAAM,SAAS;IAEjB,MAAM,SAAS,KAAK;GACtB;GAEA,IAAI,CAAE,KAAc,WAAW,WAAW,QAAQ;IAChD,IAAI,YAAY;IAChB,YAAY,CAAC,WAAW,MAAM,UAAU,MAAM,OAAO;IAErD,IAAK,KAAmB,MACrB,KAAoB,KAAK,UAAU,cAAc;SAEjD,KAAe,UAAU,cAAc;GAE5C;GACA,IAAI,CAAC,OAAO;GAEZ,IAAK,KAAc,WAAW,CAAE,KAAc,QACxC;QAAA,CAAC,QAAS,KAAc,QACzB,KAAe,OAAO;GAAA;EAG7B;EAEA,SAAS,IAAI;CACf;CAEA,QAAQ,QAAwB;EAE9B,IADwB,WAAW,KAAK,KAAK,MACxB;GACnB,KAAK,WAAW,CAAC;GACjB,KAAK,KAAK,QAAQ,MAAM;GACxB,KAAK,yBAAyB;GAC9B,KAAK,kBAAkB,KAAK,cAAc;EAC5C,OACE,KAAK,KAAK,eAAe;CAE7B;CAEA,QAAQ,MAA2C;EACjD,IAAI,gBAAgB,MAAM,OAAO;EACjC,MAAM,MAAM,SAAS,IAAI,IAAI,WAAW,KAAK,KAAK,IAAI,IAAI;EAC1D,OAAO,KAAK,SAAS,QAAQ;CAC/B;CAEA,aACE,MACA,SACM;EACN,MAAM,UAAU,KAAK,QAAQ,OAAO;EACpC,QAAQ,QAAQ,aAAa,EAAE,KAAK,GAAG,OAAO;CAChD;CAEA,YACE,MACA,SACM;EACN,MAAM,UAAU,KAAK,QAAQ,OAAO;EACpC,QAAQ,QAAQ,YAAY,EAAE,KAAK,GAAG,OAAO;CAC/C;CAEA,OAAO,MAAiC;EACtC,MAAM,OAAO,KAAK,QAAQ,IAAI;EAE9B,IAAI,QAAQ,KAAK,QAAQ;GACvB,IAAI,SAAS,KAAK,aAChB,KAAK,cAAc;GAErB,KAAK,OAAO,YAAY,IAAI;EAC9B;CACF;CAEA,OAAO,MAAoB,YAAiD;EAC1E,MAAM,aAAa,CAAC,aAAa,UAAU,IACvC,KAAK,QAAQ,UAAU,IACvB,KAAK;EAET,IAAI,YACF,WAAW,YAAY,EAAE,KAAK,CAAC;CAEnC;CAEA,2BAAiC;EAC/B,MAAM,qBAAqB,KAAK,sBAAsB,CAAC;EACvD,MAAM,WAAW,KAAK;EAEtB,mBAAmB,SAAS,eAAe;GACzC,MAAM,OAAO,SAAS;GAEtB,IAAI,MACF,KAAK,WAAW,MAAM,CAAC,KAAK,aAAa;EAE7C,CAAC;CACH;CAEA,wBAAwB,MAAkB;EACxC,MAAM,qBAAqB,KAAK,sBAAsB,CAAC;EAEvD,IAAI,CAAC,MAAM,KAAK,GAAG,KAAK,mBAAmB,SAAS,KAAK,GAAG,GAC1D,KAAK,WAAW,MAAM,CAAC,KAAK,aAAa;CAE7C;CAEA,qBAAqB,QAAyB;EAC5C,IAAI,WAAW,KAAK,oBAAoB;GACtC,KAAK,qBAAqB;GAC1B,KAAK,yBAAyB;EAChC;CACF;CAEA,aAAa,MAAkB;EAC7B,MAAM,MAAM,KAAK;EACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM;EAEzB,IAAI,CAAC,KACH,KAAK,SAAS,KAAK,MAAM;OACpB;GACL,MAAM,UAAU,KAAK;GACrB,IAAI,CAAC,MAAM,OAAO,GAAG,KAAK,SAAS,WAAW;EAChD;CACF;CAEA,eAAe,MAAkB;EAE/B,IAAI,CADQ,KAAK,OACL,CAAC,QAAQ,CAAC,KAAK,MAAM;EAEjC,KAAK,WAAW,SAAS,UAAU;GACjC,KAAK,eAAe,KAAK;EAC3B,CAAC;EAED,OAAO,KAAK,SAAS,KAAK;CAC5B;CAEA,gBACE,WAAW,OACX,qBAAqB,OACL;EAChB,MAAM,eAA+B,CAAC;EACtC,MAAM,WAAW,SAAU,MAAwB;GAKjD,CAJoB,KAAmB,OAClC,KAAmB,KAAK,aACxB,KAAc,WAAA,CAER,SAAS,UAAU;IAC5B,KACG,MAAM,WAAY,sBAAsB,MAAM,mBAC9C,CAAC,YAAa,YAAY,MAAM,SAEjC,aAAa,KAAK,MAAM,IAAI;IAG9B,SAAS,KAAK;GAChB,CAAC;EACH;EAEA,SAAS,IAAI;EAEb,OAAO;CACT;CAEA,eAAe,WAAW,OAAkB;EAC1C,OAAO,KAAK,gBAAgB,QAAQ,CAAC,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAA,CAAG,KAAK,IAAI;CAC5E;CAEA,sBAAsC;EACpC,MAAM,QAAwB,CAAC;EAC/B,MAAM,WAAW,SAAU,MAAwB;GAKjD,CAJoB,KAAmB,OAClC,KAAmB,KAAK,aACxB,KAAc,WAAA,CAER,SAAS,UAAU;IAC5B,IAAI,MAAM,eACR,MAAM,KAAK,MAAM,IAAI;IAGvB,SAAS,KAAK;GAChB,CAAC;EACH;EAEA,SAAS,IAAI;EAEb,OAAO;CACT;CAEA,qBAAgC;EAC9B,OAAO,KAAK,oBAAoB,CAAC,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAA,CAAG,KAAK,IAAI;CACxE;CAEA,eAAuB;EACrB,MAAM,WAAmB,CAAC;EAC1B,MAAM,WAAW,KAAK;EACtB,KAAK,MAAM,WAAW,UACpB,IAAI,OAAO,UAAU,OAAO,GAC1B,SAAS,KAAK,SAAS,QAAQ;EAInC,OAAO;CACT;CAEA,eAAe,KAAc,MAAsB;EACjD,MAAM,OAAO,KAAK,SAAS;EAC3B,IAAI,CAAC,MAAM;EACX,MAAM,aAAa,KAAK;EACxB,KAAK,IAAI,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;GAC/C,MAAM,QAAQ,WAAW;GACzB,KAAK,OAAO,MAAM,IAAI;EACxB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK;GAC3C,MAAM,QAAQ,KAAK;GACnB,KAAK,OAAO,OAAO,KAAK,IAAI;EAC9B;CACF;CAEA,gBACE,KACA,WAAW,OACX,aACA;EACA,MAAM,WAAW,KAAK,aAAa,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;EACrE,MAAM,QAAkC,OAAO,OAAO,IAAI;EAC1D,MAAM,OAAO,OAAO,KAAK,WAAW;EACpC,SAAS,SAAS,SAAS,KAAK,WAAW,OAAO,KAAK,CAAC;EACxD,MAAM,qBAAqB,SAAe;GACxC,KAAK,WAAW,SAAS,UAAU;IACjC,MAAM,MAAM,KAAK,QAAQ;IACzB,IAAI,MAAM,YAAY,QACpB,kBAAkB,KAAK;GAE3B,CAAC;EACH;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;GAC/C,MAAM,OAAO,SAAS;GACtB,MAAM,UAAkB,KAAK,KAAK,IAAI,CAAC,SAAS;GAEhD,IAAI,CADY,KAAK,SAAS,OACnB,GAAG;IACZ,IAAI,KAAK,WAAW,CAAC,MAAM,UACzB,KAAK,WAAW,OAAO,KAAK;IAE9B;GACF;GAEA,IAAI,KAAK,WAAW,QAClB,kBAAkB,IAAI;GAGxB,IAAI,KAAK,UAAU,KAAK,eAAe;IACrC,KAAK,WAAW,MAAM,KAAK;IAC3B;GACF;GACA,KAAK,WAAW,MAAM,IAAI;GAE1B,IAAI,UAAU;IACZ,KAAK,WAAW,OAAO,OAAO,IAAI;IAClC,MAAM,WAAW,SAAU,MAAkB;KAE3C,KADwB,WACb,SAAS,UAAU;MAC5B,IAAI,CAAC,MAAM,QACT,MAAM,WAAW,OAAO,OAAO,IAAI;MAErC,SAAS,KAAK;KAChB,CAAC;KACD,KAAK,cAAc;IACrB;IACA,SAAS,IAAI;GACf;EACF;CACF;CAEA,gBAAgB,OAAe,WAAW,OAAa;EACrD,MAAM,MAAM,KAAK;EACjB,MAAM,cAAwC,CAAC;EAC/C,MAAM,SAAS,SAAS;GACtB,aAAc,QAAQ,CAAC,EAAA,CAAW,QAAQ;EAC5C,CAAC;EAED,KAAK,gBAAgB,KAAK,UAAU,WAAW;CACjD;CAEA,eAAe,MAAiB,WAAW,OAAa;EACtD,KAAK,qBAAqB;EAC1B,MAAM,MAAM,KAAK;EACjB,MAAM,cAAwC,CAAC;EAC/C,KAAK,SAAS,QAAQ;GACpB,YAAY,OAAO;EACrB,CAAC;EAED,KAAK,gBAAgB,KAAK,UAAU,WAAW;CACjD;CAEA,uBAAuB,MAAiB;EACtC,OAAO,QAAQ,CAAC;EAChB,KAAK,sBAAsB;EAC3B,KAAK,SAAS,QAAQ;GACpB,MAAM,OAAO,KAAK,QAAQ,GAAG;GAC7B,IAAI,MAAM,KAAK,OAAO,MAAM,KAAK,gBAAgB;EACnD,CAAC;CACH;CAEA,WACE,MACA,SACA,MACM;EACN,MAAM,OAAO,KAAK,QAAQ,IAAI;EAE9B,IAAI,MACF,KAAK,WAAW,CAAC,CAAC,SAAS,IAAI;CAEnC;CAEA,iBAAiB;EACf,OAAO,KAAK;CACd;CAEA,eAAe,aAAyB;EACtC,MAAM,kBAAkB,KAAK;EAC7B,IAAI,iBACF,gBAAgB,YAAY;EAE9B,KAAK,cAAc;EACnB,KAAK,YAAY,YAAY;CAC/B;CAEA,mBAAmB,MAAY,yBAAyB,MAAY;EAClE,MAAM,MAAO,KAAa,KAAK;EAC/B,MAAM,WAAW,KAAK,SAAS;EAC/B,KAAK,eAAe,QAAQ;EAC5B,IACE,0BACA,KAAK,eACL,KAAK,YAAY,QAAQ,GAEzB,KAAK,YAAY,QAAQ,OAAO,MAAM,IAAI;CAE9C;CAEA,kBAAkB,KAAqB,yBAAyB,MAAY;EAC1E,KAAK,iBAAiB;EACtB,IAAI,aAAa,GAAG,GAAG;GACrB,KAAK,gBAAgB,KAAK,YAAY,YAAY;GAClD,KAAK,cAAc;GACnB;EACF;EACA,MAAM,OAAO,KAAK,QAAQ,GAAG;EAC7B,IAAI,MAAM;GACR,KAAK,eAAe,IAAI;GACxB,IACE,0BACA,KAAK,eACL,KAAK,YAAY,QAAQ,GAEzB,KAAK,YAAY,QAAQ,OAAO,MAAM,IAAI;EAE9C;CACF;AACF"}