{"version":3,"file":"index.mjs","sources":["../../../../src/directives/BToggle/index.ts"],"sourcesContent":["import {RX_HASH, RX_HASH_ID, RX_SPACE_SPLIT} from '../../utils/constants'\nimport {type Directive, type DirectiveBinding, toValue, type VNode} from 'vue'\nimport {findProvides} from '../utils'\nimport {globalShowHideStorageInjectionKey, type RegisterShowHideValue} from '../../utils/keys'\n\nconst getTargets = (\n  binding: DirectiveBinding<string | readonly string[] | undefined>,\n  el: Readonly<Element>\n) => {\n  const {modifiers, arg, value} = binding\n  // Any modifiers are considered target Ids\n  const targets = Object.keys(modifiers || {})\n\n  // If value is a string, split out individual targets (if space delimited)\n  const localValue = typeof value === 'string' ? value.split(RX_SPACE_SPLIT) : value\n\n  // Support target Id as link href (`href=\"#id\"`)\n  if (el.tagName.toLowerCase() === 'a') {\n    const href = el.getAttribute('href') || ''\n    if (RX_HASH_ID.test(href)) {\n      targets.push(href.replace(RX_HASH, ''))\n    }\n  }\n\n  // Add Id from `arg` (if provided), and support value\n  // as a single string Id or an array of string Ids\n  // If `value` is not an array or string, then it gets filtered out\n  Array.prototype.concat\n    .apply([], [arg, localValue])\n    .forEach((t) => typeof t === 'string' && targets.push(t))\n\n  // Return only unique and truthy target Ids\n  return targets.filter((t, index, arr) => t && arr.indexOf(t) === index)\n}\n\nconst handleUpdate = (\n  el: Element,\n  binding: DirectiveBinding<string | readonly string[] | undefined>,\n  vnode: VNode\n) => {\n  // Determine targets\n  const targets = getTargets(binding, el)\n  if (targets.length === 0) return\n\n  const provides = findProvides(binding, vnode)\n  const showHideMap = (provides as Record<symbol, RegisterShowHideValue>)[\n    globalShowHideStorageInjectionKey\n  ]?.values\n  if ((el as HTMLElement).dataset.bvtoggle) {\n    const oldTargets = ((el as HTMLElement).dataset.bvtoggle || '').split(' ')\n    if (oldTargets.length === 0) return\n    for (const targetId of oldTargets) {\n      const showHide = showHideMap?.value.get(targetId)\n      if (!showHide) {\n        continue\n      }\n      if (!targets.includes(targetId)) {\n        toValue(showHide).unregisterTrigger('click', el, false)\n      }\n    }\n  }\n  ;(el as HTMLElement).dataset.bvtoggle = targets.join(' ')\n\n  targets.forEach(async (targetId) => {\n    let count = 0\n    while (count < 5) {\n      const showHide = showHideMap?.value.get(targetId)\n      if (!showHide) {\n        count++\n        await new Promise((resolve) => setTimeout(resolve, 100))\n        if (count < 4) continue\n        // eslint-disable-next-line no-console\n        console.warn(`[v-b-toggle] Target with ID ${targetId} not found`)\n        break\n      }\n      // Register the trigger element\n\n      toValue(showHide).unregisterTrigger('click', el, false)\n      toValue(showHide).registerTrigger('click', el)\n      break\n    }\n  })\n\n  el.setAttribute('aria-controls', targets.join(' '))\n}\nconst handleUnmount = (\n  el: Element,\n  binding: DirectiveBinding<string | readonly string[] | undefined>,\n  vnode: VNode\n) => {\n  // Determine targets\n  const targets = getTargets(binding, el)\n  if (targets.length === 0) return\n  const provides = findProvides(binding, vnode)\n  const showHideMap = (provides as Record<symbol, RegisterShowHideValue>)[\n    globalShowHideStorageInjectionKey\n  ]?.values\n\n  targets.forEach((targetId) => {\n    const showHide = showHideMap?.value.get(targetId)\n    if (!showHide) {\n      return\n    }\n    toValue(showHide).unregisterTrigger('click', el, false)\n  })\n\n  el.removeAttribute('aria-controls')\n  el.removeAttribute('aria-expanded')\n  el.classList.remove('collapsed')\n  el.classList.remove('not-collapsed')\n  delete (el as HTMLElement).dataset.bvtoggle\n}\n\nexport const vBToggle: Directive<Element> = {\n  mounted: handleUpdate,\n  updated: handleUpdate,\n  unmounted: handleUnmount,\n}\n"],"names":[],"mappings":";;;;AAKA,MAAM,aAAa,CACjB,SACA,OACG;AACH,QAAM,EAAC,WAAW,KAAK,MAAS,IAAA;AAEhC,QAAM,UAAU,OAAO,KAAK,aAAa,CAAA,CAAE;AAG3C,QAAM,aAAa,OAAO,UAAU,WAAW,MAAM,MAAM,cAAc,IAAI;AAG7E,MAAI,GAAG,QAAQ,YAAY,MAAM,KAAK;AACpC,UAAM,OAAO,GAAG,aAAa,MAAM,KAAK;AACpC,QAAA,WAAW,KAAK,IAAI,GAAG;AACzB,cAAQ,KAAK,KAAK,QAAQ,SAAS,EAAE,CAAC;AAAA,IAAA;AAAA,EACxC;AAMF,QAAM,UAAU,OACb,MAAM,CAAA,GAAI,CAAC,KAAK,UAAU,CAAC,EAC3B,QAAQ,CAAC,MAAM,OAAO,MAAM,YAAY,QAAQ,KAAK,CAAC,CAAC;AAGnD,SAAA,QAAQ,OAAO,CAAC,GAAG,OAAO,QAAQ,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK;AACxE;AAEA,MAAM,eAAe,CACnB,IACA,SACA,UACG;;AAEG,QAAA,UAAU,WAAW,SAAS,EAAE;AAClC,MAAA,QAAQ,WAAW,EAAG;AAEpB,QAAA,WAAW,aAAa,SAAS,KAAK;AACtC,QAAA,eAAe,cACnB,iCACF,MAFqB,mBAElB;AACE,MAAA,GAAmB,QAAQ,UAAU;AACxC,UAAM,cAAe,GAAmB,QAAQ,YAAY,IAAI,MAAM,GAAG;AACrE,QAAA,WAAW,WAAW,EAAG;AAC7B,eAAW,YAAY,YAAY;AACjC,YAAM,WAAW,2CAAa,MAAM,IAAI;AACxC,UAAI,CAAC,UAAU;AACb;AAAA,MAAA;AAEF,UAAI,CAAC,QAAQ,SAAS,QAAQ,GAAG;AAC/B,gBAAQ,QAAQ,EAAE,kBAAkB,SAAS,IAAI,KAAK;AAAA,MAAA;AAAA,IACxD;AAAA,EACF;AAEA,KAAmB,QAAQ,WAAW,QAAQ,KAAK,GAAG;AAEhD,UAAA,QAAQ,OAAO,aAAa;AAClC,QAAI,QAAQ;AACZ,WAAO,QAAQ,GAAG;AAChB,YAAM,WAAW,2CAAa,MAAM,IAAI;AACxC,UAAI,CAAC,UAAU;AACb;AACA,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AACvD,YAAI,QAAQ,EAAG;AAEP,gBAAA,KAAK,+BAA+B,QAAQ,YAAY;AAChE;AAAA,MAAA;AAIF,cAAQ,QAAQ,EAAE,kBAAkB,SAAS,IAAI,KAAK;AACtD,cAAQ,QAAQ,EAAE,gBAAgB,SAAS,EAAE;AAC7C;AAAA,IAAA;AAAA,EACF,CACD;AAED,KAAG,aAAa,iBAAiB,QAAQ,KAAK,GAAG,CAAC;AACpD;AACA,MAAM,gBAAgB,CACpB,IACA,SACA,UACG;;AAEG,QAAA,UAAU,WAAW,SAAS,EAAE;AAClC,MAAA,QAAQ,WAAW,EAAG;AACpB,QAAA,WAAW,aAAa,SAAS,KAAK;AACtC,QAAA,eAAe,cACnB,iCACF,MAFqB,mBAElB;AAEK,UAAA,QAAQ,CAAC,aAAa;AAC5B,UAAM,WAAW,2CAAa,MAAM,IAAI;AACxC,QAAI,CAAC,UAAU;AACb;AAAA,IAAA;AAEF,YAAQ,QAAQ,EAAE,kBAAkB,SAAS,IAAI,KAAK;AAAA,EAAA,CACvD;AAED,KAAG,gBAAgB,eAAe;AAClC,KAAG,gBAAgB,eAAe;AAC/B,KAAA,UAAU,OAAO,WAAW;AAC5B,KAAA,UAAU,OAAO,eAAe;AACnC,SAAQ,GAAmB,QAAQ;AACrC;AAEO,MAAM,WAA+B;AAAA,EAC1C,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AACb;"}