{"version":3,"file":"accordion.js","mappings":"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","sources":["webpack://AvarnSecurityWeb/./Static/js/accordion/accordion.js","webpack://AvarnSecurityWeb/./Static/js/accordion/index.js"],"sourcesContent":["export default class Accordion {\n constructor(container, options = {}) {\n this.container = container;\n\n const allowMultiple = container.dataset.allowMultiple === 'true';\n const transitionDuration = parseInt(container.dataset.transitionDuration) || 300;\n \n this.options = {\n allowMultiple: allowMultiple,\n transitionDuration: transitionDuration,\n onToggle: null,\n ...options\n };\n\n this.buttons = container.querySelectorAll('[role=\"tab\"]');\n this.init();\n }\n\n init() {\n this.setInitialStates();\n this.setupEventListeners();\n this.setupResizeObserver();\n }\n\n setInitialStates() {\n this.container.querySelectorAll('[role=\"tabpanel\"]').forEach(panel => {\n // Measure initial height\n panel.classList.remove('hidden');\n this.updatePanelHeight(panel);\n\n // Reset to initial state\n if (!panel.hasAttribute('data-state')) {\n panel.classList.add('hidden');\n }\n\n // Set transition duration from options\n panel.style.setProperty('--tw-duration', `${this.options.transitionDuration}ms`);\n });\n }\n\n updatePanelHeight(panel) {\n const content = panel.children[0];\n if (content) {\n const height = content.getBoundingClientRect().height;\n panel.style.setProperty('--content-height', `${height}px`);\n }\n }\n\n setupResizeObserver() {\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n const panel = entry.target.closest('[role=\"tabpanel\"]');\n if (panel) {\n this.updatePanelHeight(panel);\n }\n });\n });\n\n this.container.querySelectorAll('[role=\"tabpanel\"] > *').forEach(content => {\n resizeObserver.observe(content);\n });\n }\n\n toggle(button, force) {\n const panelId = button.getAttribute('aria-controls');\n const panel = document.getElementById(panelId);\n const wrapper = button.closest('.accordion-item'); // eller '.accordion-item' avhengig av din markup\n\n if (!panel) return;\n\n const isExpanded = force ?? button.getAttribute('aria-expanded') !== 'true';\n button.setAttribute('aria-expanded', isExpanded);\n\n // Sett aria-expanded på wrapper også\n if (wrapper) {\n wrapper.setAttribute('aria-expanded', isExpanded);\n }\n\n if (isExpanded) {\n this.expandPanel(panel, button);\n } else {\n this.collapsePanel(panel, button);\n }\n\n if (this.options.onToggle) {\n this.options.onToggle(button, isExpanded);\n }\n\n if (!this.options.allowMultiple && isExpanded) {\n this.closeOtherPanels(button);\n }\n }\n\n expandPanel(panel, button) {\n panel.classList.remove('hidden');\n this.updatePanelHeight(panel);\n\n requestAnimationFrame(() => {\n panel.setAttribute('data-state', 'open');\n button.closest('.accordion-item')?.setAttribute('data-state', 'open');\n });\n }\n\n collapsePanel(panel, button) {\n panel.setAttribute('data-state', '');\n button.closest('.accordion-item')?.setAttribute('data-state', '');\n\n const handleTransitionEnd = () => {\n if (!panel.hasAttribute('data-state')) {\n panel.classList.add('hidden');\n }\n };\n\n panel.addEventListener('transitionend', handleTransitionEnd, { once: true });\n }\n\n closeOtherPanels(currentButton) {\n this.buttons.forEach(button => {\n if (button !== currentButton) {\n this.toggle(button, false);\n }\n });\n }\n\n handleKeyNavigation(event) {\n const target = event.currentTarget;\n const buttons = Array.from(this.buttons);\n const index = buttons.indexOf(target);\n\n const keyActions = {\n ArrowDown: () => buttons[index + 1] || buttons[0],\n ArrowUp: () => buttons[index - 1] || buttons[buttons.length - 1],\n Home: () => buttons[0],\n End: () => buttons[buttons.length - 1]\n };\n\n const action = keyActions[event.key];\n if (action) {\n event.preventDefault();\n action().focus();\n }\n }\n\n setupEventListeners() {\n this.buttons.forEach(button => {\n button.addEventListener('click', () => this.toggle(button));\n button.addEventListener('keydown', (e) => this.handleKeyNavigation(e));\n });\n }\n\n // Public methods for external control\n open(index) {\n const button = Array.from(this.buttons)[index];\n if (button) this.toggle(button, true);\n }\n\n close(index) {\n const button = Array.from(this.buttons)[index];\n if (button) this.toggle(button, false);\n }\n\n openAll() {\n if (!this.options.allowMultiple) return;\n this.buttons.forEach(button => this.toggle(button, true));\n }\n\n closeAll() {\n this.buttons.forEach(button => this.toggle(button, false));\n }\n}","import Accordion from './accordion';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const accordionContainers = document.querySelectorAll('[role=\"tablist\"]');\n\n accordionContainers.forEach(container => {\n const allowMultiple = container.dataset.allowMultiple === 'true';\n const transitionDuration = parseInt(container.dataset.transitionDuration) || 300;\n\n new Accordion(container, {\n allowMultiple,\n transitionDuration\n });\n });\n});\n\nexport { Accordion };"],"names":["Accordion","container","options","arguments","length","undefined","_classCallCheck","this","allowMultiple","dataset","transitionDuration","parseInt","_objectSpread","onToggle","buttons","querySelectorAll","init","key","value","setInitialStates","setupEventListeners","setupResizeObserver","_this","forEach","panel","classList","remove","updatePanelHeight","hasAttribute","add","style","setProperty","concat","content","children","height","getBoundingClientRect","_this2","resizeObserver","ResizeObserver","entries","entry","target","closest","observe","button","force","panelId","getAttribute","document","getElementById","wrapper","isExpanded","setAttribute","expandPanel","collapsePanel","closeOtherPanels","requestAnimationFrame","_button$closest","_button$closest2","addEventListener","once","currentButton","_this3","toggle","event","currentTarget","Array","from","index","indexOf","action","ArrowDown","ArrowUp","Home","End","preventDefault","focus","_this4","e","handleKeyNavigation","_this5","_this6"],"sourceRoot":""}