{"version":3,"file":"js/modules/standalone/tabset.ui.bundle.js","mappings":"yBAAA,IAAIA,EAAgB,EAEb,MAAMC,EACNC,KACL,MAAMC,EAAM,IAAIC,IAAIC,OAAOC,UACrBC,EAAeJ,EAAII,aAGnBC,EAAUC,SAASC,iBAAiB,WACrCF,EAAQG,QAEbH,EAAQI,SAASX,IAEhB,IAAIY,EAAWZ,EAAOa,QAAQC,eAC9Bf,IACA,MAAMgB,EAAYH,GAEf,eAAeb,IAEZiB,EAAWhB,EAAOS,iBAAiB,qBACnCQ,EAAcjB,EAAOS,iBAAiB,oBAC5C,IAAKO,EAASN,SAAWO,EAAYP,OAAQ,OAG7CV,EAAOS,iBAAiB,qBAAqBE,SAASO,IACrD,MAAMC,EAAWD,EAAIE,aAAa,sBAC9BD,GACHD,EAAIG,MAAMC,YAAY,cAAe,OAAOH,KAC7C,IAGD,IAAII,GAAsB,EACtBC,GAAkB,EAGtB,SAASC,EAAUC,GAElB,GAAIA,IAAaH,GAAsBC,EAAiB,OAExDA,GAAkB,EAClB,MAAMG,EAAWJ,EACjBA,EAAqBG,EAGjBC,GAAY,GAAKX,EAASW,IAC7BX,EAASW,GAAUC,UAAUC,OAAO,UAErCb,EAASU,IAAWE,UAAUE,IAAI,WAGhB,IAAdH,EAWL,SAAiBI,EAAOC,GACvB,MAAMC,EAAUhB,EAAYc,GAC5B,IAAKE,EAEJ,YADAD,MAIDC,EAAQL,UAAUC,OAAO,WACzBI,EAAQL,UAAUE,IAAI,YAGtB,MAAMI,EAAWC,WAAWC,iBAAiBH,GAASI,oBAGtDC,YAAW,KAEVL,EAAQL,UAAUC,OAAO,YACzBI,EAAQZ,MAAMkB,QAAU,OACxBP,KAAY,GANc,IAAXE,EAQjB,CAzBCM,CAAQb,GAAU,KACjBc,EAAOf,EAAS,IANhBe,EAAOf,EAQT,CAwBA,SAASe,EAAOV,GACf,MAAME,EAAUhB,EAAYc,GAC5B,IAAKE,EAEJ,YADAT,GAAkB,GAInBS,EAAQZ,MAAMkB,QAAU,QACxBN,EAAQL,UAAUE,IAAI,WAGtB,MAAMI,EAAWC,WAAWC,iBAAiBH,GAASI,oBAGtDC,YAAW,KACVd,GAAkB,CAAK,GAHG,IAAXU,EAKjB,CAGA,SAASQ,EAAYX,GAEpB,MAAMY,EAAc3B,EAASe,IAAQlB,SAAS+B,YAC9CtC,EAAauC,IAAI9B,EAAW4B,GAA4BZ,GACxD7B,EAAI4C,OAASxC,EAAayC,WAC1B3C,OAAO4C,QAAQC,aAAa,CAAC,EAAG,GAAI/C,EAAI6C,WACzC,CAGA,IACIG,EADAC,EAAkB7C,EAAa8C,IAAIrC,GAGvC,GAAuB,MAAnBoC,EAAyB,CAE5B,MAAME,EAAaC,MAAMC,KAAKvC,GAAUwC,WACtCC,GAASA,EAAK5C,QAAQ+B,cAAgBO,IAExC,GAAIE,GAAc,EACjBH,EAAeG,MACT,CAEN,MAAMK,EAAeC,SAASR,EAAiB,KAE7CS,MAAMF,IACPA,GAAgB,GAChBA,EAAe1C,EAASN,SAExBwC,EAAeQ,EAEjB,CACD,MAG4B,IAAjBR,IACVA,EAAe,EACfR,EAAYQ,IAIbzB,EAAUyB,GAGVlC,EAASL,SAAQ,CAAC8C,EAAMI,KACvBJ,EAAKK,iBAAiB,SAAUC,IAC/BA,EAAEC,iBACFvC,EAAUoC,GAEVnB,EAAYmB,EAAE,GACb,GACD,GACD,EAKJrD,SAASsD,iBAAiB,oBAAoB,KAC7C9D,GAAa,G","sources":["webpack:///./UI/js/core/modules/standalone/tabset.js"],"sourcesContent":["let tabSetCounter = 0; // global counter for tabsets\r\n\r\nexport const tabset = {\r\n\tinit: () => {\r\n\t\tconst url = new URL(window.location);\r\n\t\tconst searchParams = url.searchParams;\r\n\r\n\t\t// Find every .tabset on the page\r\n\t\tconst tabsets = document.querySelectorAll('.tabset');\r\n\t\tif (!tabsets.length) return;\r\n\r\n\t\ttabsets.forEach((tabset) => {\r\n\t\t\t// 1) Check if this tabset has a custom ID in the data attribute\r\n\t\t\tlet customId = tabset.dataset.customtabsetid;\r\n\t\t\ttabSetCounter++;\r\n\t\t\tconst paramName = customId\r\n\t\t\t\t? customId\r\n\t\t\t\t: `tab-instance${tabSetCounter}`;\r\n\r\n\t\t\tconst tabLinks = tabset.querySelectorAll('.tabset__tab-link');\r\n\t\t\tconst tabContents = tabset.querySelectorAll('.tabset__content');\r\n\t\t\tif (!tabLinks.length || !tabContents.length) return;\r\n\r\n\t\t\t// 2) Setup custom divider images\r\n\t\t\ttabset.querySelectorAll('.tabset__tab-item').forEach((tab) => {\r\n\t\t\t\tconst imageUrl = tab.getAttribute('data-divider-image');\r\n\t\t\t\tif (imageUrl) {\r\n\t\t\t\t\ttab.style.setProperty('--image-url', `url(${imageUrl})`);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlet currentActiveIndex = -1;\r\n\t\t\tlet isTransitioning = false; // to prevent rapid clicking issues\r\n\r\n\t\t\t// Helper to fade out old content, then fade in new\r\n\t\t\tfunction switchTab(newIndex) {\r\n\t\t\t\t// If user clicks the same tab or if we’re mid‐transition, do nothing\r\n\t\t\t\tif (newIndex === currentActiveIndex || isTransitioning) return;\r\n\r\n\t\t\t\tisTransitioning = true;\r\n\t\t\t\tconst oldIndex = currentActiveIndex;\r\n\t\t\t\tcurrentActiveIndex = newIndex;\r\n\r\n\t\t\t\t// Update tab link active state\r\n\t\t\t\tif (oldIndex >= 0 && tabLinks[oldIndex]) {\r\n\t\t\t\t\ttabLinks[oldIndex].classList.remove('active');\r\n\t\t\t\t}\r\n\t\t\t\ttabLinks[newIndex]?.classList.add('active');\r\n\r\n\t\t\t\t// If no old tab (first load), just fade in the new content\r\n\t\t\t\tif (oldIndex === -1) {\r\n\t\t\t\t\tfadeIn(newIndex);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Otherwise, fade out the old content, then fade in the new\r\n\t\t\t\tfadeOut(oldIndex, () => {\r\n\t\t\t\t\tfadeIn(newIndex);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfunction fadeOut(index, callback) {\r\n\t\t\t\tconst content = tabContents[index];\r\n\t\t\t\tif (!content) {\r\n\t\t\t\t\tcallback?.();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t// Ensure it’s visible while fading\r\n\t\t\t\tcontent.classList.remove('fade-in');\r\n\t\t\t\tcontent.classList.add('fade-out');\r\n\r\n\t\t\t\t// Wait for CSS transition to complete\r\n\t\t\t\tconst duration = parseFloat(getComputedStyle(content).transitionDuration);\r\n\t\t\t\tconst timeout = duration * 1000;\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t// After fade-out, hide entirely\r\n\t\t\t\t\tcontent.classList.remove('fade-out');\r\n\t\t\t\t\tcontent.style.display = 'none';\r\n\t\t\t\t\tcallback?.();\r\n\t\t\t\t}, timeout);\r\n\t\t\t}\r\n\r\n\t\t\tfunction fadeIn(index) {\r\n\t\t\t\tconst content = tabContents[index];\r\n\t\t\t\tif (!content) {\r\n\t\t\t\t\tisTransitioning = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t// Display block so we can fade in\r\n\t\t\t\tcontent.style.display = 'block';\r\n\t\t\t\tcontent.classList.add('fade-in');\r\n\r\n\t\t\t\t// Wait for fade-in to finish\r\n\t\t\t\tconst duration = parseFloat(getComputedStyle(content).transitionDuration);\r\n\t\t\t\tconst timeout = duration * 1000;\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tisTransitioning = false;\r\n\t\t\t\t}, timeout);\r\n\t\t\t}\r\n\r\n\t\t\t// Function to set the URL parameter with the correct tab identifier (custom ID or index)\r\n\t\t\tfunction setTabParam(index) {\r\n\t\t\t\t// If there's a custom ID in the link, use it; otherwise use the numeric index\r\n\t\t\t\tconst customTabId = tabLinks[index]?.dataset?.customtabid;\r\n\t\t\t\tsearchParams.set(paramName, customTabId ? customTabId : index);\r\n\t\t\t\turl.search = searchParams.toString();\r\n\t\t\t\twindow.history.replaceState({}, '', url.toString());\r\n\t\t\t}\r\n\r\n\t\t\t// 3) On initial load, see if there's a saved tab in the URL\r\n\t\t\tlet savedParamValue = searchParams.get(paramName);\r\n\t\t\tlet initialIndex;\r\n\r\n\t\t\tif (savedParamValue != null) {\r\n\t\t\t\t// First, try to find a tab link that has a matching data-customtabid\r\n\t\t\t\tconst foundIndex = Array.from(tabLinks).findIndex(\r\n\t\t\t\t\t(link) => link.dataset.customtabid === savedParamValue\r\n\t\t\t\t);\r\n\t\t\t\tif (foundIndex >= 0) {\r\n\t\t\t\t\tinitialIndex = foundIndex;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Otherwise, see if the saved param is a valid numeric index\r\n\t\t\t\t\tconst numericIndex = parseInt(savedParamValue, 10);\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!isNaN(numericIndex) &&\r\n\t\t\t\t\t\tnumericIndex >= 0 &&\r\n\t\t\t\t\t\tnumericIndex < tabLinks.length\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinitialIndex = numericIndex;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// If we still don't have an initialIndex, default to 0\r\n\t\t\tif (typeof initialIndex === 'undefined') {\r\n\t\t\t\tinitialIndex = 0;\r\n\t\t\t\tsetTabParam(initialIndex);\r\n\t\t\t}\r\n\r\n\t\t\t// Switch to that tab\r\n\t\t\tswitchTab(initialIndex);\r\n\r\n\t\t\t// 4) Handle clicks\r\n\t\t\ttabLinks.forEach((link, i) => {\r\n\t\t\t\tlink.addEventListener('click', (e) => {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tswitchTab(i);\r\n\t\t\t\t\t// Update the URL param\r\n\t\t\t\t\tsetTabParam(i);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n};\r\n\r\n// Initialize on DOMContentLoaded\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n\ttabset.init();\r\n});\r\n"],"names":["tabSetCounter","tabset","init","url","URL","window","location","searchParams","tabsets","document","querySelectorAll","length","forEach","customId","dataset","customtabsetid","paramName","tabLinks","tabContents","tab","imageUrl","getAttribute","style","setProperty","currentActiveIndex","isTransitioning","switchTab","newIndex","oldIndex","classList","remove","add","index","callback","content","duration","parseFloat","getComputedStyle","transitionDuration","setTimeout","display","fadeOut","fadeIn","setTabParam","customTabId","customtabid","set","search","toString","history","replaceState","initialIndex","savedParamValue","get","foundIndex","Array","from","findIndex","link","numericIndex","parseInt","isNaN","i","addEventListener","e","preventDefault"],"sourceRoot":""}