{"version":3,"sources":["../src/index.ts","../src/js/utils/logger-context.ts","../src/js/init-tako-accordion.ts","../src/js/utils/showElement.ts","../src/js/utils/hideElement.ts","../src/js/utils/takoUUID.ts","../src/js/utils/resolveComponentScope.ts","../src/js/init-tako-alert.ts","../src/js/init-tako-breadcrumbs.ts","../src/js/init-tako-button.ts","../src/js/init-tako-card.js","../src/js/utils/getDirectChildren.ts","../src/js/init-tako-checkbox.js","../src/js/init-tako-dropdown.js","../src/js/init-tako-list.js","../src/js/init-tako-link.ts","../src/js/init-tako-modal.js","../src/js/utils/createLoadingIndicator.ts","../src/js/utils/htmxHelper.ts","../src/js/htmx-components/htmx-tako-modal.ts","../src/js/init-tako-pagination.js","../src/js/init-tako-popover.js","../src/js/utils/getIsRtl.ts","../src/js/htmx-components/htmx-tako-popover.ts","../src/js/init-tako-radio-button-group.js","../src/js/init-tako-select.js","../src/js/init-tako-table.js","../src/js/init-tako-tag.js","../src/js/init-tako-text-input.ts","../src/js/init-tako-toggle-switch.js","../src/js/init-tako-tooltip.js","../src/js/theme/colors.ts","../src/js/utils/getContrastColor.ts","../src/js/utils/getErrorMessage.ts","../src/js/theme/theme.ts","../src/js/charts/chartjs/chart-defaults.ts"],"sourcesContent":["import { getLogger, setLogger } from './js/utils/logger-context';\n\n// Import SCSS\nimport './scss/main.scss';\n\n// Import all component initializations dynamically\nimport * as accordion from './js/init-tako-accordion';\nimport * as alert from './js/init-tako-alert';\nimport * as breadcrumbs from './js/init-tako-breadcrumbs';\nimport * as button from './js/init-tako-button';\nimport * as card from './js/init-tako-card';\nimport * as checkbox from './js/init-tako-checkbox';\nimport * as dropdown from './js/init-tako-dropdown';\nimport * as list from './js/init-tako-list';\nimport * as link from './js/init-tako-link';\nimport * as modal from './js/init-tako-modal';\nimport * as pagination from './js/init-tako-pagination';\nimport * as popover from './js/init-tako-popover';\nimport * as radioButtonGroup from './js/init-tako-radio-button-group';\nimport * as select from './js/init-tako-select';\nimport * as table from './js/init-tako-table';\nimport * as tag from './js/init-tako-tag';\nimport * as textInput from './js/init-tako-text-input';\nimport * as toggleSwitch from './js/init-tako-toggle-switch';\nimport * as tooltip from './js/init-tako-tooltip';\nimport { type UnresolvedComponentScope } from './js/utils/resolveComponentScope';\nimport { getContrastColor } from './js/utils/getContrastColor';\nimport { type Logger } from './types/logger';\nimport { getErrorMessage } from './js/utils/getErrorMessage';\nimport { theme } from './js/theme/theme';\nimport {\n    chartjsColors,\n    chartjsFont,\n    chartjsOptions,\n    chartjsPlugins,\n} from './js/charts/chartjs/chart-defaults';\n\ntype InitPromise = Promise<{ name: string; error?: unknown }>;\n\ntype ComponentName =\n    | 'accordion'\n    | 'alert'\n    | 'breadcrumbs'\n    | 'button'\n    | 'card'\n    | 'checkbox'\n    | 'dropdown'\n    | 'list'\n    | 'link'\n    | 'modal'\n    | 'pagination'\n    | 'popover'\n    | 'radioButtonGroup'\n    | 'select'\n    | 'table'\n    | 'tag'\n    | 'textInput'\n    | 'toggleSwitch'\n    | 'tooltip';\ntype ComponentMethods = {\n    init: (unresolvedScope: UnresolvedComponentScope) => void;\n    toggle?: (selector: string, open: boolean | null) => void;\n};\n\n// Centralized component registry\nconst components: Record<ComponentName, ComponentMethods> = {\n    accordion,\n    alert,\n    breadcrumbs,\n    button,\n    card,\n    checkbox,\n    dropdown,\n    list,\n    link,\n    /*@ts-expect-error modal's toggle function does not match ComponentMethods['toggle'] type */\n    modal,\n    pagination,\n    popover,\n    radioButtonGroup,\n    select,\n    table,\n    tag,\n    textInput,\n    toggleSwitch,\n    tooltip,\n};\n\nconst safelyInitComponent = (\n    name: ComponentName,\n    initFn: (unresolvedScope: UnresolvedComponentScope) => void,\n    unresolvedScope: UnresolvedComponentScope,\n    logger: Logger,\n): InitPromise => {\n    return new Promise((resolve) => {\n        try {\n            initFn(unresolvedScope);\n            resolve({ name });\n        } catch (error) {\n            logger?.error(\n                `Failed to initialize Tako ${name}: ${getErrorMessage(error)}`,\n                { error },\n            );\n            resolve({ name, error });\n        }\n    });\n};\n\n// Initialize all Tako components\nexport const initAllTakoComponents = async (\n    unresolvedScope: UnresolvedComponentScope,\n    externalLogger: Logger,\n) => {\n    setLogger(externalLogger);\n    const logger = getLogger();\n\n    const initPromises: InitPromise[] = Object.entries(components).reduce(\n        (acc, [key, { init }]) => {\n            // ToDo: there's an ongoing issue with pagination component: https://app.asana.com/0/1200521765515341/1209536215520354\n            if (key !== 'pagination') {\n                acc.push(\n                    safelyInitComponent(\n                        key as ComponentName,\n                        init,\n                        unresolvedScope,\n                        logger,\n                    ),\n                );\n            }\n            return acc;\n        },\n        [] as InitPromise[],\n    );\n    const results = await Promise.all(initPromises);\n    const failedComponents = results.filter(({ error }) => error);\n\n    if (failedComponents.length > 0) {\n        logger.warn(`Tako: Some components failed to initialize:`, {\n            failedComponents,\n        });\n    }\n\n    return results;\n};\n\n// Default export with all components\nexport default {\n    initAllTakoComponents,\n    ...components,\n    theme,\n    chartjsColors,\n    chartjsFont,\n    chartjsOptions,\n    chartjsPlugins,\n    getContrastColor,\n};\n\n// Named exports for individual methods\nexport {\n    accordion,\n    alert,\n    breadcrumbs,\n    button,\n    card,\n    checkbox,\n    dropdown,\n    list,\n    link,\n    modal,\n    pagination,\n    popover,\n    radioButtonGroup,\n    select,\n    table,\n    tag,\n    textInput,\n    toggleSwitch,\n    tooltip,\n    theme,\n    chartjsColors,\n    chartjsFont,\n    chartjsOptions,\n    chartjsPlugins,\n    getContrastColor,\n};\n","import { Logger } from '../../types/logger';\n\n// Internal storage for the logger\n// We start with a basic logger implementation\nlet _logger: Logger = {\n    debug: () => {},\n    info: () => {},\n    warn: () => {},\n    error: () => {},\n};\n\nconst requiredMethods: (keyof Logger)[] = Object.keys(\n    _logger,\n) as (keyof Logger)[];\n\n/**\n * Sets the global logger instance\n * If the logger has additional methods beyond the standard ones,\n * provide the type parameter to ensure proper typing.\n *\n * @param logger - The logger implementation to use\n * @returns True if logger was valid and set successfully\n */\nexport const setLogger = <T extends string = never>(\n    logger: Logger<T>,\n): boolean => {\n    // Validate logger\n    const isObject =\n        Object.prototype.toString.call(logger) === '[object Object]';\n    const hasAllMethods =\n        isObject &&\n        requiredMethods.every((method) => typeof logger[method] === 'function');\n\n    if (hasAllMethods) {\n        _logger = logger;\n        return true;\n    }\n\n    console.warn(\n        '[Tako] Invalid logger provided. Using default no-op logger.',\n        { logger },\n    );\n    return false;\n};\n\n/**\n * Gets the current logger instance.\n * If you need to access additional methods on the logger,\n * provide the type parameter to ensure proper typing.\n *\n * @returns The current logger\n */\nexport const getLogger = <T extends string = never>(): Logger<T> =>\n    _logger as Logger<T>;\n","/**\n * Create and initialize Tako accordion\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Accordion\n * -------------------------------------------------------------------------- */\nimport { InstanceLoggerArgs } from '../types/logger';\nimport { showElement } from './utils/showElement';\nimport { hideElement } from './utils/hideElement';\nimport { takoUUID } from './utils/takoUUID';\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Accordion';\n\nconst accordionInstances = new Map<\n    HTMLElement,\n    { open: () => void; close: () => void }\n>();\n\nexport const init = (unresolvedScope: string | Element | unknown) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const openIcon = '<i class=\"far fa-angle-down\" aria-hidden=\"true\"></i>';\n    const closeIcon = '<i class=\"far fa-angle-up\" aria-hidden=\"true\"></i>';\n    const DATA_OPEN = 'data-open';\n\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoAccordions =\n        scope.querySelectorAll<HTMLElement>('.tako-accordion');\n\n    allTakoAccordions.forEach((accordion) => {\n        try {\n            const instanceLoggerArgs: InstanceLoggerArgs = {\n                ...defaultLoggerArgs,\n                element: accordion,\n            };\n            const accordionHeader = accordion.querySelector<HTMLElement>(\n                '.tako-accordion__header',\n            );\n            const accordionBody = accordion.querySelector<HTMLElement>(\n                '.tako-accordion__body',\n            );\n\n            // if no body or header has been provided then accordion will not work\n            if (!accordionBody || !accordionHeader) {\n                logger.warn(\n                    'A Tako Accordion must have a header with the class of `tako-accordion__header` and a body with the class of `tako-accordion__body`. Omitting component...',\n                    instanceLoggerArgs,\n                );\n\n                return;\n            }\n\n            if (!accordionBody.id) {\n                accordionBody.setAttribute('id', takoUUID('accordion-body'));\n            }\n\n            /**\n             * data-expanded-header attribute is @deprecated\n             */\n            const expandedHeaderText = accordionHeader.dataset.expandedHeader;\n            if (expandedHeaderText) {\n                logger.warn(\n                    'The `data-expanded-header` attribute is deprecated. Please use the `data-open-accordion-title` attribute instead.',\n                    instanceLoggerArgs,\n                );\n            }\n            const openHeaderText =\n                expandedHeaderText ||\n                accordionHeader.dataset.openAccordionTitle;\n            const closedHeaderText = accordionHeader.innerHTML;\n\n            /**\n             * tako-accordion--expanded class is @deprecated\n             */\n            const accordionWithLegacyClass =\n                scope.querySelectorAll<HTMLElement>(\n                    '.tako-accordion--expanded',\n                );\n\n            // Replace deprecated `tako-accordion--expanded` class with `data-open` attribute\n            if (accordionWithLegacyClass.length) {\n                logger.warn(\n                    'The `tako-accordion--expanded` class is deprecated. Please use the `data-open` attribute instead.',\n                    instanceLoggerArgs,\n                );\n                accordion.setAttribute(DATA_OPEN, 'true');\n            }\n\n            const accordionIsOpen =\n                accordion.hasAttribute(DATA_OPEN) &&\n                accordion.getAttribute(DATA_OPEN) !== 'false';\n\n            accordionHeader.setAttribute('tabindex', '0');\n            accordionHeader.setAttribute('role', 'button');\n            accordionHeader.setAttribute('aria-controls', accordionBody.id);\n            accordionHeader.setAttribute(\n                'aria-expanded',\n                accordionIsOpen.toString(),\n            );\n            accordion.setAttribute(DATA_OPEN, accordionIsOpen.toString());\n\n            //set icon based on initial open state\n            const icon = document.createElement('span');\n            icon.classList.add('tako-icon', 'tako-accordion__toggle-icon');\n            icon.innerHTML = accordionIsOpen ? closeIcon : openIcon;\n            accordionHeader.appendChild(icon);\n\n            //set display of body based on initial expanded state\n            if (accordionIsOpen) {\n                showElement(accordionBody);\n            } else {\n                hideElement(accordionBody);\n            }\n            accordionBody.setAttribute('tabindex', '0');\n            accordionBody.setAttribute('id', accordionBody.id);\n\n            const open = () => {\n                showElement(accordionBody);\n                accordion.setAttribute(DATA_OPEN, 'true');\n                const toggleIcon = accordionHeader.querySelector<HTMLElement>(\n                    '.tako-accordion__toggle-icon',\n                );\n\n                //if open and closed headers differ then set styles of each accordingly\n                if (toggleIcon) {\n                    toggleIcon.innerHTML = closeIcon;\n                }\n                if (openHeaderText) {\n                    // if header button contains an element that is not the accordion icon then place expanded text inside tags\n                    if (\n                        accordionHeader.firstElementChild &&\n                        !accordionHeader.firstElementChild.classList.contains(\n                            'tako-accordion__toggle-icon',\n                        )\n                    ) {\n                        accordionHeader.firstElementChild.innerHTML =\n                            openHeaderText;\n                    } else {\n                        accordionHeader.innerHTML = openHeaderText;\n                    }\n                    if (toggleIcon) {\n                        accordionHeader.appendChild(toggleIcon);\n                    }\n                }\n                accordionHeader.setAttribute('aria-expanded', 'true');\n\n                // Emit a custom event when the accordion is opened\n                const openEvent = new CustomEvent('takoAccordionOpen', {\n                    detail: {\n                        accordion,\n                        accordionHeader,\n                        id: accordion.id,\n                    },\n                });\n                accordion.dispatchEvent(openEvent);\n            };\n\n            const close = () => {\n                hideElement(accordionBody);\n                accordion.setAttribute(DATA_OPEN, 'false');\n                const toggleIcon = accordionHeader.querySelector<HTMLElement>(\n                    '.tako-accordion__toggle-icon',\n                );\n\n                if (openHeaderText) {\n                    accordionHeader.innerHTML = closedHeaderText;\n                    if (toggleIcon) {\n                        accordionHeader.appendChild(toggleIcon);\n                    }\n                }\n                if (toggleIcon) {\n                    toggleIcon.innerHTML = openIcon;\n                }\n                accordionHeader.setAttribute('aria-expanded', 'false');\n\n                // Emit a custom event when the accordion is closed\n                const closeEvent = new CustomEvent('takoAccordionClose', {\n                    detail: {\n                        accordion,\n                        accordionHeader,\n                        id: accordion.id,\n                    },\n                });\n                accordion.dispatchEvent(closeEvent);\n            };\n\n            const toggleAccordion = () => {\n                if (accordionBody.style.display === 'none') {\n                    open();\n                } else {\n                    close();\n                }\n            };\n\n            accordionHeader.addEventListener('click', toggleAccordion);\n\n            // Store the instance for external control via `toggle`\n            accordionInstances.set(accordion, { open, close });\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: accordion,\n            });\n        }\n    });\n};\n\n/**\n * Tako Accordion Functions\n */\n\nconst debounceDelay = 100;\nconst debounceTimeouts = new Map<HTMLElement, ReturnType<typeof setTimeout>>();\n\n/**\n * Toggles the visibility of one or more Tako Accordion components.\n *\n * @param {string} selector - Document query selector (id or class) to target the accordion(s).\n *                            Accepts an id (e.g., '#my-accordion') or a class (e.g., '.my-accordion-class').\n * @param {boolean|null} [open=null] - Optional. If `true`, explicitly open the accordion(s).\n *                                     If `false`, explicitly close the accordion(s).\n *                                     If `null` (default), the accordion's current state will be toggled.\n *\n * @example\n * // Toggle based on the current state (open if closed, close if open):\n * toggleAccordion('.my-accordion-class');\n *\n * @example\n * // Explicitly open the accordion(s):\n * toggleAccordion('#my-accordion-id', true);\n *\n * @example\n * // Explicitly close the accordion(s):\n * toggleAccordion('.my-accordion-class', false);\n */\nexport const toggle = (selector: string, open: boolean | null = null) => {\n    const logger = getLogger();\n\n    // Support id's without the # prefix\n    if (selector[0] !== '#' && selector[0] !== '.') {\n        selector = `#${selector}`;\n    }\n\n    // Get all elements that match the selector (could be multiple if class selector is used)\n    const takoAccordionElements =\n        document.querySelectorAll<HTMLElement>(selector);\n\n    if (!takoAccordionElements.length) {\n        logger.warn(\n            `No Tako Accordion components found with the selector \"${selector}\".`,\n        );\n        return;\n    }\n\n    takoAccordionElements.forEach((takoAccordionElement) => {\n        const instance = accordionInstances.get(takoAccordionElement);\n\n        if (!instance) {\n            logger.warn(\n                `No instance found for the element with the selector \"${selector}\". Make sure the Tako Accordion has been initialized.`,\n            );\n            return;\n        }\n\n        // Clear any existing timeout for this accordion\n        if (debounceTimeouts.has(takoAccordionElement)) {\n            clearTimeout(debounceTimeouts.get(takoAccordionElement));\n        }\n\n        const shouldOpen =\n            open !== null\n                ? open\n                : takoAccordionElement.getAttribute('data-open') === 'false'; // If `open` is null, toggle based on current state\n\n        // Handle debounce delay to ensure proper timing\n        debounceTimeouts.set(\n            takoAccordionElement,\n            setTimeout(() => {\n                if (shouldOpen) {\n                    instance.open();\n                } else {\n                    instance.close();\n                }\n\n                // Remove the timeout once it's executed\n                debounceTimeouts.delete(takoAccordionElement);\n            }, debounceDelay),\n        );\n    });\n};\n","/**\n * Shows an HTML element by setting its display style and aria-hidden attribute.\n * @param {HTMLElement | null} el - The element to show.\n * @param {string} [display='block'] - The display style to set.\n */\nexport const showElement = (\n    el: HTMLElement | null,\n    display: string = 'block',\n): void => {\n    if (!el) {\n        return;\n    }\n    el.style.display = display;\n    el.setAttribute('aria-hidden', 'false');\n};\n","/**\n * Hides an HTML element by setting its display style and aria-hidden attribute.\n * @param {HTMLElement | null} el - The element to hide.\n * @param {string} [display='none'] - The display style to set.\n */\nexport const hideElement = (\n    el: HTMLElement | null,\n    display: string = 'none',\n): void => {\n    if (!el) {\n        return;\n    }\n    el.style.display = display;\n    el.setAttribute('aria-hidden', 'true');\n};\n","/**\n * Generates a unique ID for a Tako component.\n * @param {string} componentName - The name of the component.\n * @returns {string} A unique ID string.\n */\nexport const takoUUID = (componentName: string): string =>\n    `tako-${componentName}-${Math.random()}`.replace('.', '');\n","import { getLogger } from './logger-context';\n\nexport type ResolvedComponentScope = HTMLElement | Document | string;\nexport type UnresolvedComponentScope = ResolvedComponentScope | unknown;\n\n/**\n * Resolves the DOM scope for component initialization and manipulation.\n * This function determines where component selectors will be applied.\n *\n * @param scope - Target element, CSS selector string, or null/undefined to use document\n * @returns The DOM element to use as scope for component initialization\n */\nexport function resolveComponentScope(\n    scope: UnresolvedComponentScope,\n): HTMLElement | Document {\n    const logger = getLogger();\n\n    // Use document for null or undefined\n    if (scope == null) {\n        return document;\n    }\n\n    // If string selector provided, attempt to find matching element\n    if (typeof scope === 'string') {\n        const targetElement = document.querySelector<HTMLElement>(`#${scope}`);\n        // Fall back to document if selector doesn't match any element\n        return targetElement || document;\n    }\n\n    // If valid HTMLElement provided, use it directly\n    if (scope instanceof HTMLElement) {\n        return scope;\n    }\n\n    // For any other value types, use document as fallback with warning\n    logger.warn(\n        'Invalid component scope provided. Expected a CSS selector string or HTMLElement. ' +\n            'Using document as fallback scope for component initialization.',\n    );\n    return document;\n}\n","/**\n * Initialise Tako Alert\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Alert\n * -------------------------------------------------------------------------- */\nimport { InstanceLoggerArgs } from '../types/logger';\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Alert';\n\nexport const init = (unresolvedScope: string | Element | unknown) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    // ToDo: Remove tako-alert--dismissible with the next breaking change\n    const allDismissibleTakoAlerts = scope.querySelectorAll<HTMLElement>(\n        '.tako-alert[data-dismissible], .tako-alert--dismissible',\n    );\n\n    /**\n     * tako-alert--dismissible class is @deprecated\n     */\n    const dismissableAlertsWithLegacyClass =\n        scope.querySelectorAll<HTMLElement>('.tako-alert--dismissible');\n\n    if (dismissableAlertsWithLegacyClass.length) {\n        logger.warn(\n            'The `tako-alert--dismissible` class is deprecated. Please use the `data-dismissible` attribute instead.',\n            defaultLoggerArgs,\n        );\n    }\n\n    const allTakoAlertsWithIcon = scope.querySelectorAll<HTMLElement>(\n        '.tako-alert:not(.tako-alert--no-icon)',\n    );\n\n    // Adds an icon unless `--no-icon` class is provided\n    allTakoAlertsWithIcon.forEach((takoAlert) => {\n        try {\n            const instanceLoggerArgs: InstanceLoggerArgs = {\n                ...defaultLoggerArgs,\n                element: takoAlert,\n            };\n            const classList = takoAlert.classList;\n\n            // ToDo: Remove this snippet with the next breaking change\n            // Checks for and removes semantic icons manually added using the old syntax\n            if (\n                takoAlert.classList.contains('tako-alert--icon') &&\n                takoAlert.querySelector<HTMLElement>('.tako-icon')\n            ) {\n                takoAlert.removeChild(\n                    takoAlert.querySelector<HTMLElement>('.tako-icon')!,\n                );\n                logger.warn(\n                    'Semantic icons are added by default to tako alerts. For the correct syntax please refer to storybook: https://tako-html-kraken-tech.vercel.app/?path=/docs/tako-html-alert--docs',\n                    instanceLoggerArgs,\n                );\n            }\n\n            // Wraps all children in a tako-alert__content div\n            if (takoAlert.childNodes.length > 0) {\n                addAlertContentWrapper(takoAlert);\n            }\n\n            let icon: string;\n            switch (true) {\n                case classList.contains('tako-alert--info'):\n                    icon = 'fa-circle-info';\n                    break;\n                case classList.contains('tako-alert--success'):\n                    icon = 'fa-circle-check';\n                    break;\n                case classList.contains('tako-alert--warning'):\n                    icon = 'fa-triangle-exclamation';\n                    break;\n                case classList.contains('tako-alert--danger'):\n                    icon = 'fa-circle-exclamation';\n                    break;\n                default:\n                    icon = 'fa-circle-question';\n                    break;\n            }\n\n            const iconContainer = document.createElement('span');\n            iconContainer.classList.add(\n                'tako-icon',\n                'tako-icon--md',\n                'tako-alert__icon',\n            );\n            iconContainer.innerHTML = `<i class='far ${icon}'></i>`;\n            takoAlert.prepend(iconContainer);\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: takoAlert,\n            });\n        }\n    });\n\n    allDismissibleTakoAlerts.forEach((takoDismissibleAlert) => {\n        try {\n            const alertContent =\n                takoDismissibleAlert.querySelector<HTMLElement>(\n                    '.tako-alert__content',\n                );\n            // Wraps all children in a tako-alert__content div\n            if (!alertContent && takoDismissibleAlert.childNodes.length > 0) {\n                addAlertContentWrapper(takoDismissibleAlert);\n            }\n\n            const dismissButton = document.createElement('button');\n            dismissButton.classList.add(\n                'tako-button',\n                'tako-button--ghost',\n                'tako-button--icon',\n                'tako-button--inherit',\n                'tako-button--no-padding',\n            );\n            dismissButton.setAttribute('data-alert-dismiss', 'true');\n            dismissButton.setAttribute('aria-label', 'Close');\n            dismissButton.innerHTML = `<span class=\"tako-icon tako-icon--md\"><i class=\"far fa-xmark\" aria-hidden=\"true\"></i></span>`;\n\n            takoDismissibleAlert.appendChild(dismissButton);\n\n            const dismissAlert = () => {\n                takoDismissibleAlert.style.display = 'none';\n            };\n\n            dismissButton.addEventListener('click', dismissAlert);\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: takoDismissibleAlert,\n            });\n        }\n    });\n};\n\nconst addAlertContentWrapper = (takoAlert: HTMLElement): void => {\n    const contentContainer = document.createElement('div');\n    contentContainer.classList.add('tako-alert__content');\n    contentContainer.append(...takoAlert.childNodes);\n    takoAlert.appendChild(contentContainer);\n};\n","/**\n * Initialise Tako breadcrumbs\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Breadcrumbs\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Breadcrumbs';\n\nexport const init = (unresolvedScope: string | HTMLElement | unknown) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoBreadcrumbs =\n        scope.querySelectorAll<HTMLElement>('.tako-breadcrumbs');\n    allTakoBreadcrumbs.forEach((takoBreadcrumbs) => {\n        try {\n            const truncatedBreadcrumbs = takoBreadcrumbs.querySelectorAll(\n                '.tako-breadcrumbs--truncated',\n            );\n\n            truncatedBreadcrumbs.forEach((truncatedBreadcrumb) => {\n                const breadcrumbLink = truncatedBreadcrumb.querySelector('a');\n                if (breadcrumbLink) {\n                    breadcrumbLink.setAttribute(\n                        'data-tooltip-content',\n                        breadcrumbLink.textContent || '',\n                    );\n                    breadcrumbLink.setAttribute('data-placement', 'top');\n                }\n            });\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: takoBreadcrumbs,\n            });\n        }\n    });\n};\n","/**\n * Initialise Tako buttons\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Button\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Button';\n\nexport const init = (unresolvedScope: string | Element | unknown) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoIconButtons =\n        scope.querySelectorAll<HTMLElement>('.tako-button--icon');\n\n    allTakoIconButtons.forEach((iconButton) => {\n        try {\n            const srContentText =\n                iconButton.dataset.srOnlyText ||\n                iconButton.getAttribute('aria-label') ||\n                iconButton.getAttribute('title');\n\n            if (!srContentText) {\n                // Currently no action is taken if there is no accessible text. In the future we need\n                // to consider displaying a warning in localdev if the icon-button has no accessible text.\n                return;\n            }\n\n            // Return if the user has already provided sr-only content\n            if (\n                iconButton.querySelector('span.sr-only') ||\n                iconButton.querySelector('span.tako-sr-only')\n            ) {\n                return;\n            }\n\n            const srContent = document.createElement('span');\n            srContent.classList.add('tako-sr-only');\n            srContent.innerText = srContentText;\n            iconButton.prepend(srContent);\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: iconButton,\n            });\n        }\n    });\n};\n","/**\n * Create and initialise Tako card\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Card\n * -------------------------------------------------------------------------- */\nimport { getDirectChildren } from './utils/getDirectChildren';\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Card';\n\nconst cardInstances = new Map();\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    /**\n     * tako-card--collapsible class is @deprecated\n     */\n    const closableCardsWithLegacyClass = scope.querySelectorAll(\n        '.tako-card--collapsible',\n    );\n\n    if (closableCardsWithLegacyClass.length) {\n        logger.warn(\n            'The `tako-card--collapsible` class is deprecated. Please use the `data-closable` attribute instead.',\n            defaultLoggerArgs,\n        );\n    }\n\n    const allClosableTakoCards = scope.querySelectorAll(\n        '.tako-card[data-closable], .tako-card[data-open], .tako-card--collapsible',\n    );\n\n    allClosableTakoCards.forEach((takoCard) => {\n        try {\n            const instanceLoggerArgs = {\n                ...defaultLoggerArgs,\n                element: takoCard,\n            };\n            const openIconHTML =\n                '<span class=\"tako-icon\"><i class=\"far fa-angle-down\" aria-hidden=\"true\"></i></span>';\n            const closeIconHTML =\n                '<span class=\"tako-icon\"><i class=\"far fa-angle-up\" aria-hidden=\"true\"></i></span>';\n            const closeText = 'Close section';\n            const openText = 'Open section';\n            const cardHeader = getDirectChildren(\n                takoCard,\n                'tako-card__header',\n            )[0];\n            const cardContent = getDirectChildren(\n                takoCard,\n                'tako-card__content',\n            );\n            const DATA_OPEN = 'data-open';\n\n            if (!cardHeader) {\n                logger.warn(\n                    'Collapsible Cards must have a card header - add one using the `tako-card__header` class',\n                    instanceLoggerArgs,\n                );\n                return;\n            }\n\n            if (!cardContent.length) {\n                logger.warn(\n                    'Collapsible cards without a content class are deprecated. Please add the `tako-card__content` class to the card content.',\n                    instanceLoggerArgs,\n                );\n            }\n\n            // Set the attribute data-open to false if card content is hidden\n            cardContent.forEach((item) => {\n                if (window.getComputedStyle(item).display === 'none') {\n                    item.closest('.tako-card').setAttribute(DATA_OPEN, false);\n                }\n            });\n\n            // replace deprecated `tako-card--collapsed` class with `data-open=\"false\"` attribute for closable cards\n            if (takoCard.classList.contains('tako-card--collapsed')) {\n                logger.warn(\n                    'The `tako-card--collapsed` class is deprecated. Please use the `data-open` attribute instead.',\n                    instanceLoggerArgs,\n                );\n                takoCard.setAttribute(DATA_OPEN, false);\n            }\n\n            // Set data attribute to open cards by default\n            if (\n                !takoCard.hasAttribute(DATA_OPEN) ||\n                takoCard.getAttribute(DATA_OPEN) !== 'false'\n            ) {\n                takoCard.setAttribute(DATA_OPEN, true);\n            }\n\n            const isCardOpen = takoCard.getAttribute(DATA_OPEN) !== 'false';\n\n            /**\n             * tako-card__toggle-button class is @deprecated in favour of data-card-toggle attribute\n             * leaving legacy class in case it's used in custom JS\n             * ToDo: remove it with the next breaking change\n             */\n            const legacyCardToggleClass = 'tako-card__toggle-button';\n\n            // Create a toggle button and add to the card header\n            const toggleButton = document.createElement('button');\n            toggleButton.classList.add(\n                'tako-button',\n                'tako-button--secondary',\n                'tako-button--ghost',\n                'tako-button--icon',\n                legacyCardToggleClass,\n            );\n            toggleButton.setAttribute('type', 'button');\n            toggleButton.setAttribute('data-card-toggle', true);\n            toggleButton.setAttribute(\n                'title',\n                isCardOpen ? closeText : openText,\n            );\n            toggleButton.innerHTML = isCardOpen ? closeIconHTML : openIconHTML;\n\n            const headerButtonGroup = getDirectChildren(\n                cardHeader,\n                'tako-button-group',\n            )[0];\n\n            const headerButtons = getDirectChildren(cardHeader, 'tako-button');\n\n            if (headerButtonGroup) {\n                headerButtonGroup.append(toggleButton);\n            } else if (!headerButtonGroup && headerButtons.length) {\n                // Wrap buttons in a tako-button-group div\n                const newButtonGroup = document.createElement('div');\n                newButtonGroup.classList.add('tako-button-group');\n                cardHeader.append(newButtonGroup);\n                headerButtons.forEach((button) => {\n                    newButtonGroup.append(button);\n                });\n                newButtonGroup.append(toggleButton);\n            } else {\n                cardHeader.append(toggleButton);\n            }\n\n            const cardToggleButton =\n                takoCard.querySelector('[data-card-toggle]');\n\n            if (!cardToggleButton) {\n                logger.warn(\n                    'Card toggle button is not found',\n                    instanceLoggerArgs,\n                );\n                return;\n            }\n\n            // Legacy code: Find first sibling of the card header to toggle visibility regardless of class\n            const getFirstSiblingWithoutClass = () => {\n                const firstSibling = cardHeader.nextElementSibling;\n                return firstSibling &&\n                    !firstSibling.classList.contains('tako-card__content')\n                    ? firstSibling\n                    : null;\n            };\n            const firstSiblingWithoutClass = getFirstSiblingWithoutClass();\n\n            /**\n             * @deprecated use the class tako-card__content to toggle card content instead\n             */\n            const openFirstSibling = () => {\n                firstSiblingWithoutClass.style.display = '';\n                firstSiblingWithoutClass.setAttribute('aria-hidden', false);\n            };\n\n            /**\n             * @deprecated use the class tako-card__content to toggle card content instead\n             */\n            const closeFirstSibling = () => {\n                firstSiblingWithoutClass.style.display = 'none';\n                firstSiblingWithoutClass.setAttribute('aria-hidden', true);\n            };\n\n            if (!isCardOpen) {\n                if (firstSiblingWithoutClass) {\n                    firstSiblingWithoutClass.style.display = 'none';\n                }\n                cardContent.forEach((item) => (item.style.display = 'none'));\n            }\n\n            const setAriaAttributes = (isCardOpen) => {\n                cardContent.forEach((item) =>\n                    item.setAttribute('aria-hidden', !isCardOpen),\n                );\n                cardToggleButton.setAttribute('aria-expanded', isCardOpen);\n            };\n\n            setAriaAttributes(isCardOpen);\n\n            const open = () => {\n                // remove deprecated `tako-card--collapsed` class\n                takoCard.classList.remove('tako-card--collapsed');\n                takoCard.setAttribute(DATA_OPEN, true);\n\n                cardContent.forEach((item) => {\n                    // Reset the original display value\n                    item.style.display = '';\n                    // Force visibility if card content is hidden by a utility class or custom styles\n                    if (window.getComputedStyle(item).display === 'none') {\n                        item.style.display = 'block';\n                    }\n                });\n\n                cardToggleButton.innerHTML = closeIconHTML;\n                cardToggleButton.setAttribute('title', closeText);\n                setAriaAttributes(true);\n                if (firstSiblingWithoutClass) {\n                    openFirstSibling();\n                }\n\n                // Emit a custom event when the card is opened\n                const openEvent = new CustomEvent('takoCardOpen', {\n                    detail: {\n                        takoCard,\n                        cardToggleButton,\n                        id: takoCard.id,\n                    },\n                });\n                takoCard.dispatchEvent(openEvent);\n            };\n\n            const close = () => {\n                // add deprecated `tako-card--collapsed` class\n                takoCard.classList.add('tako-card--collapsed');\n                takoCard.setAttribute(DATA_OPEN, false);\n\n                cardContent.forEach((item) => (item.style.display = 'none'));\n\n                cardToggleButton.innerHTML = openIconHTML;\n                cardToggleButton.setAttribute('title', openText);\n                setAriaAttributes(false);\n                if (firstSiblingWithoutClass) {\n                    closeFirstSibling();\n                }\n\n                // Emit a custom event when the card is closed\n                const closeEvent = new CustomEvent('takoCardClose', {\n                    detail: {\n                        takoCard,\n                        cardToggleButton,\n                        id: takoCard.id,\n                    },\n                });\n                takoCard.dispatchEvent(closeEvent);\n            };\n\n            // Handle toggle button click events\n            const handleClick = () => {\n                if (takoCard.getAttribute(DATA_OPEN) !== 'false') {\n                    close();\n                } else {\n                    open();\n                }\n            };\n\n            cardToggleButton.addEventListener('click', handleClick);\n\n            // Store the instance for external control via `toggle`\n            cardInstances.set(takoCard, { open, close });\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: takoCard,\n            });\n        }\n    });\n};\n\n/**\n * Tako Card Functions\n */\n\nconst debounceDelay = 100;\nconst debounceTimeouts = new Map();\n\n/**\n * Toggles the visibility of one or more Tako Card components.\n *\n * @param {string} selector - Document query selector (id or class) to target the card(s).\n *                            Accepts an id (e.g., '#my-card') or a class (e.g., '.my-card-class').\n * @param {boolean|null} [open=null] - Optional. If `true`, explicitly open the card(s).\n *                                     If `false`, explicitly close the card(s).\n *                                     If `null` (default), the card's current state will be toggled.\n *\n * @example\n * // Toggle based on the current state (open if closed, close if open):\n * toggleCard('.my-card-class');\n *\n * @example\n * // Explicitly open the card(s):\n * toggleCard('#my-card-id', true);\n *\n * @example\n * // Explicitly close the card(s):\n * toggleCard('.my-card-class', false);\n */\nexport const toggle = (selector, open = null) => {\n    const logger = getLogger();\n\n    // Support id's without the # prefix\n    if (selector[0] !== '#' && selector[0] !== '.') {\n        selector = `#${selector}`;\n    }\n\n    // Get all elements that match the selector (could be multiple if class selector is used)\n    const takoCardElements = document.querySelectorAll(selector);\n\n    if (!takoCardElements.length) {\n        logger.warn(\n            `No Tako Card components found with the selector \"${selector}\".`,\n        );\n        return;\n    }\n\n    takoCardElements.forEach((takoCardElement) => {\n        const instance = cardInstances.get(takoCardElement);\n\n        if (!instance) {\n            logger.warn(\n                `No instance found for the element with the selector \"${selector}\". Make sure the Tako card has been initialized.`,\n            );\n            return;\n        }\n\n        // Clear any existing timeout for this card\n        if (debounceTimeouts.has(takoCardElement)) {\n            clearTimeout(debounceTimeouts.get(takoCardElement));\n        }\n\n        const shouldOpen =\n            open !== null\n                ? open\n                : takoCardElement.getAttribute('data-open') === 'false'; // If `open` is null, toggle based on current state\n\n        // Handle debounce delay to ensure proper timing\n        debounceTimeouts.set(\n            takoCardElement,\n            setTimeout(() => {\n                if (shouldOpen) {\n                    instance.open();\n                } else {\n                    instance.close();\n                }\n\n                // Remove the timeout once it's executed\n                debounceTimeouts.delete(takoCardElement);\n            }, debounceDelay),\n        );\n    });\n};\n","/**\n * Retrieves the direct child elements of a given element, optionally filtered by a class name.\n *\n * @param {HTMLElement | Element | null | undefined} el - The parent element.\n * @param {string} [classSelector] - Optional class name to filter the direct children.\n * @returns {HTMLElement[]} An array of direct child elements that match the optional class selector.\n */\nexport const getDirectChildren = (\n    el: HTMLElement | Element | null | undefined,\n    classSelector?: string,\n): HTMLElement[] => {\n    if (!el) {\n        return [];\n    }\n\n    const directChildren = Array.from(el.children).filter((child) =>\n        classSelector ? child.classList.contains(classSelector) : true,\n    ) as HTMLElement[];\n\n    return directChildren;\n};\n","/* -----------------------------------------------------------------------------\n * Checkbox\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Checkbox';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    // Create custom checkbox\n    const takoCheckboxes = scope.querySelectorAll(\n        \"input[type='checkbox'].tako-form-control:not([role='switch'])\",\n    );\n\n    takoCheckboxes.forEach((checkbox) => {\n        try {\n            const checkboxParent = checkbox.parentElement;\n\n            // Add class to parent label to be able to apply styles\n            if (checkboxParent.tagName === 'LABEL') {\n                if (checkbox.disabled) {\n                    checkboxParent.classList.add(\n                        'tako-checkbox__parent-label',\n                        'tako-checkbox__parent-label-disabled',\n                    );\n                } else {\n                    checkboxParent.classList.add('tako-checkbox__parent-label');\n                }\n            }\n\n            // Wrap the checkbox and custom checkbox in a container for positioning\n            const checkboxWrapper = document.createElement('div');\n            checkboxWrapper.classList.add('tako-checkbox__wrapper');\n            checkbox.parentNode.insertBefore(checkboxWrapper, checkbox);\n            checkboxWrapper.appendChild(checkbox);\n\n            // Add custom tako checkbox\n            const customTakoCheckbox = document.createElement('span');\n            customTakoCheckbox.classList.add(\n                'tako-form-control',\n                'tako-form-control--checkmark',\n            );\n            const checkIcon = `<span class=\"tako-icon tako-checkbox__check-icon\"><i class=\"far fa-check\"></i></span>`;\n            const indeterminateIcon = `<span class=\"tako-icon tako-checkbox__indeterminate-icon\"><i class=\"far fa-minus\"></i></span>`;\n            customTakoCheckbox.innerHTML = checkIcon + indeterminateIcon;\n\n            checkbox.style.opacity = '0';\n            checkbox.parentNode.insertBefore(\n                customTakoCheckbox,\n                checkbox.nextSibling,\n            );\n\n            // Toggle all checkboxes in checkbox groups when checking the parent checkbox\n            const isMultiCheckboxParent =\n                checkbox.hasAttribute('data-select-all');\n\n            if (isMultiCheckboxParent) {\n                toggleCheckboxGroup(checkbox);\n            }\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: checkbox,\n            });\n        }\n    });\n\n    // Toggle checkbox when hitting enter\n    takoCheckboxes.forEach((el) => {\n        el.addEventListener('keydown', (evt) => {\n            const isTakoCheckboxInputChecked = evt.target.checked\n                ? true\n                : false;\n            if (evt.key === 'Enter') {\n                evt.preventDefault();\n                evt.target.checked = !isTakoCheckboxInputChecked;\n                evt.target.indeterminate = false;\n            }\n        });\n    });\n};\n\nconst toggleCheckboxGroup = (parentCheckbox) => {\n    const logger = getLogger();\n\n    const multiCheckboxTarget = parentCheckbox.getAttribute('data-select-all');\n    const multiCheckboxGroup = document.querySelector(\n        `#${multiCheckboxTarget}`,\n    );\n\n    if (!multiCheckboxGroup) {\n        logger.warn(\n            `Tako Checkbox: no checkbox group found with the id \"${multiCheckboxTarget}\".`,\n        );\n        return;\n    }\n\n    const multiCheckboxes = multiCheckboxGroup.querySelectorAll(\n        \"input[type='checkbox']\",\n    );\n\n    // Toggle parent checkbox visibility\n    const parentCheckboxWrapper =\n        parentCheckbox.closest('.tako-checkbox__parent-label') ||\n        parentCheckbox.closest('.tako-checkbox__wrapper');\n\n    if (multiCheckboxes.length <= 1) {\n        parentCheckboxWrapper.style.display = 'none';\n    } else {\n        parentCheckboxWrapper.style.display = '';\n    }\n\n    const getCheckboxGroupStatus = () => {\n        let allChecked = true;\n        let someChecked = false;\n\n        for (const checkbox of multiCheckboxes) {\n            if (checkbox.checked) {\n                someChecked = true;\n            } else {\n                allChecked = false;\n            }\n\n            if (someChecked && !allChecked) {\n                break; // Early exit\n            }\n        }\n\n        return { allChecked, someChecked };\n    };\n\n    const toggleCheckboxes = () => {\n        const { allChecked, someChecked } = getCheckboxGroupStatus();\n\n        multiCheckboxes.forEach((multiCheckbox) => {\n            // If some are checked but not all, set all to true; otherwise, toggle.\n            multiCheckbox.checked =\n                someChecked && !allChecked ? true : !multiCheckbox.checked;\n        });\n    };\n\n    const updateParentCheckbox = () => {\n        const { allChecked, someChecked } = getCheckboxGroupStatus();\n\n        if (allChecked) {\n            parentCheckbox.indeterminate = false;\n            parentCheckbox.checked = true;\n        } else if (someChecked) {\n            parentCheckbox.indeterminate = true;\n            parentCheckbox.checked = false;\n        } else {\n            parentCheckbox.indeterminate = false;\n            parentCheckbox.checked = false;\n        }\n    };\n\n    // Handle click on individual checkboxes with shift selection\n    let lastChecked = null;\n    const selectRangeOfCheckboxesWithShift = (evt, multiCheckbox) => {\n        if (evt.shiftKey) {\n            if (!lastChecked) {\n                lastChecked = multiCheckbox;\n                return;\n            }\n\n            const checkboxes = Array.from(multiCheckboxes);\n            const start = checkboxes.indexOf(multiCheckbox);\n            const end = checkboxes.indexOf(lastChecked);\n            const [low, high] = [Math.min(start, end), Math.max(start, end)];\n\n            for (let i = low; i <= high; i++) {\n                checkboxes[i].checked = lastChecked.checked;\n            }\n        }\n\n        lastChecked = multiCheckbox;\n    };\n\n    // Add event listeners to parent checkbox\n    parentCheckbox.addEventListener('click', toggleCheckboxes);\n    parentCheckbox.addEventListener('keydown', (evt) => {\n        if (evt.key === 'Enter') {\n            evt.preventDefault();\n            toggleCheckboxes();\n        }\n    });\n\n    // Add event listeners to checkboxes in the group\n    multiCheckboxes.forEach((multiCheckbox) => {\n        multiCheckbox.addEventListener('click', (evt) => {\n            selectRangeOfCheckboxesWithShift(evt, multiCheckbox);\n            updateParentCheckbox();\n        });\n\n        // Update status of parent checkbox when hitting enter\n        multiCheckbox.addEventListener('keyup', (evt) => {\n            if (evt.key === 'Enter') {\n                evt.preventDefault();\n                updateParentCheckbox();\n            }\n        });\n    });\n\n    updateParentCheckbox();\n};\n","/**\n * Create and initialise Tako dropdown buttons\n */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\n/* -----------------------------------------------------------------------------\n * Tako Dropdown Button\n * -------------------------------------------------------------------------- */\n\nconst dropdownInstances = new Map();\n\n/**\n * Initialize Tako Dropdown\n */\n\nconst COMPONENT_NAME = 'Dropdown';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n\n    const merge = (originalObject, overrides) => {\n        return Object.values(\n            []\n                .concat(originalObject, overrides)\n                .reduce(\n                    (properties, currentProperty) => (\n                        (properties[currentProperty.name] = Object.assign(\n                            properties[currentProperty.name] || {},\n                            currentProperty,\n                        )),\n                        properties\n                    ),\n                    {},\n                ),\n        );\n    };\n\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoDropdowns = scope.querySelectorAll('.tako-dropdown__wrapper');\n\n    allTakoDropdowns.forEach((takoDropdown) => {\n        try {\n            const button = takoDropdown.querySelector('.tako-button--dropdown');\n            const dropdown = takoDropdown.querySelector('.tako-dropdown');\n\n            if (!button || !dropdown) {\n                logger.warn(\n                    'Tako dropdown wrappers must contain a button and a dropdown menu. Add these inside the `tako-dropdown__wrapper` using the `tako-button--dropdown` and `tako-dropdown` classes.',\n                );\n                return;\n            }\n\n            button.setAttribute('aria-expanded', false);\n            dropdown.setAttribute('aria-hidden', true);\n\n            const isTakoIconButton =\n                button.classList.contains('tako-button--icon');\n\n            // eslint-disable-next-line no-undef\n            const popperDropdownInstance = Popper.createPopper(\n                button,\n                dropdown,\n                {\n                    placement: 'bottom-start',\n                    modifiers: [\n                        {\n                            name: 'offset',\n                            options: {\n                                offset: [0, 2],\n                            },\n                        },\n                    ],\n                },\n            );\n\n            const setPopperDropdownOptions = (newModifier) => {\n                popperDropdownInstance.setOptions((options) =>\n                    Object.assign(options, {\n                        modifiers: merge(options.modifiers, newModifier),\n                    }),\n                );\n            };\n\n            const dropdownItems = dropdown.querySelectorAll(\n                '.tako-dropdown__item:not(.tako-dropdown__item--disabled)',\n            );\n            dropdownItems.forEach((item) =>\n                item.setAttribute('tabindex', '-1'),\n            );\n\n            const open = () => {\n                const closeIconHTML =\n                    '<i class=\"far fa-angle-up\" aria-hidden=\"true\" title=\"Close dropdown\"></i>';\n\n                dropdown.setAttribute('data-open', true);\n                button.classList.add('active');\n                if (!isTakoIconButton) {\n                    const angleDownIcon =\n                        button.querySelector('.fa-angle-down');\n                    if (angleDownIcon) {\n                        angleDownIcon.outerHTML = closeIconHTML;\n                    }\n                }\n\n                setPopperDropdownOptions([\n                    { name: 'eventListeners', enabled: true },\n                ]);\n\n                popperDropdownInstance.update();\n\n                button.setAttribute('aria-expanded', true);\n                dropdown.setAttribute('aria-hidden', false);\n\n                // Emit a custom event when the dropdown is opened\n                const openEvent = new CustomEvent('takoDropdownOpen', {\n                    detail: {\n                        dropdown,\n                        button,\n                        id: takoDropdown.id,\n                    },\n                });\n                takoDropdown.dispatchEvent(openEvent);\n            };\n\n            const close = () => {\n                const openIconHTML =\n                    '<i class=\"far fa-angle-down\" aria-hidden=\"true\" title=\"Open dropdown\"></i>';\n\n                dropdown.removeAttribute('data-open');\n                button.classList.remove('active');\n                if (!isTakoIconButton) {\n                    const angleUpIcon = button.querySelector('.fa-angle-up');\n                    if (angleUpIcon) {\n                        angleUpIcon.outerHTML = openIconHTML;\n                    }\n                }\n\n                setPopperDropdownOptions([\n                    { name: 'eventListeners', enabled: false },\n                ]);\n\n                button.setAttribute('aria-expanded', false);\n                dropdown.setAttribute('aria-hidden', true);\n\n                // Emit a custom event when the dropdown is closed\n                const closeEvent = new CustomEvent('takoDropdownClose', {\n                    detail: {\n                        dropdown,\n                        button,\n                        id: takoDropdown.id,\n                    },\n                });\n                takoDropdown.dispatchEvent(closeEvent);\n            };\n\n            const handleClick = () => {\n                if (dropdown.hasAttribute('data-open')) {\n                    close();\n                } else {\n                    open();\n                }\n            };\n\n            const handleKeydown = (event) => {\n                if (\n                    event.target.classList.contains('tako-dropdown__item') &&\n                    (event.key === 'Enter' || event.key === ' ')\n                ) {\n                    event.target.click();\n                }\n\n                // We ignore these events, and let them perform their default action\n                if (\n                    event.key === 'Space' ||\n                    event.key === 'Enter' ||\n                    event.key === 'Tab'\n                ) {\n                    return;\n                }\n\n                event.preventDefault();\n\n                const items = Array.from(\n                    dropdown.querySelectorAll('.tako-dropdown__item'),\n                );\n\n                let index = items.indexOf(event.target);\n\n                if (event.key === 'ArrowUp' && index > 0) {\n                    index -= 1;\n                }\n\n                if (event.key === 'ArrowDown' && index < items.length - 1) {\n                    index += 1;\n                }\n\n                if (index < 0) {\n                    index = 0;\n                }\n\n                items[index].focus();\n            };\n\n            button.addEventListener('click', handleClick);\n\n            button.addEventListener('keydown', handleKeydown);\n\n            dropdownItems.forEach((item) => {\n                item.addEventListener('keydown', handleKeydown);\n            });\n\n            dropdownItems.forEach((item) =>\n                item.addEventListener('click', close),\n            );\n\n            if (\n                takoDropdown.getAttribute('data-close-onclick-outside') !==\n                'false'\n            ) {\n                document.addEventListener(\n                    'click',\n                    function closeOnClickOutside(event) {\n                        if (\n                            !(\n                                event.target === button ||\n                                event.target.classList.contains(\n                                    'tako-dropdown',\n                                ) ||\n                                event.target.classList.contains(\n                                    'tako-dropdown__item',\n                                )\n                            ) &&\n                            dropdown.hasAttribute('data-open')\n                        ) {\n                            close();\n                        }\n                    },\n                );\n            }\n            /**\n             * if dropdown button is part of a modal\n             * - add an attribute to the dropdown to change its z-index\n             */\n            if (button.closest('.tako-modal__dialog')) {\n                dropdown.setAttribute('data-modal-content', true);\n            }\n\n            // Store the instance for external control via `toggle`\n            dropdownInstances.set(takoDropdown, { open, close });\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: takoDropdown,\n            });\n        }\n    });\n};\n\n/**\n * Tako Dropdown Functions\n */\n\nconst debounceDelay = 100;\nconst debounceTimeouts = new Map();\n\n/**\n * Toggles the visibility of one or more Tako Dropdown components.\n *\n * @param {string} selector - Document query selector (id or class) to target the dropdown(s).\n *                            Accepts an id (e.g., '#my-dropdown') or a class (e.g., '.my-dropdown-class').\n * @param {boolean|null} [open=null] - Optional. If `true`, explicitly open the dropdown(s).\n *                                     If `false`, explicitly close the dropdown(s).\n *                                     If `null` (default), the dropdown's current state will be toggled.\n *\n * @example\n * // Toggle based on the current state (open if closed, close if open):\n * toggleDropdown('.my-dropdown-class');\n *\n * @example\n * // Explicitly open the dropdown(s):\n * toggleDropdown('#my-dropdown-id', true);\n *\n * @example\n * // Explicitly close the dropdown(s):\n * toggleDropdown('.my-dropdown-class', false);\n */\nexport const toggle = (selector, open = null) => {\n    const logger = getLogger();\n\n    // Support id's without the # prefix\n    if (selector[0] !== '#' && selector[0] !== '.') {\n        selector = `#${selector}`;\n    }\n\n    // Get all elements that match the selector (could be multiple if class selector is used)\n    const takoDropdownElements = document.querySelectorAll(selector);\n\n    if (!takoDropdownElements.length) {\n        logger.warn(\n            `No Tako Dropdown components found with the selector \"${selector}\".`,\n        );\n        return;\n    }\n\n    takoDropdownElements.forEach((takoDropdownElement) => {\n        const instance = dropdownInstances.get(takoDropdownElement);\n\n        if (!instance) {\n            logger.warn(\n                `No instance found for the element with the selector \"${selector}\". Make sure the Tako dropdown has been initialized.`,\n            );\n            return;\n        }\n\n        const dropdown = takoDropdownElement.querySelector('.tako-dropdown');\n\n        // Clear any existing timeout for this dropdown\n        if (debounceTimeouts.has(takoDropdownElement)) {\n            clearTimeout(debounceTimeouts.get(takoDropdownElement));\n        }\n\n        const shouldOpen =\n            open !== null ? open : !dropdown.hasAttribute('data-open'); // If `open` is null, toggle based on current state\n\n        // Handle debounce delay to ensure proper timing\n        debounceTimeouts.set(\n            takoDropdownElement,\n            setTimeout(() => {\n                if (shouldOpen) {\n                    instance.open();\n                } else {\n                    instance.close();\n                }\n\n                // Remove the timeout once it's executed\n                debounceTimeouts.delete(takoDropdownElement);\n            }, debounceDelay),\n        );\n    });\n};\n","import { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'List';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const takoLists = scope.querySelectorAll('.tako-list');\n\n    takoLists.forEach((list) => {\n        try {\n            const items = list.querySelectorAll('li');\n\n            if (items) {\n                items.forEach((listItem) => {\n                    listItem.setAttribute('tabindex', '0');\n                });\n            }\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: list,\n            });\n        }\n    });\n\n    const autoSelectLists = scope.querySelectorAll(\n        '.tako-list[data-auto-select=true]',\n    );\n\n    autoSelectLists.forEach((list) => {\n        try {\n            const items = list.querySelectorAll('li');\n\n            if (items) {\n                items.forEach((listItem) => {\n                    listItem.addEventListener('click', () => {\n                        items.forEach((item) => {\n                            item.classList.remove('tako-list__item--selected');\n                        });\n                        listItem.classList.add('tako-list__item--selected');\n                    });\n                });\n            }\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: list,\n            });\n        }\n    });\n};\n","/* -----------------------------------------------------------------------------\n * Tako Link & Link-Button\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Link';\n\nexport const init = (unresolvedScope: string | HTMLElement | unknown) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoLinks = scope.querySelectorAll<HTMLAnchorElement>(\n        'a.tako-link, a.tako-button',\n    );\n\n    allTakoLinks.forEach((link) => {\n        try {\n            if (\n                link.classList.contains('disabled') &&\n                link.getAttribute('aria-disabled') !== 'true'\n            ) {\n                // Failsafe: Strip the `href` if it slipped into the HTML\n                if (link.hasAttribute('href')) {\n                    link.removeAttribute('href');\n                }\n\n                link.setAttribute('role', 'link');\n                link.setAttribute('aria-disabled', 'true');\n            }\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: link,\n            });\n        }\n    });\n};\n","/**\n * Create and initialise Tako modal\n */\n/* -----------------------------------------------------------------------------\n * Tako Modal\n * -------------------------------------------------------------------------- */\nimport { takoUUID } from './utils/takoUUID';\nimport { createHtmxModal } from './htmx-components/htmx-tako-modal';\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Modal';\n\nconst handleModalEscapeKeydown = (event) => {\n    if (event.key === 'Escape') {\n        const modal = document.querySelector('.tako-modal.show');\n\n        if (modal) {\n            const modalId = modal.getAttribute('id');\n            toggle(modalId, false);\n        }\n    }\n};\n\nconst validateModalId = (modalId) => {\n    const logger = getLogger();\n\n    const idSelector = modalId.charAt(0) !== '#' ? '#' : '';\n    const modal = document.querySelector(idSelector + modalId);\n\n    if (!modal) {\n        logger.warn(\n            `Tako Modal with id '${modalId}' was not found, please enter a valid modal id`,\n        );\n        return null;\n    } else {\n        return idSelector + modalId;\n    }\n};\n\nexport const toggle = (modalId, show = null) => {\n    const validModalId = validateModalId(modalId);\n\n    if (validModalId) {\n        const modal = document.querySelector(validModalId);\n\n        const allDismissButtons = modal.querySelectorAll(\n            '[data-modal-dismiss]',\n        );\n\n        const enforceFocus = (event) => {\n            if (\n                modal.contains(event.relatedTarget) &&\n                !modal.contains(event.target) &&\n                !event.target.hasAttribute('data-modal-content') &&\n                !event.target.closest('[data-modal-content]')\n            ) {\n                allDismissButtons[0].focus();\n            }\n        };\n\n        const close = () => {\n            modal.classList.remove('show');\n\n            const modalButton = getModalButton(modal);\n\n            if (modalButton) {\n                modalButton.focus();\n            }\n\n            document.body.classList.remove('tako-modal--open');\n            document.body.removeEventListener(\n                'keydown',\n                handleModalEscapeKeydown,\n            );\n            document.removeEventListener('focusin', enforceFocus);\n\n            // Emit a custom event when the modal is closed\n            const closeEvent = new CustomEvent('takoModalClose', {\n                detail: {\n                    modal,\n                    id: modal.id,\n                },\n            });\n            modal.dispatchEvent(closeEvent);\n        };\n\n        const open = () => {\n            modal.classList.add('show');\n            modal.setAttribute('tabindex', '-1');\n\n            document.body.classList.add('tako-modal--open');\n            document.body.addEventListener('keydown', handleModalEscapeKeydown);\n            document.addEventListener('focusin', enforceFocus);\n\n            // Emit a custom event when the modal is opened\n            const openEvent = new CustomEvent('takoModalOpen', {\n                detail: {\n                    modal,\n                    id: modal.id,\n                },\n            });\n            modal.dispatchEvent(openEvent);\n        };\n\n        const shouldOpen =\n            show !== null ? show : !modal.classList.contains('show'); // If `open` is null, toggle based on current state\n\n        if (shouldOpen) {\n            open();\n        } else {\n            close();\n        }\n    }\n};\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allHtmxModalButtons = scope.querySelectorAll('[data-modal-hx-url]');\n\n    if (allHtmxModalButtons) {\n        allHtmxModalButtons.forEach((htmxModalButton) => {\n            createHtmxModal(htmxModalButton);\n        });\n    }\n\n    const allTakoModals = scope.querySelectorAll('.tako-modal');\n\n    allTakoModals.forEach((takoModal) => {\n        try {\n            const instanceLoggerArgs = {\n                ...defaultLoggerArgs,\n                element: takoModal,\n            };\n            takoModal.setAttribute('aria-modal', true);\n            takoModal.setAttribute('role', 'dialog');\n\n            const dismissButton = createDismissButton();\n            const modalDialog = takoModal.querySelector('.tako-modal__dialog');\n\n            // Check the modal contains a dialog before appending the dismiss button\n            if (!modalDialog) {\n                logger.warn(\n                    'Tako modals must contain a dialog - add one using the `tako-modal__dialog` class',\n                    instanceLoggerArgs,\n                );\n                return;\n            }\n\n            modalDialog.setAttribute('role', 'document');\n            modalDialog.prepend(dismissButton);\n\n            const takoModalId = takoModal.getAttribute('id');\n\n            if (!takoModalId) {\n                logger.warn(\n                    'Tako modals must have a unique id - add one using the `id=\"modalId\"` attribute',\n                    instanceLoggerArgs,\n                );\n                return;\n            }\n\n            const takoModalButton = getModalButton(takoModal);\n\n            if (takoModalButton) {\n                takoModalButton.addEventListener('click', () => {\n                    toggle(takoModalId, true);\n                });\n            }\n\n            if (takoModal.getAttribute('data-overlay') !== 'static') {\n                takoModal.addEventListener('click', (event) => {\n                    if (event.target === takoModal) {\n                        toggle(takoModalId, false);\n                    }\n                });\n            }\n\n            if (takoModalButton) {\n                const modalTitle =\n                    takoModalButton.getAttribute('data-modal-title');\n\n                if (modalTitle) {\n                    addModalHeader(takoModal, modalTitle);\n                }\n            }\n\n            const modalHeader = takoModal.querySelector('.tako-modal__title');\n\n            if (modalHeader) {\n                const modalTitleId = takoUUID('modal-title');\n                modalHeader.setAttribute('id', modalTitleId);\n                takoModal.setAttribute('aria-labelledby', modalTitleId);\n            }\n\n            const isAutoDismissButton =\n                takoModal.hasAttribute('data-auto-dismiss-button') ||\n                (takoModalButton &&\n                    takoModalButton.hasAttribute(\n                        'data-modal-auto-dismiss-button',\n                    ));\n\n            // Add footer and dismiss button automaticaly with data-auto-dismiss-button=\"buttonLabel\"\n            if (isAutoDismissButton) {\n                addAutoDismissButton(takoModal);\n            }\n\n            const allDismissButtons = takoModal.querySelectorAll(\n                '[data-modal-dismiss]',\n            );\n            allDismissButtons.forEach((dismissButton) => {\n                const dismissAttribute =\n                    dismissButton.getAttribute('data-modal-dismiss');\n\n                if (dismissAttribute === 'true' || dismissAttribute === '') {\n                    dismissButton.addEventListener('click', () =>\n                        toggle(takoModalId, false),\n                    );\n                }\n            });\n\n            const focusableElements = takoModal.querySelectorAll(\n                'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])',\n            );\n            const focusLastElement = (event) => {\n                if (event.shiftKey && event.key === 'Tab') {\n                    event.preventDefault();\n                    focusableElements[focusableElements.length - 1]?.focus();\n                }\n            };\n\n            if (focusableElements[0]) {\n                focusableElements[0].addEventListener(\n                    'keydown',\n                    focusLastElement,\n                );\n            }\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: takoModal,\n            });\n        }\n    });\n};\n\nconst getModalButton = (modal) => {\n    const modalId = modal.getAttribute('id');\n    const modalButton = document.querySelector(\n        `[data-modal-target='${modalId}'],\n        [data-modal-target='#${modalId}']`,\n    );\n\n    return modalButton;\n};\n\nconst addModalHeader = (modal, title) => {\n    const modalHeader = document.createElement('h2');\n    modalHeader.innerText = title;\n    modalHeader.classList.add('tako-modal__title');\n\n    const modalDialog = modal.querySelector('.tako-modal__dialog');\n    modalDialog.prepend(modalHeader);\n};\n\nconst createDismissButton = (label) => {\n    const dismissButton = document.createElement('button');\n    dismissButton.setAttribute('data-modal-dismiss', true);\n    dismissButton.setAttribute('type', 'button');\n\n    if (label) {\n        dismissButton.classList.add('tako-button', 'tako-button--secondary');\n        dismissButton.innerText = label;\n    } else {\n        dismissButton.classList.add(\n            'tako-button',\n            'tako-button--secondary',\n            'tako-button--ghost',\n            'tako-button--icon',\n        );\n        dismissButton.innerHTML = `<i class=\"fas fa-xmark\"></i>`;\n        dismissButton.setAttribute('aria-label', 'Click to close modal');\n    }\n\n    return dismissButton;\n};\n\nconst addAutoDismissButton = (modal) => {\n    let takoModalFooter = modal.querySelector('.tako-modal__footer');\n    const modalDialog = modal.querySelector('.tako-modal__dialog');\n    const modalButton = getModalButton(modal);\n    const autoDismissButtonLabel =\n        modal.getAttribute('data-auto-dismiss-button') ||\n        modalButton.getAttribute('data-modal-auto-dismiss-button');\n    const autoDismissButton = createDismissButton(autoDismissButtonLabel);\n\n    // Add dismiss button to existing modal footer\n    if (takoModalFooter) {\n        const footerDismissButton = takoModalFooter.querySelector(\n            '[data-modal-dismiss]',\n        );\n        let buttonGroup = takoModalFooter.querySelector('.tako-button-group');\n\n        if (!footerDismissButton) {\n            if (buttonGroup) {\n                buttonGroup.prepend(autoDismissButton);\n            } else {\n                buttonGroup = document.createElement('div');\n                buttonGroup.classList.add('tako-button-group');\n                if (takoModalFooter.childNodes.length > 0) {\n                    buttonGroup.prepend(...takoModalFooter.childNodes);\n                }\n                buttonGroup.prepend(autoDismissButton);\n                takoModalFooter.appendChild(buttonGroup);\n            }\n        } else {\n            footerDismissButton.innerText = autoDismissButtonLabel;\n        }\n    } else {\n        // Create modal footer and add dismiss button to footer\n        takoModalFooter = document.createElement('div');\n        takoModalFooter.classList.add('tako-modal__footer');\n        takoModalFooter.prepend(autoDismissButton);\n        modalDialog.appendChild(takoModalFooter);\n    }\n};\n","/**\n * Creates a loading indicator element.\n *\n * @param {string} [size='sm'] - The size of the loading indicator. Defaults to 'sm'.\n * @returns {HTMLDivElement} The created loading indicator element.\n */\nexport const createLoadingIndicator = (size: string = 'sm'): HTMLDivElement => {\n    const loadingSpinnerDiv = document.createElement('div');\n    loadingSpinnerDiv.classList.add('tako-flex', 'tako-flex--center');\n\n    const loadingSpinnerIcon = document.createElement('span');\n    loadingSpinnerIcon.classList.add(\n        'tako-icon',\n        `tako-icon--${size}`,\n        'tako-icon--primary',\n    );\n    loadingSpinnerIcon.style.overflow = 'hidden';\n\n    const loadingSpinner = document.createElement('i');\n    loadingSpinner.classList.add('fa', 'fa-spinner-third', 'fa-spin');\n\n    loadingSpinnerIcon.appendChild(loadingSpinner);\n    loadingSpinnerDiv.prepend(loadingSpinnerIcon);\n\n    return loadingSpinnerDiv;\n};\n","import { createLoadingIndicator } from './createLoadingIndicator';\n\n/**\n * Sets HTMX attributes on a trigger element.\n * @param {HTMLElement} trigger - The trigger element.\n * @param {string} targetComponent - The target component name.\n */\nexport const setHxAttrs = (\n    trigger: HTMLElement,\n    targetComponent: string,\n): void => {\n    const dataTarget =\n        trigger.getAttribute(`data-${targetComponent}-target`) || '';\n    const targetId = dataTarget.replace('#', '');\n\n    trigger.setAttribute(\n        'hx-get',\n        trigger.getAttribute(`data-${targetComponent}-hx-url`) || '',\n    );\n    trigger.setAttribute(\n        'hx-swap',\n        trigger.getAttribute('hx-swap') || 'innerHtml',\n    );\n    trigger.setAttribute(\n        'hx-target',\n        trigger.getAttribute('hx-target') || `#${targetId}-content`,\n    );\n    trigger.setAttribute(\n        'hx-indicator',\n        trigger.getAttribute('hx-indicator') || `#${targetId}-indicator`,\n    );\n\n    // HTMX has already scanned this scope by the time Tako adds hx-* attrs\n    // (true on both initial load and partial swaps), so the trigger must be\n    // re-processed for HTMX to register its handlers. Idempotent + a no-op\n    // if HTMX isn't on the page.\n    window.htmx?.process(trigger);\n};\n\n/**\n * Creates or retrieves an HTMX target element.\n * @param {HTMLElement} trigger - The trigger element.\n * @returns {HTMLElement} The HTMX target element.\n */\nexport const createHxTarget = (trigger: HTMLElement): HTMLElement => {\n    const hxTargetId = trigger.getAttribute('hx-target') || '';\n    let hxTarget = document.querySelector<HTMLElement>(hxTargetId);\n    if (!hxTarget) {\n        hxTarget = document.createElement('div');\n        hxTarget.setAttribute('id', hxTargetId.replace('#', ''));\n        hxTarget.setAttribute('data-htmx-content', 'true');\n    }\n    return hxTarget;\n};\n\n/**\n * Creates or retrieves an HTMX loading indicator element.\n * @param {HTMLElement} trigger - The trigger element.\n * @param {string} [size='sm'] - The size of the loading indicator.\n * @returns {HTMLElement} The HTMX loading indicator element.\n */\nexport const createHxIndicator = (\n    trigger: HTMLElement,\n    size: string = 'sm',\n): HTMLElement => {\n    const hxIndicatorId = trigger.getAttribute('hx-indicator') || '';\n    let hxIndicatorWrapper = document.querySelector<HTMLElement>(hxIndicatorId);\n    if (!hxIndicatorWrapper) {\n        hxIndicatorWrapper = document.createElement('div');\n        hxIndicatorWrapper.setAttribute('id', hxIndicatorId.replace('#', ''));\n    }\n    const hxIndicator = createLoadingIndicator(size);\n    hxIndicatorWrapper.prepend(hxIndicator);\n    hxIndicatorWrapper.classList.add('htmx-indicator', 'htmx-block-indicator');\n    return hxIndicatorWrapper;\n};\n","import { takoUUID } from '../utils/takoUUID';\nimport {\n    setHxAttrs,\n    createHxTarget,\n    createHxIndicator,\n} from '../utils/htmxHelper';\n\n/**\n * Creates an htmx-powered modal.\n * @param modalButton The button that triggers the modal.\n */\nexport const createHtmxModal = (modalButton: HTMLElement): void => {\n    const dataModalTarget =\n        modalButton.getAttribute('data-modal-target') || takoUUID('modal');\n    modalButton.setAttribute('data-modal-target', dataModalTarget);\n\n    const modalId = dataModalTarget.replace('#', '');\n    const hxModal = document.querySelector(`#${modalId}`);\n    const hxModalDialog = hxModal?.querySelector('.tako-modal__dialog');\n    const hxModalHeader = hxModal?.querySelector('.tako-modal__title');\n\n    // Add hx attributes to trigger element\n    setHxAttrs(modalButton, 'modal');\n\n    const modalDiv = (hxModal || document.createElement('div')) as HTMLElement;\n\n    if (!hxModal) {\n        modalDiv.setAttribute('id', modalId);\n    }\n\n    // Create modal with header (if title is provided), hx container, hx indicator\n    modalDiv.classList.add('tako-modal');\n    setModalAttr(modalButton, modalDiv);\n\n    const modalDialog = (hxModalDialog ||\n        document.createElement('div')) as HTMLElement;\n    modalDialog.classList.add('tako-modal__dialog');\n    setModalModifierClass(modalButton, modalDialog);\n\n    const modalHTMXWrapper = document.createElement('div');\n    const modalHTMXContent = createHxTarget(modalButton);\n    const hxIndicator = createHxIndicator(modalButton, 'md');\n    hxIndicator.style.minHeight = '5rem';\n\n    modalHTMXWrapper.prepend(hxIndicator);\n    modalHTMXWrapper.appendChild(modalHTMXContent);\n\n    if (!hxModalHeader) {\n        modalDialog.prepend(modalHTMXWrapper);\n    } else {\n        hxModalHeader.insertAdjacentElement('afterend', modalHTMXWrapper);\n    }\n\n    modalDiv.appendChild(modalDialog);\n\n    if (!hxModal) {\n        modalButton.insertAdjacentElement('afterend', modalDiv);\n    }\n};\n\n/**\n * Sets attributes on the modal element.\n * @param modalButton The button that triggers the modal.\n * @param modal The modal element.\n */\nconst setModalAttr = (modalButton: HTMLElement, modal: HTMLElement): void => {\n    const dataOverlay = modalButton.getAttribute('data-modal-overlay');\n\n    // Add data attribute to modal if provided with trigger element\n    if (dataOverlay === 'static') {\n        modal.setAttribute('data-overlay', 'static');\n    }\n};\n\n/**\n * Sets modifier classes on the modal dialog.\n * @param modalButton The button that triggers the modal.\n * @param modalDialog The modal dialog element.\n */\nconst setModalModifierClass = (\n    modalButton: HTMLElement,\n    modalDialog: HTMLElement,\n): void => {\n    const dataWidth = modalButton.getAttribute('data-modal-width');\n\n    // Add modifier class to modal dialog if provided with trigger element\n    if (dataWidth) {\n        modalDialog.classList.add(`tako-modal__dialog--${dataWidth}`);\n    }\n};\n","/**\n * Create and initialise Tako pagination\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Pagination\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\nimport { showElement } from './utils/showElement';\nimport { hideElement } from './utils/hideElement';\n\nconst COMPONENT_NAME = 'Pagination';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoPaginations = scope.querySelectorAll('.tako-pagination');\n\n    allTakoPaginations.forEach((pagination) => {\n        try {\n            // ToDo: Override direction and set to left-to-right until support for right-to-left is implemented\n            pagination.setAttribute('dir', 'ltr');\n\n            layoutPageButtons(pagination);\n            addPaginationEventListeners(\n                pagination.querySelector('.tako-pagination__pages'),\n            );\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: pagination,\n            });\n        }\n    });\n};\n\nconst layoutPageButtons = (pagination) => {\n    const pageContainer = pagination.querySelector('.tako-pagination__pages');\n\n    if (!pageContainer) {\n        return;\n    }\n\n    const createEllipsisIcon = () => {\n        const ellipsisIcon = document.createElement('span');\n        ellipsisIcon.classList.add(\n            'tako-icon',\n            'tako-icon--primary',\n            'tako-pagination__ellipsis',\n        );\n        ellipsisIcon.innerHTML = '<i class=\"fas fa-ellipsis\"></i>';\n\n        return ellipsisIcon;\n    };\n\n    const pages = Array.from(\n        pageContainer.querySelectorAll('.tako-pagination__page-item'),\n    );\n    const prevArrow = pageContainer.querySelector(\n        '.tako-button--icon .fa-angle-left',\n    );\n    const nextArrow = pageContainer.querySelector(\n        '.tako-button--icon .fa-angle-right',\n    );\n    const numOfPages = pages.length;\n    const currentPage = pageContainer.querySelector(\n        '.tako-pagination__page-item.active',\n    );\n    const currentPageIndex = currentPage ? pages.indexOf(currentPage) : 0;\n\n    // Check whether to disable prev/next buttons\n    if (prevArrow) {\n        if (currentPageIndex <= 0) {\n            prevArrow.parentNode.classList.add('disabled');\n        } else {\n            prevArrow.parentNode.classList.remove('disabled');\n        }\n    }\n\n    if (nextArrow) {\n        if (currentPageIndex >= numOfPages - 1) {\n            nextArrow.parentNode.classList.add('disabled');\n        } else {\n            nextArrow.parentNode.classList.remove('disabled');\n        }\n    }\n\n    if (!currentPage && !numOfPages) {\n        return;\n    }\n\n    if (!currentPage && numOfPages >= 0) {\n        pages[currentPageIndex].classList.add('active');\n    }\n\n    // Add class to existing ellipsis icons\n    const existingEllipsisIcons =\n        pageContainer.querySelectorAll('svg.fa-ellipsis');\n    existingEllipsisIcons.forEach((icon) => {\n        icon.parentNode.addClass('tako-pagination__ellipsis');\n    });\n\n    // Remove previous ellipsis icons\n    pageContainer\n        .querySelectorAll('.tako-pagination__ellipsis')\n        .forEach((icon) => {\n            icon.remove();\n        });\n\n    if (numOfPages < 5) {\n        return;\n    }\n\n    // Show and hide page numbers and ellipsis icons\n    if (currentPageIndex < 4) {\n        pageContainer.insertBefore(createEllipsisIcon(), pages[numOfPages - 1]);\n        pages.forEach((el, index) => {\n            if (index > 4 && index !== numOfPages - 1) {\n                hideElement(el);\n            } else {\n                showElement(el);\n            }\n        });\n    } else if (currentPageIndex >= numOfPages - 4) {\n        pages[0].after(createEllipsisIcon());\n        pages.forEach((el, index) => {\n            if (index < numOfPages - 5 && index !== 0) {\n                hideElement(el);\n            } else {\n                showElement(el);\n            }\n        });\n    } else if (currentPageIndex >= 4 && currentPageIndex <= numOfPages - 4) {\n        pages[0].insertAdjacentElement('afterend', createEllipsisIcon());\n        pageContainer.insertBefore(createEllipsisIcon(), pages[numOfPages - 1]);\n        pages.forEach((el, index) => {\n            if (\n                index === currentPageIndex ||\n                index === currentPageIndex + 1 ||\n                index === currentPageIndex - 1 ||\n                index === 0 ||\n                index === numOfPages - 1\n            ) {\n                showElement(el);\n            } else {\n                hideElement(el);\n            }\n        });\n    }\n};\n\nconst addPaginationEventListeners = (el) => {\n    if (!el) {\n        return;\n    }\n\n    const takoPagination = el.parentNode;\n    const prevArrow = el.querySelector('.tako-button--icon .fa-angle-left');\n    const nextArrow = el.querySelector('.tako-button--icon .fa-angle-right');\n    const pageNumberButtons = el.querySelectorAll(\n        '.tako-pagination__page-item',\n    );\n\n    // Select specific page\n    pageNumberButtons.forEach((button) => {\n        button.addEventListener('click', (event) => {\n            event.preventDefault();\n            button.parentNode\n                .querySelector('.active')\n                .classList.remove('active');\n            button.classList.add('active');\n            layoutPageButtons(takoPagination);\n        });\n    });\n\n    // Select previous page\n    if (prevArrow) {\n        prevArrow.parentNode.addEventListener('click', (event) => {\n            event.preventDefault();\n            const currentElement =\n                event.target.parentNode.querySelector('.active');\n            const prevElement = currentElement.previousElementSibling;\n\n            if (\n                prevElement &&\n                prevElement.classList.contains('tako-pagination__page-item')\n            ) {\n                prevElement.classList.add('active');\n                currentElement.classList.remove('active');\n                layoutPageButtons(takoPagination);\n            } else {\n                return;\n            }\n        });\n    }\n\n    // Select next page\n    if (nextArrow) {\n        nextArrow.parentNode.addEventListener('click', (event) => {\n            event.preventDefault();\n            const currentElement =\n                event.target.parentNode.querySelector('.active');\n            const nextElement = currentElement.nextElementSibling;\n\n            if (\n                nextElement &&\n                nextElement.classList.contains('tako-pagination__page-item')\n            ) {\n                nextElement.classList.add('active');\n                currentElement.classList.remove('active');\n                layoutPageButtons(takoPagination);\n            } else {\n                return;\n            }\n        });\n    }\n};\n","/**\n * Create and initialise Tako popovers\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Popover\n * -------------------------------------------------------------------------- */\n\nimport { getIsRtl } from './utils/getIsRtl';\nimport { createHtmxPopover } from './htmx-components/htmx-tako-popover';\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Popover';\n\nconst popoverInstances = new Map();\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n\n    function merge(originalObject, overrides) {\n        return Object.values(\n            []\n                .concat(originalObject, overrides)\n                .reduce(\n                    (properties, currentProperty) => (\n                        (properties[currentProperty.name] = Object.assign(\n                            properties[currentProperty.name] || {},\n                            currentProperty,\n                        )),\n                        properties\n                    ),\n                    {},\n                ),\n        );\n    }\n\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allHtmxPopoverButtons = scope.querySelectorAll(\n        '[data-popover-hx-url]',\n    );\n\n    if (allHtmxPopoverButtons) {\n        allHtmxPopoverButtons.forEach((htmxPopoverButton) => {\n            createHtmxPopover(htmxPopoverButton);\n        });\n    }\n\n    const allTakoPopovers = scope.querySelectorAll('.tako-popover');\n\n    allTakoPopovers.forEach((takoPopover) => {\n        try {\n            const instanceLoggerArgs = {\n                ...defaultLoggerArgs,\n                element: takoPopover,\n            };\n            const takoPopoverId = takoPopover.getAttribute('id');\n\n            if (!takoPopoverId) {\n                logger.warn(\n                    'Tako popovers must have a unique id - add one using the `id` attribute',\n                    instanceLoggerArgs,\n                );\n                return;\n            }\n\n            const popoverButton = getPopoverButton(takoPopover);\n\n            if (!popoverButton || !takoPopover) {\n                logger.warn(\n                    'Tako popovers must have a trigger element with `data-popover-target=\"popoverId\"` and a div with the `tako-popover` class. Omitting component...',\n                    instanceLoggerArgs,\n                );\n                return;\n            }\n\n            const popoverTitle =\n                popoverButton.getAttribute('data-popover-title');\n\n            if (popoverTitle) {\n                addPopoverHeader(takoPopover, popoverTitle);\n            }\n\n            const popoverBody = takoPopover.querySelector(\n                '.tako-popover__body',\n            );\n\n            if (!popoverBody) {\n                addPopoverBodyWrapper(takoPopover);\n            }\n\n            addPopoverArrow(takoPopover);\n            setAriaAttrs(takoPopover);\n\n            // eslint-disable-next-line no-undef\n            const popperPopoverInstance = Popper.createPopper(\n                popoverButton,\n                takoPopover,\n                {\n                    modifiers: [\n                        {\n                            name: 'offset',\n                            options: {\n                                offset: [0, 10],\n                            },\n                        },\n                    ],\n                },\n            );\n\n            takoPopover.addEventListener('htmx:afterSettle', () => {\n                // This forces Popper to recalculate boundaries and position\n                // based on the newly injected HTMX content dimensions.\n                popperPopoverInstance.update();\n            });\n\n            function setPopperPopoverOptions(newModifier) {\n                popperPopoverInstance.setOptions((options) =>\n                    Object.assign(options, {\n                        modifiers: merge(options.modifiers, newModifier),\n                    }),\n                );\n            }\n\n            let placement = takoPopover.getAttribute('data-placement');\n            const placementOptions = [\n                'top',\n                'right',\n                'end',\n                'bottom',\n                'left',\n                'start',\n            ];\n            if (!placementOptions.some((option) => option === placement)) {\n                placement = placementOptions[0];\n            } else if (placement === 'end') {\n                placement = getIsRtl() ? 'left' : 'right';\n            } else if (placement === 'start') {\n                placement = getIsRtl() ? 'right' : 'left';\n            }\n\n            popperPopoverInstance.setOptions({ placement });\n\n            const open = () => {\n                takoPopover.setAttribute('data-open', true);\n\n                setPopperPopoverOptions([\n                    { name: 'eventListeners', enabled: true },\n                ]);\n\n                popperPopoverInstance.update();\n\n                popoverButton.setAttribute('aria-expanded', true);\n                takoPopover.setAttribute('aria-hidden', false);\n\n                // Emit a custom event when the popover is opened\n                const openEvent = new CustomEvent('takoPopoverOpen', {\n                    detail: {\n                        takoPopover,\n                        popoverButton,\n                        id: takoPopover.id,\n                    },\n                });\n                takoPopover.dispatchEvent(openEvent);\n            };\n\n            const close = () => {\n                takoPopover.removeAttribute('data-open');\n\n                setPopperPopoverOptions([\n                    { name: 'eventListeners', enabled: false },\n                ]);\n\n                popoverButton.setAttribute('aria-expanded', false);\n                takoPopover.setAttribute('aria-hidden', true);\n\n                // Emit a custom event when the popover is closed\n                const closeEvent = new CustomEvent('takoPopoverClose', {\n                    detail: {\n                        takoPopover,\n                        popoverButton,\n                        id: takoPopover.id,\n                    },\n                });\n                takoPopover.dispatchEvent(closeEvent);\n            };\n\n            const handleTriggerClick = () => {\n                if (takoPopover.hasAttribute('data-open')) {\n                    close();\n                } else {\n                    open();\n                }\n            };\n\n            const handleBodyClick = (event) => {\n                if (\n                    takoPopover.hasAttribute('data-open') &&\n                    !takoPopover.contains(event.target) &&\n                    !popoverButton.contains(event.target)\n                ) {\n                    close();\n                }\n            };\n\n            popoverButton.addEventListener('click', handleTriggerClick);\n\n            const dataFixedAttr = takoPopover.getAttribute('data-fixed');\n\n            const isPopoverFixed =\n                dataFixedAttr === 'true' || dataFixedAttr === '';\n\n            if (!isPopoverFixed) {\n                document.body.addEventListener('click', handleBodyClick);\n            }\n\n            /**\n             * if popover button is part of a modal\n             * - add an attribute to the popover to change its z-index\n             * - move the popover outside the modal\n             */\n            if (popoverButton.closest('.tako-modal__dialog')) {\n                takoPopover.setAttribute('data-modal-content', true);\n\n                const popoverModalParent = takoPopover.closest('.tako-modal');\n\n                if (popoverModalParent) {\n                    popoverModalParent.insertAdjacentElement(\n                        'afterend',\n                        takoPopover,\n                    );\n                }\n            }\n\n            // Store the instance for external control via `toggle`\n            popoverInstances.set(takoPopover, { open, close });\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: takoPopover,\n            });\n        }\n    });\n};\n\nconst getPopoverButton = (popover) => {\n    const popoverId = popover.getAttribute('id');\n    const popoverButton = document.querySelector(\n        `[data-popover-target='${popoverId}'],\n        [data-popover-target='#${popoverId}']`,\n    );\n\n    return popoverButton;\n};\n\nconst addPopoverHeader = (popover, title) => {\n    const popoverHeader = document.createElement('h6');\n    popoverHeader.innerText = title;\n\n    popover.prepend(popoverHeader);\n};\n\nconst addPopoverBodyWrapper = (popover) => {\n    const popoverBody = document.createElement('div');\n    popoverBody.classList.add('tako-popover__body');\n    if (popover.childNodes.length > 0) {\n        popoverBody.prepend(...popover.childNodes);\n    }\n    popover.appendChild(popoverBody);\n};\n\nconst addPopoverArrow = (popover) => {\n    const popoverArrow = document.createElement('div');\n    popoverArrow.setAttribute('data-popper-arrow', true);\n    popoverArrow.classList.add('tako-popover__arrow');\n    popover.appendChild(popoverArrow);\n};\n\nconst setAriaAttrs = (popover) => {\n    const popoverId = popover.getAttribute('id');\n    const popoverButton = getPopoverButton(popover);\n\n    popover.setAttribute('aria-hidden', true);\n    popoverButton.setAttribute('aria-expanded', false);\n    popoverButton.setAttribute('aria-controls', popoverId);\n};\n\n/**\n * Tako Popover Functions\n */\n\nconst debounceDelay = 100;\nconst debounceTimeouts = new Map();\n\n/**\n * Toggles the visibility of one or more Tako Popover components.\n *\n * @param {string} selector - Document query selector (id or class) to target the popover(s).\n *                            Accepts an id (e.g., '#my-popover') or a class (e.g., '.my-popover-class').\n * @param {boolean|null} [open=null] - Optional. If `true`, explicitly open the popover(s).\n *                                     If `false`, explicitly close the popover(s).\n *                                     If `null` (default), the popover's current state will be toggled.\n *\n * @example\n * // Toggle based on the current state (open if closed, close if open):\n * togglePopover('.my-popover-class');\n *\n * @example\n * // Explicitly open the popover(s):\n * togglePopover('#my-popover-id', true);\n *\n * @example\n * // Explicitly close the popover(s):\n * togglePopover('.my-popover-class', false);\n */\nexport const toggle = (selector, open = null) => {\n    const logger = getLogger();\n\n    // Support id's without the # prefix\n    if (selector[0] !== '#' && selector[0] !== '.') {\n        selector = `#${selector}`;\n    }\n\n    // Get all elements that match the selector (could be multiple if class selector is used)\n    const takoPopoverElements = document.querySelectorAll(selector);\n\n    if (!takoPopoverElements.length) {\n        logger.warn(\n            `No Tako Popover components found with the selector \"${selector}\".`,\n        );\n        return;\n    }\n\n    takoPopoverElements.forEach((takoPopoverElement) => {\n        const instance = popoverInstances.get(takoPopoverElement);\n\n        if (!instance) {\n            logger.warn(\n                `No instance found for the element with the selector \"${selector}\". Make sure the Tako Popover has been initialized.`,\n            );\n            return;\n        }\n\n        // Clear any existing timeout for this popover\n        if (debounceTimeouts.has(takoPopoverElement)) {\n            clearTimeout(debounceTimeouts.get(takoPopoverElement));\n        }\n\n        const shouldOpen =\n            open !== null\n                ? open\n                : !takoPopoverElement.hasAttribute('data-open'); // If `open` is null, toggle based on current state\n\n        // Handle debounce delay to ensure proper timing\n        debounceTimeouts.set(\n            takoPopoverElement,\n            setTimeout(() => {\n                if (shouldOpen) {\n                    instance.open();\n                } else {\n                    instance.close();\n                }\n\n                // Remove the timeout once it's executed\n                debounceTimeouts.delete(takoPopoverElement);\n            }, debounceDelay),\n        );\n    });\n};\n","/**\n * Determines if the document is in RTL mode.\n * @returns {boolean} True if the document direction is RTL, otherwise false.\n */\nexport function getIsRtl(): boolean {\n    const htmlElement = document.documentElement;\n    const dir = htmlElement.getAttribute('dir');\n    return dir === 'rtl';\n}\n","import { takoUUID } from '../utils/takoUUID';\nimport {\n    setHxAttrs,\n    createHxTarget,\n    createHxIndicator,\n} from '../utils/htmxHelper';\n\n/**\n * Creates an htmx-powered popover.\n * @param popoverButton The button that triggers the popover.\n */\nexport const createHtmxPopover = (popoverButton: HTMLElement): void => {\n    const dataPopoverTarget =\n        popoverButton.getAttribute('data-popover-target') ||\n        takoUUID('popover');\n\n    popoverButton.setAttribute('data-popover-target', dataPopoverTarget);\n\n    const popoverId = dataPopoverTarget.replace('#', '');\n    const hxPopover = document.querySelector(`#${popoverId}`);\n\n    // Add hx attributes to trigger element\n    setHxAttrs(popoverButton, 'popover');\n\n    const popoverDiv = (hxPopover ||\n        document.createElement('div')) as HTMLElement;\n\n    if (!hxPopover) {\n        popoverDiv.setAttribute('id', popoverId);\n    }\n\n    // Create popover with header (if title is provided) and body with hx target id, hx container, hx indicator\n    popoverDiv.classList.add('tako-popover');\n    popoverDiv.setAttribute('id', popoverId);\n    setPopoverAttrs(popoverButton, popoverDiv);\n    setPopoverModifierClass(popoverButton, popoverDiv);\n\n    const popoverHTMXWrapper = document.createElement('div');\n    popoverHTMXWrapper.classList.add('tako-popover__body');\n    const popoverHTMXContent = createHxTarget(popoverButton);\n\n    const hxIndicator = createHxIndicator(popoverButton, 'sm');\n    popoverHTMXWrapper.prepend(hxIndicator);\n    popoverHTMXWrapper.appendChild(popoverHTMXContent);\n    popoverDiv.appendChild(popoverHTMXWrapper);\n\n    if (!hxPopover) {\n        popoverButton.insertAdjacentElement('afterend', popoverDiv);\n    }\n};\n\n/**\n * Sets attributes on the popover element.\n * @param popoverButton The button that triggers the popover.\n * @param popover The popover element.\n */\nconst setPopoverAttrs = (\n    popoverButton: HTMLElement,\n    popover: HTMLElement,\n): void => {\n    const dataFixed = popoverButton.getAttribute('data-popover-fixed');\n    const dataPlacement = popoverButton.getAttribute('data-popover-placement');\n\n    // Add data attributes to popover if provided with trigger element\n    if (dataFixed) {\n        const isPopoverFixed = dataFixed === 'true' || dataFixed === '';\n        if (isPopoverFixed) {\n            popover.setAttribute('data-fixed', 'true');\n        }\n    }\n\n    if (dataPlacement) {\n        popover.setAttribute('data-placement', dataPlacement);\n    }\n};\n\n/**\n * Adds modifier classes to the popover element.\n * @param popoverButton The button that triggers the popover.\n * @param popover The popover element.\n */\nconst setPopoverModifierClass = (\n    popoverButton: HTMLElement,\n    popover: HTMLElement,\n): void => {\n    const dataWidth = popoverButton.getAttribute('data-popover-width');\n\n    // Add modifier class to popover if provided with trigger element\n    if (dataWidth) {\n        popover.classList.add(`tako-popover--${dataWidth}`);\n    }\n};\n","/* -----------------------------------------------------------------------------\n * Tako Radio Button Group\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'RadioButtonGroup';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoRadioButtonGroups = scope.querySelectorAll(\n        '.tako-radio-button-group',\n    );\n\n    allTakoRadioButtonGroups.forEach(function (radioButtonGroup) {\n        try {\n            const instanceLoggerArgs = {\n                ...defaultLoggerArgs,\n                element: radioButtonGroup,\n            };\n            const labels = radioButtonGroup.querySelectorAll('label');\n            const radioButtons = radioButtonGroup.querySelectorAll(\n                'input[type=\"radio\"]',\n            );\n            const direction = radioButtonGroup.dataset.direction || 'column';\n\n            if (direction === 'row') {\n                radioButtonGroup.classList.add(\n                    'tako-radio-button-group--horizontal',\n                );\n            }\n\n            labels.forEach((label) => {\n                label.classList.add('tako-radio-button-group__wrapper-label');\n            });\n\n            // Currently if a radio button is not wrapped in a label then it does not work\n            if (labels.length < radioButtons.length) {\n                logger.warn(\n                    'Currently all tako radio buttons must be wrapped in a label element',\n                    instanceLoggerArgs,\n                );\n            }\n\n            radioButtons.forEach((radioButton) => {\n                radioButton.classList.add('tako-radio-button-group__input');\n\n                const customTakoRadio = document.createElement('span');\n                customTakoRadio.classList.add(\n                    'tako-radio-button-group__custom-radio',\n                );\n                radioButton.parentNode.insertBefore(\n                    customTakoRadio,\n                    radioButton.nextSibling,\n                );\n            });\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: radioButtonGroup,\n            });\n        }\n    });\n};\n","import { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\n// select2 fires jQuery-only events; native listeners (htmx, addEventListener)\n// never hear them. Dispatch a native change so all consumers stay in sync.\nconst dispatchNativeChange = (el) => {\n    el[0]?.dispatchEvent(new Event('change', { bubbles: true }));\n};\n\nconst initSelect2 = (elem) => {\n    let select2Params;\n\n    $(elem).each(function () {\n        const dataWidget = $(this).attr('data-widget');\n        const isTags = $(this).data('tags') || false;\n        const isMultiple = $(this).prop('multiple');\n        const isDeselect = dataWidget === 'select2-deselect';\n        const isOptGroup = $(this).children('optgroup').length !== 0;\n        const dataDisableSorting = $(this).attr('data-disable-sorting');\n        const firstOption = $(this).children('option:first-child');\n        const deselectPlaceholder =\n            firstOption.val() === '' &&\n            firstOption.text() !== '' &&\n            !firstOption.text().includes('---')\n                ? { id: -1, text: 'Select item...' }\n                : 'Select item...';\n        const formatSelect2Text = (state) => {\n            if ($(state.element).data('icon')) {\n                return $(\n                    `<span><span class=\"tako-icon\"><i class=\"far ${$(\n                        state.element,\n                    ).data('icon')}\"></i></span>\n                        ${state.text}\n                    </span>`,\n                );\n            } else {\n                return state.text;\n            }\n        };\n        // use custom matcher for searching options\n        const matchCustom = (params, data) => {\n            // If there are no search terms, return all of the data\n            if ($.trim(params.term) === '') {\n                return data;\n            }\n\n            const isMatchingOption = (element) => {\n                if (\n                    element.text\n                        .toUpperCase()\n                        .indexOf(params.term.toUpperCase()) > -1\n                ) {\n                    return true;\n                } else {\n                    return false;\n                }\n            };\n\n            if (isOptGroup) {\n                // skip if there is no 'children' property\n                if (typeof data.children === 'undefined') {\n                    return null;\n                }\n\n                // `data.children` contains the actual options that we are matching against\n                const filteredChildren = [];\n                $(data.children).each(function () {\n                    if (isMatchingOption(this)) {\n                        filteredChildren.push(this);\n                    }\n                });\n\n                // if we matched any of the group's children, then set the matched children on the group\n                // and return the group object\n                if (filteredChildren.length) {\n                    const modifiedData = $.extend({}, data, true);\n                    modifiedData.children = filteredChildren;\n\n                    // return modified data\n                    return modifiedData;\n                }\n            } else {\n                // skip if there is no 'text' property\n                if (typeof data.text === 'undefined') {\n                    return null;\n                }\n\n                if (isMatchingOption(data)) {\n                    const modifiedData = $.extend({}, data, true);\n\n                    // return modified data\n                    return modifiedData;\n                }\n            }\n\n            // return `null` if the term should not be displayed\n            return null;\n        };\n        // Sort options in the dropdown alphabetically\n        const sortOptions = (data) => {\n            if (dataDisableSorting === 'true' || dataDisableSorting === '') {\n                return data;\n            }\n            return data.sort((a, b) => a.text.localeCompare(b.text));\n        };\n        const select2DefaultParams = {\n            default: {\n                placeholder: 'Select item...',\n                templateSelection: formatSelect2Text,\n                templateResult: formatSelect2Text,\n                width: '100%',\n                matcher: matchCustom,\n            },\n            deselect: {\n                placeholder: deselectPlaceholder,\n                templateSelection: formatSelect2Text,\n                templateResult: formatSelect2Text,\n                width: '100%',\n                allowClear: true,\n                matcher: matchCustom,\n            },\n            multiple: {\n                placeholder: isTags ? 'Define items...' : 'Select items...',\n                width: '100%',\n                closeOnSelect: false,\n                allowClear: true,\n                matcher: matchCustom,\n                sorter: sortOptions,\n                tags: isTags,\n            },\n        };\n\n        if (isMultiple) {\n            select2Params = select2DefaultParams.multiple;\n        } else if (isDeselect) {\n            select2Params = select2DefaultParams.deselect;\n        } else {\n            select2Params = select2DefaultParams.default;\n        }\n\n        $(this).select2(select2Params);\n\n        if (isMultiple) {\n            addSelect2MultipleEventListeners($(this));\n        } else {\n            addSelect2EventListeners($(this));\n        }\n    });\n};\n\n// add event listeners\nconst addSelect2EventListeners = (el) => {\n    const searchInputClass = '.select2-search__field';\n    const selectResult = el.next().find('.select2-selection__rendered');\n    const dataWidget = el.attr('data-widget');\n    const clearButtton =\n        '<div class=\"select2-selection__clear-new\"><button type=\"button\"></button></div>';\n    let selectValue = el.val();\n\n    // replace default clear button to fix keyboard accessibility issues\n    if (dataWidget === 'select2-deselect') {\n        el.next().find('.select2-selection__clear').remove();\n        el.next().find('.selection').after(clearButtton);\n    }\n\n    el.on('select2:open', () => {\n        const searchField = $('.select2-search--dropdown').find(\n            searchInputClass,\n        );\n        /**\n         * if select is part of a modal\n         * - add an attribute to change z-index\n         */\n        if (el.parent('.tako-modal__dialog')) {\n            $('.select2-dropdown').attr('data-modal-content', true);\n        }\n\n        searchField[0].focus();\n        searchField.keydown((e) => {\n            // remove clear button while typing in search field\n            if (\n                e.keyCode != 40 &&\n                e.keyCode != 38 &&\n                e.keyCode != 13 &&\n                e.keyCode != 9\n            ) {\n                selectResult.hide();\n                el.next().find('.select2-selection__clear-new button').hide();\n            }\n\n            // prevent selection when pressing tab\n            if (e.keyCode == 9 && selectValue !== el.val()) {\n                el.val(selectValue);\n                dispatchNativeChange(el);\n                el.next().find('.select2-selection__clear').remove();\n                if (!el.val() || el.val() === '') {\n                    el.next()\n                        .find('.select2-selection__clear-new button')\n                        .hide();\n                }\n            }\n\n            const noOptionMessage = $(\n                '.select2-results__option.select2-results__message',\n            );\n            if (e.keyCode == 9 && noOptionMessage.length) {\n                el.select2('close');\n            }\n        });\n    });\n    el.on('select2:select', () => {\n        el.next().find('.select2-selection__clear').remove();\n        setTimeout(() => {\n            selectValue = el.val();\n        }, 500);\n        if (el.val()) {\n            el.next().find('.select2-selection__clear-new button').show();\n        } else {\n            el.next().find('.select2-selection__clear-new button').hide();\n        }\n        dispatchNativeChange(el);\n    });\n    el.on('select2:unselect', () => {\n        selectValue = el.val();\n        dispatchNativeChange(el);\n    });\n    el.on('select2:close', () => {\n        selectResult.show();\n        if (el.val()) {\n            el.next().find('.select2-selection__clear-new button').show();\n        }\n    });\n    el.next()\n        .find('.select2-selection__clear-new button')\n        .click((e) => {\n            el.val('');\n            dispatchNativeChange(el);\n            selectValue = el.val();\n            $(e.target).hide();\n            el.select2('open');\n            el.next().find('.select2-selection__clear').remove();\n        });\n\n    if (!el.val() || el.val() === '') {\n        el.next().find('.select2-selection__clear-new button').hide();\n    }\n};\n\nconst addSelect2MultipleEventListeners = (el) => {\n    const searchField = el.next().find('.select2-search__field');\n\n    // remove optgroup if there's no options in it\n    const removeEmptyOptGroup = () => {\n        const optGroup = $('.select2-dropdown').find(\n            '.select2-results__option--group',\n        );\n\n        if (optGroup.length !== 0) {\n            optGroup.each(function () {\n                if (\n                    $(this).find(\n                        '.select2-results__option:not(\".select2-results__option--selected\")',\n                    ).length === 0\n                ) {\n                    $(this).detach();\n                }\n            });\n        }\n    };\n\n    // add message when no option left in the dropdown\n    const addNoOptionsMessage = () => {\n        const message =\n            '<li class=\"select2-results__option select2-results__message\">No options</li>';\n\n        if (\n            $(\n                '.select2-results__option:not(\".select2-results__option--selected\")',\n            ).length === 0\n        ) {\n            $('.select2-dropdown')\n                .find('.select2-results__options')\n                .append(message);\n        }\n    };\n\n    let selectValue = el.val();\n\n    el.on('select2:open', () => {\n        $('.select2-dropdown').addClass('select2-dropdown--multiple');\n\n        /**\n         * if select is part of a modal\n         * - add an attribute to change z-index\n         */\n        if (el.parent('.tako-modal__dialog')) {\n            $('.select2-dropdown').attr('data-modal-content', true);\n        }\n\n        searchField.keydown((e) => {\n            // prevent selection when pressing tab\n            if (e.keyCode == 9 && selectValue !== el.val()) {\n                el.select2('close');\n                el.val(selectValue);\n                dispatchNativeChange(el);\n            }\n        });\n\n        searchField.keyup(() => {\n            removeEmptyOptGroup();\n        });\n\n        $('.select2-dropdown').hide();\n\n        setTimeout(() => {\n            removeEmptyOptGroup();\n            addNoOptionsMessage();\n            $('.select2-dropdown').show();\n        }, 100);\n    });\n    el.on('select2:close', () => {\n        searchField[0].blur();\n    });\n    el.on('select2:select', (evt) => {\n        searchField[0].focus();\n\n        // remove selected options from dropdown\n        const element = evt.params.data.element;\n        const elementParent = $(element).parent();\n\n        $(element).detach();\n        elementParent.append($(element));\n        dispatchNativeChange(el);\n\n        removeEmptyOptGroup();\n        addNoOptionsMessage();\n\n        selectValue = el.val();\n\n        // clear search field after selecting an option\n        searchField.val('').trigger('input');\n    });\n    el.on('select2:unselect', () => {\n        selectValue = el.val();\n        dispatchNativeChange(el);\n    });\n};\n\nconst COMPONENT_NAME = 'Select';\n\n// init select2 widget for all select fields with data-widget select2 or select2-deselect\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, {\n        scope: document,\n    });\n\n    const selectDefault = $('select[data-widget=\"select2\"]');\n    if (selectDefault.length !== 0) {\n        selectDefault.each(function () {\n            try {\n                if (!$(this).hasClass('select2-hidden-accessible')) {\n                    initSelect2($(this));\n                }\n            } catch (error) {\n                logger.error(error, {\n                    ...defaultLoggerArgs,\n                    element: this,\n                });\n            }\n        });\n    }\n\n    const selectDeselect = $('select[data-widget=\"select2-deselect\"]');\n    if (selectDeselect.length !== 0) {\n        selectDeselect.each(function () {\n            try {\n                if (!$(this).hasClass('select2-hidden-accessible')) {\n                    initSelect2($(this));\n                }\n            } catch (error) {\n                logger.error(error, {\n                    ...defaultLoggerArgs,\n                    element: this,\n                });\n            }\n        });\n    }\n};\n","/**\n * Create and initialise Tako tables\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Table\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Table';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const allTakoTables = scope.querySelectorAll('.tako-table');\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    allTakoTables.forEach((takoTable) => {\n        try {\n            const instanceLoggerArgs = {\n                ...defaultLoggerArgs,\n                element: takoTable,\n            };\n            // ToDo: Remove tako-table--selectable with the next breaking change\n            const selectableCells = takoTable.querySelectorAll(\n                '[data-table-selectable], .tako-table--selectable',\n            );\n\n            const handleCellSelect = (event) => {\n                event.target.classList.toggle('tako-table--selected');\n                // Update aria-pressed to reflect selection state\n                const isSelected = event.target.classList.contains(\n                    'tako-table--selected',\n                );\n                event.target.setAttribute('aria-pressed', isSelected);\n            };\n\n            const handleKeyDown = (event) => {\n                // Handle Enter and Space keys for selection\n                if (event.key === 'Enter' || event.key === ' ') {\n                    event.preventDefault();\n                    handleCellSelect(event);\n                }\n            };\n\n            /**\n             * tako-table--selectable class is @deprecated\n             */\n            const selectableTableWithLegacyClass = takoTable.querySelectorAll(\n                '.tako-table--selectable',\n            );\n\n            if (selectableTableWithLegacyClass.length) {\n                logger.warn(\n                    'The `tako-table--selectable` class is deprecated. Please use the `data-table-selectable` attribute instead.',\n                    instanceLoggerArgs,\n                );\n            }\n\n            selectableCells.forEach((cell) => {\n                // Make cell keyboard accessible\n                cell.setAttribute('tabindex', '0');\n                cell.setAttribute('role', 'button');\n\n                // Add aria-label if not already present, using the text inside of the cell\n                if (!cell.getAttribute('aria-label')) {\n                    const cellText = cell.textContent?.trim() || 'cell';\n                    cell.setAttribute('aria-label', `Select ${cellText}`);\n                }\n\n                // Add event listeners\n                cell.addEventListener('click', handleCellSelect);\n                cell.addEventListener('keydown', handleKeyDown);\n            });\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: takoTable,\n            });\n        }\n    });\n};\n","/**\n * Initialise Tako Tag\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Tag\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Tag';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    // ToDo: Remove tako-tag--dismissible with the next breaking change\n    const allDismissibleTakoTags = scope.querySelectorAll(\n        '.tako-tag[data-dismissible], .tako-tag--dismissible',\n    );\n\n    /**\n     * tako-tag--dismissible class is @deprecated\n     */\n    const dismissableTagsWithLegacyClass = scope.querySelectorAll(\n        '.tako-tag--dismissible',\n    );\n\n    if (dismissableTagsWithLegacyClass.length) {\n        logger.warn(\n            'The `tako-tag--dismissible` class is deprecated. Please use the `data-dismissible` attribute instead.',\n            defaultLoggerArgs,\n        );\n    }\n\n    allDismissibleTakoTags.forEach((takoTag) => {\n        try {\n            const dismissButton = document.createElement('button');\n            dismissButton.classList.add(\n                'tako-button',\n                'tako-button--ghost',\n                'tako-button--icon',\n                'tako-button--inherit',\n                'tako-button--no-padding',\n            );\n\n            dismissButton.setAttribute('data-tag-dismiss', 'true');\n            dismissButton.setAttribute('aria-label', 'Close');\n            dismissButton.innerHTML = `<span class=\"tako-icon tako-icon--sm\"><i class=\"far fa-xmark\" aria-hidden=\"true\"></i></span>`;\n\n            takoTag.appendChild(dismissButton);\n\n            const dismissAlert = () => {\n                takoTag.style.display = 'none';\n            };\n\n            dismissButton.addEventListener('click', dismissAlert);\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: takoTag,\n            });\n        }\n    });\n};\n","/**\n * Initialise Tako Text Input\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Text Input\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\nimport { takoUUID } from './utils/takoUUID';\nimport { showElement } from './utils/showElement';\nimport { hideElement } from './utils/hideElement';\n\nconst COMPONENT_NAME = 'TextInput';\n\nexport const init = (unresolvedScope: string | HTMLElement | unknown) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    // Auto-inject password toggle buttons for password inputs\n    const passwordInputsForInjection = scope.querySelectorAll<HTMLInputElement>(\n        '.tako-form-control--password',\n    );\n\n    passwordInputsForInjection.forEach((input) => {\n        try {\n            if (!input.id) {\n                input.id = takoUUID('text-input');\n            }\n\n            const wrapper = input.closest('.tako-form-control__wrapper');\n            if (!wrapper) {\n                return;\n            }\n\n            const existingToggle = wrapper.querySelector<HTMLElement>(\n                `.tako-form-control__password-toggle[data-input-id=\"${input.id}\"]`,\n            );\n            if (existingToggle) {\n                return;\n            }\n\n            const showLabel =\n                input.getAttribute('data-i18n-show-password-label') ||\n                'Show password';\n\n            const toggleBtn = document.createElement('button');\n            toggleBtn.type = 'button';\n            toggleBtn.className =\n                'tako-form-control__action-button tako-form-control__password-toggle tako-button tako-button--ghost tako-button--secondary tako-button--icon tako-button--small';\n            toggleBtn.setAttribute('data-input-id', input.id);\n            toggleBtn.setAttribute('aria-label', showLabel);\n            toggleBtn.setAttribute('title', showLabel);\n\n            const iconSpan = document.createElement('span');\n            iconSpan.className = 'tako-icon tako-icon--sm';\n            const icon = document.createElement('i');\n            icon.className = 'far fa-eye';\n            icon.setAttribute('aria-hidden', 'true');\n            iconSpan.appendChild(icon);\n            toggleBtn.appendChild(iconSpan);\n\n            wrapper.appendChild(toggleBtn);\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: input,\n            });\n        }\n    });\n\n    // Initialize password toggle functionality\n    const passwordToggles = scope.querySelectorAll<HTMLElement>(\n        '.tako-form-control__password-toggle',\n    );\n\n    passwordToggles.forEach((toggle) => {\n        try {\n            toggle.addEventListener(\n                'click',\n                function (this: HTMLElement, e: Event) {\n                    e.preventDefault();\n\n                    const inputId = this.getAttribute('data-input-id');\n                    const input = scope.querySelector<HTMLInputElement>(\n                        `#${inputId}`,\n                    );\n                    const icon = this.querySelector<HTMLElement>('i');\n\n                    if (!input || !icon) {\n                        return;\n                    }\n\n                    // Toggle input type\n                    if (input.type === 'password') {\n                        input.type = 'text';\n                        icon.className = 'far fa-eye-slash';\n                        const hideLabel =\n                            input.getAttribute(\n                                'data-i18n-hide-password-label',\n                            ) || 'Hide password';\n                        this.setAttribute('aria-label', hideLabel);\n                        this.setAttribute('title', hideLabel);\n                    } else {\n                        input.type = 'password';\n                        icon.className = 'far fa-eye';\n                        const showLabel =\n                            input.getAttribute(\n                                'data-i18n-show-password-label',\n                            ) || 'Show password';\n                        this.setAttribute('aria-label', showLabel);\n                        this.setAttribute('title', showLabel);\n                    }\n                },\n            );\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: toggle,\n            });\n        }\n    });\n\n    // Initialize clear functionality for any clearable input\n    // First, auto-inject clear buttons for inputs marked as clearable\n    const clearableInputsForInjection =\n        scope.querySelectorAll<HTMLInputElement>(\n            '.tako-form-control--clearable',\n        );\n\n    clearableInputsForInjection.forEach((input) => {\n        try {\n            // Ensure input has an ID; generate one if missing\n            if (!input.id) {\n                input.id = takoUUID('text-input');\n            }\n\n            const wrapper = input.closest('.tako-form-control__wrapper');\n            if (!wrapper) {\n                return;\n            }\n\n            // If a clear button already exists for this input, skip injection\n            const existingButton = wrapper.querySelector<HTMLElement>(\n                `.tako-form-control__clear-button[data-input-id=\"${input.id}\"]`,\n            );\n            if (existingButton) {\n                return;\n            }\n\n            // Read i18n label from data attribute on input, fallback to default\n            const i18nLabel =\n                input.getAttribute('data-i18n-clear-label') || 'Clear input';\n\n            // Create clear button element\n            const button = document.createElement('button');\n            button.type = 'button';\n            button.className =\n                'tako-form-control__clear-button tako-button tako-button--ghost tako-button--secondary tako-button--icon tako-button--small';\n            button.setAttribute('data-input-id', input.id);\n            button.setAttribute('aria-label', i18nLabel);\n            button.setAttribute('title', i18nLabel);\n\n            // Icon\n            const iconSpan = document.createElement('span');\n            iconSpan.className = 'tako-icon tako-icon--sm';\n            const icon = document.createElement('i');\n            icon.className = 'far fa-xmark';\n            icon.setAttribute('aria-hidden', 'true');\n            iconSpan.appendChild(icon);\n            button.appendChild(iconSpan);\n\n            // Inject button after input inside wrapper\n            wrapper.appendChild(button);\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: input,\n            });\n        }\n    });\n\n    const clearButtons = scope.querySelectorAll<HTMLElement>(\n        '.tako-form-control__clear-button',\n    );\n\n    clearButtons.forEach((clearBtn) => {\n        try {\n            clearBtn.addEventListener(\n                'click',\n                function (this: HTMLElement, e: Event) {\n                    e.preventDefault();\n\n                    const inputId = this.getAttribute('data-input-id');\n                    const input = scope.querySelector<HTMLInputElement>(\n                        `#${inputId}`,\n                    );\n\n                    if (!input) {\n                        return;\n                    }\n\n                    // Clear the input value\n                    input.value = '';\n\n                    // Focus back on the input\n                    input.focus();\n\n                    // Trigger input event for any listeners\n                    const event = new Event('input', { bubbles: true });\n                    input.dispatchEvent(event);\n\n                    // Hide the clear button\n                    hideElement(this);\n\n                    // Trigger custom clear event for controlled scenarios\n                    const clearEvent = new CustomEvent('tako:clear', {\n                        bubbles: true,\n                        detail: { inputId },\n                    });\n                    input.dispatchEvent(clearEvent);\n                },\n            );\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: clearBtn,\n            });\n        }\n    });\n\n    // Initialize show/hide clear button for clearable inputs\n    const clearableInputs = scope.querySelectorAll<HTMLInputElement>(\n        '.tako-form-control--clearable',\n    );\n\n    clearableInputs.forEach((input) => {\n        try {\n            const wrapper = input.closest('.tako-form-control__wrapper');\n            if (!wrapper) {\n                return;\n            }\n\n            const clearBtn = wrapper.querySelector<HTMLElement>(\n                '.tako-form-control__clear-button',\n            );\n            if (!clearBtn) {\n                return;\n            }\n\n            // Function to toggle clear button visibility\n            const toggleClearButton = () => {\n                if (input.value.trim() === '') {\n                    hideElement(clearBtn);\n                } else {\n                    showElement(clearBtn, 'flex');\n                }\n            };\n\n            // Initial state\n            toggleClearButton();\n\n            // Listen for input changes\n            ['input', 'keyup', 'paste'].forEach((eventType) => {\n                input.addEventListener(eventType, function () {\n                    if (eventType === 'paste') {\n                        // Use setTimeout to ensure paste content is processed\n                        setTimeout(toggleClearButton, 10);\n                    } else {\n                        toggleClearButton();\n                    }\n                });\n            });\n        } catch (error) {\n            logger.error(error as string, {\n                ...defaultLoggerArgs,\n                element: input,\n            });\n        }\n    });\n};\n","/* -----------------------------------------------------------------------------\n * Toggle switch\n * -------------------------------------------------------------------------- */\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'ToggleSwitch';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, {\n        scope: document,\n    });\n\n    $('.tako-switch').each(function () {\n        try {\n            const input = $(this).find('.tako-form-control--switch');\n            const toggleSwitch = $(this).find('.tako-switch__toggle');\n            const toggleSwitchHTML = `<div class=\"tako-switch__toggle\"></div>`;\n\n            // Add the toggle switch after the hidden checkbox input\n            if (!toggleSwitch.length) {\n                input.after(toggleSwitchHTML);\n            }\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: this,\n            });\n        }\n    });\n};\n","/**\n * Create and initialise Tako tooltips\n */\n\n/* -----------------------------------------------------------------------------\n * Tako Tooltip\n * -------------------------------------------------------------------------- */\n\nimport { getIsRtl } from './utils/getIsRtl';\nimport { takoUUID } from './utils/takoUUID';\nimport { getLogger } from './utils/logger-context';\nimport { resolveComponentScope } from './utils/resolveComponentScope';\n\nconst COMPONENT_NAME = 'Tooltip';\n\nexport const init = (unresolvedScope) => {\n    const logger = getLogger();\n    const scope = resolveComponentScope(unresolvedScope);\n    const defaultLoggerArgs = {\n        componentName: COMPONENT_NAME,\n        scope,\n    };\n    logger.debug(`Initialising ${COMPONENT_NAME} component.`, { scope });\n\n    const allTakoTooltips = scope.querySelectorAll(\n        '[data-tooltip-content], [data-inline-tooltip-content], [data-tooltip-dangerously-set-inner-html], [data-dangerously-set-inner-html], .tako-tooltip',\n    );\n\n    allTakoTooltips.forEach((takoTooltip) => {\n        try {\n            warnOnDeprecatedClasses(takoTooltip);\n\n            takoTooltip.classList.add('tako-tooltip');\n            takoTooltip.setAttribute('tabindex', '0');\n            takoTooltip.setAttribute('role', 'button');\n            if (takoTooltip.hasAttribute('data-inline-tooltip-content')) {\n                takoTooltip.classList.add('tako-tooltip--text');\n            }\n\n            const { tooltipBody, tooltipBodyId } =\n                getTooltipContent(takoTooltip);\n            if (!tooltipBody) {\n                return;\n            } else {\n                /**\n                 * if tooltip is part of a modal\n                 * - add an attribute to change z-index\n                 * - move the tooltip body outside the modal\n                 */\n                const modalParent = takoTooltip.closest('.tako-modal');\n                if (modalParent) {\n                    tooltipBody.setAttribute('data-modal-content', true);\n                    modalParent.insertAdjacentElement('afterend', tooltipBody);\n                } else {\n                    takoTooltip.insertAdjacentElement('afterend', tooltipBody);\n                }\n                takoTooltip.setAttribute('aria-describedby', tooltipBodyId);\n            }\n\n            const lazy = takoTooltip.getAttribute('data-lazy');\n            if (lazy !== null && lazy.toLowerCase() === 'true') {\n                const initEvents = ['mouseenter', 'focus'];\n                initEvents.forEach((event) => {\n                    function lazyInit() {\n                        initiatePopper(takoTooltip, tooltipBody, true);\n                        takoTooltip.removeAttribute('data-lazy');\n                        takoTooltip.removeEventListener(event, lazyInit);\n                    }\n\n                    takoTooltip.addEventListener(event, lazyInit);\n                });\n            } else {\n                initiatePopper(takoTooltip, tooltipBody);\n            }\n        } catch (error) {\n            logger.error(error, {\n                ...defaultLoggerArgs,\n                element: takoTooltip,\n            });\n        }\n    });\n};\n\nfunction warnOnDeprecatedClasses(takoTooltip) {\n    const logger = getLogger();\n\n    // TODO: Remove with the next breaking change\n    if (takoTooltip.classList.contains('tako-tooltip')) {\n        logger.warn(\n            'The `tako-tooltip` class is deprecated. Please use the `data-tooltip-content` attribute instead.',\n        );\n    }\n    // TODO: Remove with the next breaking change\n    if (takoTooltip.classList.contains('tako-tooltip--text')) {\n        logger.warn(\n            'The `tako-tooltip--text` class is deprecated. Please use the `data-inline-tooltip-content` attribute instead.',\n        );\n    }\n}\n\nfunction getTooltipContent(takoTooltip) {\n    const logger = getLogger();\n    const tooltipBodyId = takoUUID('tooltip');\n\n    // Generate tooltip body and insert after trigger element\n    const tooltipBody = document.createElement('div');\n    tooltipBody.classList.add('tako-tooltip__body');\n    tooltipBody.setAttribute('role', 'tooltip');\n    tooltipBody.setAttribute('id', tooltipBodyId);\n    // Hidden by default for accessibility - shown/hidden programmatically\n    tooltipBody.setAttribute('hidden', '');\n\n    // Live region wrapper so screen readers announce tooltip content when shown\n    const tooltipContent = document.createElement('span');\n    tooltipContent.setAttribute('role', 'status');\n\n    // Check that we do not pass arbitrary strings into the DOM which might lead to code execution.\n    // Previously it was only occasionally used to do this on\n    // purpose but did enable accidental code execution by e.g.\n    // passing user data into the DOM.\n    // Only the `data-content` attribute should be used for text display.\n    // If you have no other option (and you tried really hard) but\n    // you have to display custom HTML as part of the tooltip then\n    // use the `data-unsafe-html` attribute.\n    let textContent =\n        takoTooltip.getAttribute('data-tooltip-content') ||\n        takoTooltip.getAttribute('data-inline-tooltip-content');\n\n    // TODO: Remove conditional with the next breaking change\n    if (!textContent && takoTooltip.getAttribute('data-content')) {\n        logger.warn(\n            \"Tako tooltip's `data-content` attribute is deprecated. Please use `data-tooltip-content` instead.\",\n        );\n        textContent = takoTooltip.getAttribute('data-content');\n    }\n\n    let dangerousContent = takoTooltip.getAttribute(\n        'data-tooltip-dangerously-set-inner-html',\n    );\n\n    // TODO: Remove conditional with the next breaking change\n    if (\n        !dangerousContent &&\n        takoTooltip.getAttribute('data-dangerously-set-inner-html')\n    ) {\n        logger.warn(\n            \"Tako tooltip's `data-dangerously-set-inner-html` attribute is deprecated. Please use `data-tooltip-dangerously-set-inner-html` instead.\",\n        );\n        dangerousContent = takoTooltip.getAttribute(\n            'data-dangerously-set-inner-html',\n        );\n    }\n\n    if (!textContent && !dangerousContent) {\n        logger.error(\n            'Tako Tooltip has not been provided with content. Please provide a `string` value to the `data-content` attribute. Omitting component...',\n        );\n        return null;\n    }\n\n    if (textContent && dangerousContent) {\n        logger.warn(\n            \"Tako Tooltip content has been set in both `data-content` and `data-dangerously-set-inner-html` attributes. Attribute `data-content` will be used since it's safer...\",\n        );\n    }\n\n    if (textContent) {\n        if (typeof textContent !== 'string') {\n            throw \"Tako Tooltip's `data-content` attribute should be provided with a `string`. Omitting component...\";\n        }\n        tooltipContent.innerText = textContent;\n    } else if (dangerousContent) {\n        logger.warn(\n            \"Tako Tooltip's `data-dangerously-set-inner-html` has been used. For security reasons, please avoid using this attribute unless absolutely necessary\",\n        );\n        tooltipContent.innerHTML = dangerousContent;\n    }\n\n    tooltipBody.appendChild(tooltipContent);\n    setTheme(takoTooltip, tooltipBody);\n    tooltipBody.appendChild(getTooltipBodyArrow());\n\n    return { tooltipBody, tooltipBodyId };\n}\nfunction getTooltipBodyArrow() {\n    const tooltipArrow = document.createElement('div');\n    tooltipArrow.classList.add('tako-tooltip__arrow');\n    tooltipArrow.setAttribute('data-popper-arrow', true);\n    return tooltipArrow;\n}\nfunction setTheme(takoTooltip, tooltipBody) {\n    const logger = getLogger();\n\n    // TODO: Remove light theme with the next breaking change\n    const lightTheme = takoTooltip.classList.contains('tako-tooltip--light');\n    if (lightTheme) {\n        tooltipBody.setAttribute('data-theme', 'light');\n        logger.warn(\n            'The Tako tooltip light theme is deprecated. Following the next breaking change all tooltips will have the default theme.',\n        );\n    }\n}\n\nfunction initiatePopper(takoTooltip, tooltipBody, forceShow = false) {\n    const options = {\n        modifiers: [{ name: 'offset', options: { offset: [0, 8] } }],\n        placement: getPlacement(takoTooltip),\n    };\n\n    // eslint-disable-next-line no-undef\n    const popperTooltipInstance = Popper.createPopper(\n        takoTooltip,\n        tooltipBody,\n        options,\n    );\n\n    showHide(tooltipBody, popperTooltipInstance, takoTooltip, forceShow);\n}\nfunction getPlacement(takoTooltip) {\n    const placementAttr = takoTooltip.getAttribute('data-placement');\n\n    const placementOptions = ['top', 'right', 'end', 'bottom', 'left', 'start'];\n    if (!placementOptions.includes(placementAttr)) {\n        return 'top';\n    }\n\n    if (placementAttr === 'end') {\n        return getIsRtl() ? 'left' : 'right';\n    } else if (placementAttr === 'start') {\n        return getIsRtl() ? 'right' : 'left';\n    }\n\n    return placementAttr;\n}\nfunction showHide(tooltipBody, popperTooltipInstance, takoTooltip, forceShow) {\n    // -------------------------------------------------------------------------\n    // Popper.js utilities\n    // -------------------------------------------------------------------------\n\n    function merge(originalObject, overrides) {\n        return Object.values(\n            []\n                .concat(originalObject, overrides)\n                .reduce(\n                    (properties, currentProperty) => (\n                        (properties[currentProperty.name] = Object.assign(\n                            properties[currentProperty.name] || {},\n                            currentProperty,\n                        )),\n                        properties\n                    ),\n                    {},\n                ),\n        );\n    }\n\n    function setPopperToolTipOptions(newModifier) {\n        popperTooltipInstance.setOptions((options) =>\n            Object.assign(options, {\n                modifiers: merge(options.modifiers, newModifier),\n            }),\n        );\n    }\n\n    // -------------------------------------------------------------------------\n    // Timeout management\n    // -------------------------------------------------------------------------\n\n    const HIDE_DELAY_MS = 100;\n    let hideTimeout = null;\n\n    function cancelHideTimeout() {\n        if (hideTimeout) {\n            clearTimeout(hideTimeout);\n            hideTimeout = null;\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Tooltip visibility\n    // -------------------------------------------------------------------------\n\n    function showTooltip() {\n        cancelHideTimeout();\n        tooltipBody.removeAttribute('hidden');\n        tooltipBody.setAttribute('data-show', true);\n        setPopperToolTipOptions([{ name: 'eventListeners', enabled: true }]);\n        popperTooltipInstance.update();\n    }\n\n    function hideTooltip() {\n        cancelHideTimeout();\n        tooltipBody.setAttribute('hidden', '');\n        tooltipBody.removeAttribute('data-show');\n        setPopperToolTipOptions([{ name: 'eventListeners', enabled: false }]);\n    }\n\n    function hideTooltipWithDelay() {\n        hideTimeout = setTimeout(hideTooltip, HIDE_DELAY_MS);\n    }\n\n    // -------------------------------------------------------------------------\n    // Event bindings: trigger element (show on hover/focus, hide on leave/blur)\n    // -------------------------------------------------------------------------\n\n    ['mouseenter', 'focus'].forEach((event) =>\n        takoTooltip.addEventListener(event, showTooltip),\n    );\n\n    ['mouseleave', 'blur'].forEach((event) =>\n        takoTooltip.addEventListener(event, hideTooltipWithDelay),\n    );\n\n    // -------------------------------------------------------------------------\n    // Event bindings: tooltip body (keep visible while user hovers over it)\n    // -------------------------------------------------------------------------\n\n    tooltipBody.addEventListener('mouseenter', cancelHideTimeout);\n    tooltipBody.addEventListener('mouseleave', hideTooltipWithDelay);\n\n    // -------------------------------------------------------------------------\n    // Keyboard accessibility: dismiss tooltip with Escape key\n    // -------------------------------------------------------------------------\n\n    document.addEventListener('keydown', (event) => {\n        if (event.key === 'Escape' && tooltipBody.hasAttribute('data-show')) {\n            hideTooltip();\n        }\n    });\n\n    // -------------------------------------------------------------------------\n    // Initial state\n    // -------------------------------------------------------------------------\n\n    if (forceShow) {\n        showTooltip();\n    }\n}\n","const takoColors = {\n    /* Light Neutral */\n    N0: '#ffffff', // White\n    N5: '#fcfcfc', // Snow\n    N10: '#fafafa', // Virgil Abloh\n    N15: '#f2f2f4', // Fog\n    N20: '#e9e9ec', // Athens gray\n    N30: '#e0dee3', // Mischka\n    N40: '#d1ced4', // Cloud vision\n\n    /* Mid Neutral */\n    N50: '#bbb7c1', // Silverware\n    N100: '#a3a0ac', // Santas gray\n    N200: '#938d9c', // Gentle mauve\n    N300: '#7d7788', // Dull mauve\n    N400: '#696176', // Purple punch\n\n    /* Dark Neutral */\n    N500: '#594e69', // Mulled wine\n    N600: '#483760', // Martinique\n    N700: '#342349', // Russian violet\n    N800: '#291544', // Valhalla\n    N900: '#1e0d35', // Kraken ink\n\n    /* Green */\n    G25: '#f1fbf5', // Narvik\n    G50: '#e4f8ec', // Honeydew\n    G75: '#cff3de', // Granny apple\n    G100: '#a0e8bd', // Magic mint\n    G200: '#6ada97', // Pastel green\n    G300: '#34cd71', // Jungle\n    G400: '#2bb061', // Eucalyptus\n    G500: '#1e7b44', // Pine\n    G550: '#196739', // Forest\n    G600: '#14522E', // Leaf\n\n    /* Orange */\n    O25: '#fff9ee', // Dawn\n    O50: '#fff4dd', // Champagne\n    O75: '#ffebc3', // Egg white\n    O100: '#ffd888', // Grandis\n    O200: '#ffc144', // Honey\n    O250: '#ffab00', // Gold\n    O300: '#e59a00', // Pumpkin\n    O400: '#cc8900', // Orange choco\n    O500: '#996700', // Caramel choco\n    O550: '#805600', // Soil\n    O600: '#664400', // Brown\n\n    /* Red */\n    R25: '#fff2f3', // Chablis\n    R50: '#ffe7e9', // Misty rose\n    R75: '#ffd5d9', // Cosmos\n    R100: '#ffacb3', // Blossom\n    R200: '#ff6673', // Bittersweet\n    R300: '#ff3849', // Electric crimson\n    R400: '#de0013', // Vermilion\n    R500: '#cc0011', // Monza\n    R600: '#b2000f', // Firebrick\n\n    /* Primary Purple */\n    P25: '#f5effd', // Selago\n    P50: '#ece1fb', // Pale purple\n    P75: '#e2d1f9', // Moonraker\n    P100: '#be96f3', // Wisteria\n    P200: '#9859ea', // Musa\n    P300: '#721ce3', // Kraken purple\n    P350: '#6018bf', // Purple heart\n    P400: '#4c1397', // Blue gem\n\n    /* Fuchsia */\n    F50: '#fce8fd', // Cotton candy\n    F100: '#f9c4fb', // Perfume\n    F200: '#f28af6', // Orchid\n    F300: '#ec4ff2', // Kraken skin\n    F400: '#c00fc7', // Steel pink\n    F500: '#9a0c9f', // Dark magenta\n    F600: '#730978', // Royal purple\n    F700: '#4d0650', // Bossanova\n\n    /* Blue */\n    B50: '#e5f6fe', // Foam\n    B100: '#bfeafc', // Dreamy\n    B200: '#7ed4f9', // Sky\n    B300: '#3ebff6', // Malibu\n    B400: '#098cc4', // Sardinia\n} as const;\n\nexport default takoColors;\nexport type TakoColorsUnitKey = keyof typeof takoColors;\nexport type TakoColorsUnitValue = (typeof takoColors)[keyof typeof takoColors];\n","import takoColors from '../theme/colors';\n\n/**\n * Calculates the luminance of the color and returns appropriate font color (either N900 or N0)\n * If the luminance is greater than 0.5, it returns N900; otherwise, it returns N0.\n * @param hex - Hex color string (e.g. \"#ffffff\")\n * @returns \"#ffffff\" | \"#1e0d35\"\n */\nexport const getContrastColor = (hex: string) => {\n    if (!hex) {\n        return takoColors.N900;\n    }\n    hex = hex.replace('#', '');\n    const r = parseInt(hex.substring(0, 2), 16);\n    const g = parseInt(hex.substring(2, 2), 16);\n    const b = parseInt(hex.substring(4, 2), 16);\n    const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n    return luminance > 0.5 ? takoColors.N900 : takoColors.N0;\n};\n","type ErrorWithMessage = {\n    message: string;\n};\n\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n    return (\n        typeof error === 'object' &&\n        error !== null &&\n        'message' in error &&\n        typeof (error as Record<string, unknown>).message === 'string'\n    );\n}\n\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage {\n    if (isErrorWithMessage(maybeError)) {\n        return maybeError;\n    }\n\n    try {\n        return new Error(JSON.stringify(maybeError));\n    } catch {\n        // fallback in case there's an error stringifying the maybeError\n        // like with circular references for example.\n        return new Error(String(maybeError));\n    }\n}\n\nexport function getErrorMessage(error: unknown) {\n    return toErrorWithMessage(error).message;\n}\n","import takoColors from './colors';\n\nexport const theme = {\n    colors: takoColors,\n};\n","import { getContrastColor } from '../../utils/getContrastColor';\nimport takoColors from '../../theme/colors';\n\nexport const chartjsColors = {\n    color1: takoColors.P100,\n    color2: takoColors.F300,\n    color3: takoColors.O250,\n    color4: takoColors.P300,\n    color5: takoColors.B300,\n    color6: takoColors.R200,\n    average: takoColors.R600,\n    grid: takoColors.N30,\n    text: takoColors.N900,\n    axisLabel: takoColors.P300,\n    tooltipBg: takoColors.N900,\n};\n\nexport const chartjsFont = {\n    family: 'Work Sans',\n    size: 16,\n    weight: 400,\n};\n\nexport const chartjsPlugins = {\n    datalabels: {\n        color: (ctx: {\n            dataset: { backgroundColor: string };\n            dataIndex: number;\n        }) => {\n            const bgColor = ctx.dataset.backgroundColor;\n            const index = ctx.dataIndex;\n            const rawColor = Array.isArray(bgColor) ? bgColor[index] : bgColor;\n            return getContrastColor(rawColor);\n        },\n        anchor: 'center',\n        align: 'center',\n    },\n    legend: {\n        position: 'right',\n        labels: { padding: 16 },\n        title: {\n            position: 'start',\n            font: { size: 18 },\n        },\n    },\n    tooltip: {\n        backgroundColor: chartjsColors.tooltipBg,\n    },\n};\n\nexport const chartjsOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    plugins: chartjsPlugins,\n};\n"],"mappings":"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","names":["src_exports","__export","init_tako_accordion_exports","init_tako_alert_exports","init_tako_breadcrumbs_exports","init_tako_button_exports","init_tako_card_exports","chartjsColors","chartjsFont","chartjsOptions","chartjsPlugins","init_tako_checkbox_exports","src_default","init_tako_dropdown_exports","getContrastColor","initAllTakoComponents","init_tako_link_exports","init_tako_list_exports","init_tako_modal_exports","init_tako_pagination_exports","init_tako_popover_exports","init_tako_radio_button_group_exports","init_tako_select_exports","init_tako_table_exports","init_tako_tag_exports","init_tako_text_input_exports","theme","init_tako_toggle_switch_exports","init_tako_tooltip_exports","_logger","requiredMethods","setLogger","logger","method","getLogger","init_tako_accordion_exports","__export","init","toggle","showElement","el","display","hideElement","el","display","takoUUID","componentName","resolveComponentScope","scope","logger","getLogger","COMPONENT_NAME","accordionInstances","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","openIcon","closeIcon","DATA_OPEN","defaultLoggerArgs","accordion","instanceLoggerArgs","accordionHeader","accordionBody","takoUUID","expandedHeaderText","openHeaderText","closedHeaderText","accordionIsOpen","icon","showElement","hideElement","open","toggleIcon","openEvent","close","closeEvent","toggleAccordion","error","debounceDelay","debounceTimeouts","toggle","selector","takoAccordionElements","takoAccordionElement","instance","shouldOpen","init_tako_alert_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","allDismissibleTakoAlerts","takoAlert","instanceLoggerArgs","classList","addAlertContentWrapper","icon","iconContainer","error","takoDismissibleAlert","dismissButton","dismissAlert","contentContainer","init_tako_breadcrumbs_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","takoBreadcrumbs","truncatedBreadcrumb","breadcrumbLink","error","init_tako_button_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","iconButton","srContentText","srContent","error","init_tako_card_exports","__export","init","toggle","getDirectChildren","el","classSelector","child","COMPONENT_NAME","cardInstances","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","takoCard","instanceLoggerArgs","openIconHTML","closeIconHTML","closeText","openText","cardHeader","getDirectChildren","cardContent","DATA_OPEN","item","isCardOpen","legacyCardToggleClass","toggleButton","headerButtonGroup","headerButtons","newButtonGroup","button","cardToggleButton","firstSiblingWithoutClass","firstSibling","openFirstSibling","closeFirstSibling","setAriaAttributes","open","openEvent","close","closeEvent","handleClick","error","debounceDelay","debounceTimeouts","toggle","selector","takoCardElements","takoCardElement","instance","shouldOpen","init_tako_checkbox_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","takoCheckboxes","checkbox","checkboxParent","checkboxWrapper","customTakoCheckbox","checkIcon","indeterminateIcon","toggleCheckboxGroup","error","el","evt","isTakoCheckboxInputChecked","parentCheckbox","multiCheckboxTarget","multiCheckboxGroup","multiCheckboxes","parentCheckboxWrapper","getCheckboxGroupStatus","allChecked","someChecked","toggleCheckboxes","multiCheckbox","updateParentCheckbox","lastChecked","selectRangeOfCheckboxesWithShift","checkboxes","start","end","low","high","i","init_tako_dropdown_exports","__export","init","toggle","dropdownInstances","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","merge","originalObject","overrides","properties","currentProperty","defaultLoggerArgs","takoDropdown","button","dropdown","isTakoIconButton","popperDropdownInstance","setPopperDropdownOptions","newModifier","options","dropdownItems","item","open","closeIconHTML","angleDownIcon","openEvent","close","openIconHTML","angleUpIcon","closeEvent","handleClick","handleKeydown","event","items","index","error","debounceDelay","debounceTimeouts","toggle","selector","takoDropdownElements","takoDropdownElement","instance","shouldOpen","init_tako_list_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","list","items","listItem","error","item","init_tako_link_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","link","error","init_tako_modal_exports","__export","init","toggle","createLoadingIndicator","size","loadingSpinnerDiv","loadingSpinnerIcon","loadingSpinner","setHxAttrs","trigger","targetComponent","targetId","createHxTarget","hxTargetId","hxTarget","createHxIndicator","size","hxIndicatorId","hxIndicatorWrapper","hxIndicator","createLoadingIndicator","createHtmxModal","modalButton","dataModalTarget","takoUUID","modalId","hxModal","hxModalDialog","hxModalHeader","setHxAttrs","modalDiv","setModalAttr","modalDialog","setModalModifierClass","modalHTMXWrapper","modalHTMXContent","createHxTarget","hxIndicator","createHxIndicator","modal","dataWidth","COMPONENT_NAME","handleModalEscapeKeydown","event","modal","modalId","toggle","validateModalId","logger","getLogger","idSelector","show","validModalId","allDismissButtons","enforceFocus","close","modalButton","getModalButton","closeEvent","open","openEvent","init","unresolvedScope","scope","resolveComponentScope","defaultLoggerArgs","allHtmxModalButtons","htmxModalButton","createHtmxModal","takoModal","instanceLoggerArgs","dismissButton","createDismissButton","modalDialog","takoModalId","takoModalButton","modalTitle","addModalHeader","modalHeader","modalTitleId","takoUUID","addAutoDismissButton","dismissAttribute","focusableElements","focusLastElement","error","title","label","takoModalFooter","autoDismissButtonLabel","autoDismissButton","footerDismissButton","buttonGroup","init_tako_pagination_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","pagination","layoutPageButtons","addPaginationEventListeners","error","pageContainer","createEllipsisIcon","ellipsisIcon","pages","prevArrow","nextArrow","numOfPages","currentPage","currentPageIndex","icon","el","index","hideElement","showElement","takoPagination","button","event","currentElement","prevElement","nextElement","init_tako_popover_exports","__export","init","toggle","getIsRtl","createHtmxPopover","popoverButton","dataPopoverTarget","takoUUID","popoverId","hxPopover","setHxAttrs","popoverDiv","setPopoverAttrs","setPopoverModifierClass","popoverHTMXWrapper","popoverHTMXContent","createHxTarget","hxIndicator","createHxIndicator","popover","dataFixed","dataPlacement","dataWidth","COMPONENT_NAME","popoverInstances","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","merge","originalObject","overrides","properties","currentProperty","defaultLoggerArgs","allHtmxPopoverButtons","htmxPopoverButton","createHtmxPopover","takoPopover","setPopperPopoverOptions","newModifier","popperPopoverInstance","options","instanceLoggerArgs","popoverButton","getPopoverButton","popoverTitle","addPopoverHeader","addPopoverBodyWrapper","addPopoverArrow","setAriaAttrs","placement","placementOptions","option","getIsRtl","open","openEvent","close","closeEvent","handleTriggerClick","handleBodyClick","event","dataFixedAttr","popoverModalParent","error","popover","popoverId","title","popoverHeader","popoverBody","popoverArrow","debounceDelay","debounceTimeouts","toggle","selector","takoPopoverElements","takoPopoverElement","instance","shouldOpen","init_tako_radio_button_group_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","radioButtonGroup","instanceLoggerArgs","labels","radioButtons","label","radioButton","customTakoRadio","error","init_tako_select_exports","__export","init","dispatchNativeChange","el","initSelect2","elem","select2Params","dataWidget","isTags","isMultiple","isDeselect","isOptGroup","dataDisableSorting","firstOption","deselectPlaceholder","formatSelect2Text","state","matchCustom","params","data","isMatchingOption","element","filteredChildren","modifiedData","select2DefaultParams","a","b","addSelect2MultipleEventListeners","addSelect2EventListeners","searchInputClass","selectResult","clearButtton","selectValue","searchField","e","noOptionMessage","removeEmptyOptGroup","optGroup","addNoOptionsMessage","evt","elementParent","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","selectDefault","error","selectDeselect","init_tako_table_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","allTakoTables","defaultLoggerArgs","takoTable","instanceLoggerArgs","selectableCells","handleCellSelect","event","isSelected","handleKeyDown","cell","cellText","error","init_tako_tag_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","allDismissibleTakoTags","takoTag","dismissButton","dismissAlert","error","init_tako_text_input_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","input","takoUUID","wrapper","showLabel","toggleBtn","iconSpan","icon","error","toggle","e","inputId","hideLabel","i18nLabel","button","clearBtn","event","hideElement","clearEvent","toggleClearButton","showElement","eventType","init_tako_toggle_switch_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","input","error","init_tako_tooltip_exports","__export","init","COMPONENT_NAME","init","unresolvedScope","logger","getLogger","scope","resolveComponentScope","defaultLoggerArgs","takoTooltip","warnOnDeprecatedClasses","tooltipBody","tooltipBodyId","getTooltipContent","modalParent","lazy","event","lazyInit","initiatePopper","error","takoUUID","tooltipContent","textContent","dangerousContent","setTheme","getTooltipBodyArrow","tooltipArrow","forceShow","options","getPlacement","popperTooltipInstance","showHide","placementAttr","getIsRtl","merge","originalObject","overrides","properties","currentProperty","setPopperToolTipOptions","newModifier","HIDE_DELAY_MS","hideTimeout","cancelHideTimeout","showTooltip","hideTooltip","hideTooltipWithDelay","takoColors","colors_default","getContrastColor","hex","colors_default","r","b","isErrorWithMessage","error","toErrorWithMessage","maybeError","getErrorMessage","theme","colors_default","chartjsColors","colors_default","chartjsFont","chartjsPlugins","ctx","bgColor","index","rawColor","getContrastColor","chartjsOptions","components","init_tako_accordion_exports","init_tako_alert_exports","init_tako_breadcrumbs_exports","init_tako_button_exports","init_tako_card_exports","init_tako_checkbox_exports","init_tako_dropdown_exports","init_tako_list_exports","init_tako_link_exports","init_tako_modal_exports","init_tako_pagination_exports","init_tako_popover_exports","init_tako_radio_button_group_exports","init_tako_select_exports","init_tako_table_exports","init_tako_tag_exports","init_tako_text_input_exports","init_tako_toggle_switch_exports","init_tako_tooltip_exports","safelyInitComponent","name","initFn","unresolvedScope","logger","resolve","error","getErrorMessage","initAllTakoComponents","externalLogger","setLogger","getLogger","initPromises","acc","key","init","results","failedComponents","src_default","theme","chartjsColors","chartjsFont","chartjsOptions","chartjsPlugins","getContrastColor"]}