@waaelg/dga-design-system 0.5.7 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/scripts/shared/accordion-controller.js","../src/scripts/accordion.js","../src/scripts/alert.js","../src/scripts/shared/pie-chart.js","../src/scripts/chart.js","../src/scripts/shared/copy-text.js","../src/scripts/codeSnippet.js","../src/scripts/dropdownMenu.js","../src/scripts/verifyBar.js","../src/scripts/shared/escape-html.js","../src/scripts/dga-alert.js","../src/scripts/dga-accordion.js","../src/scripts/dga-code-snippet.js","../src/scripts/dga-pie-chart.js","../src/scripts/dga-verify-bar.js","../src/scripts/register-web-components.js"],"sourcesContent":["export class AccordionController {\r\n constructor(root) {\r\n this.root = root;\r\n this.handleClick = this.handleClick.bind(this);\r\n this.handleKeydown = this.handleKeydown.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.root.addEventListener(\"click\", this.handleClick);\r\n this.root.addEventListener(\"keydown\", this.handleKeydown);\r\n }\r\n\r\n handleClick(event) {\r\n const header = event.target.closest(\".dga-acc-header\");\r\n if (header && this.root.contains(header)) {\r\n this.toggle(header);\r\n }\r\n }\r\n\r\n handleKeydown(event) {\r\n const header = event.target.closest(\".dga-acc-header\");\r\n if (!header || !this.root.contains(header)) return;\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n this.toggle(header);\r\n }\r\n }\r\n\r\n toggle(header) {\r\n const item = header.parentElement;\r\n if (!item) return;\r\n\r\n if (item.classList.contains(\"dga-acc-item--active\")) {\r\n this.close(item);\r\n } else {\r\n this.open(item);\r\n }\r\n }\r\n\r\n open(item) {\r\n item.classList.add(\"dga-acc-item--active\");\r\n item.querySelector(\".dga-acc-header\")?.setAttribute(\"aria-expanded\", \"true\");\r\n }\r\n\r\n close(item) {\r\n item.classList.remove(\"dga-acc-item--active\");\r\n item.querySelector(\".dga-acc-header\")?.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n\r\n closeAll() {\r\n this.root.querySelectorAll(\".dga-acc-item\").forEach((item) => {\r\n this.close(item);\r\n });\r\n }\r\n\r\n destroy() {\r\n this.root.removeEventListener(\"click\", this.handleClick);\r\n this.root.removeEventListener(\"keydown\", this.handleKeydown);\r\n }\r\n}\r\n","import { AccordionController } from \"./shared/accordion-controller.js\";\r\n\r\nexport default class DGAAccordion {\r\n constructor(element) {\r\n this.accordion = element;\r\n this.controller = new AccordionController(element);\r\n }\r\n\r\n toggle(header) {\r\n this.controller.toggle(header);\r\n }\r\n\r\n open(item) {\r\n this.controller.open(item);\r\n }\r\n\r\n close(item) {\r\n this.controller.close(item);\r\n }\r\n\r\n closeAll() {\r\n this.controller.closeAll();\r\n }\r\n\r\n destroy() {\r\n this.controller.destroy();\r\n }\r\n}\r\n","export default class DGAAlert {\r\n constructor(root = document) {\r\n this.root = root;\r\n this.handleCloseClick = this.handleCloseClick.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.root.addEventListener(\"click\", this.handleCloseClick);\r\n }\r\n\r\n handleCloseClick(event) {\r\n const closeButton = event.target.closest(\"[data-alert-close]\");\r\n if (!closeButton) {\r\n return;\r\n }\r\n\r\n const alert = closeButton.closest(\".dga-alert\");\r\n if (alert) {\r\n alert.style.display = \"none\";\r\n }\r\n }\r\n\r\n destroy() {\r\n this.root.removeEventListener(\"click\", this.handleCloseClick);\r\n }\r\n}\r\n","export function resolveChartColor(color) {\r\n if (color.startsWith(\"#\") || color.startsWith(\"var(\")) {\r\n return color;\r\n }\r\n return `var(--${color})`;\r\n}\r\n\r\nexport function generateChartGradient(data = []) {\r\n const gradientParts = data.map(\r\n (segment) =>\r\n `${resolveChartColor(segment.color)} ${segment.from} ${segment.to}`\r\n );\r\n return `conic-gradient(${gradientParts.join(\", \")})`;\r\n}\r\n\r\nexport function generateChartLabelsHtml(data = []) {\r\n const labels = data\r\n .map(\r\n (segment) =>\r\n `<span class=\"dga-pie-chart__label\"><span class=\"dga-pie-chart__circle\" style=\"background-color: ${resolveChartColor(\r\n segment.color\r\n )}\"></span>${segment.label}</span>`\r\n )\r\n .join(\"\");\r\n\r\n return `<div class=\"dga-pie-chart__labels\">${labels}</div>`;\r\n}\r\n\r\nexport function parseChartDataAttribute(value) {\r\n if (!value) return [];\r\n\r\n try {\r\n const parsed = JSON.parse(value);\r\n return Array.isArray(parsed) ? parsed : [];\r\n } catch {\r\n console.warn(\"dga-pie-chart: invalid data attribute JSON\");\r\n return [];\r\n }\r\n}\r\n\r\nexport function renderPieChart(element, data = [], { hole = false } = {}) {\r\n if (!element) return;\r\n\r\n element.classList.add(\"dga-pie-chart\");\r\n element.setAttribute(\"data-hole\", hole ? \"true\" : \"false\");\r\n // The gradient now lives on an inner disc so the host can be a normal-flow\r\n // column (disc + labels), reserving its own space instead of relying on\r\n // absolutely-positioned labels.\r\n element.style.background = \"\";\r\n element.innerHTML = `<span class=\"dga-pie-chart__disc\" style=\"background: ${generateChartGradient(\r\n data\r\n )}\"></span>${generateChartLabelsHtml(data)}`;\r\n}\r\n","import {\r\n generateChartGradient,\r\n generateChartLabelsHtml,\r\n renderPieChart,\r\n} from \"./shared/pie-chart.js\";\r\n\r\nexport default class DGAChart {\r\n constructor(element, data = []) {\r\n this.chart = element;\r\n this.data = data;\r\n this.init();\r\n }\r\n\r\n init() {\r\n const hole = this.chart.getAttribute(\"data-hole\") === \"true\";\r\n renderPieChart(this.chart, this.data, { hole });\r\n }\r\n\r\n generateGradient() {\r\n return generateChartGradient(this.data);\r\n }\r\n\r\n generateLabels() {\r\n return generateChartLabelsHtml(this.data);\r\n }\r\n}\r\n","export async function copyText(text) {\r\n try {\r\n if (navigator.clipboard?.writeText) {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n }\r\n } catch (_error) {\r\n // Fallback below for restricted clipboard environments.\r\n }\r\n\r\n const textarea = document.createElement(\"textarea\");\r\n textarea.value = text;\r\n textarea.setAttribute(\"readonly\", \"\");\r\n textarea.style.position = \"absolute\";\r\n textarea.style.left = \"-9999px\";\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n const success = document.execCommand(\"copy\");\r\n document.body.removeChild(textarea);\r\n return success;\r\n}\r\n\r\nexport const COPY_ICON_SVG = `<svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\" stroke-width=\"1.75\"></rect>\r\n <path d=\"M6 15H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v1\" stroke-width=\"1.75\" stroke-linecap=\"round\"></path>\r\n</svg>`;\r\n\r\nexport async function markCopyButtonCopied(copyButton, resetMs = 1200) {\r\n const previousLabel = copyButton.getAttribute(\"aria-label\") || \"Copy code\";\r\n copyButton.setAttribute(\"aria-label\", \"Copied\");\r\n copyButton.setAttribute(\"data-copied\", \"true\");\r\n\r\n window.setTimeout(() => {\r\n copyButton.setAttribute(\"aria-label\", previousLabel);\r\n copyButton.setAttribute(\"data-copied\", \"false\");\r\n }, resetMs);\r\n}\r\n","import { copyText, markCopyButtonCopied } from \"./shared/copy-text.js\";\r\n\r\nexport default class DGACodeSnippet {\r\n constructor(root = document) {\r\n this.root = root;\r\n this.handleCopyClick = this.handleCopyClick.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.root.addEventListener(\"click\", this.handleCopyClick);\r\n }\r\n\r\n async handleCopyClick(event) {\r\n const copyButton = event.target.closest(\r\n \".dga-code-snippet-inline__copy, .dga-code-snippet-multiline__copy\"\r\n );\r\n if (!copyButton) return;\r\n\r\n const inlineSnippet = copyButton.closest(\".dga-code-snippet-inline\");\r\n const multilineSnippet = copyButton.closest(\".dga-code-snippet-multiline\");\r\n\r\n let textToCopy = \"\";\r\n if (inlineSnippet) {\r\n const codeElement = inlineSnippet.querySelector(\r\n \".dga-code-snippet-inline__content\"\r\n );\r\n textToCopy = codeElement?.textContent?.trim() || \"\";\r\n } else if (multilineSnippet) {\r\n const codeElement = multilineSnippet.querySelector(\r\n \".dga-code-snippet-multiline__code code\"\r\n );\r\n textToCopy = codeElement?.textContent || \"\";\r\n }\r\n\r\n if (!textToCopy) return;\r\n\r\n const copied = await copyText(textToCopy);\r\n if (!copied) return;\r\n\r\n await markCopyButtonCopied(copyButton);\r\n }\r\n\r\n destroy() {\r\n this.root.removeEventListener(\"click\", this.handleCopyClick);\r\n }\r\n}\r\n","class DGAMenuDropdown {\r\n constructor(options = {}) {\r\n this.navbar = options.navbar || document.querySelector(\".dga-navbar\");\r\n this.verifyBar = options.verifyBar || null;\r\n\r\n if (!this.navbar) {\r\n console.warn(\"DGA Navbar elements not found\");\r\n return;\r\n }\r\n\r\n this.navbarTop = this.navbar.getBoundingClientRect().top + window.scrollY;\r\n this.navbarHeight = this.navbar.getBoundingClientRect().height;\r\n this.menu = this.navbar.querySelector(\".dga-menu\");\r\n this.toggler = this.navbar.querySelector(\".dga-navbar-toggler\");\r\n this.menuItems = this.navbar.querySelectorAll(\".dga-menu-item.dga-has-dropdown\");\r\n\r\n if (!this.menu) {\r\n console.warn(\"DGA Menu element not found\");\r\n return;\r\n }\r\n\r\n this.boundToggleDropdown = (e) => this.toggleDropdown(e);\r\n this.boundToggleMobileMenu = (e) => this.toggleMobileMenu(e);\r\n this.boundCloseAllDropdowns = (e) => this.closeAllDropdowns(e);\r\n this.boundHandleResize = () => this.handleResize();\r\n this.boundHandleKeyboard = (e) => this.handleKeyboard(e);\r\n\r\n this.init();\r\n }\r\n\r\n get isActive() {\r\n return this.isMobileMenuOpen() || this.isNormalDropdownOpen();\r\n }\r\n\r\n init() {\r\n this.handleResize();\r\n this.bindEvents();\r\n }\r\n\r\n bindEvents() {\r\n // Dropdown menu items\r\n this.menuItems.forEach((item) => {\r\n item.addEventListener(\"click\", this.boundToggleDropdown);\r\n });\r\n\r\n // Mobile menu toggler\r\n this.toggler?.addEventListener(\"click\", this.boundToggleMobileMenu);\r\n\r\n // Close dropdowns when clicking outside\r\n document.addEventListener(\"click\", this.boundCloseAllDropdowns);\r\n\r\n // Handle window resize\r\n window.addEventListener(\"resize\", this.boundHandleResize);\r\n\r\n // Keyboard accessibility\r\n this.menuItems.forEach((item) => {\r\n item.addEventListener(\"keydown\", this.boundHandleKeyboard);\r\n });\r\n }\r\n\r\n toggleDropdown(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n // Close verify bar when opening menu\r\n if (this.verifyBar && this.verifyBar.isOpen) {\r\n this.verifyBar.closePanel();\r\n }\r\n\r\n const menuItem = e.currentTarget;\r\n const listItem = menuItem.parentElement;\r\n const isActive = listItem.classList.contains(\"active\");\r\n\r\n // Close all other dropdowns\r\n this.closeAllDropdowns();\r\n\r\n // Toggle current dropdown\r\n if (!isActive) {\r\n listItem.classList.add(\"active\");\r\n menuItem.classList.add(\"dga-menu-item-selected\");\r\n menuItem.setAttribute(\"aria-expanded\", \"true\");\r\n\r\n listItem.querySelector(\".dga-dropdown\").style.top = `${this.navbarHeight + this.navbarTop\r\n }px`;\r\n }\r\n }\r\n\r\n toggleMobileMenu(e) {\r\n e.stopPropagation();\r\n\r\n // Close verify bar when opening menu\r\n if (this.verifyBar && this.verifyBar.isOpen) {\r\n this.verifyBar.closePanel();\r\n }\r\n\r\n this.menu.classList.toggle(\"dga-menu-open\");\r\n if (this.menu.classList.contains(\"dga-menu-open\")) {\r\n document.body.classList.add(\"no-scroll\");\r\n this.menu.style.height = `calc(100vh - ${this.navbarHeight}px - ${this.navbarTop}px)`;\r\n } else {\r\n document.body.classList.remove(\"no-scroll\");\r\n this.menu.style.height = `0px`;\r\n }\r\n this.menu.style.top = `${this.navbarTop + this.navbarHeight}px`;\r\n\r\n const isOpen = this.menu.classList.contains(\"dga-menu-open\");\r\n this.toggler.setAttribute(\"aria-expanded\", isOpen);\r\n this.toggler.setAttribute(\r\n \"aria-label\",\r\n isOpen ? \"Close menu\" : \"Open menu\"\r\n );\r\n }\r\n\r\n // Public method to close menu programmatically (without event)\r\n closeMenu() {\r\n // Close all dropdowns\r\n this.closeAllDropdowns();\r\n\r\n // Close mobile menu if open\r\n if (this.isMobileMenuOpen()) {\r\n this.menu.classList.remove(\"dga-menu-open\");\r\n document.body.classList.remove(\"no-scroll\");\r\n this.menu.style.height = `0px`;\r\n this.toggler.setAttribute(\"aria-expanded\", \"false\");\r\n this.toggler.setAttribute(\"aria-label\", \"Open menu\");\r\n }\r\n }\r\n\r\n closeAllDropdowns(e) {\r\n // Don't close if clicking inside dropdown content\r\n if (e && e.target.closest(\".dga-dropdown-content\")) {\r\n return;\r\n }\r\n\r\n const activeItems = this.navbar.querySelectorAll(\".dga-menu > li.active\");\r\n activeItems.forEach((item) => {\r\n item.classList.remove(\"active\");\r\n const menuItem = item.querySelector(\".dga-menu-item\");\r\n menuItem?.classList.remove(\"dga-menu-item-selected\");\r\n menuItem?.setAttribute(\"aria-expanded\", \"false\");\r\n });\r\n }\r\n\r\n handleKeyboard(e) {\r\n // Close dropdown on Escape\r\n if (e.key === \"Escape\") {\r\n this.closeAllDropdowns();\r\n e.currentTarget.focus();\r\n }\r\n\r\n // Toggle on Enter or Space\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n this.toggleDropdown(e);\r\n }\r\n }\r\n\r\n handleResize() {\r\n const width = window.innerWidth;\r\n\r\n // Remove size classes\r\n document.body.classList.remove(\r\n \"size_desktop\",\r\n \"size_tablet\",\r\n \"size_mobile\"\r\n );\r\n\r\n // Add appropriate size class\r\n if (width > 769) {\r\n document.body.classList.add(\"size_desktop\");\r\n this.closeAllDropdowns();\r\n this.menu.classList.remove(\"dga-menu-open\");\r\n document.body.classList.remove(\"no-scroll\");\r\n } else if (width <= 769 && width > 375) {\r\n document.body.classList.add(\"size_tablet\");\r\n } else {\r\n document.body.classList.add(\"size_mobile\");\r\n }\r\n }\r\n\r\n // Public method to destroy the component\r\n destroy() {\r\n this.menuItems.forEach((item) => {\r\n item.removeEventListener(\"click\", this.boundToggleDropdown);\r\n item.removeEventListener(\"keydown\", this.boundHandleKeyboard);\r\n });\r\n\r\n this.toggler?.removeEventListener(\"click\", this.boundToggleMobileMenu);\r\n document.removeEventListener(\"click\", this.boundCloseAllDropdowns);\r\n window.removeEventListener(\"resize\", this.boundHandleResize);\r\n }\r\n\r\n isMobileMenuOpen() {\r\n return this.menu?.classList.contains(\"dga-menu-open\");\r\n }\r\n\r\n isNormalDropdownOpen() {\r\n return this.navbar.querySelectorAll(\".dga-menu > li.active\").length > 0;\r\n }\r\n}\r\n\r\nexport default DGAMenuDropdown;\r\n","export default class DGAVerifyBar {\r\n constructor(options = {}) {\r\n this.isOpen = false;\r\n this.verifyBar = document.getElementById(\"dga-verify-bar\");\r\n this.menu = options.menu || null; // Fixed typo: was \"mneu\"\r\n\r\n this.btn = document.getElementById(\"dga-verifyBtn\");\r\n this.content = document.getElementById(\"dga-verify-bar_content\");\r\n this.boundToggle = () => {\r\n if (this.isOpen) {\r\n this.closePanel();\r\n } else {\r\n this.openPanel();\r\n }\r\n };\r\n\r\n if (!this.verifyBar || !this.btn || !this.content) {\r\n console.warn(\"DGA Verify Bar elements not found\");\r\n return;\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.btn.addEventListener(\"click\", this.boundToggle);\r\n }\r\n\r\n openPanel() {\r\n // Close menu if it's open\r\n if (this.menu && this.menu.isActive) {\r\n this.menu.closeMenu(); // Use the new public method\r\n }\r\n\r\n this.content.style.display = \"flex\";\r\n this.isOpen = true;\r\n this.verifyBar.classList.add(\"opend\");\r\n this.verifyBar.classList.remove(\"closed\");\r\n this.btn?.setAttribute(\"aria-expanded\", \"true\");\r\n }\r\n\r\n closePanel() {\r\n this.content.style.display = \"none\";\r\n this.isOpen = false;\r\n this.verifyBar.classList.add(\"closed\");\r\n this.verifyBar.classList.remove(\"opend\");\r\n this.btn?.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n\r\n destroy() {\r\n this.btn?.removeEventListener(\"click\", this.boundToggle);\r\n }\r\n}\r\n","export function escapeHtml(value = \"\") {\r\n return String(value)\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n","import { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nconst DEFAULT_VARIANT = \"info-color\";\r\n\r\nclass DGAAlertElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"variant\", \"title\", \"dismissible\"];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._bodyContent = null;\r\n this._boundDismiss = this._handleDismiss.bind(this);\r\n }\r\n\r\n connectedCallback() {\r\n if (this._bodyContent == null) {\r\n this._bodyContent = this.innerHTML.trim();\r\n }\r\n this._render();\r\n }\r\n\r\n disconnectedCallback() {\r\n this._closeButton?.removeEventListener(\"click\", this._boundDismiss);\r\n }\r\n\r\n attributeChangedCallback() {\r\n // On upgrade, attributeChangedCallback can fire before connectedCallback.\r\n // Don't render until the original slotted content has been captured,\r\n // otherwise _render() would overwrite it with an empty body.\r\n if (this._bodyContent == null) return;\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const variant = this.getAttribute(\"variant\") || DEFAULT_VARIANT;\r\n const title = this.getAttribute(\"title\") || \"\";\r\n const dismissible = this.hasAttribute(\"dismissible\");\r\n const body = this._bodyContent || \"\";\r\n\r\n this.classList.add(\"dga-alert\");\r\n this.setAttribute(\"data-variant\", variant);\r\n\r\n const titleHtml = title\r\n ? `<h4 class=\"dga-alert-title\">${escapeHtml(title)}</h4>`\r\n : \"\";\r\n\r\n const closeHtml = dismissible\r\n ? `<button class=\"dga-alert-close\" type=\"button\" data-alert-close aria-label=\"Dismiss alert\">×</button>`\r\n : \"\";\r\n\r\n this.innerHTML = `\r\n <span class=\"dga-alert-icon\" aria-hidden=\"true\"></span>\r\n <div class=\"dga-alert-content\">\r\n ${titleHtml}\r\n <div class=\"dga-alert-body\">${body}</div>\r\n </div>\r\n ${closeHtml}\r\n `;\r\n\r\n this._closeButton = this.querySelector(\"[data-alert-close]\");\r\n this._closeButton?.removeEventListener(\"click\", this._boundDismiss);\r\n this._closeButton?.addEventListener(\"click\", this._boundDismiss);\r\n }\r\n\r\n _handleDismiss() {\r\n this.style.display = \"none\";\r\n this.dispatchEvent(\r\n new CustomEvent(\"dga-alert-dismiss\", { bubbles: true, composed: true })\r\n );\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-alert\", DGAAlertElement);\r\n","import { AccordionController } from \"./shared/accordion-controller.js\";\r\nimport { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nclass DGAAccordionItemElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"title\", \"size\", \"open\"];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._bodyContent = null;\r\n }\r\n\r\n connectedCallback() {\r\n if (this._bodyContent == null) {\r\n this._bodyContent = this.innerHTML.trim();\r\n }\r\n this._render();\r\n }\r\n\r\n attributeChangedCallback() {\r\n // On upgrade, attributeChangedCallback can fire before connectedCallback.\r\n // Don't render until the original slotted content has been captured,\r\n // otherwise _render() would overwrite it with an empty body.\r\n if (this._bodyContent == null) return;\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const title = this.getAttribute(\"title\") || \"\";\r\n const size = this.getAttribute(\"size\") || \"md\";\r\n const isOpen = this.hasAttribute(\"open\");\r\n const body = this._bodyContent || \"\";\r\n\r\n this.innerHTML = `\r\n <div class=\"dga-acc-item${isOpen ? \" dga-acc-item--active\" : \"\"}\">\r\n <button class=\"dga-acc-header\" data-size=\"${escapeHtml(size)}\" aria-expanded=\"${isOpen ? \"true\" : \"false\"}\">\r\n <span>${escapeHtml(title)}</span>\r\n </button>\r\n <div class=\"dga-acc-content\">\r\n <div class=\"dga-acc-body\">${body}</div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\nclass DGAAccordionElement extends HTMLElement {\r\n constructor() {\r\n super();\r\n this._controller = null;\r\n }\r\n\r\n connectedCallback() {\r\n this.classList.add(\"dga-acc\");\r\n this._controller?.destroy();\r\n this._controller = new AccordionController(this);\r\n }\r\n\r\n disconnectedCallback() {\r\n this._controller?.destroy();\r\n this._controller = null;\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-accordion-item\", DGAAccordionItemElement);\r\ncustomElements.define(\"dga-accordion\", DGAAccordionElement);\r\n","import {\r\n COPY_ICON_SVG,\r\n copyText,\r\n markCopyButtonCopied,\r\n} from \"./shared/copy-text.js\";\r\nimport { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nclass DGACodeSnippetElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"code\", \"multiline\"];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._codeContent = null;\r\n this._boundCopy = this._handleCopy.bind(this);\r\n }\r\n\r\n connectedCallback() {\r\n if (this._codeContent == null) {\r\n this._codeContent =\r\n this.getAttribute(\"code\")?.trim() || this.textContent?.trim() || \"\";\r\n }\r\n this._render();\r\n }\r\n\r\n disconnectedCallback() {\r\n this._copyButton?.removeEventListener(\"click\", this._boundCopy);\r\n }\r\n\r\n attributeChangedCallback() {\r\n // On upgrade, attributeChangedCallback can fire before connectedCallback.\r\n // Don't render until the slotted code has been captured, otherwise\r\n // _render() would overwrite it (e.g. slotted code + a `multiline` attr).\r\n if (this._codeContent == null) return;\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const isMultiline = this.hasAttribute(\"multiline\");\r\n const code =\r\n this.getAttribute(\"code\")?.trim() || this._codeContent || \"\";\r\n\r\n if (isMultiline) {\r\n this.innerHTML = `\r\n <div class=\"dga-code-snippet-multiline\">\r\n <div class=\"dga-code-snippet-multiline__body\">\r\n <pre class=\"dga-code-snippet-multiline__code\"><code>${escapeHtml(code)}</code></pre>\r\n <button type=\"button\" class=\"dga-code-snippet-multiline__copy\" aria-label=\"Copy code\" data-copied=\"false\">\r\n ${COPY_ICON_SVG}\r\n </button>\r\n </div>\r\n </div>\r\n `;\r\n this._copyButton = this.querySelector(\".dga-code-snippet-multiline__copy\");\r\n } else {\r\n this.innerHTML = `\r\n <div class=\"dga-code-snippet-inline\">\r\n <div class=\"dga-code-snippet-inline__content\">${escapeHtml(code)}</div>\r\n <button type=\"button\" class=\"dga-code-snippet-inline__copy\" aria-label=\"Copy code\" data-copied=\"false\">\r\n ${COPY_ICON_SVG}\r\n </button>\r\n </div>\r\n `;\r\n this._copyButton = this.querySelector(\".dga-code-snippet-inline__copy\");\r\n }\r\n\r\n this._copyButton?.removeEventListener(\"click\", this._boundCopy);\r\n this._copyButton?.addEventListener(\"click\", this._boundCopy);\r\n }\r\n\r\n async _handleCopy() {\r\n const code = this.getAttribute(\"code\")?.trim() || this._codeContent || \"\";\r\n if (!code || !this._copyButton) return;\r\n\r\n const copied = await copyText(code);\r\n if (!copied) return;\r\n\r\n await markCopyButtonCopied(this._copyButton);\r\n this.dispatchEvent(\r\n new CustomEvent(\"dga-code-copy\", { bubbles: true, composed: true })\r\n );\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-code-snippet\", DGACodeSnippetElement);\r\n","import {\r\n parseChartDataAttribute,\r\n renderPieChart,\r\n} from \"./shared/pie-chart.js\";\r\n\r\nclass DGAPieChartElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"data\", \"hole\"];\r\n }\r\n\r\n connectedCallback() {\r\n this._render();\r\n }\r\n\r\n attributeChangedCallback() {\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const chartData = parseChartDataAttribute(this.getAttribute(\"data\"));\r\n const hole =\r\n this.hasAttribute(\"hole\") && this.getAttribute(\"hole\") !== \"false\";\r\n\r\n renderPieChart(this, chartData, { hole });\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-pie-chart\", DGAPieChartElement);\r\n","import { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nconst DEFAULT_ASSETS = {\r\n \"flag-src\": \"saudiFlag.svg\",\r\n \"link-icon-src\": \"link-icon.svg\",\r\n \"lock-icon-src\": \"square-lock-password.svg\",\r\n \"logo-src\": \"DGA-logo-icon.svg\",\r\n};\r\n\r\nconst STRINGS = {\r\n ar: {\r\n flagAlt: \"علم المملكة العربية السعودية\",\r\n banner: \"موقع حكومي رسمي تابع لحكومة المملكة العربية السعودية\",\r\n cta: \"كيف تتحقق\",\r\n domainHeading: \"روابط المواقع الالكترونية الرسمية السعودية تنتهي بـ\",\r\n domainBody:\r\n \"جميع روابط المواقع الرسمية التابعة للجهات الحكومية في المملكة العربية السعودية تنتهي بـ\",\r\n httpsHeading: \"المواقع الالكترونية الحكومية تستخدم بروتوكول\",\r\n httpsHeadingSuffix: \"للتشفير و الأمان.\",\r\n httpsBody:\r\n \"المواقع الالكترونية الآمنة في المملكة العربية السعودية تستخدم بروتوكول HTTPS للتشفير.\",\r\n logoAlt: \"شعار هيئة الحكومة الرقمية\",\r\n registeredWith: \"مسجل لدى هيئة الحكومة الرقمية برقم :\",\r\n },\r\n en: {\r\n flagAlt: \"Flag of the Kingdom of Saudi Arabia\",\r\n banner: \"This is an official government website of the Kingdom of Saudi Arabia\",\r\n cta: \"How to verify\",\r\n domainHeading: \"Official Saudi government website links end with\",\r\n domainBody:\r\n \"All official website links belonging to government entities in the Kingdom of Saudi Arabia end with\",\r\n httpsHeading: \"Government websites use the\",\r\n httpsHeadingSuffix: \"protocol for encryption and security.\",\r\n httpsBody:\r\n \"Secure websites in the Kingdom of Saudi Arabia use the HTTPS protocol for encryption.\",\r\n logoAlt: \"Digital Government Authority logo\",\r\n registeredWith: \"Registered with the Digital Government Authority under number:\",\r\n },\r\n};\r\n\r\nclass DGAVerifyBarElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\r\n \"registration-number\",\r\n \"registration-link\",\r\n \"domain\",\r\n \"assets-base\",\r\n \"flag-src\",\r\n \"link-icon-src\",\r\n \"lock-icon-src\",\r\n \"logo-src\",\r\n \"lang\",\r\n ];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this.isOpen = false;\r\n this._btn = null;\r\n this._content = null;\r\n this._wrapper = null;\r\n this._boundToggle = () => (this.isOpen ? this._close() : this._open());\r\n }\r\n\r\n connectedCallback() {\r\n this._render();\r\n }\r\n\r\n disconnectedCallback() {\r\n this._btn?.removeEventListener(\"click\", this._boundToggle);\r\n }\r\n\r\n attributeChangedCallback() {\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const lang = this.getAttribute(\"lang\") === \"en\" ? \"en\" : \"ar\";\r\n const dir = lang === \"en\" ? \"ltr\" : \"rtl\";\r\n const t = STRINGS[lang];\r\n\r\n const regNumber = escapeHtml(\r\n this.getAttribute(\"registration-number\") || \"20250105758\",\r\n );\r\n const regLinkRaw =\r\n this.getAttribute(\"registration-link\") ||\r\n \"https://raqmi.dga.gov.sa/platforms/platforms/9ebc5e60-9081-4653-bfb9-08dd2a2f8633/platform-license\";\r\n const regLink = escapeHtml(this._normalizeLink(regLinkRaw));\r\n const domain = escapeHtml(this.getAttribute(\"domain\") || \".edu.sa\");\r\n\r\n const flagSrc = escapeHtml(this._imageSrc(\"flag-src\"));\r\n const linkIconSrc = escapeHtml(this._imageSrc(\"link-icon-src\"));\r\n const lockIconSrc = escapeHtml(this._imageSrc(\"lock-icon-src\"));\r\n const logoSrc = escapeHtml(this._imageSrc(\"logo-src\"));\r\n\r\n this.innerHTML = `\r\n <div id=\"dga-verify-bar\" dir=\"${dir}\" class=\"dga-bg-gray-100 closed\">\r\n <div class=\"dga-container dga-py-2\">\r\n <div id=\"dga-verify-bar_bar\" class=\"dga-row\">\r\n <div class=\"dga-col\">\r\n <div class=\"dga-d-flex dga-align-items-center dga-gap-2\">\r\n <span><img src=\"${flagSrc}\" alt=\"${t.flagAlt}\" /></span>\r\n <span class=\"dga-text-sm\">${t.banner}</span>\r\n <span>\r\n <button id=\"dga-verifyBtn\" class=\"dga-btn dga-btn-subtle dga-text-primary-500\" data-verify-toggle aria-expanded=\"false\">\r\n ${t.cta}\r\n </button>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"dga-verify-bar_content\" class=\"dga-row dga-pt-10 dga-pb-8\" data-verify-content style=\"display: ${this.isOpen ? \"flex\" : \"none\"};\">\r\n <div class=\"dga-col-md-6 dga-pb-8\">\r\n <div class=\"dga-d-flex dga-gap-4\">\r\n <div><img src=\"${linkIconSrc}\" alt=\"\" /></div>\r\n <div class=\"dga-w-full dga-d-flex dga-flex-col dga-gap-2\">\r\n <h3 class=\"dga-text-xl dga-fw-bold\">\r\n ${t.domainHeading}\r\n <span class=\"dga-text-primary-500\">${domain}</span>\r\n </h3>\r\n <p>\r\n ${t.domainBody} ${domain}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dga-col-md-6 dga-pb-8\">\r\n <div class=\"dga-d-flex dga-gap-4\">\r\n <div><img src=\"${lockIconSrc}\" alt=\"\" /></div>\r\n <div class=\"dga-w-full dga-d-flex dga-flex-col dga-gap-2\">\r\n <h3 class=\"dga-text-xl dga-fw-bold\">\r\n ${t.httpsHeading}\r\n <span class=\"dga-text-primary-500\">HTTPS</span> ${t.httpsHeadingSuffix}\r\n </h3>\r\n <p>\r\n ${t.httpsBody}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dga-col-12\">\r\n <div class=\"dga-d-flex dga-align-items-center dga-gap-3 dga-bg-white dga-text-md dga-rounded-md dga-py-2 dga-px-7\">\r\n <img src=\"${logoSrc}\" alt=\"${t.logoAlt}\" />\r\n ${t.registeredWith}\r\n <a href=\"${regLink}\" class=\"dga-link\">${regNumber}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n\r\n this._btn?.removeEventListener(\"click\", this._boundToggle);\r\n this._wrapper = this.querySelector(\"#dga-verify-bar\");\r\n this._btn = this.querySelector(\"[data-verify-toggle]\");\r\n this._content = this.querySelector(\"[data-verify-content]\");\r\n this._btn?.addEventListener(\"click\", this._boundToggle);\r\n }\r\n\r\n _imageSrc(attributeName) {\r\n const override = this.getAttribute(attributeName);\r\n if (override) return override;\r\n\r\n const defaultFile = DEFAULT_ASSETS[attributeName];\r\n const base = this.getAttribute(\"assets-base\") || \"/\";\r\n const normalizedBase = base.endsWith(\"/\") ? base : `${base}/`;\r\n\r\n return `${normalizedBase}${defaultFile}`;\r\n }\r\n\r\n _open() {\r\n this._content.style.display = \"flex\";\r\n this.isOpen = true;\r\n this._btn?.setAttribute(\"aria-expanded\", \"true\");\r\n this._wrapper?.classList.replace(\"closed\", \"opend\");\r\n }\r\n\r\n _close() {\r\n this._content.style.display = \"none\";\r\n this.isOpen = false;\r\n this._btn?.setAttribute(\"aria-expanded\", \"false\");\r\n this._wrapper?.classList.replace(\"opend\", \"closed\");\r\n }\r\n\r\n _normalizeLink(value) {\r\n try {\r\n return new URL(value, window.location.href).href;\r\n } catch {\r\n return \"#\";\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-verify-bar\", DGAVerifyBarElement);\r\n","import \"./dga-alert.js\";\r\nimport \"./dga-accordion.js\";\r\nimport \"./dga-code-snippet.js\";\r\nimport \"./dga-pie-chart.js\";\r\nimport \"./dga-verify-bar.js\";\r\n\r\nexport const DGA_WEB_COMPONENTS_REGISTERED = true;\r\n"],"names":["AccordionController","root","event","header","item","DGAAccordion","element","DGAAlert","closeButton","alert","resolveChartColor","color","generateChartGradient","data","segment","generateChartLabelsHtml","parseChartDataAttribute","value","parsed","renderPieChart","hole","DGAChart","copyText","text","textarea","success","COPY_ICON_SVG","markCopyButtonCopied","copyButton","resetMs","previousLabel","DGACodeSnippet","inlineSnippet","multilineSnippet","textToCopy","DGAMenuDropdown","options","e","menuItem","listItem","isActive","isOpen","width","DGAVerifyBar","escapeHtml","DEFAULT_VARIANT","DGAAlertElement","variant","title","dismissible","body","titleHtml","closeHtml","DGAAccordionItemElement","size","DGAAccordionElement","DGACodeSnippetElement","isMultiline","code","DGAPieChartElement","chartData","DEFAULT_ASSETS","STRINGS","DGAVerifyBarElement","lang","dir","t","regNumber","regLinkRaw","regLink","domain","flagSrc","linkIconSrc","lockIconSrc","logoSrc","attributeName","override","defaultFile","base","DGA_WEB_COMPONENTS_REGISTERED"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/scripts/shared/accordion-controller.js","../src/scripts/accordion.js","../src/scripts/alert.js","../src/scripts/shared/pie-chart.js","../src/scripts/chart.js","../src/scripts/shared/escape-html.js","../src/scripts/shared/bar-chart.js","../src/scripts/chart-bar.js","../src/scripts/shared/line-chart.js","../src/scripts/chart-line.js","../src/scripts/shared/copy-text.js","../src/scripts/codeSnippet.js","../src/scripts/dropdownMenu.js","../src/scripts/verifyBar.js","../src/scripts/dga-alert.js","../src/scripts/dga-accordion.js","../src/scripts/dga-code-snippet.js","../src/scripts/dga-pie-chart.js","../src/scripts/dga-bar-chart.js","../src/scripts/dga-line-chart.js","../src/scripts/dga-verify-bar.js","../src/scripts/register-web-components.js"],"sourcesContent":["export class AccordionController {\r\n constructor(root) {\r\n this.root = root;\r\n this.handleClick = this.handleClick.bind(this);\r\n this.handleKeydown = this.handleKeydown.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.root.addEventListener(\"click\", this.handleClick);\r\n this.root.addEventListener(\"keydown\", this.handleKeydown);\r\n }\r\n\r\n handleClick(event) {\r\n const header = event.target.closest(\".dga-acc-header\");\r\n if (header && this.root.contains(header)) {\r\n this.toggle(header);\r\n }\r\n }\r\n\r\n handleKeydown(event) {\r\n const header = event.target.closest(\".dga-acc-header\");\r\n if (!header || !this.root.contains(header)) return;\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n this.toggle(header);\r\n }\r\n }\r\n\r\n toggle(header) {\r\n const item = header.parentElement;\r\n if (!item) return;\r\n\r\n if (item.classList.contains(\"dga-acc-item--active\")) {\r\n this.close(item);\r\n } else {\r\n this.open(item);\r\n }\r\n }\r\n\r\n open(item) {\r\n item.classList.add(\"dga-acc-item--active\");\r\n item.querySelector(\".dga-acc-header\")?.setAttribute(\"aria-expanded\", \"true\");\r\n }\r\n\r\n close(item) {\r\n item.classList.remove(\"dga-acc-item--active\");\r\n item.querySelector(\".dga-acc-header\")?.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n\r\n closeAll() {\r\n this.root.querySelectorAll(\".dga-acc-item\").forEach((item) => {\r\n this.close(item);\r\n });\r\n }\r\n\r\n destroy() {\r\n this.root.removeEventListener(\"click\", this.handleClick);\r\n this.root.removeEventListener(\"keydown\", this.handleKeydown);\r\n }\r\n}\r\n","import { AccordionController } from \"./shared/accordion-controller.js\";\r\n\r\nexport default class DGAAccordion {\r\n constructor(element) {\r\n this.accordion = element;\r\n this.controller = new AccordionController(element);\r\n }\r\n\r\n toggle(header) {\r\n this.controller.toggle(header);\r\n }\r\n\r\n open(item) {\r\n this.controller.open(item);\r\n }\r\n\r\n close(item) {\r\n this.controller.close(item);\r\n }\r\n\r\n closeAll() {\r\n this.controller.closeAll();\r\n }\r\n\r\n destroy() {\r\n this.controller.destroy();\r\n }\r\n}\r\n","export default class DGAAlert {\r\n constructor(root = document) {\r\n this.root = root;\r\n this.handleCloseClick = this.handleCloseClick.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.root.addEventListener(\"click\", this.handleCloseClick);\r\n }\r\n\r\n handleCloseClick(event) {\r\n const closeButton = event.target.closest(\"[data-alert-close]\");\r\n if (!closeButton) {\r\n return;\r\n }\r\n\r\n const alert = closeButton.closest(\".dga-alert\");\r\n if (alert) {\r\n alert.style.display = \"none\";\r\n }\r\n }\r\n\r\n destroy() {\r\n this.root.removeEventListener(\"click\", this.handleCloseClick);\r\n }\r\n}\r\n","export function resolveChartColor(color) {\r\n if (color.startsWith(\"#\") || color.startsWith(\"var(\")) {\r\n return color;\r\n }\r\n return `var(--${color})`;\r\n}\r\n\r\n// Default color palettes, built from the package's existing --dga-* tokens.\r\n// Figma \"Style Color\" property: \"brand\" (monochromatic Saudi-green ramp) and\r\n// \"color\" (categorical multi-hue sequence). Tokens carry the `dga-` prefix so\r\n// resolveChartColor() maps them to the real `--dga-*` custom properties.\r\nconst CHART_BRAND_RAMP = [\r\n \"dga-primary-700\",\r\n \"dga-primary-600\",\r\n \"dga-primary-500\",\r\n \"dga-primary-400\",\r\n \"dga-primary-300\",\r\n \"dga-primary-200\",\r\n];\r\n\r\nconst CHART_COLOR_SEQUENCE = [\r\n \"dga-gold-500\",\r\n \"dga-primary-300\",\r\n \"dga-warning-500\",\r\n \"dga-info-500\",\r\n \"dga-lavender-500\",\r\n \"dga-error-500\",\r\n];\r\n\r\n// Brand ramp: spread N shades evenly across the ramp (1 = the middle shade),\r\n// so few segments still span dark → light rather than clustering.\r\nfunction brandPalette(count) {\r\n if (count <= 0) return [];\r\n const ramp = CHART_BRAND_RAMP;\r\n if (count === 1) return [ramp[Math.floor((ramp.length - 1) / 2)]];\r\n return Array.from({ length: count }, (_, i) =>\r\n ramp[Math.round((i * (ramp.length - 1)) / (count - 1))]\r\n );\r\n}\r\n\r\n// Categorical sequence: take the fixed order, cycling if more than defined.\r\nfunction colorPalette(count) {\r\n return Array.from(\r\n { length: Math.max(count, 0) },\r\n (_, i) => CHART_COLOR_SEQUENCE[i % CHART_COLOR_SEQUENCE.length]\r\n );\r\n}\r\n\r\nexport function resolvePalette(styleColor, count) {\r\n return styleColor === \"color\" ? colorPalette(count) : brandPalette(count);\r\n}\r\n\r\nexport function generateChartGradient(data = []) {\r\n const gradientParts = data.map(\r\n (segment) =>\r\n `${resolveChartColor(segment.color)} ${segment.from} ${segment.to}`\r\n );\r\n return `conic-gradient(${gradientParts.join(\", \")})`;\r\n}\r\n\r\nexport function generateChartLabelsHtml(data = []) {\r\n const labels = data\r\n .map(\r\n (segment) =>\r\n `<span class=\"dga-pie-chart__label\"><span class=\"dga-pie-chart__circle\" style=\"background-color: ${resolveChartColor(\r\n segment.color\r\n )}\"></span>${segment.label}</span>`\r\n )\r\n .join(\"\");\r\n\r\n return `<div class=\"dga-pie-chart__labels\">${labels}</div>`;\r\n}\r\n\r\nexport function parseChartDataAttribute(value) {\r\n if (!value) return [];\r\n\r\n try {\r\n const parsed = JSON.parse(value);\r\n return Array.isArray(parsed) ? parsed : [];\r\n } catch {\r\n console.warn(\"dga-pie-chart: invalid data attribute JSON\");\r\n return [];\r\n }\r\n}\r\n\r\nexport function renderPieChart(\r\n element,\r\n data = [],\r\n { hole = false, styleColor = \"brand\" } = {}\r\n) {\r\n if (!element) return;\r\n\r\n // Auto-assign colors from the theme palette; an explicit segment `color`\r\n // always wins, so existing data keeps working unchanged.\r\n const style = styleColor === \"color\" ? \"color\" : \"brand\";\r\n const palette = resolvePalette(style, data.length);\r\n const resolvedData = data.map((segment, i) => ({\r\n ...segment,\r\n color: segment.color || palette[i] || \"dga-primary-500\",\r\n }));\r\n\r\n element.classList.add(\"dga-pie-chart\");\r\n element.setAttribute(\"data-hole\", hole ? \"true\" : \"false\");\r\n element.setAttribute(\"data-style-color\", style);\r\n // The gradient now lives on an inner disc so the host can be a normal-flow\r\n // column (disc + labels), reserving its own space instead of relying on\r\n // absolutely-positioned labels.\r\n element.style.background = \"\";\r\n element.innerHTML = `<span class=\"dga-pie-chart__disc\" style=\"background: ${generateChartGradient(\r\n resolvedData\r\n )}\"></span>${generateChartLabelsHtml(resolvedData)}`;\r\n}\r\n","import {\r\n generateChartGradient,\r\n generateChartLabelsHtml,\r\n renderPieChart,\r\n} from \"./shared/pie-chart.js\";\r\n\r\nexport default class DGAChart {\r\n constructor(element, data = []) {\r\n this.chart = element;\r\n this.data = data;\r\n this.init();\r\n }\r\n\r\n init() {\r\n const hole = this.chart.getAttribute(\"data-hole\") === \"true\";\r\n const styleColor =\r\n this.chart.getAttribute(\"data-style-color\") === \"color\"\r\n ? \"color\"\r\n : \"brand\";\r\n renderPieChart(this.chart, this.data, { hole, styleColor });\r\n }\r\n\r\n generateGradient() {\r\n return generateChartGradient(this.data);\r\n }\r\n\r\n generateLabels() {\r\n return generateChartLabelsHtml(this.data);\r\n }\r\n}\r\n","export function escapeHtml(value = \"\") {\r\n return String(value)\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n","import { resolveChartColor } from \"./pie-chart.js\";\nimport { escapeHtml } from \"./escape-html.js\";\n\n// Default series palettes for the bar chart, from existing --dga-* tokens.\n// \"brand\" (default) matches the DGA Figma sample: greens + a light gray.\nconst BAR_BRAND_SEQUENCE = [\n \"dga-primary-700\",\n \"dga-primary-400\",\n \"dga-gray-200\",\n \"dga-primary-500\",\n \"dga-primary-300\",\n \"dga-gray-400\",\n];\n\nconst BAR_COLOR_SEQUENCE = [\n \"dga-gold-500\",\n \"dga-primary-300\",\n \"dga-warning-500\",\n \"dga-info-500\",\n \"dga-lavender-500\",\n \"dga-error-500\",\n];\n\nexport function resolveBarPalette(styleColor, count) {\n const seq =\n styleColor === \"color\" ? BAR_COLOR_SEQUENCE : BAR_BRAND_SEQUENCE;\n return Array.from(\n { length: Math.max(count, 0) },\n (_, i) => seq[i % seq.length]\n );\n}\n\n// Round an axis maximum up to a \"nice\" value and pick a matching tick step,\n// targeting roughly `targetTicks` intervals.\nexport function niceScale(max, targetTicks = 8) {\n const safeMax = max > 0 ? max : 1;\n const rawStep = safeMax / targetTicks;\n const mag = Math.pow(10, Math.floor(Math.log10(rawStep)));\n const norm = rawStep / mag;\n let step;\n if (norm <= 1) step = 1;\n else if (norm <= 2) step = 2;\n else if (norm <= 2.5) step = 2.5;\n else if (norm <= 5) step = 5;\n else step = 10;\n step *= mag;\n const niceMax = Math.ceil(safeMax / step) * step;\n return { step, niceMax };\n}\n\nexport function parseBarConfig(value) {\n if (!value) return { categories: [], series: [] };\n try {\n const parsed = JSON.parse(value);\n return {\n categories: Array.isArray(parsed.categories) ? parsed.categories : [],\n series: Array.isArray(parsed.series) ? parsed.series : [],\n };\n } catch {\n console.warn(\"dga-bar-chart: invalid data attribute JSON\");\n return { categories: [], series: [] };\n }\n}\n\nexport function renderBarChart(element, config = {}) {\n if (!element) return;\n\n const {\n categories = [],\n series = [],\n styleColor = \"brand\",\n max = null,\n showLegend = true,\n showXLabel = true,\n showYLabel = true,\n xLabel = \"\",\n yLabel = \"\",\n } = config;\n\n const style = styleColor === \"color\" ? \"color\" : \"brand\";\n const palette = resolveBarPalette(style, series.length);\n const colors = series.map((s, i) =>\n resolveChartColor(s.color || palette[i] || \"dga-primary-500\")\n );\n\n const totals = categories.map((_, ci) =>\n series.reduce((sum, s) => sum + (Number(s.values?.[ci]) || 0), 0)\n );\n const dataMax = Math.max(1, ...totals);\n const { step, niceMax } = niceScale(Number(max) > 0 ? Number(max) : dataMax);\n\n const ticks = [];\n for (let t = niceMax; t >= 0; t -= step) ticks.push(Math.round(t));\n\n const legendHtml = showLegend\n ? `<div class=\"dga-bar-chart__legend\">${series\n .map(\n (s, i) =>\n `<span class=\"dga-bar-chart__legend-item\"><span class=\"dga-bar-chart__legend-dot\" style=\"background:${colors[i]}\"></span>${escapeHtml(\n s.label ?? \"\"\n )}</span>`\n )\n .join(\"\")}</div>`\n : \"\";\n\n const yAxisHtml = `<div class=\"dga-bar-chart__y-axis\">${ticks\n .map((t) => `<span class=\"dga-bar-chart__y-tick\">${t}</span>`)\n .join(\"\")}</div>`;\n\n const gridlinesHtml = `<div class=\"dga-bar-chart__gridlines\">${ticks\n .map(() => `<span class=\"dga-bar-chart__gridline\"></span>`)\n .join(\"\")}</div>`;\n\n const barsHtml = `<div class=\"dga-bar-chart__bars\">${categories\n .map((cat, ci) => {\n const total = totals[ci];\n const barHeight = (total / niceMax) * 100;\n const segs = series\n .map((s, si) => {\n const v = Number(s.values?.[ci]) || 0;\n const h = total > 0 ? (v / total) * 100 : 0;\n return `<span class=\"dga-bar-chart__seg\" style=\"height:${h}%;background:${colors[si]}\"></span>`;\n })\n .join(\"\");\n return `<div class=\"dga-bar-chart__col\"><div class=\"dga-bar-chart__bar\" style=\"height:${barHeight}%\">${segs}</div></div>`;\n })\n .join(\"\")}</div>`;\n\n const xAxisHtml = `<div class=\"dga-bar-chart__x-axis\">${categories\n .map((c) => `<span class=\"dga-bar-chart__x-tick\">${escapeHtml(c)}</span>`)\n .join(\"\")}</div>`;\n\n const yTitleHtml =\n showYLabel && yLabel\n ? `<div class=\"dga-bar-chart__axis-title dga-bar-chart__axis-title--y\">${escapeHtml(\n yLabel\n )}</div>`\n : \"\";\n\n const xTitleHtml =\n showXLabel && xLabel\n ? `<div class=\"dga-bar-chart__axis-title dga-bar-chart__axis-title--x\">${escapeHtml(\n xLabel\n )}</div>`\n : \"\";\n\n element.classList.add(\"dga-bar-chart\");\n element.setAttribute(\"data-style-color\", style);\n element.innerHTML = `\n ${legendHtml}\n <div class=\"dga-bar-chart__frame\">\n ${yTitleHtml}\n <div class=\"dga-bar-chart__plot-wrap\">\n ${yAxisHtml}\n <div class=\"dga-bar-chart__plot\">\n ${gridlinesHtml}\n ${barsHtml}\n </div>\n <span class=\"dga-bar-chart__spacer\"></span>\n ${xAxisHtml}\n </div>\n ${xTitleHtml}\n </div>\n `;\n}\n","import { renderBarChart } from \"./shared/bar-chart.js\";\n\nexport default class DGABarChart {\n constructor(element, config = {}) {\n this.chart = element;\n this.config = config;\n this.render();\n }\n\n render() {\n renderBarChart(this.chart, this.config);\n }\n\n update(config = {}) {\n this.config = { ...this.config, ...config };\n this.render();\n }\n}\n","import { resolveChartColor } from \"./pie-chart.js\";\nimport { niceScale, parseBarConfig } from \"./bar-chart.js\";\nimport { escapeHtml } from \"./escape-html.js\";\n\nexport { parseBarConfig as parseLineConfig };\n\nconst LINE_BRAND_SEQUENCE = [\n \"dga-primary-700\",\n \"dga-primary-500\",\n \"dga-primary-300\",\n \"dga-primary-600\",\n \"dga-primary-400\",\n \"dga-primary-200\",\n];\n\nconst LINE_COLOR_SEQUENCE = [\n \"dga-gold-500\",\n \"dga-primary-300\",\n \"dga-warning-500\",\n \"dga-info-500\",\n \"dga-lavender-500\",\n \"dga-error-500\",\n];\n\nexport function resolveLinePalette(styleColor, count) {\n const seq =\n styleColor === \"color\" ? LINE_COLOR_SEQUENCE : LINE_BRAND_SEQUENCE;\n return Array.from(\n { length: Math.max(count, 0) },\n (_, i) => seq[i % seq.length]\n );\n}\n\nexport function renderLineChart(element, config = {}) {\n if (!element) return;\n\n const {\n categories = [],\n series = [],\n styleColor = \"brand\",\n max = null,\n showLegend = true,\n showXLabel = true,\n showYLabel = true,\n showContent = true,\n xLabel = \"\",\n yLabel = \"\",\n rtl = false,\n } = config;\n\n const style = styleColor === \"color\" ? \"color\" : \"brand\";\n const palette = resolveLinePalette(style, series.length);\n const colors = series.map((s, i) =>\n resolveChartColor(s.color || palette[i] || \"dga-primary-500\")\n );\n\n // Independent (non-stacked) lines: axis max spans the largest single value.\n let dataMax = 1;\n for (const s of series) {\n for (const v of s.values || []) dataMax = Math.max(dataMax, Number(v) || 0);\n }\n const { step, niceMax } = niceScale(Number(max) > 0 ? Number(max) : dataMax);\n\n const ticks = [];\n for (let t = 0; t <= niceMax; t += step) ticks.push(Math.round(t));\n\n // SVG geometry (viewBox units; scales responsively via width:100%).\n const W = 600;\n const H = 300;\n const padL = rtl ? 16 : 44;\n const padR = rtl ? 44 : 16;\n const padT = 12;\n const padB = 28;\n const xLeft = padL;\n const xRight = W - padR;\n const yTop = padT;\n const yBottom = H - padB;\n const plotW = xRight - xLeft;\n const plotH = yBottom - yTop;\n const n = categories.length;\n\n const xAt = (i) => {\n const frac = n <= 1 ? 0.5 : i / (n - 1);\n return rtl ? xRight - frac * plotW : xLeft + frac * plotW;\n };\n const yAt = (v) => yBottom - (Math.max(0, Number(v) || 0) / niceMax) * plotH;\n\n const gridHtml = ticks\n .map((t) => {\n const y = yBottom - (t / niceMax) * plotH;\n const lx = rtl ? xRight + 6 : xLeft - 6;\n const anchor = rtl ? \"start\" : \"end\";\n return (\n `<line x1=\"${xLeft}\" y1=\"${y.toFixed(1)}\" x2=\"${xRight}\" y2=\"${y.toFixed(\n 1\n )}\" class=\"dga-line-chart__grid\"/>` +\n `<text x=\"${lx}\" y=\"${(y + 4).toFixed(\n 1\n )}\" text-anchor=\"${anchor}\" class=\"dga-line-chart__tick\">${t}</text>`\n );\n })\n .join(\"\");\n\n const xLabelsHtml = categories\n .map(\n (c, i) =>\n `<text x=\"${xAt(i).toFixed(1)}\" y=\"${(yBottom + 18).toFixed(\n 1\n )}\" text-anchor=\"middle\" class=\"dga-line-chart__xtick\">${escapeHtml(\n c\n )}</text>`\n )\n .join(\"\");\n\n const seriesHtml = series\n .map((s, si) => {\n const pts = categories.map((_, i) => [xAt(i), yAt(s.values?.[i])]);\n if (pts.length === 0) return \"\";\n const line = pts\n .map((p, idx) => `${idx === 0 ? \"M\" : \"L\"}${p[0].toFixed(1)} ${p[1].toFixed(1)}`)\n .join(\" \");\n let area = \"\";\n if (showContent) {\n const first = pts[0];\n const last = pts[pts.length - 1];\n area = `<path d=\"${line} L${last[0].toFixed(1)} ${yBottom} L${first[0].toFixed(\n 1\n )} ${yBottom} Z\" style=\"fill:${colors[si]};fill-opacity:.12;stroke:none\"/>`;\n }\n const stroke = `<path d=\"${line}\" style=\"fill:none;stroke:${colors[si]};stroke-width:2;stroke-linejoin:round;stroke-linecap:round\"/>`;\n return area + stroke;\n })\n .join(\"\");\n\n const svg = `<svg viewBox=\"0 0 ${W} ${H}\" class=\"dga-line-chart__svg\" preserveAspectRatio=\"xMidYMid meet\" role=\"img\">${gridHtml}${seriesHtml}${xLabelsHtml}</svg>`;\n\n const legendHtml = showLegend\n ? `<div class=\"dga-line-chart__legend\">${series\n .map(\n (s, i) =>\n `<span class=\"dga-line-chart__legend-item\"><span class=\"dga-line-chart__legend-dot\" style=\"background:${colors[i]}\"></span>${escapeHtml(\n s.label ?? \"\"\n )}</span>`\n )\n .join(\"\")}</div>`\n : \"\";\n\n const yTitleHtml =\n showYLabel && yLabel\n ? `<div class=\"dga-line-chart__axis-title dga-line-chart__axis-title--y\">${escapeHtml(\n yLabel\n )}</div>`\n : \"\";\n\n const xTitleHtml =\n showXLabel && xLabel\n ? `<div class=\"dga-line-chart__axis-title dga-line-chart__axis-title--x\">${escapeHtml(\n xLabel\n )}</div>`\n : \"\";\n\n element.classList.add(\"dga-line-chart\");\n element.setAttribute(\"data-style-color\", style);\n element.innerHTML = `\n ${legendHtml}\n <div class=\"dga-line-chart__frame\">\n ${yTitleHtml}\n <div class=\"dga-line-chart__plot\">${svg}</div>\n ${xTitleHtml}\n </div>\n `;\n}\n","import { renderLineChart } from \"./shared/line-chart.js\";\n\nexport default class DGALineChart {\n constructor(element, config = {}) {\n this.chart = element;\n this.config = config;\n this.render();\n }\n\n render() {\n let rtl = false;\n try {\n rtl = getComputedStyle(this.chart).direction === \"rtl\";\n } catch {\n /* detached */\n }\n renderLineChart(this.chart, { rtl, ...this.config });\n }\n\n update(config = {}) {\n this.config = { ...this.config, ...config };\n this.render();\n }\n}\n","export async function copyText(text) {\r\n try {\r\n if (navigator.clipboard?.writeText) {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n }\r\n } catch (_error) {\r\n // Fallback below for restricted clipboard environments.\r\n }\r\n\r\n const textarea = document.createElement(\"textarea\");\r\n textarea.value = text;\r\n textarea.setAttribute(\"readonly\", \"\");\r\n textarea.style.position = \"absolute\";\r\n textarea.style.left = \"-9999px\";\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n const success = document.execCommand(\"copy\");\r\n document.body.removeChild(textarea);\r\n return success;\r\n}\r\n\r\nexport const COPY_ICON_SVG = `<svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\" stroke-width=\"1.75\"></rect>\r\n <path d=\"M6 15H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v1\" stroke-width=\"1.75\" stroke-linecap=\"round\"></path>\r\n</svg>`;\r\n\r\nexport async function markCopyButtonCopied(copyButton, resetMs = 1200) {\r\n const previousLabel = copyButton.getAttribute(\"aria-label\") || \"Copy code\";\r\n copyButton.setAttribute(\"aria-label\", \"Copied\");\r\n copyButton.setAttribute(\"data-copied\", \"true\");\r\n\r\n window.setTimeout(() => {\r\n copyButton.setAttribute(\"aria-label\", previousLabel);\r\n copyButton.setAttribute(\"data-copied\", \"false\");\r\n }, resetMs);\r\n}\r\n","import { copyText, markCopyButtonCopied } from \"./shared/copy-text.js\";\r\n\r\nexport default class DGACodeSnippet {\r\n constructor(root = document) {\r\n this.root = root;\r\n this.handleCopyClick = this.handleCopyClick.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.root.addEventListener(\"click\", this.handleCopyClick);\r\n }\r\n\r\n async handleCopyClick(event) {\r\n const copyButton = event.target.closest(\r\n \".dga-code-snippet-inline__copy, .dga-code-snippet-multiline__copy\"\r\n );\r\n if (!copyButton) return;\r\n\r\n const inlineSnippet = copyButton.closest(\".dga-code-snippet-inline\");\r\n const multilineSnippet = copyButton.closest(\".dga-code-snippet-multiline\");\r\n\r\n let textToCopy = \"\";\r\n if (inlineSnippet) {\r\n const codeElement = inlineSnippet.querySelector(\r\n \".dga-code-snippet-inline__content\"\r\n );\r\n textToCopy = codeElement?.textContent?.trim() || \"\";\r\n } else if (multilineSnippet) {\r\n const codeElement = multilineSnippet.querySelector(\r\n \".dga-code-snippet-multiline__code code\"\r\n );\r\n textToCopy = codeElement?.textContent || \"\";\r\n }\r\n\r\n if (!textToCopy) return;\r\n\r\n const copied = await copyText(textToCopy);\r\n if (!copied) return;\r\n\r\n await markCopyButtonCopied(copyButton);\r\n }\r\n\r\n destroy() {\r\n this.root.removeEventListener(\"click\", this.handleCopyClick);\r\n }\r\n}\r\n","class DGAMenuDropdown {\r\n constructor(options = {}) {\r\n this.navbar = options.navbar || document.querySelector(\".dga-navbar\");\r\n this.verifyBar = options.verifyBar || null;\r\n\r\n if (!this.navbar) {\r\n console.warn(\"DGA Navbar elements not found\");\r\n return;\r\n }\r\n\r\n this.navbarTop = this.navbar.getBoundingClientRect().top + window.scrollY;\r\n this.navbarHeight = this.navbar.getBoundingClientRect().height;\r\n this.menu = this.navbar.querySelector(\".dga-menu\");\r\n this.toggler = this.navbar.querySelector(\".dga-navbar-toggler\");\r\n this.menuItems = this.navbar.querySelectorAll(\".dga-menu-item.dga-has-dropdown\");\r\n\r\n if (!this.menu) {\r\n console.warn(\"DGA Menu element not found\");\r\n return;\r\n }\r\n\r\n this.boundToggleDropdown = (e) => this.toggleDropdown(e);\r\n this.boundToggleMobileMenu = (e) => this.toggleMobileMenu(e);\r\n this.boundCloseAllDropdowns = (e) => this.closeAllDropdowns(e);\r\n this.boundHandleResize = () => this.handleResize();\r\n this.boundHandleKeyboard = (e) => this.handleKeyboard(e);\r\n\r\n this.init();\r\n }\r\n\r\n get isActive() {\r\n return this.isMobileMenuOpen() || this.isNormalDropdownOpen();\r\n }\r\n\r\n init() {\r\n this.handleResize();\r\n this.bindEvents();\r\n }\r\n\r\n bindEvents() {\r\n // Dropdown menu items\r\n this.menuItems.forEach((item) => {\r\n item.addEventListener(\"click\", this.boundToggleDropdown);\r\n });\r\n\r\n // Mobile menu toggler\r\n this.toggler?.addEventListener(\"click\", this.boundToggleMobileMenu);\r\n\r\n // Close dropdowns when clicking outside\r\n document.addEventListener(\"click\", this.boundCloseAllDropdowns);\r\n\r\n // Handle window resize\r\n window.addEventListener(\"resize\", this.boundHandleResize);\r\n\r\n // Keyboard accessibility\r\n this.menuItems.forEach((item) => {\r\n item.addEventListener(\"keydown\", this.boundHandleKeyboard);\r\n });\r\n }\r\n\r\n toggleDropdown(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n // Close verify bar when opening menu\r\n if (this.verifyBar && this.verifyBar.isOpen) {\r\n this.verifyBar.closePanel();\r\n }\r\n\r\n const menuItem = e.currentTarget;\r\n const listItem = menuItem.parentElement;\r\n const isActive = listItem.classList.contains(\"active\");\r\n\r\n // Close all other dropdowns\r\n this.closeAllDropdowns();\r\n\r\n // Toggle current dropdown\r\n if (!isActive) {\r\n listItem.classList.add(\"active\");\r\n menuItem.classList.add(\"dga-menu-item-selected\");\r\n menuItem.setAttribute(\"aria-expanded\", \"true\");\r\n\r\n listItem.querySelector(\".dga-dropdown\").style.top = `${this.navbarHeight + this.navbarTop\r\n }px`;\r\n }\r\n }\r\n\r\n toggleMobileMenu(e) {\r\n e.stopPropagation();\r\n\r\n // Close verify bar when opening menu\r\n if (this.verifyBar && this.verifyBar.isOpen) {\r\n this.verifyBar.closePanel();\r\n }\r\n\r\n this.menu.classList.toggle(\"dga-menu-open\");\r\n if (this.menu.classList.contains(\"dga-menu-open\")) {\r\n document.body.classList.add(\"no-scroll\");\r\n this.menu.style.height = `calc(100vh - ${this.navbarHeight}px - ${this.navbarTop}px)`;\r\n } else {\r\n document.body.classList.remove(\"no-scroll\");\r\n this.menu.style.height = `0px`;\r\n }\r\n this.menu.style.top = `${this.navbarTop + this.navbarHeight}px`;\r\n\r\n const isOpen = this.menu.classList.contains(\"dga-menu-open\");\r\n this.toggler.setAttribute(\"aria-expanded\", isOpen);\r\n this.toggler.setAttribute(\r\n \"aria-label\",\r\n isOpen ? \"Close menu\" : \"Open menu\"\r\n );\r\n }\r\n\r\n // Public method to close menu programmatically (without event)\r\n closeMenu() {\r\n // Close all dropdowns\r\n this.closeAllDropdowns();\r\n\r\n // Close mobile menu if open\r\n if (this.isMobileMenuOpen()) {\r\n this.menu.classList.remove(\"dga-menu-open\");\r\n document.body.classList.remove(\"no-scroll\");\r\n this.menu.style.height = `0px`;\r\n this.toggler.setAttribute(\"aria-expanded\", \"false\");\r\n this.toggler.setAttribute(\"aria-label\", \"Open menu\");\r\n }\r\n }\r\n\r\n closeAllDropdowns(e) {\r\n // Don't close if clicking inside dropdown content\r\n if (e && e.target.closest(\".dga-dropdown-content\")) {\r\n return;\r\n }\r\n\r\n const activeItems = this.navbar.querySelectorAll(\".dga-menu > li.active\");\r\n activeItems.forEach((item) => {\r\n item.classList.remove(\"active\");\r\n const menuItem = item.querySelector(\".dga-menu-item\");\r\n menuItem?.classList.remove(\"dga-menu-item-selected\");\r\n menuItem?.setAttribute(\"aria-expanded\", \"false\");\r\n });\r\n }\r\n\r\n handleKeyboard(e) {\r\n // Close dropdown on Escape\r\n if (e.key === \"Escape\") {\r\n this.closeAllDropdowns();\r\n e.currentTarget.focus();\r\n }\r\n\r\n // Toggle on Enter or Space\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n this.toggleDropdown(e);\r\n }\r\n }\r\n\r\n handleResize() {\r\n const width = window.innerWidth;\r\n\r\n // Remove size classes\r\n document.body.classList.remove(\r\n \"size_desktop\",\r\n \"size_tablet\",\r\n \"size_mobile\"\r\n );\r\n\r\n // Add appropriate size class\r\n if (width > 769) {\r\n document.body.classList.add(\"size_desktop\");\r\n this.closeAllDropdowns();\r\n this.menu.classList.remove(\"dga-menu-open\");\r\n document.body.classList.remove(\"no-scroll\");\r\n } else if (width <= 769 && width > 375) {\r\n document.body.classList.add(\"size_tablet\");\r\n } else {\r\n document.body.classList.add(\"size_mobile\");\r\n }\r\n }\r\n\r\n // Public method to destroy the component\r\n destroy() {\r\n this.menuItems.forEach((item) => {\r\n item.removeEventListener(\"click\", this.boundToggleDropdown);\r\n item.removeEventListener(\"keydown\", this.boundHandleKeyboard);\r\n });\r\n\r\n this.toggler?.removeEventListener(\"click\", this.boundToggleMobileMenu);\r\n document.removeEventListener(\"click\", this.boundCloseAllDropdowns);\r\n window.removeEventListener(\"resize\", this.boundHandleResize);\r\n }\r\n\r\n isMobileMenuOpen() {\r\n return this.menu?.classList.contains(\"dga-menu-open\");\r\n }\r\n\r\n isNormalDropdownOpen() {\r\n return this.navbar.querySelectorAll(\".dga-menu > li.active\").length > 0;\r\n }\r\n}\r\n\r\nexport default DGAMenuDropdown;\r\n","export default class DGAVerifyBar {\r\n constructor(options = {}) {\r\n this.isOpen = false;\r\n this.verifyBar = document.getElementById(\"dga-verify-bar\");\r\n this.menu = options.menu || null; // Fixed typo: was \"mneu\"\r\n\r\n this.btn = document.getElementById(\"dga-verifyBtn\");\r\n this.content = document.getElementById(\"dga-verify-bar_content\");\r\n this.boundToggle = () => {\r\n if (this.isOpen) {\r\n this.closePanel();\r\n } else {\r\n this.openPanel();\r\n }\r\n };\r\n\r\n if (!this.verifyBar || !this.btn || !this.content) {\r\n console.warn(\"DGA Verify Bar elements not found\");\r\n return;\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.btn.addEventListener(\"click\", this.boundToggle);\r\n }\r\n\r\n openPanel() {\r\n // Close menu if it's open\r\n if (this.menu && this.menu.isActive) {\r\n this.menu.closeMenu(); // Use the new public method\r\n }\r\n\r\n this.content.style.display = \"flex\";\r\n this.isOpen = true;\r\n this.verifyBar.classList.add(\"opend\");\r\n this.verifyBar.classList.remove(\"closed\");\r\n this.btn?.setAttribute(\"aria-expanded\", \"true\");\r\n }\r\n\r\n closePanel() {\r\n this.content.style.display = \"none\";\r\n this.isOpen = false;\r\n this.verifyBar.classList.add(\"closed\");\r\n this.verifyBar.classList.remove(\"opend\");\r\n this.btn?.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n\r\n destroy() {\r\n this.btn?.removeEventListener(\"click\", this.boundToggle);\r\n }\r\n}\r\n","import { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nconst DEFAULT_VARIANT = \"info-color\";\r\n\r\nclass DGAAlertElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"variant\", \"title\", \"dismissible\"];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._bodyContent = null;\r\n this._boundDismiss = this._handleDismiss.bind(this);\r\n }\r\n\r\n connectedCallback() {\r\n if (this._bodyContent == null) {\r\n this._bodyContent = this.innerHTML.trim();\r\n }\r\n this._render();\r\n }\r\n\r\n disconnectedCallback() {\r\n this._closeButton?.removeEventListener(\"click\", this._boundDismiss);\r\n }\r\n\r\n attributeChangedCallback() {\r\n // On upgrade, attributeChangedCallback can fire before connectedCallback.\r\n // Don't render until the original slotted content has been captured,\r\n // otherwise _render() would overwrite it with an empty body.\r\n if (this._bodyContent == null) return;\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const variant = this.getAttribute(\"variant\") || DEFAULT_VARIANT;\r\n const title = this.getAttribute(\"title\") || \"\";\r\n const dismissible = this.hasAttribute(\"dismissible\");\r\n const body = this._bodyContent || \"\";\r\n\r\n this.classList.add(\"dga-alert\");\r\n this.setAttribute(\"data-variant\", variant);\r\n\r\n const titleHtml = title\r\n ? `<h4 class=\"dga-alert-title\">${escapeHtml(title)}</h4>`\r\n : \"\";\r\n\r\n const closeHtml = dismissible\r\n ? `<button class=\"dga-alert-close\" type=\"button\" data-alert-close aria-label=\"Dismiss alert\">×</button>`\r\n : \"\";\r\n\r\n this.innerHTML = `\r\n <span class=\"dga-alert-icon\" aria-hidden=\"true\"></span>\r\n <div class=\"dga-alert-content\">\r\n ${titleHtml}\r\n <div class=\"dga-alert-body\">${body}</div>\r\n </div>\r\n ${closeHtml}\r\n `;\r\n\r\n this._closeButton = this.querySelector(\"[data-alert-close]\");\r\n this._closeButton?.removeEventListener(\"click\", this._boundDismiss);\r\n this._closeButton?.addEventListener(\"click\", this._boundDismiss);\r\n }\r\n\r\n _handleDismiss() {\r\n this.style.display = \"none\";\r\n this.dispatchEvent(\r\n new CustomEvent(\"dga-alert-dismiss\", { bubbles: true, composed: true })\r\n );\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-alert\", DGAAlertElement);\r\n","import { AccordionController } from \"./shared/accordion-controller.js\";\r\nimport { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nclass DGAAccordionItemElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"title\", \"size\", \"open\"];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._bodyContent = null;\r\n }\r\n\r\n connectedCallback() {\r\n if (this._bodyContent == null) {\r\n this._bodyContent = this.innerHTML.trim();\r\n }\r\n this._render();\r\n }\r\n\r\n attributeChangedCallback() {\r\n // On upgrade, attributeChangedCallback can fire before connectedCallback.\r\n // Don't render until the original slotted content has been captured,\r\n // otherwise _render() would overwrite it with an empty body.\r\n if (this._bodyContent == null) return;\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const title = this.getAttribute(\"title\") || \"\";\r\n const size = this.getAttribute(\"size\") || \"md\";\r\n const isOpen = this.hasAttribute(\"open\");\r\n const body = this._bodyContent || \"\";\r\n\r\n this.innerHTML = `\r\n <div class=\"dga-acc-item${isOpen ? \" dga-acc-item--active\" : \"\"}\">\r\n <button class=\"dga-acc-header\" data-size=\"${escapeHtml(size)}\" aria-expanded=\"${isOpen ? \"true\" : \"false\"}\">\r\n <span>${escapeHtml(title)}</span>\r\n </button>\r\n <div class=\"dga-acc-content\">\r\n <div class=\"dga-acc-body\">${body}</div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\nclass DGAAccordionElement extends HTMLElement {\r\n constructor() {\r\n super();\r\n this._controller = null;\r\n }\r\n\r\n connectedCallback() {\r\n this.classList.add(\"dga-acc\");\r\n this._controller?.destroy();\r\n this._controller = new AccordionController(this);\r\n }\r\n\r\n disconnectedCallback() {\r\n this._controller?.destroy();\r\n this._controller = null;\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-accordion-item\", DGAAccordionItemElement);\r\ncustomElements.define(\"dga-accordion\", DGAAccordionElement);\r\n","import {\r\n COPY_ICON_SVG,\r\n copyText,\r\n markCopyButtonCopied,\r\n} from \"./shared/copy-text.js\";\r\nimport { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nclass DGACodeSnippetElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"code\", \"multiline\"];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._codeContent = null;\r\n this._boundCopy = this._handleCopy.bind(this);\r\n }\r\n\r\n connectedCallback() {\r\n if (this._codeContent == null) {\r\n this._codeContent =\r\n this.getAttribute(\"code\")?.trim() || this.textContent?.trim() || \"\";\r\n }\r\n this._render();\r\n }\r\n\r\n disconnectedCallback() {\r\n this._copyButton?.removeEventListener(\"click\", this._boundCopy);\r\n }\r\n\r\n attributeChangedCallback() {\r\n // On upgrade, attributeChangedCallback can fire before connectedCallback.\r\n // Don't render until the slotted code has been captured, otherwise\r\n // _render() would overwrite it (e.g. slotted code + a `multiline` attr).\r\n if (this._codeContent == null) return;\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const isMultiline = this.hasAttribute(\"multiline\");\r\n const code =\r\n this.getAttribute(\"code\")?.trim() || this._codeContent || \"\";\r\n\r\n if (isMultiline) {\r\n this.innerHTML = `\r\n <div class=\"dga-code-snippet-multiline\">\r\n <div class=\"dga-code-snippet-multiline__body\">\r\n <pre class=\"dga-code-snippet-multiline__code\"><code>${escapeHtml(code)}</code></pre>\r\n <button type=\"button\" class=\"dga-code-snippet-multiline__copy\" aria-label=\"Copy code\" data-copied=\"false\">\r\n ${COPY_ICON_SVG}\r\n </button>\r\n </div>\r\n </div>\r\n `;\r\n this._copyButton = this.querySelector(\".dga-code-snippet-multiline__copy\");\r\n } else {\r\n this.innerHTML = `\r\n <div class=\"dga-code-snippet-inline\">\r\n <div class=\"dga-code-snippet-inline__content\">${escapeHtml(code)}</div>\r\n <button type=\"button\" class=\"dga-code-snippet-inline__copy\" aria-label=\"Copy code\" data-copied=\"false\">\r\n ${COPY_ICON_SVG}\r\n </button>\r\n </div>\r\n `;\r\n this._copyButton = this.querySelector(\".dga-code-snippet-inline__copy\");\r\n }\r\n\r\n this._copyButton?.removeEventListener(\"click\", this._boundCopy);\r\n this._copyButton?.addEventListener(\"click\", this._boundCopy);\r\n }\r\n\r\n async _handleCopy() {\r\n const code = this.getAttribute(\"code\")?.trim() || this._codeContent || \"\";\r\n if (!code || !this._copyButton) return;\r\n\r\n const copied = await copyText(code);\r\n if (!copied) return;\r\n\r\n await markCopyButtonCopied(this._copyButton);\r\n this.dispatchEvent(\r\n new CustomEvent(\"dga-code-copy\", { bubbles: true, composed: true })\r\n );\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-code-snippet\", DGACodeSnippetElement);\r\n","import {\r\n parseChartDataAttribute,\r\n renderPieChart,\r\n} from \"./shared/pie-chart.js\";\r\n\r\nclass DGAPieChartElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\"data\", \"hole\", \"style-color\"];\r\n }\r\n\r\n connectedCallback() {\r\n this._render();\r\n }\r\n\r\n attributeChangedCallback() {\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const chartData = parseChartDataAttribute(this.getAttribute(\"data\"));\r\n const hole =\r\n this.hasAttribute(\"hole\") && this.getAttribute(\"hole\") !== \"false\";\r\n const styleColor =\r\n this.getAttribute(\"style-color\") === \"color\" ? \"color\" : \"brand\";\r\n\r\n renderPieChart(this, chartData, { hole, styleColor });\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-pie-chart\", DGAPieChartElement);\r\n","import { parseBarConfig, renderBarChart } from \"./shared/bar-chart.js\";\n\nclass DGABarChartElement extends HTMLElement {\n static get observedAttributes() {\n return [\n \"data\",\n \"style-color\",\n \"max\",\n \"x-label\",\n \"y-label\",\n \"show-legend\",\n \"show-x-label\",\n \"show-y-label\",\n ];\n }\n\n connectedCallback() {\n this._render();\n }\n\n attributeChangedCallback() {\n if (this.isConnected) this._render();\n }\n\n _bool(name) {\n const v = this.getAttribute(name);\n return v === null ? true : v !== \"false\";\n }\n\n _render() {\n const { categories, series } = parseBarConfig(this.getAttribute(\"data\"));\n renderBarChart(this, {\n categories,\n series,\n styleColor:\n this.getAttribute(\"style-color\") === \"color\" ? \"color\" : \"brand\",\n max: this.getAttribute(\"max\"),\n xLabel: this.getAttribute(\"x-label\") || \"\",\n yLabel: this.getAttribute(\"y-label\") || \"\",\n showLegend: this._bool(\"show-legend\"),\n showXLabel: this._bool(\"show-x-label\"),\n showYLabel: this._bool(\"show-y-label\"),\n });\n }\n}\n\ncustomElements.define(\"dga-bar-chart\", DGABarChartElement);\n","import { parseLineConfig, renderLineChart } from \"./shared/line-chart.js\";\n\nclass DGALineChartElement extends HTMLElement {\n static get observedAttributes() {\n return [\n \"data\",\n \"style-color\",\n \"max\",\n \"x-label\",\n \"y-label\",\n \"show-legend\",\n \"show-x-label\",\n \"show-y-label\",\n \"show-content\",\n ];\n }\n\n connectedCallback() {\n this._render();\n }\n\n attributeChangedCallback() {\n if (this.isConnected) this._render();\n }\n\n _bool(name) {\n const v = this.getAttribute(name);\n return v === null ? true : v !== \"false\";\n }\n\n _render() {\n const { categories, series } = parseLineConfig(this.getAttribute(\"data\"));\n let rtl = false;\n try {\n rtl = getComputedStyle(this).direction === \"rtl\";\n } catch {\n /* SSR / detached */\n }\n renderLineChart(this, {\n categories,\n series,\n rtl,\n styleColor:\n this.getAttribute(\"style-color\") === \"color\" ? \"color\" : \"brand\",\n max: this.getAttribute(\"max\"),\n xLabel: this.getAttribute(\"x-label\") || \"\",\n yLabel: this.getAttribute(\"y-label\") || \"\",\n showLegend: this._bool(\"show-legend\"),\n showXLabel: this._bool(\"show-x-label\"),\n showYLabel: this._bool(\"show-y-label\"),\n showContent: this._bool(\"show-content\"),\n });\n }\n}\n\ncustomElements.define(\"dga-line-chart\", DGALineChartElement);\n","import { escapeHtml } from \"./shared/escape-html.js\";\r\n\r\nconst DEFAULT_ASSETS = {\r\n \"flag-src\": \"saudiFlag.svg\",\r\n \"link-icon-src\": \"link-icon.svg\",\r\n \"lock-icon-src\": \"square-lock-password.svg\",\r\n \"logo-src\": \"DGA-logo-icon.svg\",\r\n};\r\n\r\nconst STRINGS = {\r\n ar: {\r\n flagAlt: \"علم المملكة العربية السعودية\",\r\n banner: \"موقع حكومي رسمي تابع لحكومة المملكة العربية السعودية\",\r\n cta: \"كيف تتحقق\",\r\n domainHeading: \"روابط المواقع الالكترونية الرسمية السعودية تنتهي بـ\",\r\n domainBody:\r\n \"جميع روابط المواقع الرسمية التابعة للجهات الحكومية في المملكة العربية السعودية تنتهي بـ\",\r\n httpsHeading: \"المواقع الالكترونية الحكومية تستخدم بروتوكول\",\r\n httpsHeadingSuffix: \"للتشفير و الأمان.\",\r\n httpsBody:\r\n \"المواقع الالكترونية الآمنة في المملكة العربية السعودية تستخدم بروتوكول HTTPS للتشفير.\",\r\n logoAlt: \"شعار هيئة الحكومة الرقمية\",\r\n registeredWith: \"مسجل لدى هيئة الحكومة الرقمية برقم :\",\r\n },\r\n en: {\r\n flagAlt: \"Flag of the Kingdom of Saudi Arabia\",\r\n banner: \"This is an official government website of the Kingdom of Saudi Arabia\",\r\n cta: \"How to verify\",\r\n domainHeading: \"Official Saudi government website links end with\",\r\n domainBody:\r\n \"All official website links belonging to government entities in the Kingdom of Saudi Arabia end with\",\r\n httpsHeading: \"Government websites use the\",\r\n httpsHeadingSuffix: \"protocol for encryption and security.\",\r\n httpsBody:\r\n \"Secure websites in the Kingdom of Saudi Arabia use the HTTPS protocol for encryption.\",\r\n logoAlt: \"Digital Government Authority logo\",\r\n registeredWith: \"Registered with the Digital Government Authority under number:\",\r\n },\r\n};\r\n\r\nclass DGAVerifyBarElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\r\n \"registration-number\",\r\n \"registration-link\",\r\n \"domain\",\r\n \"assets-base\",\r\n \"flag-src\",\r\n \"link-icon-src\",\r\n \"lock-icon-src\",\r\n \"logo-src\",\r\n \"lang\",\r\n ];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this.isOpen = false;\r\n this._btn = null;\r\n this._content = null;\r\n this._wrapper = null;\r\n this._boundToggle = () => (this.isOpen ? this._close() : this._open());\r\n }\r\n\r\n connectedCallback() {\r\n this._render();\r\n }\r\n\r\n disconnectedCallback() {\r\n this._btn?.removeEventListener(\"click\", this._boundToggle);\r\n }\r\n\r\n attributeChangedCallback() {\r\n if (this.isConnected) this._render();\r\n }\r\n\r\n _render() {\r\n const lang = this.getAttribute(\"lang\") === \"en\" ? \"en\" : \"ar\";\r\n const dir = lang === \"en\" ? \"ltr\" : \"rtl\";\r\n const t = STRINGS[lang];\r\n\r\n const regNumber = escapeHtml(\r\n this.getAttribute(\"registration-number\") || \"20250105758\",\r\n );\r\n const regLinkRaw =\r\n this.getAttribute(\"registration-link\") ||\r\n \"https://raqmi.dga.gov.sa/platforms/platforms/9ebc5e60-9081-4653-bfb9-08dd2a2f8633/platform-license\";\r\n const regLink = escapeHtml(this._normalizeLink(regLinkRaw));\r\n const domain = escapeHtml(this.getAttribute(\"domain\") || \".edu.sa\");\r\n\r\n const flagSrc = escapeHtml(this._imageSrc(\"flag-src\"));\r\n const linkIconSrc = escapeHtml(this._imageSrc(\"link-icon-src\"));\r\n const lockIconSrc = escapeHtml(this._imageSrc(\"lock-icon-src\"));\r\n const logoSrc = escapeHtml(this._imageSrc(\"logo-src\"));\r\n\r\n this.innerHTML = `\r\n <div id=\"dga-verify-bar\" dir=\"${dir}\" class=\"dga-bg-gray-100 closed\">\r\n <div class=\"dga-container dga-py-2\">\r\n <div id=\"dga-verify-bar_bar\" class=\"dga-row\">\r\n <div class=\"dga-col\">\r\n <div class=\"dga-d-flex dga-align-items-center dga-gap-2\">\r\n <span><img src=\"${flagSrc}\" alt=\"${t.flagAlt}\" /></span>\r\n <span class=\"dga-text-sm\">${t.banner}</span>\r\n <span>\r\n <button id=\"dga-verifyBtn\" class=\"dga-btn dga-btn-subtle dga-text-primary-500\" data-verify-toggle aria-expanded=\"false\">\r\n ${t.cta}\r\n </button>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"dga-verify-bar_content\" class=\"dga-row dga-pt-10 dga-pb-8\" data-verify-content style=\"display: ${this.isOpen ? \"flex\" : \"none\"};\">\r\n <div class=\"dga-col-md-6 dga-pb-8\">\r\n <div class=\"dga-d-flex dga-gap-4\">\r\n <div><img src=\"${linkIconSrc}\" alt=\"\" /></div>\r\n <div class=\"dga-w-full dga-d-flex dga-flex-col dga-gap-2\">\r\n <h3 class=\"dga-text-xl dga-fw-bold\">\r\n ${t.domainHeading}\r\n <span class=\"dga-text-primary-500\">${domain}</span>\r\n </h3>\r\n <p>\r\n ${t.domainBody} ${domain}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dga-col-md-6 dga-pb-8\">\r\n <div class=\"dga-d-flex dga-gap-4\">\r\n <div><img src=\"${lockIconSrc}\" alt=\"\" /></div>\r\n <div class=\"dga-w-full dga-d-flex dga-flex-col dga-gap-2\">\r\n <h3 class=\"dga-text-xl dga-fw-bold\">\r\n ${t.httpsHeading}\r\n <span class=\"dga-text-primary-500\">HTTPS</span> ${t.httpsHeadingSuffix}\r\n </h3>\r\n <p>\r\n ${t.httpsBody}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dga-col-12\">\r\n <div class=\"dga-d-flex dga-align-items-center dga-gap-3 dga-bg-white dga-text-md dga-rounded-md dga-py-2 dga-px-7\">\r\n <img src=\"${logoSrc}\" alt=\"${t.logoAlt}\" />\r\n ${t.registeredWith}\r\n <a href=\"${regLink}\" class=\"dga-link\">${regNumber}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n\r\n this._btn?.removeEventListener(\"click\", this._boundToggle);\r\n this._wrapper = this.querySelector(\"#dga-verify-bar\");\r\n this._btn = this.querySelector(\"[data-verify-toggle]\");\r\n this._content = this.querySelector(\"[data-verify-content]\");\r\n this._btn?.addEventListener(\"click\", this._boundToggle);\r\n }\r\n\r\n _imageSrc(attributeName) {\r\n const override = this.getAttribute(attributeName);\r\n if (override) return override;\r\n\r\n const defaultFile = DEFAULT_ASSETS[attributeName];\r\n const base = this.getAttribute(\"assets-base\") || \"/\";\r\n const normalizedBase = base.endsWith(\"/\") ? base : `${base}/`;\r\n\r\n return `${normalizedBase}${defaultFile}`;\r\n }\r\n\r\n _open() {\r\n this._content.style.display = \"flex\";\r\n this.isOpen = true;\r\n this._btn?.setAttribute(\"aria-expanded\", \"true\");\r\n this._wrapper?.classList.replace(\"closed\", \"opend\");\r\n }\r\n\r\n _close() {\r\n this._content.style.display = \"none\";\r\n this.isOpen = false;\r\n this._btn?.setAttribute(\"aria-expanded\", \"false\");\r\n this._wrapper?.classList.replace(\"opend\", \"closed\");\r\n }\r\n\r\n _normalizeLink(value) {\r\n try {\r\n return new URL(value, window.location.href).href;\r\n } catch {\r\n return \"#\";\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define(\"dga-verify-bar\", DGAVerifyBarElement);\r\n","import \"./dga-alert.js\";\r\nimport \"./dga-accordion.js\";\r\nimport \"./dga-code-snippet.js\";\r\nimport \"./dga-pie-chart.js\";\r\nimport \"./dga-bar-chart.js\";\r\nimport \"./dga-line-chart.js\";\r\nimport \"./dga-verify-bar.js\";\r\n\r\nexport const DGA_WEB_COMPONENTS_REGISTERED = true;\r\n"],"names":["AccordionController","root","event","header","item","DGAAccordion","element","DGAAlert","closeButton","alert","resolveChartColor","color","CHART_BRAND_RAMP","CHART_COLOR_SEQUENCE","brandPalette","count","ramp","_","colorPalette","i","resolvePalette","styleColor","generateChartGradient","data","segment","generateChartLabelsHtml","parseChartDataAttribute","value","parsed","renderPieChart","hole","style","palette","resolvedData","DGAChart","escapeHtml","BAR_BRAND_SEQUENCE","BAR_COLOR_SEQUENCE","resolveBarPalette","seq","niceScale","max","targetTicks","safeMax","rawStep","mag","norm","step","niceMax","parseBarConfig","renderBarChart","config","categories","series","showLegend","showXLabel","showYLabel","xLabel","yLabel","colors","s","totals","ci","sum","dataMax","ticks","t","legendHtml","yAxisHtml","gridlinesHtml","barsHtml","cat","total","barHeight","segs","si","v","xAxisHtml","yTitleHtml","xTitleHtml","DGABarChart","LINE_BRAND_SEQUENCE","LINE_COLOR_SEQUENCE","resolveLinePalette","renderLineChart","showContent","rtl","W","padL","padR","padT","padB","xLeft","xRight","yTop","yBottom","plotW","plotH","n","xAt","frac","yAt","gridHtml","y","lx","anchor","xLabelsHtml","c","seriesHtml","pts","line","p","idx","area","first","last","stroke","svg","DGALineChart","copyText","text","textarea","success","COPY_ICON_SVG","markCopyButtonCopied","copyButton","resetMs","previousLabel","DGACodeSnippet","inlineSnippet","multilineSnippet","textToCopy","DGAMenuDropdown","options","e","menuItem","listItem","isActive","isOpen","width","DGAVerifyBar","DEFAULT_VARIANT","DGAAlertElement","variant","title","dismissible","body","titleHtml","closeHtml","DGAAccordionItemElement","size","DGAAccordionElement","DGACodeSnippetElement","isMultiline","code","DGAPieChartElement","chartData","DGABarChartElement","name","DGALineChartElement","parseLineConfig","DEFAULT_ASSETS","STRINGS","DGAVerifyBarElement","lang","dir","regNumber","regLinkRaw","regLink","domain","flagSrc","linkIconSrc","lockIconSrc","logoSrc","attributeName","override","defaultFile","base","DGA_WEB_COMPONENTS_REGISTERED"],"mappings":"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"}