{"version":3,"file":"widgets.es.mjs","names":[],"sources":["../src/widgets/normalizeLegacyAttributes.ts","../src/widgets/parseBooleanAttribute.ts","../src/widgets/parseCommaSeparated.ts","../src/widgets/parseEnumAttribute.ts","../src/widgets/parseStringAttribute.ts"],"sourcesContent":["/**\n * Backfills canonical kebab-case widget attributes from their legacy\n * snake_case spelling.\n *\n * For each canonical name (e.g. `article-id`), if it is absent or blank but the\n * snake_case form (`article_id`) carries a value, the value is copied onto the\n * canonical attribute. Lets a widget migrate its attribute naming without\n * breaking embeds that still use the old names. Mutates `element` in place.\n * @param {Element} element - The custom element to normalize.\n * @param {readonly string[]} canonicalNames - The canonical kebab-case attribute names.\n * @returns {void} Nothing.\n */\nexport const normalizeLegacyAttributes = (\n  element: Element,\n  canonicalNames: readonly string[],\n): void => {\n  for (const canonical of canonicalNames) {\n    const legacy = canonical.replace(/-/g, '_')\n    if (legacy === canonical) continue\n\n    const canonicalValue = element.getAttribute(canonical)\n    const legacyValue = element.getAttribute(legacy)\n\n    if (\n      (canonicalValue === null || canonicalValue === '') &&\n      legacyValue !== null &&\n      legacyValue !== ''\n    ) {\n      element.setAttribute(canonical, legacyValue)\n    }\n  }\n}\n","/**\n * Parses a widget boolean attribute, treating only the literal string `'true'`\n * as true. An absent or blank value yields the provided default.\n * @param {string | null | undefined} value - The raw attribute value.\n * @param {boolean} defaultValue - The value to use when absent or blank.\n * @returns {boolean} The parsed boolean.\n */\nexport const parseBooleanAttribute = (\n  value: string | null | undefined,\n  defaultValue: boolean,\n): boolean => {\n  if (value === undefined || value === null || value.trim() === '') {\n    return defaultValue\n  }\n\n  return value === 'true'\n}\n","/**\n * Parses a comma-separated widget attribute into a trimmed, non-empty string\n * array.\n *\n * Returns undefined for an absent/blank value, and also for legacy base64\n * payloads (`data:text/plain;base64,...`) that older Staffbase versions stored,\n * so those never leak through as bogus filter entries.\n * @param {string | null | undefined} value - The raw attribute value.\n * @returns {string[] | undefined} The parsed list, or undefined.\n */\nexport const parseCommaSeparated = (\n  value: string | null | undefined,\n): string[] | undefined => {\n  if (!value || value.trim() === '') return undefined\n  if (value.startsWith('data:text/plain;base64')) return undefined\n\n  return value\n    .split(',')\n    .map((entry) => entry.trim())\n    .filter(Boolean)\n}\n","/**\n * Parses a widget attribute constrained to a known set of values. Trims the\n * input and returns the default when it is blank or not one of `validValues`.\n * @template T The string-literal union of accepted values.\n * @param {string | null | undefined} value - The raw attribute value.\n * @param {readonly T[]} validValues - The accepted values.\n * @param {T} defaultValue - The value to use when invalid or blank.\n * @returns {T} The validated value.\n */\nexport const parseEnumAttribute = <T extends string>(\n  value: string | null | undefined,\n  validValues: readonly T[],\n  defaultValue: T,\n): T => {\n  const normalized = value?.trim() as T | undefined\n  if (!normalized) return defaultValue\n\n  return validValues.includes(normalized) ? normalized : defaultValue\n}\n","/**\n * Parses a widget string attribute, returning the default (or undefined) when\n * the value is absent or blank.\n * @param {string | null | undefined} value - The raw attribute value.\n * @param {string} [defaultValue] - The value to use when absent or blank.\n * @returns {string | undefined} The string value, the default, or undefined.\n */\nexport const parseStringAttribute = (\n  value: string | null | undefined,\n  defaultValue?: string,\n): string | undefined => {\n  if (value === undefined || value === null || value.trim() === '') {\n    return defaultValue\n  }\n\n  return value\n}\n"],"mappings":";;AAYA,IAAa,KACX,GACA,MACS;CACT,KAAK,IAAM,KAAa,GAAgB;EACtC,IAAM,IAAS,EAAU,QAAQ,MAAM,GAAG;EAC1C,IAAI,MAAW,GAAW;EAE1B,IAAM,IAAiB,EAAQ,aAAa,CAAS,GAC/C,IAAc,EAAQ,aAAa,CAAM;EAE/C,CACG,MAAmB,QAAQ,MAAmB,OAC/C,MAAgB,QAChB,MAAgB,MAEhB,EAAQ,aAAa,GAAW,CAAW;CAE/C;AACF,GCxBa,KACX,GACA,MAEI,KAAiC,QAAQ,EAAM,KAAK,MAAM,KACrD,IAGF,MAAU,QCLN,KACX,MACyB;CACrB,OAAC,KAAS,EAAM,KAAK,MAAM,OAC3B,GAAM,WAAW,wBAAwB,GAE7C,OAAO,EACJ,MAAM,GAAG,EACT,KAAK,MAAU,EAAM,KAAK,CAAC,EAC3B,OAAO,OAAO;AACnB,GCXa,KACX,GACA,GACA,MACM;CACN,IAAM,IAAa,GAAO,KAAK;CAG/B,OAFK,KAEE,EAAY,SAAS,CAAU,IAAI,IAAa;AACzD,GCXa,KACX,GACA,MAEI,KAAiC,QAAQ,EAAM,KAAK,MAAM,KACrD,IAGF"}