export const buildUrl = (appBase, path) => new URL(path, appBase).toString(); export const getAppBase = () => { const baseEl = document.querySelector('base'); if (baseEl && baseEl.href) { return baseEl.href; } return `${window.location.origin}/`; }; export const escapeHtml = (value) => String(value ?? '').replace(/[&<>"']/g, (char) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[char])); export const buildBadgeList = (items, options = {}) => { const { variant = 'neutral', primaryVariant = 'info', primaryTooltip = '' } = options; let list = items; let primary = ''; if (items && typeof items === 'object' && !Array.isArray(items)) { list = Array.isArray(items.items) ? items.items : []; primary = String(items.primary ?? ''); } if (!Array.isArray(list) || list.length === 0) {return '';} const tooltipAttr = primaryTooltip ? ` data-tooltip="${escapeHtml(primaryTooltip)}" data-tooltip-pos="top"` : ''; const badges = list.map((label) => { const labelText = String(label ?? ''); const isPrimary = primary !== '' && labelText === primary; const badgeVariant = isPrimary ? primaryVariant : variant; const badgeTooltip = isPrimary && primaryTooltip ? tooltipAttr : ''; return `${escapeHtml(labelText)}`; }).join(' '); return `