@countriesdb/widget 0.1.3 → 0.1.5

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.esm.js CHANGED
@@ -525,11 +525,8 @@ async function setupCountrySelection(apiKey, backendUrl, state, config, subdivis
525
525
  if (name) {
526
526
  seenNames[name] = true;
527
527
  }
528
- // Avoid conflict if mis-classed
529
- if (select.classList.contains('subdivision-selection')) {
530
- select.classList.remove('subdivision-selection');
531
- select.classList.add('subdivision-selection-removed');
532
- }
528
+ // Note: Class renaming is now handled earlier in fixMisClassedElements()
529
+ // This check is kept as a safety net but should not be needed
533
530
  // Initialize
534
531
  initializeSelect(select, '—');
535
532
  // Mark as initializing to prevent change events
@@ -664,11 +661,8 @@ async function CountriesWidgetLoad(options = {}) {
664
661
  }
665
662
  // Get configuration from options or script URL
666
663
  const config = getConfigFromOptionsOrScript(options);
667
- // Validate configuration
668
- if (!config.publicKey) {
669
- console.error('CountriesDB Widget: publicKey is required');
670
- return false;
671
- }
664
+ // Fix mis-classed elements early (DOM cleanup that should always happen)
665
+ fixMisClassedElements();
672
666
  // Check for conflicting parameters
673
667
  if (config.followRelated && config.followUpward) {
674
668
  showParamConflictError();
@@ -681,8 +675,10 @@ async function CountriesWidgetLoad(options = {}) {
681
675
  subdivisionsLanguageMap: new WeakMap(),
682
676
  isInitializing: new Set(),
683
677
  };
678
+ // Use empty string if publicKey is missing (will show error when API calls fail)
679
+ const apiKey = config.publicKey || '';
684
680
  // Setup subdivisions first (they depend on countries)
685
- await setupSubdivisionSelection(config.publicKey, config.backendUrl, state, {
681
+ await setupSubdivisionSelection(apiKey, config.backendUrl, state, {
686
682
  followRelated: config.followRelated || false,
687
683
  followUpward: config.followUpward || false,
688
684
  showSubdivisionType: config.showSubdivisionType !== false,
@@ -699,7 +695,7 @@ async function CountriesWidgetLoad(options = {}) {
699
695
  subdivisionNameFilter: config.subdivisionNameFilter,
700
696
  };
701
697
  // Setup countries
702
- await setupCountrySelection(config.publicKey, config.backendUrl, state, {
698
+ await setupCountrySelection(apiKey, config.backendUrl, state, {
703
699
  defaultLanguage: config.defaultLanguage,
704
700
  forcedLanguage: config.forcedLanguage,
705
701
  isoCountryNames: config.isoCountryNames || false,
@@ -712,7 +708,7 @@ async function CountriesWidgetLoad(options = {}) {
712
708
  for (const select of countrySelects) {
713
709
  if (select.value &&
714
710
  select.value !== (select.dataset.defaultValue || '')) {
715
- await updateSubdivisions(select, config.publicKey, config.backendUrl, state, subdivisionConfig);
711
+ await updateSubdivisions(select, apiKey, config.backendUrl, state, subdivisionConfig);
716
712
  }
717
713
  }
718
714
  NS.initialized = true;
@@ -834,6 +830,20 @@ function getBackendUrlFromScript() {
834
830
  // Default to API domain (never use embedding site's domain)
835
831
  return 'https://api.countriesdb.com';
836
832
  }
833
+ /**
834
+ * Fix mis-classed elements (e.g., country-selection with subdivision-selection class)
835
+ * This should happen early, before API calls, as it's just DOM cleanup
836
+ */
837
+ function fixMisClassedElements() {
838
+ const countrySelects = Array.from(document.querySelectorAll('.country-selection'));
839
+ for (const select of countrySelects) {
840
+ // Avoid conflict if mis-classed
841
+ if (select.classList.contains('subdivision-selection')) {
842
+ select.classList.remove('subdivision-selection');
843
+ select.classList.add('subdivision-selection-removed');
844
+ }
845
+ }
846
+ }
837
847
  /**
838
848
  * Parse boolean from string value
839
849
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/dom-manipulation.ts","../src/event-system.ts","../src/follow-logic.ts","../src/initialization.ts","../src/index.ts"],"sourcesContent":["/**\n * DOM manipulation utilities\n */\n\nimport type { SelectElement } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport {\n applyCountryNameFilter,\n sortCountries,\n buildSubdivisionTree,\n flattenSubdivisionOptions,\n parseNestingPrefixes,\n} from '@countriesdb/widget-core';\n\n/**\n * Initialize a select element with default option\n */\nexport function initializeSelect(\n select: SelectElement,\n fallbackLabel: string = 'Not Applicable',\n isSubdivision: boolean = false\n): void {\n const isMultiple = select.hasAttribute('multiple');\n\n // For multi-select, don't add default option or use data-label/data-default-value\n if (isMultiple) {\n select.innerHTML = '';\n // Remove data-label and data-default-value for multi-select (they're ignored)\n if (select.dataset.label !== undefined) {\n delete select.dataset.label;\n }\n if (select.dataset.defaultValue !== undefined) {\n delete select.dataset.defaultValue;\n }\n } else {\n const dataLabel = select.dataset.label;\n const dataDefaultValue = select.dataset.defaultValue;\n\n const label = dataLabel || fallbackLabel;\n const defaultValue = dataDefaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\">${label}</option>`;\n\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n if (isSubdivision) {\n select.disabled = true;\n }\n}\n\n/**\n * Populate a select element with countries\n */\nexport function populateCountrySelect(\n select: SelectElement,\n countries: Country[],\n language: string,\n countryNameFilter?: (code: string, name: string, lang: string, item: Country) => string | false | null | undefined\n): void {\n // Apply filter and get display names\n let filteredCountries = applyCountryNameFilter(countries, countryNameFilter, language);\n \n // Sort if filter was applied\n if (countryNameFilter) {\n filteredCountries = sortCountries(filteredCountries, language);\n }\n\n // Clear existing options (except default)\n const defaultOption = select.querySelector('option[value=\"\"]') || \n (select.dataset.defaultValue ? select.querySelector(`option[value=\"${select.dataset.defaultValue}\"]`) : null);\n const defaultValue = select.dataset.defaultValue ?? '';\n \n // Keep default option if it exists\n select.innerHTML = defaultOption ? defaultOption.outerHTML : `<option value=\"${defaultValue}\">${select.dataset.label || '&mdash;'}</option>`;\n\n // Add country options\n filteredCountries.forEach((country) => {\n const option = document.createElement('option');\n option.value = country.iso_alpha_2;\n option.textContent = country._displayName;\n select.appendChild(option);\n });\n}\n\n/**\n * Populate a select element with subdivisions\n */\nexport function buildSubdivisionOptionsHTML(\n subdivisions: Subdivision[],\n select: SelectElement,\n language: string,\n showSubdivisionType: boolean,\n allowParentSelection: boolean,\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined\n): string {\n const tree = buildSubdivisionTree(subdivisions);\n \n // Parse nesting prefixes from data attributes\n const dataAttributes: Record<string, string | undefined> = {};\n for (let lvl = 1; lvl <= 10; lvl++) {\n const key = `nested${lvl}Prefix`;\n const value = select.dataset[key];\n if (value !== undefined) {\n dataAttributes[`nested${lvl}Prefix`] = value;\n } else {\n break;\n }\n }\n const prefixes = parseNestingPrefixes(dataAttributes);\n \n const isMultiple = select.hasAttribute('multiple');\n const labelKey = showSubdivisionType ? 'full_name' : 'name';\n\n let html = '';\n // For multi-select, don't add default option\n if (!isMultiple) {\n const defaultLabel = select.dataset.label || '&mdash;';\n const defaultValue = select.dataset.defaultValue ?? '';\n html = `<option value=\"${defaultValue}\">${defaultLabel}</option>`;\n }\n\n html += flattenSubdivisionOptions(\n tree,\n 0,\n prefixes,\n labelKey,\n language,\n allowParentSelection,\n subdivisionNameFilter\n );\n \n return html;\n}\n\n/**\n * Apply preselected value to a select element\n */\nexport function applyPreselectedValue(\n select: SelectElement,\n value: string\n): void {\n if (!value || value.trim() === '') {\n return;\n }\n\n const isMultiple = select.hasAttribute('multiple');\n\n if (isMultiple) {\n // For multi-select, parse comma-separated values\n const values = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '');\n // Select all matching options\n Array.from(select.options).forEach((option) => {\n option.selected = values.includes(option.value);\n });\n } else {\n // Single select: set single value\n select.value = value;\n }\n}\n\n/**\n * Handle API error by showing error message in select\n */\nexport function handleApiError(\n select: SelectElement,\n errorMessage: string | Error\n): void {\n const message = errorMessage instanceof Error ? errorMessage.message : errorMessage;\n const defaultValue = select.dataset.defaultValue ?? '';\n // Add \"Error: \" prefix to match old widget behavior and test expectations\n const formattedMessage = message.startsWith('Error: ') ? message : `Error: ${message}`;\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>${formattedMessage}</option>`;\n}\n\n/**\n * Parse boolean from string value\n */\nexport function parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n","/**\n * Event system for widget updates\n */\n\nimport type { SelectElement, UpdateEventDetail } from './types';\n\n/**\n * Dispatch a custom update event for widget changes\n */\nexport function dispatchUpdateEvent(\n select: SelectElement,\n detail: Partial<UpdateEventDetail> = {}\n): void {\n let selectedValues: string[] = [];\n \n if (select.multiple) {\n // For multi-select, selectedOptions is a HTMLCollection, convert to array\n selectedValues = Array.from(select.selectedOptions || [])\n .map((opt) => opt.value)\n .filter((v) => v !== '');\n } else {\n // For single-select, use value\n selectedValues = select.value ? [select.value] : [];\n }\n\n const evt = new CustomEvent<UpdateEventDetail>('countriesWidget:update', {\n bubbles: true,\n detail: {\n value: select.value || '',\n selectedValues,\n name: select.dataset.name || null,\n country: select.dataset.country || null,\n isSubdivision: select.classList.contains('subdivision-selection'),\n ...detail,\n },\n });\n \n select.dispatchEvent(evt);\n}\n\n/**\n * Check if an event was initiated by the widget (not user)\n */\nexport function isWidgetInitiatedEvent(event: Event): boolean {\n return (event as any).isWidgetInitiated === true;\n}\n\n/**\n * Mark an event as widget-initiated\n */\nexport function markEventAsWidgetInitiated(event: Event): void {\n (event as any).isWidgetInitiated = true;\n}\n\n","/**\n * Follow logic for related and upward navigation\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Subdivision } from '@countriesdb/widget-core';\nimport { dispatchUpdateEvent } from './event-system';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport { updateSubdivisionSelect } from './initialization';\n\n/**\n * Trigger follow logic when a subdivision is selected\n */\nexport async function triggerFollowLogic(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated && !followUpward) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // For follow_upward, only work if subdivision is single-select\n if (followUpward && select.multiple) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked) {\n return;\n }\n\n // follow_related\n if (followRelated && picked.related_country_code) {\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset._widgetTempPreselect = targetSubdivision; // one-time preselect\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n }\n\n // follow_upward\n if (followUpward && picked.is_subdivision_of) {\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n relatedSubsSelect.dataset._widgetTempPreselect = parentSub; // one-time preselect\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n }\n}\n\n/**\n * Handle follow_related from subdivision change event\n */\nexport async function handleFollowRelatedFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // Get selected code (for multi-select, use first selected value)\n const selectedCode = select.multiple\n ? (select.selectedOptions[0]?.value || null)\n : select.value;\n \n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.related_country_code) {\n return;\n }\n\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset.preselected = targetSubdivision;\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n}\n\n/**\n * Handle follow_upward from subdivision change event\n */\nexport async function handleFollowUpwardFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followUpward) {\n return;\n }\n \n // Disable for multi-select subdivisions\n if (select.multiple) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n relatedSubsSelect.dataset.preselected = parentSub;\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'follow' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n}\n\n/**\n * Handle follow_upward from country change event\n */\nexport async function handleFollowUpwardFromCountry(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n // Only works when country is single-select (never for multi-select)\n if (!followUpward || select.multiple) {\n return;\n }\n\n const countries = state.countriesMap.get(select);\n if (!countries) {\n return;\n }\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const picked = countries.find((c) => c.iso_alpha_2 === chosen);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (select.value !== parentCode) {\n if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (!s.multiple) {\n s.dataset.preselected = parentSub;\n }\n }\n }\n select.value = parentCode;\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(select, apiKey, parentCode);\n } else if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only update if subdivision is single-select\n if (!s.multiple) {\n await updateSubdivisionSelectFn(s, apiKey, parentCode);\n }\n }\n }\n}\n\n","/**\n * Widget initialization logic\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport {\n initializeSelect,\n populateCountrySelect,\n buildSubdivisionOptionsHTML,\n applyPreselectedValue,\n handleApiError,\n parseBoolean,\n} from './dom-manipulation';\nimport { dispatchUpdateEvent, isWidgetInitiatedEvent } from './event-system';\nimport {\n triggerFollowLogic,\n handleFollowRelatedFromSubdivision,\n handleFollowUpwardFromSubdivision,\n handleFollowUpwardFromCountry,\n} from './follow-logic';\n\n/**\n * Setup subdivision selection elements\n */\nexport async function setupSubdivisionSelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n followRelated: boolean;\n followUpward: boolean;\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n\n for (const select of subdivisionSelects) {\n // Initialize with a default option\n initializeSelect(select, '&mdash;', true);\n\n // Linked country select (if any)\n const countryName = select.dataset.country;\n const linkedCountrySelect = countryName\n ? document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${countryName}\"]`\n )\n : null;\n\n // Check if linked country select is multi-select (not allowed)\n if (linkedCountrySelect && linkedCountrySelect.hasAttribute('multiple')) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\" disabled>Error: Cannot link to multi-select country. Use data-country-code instead.</option>`;\n continue;\n }\n\n // No direct link → maybe data-country-code\n if (!countryName || !linkedCountrySelect) {\n if (\n select.hasAttribute('data-country-code') &&\n select.dataset.countryCode\n ) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n select.dataset.countryCode\n );\n } else {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n }\n\n // Always dispatch an update event for user-initiated subdivision changes\n select.addEventListener('change', (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n dispatchUpdateEvent(select, { type: 'subdivision', reason: 'regular' });\n });\n\n // --- follow_related (forward direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowRelatedFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followRelated,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n\n // --- follow_upward (reverse direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowUpwardFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n }\n}\n\n/**\n * Update subdivision select with data for a specific country\n */\nexport async function updateSubdivisionSelect(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n },\n countryCode: string\n): Promise<void> {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n\n // Check if this is a reload (select was already populated before)\n const isReload = state.subdivisionsMap.has(select);\n\n initializeSelect(select, '&mdash;', true);\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let effectiveCountryCode = countryCode;\n if (!effectiveCountryCode) {\n effectiveCountryCode = select.dataset.countryCode || '';\n }\n\n if (effectiveCountryCode) {\n let valueSetByWidget = false; // Track if a value was set by widget\n try {\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n // Check if this subdivision select prefers official subdivisions\n const preferOfficial = select.hasAttribute('data-prefer-official');\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n undefined,\n undefined\n );\n\n const subdivisionsResult = await CountriesDBClient.fetchSubdivisions({\n apiKey,\n backendUrl,\n countryCode: effectiveCountryCode,\n shouldUseGeoIP,\n preferOfficial,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant,\n languageHeaders,\n });\n\n const subdivisions = subdivisionsResult.data;\n const subdivisionsLanguage = subdivisionsResult.language || 'en';\n\n // Store in memory\n state.subdivisionsMap.set(select, subdivisions);\n state.subdivisionsLanguageMap.set(select, subdivisionsLanguage);\n\n if (subdivisions.length > 0) {\n // Populate <option>\n select.disabled = false;\n\n // Preserve data attributes before setting innerHTML (only for non-multi-select)\n const isMultiple = select.hasAttribute('multiple');\n const dataLabel = !isMultiple ? select.dataset.label : undefined;\n const dataDefaultValue = !isMultiple\n ? select.dataset.defaultValue\n : undefined;\n\n select.innerHTML = buildSubdivisionOptionsHTML(\n subdivisions,\n select,\n subdivisionsLanguage,\n config.showSubdivisionType,\n config.allowParentSelection,\n config.subdivisionNameFilter\n );\n\n // Restore data attributes after setting innerHTML\n if (!isMultiple) {\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n // Manual preselection wins\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'preselected',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false, // followRelated - handled in event listeners\n false, // followUpward - handled in event listeners\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n } else {\n // Try GeoIP preselect\n if (shouldUseGeoIP) {\n const preselectedSubdivision = subdivisions.find(\n (subdivision) => subdivision.preselected\n );\n if (preselectedSubdivision) {\n const isMultiple = select.hasAttribute('multiple');\n if (isMultiple) {\n // For multi-select, find and select the option\n const option = Array.from(select.options).find(\n (opt) => opt.value === preselectedSubdivision.code\n );\n if (option) {\n option.selected = true;\n }\n } else {\n // Single select: set value directly\n select.value = preselectedSubdivision.code;\n }\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'geoip',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false,\n false,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n }\n }\n }\n } else {\n select.disabled = true;\n }\n } catch (error) {\n console.error('Failed to fetch subdivisions:', error);\n handleApiError(select, error as Error);\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // Only fire 'reload' if this is a reload, not initial load\n if (isReload && !valueSetByWidget) {\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'reload',\n });\n }\n }\n } else if (\n !select.dataset.country ||\n !document.querySelector(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n )\n ) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n}\n\n/**\n * Update subdivisions for all linked subdivision selects when country changes\n */\nexport async function updateSubdivisions(\n countrySelect: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n // Don't update subdivisions for multi-select countries (not supported)\n if (countrySelect.hasAttribute('multiple')) {\n return;\n }\n\n const selectedCountry = countrySelect.value;\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${countrySelect.dataset.name}\"]`\n )\n );\n\n for (const select of linkedSubdivisionSelects) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n selectedCountry\n );\n }\n}\n\n/**\n * Setup country selection elements\n */\nexport async function setupCountrySelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n defaultLanguage?: string;\n forcedLanguage?: string;\n isoCountryNames: boolean;\n followRelated: boolean;\n followUpward: boolean;\n countryNameFilter?: (\n code: string,\n name: string,\n language: string,\n item: Country\n ) => string | false | null | undefined;\n },\n subdivisionConfig: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n const seenNames: Record<string, boolean> = {}; // track data-name to detect duplicates\n\n for (const select of countrySelects) {\n const name = select.dataset.name;\n\n // Duplicates\n if (name && seenNames[name]) {\n select.removeAttribute('data-name');\n initializeSelect(select, '&mdash;');\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: Duplicate field</option>`;\n continue;\n }\n if (name) {\n seenNames[name] = true;\n }\n\n // Avoid conflict if mis-classed\n if (select.classList.contains('subdivision-selection')) {\n select.classList.remove('subdivision-selection');\n select.classList.add('subdivision-selection-removed');\n }\n\n // Initialize\n initializeSelect(select, '&mdash;');\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let valueSetByWidget = false; // Track if value was set by widget\n let loadedInitialSubdivisions = false; // Track if subdivisions were loaded\n\n try {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n config.forcedLanguage,\n config.defaultLanguage\n );\n\n // Fetch & populate countries\n const countriesResult = await CountriesDBClient.fetchCountries({\n apiKey,\n backendUrl,\n shouldUseGeoIP,\n isoCountryNames: config.isoCountryNames,\n languageHeaders,\n });\n\n const countries = countriesResult.data;\n const countriesLanguage = countriesResult.language || 'en';\n\n state.countriesMap.set(select, countries);\n populateCountrySelect(\n select,\n countries,\n countriesLanguage,\n config.countryNameFilter\n );\n\n // Apply preselected (manual)\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, { type: 'country', reason: 'preselected' });\n valueSetByWidget = true;\n // Load subdivisions after applying preselected value\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // This will be handled by the updateSubdivisions call below\n // We need to pass the config for subdivisions\n }\n }\n\n // GeoIP auto-select\n if (shouldUseGeoIP) {\n const preselectedCountry = countries.find(\n (country) => country.preselected\n );\n if (preselectedCountry) {\n select.value = preselectedCountry.iso_alpha_2;\n dispatchUpdateEvent(select, { type: 'country', reason: 'geoip' });\n valueSetByWidget = true;\n }\n }\n\n // If already chosen, load subdivisions\n if (\n !loadedInitialSubdivisions &&\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // Subdivisions will be loaded by event handler\n loadedInitialSubdivisions = true;\n }\n\n // On change => update subdivisions\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n\n // Dispatch update event for user-initiated country change\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n\n // Update subdivisions\n await updateSubdivisions(select, apiKey, backendUrl, state, subdivisionConfig);\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const stored = state.countriesMap.get(select) || [];\n const picked = stored.find((c) => c.iso_alpha_2 === chosen);\n if (!picked) {\n return;\n }\n\n // followUpward from country perspective\n // Only works when country is single-select (never for multi-select)\n if (config.followUpward && !select.multiple && picked.is_subdivision_of) {\n await handleFollowUpwardFromCountry(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, subdivisionConfig, code)\n );\n }\n });\n } catch (error) {\n console.error('Failed to fetch countries:', error);\n handleApiError(select, error as Error);\n // Handle subdivision errors\n if (select.dataset.name) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n initializeSelect(s, '&mdash;');\n handleApiError(s, error as Error);\n }\n }\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // If no preselected and no geoip selection happened, emit a regular update\n if (!valueSetByWidget) {\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n }\n }\n }\n}\n\n","/**\n * @countriesdb/widget\n * \n * Plain JavaScript widget for CountriesDB.\n * Provides DOM manipulation and auto-initialization for country/subdivision selects.\n */\n\nimport type { WidgetOptions } from './types';\nimport type { WidgetConfig } from '@countriesdb/widget-core';\nimport { setupCountrySelection, setupSubdivisionSelection, updateSubdivisions } from './initialization';\nimport type { SelectElement, WidgetState } from './types';\n\n// Global namespace to prevent double initialization\nconst NS_KEY = '__CountriesWidgetNS__';\n\ninterface WidgetNamespace {\n initialized: boolean;\n initPromise: Promise<boolean> | null;\n version: number;\n}\n\ndeclare global {\n interface Window {\n [NS_KEY]: WidgetNamespace;\n CountriesWidgetLoad: typeof CountriesWidgetLoad;\n }\n}\n\n/**\n * Main widget initialization function\n */\nasync function CountriesWidgetLoad(\n options: WidgetOptions = {} as WidgetOptions\n): Promise<boolean> {\n // Initialize namespace\n if (!window[NS_KEY]) {\n window[NS_KEY] = {\n initialized: false,\n initPromise: null,\n version: 0,\n };\n }\n\n const NS = window[NS_KEY];\n\n // Share the same promise across concurrent calls\n NS.initPromise = (async () => {\n // Wait for DOM if needed\n if (document.readyState === 'loading') {\n await new Promise<void>((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true,\n });\n });\n }\n\n // Get configuration from options or script URL\n const config = getConfigFromOptionsOrScript(options);\n\n // Validate configuration\n if (!config.publicKey) {\n console.error('CountriesDB Widget: publicKey is required');\n return false;\n }\n\n // Check for conflicting parameters\n if (config.followRelated && config.followUpward) {\n showParamConflictError();\n return false;\n }\n\n // Initialize widget state\n const state: WidgetState = {\n countriesMap: new WeakMap(),\n subdivisionsMap: new WeakMap(),\n subdivisionsLanguageMap: new WeakMap(),\n isInitializing: new Set(),\n };\n\n // Setup subdivisions first (they depend on countries)\n await setupSubdivisionSelection(config.publicKey, config.backendUrl, state, {\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n });\n\n const subdivisionConfig = {\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n };\n\n // Setup countries\n await setupCountrySelection(\n config.publicKey,\n config.backendUrl,\n state,\n {\n defaultLanguage: config.defaultLanguage,\n forcedLanguage: config.forcedLanguage,\n isoCountryNames: config.isoCountryNames || false,\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n countryNameFilter: config.countryNameFilter,\n },\n subdivisionConfig\n );\n\n // After countries are set up, update subdivisions for any preselected countries\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n await updateSubdivisions(select, config.publicKey, config.backendUrl, state, subdivisionConfig);\n }\n }\n\n NS.initialized = true;\n return true;\n })();\n\n return NS.initPromise;\n}\n\n/**\n * Get configuration from options or script URL parameters\n */\nfunction getConfigFromOptionsOrScript(\n options: WidgetOptions\n): WidgetConfig & { backendUrl: string } {\n // Try to get config from script URL (for backward compatibility with widget.blade.php)\n let scriptUrl: URL | null = null;\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n scriptUrl = new URL(loaderScript.src);\n }\n } catch {\n // Ignore errors\n }\n\n const config: WidgetConfig & { backendUrl: string } = {\n publicKey: options.publicKey || scriptUrl?.searchParams.get('public_key') || '',\n backendUrl: options.backendUrl || scriptUrl?.searchParams.get('backend_url') || getBackendUrlFromScript(),\n defaultLanguage: options.defaultLanguage || scriptUrl?.searchParams.get('default_language') || undefined,\n forcedLanguage: options.forcedLanguage || scriptUrl?.searchParams.get('forced_language') || undefined,\n showSubdivisionType: options.showSubdivisionType !== undefined\n ? options.showSubdivisionType\n : parseBoolean(scriptUrl?.searchParams.get('show_subdivision_type') ?? '1'),\n followRelated: options.followRelated !== undefined\n ? options.followRelated\n : parseBoolean(scriptUrl?.searchParams.get('follow_related') ?? 'false'),\n followUpward: options.followUpward !== undefined\n ? options.followUpward\n : parseBoolean(scriptUrl?.searchParams.get('follow_upward') ?? 'false'),\n allowParentSelection: options.allowParentSelection !== undefined\n ? options.allowParentSelection\n : parseBoolean(scriptUrl?.searchParams.get('allow_parent_selection') ?? 'false'),\n isoCountryNames: options.isoCountryNames !== undefined\n ? options.isoCountryNames\n : parseBoolean(scriptUrl?.searchParams.get('iso_country_names') ?? 'false'),\n subdivisionRomanizationPreference:\n options.subdivisionRomanizationPreference ||\n scriptUrl?.searchParams.get('subdivision_romanization_preference') ||\n undefined,\n preferLocalVariant: options.preferLocalVariant !== undefined\n ? options.preferLocalVariant\n : parseBoolean(scriptUrl?.searchParams.get('prefer_local_variant') ?? 'false'),\n countryNameFilter: options.countryNameFilter,\n subdivisionNameFilter: options.subdivisionNameFilter,\n autoInit: options.autoInit !== undefined\n ? options.autoInit\n : parseBoolean(scriptUrl?.searchParams.get('auto_init') ?? 'true'),\n };\n\n // Resolve filter functions from global scope if specified by name\n if (scriptUrl) {\n const countryNameFilterName = scriptUrl.searchParams.get('countryNameFilter');\n if (countryNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[countryNameFilterName];\n if (typeof filter === 'function') {\n config.countryNameFilter = filter;\n }\n }\n\n const subdivisionNameFilterName = scriptUrl.searchParams.get('subdivisionNameFilter');\n if (subdivisionNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[subdivisionNameFilterName];\n if (typeof filter === 'function') {\n config.subdivisionNameFilter = filter;\n }\n }\n }\n\n return config;\n}\n\n/**\n * Get backend URL from script tag or use default\n */\nfunction getBackendUrlFromScript(): string {\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n const scriptUrl = new URL(loaderScript.src);\n const scheme = scriptUrl.protocol;\n const host = scriptUrl.hostname;\n const port = scriptUrl.port ? `:${scriptUrl.port}` : '';\n return `${scheme}//${host}${port}`;\n }\n } catch {\n // Ignore errors\n }\n\n // Default to API domain (never use embedding site's domain)\n return 'https://api.countriesdb.com';\n}\n\n/**\n * Parse boolean from string value\n */\nfunction parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n/**\n * Show error when both follow_related and follow_upward are enabled\n */\nfunction showParamConflictError(): void {\n const errorMessage = 'Error: Cannot enable both follow_related and follow_upward';\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n for (const select of subdivisionSelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n}\n\n// Expose public loader\nif (typeof window !== 'undefined') {\n window.CountriesWidgetLoad = CountriesWidgetLoad;\n\n // Auto-init if script URL has auto_init=true (or not set, default is true)\n // Use a function that waits for DOM to be ready and finds the script tag reliably\n (function checkAutoInit() {\n // Wait for DOM to be ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', checkAutoInit, { once: true });\n return;\n }\n\n // Find the script tag that loaded this widget\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n }\n \n // Default to auto-init = true (only disable if explicitly set to false)\n let shouldAutoInit = true;\n \n if (loaderScript && loaderScript.src) {\n try {\n const scriptUrl = new URL(loaderScript.src);\n const autoInit = scriptUrl.searchParams.get('auto_init');\n // Only disable if explicitly set to false/0\n shouldAutoInit = autoInit === null || autoInit === 'true' || autoInit === '1';\n } catch {\n // If URL parsing fails, default to true (auto-init enabled)\n shouldAutoInit = true;\n }\n }\n \n // Auto-init by default (unless explicitly disabled)\n if (shouldAutoInit) {\n // Use setTimeout to ensure script tag is fully processed\n setTimeout(() => {\n CountriesWidgetLoad().catch(console.error);\n }, 0);\n }\n })();\n}\n\n// Export for ES modules\nexport default CountriesWidgetLoad;\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/dom-manipulation.ts","../src/event-system.ts","../src/follow-logic.ts","../src/initialization.ts","../src/index.ts"],"sourcesContent":["/**\n * DOM manipulation utilities\n */\n\nimport type { SelectElement } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport {\n applyCountryNameFilter,\n sortCountries,\n buildSubdivisionTree,\n flattenSubdivisionOptions,\n parseNestingPrefixes,\n} from '@countriesdb/widget-core';\n\n/**\n * Initialize a select element with default option\n */\nexport function initializeSelect(\n select: SelectElement,\n fallbackLabel: string = 'Not Applicable',\n isSubdivision: boolean = false\n): void {\n const isMultiple = select.hasAttribute('multiple');\n\n // For multi-select, don't add default option or use data-label/data-default-value\n if (isMultiple) {\n select.innerHTML = '';\n // Remove data-label and data-default-value for multi-select (they're ignored)\n if (select.dataset.label !== undefined) {\n delete select.dataset.label;\n }\n if (select.dataset.defaultValue !== undefined) {\n delete select.dataset.defaultValue;\n }\n } else {\n const dataLabel = select.dataset.label;\n const dataDefaultValue = select.dataset.defaultValue;\n\n const label = dataLabel || fallbackLabel;\n const defaultValue = dataDefaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\">${label}</option>`;\n\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n if (isSubdivision) {\n select.disabled = true;\n }\n}\n\n/**\n * Populate a select element with countries\n */\nexport function populateCountrySelect(\n select: SelectElement,\n countries: Country[],\n language: string,\n countryNameFilter?: (code: string, name: string, lang: string, item: Country) => string | false | null | undefined\n): void {\n // Apply filter and get display names\n let filteredCountries = applyCountryNameFilter(countries, countryNameFilter, language);\n \n // Sort if filter was applied\n if (countryNameFilter) {\n filteredCountries = sortCountries(filteredCountries, language);\n }\n\n // Clear existing options (except default)\n const defaultOption = select.querySelector('option[value=\"\"]') || \n (select.dataset.defaultValue ? select.querySelector(`option[value=\"${select.dataset.defaultValue}\"]`) : null);\n const defaultValue = select.dataset.defaultValue ?? '';\n \n // Keep default option if it exists\n select.innerHTML = defaultOption ? defaultOption.outerHTML : `<option value=\"${defaultValue}\">${select.dataset.label || '&mdash;'}</option>`;\n\n // Add country options\n filteredCountries.forEach((country) => {\n const option = document.createElement('option');\n option.value = country.iso_alpha_2;\n option.textContent = country._displayName;\n select.appendChild(option);\n });\n}\n\n/**\n * Populate a select element with subdivisions\n */\nexport function buildSubdivisionOptionsHTML(\n subdivisions: Subdivision[],\n select: SelectElement,\n language: string,\n showSubdivisionType: boolean,\n allowParentSelection: boolean,\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined\n): string {\n const tree = buildSubdivisionTree(subdivisions);\n \n // Parse nesting prefixes from data attributes\n const dataAttributes: Record<string, string | undefined> = {};\n for (let lvl = 1; lvl <= 10; lvl++) {\n const key = `nested${lvl}Prefix`;\n const value = select.dataset[key];\n if (value !== undefined) {\n dataAttributes[`nested${lvl}Prefix`] = value;\n } else {\n break;\n }\n }\n const prefixes = parseNestingPrefixes(dataAttributes);\n \n const isMultiple = select.hasAttribute('multiple');\n const labelKey = showSubdivisionType ? 'full_name' : 'name';\n\n let html = '';\n // For multi-select, don't add default option\n if (!isMultiple) {\n const defaultLabel = select.dataset.label || '&mdash;';\n const defaultValue = select.dataset.defaultValue ?? '';\n html = `<option value=\"${defaultValue}\">${defaultLabel}</option>`;\n }\n\n html += flattenSubdivisionOptions(\n tree,\n 0,\n prefixes,\n labelKey,\n language,\n allowParentSelection,\n subdivisionNameFilter\n );\n \n return html;\n}\n\n/**\n * Apply preselected value to a select element\n */\nexport function applyPreselectedValue(\n select: SelectElement,\n value: string\n): void {\n if (!value || value.trim() === '') {\n return;\n }\n\n const isMultiple = select.hasAttribute('multiple');\n\n if (isMultiple) {\n // For multi-select, parse comma-separated values\n const values = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '');\n // Select all matching options\n Array.from(select.options).forEach((option) => {\n option.selected = values.includes(option.value);\n });\n } else {\n // Single select: set single value\n select.value = value;\n }\n}\n\n/**\n * Handle API error by showing error message in select\n */\nexport function handleApiError(\n select: SelectElement,\n errorMessage: string | Error\n): void {\n const message = errorMessage instanceof Error ? errorMessage.message : errorMessage;\n const defaultValue = select.dataset.defaultValue ?? '';\n // Add \"Error: \" prefix to match old widget behavior and test expectations\n const formattedMessage = message.startsWith('Error: ') ? message : `Error: ${message}`;\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>${formattedMessage}</option>`;\n}\n\n/**\n * Parse boolean from string value\n */\nexport function parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n","/**\n * Event system for widget updates\n */\n\nimport type { SelectElement, UpdateEventDetail } from './types';\n\n/**\n * Dispatch a custom update event for widget changes\n */\nexport function dispatchUpdateEvent(\n select: SelectElement,\n detail: Partial<UpdateEventDetail> = {}\n): void {\n let selectedValues: string[] = [];\n \n if (select.multiple) {\n // For multi-select, selectedOptions is a HTMLCollection, convert to array\n selectedValues = Array.from(select.selectedOptions || [])\n .map((opt) => opt.value)\n .filter((v) => v !== '');\n } else {\n // For single-select, use value\n selectedValues = select.value ? [select.value] : [];\n }\n\n const evt = new CustomEvent<UpdateEventDetail>('countriesWidget:update', {\n bubbles: true,\n detail: {\n value: select.value || '',\n selectedValues,\n name: select.dataset.name || null,\n country: select.dataset.country || null,\n isSubdivision: select.classList.contains('subdivision-selection'),\n ...detail,\n },\n });\n \n select.dispatchEvent(evt);\n}\n\n/**\n * Check if an event was initiated by the widget (not user)\n */\nexport function isWidgetInitiatedEvent(event: Event): boolean {\n return (event as any).isWidgetInitiated === true;\n}\n\n/**\n * Mark an event as widget-initiated\n */\nexport function markEventAsWidgetInitiated(event: Event): void {\n (event as any).isWidgetInitiated = true;\n}\n\n","/**\n * Follow logic for related and upward navigation\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Subdivision } from '@countriesdb/widget-core';\nimport { dispatchUpdateEvent } from './event-system';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport { updateSubdivisionSelect } from './initialization';\n\n/**\n * Trigger follow logic when a subdivision is selected\n */\nexport async function triggerFollowLogic(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated && !followUpward) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // For follow_upward, only work if subdivision is single-select\n if (followUpward && select.multiple) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked) {\n return;\n }\n\n // follow_related\n if (followRelated && picked.related_country_code) {\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset._widgetTempPreselect = targetSubdivision; // one-time preselect\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n }\n\n // follow_upward\n if (followUpward && picked.is_subdivision_of) {\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n relatedSubsSelect.dataset._widgetTempPreselect = parentSub; // one-time preselect\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n }\n}\n\n/**\n * Handle follow_related from subdivision change event\n */\nexport async function handleFollowRelatedFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // Get selected code (for multi-select, use first selected value)\n const selectedCode = select.multiple\n ? (select.selectedOptions[0]?.value || null)\n : select.value;\n \n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.related_country_code) {\n return;\n }\n\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset.preselected = targetSubdivision;\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n}\n\n/**\n * Handle follow_upward from subdivision change event\n */\nexport async function handleFollowUpwardFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followUpward) {\n return;\n }\n \n // Disable for multi-select subdivisions\n if (select.multiple) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n relatedSubsSelect.dataset.preselected = parentSub;\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'follow' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n}\n\n/**\n * Handle follow_upward from country change event\n */\nexport async function handleFollowUpwardFromCountry(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n // Only works when country is single-select (never for multi-select)\n if (!followUpward || select.multiple) {\n return;\n }\n\n const countries = state.countriesMap.get(select);\n if (!countries) {\n return;\n }\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const picked = countries.find((c) => c.iso_alpha_2 === chosen);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (select.value !== parentCode) {\n if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (!s.multiple) {\n s.dataset.preselected = parentSub;\n }\n }\n }\n select.value = parentCode;\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(select, apiKey, parentCode);\n } else if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only update if subdivision is single-select\n if (!s.multiple) {\n await updateSubdivisionSelectFn(s, apiKey, parentCode);\n }\n }\n }\n}\n\n","/**\n * Widget initialization logic\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport {\n initializeSelect,\n populateCountrySelect,\n buildSubdivisionOptionsHTML,\n applyPreselectedValue,\n handleApiError,\n parseBoolean,\n} from './dom-manipulation';\nimport { dispatchUpdateEvent, isWidgetInitiatedEvent } from './event-system';\nimport {\n triggerFollowLogic,\n handleFollowRelatedFromSubdivision,\n handleFollowUpwardFromSubdivision,\n handleFollowUpwardFromCountry,\n} from './follow-logic';\n\n/**\n * Setup subdivision selection elements\n */\nexport async function setupSubdivisionSelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n followRelated: boolean;\n followUpward: boolean;\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n\n for (const select of subdivisionSelects) {\n // Initialize with a default option\n initializeSelect(select, '&mdash;', true);\n\n // Linked country select (if any)\n const countryName = select.dataset.country;\n const linkedCountrySelect = countryName\n ? document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${countryName}\"]`\n )\n : null;\n\n // Check if linked country select is multi-select (not allowed)\n if (linkedCountrySelect && linkedCountrySelect.hasAttribute('multiple')) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\" disabled>Error: Cannot link to multi-select country. Use data-country-code instead.</option>`;\n continue;\n }\n\n // No direct link → maybe data-country-code\n if (!countryName || !linkedCountrySelect) {\n if (\n select.hasAttribute('data-country-code') &&\n select.dataset.countryCode\n ) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n select.dataset.countryCode\n );\n } else {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n }\n\n // Always dispatch an update event for user-initiated subdivision changes\n select.addEventListener('change', (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n dispatchUpdateEvent(select, { type: 'subdivision', reason: 'regular' });\n });\n\n // --- follow_related (forward direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowRelatedFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followRelated,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n\n // --- follow_upward (reverse direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowUpwardFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n }\n}\n\n/**\n * Update subdivision select with data for a specific country\n */\nexport async function updateSubdivisionSelect(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n },\n countryCode: string\n): Promise<void> {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n\n // Check if this is a reload (select was already populated before)\n const isReload = state.subdivisionsMap.has(select);\n\n initializeSelect(select, '&mdash;', true);\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let effectiveCountryCode = countryCode;\n if (!effectiveCountryCode) {\n effectiveCountryCode = select.dataset.countryCode || '';\n }\n\n if (effectiveCountryCode) {\n let valueSetByWidget = false; // Track if a value was set by widget\n try {\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n // Check if this subdivision select prefers official subdivisions\n const preferOfficial = select.hasAttribute('data-prefer-official');\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n undefined,\n undefined\n );\n\n const subdivisionsResult = await CountriesDBClient.fetchSubdivisions({\n apiKey,\n backendUrl,\n countryCode: effectiveCountryCode,\n shouldUseGeoIP,\n preferOfficial,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant,\n languageHeaders,\n });\n\n const subdivisions = subdivisionsResult.data;\n const subdivisionsLanguage = subdivisionsResult.language || 'en';\n\n // Store in memory\n state.subdivisionsMap.set(select, subdivisions);\n state.subdivisionsLanguageMap.set(select, subdivisionsLanguage);\n\n if (subdivisions.length > 0) {\n // Populate <option>\n select.disabled = false;\n\n // Preserve data attributes before setting innerHTML (only for non-multi-select)\n const isMultiple = select.hasAttribute('multiple');\n const dataLabel = !isMultiple ? select.dataset.label : undefined;\n const dataDefaultValue = !isMultiple\n ? select.dataset.defaultValue\n : undefined;\n\n select.innerHTML = buildSubdivisionOptionsHTML(\n subdivisions,\n select,\n subdivisionsLanguage,\n config.showSubdivisionType,\n config.allowParentSelection,\n config.subdivisionNameFilter\n );\n\n // Restore data attributes after setting innerHTML\n if (!isMultiple) {\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n // Manual preselection wins\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'preselected',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false, // followRelated - handled in event listeners\n false, // followUpward - handled in event listeners\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n } else {\n // Try GeoIP preselect\n if (shouldUseGeoIP) {\n const preselectedSubdivision = subdivisions.find(\n (subdivision) => subdivision.preselected\n );\n if (preselectedSubdivision) {\n const isMultiple = select.hasAttribute('multiple');\n if (isMultiple) {\n // For multi-select, find and select the option\n const option = Array.from(select.options).find(\n (opt) => opt.value === preselectedSubdivision.code\n );\n if (option) {\n option.selected = true;\n }\n } else {\n // Single select: set value directly\n select.value = preselectedSubdivision.code;\n }\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'geoip',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false,\n false,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n }\n }\n }\n } else {\n select.disabled = true;\n }\n } catch (error) {\n console.error('Failed to fetch subdivisions:', error);\n handleApiError(select, error as Error);\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // Only fire 'reload' if this is a reload, not initial load\n if (isReload && !valueSetByWidget) {\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'reload',\n });\n }\n }\n } else if (\n !select.dataset.country ||\n !document.querySelector(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n )\n ) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n}\n\n/**\n * Update subdivisions for all linked subdivision selects when country changes\n */\nexport async function updateSubdivisions(\n countrySelect: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n // Don't update subdivisions for multi-select countries (not supported)\n if (countrySelect.hasAttribute('multiple')) {\n return;\n }\n\n const selectedCountry = countrySelect.value;\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${countrySelect.dataset.name}\"]`\n )\n );\n\n for (const select of linkedSubdivisionSelects) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n selectedCountry\n );\n }\n}\n\n/**\n * Setup country selection elements\n */\nexport async function setupCountrySelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n defaultLanguage?: string;\n forcedLanguage?: string;\n isoCountryNames: boolean;\n followRelated: boolean;\n followUpward: boolean;\n countryNameFilter?: (\n code: string,\n name: string,\n language: string,\n item: Country\n ) => string | false | null | undefined;\n },\n subdivisionConfig: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n const seenNames: Record<string, boolean> = {}; // track data-name to detect duplicates\n\n for (const select of countrySelects) {\n const name = select.dataset.name;\n\n // Duplicates\n if (name && seenNames[name]) {\n select.removeAttribute('data-name');\n initializeSelect(select, '&mdash;');\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: Duplicate field</option>`;\n continue;\n }\n if (name) {\n seenNames[name] = true;\n }\n\n // Note: Class renaming is now handled earlier in fixMisClassedElements()\n // This check is kept as a safety net but should not be needed\n\n // Initialize\n initializeSelect(select, '&mdash;');\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let valueSetByWidget = false; // Track if value was set by widget\n let loadedInitialSubdivisions = false; // Track if subdivisions were loaded\n\n try {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n config.forcedLanguage,\n config.defaultLanguage\n );\n\n // Fetch & populate countries\n const countriesResult = await CountriesDBClient.fetchCountries({\n apiKey,\n backendUrl,\n shouldUseGeoIP,\n isoCountryNames: config.isoCountryNames,\n languageHeaders,\n });\n\n const countries = countriesResult.data;\n const countriesLanguage = countriesResult.language || 'en';\n\n state.countriesMap.set(select, countries);\n populateCountrySelect(\n select,\n countries,\n countriesLanguage,\n config.countryNameFilter\n );\n\n // Apply preselected (manual)\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, { type: 'country', reason: 'preselected' });\n valueSetByWidget = true;\n // Load subdivisions after applying preselected value\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // This will be handled by the updateSubdivisions call below\n // We need to pass the config for subdivisions\n }\n }\n\n // GeoIP auto-select\n if (shouldUseGeoIP) {\n const preselectedCountry = countries.find(\n (country) => country.preselected\n );\n if (preselectedCountry) {\n select.value = preselectedCountry.iso_alpha_2;\n dispatchUpdateEvent(select, { type: 'country', reason: 'geoip' });\n valueSetByWidget = true;\n }\n }\n\n // If already chosen, load subdivisions\n if (\n !loadedInitialSubdivisions &&\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // Subdivisions will be loaded by event handler\n loadedInitialSubdivisions = true;\n }\n\n // On change => update subdivisions\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n\n // Dispatch update event for user-initiated country change\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n\n // Update subdivisions\n await updateSubdivisions(select, apiKey, backendUrl, state, subdivisionConfig);\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const stored = state.countriesMap.get(select) || [];\n const picked = stored.find((c) => c.iso_alpha_2 === chosen);\n if (!picked) {\n return;\n }\n\n // followUpward from country perspective\n // Only works when country is single-select (never for multi-select)\n if (config.followUpward && !select.multiple && picked.is_subdivision_of) {\n await handleFollowUpwardFromCountry(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, subdivisionConfig, code)\n );\n }\n });\n } catch (error) {\n console.error('Failed to fetch countries:', error);\n handleApiError(select, error as Error);\n // Handle subdivision errors\n if (select.dataset.name) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n initializeSelect(s, '&mdash;');\n handleApiError(s, error as Error);\n }\n }\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // If no preselected and no geoip selection happened, emit a regular update\n if (!valueSetByWidget) {\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n }\n }\n }\n}\n\n","/**\n * @countriesdb/widget\n * \n * Plain JavaScript widget for CountriesDB.\n * Provides DOM manipulation and auto-initialization for country/subdivision selects.\n */\n\nimport type { WidgetOptions } from './types';\nimport type { WidgetConfig } from '@countriesdb/widget-core';\nimport { setupCountrySelection, setupSubdivisionSelection, updateSubdivisions } from './initialization';\nimport type { SelectElement, WidgetState } from './types';\n\n// Global namespace to prevent double initialization\nconst NS_KEY = '__CountriesWidgetNS__';\n\ninterface WidgetNamespace {\n initialized: boolean;\n initPromise: Promise<boolean> | null;\n version: number;\n}\n\ndeclare global {\n interface Window {\n [NS_KEY]: WidgetNamespace;\n CountriesWidgetLoad: typeof CountriesWidgetLoad;\n }\n}\n\n/**\n * Main widget initialization function\n */\nasync function CountriesWidgetLoad(\n options: WidgetOptions = {} as WidgetOptions\n): Promise<boolean> {\n // Initialize namespace\n if (!window[NS_KEY]) {\n window[NS_KEY] = {\n initialized: false,\n initPromise: null,\n version: 0,\n };\n }\n\n const NS = window[NS_KEY];\n\n // Share the same promise across concurrent calls\n NS.initPromise = (async () => {\n // Wait for DOM if needed\n if (document.readyState === 'loading') {\n await new Promise<void>((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true,\n });\n });\n }\n\n // Get configuration from options or script URL\n const config = getConfigFromOptionsOrScript(options);\n\n // Fix mis-classed elements early (DOM cleanup that should always happen)\n fixMisClassedElements();\n\n // Check for conflicting parameters\n if (config.followRelated && config.followUpward) {\n showParamConflictError();\n return false;\n }\n\n // Initialize widget state\n const state: WidgetState = {\n countriesMap: new WeakMap(),\n subdivisionsMap: new WeakMap(),\n subdivisionsLanguageMap: new WeakMap(),\n isInitializing: new Set(),\n };\n\n // Use empty string if publicKey is missing (will show error when API calls fail)\n const apiKey = config.publicKey || '';\n\n // Setup subdivisions first (they depend on countries)\n await setupSubdivisionSelection(apiKey, config.backendUrl, state, {\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n });\n\n const subdivisionConfig = {\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n };\n\n // Setup countries\n await setupCountrySelection(\n apiKey,\n config.backendUrl,\n state,\n {\n defaultLanguage: config.defaultLanguage,\n forcedLanguage: config.forcedLanguage,\n isoCountryNames: config.isoCountryNames || false,\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n countryNameFilter: config.countryNameFilter,\n },\n subdivisionConfig\n );\n\n // After countries are set up, update subdivisions for any preselected countries\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n await updateSubdivisions(select, apiKey, config.backendUrl, state, subdivisionConfig);\n }\n }\n\n NS.initialized = true;\n return true;\n })();\n\n return NS.initPromise;\n}\n\n/**\n * Get configuration from options or script URL parameters\n */\nfunction getConfigFromOptionsOrScript(\n options: WidgetOptions\n): WidgetConfig & { backendUrl: string } {\n // Try to get config from script URL (for backward compatibility with widget.blade.php)\n let scriptUrl: URL | null = null;\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n scriptUrl = new URL(loaderScript.src);\n }\n } catch {\n // Ignore errors\n }\n\n const config: WidgetConfig & { backendUrl: string } = {\n publicKey: options.publicKey || scriptUrl?.searchParams.get('public_key') || '',\n backendUrl: options.backendUrl || scriptUrl?.searchParams.get('backend_url') || getBackendUrlFromScript(),\n defaultLanguage: options.defaultLanguage || scriptUrl?.searchParams.get('default_language') || undefined,\n forcedLanguage: options.forcedLanguage || scriptUrl?.searchParams.get('forced_language') || undefined,\n showSubdivisionType: options.showSubdivisionType !== undefined\n ? options.showSubdivisionType\n : parseBoolean(scriptUrl?.searchParams.get('show_subdivision_type') ?? '1'),\n followRelated: options.followRelated !== undefined\n ? options.followRelated\n : parseBoolean(scriptUrl?.searchParams.get('follow_related') ?? 'false'),\n followUpward: options.followUpward !== undefined\n ? options.followUpward\n : parseBoolean(scriptUrl?.searchParams.get('follow_upward') ?? 'false'),\n allowParentSelection: options.allowParentSelection !== undefined\n ? options.allowParentSelection\n : parseBoolean(scriptUrl?.searchParams.get('allow_parent_selection') ?? 'false'),\n isoCountryNames: options.isoCountryNames !== undefined\n ? options.isoCountryNames\n : parseBoolean(scriptUrl?.searchParams.get('iso_country_names') ?? 'false'),\n subdivisionRomanizationPreference:\n options.subdivisionRomanizationPreference ||\n scriptUrl?.searchParams.get('subdivision_romanization_preference') ||\n undefined,\n preferLocalVariant: options.preferLocalVariant !== undefined\n ? options.preferLocalVariant\n : parseBoolean(scriptUrl?.searchParams.get('prefer_local_variant') ?? 'false'),\n countryNameFilter: options.countryNameFilter,\n subdivisionNameFilter: options.subdivisionNameFilter,\n autoInit: options.autoInit !== undefined\n ? options.autoInit\n : parseBoolean(scriptUrl?.searchParams.get('auto_init') ?? 'true'),\n };\n\n // Resolve filter functions from global scope if specified by name\n if (scriptUrl) {\n const countryNameFilterName = scriptUrl.searchParams.get('countryNameFilter');\n if (countryNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[countryNameFilterName];\n if (typeof filter === 'function') {\n config.countryNameFilter = filter;\n }\n }\n\n const subdivisionNameFilterName = scriptUrl.searchParams.get('subdivisionNameFilter');\n if (subdivisionNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[subdivisionNameFilterName];\n if (typeof filter === 'function') {\n config.subdivisionNameFilter = filter;\n }\n }\n }\n\n return config;\n}\n\n/**\n * Get backend URL from script tag or use default\n */\nfunction getBackendUrlFromScript(): string {\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n const scriptUrl = new URL(loaderScript.src);\n const scheme = scriptUrl.protocol;\n const host = scriptUrl.hostname;\n const port = scriptUrl.port ? `:${scriptUrl.port}` : '';\n return `${scheme}//${host}${port}`;\n }\n } catch {\n // Ignore errors\n }\n\n // Default to API domain (never use embedding site's domain)\n return 'https://api.countriesdb.com';\n}\n\n/**\n * Fix mis-classed elements (e.g., country-selection with subdivision-selection class)\n * This should happen early, before API calls, as it's just DOM cleanup\n */\nfunction fixMisClassedElements(): void {\n const countrySelects = Array.from(\n document.querySelectorAll<HTMLSelectElement>('.country-selection')\n );\n \n for (const select of countrySelects) {\n // Avoid conflict if mis-classed\n if (select.classList.contains('subdivision-selection')) {\n select.classList.remove('subdivision-selection');\n select.classList.add('subdivision-selection-removed');\n }\n }\n}\n\n/**\n * Parse boolean from string value\n */\nfunction parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n/**\n * Show error when both follow_related and follow_upward are enabled\n */\nfunction showParamConflictError(): void {\n const errorMessage = 'Error: Cannot enable both follow_related and follow_upward';\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n for (const select of subdivisionSelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n}\n\n// Expose public loader\nif (typeof window !== 'undefined') {\n window.CountriesWidgetLoad = CountriesWidgetLoad;\n\n // Auto-init if script URL has auto_init=true (or not set, default is true)\n // Use a function that waits for DOM to be ready and finds the script tag reliably\n (function checkAutoInit() {\n // Wait for DOM to be ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', checkAutoInit, { once: true });\n return;\n }\n\n // Find the script tag that loaded this widget\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n }\n \n // Default to auto-init = true (only disable if explicitly set to false)\n let shouldAutoInit = true;\n \n if (loaderScript && loaderScript.src) {\n try {\n const scriptUrl = new URL(loaderScript.src);\n const autoInit = scriptUrl.searchParams.get('auto_init');\n // Only disable if explicitly set to false/0\n shouldAutoInit = autoInit === null || autoInit === 'true' || autoInit === '1';\n } catch {\n // If URL parsing fails, default to true (auto-init enabled)\n shouldAutoInit = true;\n }\n }\n \n // Auto-init by default (unless explicitly disabled)\n if (shouldAutoInit) {\n // Use setTimeout to ensure script tag is fully processed\n setTimeout(() => {\n CountriesWidgetLoad().catch(console.error);\n }, 0);\n }\n })();\n}\n\n// Export for ES modules\nexport default CountriesWidgetLoad;\n\n"],"names":[],"mappings":";;AAAA;;AAEG;AAYH;;AAEG;AACG,SAAU,gBAAgB,CAC9B,MAAqB,EACrB,aAAA,GAAwB,gBAAgB,EACxC,aAAA,GAAyB,KAAK,EAAA;IAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;;IAGlD,IAAI,UAAU,EAAE;AACd,QAAA,MAAM,CAAC,SAAS,GAAG,EAAE;;QAErB,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK;QAC7B;QACA,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;AAC7C,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY;QACpC;IACF;SAAO;AACL,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK;AACtC,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY;AAEpD,QAAA,MAAM,KAAK,GAAG,SAAS,IAAI,aAAa;AACxC,QAAA,MAAM,YAAY,GAAG,gBAAgB,IAAI,EAAE;QAC3C,MAAM,CAAC,SAAS,GAAG,CAAA,eAAA,EAAkB,YAAY,CAAA,EAAA,EAAK,KAAK,WAAW;AAEtE,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS;QAClC;AACA,QAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAClC,YAAA,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,gBAAgB;QAChD;IACF;IAEA,IAAI,aAAa,EAAE;AACjB,QAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;IACxB;AACF;AAEA;;AAEG;AACG,SAAU,qBAAqB,CACnC,MAAqB,EACrB,SAAoB,EACpB,QAAgB,EAChB,iBAAkH,EAAA;;IAGlH,IAAI,iBAAiB,GAAG,sBAAsB,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC;;IAGtF,IAAI,iBAAiB,EAAE;AACrB,QAAA,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IAChE;;AAGA,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;SAC3D,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC,GAAG,IAAI,CAAC;IAC/G,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;;IAGtD,MAAM,CAAC,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC,SAAS,GAAG,CAAA,eAAA,EAAkB,YAAY,CAAA,EAAA,EAAK,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,CAAA,SAAA,CAAW;;AAG5I,IAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW;AAClC,QAAA,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY;AACzC,QAAA,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;AAC5B,IAAA,CAAC,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,2BAA2B,CACzC,YAA2B,EAC3B,MAAqB,EACrB,QAAgB,EAChB,mBAA4B,EAC5B,oBAA6B,EAC7B,qBAMsC,EAAA;AAEtC,IAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,YAAY,CAAC;;IAG/C,MAAM,cAAc,GAAuC,EAAE;AAC7D,IAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;AAClC,QAAA,MAAM,GAAG,GAAG,CAAA,MAAA,EAAS,GAAG,QAAQ;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,cAAc,CAAC,CAAA,MAAA,EAAS,GAAG,QAAQ,CAAC,GAAG,KAAK;QAC9C;aAAO;YACL;QACF;IACF;AACA,IAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC;IAErD,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAClD,MAAM,QAAQ,GAAG,mBAAmB,GAAG,WAAW,GAAG,MAAM;IAE3D,IAAI,IAAI,GAAG,EAAE;;IAEb,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;AACtD,QAAA,IAAI,GAAG,CAAA,eAAA,EAAkB,YAAY,CAAA,EAAA,EAAK,YAAY,WAAW;IACnE;AAEA,IAAA,IAAI,IAAI,yBAAyB,CAC/B,IAAI,EACJ,CAAC,EACD,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,CACtB;AAED,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACG,SAAU,qBAAqB,CACnC,MAAqB,EACrB,KAAa,EAAA;IAEb,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjC;IACF;IAEA,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAElD,IAAI,UAAU,EAAE;;QAEd,MAAM,MAAM,GAAG;aACZ,KAAK,CAAC,GAAG;aACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;aACnB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;;AAE1B,QAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC5C,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AACjD,QAAA,CAAC,CAAC;IACJ;SAAO;;AAEL,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;IACtB;AACF;AAEA;;AAEG;AACG,SAAU,cAAc,CAC5B,MAAqB,EACrB,YAA4B,EAAA;AAE5B,IAAA,MAAM,OAAO,GAAG,YAAY,YAAY,KAAK,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY;IACnF,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;;AAEtD,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,GAAG,CAAA,OAAA,EAAU,OAAO,EAAE;IACtF,MAAM,CAAC,SAAS,IAAI,CAAA,eAAA,EAAkB,YAAY,CAAA,WAAA,EAAc,gBAAgB,WAAW;AAC7F;;AC1LA;;AAEG;AAIH;;AAEG;SACa,mBAAmB,CACjC,MAAqB,EACrB,SAAqC,EAAE,EAAA;IAEvC,IAAI,cAAc,GAAa,EAAE;AAEjC,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;;QAEnB,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE;aACrD,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK;aACtB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B;SAAO;;AAEL,QAAA,cAAc,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;IACrD;AAEA,IAAA,MAAM,GAAG,GAAG,IAAI,WAAW,CAAoB,wBAAwB,EAAE;AACvE,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,cAAc;AACd,YAAA,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI;AACjC,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI;YACvC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACjE,YAAA,GAAG,MAAM;AACV,SAAA;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3B;AAEA;;AAEG;AACG,SAAU,sBAAsB,CAAC,KAAY,EAAA;AACjD,IAAA,OAAQ,KAAa,CAAC,iBAAiB,KAAK,IAAI;AAClD;;AC7CA;;AAEG;AAQH;;AAEG;AACI,eAAe,kBAAkB,CACtC,MAAqB,EACrB,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,aAAsB,EACtB,YAAqB,EACrB,yBAIkB,EAAA;AAElB,IAAqC;QACnC;IACF;AAmFF;AAEA;;AAEG;AACI,eAAe,kCAAkC,CACtD,MAAqB,EACrB,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,aAAsB,EACtB,yBAIkB,EAAA;IAElB,IAAI,CAAC,aAAa,EAAE;QAClB;IACF;AAEA,IAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAChD,CAAA,8BAAA,EAAiC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAA,EAAA,CAAI,CAC5D;;AAGD,IAAA,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,QAAQ,EAAE;QACxD;IACF;IAEA,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE;QACZ;IACF;;AAGA,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC;AAC1B,WAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI;AAC3C,UAAE,MAAM,CAAC,KAAK;IAEhB,IAAI,CAAC,YAAY,EAAE;QACjB;IACF;AAEA,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;IAC3D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;QAC3C;IACF;AAEA,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB;AACjD,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,wBAAwB;AAEzD,IAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAC9C,CAAA,qCAAA,EAAwC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI,CAC7E;AAED,IAAA,IAAI,iBAAiB,IAAI,iBAAiB,EAAE;AAC1C,QAAA,iBAAiB,CAAC,OAAO,CAAC,WAAW,GAAG,iBAAiB;IAC3D;AAEA,IAAA,IAAI,mBAAmB,CAAC,KAAK,KAAK,aAAa,EAAE;AAC/C,QAAA,mBAAmB,CAAC,KAAK,GAAG,aAAa;AACzC,QAAA,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAChF,MAAM,yBAAyB,CAAC,mBAAmB,EAAE,MAAM,EAAE,aAAa,CAAC;IAC7E;SAAO;AACL,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,EAAE;YAC1C,MAAM,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,EAAE,aAAa,CAAC;QAC3E;IACF;AACF;AAEA;;AAEG;AACI,eAAe,iCAAiC,CACrD,MAAqB,EACrB,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,YAAqB,EACrB,yBAIkB,EAAA;IAElB,IAAI,CAAC,YAAY,EAAE;QACjB;IACF;;AAGA,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnB;IACF;AAEA,IAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAChD,CAAA,8BAAA,EAAiC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAA,EAAA,CAAI,CAC5D;;AAGD,IAAA,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,QAAQ,EAAE;QACxD;IACF;IAEA,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE;QACZ;IACF;AAEA,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK;IACjC,IAAI,CAAC,YAAY,EAAE;QACjB;IACF;AAEA,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;IAC3D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACxC;IACF;AAEA,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,mBAAmB;AAC/D,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,gBAAgB;IAE3D,IAAI,SAAS,EAAE;AACb,QAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAC9C,CAAA,qCAAA,EAAwC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI,CAC7E;QACD,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS;QACnD;IACF;AAEA,IAAA,IAAI,mBAAmB,CAAC,KAAK,KAAK,UAAU,EAAE;AAC5C,QAAA,mBAAmB,CAAC,KAAK,GAAG,UAAU;AACtC,QAAA,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC/E,MAAM,yBAAyB,CAAC,mBAAmB,EAAE,MAAM,EAAE,UAAU,CAAC;IAC1E;SAAO,IAAI,SAAS,EAAE;AACpB,QAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAC9C,CAAA,qCAAA,EAAwC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI,CAC7E;QACD,IAAI,iBAAiB,EAAE;YACrB,MAAM,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,EAAE,UAAU,CAAC;QACxE;IACF;AACF;AAEA;;AAEG;AACI,eAAe,6BAA6B,CACjD,MAAqB,EACrB,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,YAAqB,EACrB,yBAIkB,EAAA;;AAGlB,IAAA,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE;QACpC;IACF;IAEA,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE;QACd;IACF;AAEA,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;IAC3B,IAAI,CAAC,MAAM,EAAE;QACX;IACF;AAEA,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC;IAC9D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACxC;IACF;AAEA,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,mBAAmB;AAC/D,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,gBAAgB;AAE3D,IAAA,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;QAC/B,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,wBAAwB,GAAG,KAAK,CAAC,IAAI,CACzC,QAAQ,CAAC,gBAAgB,CACvB,CAAA,qCAAA,EAAwC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI,CAChE,CACF;AACD,YAAA,KAAK,MAAM,CAAC,IAAI,wBAAwB,EAAE;;AAExC,gBAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;AACf,oBAAA,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS;gBACnC;YACF;QACF;AACA,QAAA,MAAM,CAAC,KAAK,GAAG,UAAU;AACzB,QAAA,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACnE,MAAM,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;IAC7D;SAAO,IAAI,SAAS,EAAE;AACpB,QAAA,MAAM,wBAAwB,GAAG,KAAK,CAAC,IAAI,CACzC,QAAQ,CAAC,gBAAgB,CACvB,CAAA,qCAAA,EAAwC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI,CAChE,CACF;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,wBAAwB,EAAE;;AAExC,YAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACf,MAAM,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC;YACxD;QACF;IACF;AACF;;ACpUA;;AAEG;AAqBH;;AAEG;AACI,eAAe,yBAAyB,CAC7C,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,MAcC,EAAA;AAED,IAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CACnC,QAAQ,CAAC,gBAAgB,CAAgB,wBAAwB,CAAC,CACnE;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE;;AAEvC,QAAA,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;;AAGzC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO;QAC1C,MAAM,mBAAmB,GAAG;cACxB,QAAQ,CAAC,aAAa,CACpB,CAAA,8BAAA,EAAiC,WAAW,IAAI;cAElD,IAAI;;QAGR,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;YACvE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;AACtD,YAAA,MAAM,CAAC,SAAS,GAAG,CAAA,eAAA,EAAkB,YAAY,gGAAgG;YACjJ;QACF;;AAGA,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,mBAAmB,EAAE;AACxC,YAAA,IACE,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC;AACxC,gBAAA,MAAM,CAAC,OAAO,CAAC,WAAW,EAC1B;AACA,gBAAA,MAAM,uBAAuB,CAC3B,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,EACN,MAAM,CAAC,OAAO,CAAC,WAAW,CAC3B;YACH;iBAAO;gBACL,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;AACtD,gBAAA,MAAM,CAAC,SAAS,IAAI,CAAA,eAAA,EAAkB,YAAY,sDAAsD;YAC1G;QACF;;QAGA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAY,KAAI;AACjD,YAAA,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE;gBACjC;YACF;AACA,YAAA,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACzE,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,KAAY,KAAI;AACvD,YAAA,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE;gBACjC;YACF;AACA,YAAA,MAAM,kCAAkC,CACtC,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,CAAC,aAAa,EACpB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KACX,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CACnE;AACH,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,KAAY,KAAI;AACvD,YAAA,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE;gBACjC;YACF;AACA,YAAA,MAAM,iCAAiC,CACrC,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,CAAC,YAAY,EACnB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KACX,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CACnE;AACH,QAAA,CAAC,CAAC;IACJ;AACF;AAEA;;AAEG;AACI,eAAe,uBAAuB,CAC3C,MAAqB,EACrB,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,MAYC,EACD,WAAmB,EAAA;AAEnB,IAAA,MAAM,gBAAgB,GACpB,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW;;IAGvE,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AAElD,IAAA,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;;AAGzC,IAAA,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;IAEhC,IAAI,oBAAoB,GAAG,WAAW;IACtC,IAAI,CAAC,oBAAoB,EAAE;QACzB,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE;IACzD;IAEA,IAAI,oBAAoB,EAAE;AACxB,QAAA,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAC7B,QAAA,IAAI;;YAEF,MAAM,cAAc,GAClB,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,IAAI;;YAG7D,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC;YAElE,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,CAC1D,SAAS,EACT,SAAS,CACV;AAED,YAAA,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC;gBACnE,MAAM;gBACN,UAAU;AACV,gBAAA,WAAW,EAAE,oBAAoB;gBACjC,cAAc;gBACd,cAAc;gBACd,iCAAiC,EAAE,MAAM,CAAC,iCAAiC;gBAC3E,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,eAAe;AAChB,aAAA,CAAC;AAEF,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI;AAC5C,YAAA,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,QAAQ,IAAI,IAAI;;YAGhE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;YAC/C,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC;AAE/D,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE3B,gBAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;;gBAGvB,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;AAClD,gBAAA,MAAM,SAAS,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS;gBAChE,MAAM,gBAAgB,GAAG,CAAC;AACxB,sBAAE,MAAM,CAAC,OAAO,CAAC;sBACf,SAAS;gBAEb,MAAM,CAAC,SAAS,GAAG,2BAA2B,CAC5C,YAAY,EACZ,MAAM,EACN,oBAAoB,EACpB,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,qBAAqB,CAC7B;;gBAGD,IAAI,CAAC,UAAU,EAAE;AACf,oBAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,wBAAA,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS;oBAClC;AACA,oBAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAClC,wBAAA,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,gBAAgB;oBAChD;gBACF;;gBAGA,IACE,gBAAgB,KAAK,SAAS;AAC9B,oBAAA,gBAAgB,KAAK,IAAI;AACzB,oBAAA,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,EAC9B;AACA,oBAAA,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC;oBAC/C,mBAAmB,CAAC,MAAM,EAAE;AAC1B,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,MAAM,EAAE,aAAa;AACtB,qBAAA,CAAC;oBACF,gBAAgB,GAAG,IAAI;AACvB,oBAAA,MAAM,kBAAkB,CACtB,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EACL,KAAK;AACL,oBAAA,KAAK;oBACL,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KACX,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CACnE;gBACH;qBAAO;;oBAEL,IAAI,cAAc,EAAE;AAClB,wBAAA,MAAM,sBAAsB,GAAG,YAAY,CAAC,IAAI,CAC9C,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW,CACzC;wBACD,IAAI,sBAAsB,EAAE;4BAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;4BAClD,IAAI,UAAU,EAAE;;gCAEd,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5C,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,sBAAsB,CAAC,IAAI,CACnD;gCACD,IAAI,MAAM,EAAE;AACV,oCAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;gCACxB;4BACF;iCAAO;;AAEL,gCAAA,MAAM,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI;4BAC5C;4BACA,mBAAmB,CAAC,MAAM,EAAE;AAC1B,gCAAA,IAAI,EAAE,aAAa;AACnB,gCAAA,MAAM,EAAE,OAAO;AAChB,6BAAA,CAAC;4BACF,gBAAgB,GAAG,IAAI;AACvB,4BAAA,MAAM,kBAAkB,CACtB,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EACL,KAAK,EACL,KAAK,EACL,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KACX,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CACnE;wBACH;oBACF;gBACF;YACF;iBAAO;AACL,gBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;YACxB;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,YAAA,cAAc,CAAC,MAAM,EAAE,KAAc,CAAC;QACxC;gBAAU;;AAER,YAAA,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;;AAEnC,YAAA,IAAI,QAAQ,IAAI,CAAC,gBAAgB,EAAE;gBACjC,mBAAmB,CAAC,MAAM,EAAE;AAC1B,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,MAAM,EAAE,QAAQ;AACjB,iBAAA,CAAC;YACJ;QACF;IACF;AAAO,SAAA,IACL,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;AACvB,QAAA,CAAC,QAAQ,CAAC,aAAa,CACrB,CAAA,8BAAA,EAAiC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAA,EAAA,CAAI,CAC5D,EACD;QACA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;AACtD,QAAA,MAAM,CAAC,SAAS,IAAI,CAAA,eAAA,EAAkB,YAAY,sDAAsD;IAC1G;AACF;AAEA;;AAEG;AACI,eAAe,kBAAkB,CACtC,aAA4B,EAC5B,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,MAYC,EAAA;;AAGD,IAAA,IAAI,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QAC1C;IACF;AAEA,IAAA,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK;AAC3C,IAAA,MAAM,wBAAwB,GAAG,KAAK,CAAC,IAAI,CACzC,QAAQ,CAAC,gBAAgB,CACvB,CAAA,qCAAA,EAAwC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI,CACvE,CACF;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,wBAAwB,EAAE;AAC7C,QAAA,MAAM,uBAAuB,CAC3B,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,EACN,eAAe,CAChB;IACH;AACF;AAEA;;AAEG;AACI,eAAe,qBAAqB,CACzC,MAAc,EACd,UAAkB,EAClB,KAAkB,EAClB,MAYC,EACD,iBAYC,EAAA;AAED,IAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAgB,oBAAoB,CAAC,CAC/D;AACD,IAAA,MAAM,SAAS,GAA4B,EAAE,CAAC;AAE9C,IAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;AACnC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI;;AAGhC,QAAA,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AAC3B,YAAA,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC;AACnC,YAAA,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;AACtD,YAAA,MAAM,CAAC,SAAS,IAAI,CAAA,eAAA,EAAkB,YAAY,4CAA4C;YAC9F;QACF;QACA,IAAI,IAAI,EAAE;AACR,YAAA,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI;QACxB;;;;AAMA,QAAA,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC;;AAGnC,QAAA,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AAEhC,QAAA,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAC7B,QAAA,IAAI,yBAAyB,GAAG,KAAK,CAAC;AAEtC,QAAA,IAAI;AACF,YAAA,MAAM,gBAAgB,GACpB,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW;;YAEvE,MAAM,cAAc,GAClB,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,IAAI;AAE7D,YAAA,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,CAC1D,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,eAAe,CACvB;;AAGD,YAAA,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC;gBAC7D,MAAM;gBACN,UAAU;gBACV,cAAc;gBACd,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,eAAe;AAChB,aAAA,CAAC;AAEF,YAAA,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI;AACtC,YAAA,MAAM,iBAAiB,GAAG,eAAe,CAAC,QAAQ,IAAI,IAAI;YAE1D,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;YACzC,qBAAqB,CACnB,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,MAAM,CAAC,iBAAiB,CACzB;;YAGD,IACE,gBAAgB,KAAK,SAAS;AAC9B,gBAAA,gBAAgB,KAAK,IAAI;AACzB,gBAAA,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,EAC9B;AACA,gBAAA,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC;AAC/C,gBAAA,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;gBACvE,gBAAgB,GAAG,IAAI;;gBAEvB,IACE,MAAM,CAAC,KAAK;AACZ,oBAAA,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EACpD;;;gBAGF;YACF;;YAGA,IAAI,cAAc,EAAE;AAClB,gBAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CACvC,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,CACjC;gBACD,IAAI,kBAAkB,EAAE;AACtB,oBAAA,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW;AAC7C,oBAAA,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;oBACjE,gBAAgB,GAAG,IAAI;gBACzB;YACF;;AAGA,YAAA,IACE,CAAC,yBAAyB;AAC1B,gBAAA,MAAM,CAAC,KAAK;AACZ,gBAAA,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EACpD;;gBAEA,yBAAyB,GAAG,IAAI;YAClC;;YAGA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,KAAY,KAAI;AACvD,gBAAA,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE;oBACjC;gBACF;;AAGA,gBAAA,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;;AAGnE,gBAAA,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,CAAC;AAE9E,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;gBAC3B,IAAI,CAAC,MAAM,EAAE;oBACX;gBACF;AAEA,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AACnD,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC;gBAC3D,IAAI,CAAC,MAAM,EAAE;oBACX;gBACF;;;AAIA,gBAAA,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,iBAAiB,EAAE;AACvE,oBAAA,MAAM,6BAA6B,CACjC,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,CAAC,YAAY,EACnB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KACX,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAC9E;gBACH;AACF,YAAA,CAAC,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;AAClD,YAAA,cAAc,CAAC,MAAM,EAAE,KAAc,CAAC;;AAEtC,YAAA,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;AACvB,gBAAA,MAAM,wBAAwB,GAAG,KAAK,CAAC,IAAI,CACzC,QAAQ,CAAC,gBAAgB,CACvB,CAAA,qCAAA,EAAwC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI,CAChE,CACF;AACD,gBAAA,KAAK,MAAM,CAAC,IAAI,wBAAwB,EAAE;AACxC,oBAAA,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC;AAC9B,oBAAA,cAAc,CAAC,CAAC,EAAE,KAAc,CAAC;gBACnC;YACF;QACF;gBAAU;;AAER,YAAA,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;;YAEnC,IAAI,CAAC,gBAAgB,EAAE;AACrB,gBAAA,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACrE;QACF;IACF;AACF;;ACvjBA;;;;;AAKG;AAOH;AACA,MAAM,MAAM,GAAG,uBAAuB;AAetC;;AAEG;AACH,eAAe,mBAAmB,CAChC,OAAA,GAAyB,EAAmB,EAAA;;AAG5C,IAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACnB,MAAM,CAAC,MAAM,CAAC,GAAG;AACf,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,OAAO,EAAE,CAAC;SACX;IACH;AAEA,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;;AAGzB,IAAA,EAAE,CAAC,WAAW,GAAG,CAAC,YAAW;;AAE3B,QAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;AACrC,YAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;gBAClC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,OAAO,EAAE,EAAE;AAC7D,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,MAAM,MAAM,GAAG,4BAA4B,CAAC,OAAO,CAAC;;AAGpD,QAAA,qBAAqB,EAAE;;QAGvB,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,YAAY,EAAE;AAC/C,YAAA,sBAAsB,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,MAAM,KAAK,GAAgB;YACzB,YAAY,EAAE,IAAI,OAAO,EAAE;YAC3B,eAAe,EAAE,IAAI,OAAO,EAAE;YAC9B,uBAAuB,EAAE,IAAI,OAAO,EAAE;YACtC,cAAc,EAAE,IAAI,GAAG,EAAE;SAC1B;;AAGD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE;;QAGrC,MAAM,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE;AAChE,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;AAC5C,YAAA,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK;AAC1C,YAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,KAAK,KAAK;AACzD,YAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,KAAK;YAC1D,iCAAiC,EAAE,MAAM,CAAC,iCAAiC;AAC3E,YAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;YACtD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;AACpD,SAAA,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAG;AACxB,YAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,KAAK,KAAK;AACzD,YAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,KAAK;YAC1D,iCAAiC,EAAE,MAAM,CAAC,iCAAiC;AAC3E,YAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;YACtD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;SACpD;;QAGD,MAAM,qBAAqB,CACzB,MAAM,EACN,MAAM,CAAC,UAAU,EACjB,KAAK,EACL;YACE,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,YAAA,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;AAChD,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;AAC5C,YAAA,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK;YAC1C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;SAC5C,EACD,iBAAiB,CAClB;;AAGD,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAgB,oBAAoB,CAAC,CAC/D;AACD,QAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;YACnC,IACE,MAAM,CAAC,KAAK;AACZ,gBAAA,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EACpD;AACA,gBAAA,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,iBAAiB,CAAC;YACvF;QACF;AAEA,QAAA,EAAE,CAAC,WAAW,GAAG,IAAI;AACrB,QAAA,OAAO,IAAI;IACb,CAAC,GAAG;IAEJ,OAAO,EAAE,CAAC,WAAW;AACvB;AAEA;;AAEG;AACH,SAAS,4BAA4B,CACnC,OAAsB,EAAA;;IAGtB,IAAI,SAAS,GAAe,IAAI;AAChC,IAAA,IAAI;QACF,IAAI,YAAY,GAA6B,IAAI;;QAGjD,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,YAAY,iBAAiB,EAAE;AACjF,YAAA,YAAY,GAAG,QAAQ,CAAC,aAAa;QACvC;aAAO;;AAEL,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACnE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAC5B,CAAC,CAAC,GAAG,KACH,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACrC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CACvC,CACmB,IAAI,IAAI;;YAG9B,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAuB,IAAI,IAAI;YAChF;QACF;AAEA,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,EAAE;YACpC,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC;QACvC;IACF;AAAE,IAAA,MAAM;;IAER;AAEA,IAAA,MAAM,MAAM,GAA0C;AACpD,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;AAC/E,QAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,uBAAuB,EAAE;AACzG,QAAA,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,SAAS;AACxG,QAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,SAAS;AACrG,QAAA,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,KAAK;cACjD,OAAO,CAAC;AACV,cAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC;AAC7E,QAAA,aAAa,EAAE,OAAO,CAAC,aAAa,KAAK;cACrC,OAAO,CAAC;AACV,cAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC;AAC1E,QAAA,YAAY,EAAE,OAAO,CAAC,YAAY,KAAK;cACnC,OAAO,CAAC;AACV,cAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC;AACzE,QAAA,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,KAAK;cACnD,OAAO,CAAC;AACV,cAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,OAAO,CAAC;AAClF,QAAA,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK;cACzC,OAAO,CAAC;AACV,cAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC;QAC7E,iCAAiC,EAC/B,OAAO,CAAC,iCAAiC;AACzC,YAAA,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,qCAAqC,CAAC;YAClE,SAAS;AACX,QAAA,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,KAAK;cAC/C,OAAO,CAAC;AACV,cAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC;QAChF,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;AACpD,QAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK;cAC3B,OAAO,CAAC;AACV,cAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC;KACrE;;IAGD,IAAI,SAAS,EAAE;QACb,MAAM,qBAAqB,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC7E,QAAA,IAAI,qBAAqB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAC1D,YAAA,MAAM,MAAM,GAAI,MAAc,CAAC,qBAAqB,CAAC;AACrD,YAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,gBAAA,MAAM,CAAC,iBAAiB,GAAG,MAAM;YACnC;QACF;QAEA,MAAM,yBAAyB,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC;AACrF,QAAA,IAAI,yBAAyB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAC9D,YAAA,MAAM,MAAM,GAAI,MAAc,CAAC,yBAAyB,CAAC;AACzD,YAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,gBAAA,MAAM,CAAC,qBAAqB,GAAG,MAAM;YACvC;QACF;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACH,SAAS,uBAAuB,GAAA;AAC9B,IAAA,IAAI;QACF,IAAI,YAAY,GAA6B,IAAI;;QAGjD,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,YAAY,iBAAiB,EAAE;AACjF,YAAA,YAAY,GAAG,QAAQ,CAAC,aAAa;QACvC;aAAO;;AAEL,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACnE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAC5B,CAAC,CAAC,GAAG,KACH,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACrC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CACvC,CACmB,IAAI,IAAI;;YAG9B,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAuB,IAAI,IAAI;YAChF;QACF;AAEA,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,EAAE;YACpC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC;AAC3C,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ;AACjC,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ;AAC/B,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,SAAS,CAAC,IAAI,CAAA,CAAE,GAAG,EAAE;AACvD,YAAA,OAAO,GAAG,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,EAAG,IAAI,EAAE;QACpC;IACF;AAAE,IAAA,MAAM;;IAER;;AAGA,IAAA,OAAO,6BAA6B;AACtC;AAEA;;;AAGG;AACH,SAAS,qBAAqB,GAAA;AAC5B,IAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAoB,oBAAoB,CAAC,CACnE;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;;QAEnC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;AACtD,YAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC;AAChD,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,+BAA+B,CAAC;QACvD;IACF;AACF;AAEA;;AAEG;AACH,SAAS,YAAY,CAAC,KAAgC,EAAA;IACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IAClD,OAAO,EAAE,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,OAAO,CAAC;AAClD;AAEA;;AAEG;AACH,SAAS,sBAAsB,GAAA;IAC7B,MAAM,YAAY,GAAG,4DAA4D;AACjF,IAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAgB,oBAAoB,CAAC,CAC/D;AACD,IAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;AACnC,QAAA,MAAM,CAAC,SAAS,GAAG,CAAA,eAAA,EAAkB,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAA,WAAA,EAAc,YAAY,WAAW;IAC7G;AACA,IAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CACnC,QAAQ,CAAC,gBAAgB,CAAgB,wBAAwB,CAAC,CACnE;AACD,IAAA,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE;AACvC,QAAA,MAAM,CAAC,SAAS,GAAG,CAAA,eAAA,EAAkB,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAA,WAAA,EAAc,YAAY,WAAW;IAC7G;AACF;AAEA;AACA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,IAAA,MAAM,CAAC,mBAAmB,GAAG,mBAAmB;;;AAIhD,IAAA,CAAC,SAAS,aAAa,GAAA;;AAErB,QAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;AACrC,YAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC5E;QACF;;QAGA,IAAI,YAAY,GAA6B,IAAI;;QAGjD,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,YAAY,iBAAiB,EAAE;AACjF,YAAA,YAAY,GAAG,QAAQ,CAAC,aAAa;QACvC;aAAO;;AAEL,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACnE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAC5B,CAAC,CAAC,GAAG,KACH,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACrC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CACvC,CACmB,IAAI,IAAI;QAChC;;QAGA,IAAI,cAAc,GAAG,IAAI;AAEzB,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,EAAE;AACpC,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC;gBAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;;AAExD,gBAAA,cAAc,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG;YAC/E;AAAE,YAAA,MAAM;;gBAEN,cAAc,GAAG,IAAI;YACvB;QACF;;QAGA,IAAI,cAAc,EAAE;;YAElB,UAAU,CAAC,MAAK;gBACd,mBAAmB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5C,CAAC,EAAE,CAAC,CAAC;QACP;IACF,CAAC,GAAG;AACN;;;;"}
package/dist/index.js CHANGED
@@ -771,11 +771,8 @@
771
771
  if (name) {
772
772
  seenNames[name] = true;
773
773
  }
774
- // Avoid conflict if mis-classed
775
- if (select.classList.contains('subdivision-selection')) {
776
- select.classList.remove('subdivision-selection');
777
- select.classList.add('subdivision-selection-removed');
778
- }
774
+ // Note: Class renaming is now handled earlier in fixMisClassedElements()
775
+ // This check is kept as a safety net but should not be needed
779
776
  // Initialize
780
777
  initializeSelect(select, '&mdash;');
781
778
  // Mark as initializing to prevent change events
@@ -910,11 +907,8 @@
910
907
  }
911
908
  // Get configuration from options or script URL
912
909
  const config = getConfigFromOptionsOrScript(options);
913
- // Validate configuration
914
- if (!config.publicKey) {
915
- console.error('CountriesDB Widget: publicKey is required');
916
- return false;
917
- }
910
+ // Fix mis-classed elements early (DOM cleanup that should always happen)
911
+ fixMisClassedElements();
918
912
  // Check for conflicting parameters
919
913
  if (config.followRelated && config.followUpward) {
920
914
  showParamConflictError();
@@ -927,8 +921,10 @@
927
921
  subdivisionsLanguageMap: new WeakMap(),
928
922
  isInitializing: new Set(),
929
923
  };
924
+ // Use empty string if publicKey is missing (will show error when API calls fail)
925
+ const apiKey = config.publicKey || '';
930
926
  // Setup subdivisions first (they depend on countries)
931
- await setupSubdivisionSelection(config.publicKey, config.backendUrl, state, {
927
+ await setupSubdivisionSelection(apiKey, config.backendUrl, state, {
932
928
  followRelated: config.followRelated || false,
933
929
  followUpward: config.followUpward || false,
934
930
  showSubdivisionType: config.showSubdivisionType !== false,
@@ -945,7 +941,7 @@
945
941
  subdivisionNameFilter: config.subdivisionNameFilter,
946
942
  };
947
943
  // Setup countries
948
- await setupCountrySelection(config.publicKey, config.backendUrl, state, {
944
+ await setupCountrySelection(apiKey, config.backendUrl, state, {
949
945
  defaultLanguage: config.defaultLanguage,
950
946
  forcedLanguage: config.forcedLanguage,
951
947
  isoCountryNames: config.isoCountryNames || false,
@@ -958,7 +954,7 @@
958
954
  for (const select of countrySelects) {
959
955
  if (select.value &&
960
956
  select.value !== (select.dataset.defaultValue || '')) {
961
- await updateSubdivisions(select, config.publicKey, config.backendUrl, state, subdivisionConfig);
957
+ await updateSubdivisions(select, apiKey, config.backendUrl, state, subdivisionConfig);
962
958
  }
963
959
  }
964
960
  NS.initialized = true;
@@ -1080,6 +1076,20 @@
1080
1076
  // Default to API domain (never use embedding site's domain)
1081
1077
  return 'https://api.countriesdb.com';
1082
1078
  }
1079
+ /**
1080
+ * Fix mis-classed elements (e.g., country-selection with subdivision-selection class)
1081
+ * This should happen early, before API calls, as it's just DOM cleanup
1082
+ */
1083
+ function fixMisClassedElements() {
1084
+ const countrySelects = Array.from(document.querySelectorAll('.country-selection'));
1085
+ for (const select of countrySelects) {
1086
+ // Avoid conflict if mis-classed
1087
+ if (select.classList.contains('subdivision-selection')) {
1088
+ select.classList.remove('subdivision-selection');
1089
+ select.classList.add('subdivision-selection-removed');
1090
+ }
1091
+ }
1092
+ }
1083
1093
  /**
1084
1094
  * Parse boolean from string value
1085
1095
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../widget-core/dist/esm/api-client.js","../../widget-core/dist/esm/subdivision-tree.js","../../widget-core/dist/esm/filters.js","../src/dom-manipulation.ts","../src/event-system.ts","../src/follow-logic.ts","../src/initialization.ts","../src/index.ts"],"sourcesContent":["/**\n * API client for CountriesDB API\n */\nexport class CountriesDBClient {\n /**\n * Fetch countries from the API\n */\n static async fetchCountries(options) {\n const { apiKey, backendUrl, shouldUseGeoIP = true, isoCountryNames = false, languageHeaders = {}, } = options;\n const base = `${backendUrl}/api/countries`;\n const params = [];\n if (!shouldUseGeoIP) {\n params.push('no_geoip=1');\n }\n if (isoCountryNames) {\n params.push('country_name_source=iso');\n }\n const url = params.length ? `${base}?${params.join('&')}` : base;\n return this.fetchFromApi(url, apiKey, languageHeaders);\n }\n /**\n * Fetch subdivisions for a specific country\n */\n static async fetchSubdivisions(options) {\n const { apiKey, backendUrl, countryCode, shouldUseGeoIP = true, preferOfficial = false, subdivisionRomanizationPreference, preferLocalVariant = false, languageHeaders = {}, } = options;\n if (!countryCode) {\n return { data: [], language: null };\n }\n const base = `${backendUrl}/api/countries/${countryCode}/subdivisions`;\n const params = [];\n if (!shouldUseGeoIP) {\n params.push('no_geoip=1');\n }\n if (subdivisionRomanizationPreference) {\n params.push(`subdivision_romanization_preference=${encodeURIComponent(subdivisionRomanizationPreference)}`);\n }\n if (preferLocalVariant) {\n params.push('prefer_local_variant=1');\n }\n if (preferOfficial) {\n params.push('prefer_official=1');\n }\n const url = params.length ? `${base}?${params.join('&')}` : base;\n return this.fetchFromApi(url, apiKey, languageHeaders);\n }\n /**\n * Generic API fetch method\n */\n static async fetchFromApi(url, apiKey, languageHeaders) {\n try {\n const response = await fetch(url, {\n headers: {\n ...languageHeaders,\n 'X-API-KEY': apiKey,\n 'Content-Type': 'application/json',\n },\n });\n if (!response.ok) {\n let errorMessage = `HTTP Error: ${response.status}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n }\n catch {\n // Ignore JSON parse errors\n }\n throw new Error(errorMessage);\n }\n const data = (await response.json());\n const language = response.headers.get('X-Selected-Language') || null;\n return { data, language };\n }\n catch (error) {\n console.error(`Failed to fetch data from ${url}:`, error);\n throw error;\n }\n }\n /**\n * Get language headers from browser and config\n */\n static getLanguageHeaders(forcedLanguage, defaultLanguage) {\n const headers = {};\n if (forcedLanguage) {\n headers['X-Forced-Language'] = forcedLanguage;\n }\n if (defaultLanguage) {\n headers['X-Default-Language'] = defaultLanguage;\n }\n // Use browser's language preference\n if (typeof navigator !== 'undefined' && navigator.language) {\n headers['Accept-Language'] = navigator.language;\n }\n else {\n headers['Accept-Language'] = 'en';\n }\n return headers;\n }\n}\n","/**\n * Utilities for building and working with subdivision trees\n */\n/**\n * Build a tree structure from a flat list of subdivisions\n */\nexport function buildSubdivisionTree(subdivisions) {\n const map = {};\n const roots = [];\n // Create map of all subdivisions\n subdivisions.forEach((item) => {\n map[item.id] = {\n ...item,\n children: [],\n };\n });\n // Build tree structure\n subdivisions.forEach((item) => {\n const node = map[item.id];\n if (item.parent_id && map[item.parent_id]) {\n map[item.parent_id].children.push(node);\n }\n else {\n roots.push(node);\n }\n });\n return roots;\n}\n/**\n * Flatten subdivision tree into HTML options\n */\nexport function flattenSubdivisionOptions(nodes, level, prefixes, labelKey, language, allowParentSelection, subdivisionNameFilter) {\n let html = '';\n // Apply name filter and get display names\n const nodesWithDisplayNames = nodes\n .map((node) => {\n let displayName = node[labelKey] || node.name;\n const countryCode = node.code ? node.code.split('-')[0] : null;\n // Apply subdivisionNameFilter if provided\n if (subdivisionNameFilter && typeof subdivisionNameFilter === 'function') {\n const filteredName = subdivisionNameFilter(node.code, displayName, language, countryCode, node);\n if (filteredName === false) {\n return null; // Mark for filtering - remove this item\n }\n if (filteredName !== null && filteredName !== undefined) {\n displayName = filteredName;\n }\n }\n return { ...node, _displayName: displayName };\n })\n .filter((node) => node !== null);\n // Sort: use Unicode-aware sorting if subdivisionNameFilter was used\n const locale = subdivisionNameFilter && typeof subdivisionNameFilter === 'function' && language\n ? language\n : undefined;\n nodesWithDisplayNames.sort((a, b) => {\n if (locale) {\n return a._displayName.localeCompare(b._displayName, locale, {\n sensitivity: 'accent', // Case-insensitive, accent-sensitive\n ignorePunctuation: false,\n });\n }\n return a._displayName.localeCompare(b._displayName); // Default behavior\n });\n const prefix = level > 0 ? (prefixes[level] ?? '&nbsp;'.repeat(level * 2)) : '';\n const cssClass = `subdivision-level-${level}`;\n for (const node of nodesWithDisplayNames) {\n const hasChildren = node.children && node.children.length > 0;\n const displayName = node._displayName;\n const label = `${prefix}${displayName}`;\n if (hasChildren) {\n if (allowParentSelection) {\n html += `<option value=\"${node.code}\" class=\"${cssClass}\">${label}</option>`;\n }\n else {\n html += `<option disabled value=\"${node.code}\" class=\"${cssClass}\">${label}</option>`;\n }\n html += flattenSubdivisionOptions(node.children, level + 1, prefixes, labelKey, language, allowParentSelection, subdivisionNameFilter);\n }\n else {\n html += `<option value=\"${node.code}\" class=\"${cssClass}\">${label}</option>`;\n }\n }\n return html;\n}\n/**\n * Parse nesting prefixes from data attributes\n */\nexport function parseNestingPrefixes(dataAttributes) {\n const prefixes = {};\n for (let lvl = 1; lvl <= 10; lvl++) {\n const key = `nested${lvl}Prefix`;\n const value = dataAttributes[key];\n if (value !== undefined) {\n prefixes[lvl] = value;\n }\n else {\n break;\n }\n }\n return prefixes;\n}\n","/**\n * Name filtering utilities\n */\n/**\n * Apply country name filter to a list of countries\n */\nexport function applyCountryNameFilter(countries, filter, language) {\n if (!filter || typeof filter !== 'function') {\n return countries.map((c) => ({ ...c, _displayName: c.name }));\n }\n return countries\n .map((country) => {\n const filteredName = filter(country.iso_alpha_2, country.name, language, country);\n if (filteredName === false) {\n return null; // Skip this item\n }\n const displayName = filteredName !== null && filteredName !== undefined\n ? filteredName\n : country.name;\n return { ...country, _displayName: displayName };\n })\n .filter((c) => c !== null);\n}\n/**\n * Sort countries with Unicode-aware sorting\n */\nexport function sortCountries(countries, language) {\n const locale = language || undefined;\n return [...countries].sort((a, b) => {\n if (locale) {\n return a._displayName.localeCompare(b._displayName, locale, {\n sensitivity: 'accent', // Case-insensitive, accent-sensitive\n ignorePunctuation: false,\n });\n }\n return a._displayName.localeCompare(b._displayName);\n });\n}\n/**\n * Apply subdivision name filter to a list of subdivisions\n */\nexport function applySubdivisionNameFilter(subdivisions, filter, language, countryCode) {\n if (!filter || typeof filter !== 'function') {\n return subdivisions.map((s) => ({\n ...s,\n _displayName: s.full_name || s.name,\n }));\n }\n return subdivisions\n .map((subdivision) => {\n const originalName = subdivision.full_name || subdivision.name;\n const filteredName = filter(subdivision.code, originalName, language, countryCode, subdivision);\n if (filteredName === false) {\n return null; // Skip this item\n }\n const displayName = filteredName !== null && filteredName !== undefined\n ? filteredName\n : originalName;\n return { ...subdivision, _displayName: displayName };\n })\n .filter((s) => s !== null);\n}\n","/**\n * DOM manipulation utilities\n */\n\nimport type { SelectElement } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport {\n applyCountryNameFilter,\n sortCountries,\n buildSubdivisionTree,\n flattenSubdivisionOptions,\n parseNestingPrefixes,\n} from '@countriesdb/widget-core';\n\n/**\n * Initialize a select element with default option\n */\nexport function initializeSelect(\n select: SelectElement,\n fallbackLabel: string = 'Not Applicable',\n isSubdivision: boolean = false\n): void {\n const isMultiple = select.hasAttribute('multiple');\n\n // For multi-select, don't add default option or use data-label/data-default-value\n if (isMultiple) {\n select.innerHTML = '';\n // Remove data-label and data-default-value for multi-select (they're ignored)\n if (select.dataset.label !== undefined) {\n delete select.dataset.label;\n }\n if (select.dataset.defaultValue !== undefined) {\n delete select.dataset.defaultValue;\n }\n } else {\n const dataLabel = select.dataset.label;\n const dataDefaultValue = select.dataset.defaultValue;\n\n const label = dataLabel || fallbackLabel;\n const defaultValue = dataDefaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\">${label}</option>`;\n\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n if (isSubdivision) {\n select.disabled = true;\n }\n}\n\n/**\n * Populate a select element with countries\n */\nexport function populateCountrySelect(\n select: SelectElement,\n countries: Country[],\n language: string,\n countryNameFilter?: (code: string, name: string, lang: string, item: Country) => string | false | null | undefined\n): void {\n // Apply filter and get display names\n let filteredCountries = applyCountryNameFilter(countries, countryNameFilter, language);\n \n // Sort if filter was applied\n if (countryNameFilter) {\n filteredCountries = sortCountries(filteredCountries, language);\n }\n\n // Clear existing options (except default)\n const defaultOption = select.querySelector('option[value=\"\"]') || \n (select.dataset.defaultValue ? select.querySelector(`option[value=\"${select.dataset.defaultValue}\"]`) : null);\n const defaultValue = select.dataset.defaultValue ?? '';\n \n // Keep default option if it exists\n select.innerHTML = defaultOption ? defaultOption.outerHTML : `<option value=\"${defaultValue}\">${select.dataset.label || '&mdash;'}</option>`;\n\n // Add country options\n filteredCountries.forEach((country) => {\n const option = document.createElement('option');\n option.value = country.iso_alpha_2;\n option.textContent = country._displayName;\n select.appendChild(option);\n });\n}\n\n/**\n * Populate a select element with subdivisions\n */\nexport function buildSubdivisionOptionsHTML(\n subdivisions: Subdivision[],\n select: SelectElement,\n language: string,\n showSubdivisionType: boolean,\n allowParentSelection: boolean,\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined\n): string {\n const tree = buildSubdivisionTree(subdivisions);\n \n // Parse nesting prefixes from data attributes\n const dataAttributes: Record<string, string | undefined> = {};\n for (let lvl = 1; lvl <= 10; lvl++) {\n const key = `nested${lvl}Prefix`;\n const value = select.dataset[key];\n if (value !== undefined) {\n dataAttributes[`nested${lvl}Prefix`] = value;\n } else {\n break;\n }\n }\n const prefixes = parseNestingPrefixes(dataAttributes);\n \n const isMultiple = select.hasAttribute('multiple');\n const labelKey = showSubdivisionType ? 'full_name' : 'name';\n\n let html = '';\n // For multi-select, don't add default option\n if (!isMultiple) {\n const defaultLabel = select.dataset.label || '&mdash;';\n const defaultValue = select.dataset.defaultValue ?? '';\n html = `<option value=\"${defaultValue}\">${defaultLabel}</option>`;\n }\n\n html += flattenSubdivisionOptions(\n tree,\n 0,\n prefixes,\n labelKey,\n language,\n allowParentSelection,\n subdivisionNameFilter\n );\n \n return html;\n}\n\n/**\n * Apply preselected value to a select element\n */\nexport function applyPreselectedValue(\n select: SelectElement,\n value: string\n): void {\n if (!value || value.trim() === '') {\n return;\n }\n\n const isMultiple = select.hasAttribute('multiple');\n\n if (isMultiple) {\n // For multi-select, parse comma-separated values\n const values = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '');\n // Select all matching options\n Array.from(select.options).forEach((option) => {\n option.selected = values.includes(option.value);\n });\n } else {\n // Single select: set single value\n select.value = value;\n }\n}\n\n/**\n * Handle API error by showing error message in select\n */\nexport function handleApiError(\n select: SelectElement,\n errorMessage: string | Error\n): void {\n const message = errorMessage instanceof Error ? errorMessage.message : errorMessage;\n const defaultValue = select.dataset.defaultValue ?? '';\n // Add \"Error: \" prefix to match old widget behavior and test expectations\n const formattedMessage = message.startsWith('Error: ') ? message : `Error: ${message}`;\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>${formattedMessage}</option>`;\n}\n\n/**\n * Parse boolean from string value\n */\nexport function parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n","/**\n * Event system for widget updates\n */\n\nimport type { SelectElement, UpdateEventDetail } from './types';\n\n/**\n * Dispatch a custom update event for widget changes\n */\nexport function dispatchUpdateEvent(\n select: SelectElement,\n detail: Partial<UpdateEventDetail> = {}\n): void {\n let selectedValues: string[] = [];\n \n if (select.multiple) {\n // For multi-select, selectedOptions is a HTMLCollection, convert to array\n selectedValues = Array.from(select.selectedOptions || [])\n .map((opt) => opt.value)\n .filter((v) => v !== '');\n } else {\n // For single-select, use value\n selectedValues = select.value ? [select.value] : [];\n }\n\n const evt = new CustomEvent<UpdateEventDetail>('countriesWidget:update', {\n bubbles: true,\n detail: {\n value: select.value || '',\n selectedValues,\n name: select.dataset.name || null,\n country: select.dataset.country || null,\n isSubdivision: select.classList.contains('subdivision-selection'),\n ...detail,\n },\n });\n \n select.dispatchEvent(evt);\n}\n\n/**\n * Check if an event was initiated by the widget (not user)\n */\nexport function isWidgetInitiatedEvent(event: Event): boolean {\n return (event as any).isWidgetInitiated === true;\n}\n\n/**\n * Mark an event as widget-initiated\n */\nexport function markEventAsWidgetInitiated(event: Event): void {\n (event as any).isWidgetInitiated = true;\n}\n\n","/**\n * Follow logic for related and upward navigation\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Subdivision } from '@countriesdb/widget-core';\nimport { dispatchUpdateEvent } from './event-system';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport { updateSubdivisionSelect } from './initialization';\n\n/**\n * Trigger follow logic when a subdivision is selected\n */\nexport async function triggerFollowLogic(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated && !followUpward) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // For follow_upward, only work if subdivision is single-select\n if (followUpward && select.multiple) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked) {\n return;\n }\n\n // follow_related\n if (followRelated && picked.related_country_code) {\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset._widgetTempPreselect = targetSubdivision; // one-time preselect\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n }\n\n // follow_upward\n if (followUpward && picked.is_subdivision_of) {\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n relatedSubsSelect.dataset._widgetTempPreselect = parentSub; // one-time preselect\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n }\n}\n\n/**\n * Handle follow_related from subdivision change event\n */\nexport async function handleFollowRelatedFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // Get selected code (for multi-select, use first selected value)\n const selectedCode = select.multiple\n ? (select.selectedOptions[0]?.value || null)\n : select.value;\n \n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.related_country_code) {\n return;\n }\n\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset.preselected = targetSubdivision;\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n}\n\n/**\n * Handle follow_upward from subdivision change event\n */\nexport async function handleFollowUpwardFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followUpward) {\n return;\n }\n \n // Disable for multi-select subdivisions\n if (select.multiple) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n relatedSubsSelect.dataset.preselected = parentSub;\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'follow' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n}\n\n/**\n * Handle follow_upward from country change event\n */\nexport async function handleFollowUpwardFromCountry(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n // Only works when country is single-select (never for multi-select)\n if (!followUpward || select.multiple) {\n return;\n }\n\n const countries = state.countriesMap.get(select);\n if (!countries) {\n return;\n }\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const picked = countries.find((c) => c.iso_alpha_2 === chosen);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (select.value !== parentCode) {\n if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (!s.multiple) {\n s.dataset.preselected = parentSub;\n }\n }\n }\n select.value = parentCode;\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(select, apiKey, parentCode);\n } else if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only update if subdivision is single-select\n if (!s.multiple) {\n await updateSubdivisionSelectFn(s, apiKey, parentCode);\n }\n }\n }\n}\n\n","/**\n * Widget initialization logic\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport {\n initializeSelect,\n populateCountrySelect,\n buildSubdivisionOptionsHTML,\n applyPreselectedValue,\n handleApiError,\n parseBoolean,\n} from './dom-manipulation';\nimport { dispatchUpdateEvent, isWidgetInitiatedEvent } from './event-system';\nimport {\n triggerFollowLogic,\n handleFollowRelatedFromSubdivision,\n handleFollowUpwardFromSubdivision,\n handleFollowUpwardFromCountry,\n} from './follow-logic';\n\n/**\n * Setup subdivision selection elements\n */\nexport async function setupSubdivisionSelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n followRelated: boolean;\n followUpward: boolean;\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n\n for (const select of subdivisionSelects) {\n // Initialize with a default option\n initializeSelect(select, '&mdash;', true);\n\n // Linked country select (if any)\n const countryName = select.dataset.country;\n const linkedCountrySelect = countryName\n ? document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${countryName}\"]`\n )\n : null;\n\n // Check if linked country select is multi-select (not allowed)\n if (linkedCountrySelect && linkedCountrySelect.hasAttribute('multiple')) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\" disabled>Error: Cannot link to multi-select country. Use data-country-code instead.</option>`;\n continue;\n }\n\n // No direct link → maybe data-country-code\n if (!countryName || !linkedCountrySelect) {\n if (\n select.hasAttribute('data-country-code') &&\n select.dataset.countryCode\n ) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n select.dataset.countryCode\n );\n } else {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n }\n\n // Always dispatch an update event for user-initiated subdivision changes\n select.addEventListener('change', (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n dispatchUpdateEvent(select, { type: 'subdivision', reason: 'regular' });\n });\n\n // --- follow_related (forward direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowRelatedFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followRelated,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n\n // --- follow_upward (reverse direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowUpwardFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n }\n}\n\n/**\n * Update subdivision select with data for a specific country\n */\nexport async function updateSubdivisionSelect(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n },\n countryCode: string\n): Promise<void> {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n\n // Check if this is a reload (select was already populated before)\n const isReload = state.subdivisionsMap.has(select);\n\n initializeSelect(select, '&mdash;', true);\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let effectiveCountryCode = countryCode;\n if (!effectiveCountryCode) {\n effectiveCountryCode = select.dataset.countryCode || '';\n }\n\n if (effectiveCountryCode) {\n let valueSetByWidget = false; // Track if a value was set by widget\n try {\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n // Check if this subdivision select prefers official subdivisions\n const preferOfficial = select.hasAttribute('data-prefer-official');\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n undefined,\n undefined\n );\n\n const subdivisionsResult = await CountriesDBClient.fetchSubdivisions({\n apiKey,\n backendUrl,\n countryCode: effectiveCountryCode,\n shouldUseGeoIP,\n preferOfficial,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant,\n languageHeaders,\n });\n\n const subdivisions = subdivisionsResult.data;\n const subdivisionsLanguage = subdivisionsResult.language || 'en';\n\n // Store in memory\n state.subdivisionsMap.set(select, subdivisions);\n state.subdivisionsLanguageMap.set(select, subdivisionsLanguage);\n\n if (subdivisions.length > 0) {\n // Populate <option>\n select.disabled = false;\n\n // Preserve data attributes before setting innerHTML (only for non-multi-select)\n const isMultiple = select.hasAttribute('multiple');\n const dataLabel = !isMultiple ? select.dataset.label : undefined;\n const dataDefaultValue = !isMultiple\n ? select.dataset.defaultValue\n : undefined;\n\n select.innerHTML = buildSubdivisionOptionsHTML(\n subdivisions,\n select,\n subdivisionsLanguage,\n config.showSubdivisionType,\n config.allowParentSelection,\n config.subdivisionNameFilter\n );\n\n // Restore data attributes after setting innerHTML\n if (!isMultiple) {\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n // Manual preselection wins\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'preselected',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false, // followRelated - handled in event listeners\n false, // followUpward - handled in event listeners\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n } else {\n // Try GeoIP preselect\n if (shouldUseGeoIP) {\n const preselectedSubdivision = subdivisions.find(\n (subdivision) => subdivision.preselected\n );\n if (preselectedSubdivision) {\n const isMultiple = select.hasAttribute('multiple');\n if (isMultiple) {\n // For multi-select, find and select the option\n const option = Array.from(select.options).find(\n (opt) => opt.value === preselectedSubdivision.code\n );\n if (option) {\n option.selected = true;\n }\n } else {\n // Single select: set value directly\n select.value = preselectedSubdivision.code;\n }\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'geoip',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false,\n false,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n }\n }\n }\n } else {\n select.disabled = true;\n }\n } catch (error) {\n console.error('Failed to fetch subdivisions:', error);\n handleApiError(select, error as Error);\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // Only fire 'reload' if this is a reload, not initial load\n if (isReload && !valueSetByWidget) {\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'reload',\n });\n }\n }\n } else if (\n !select.dataset.country ||\n !document.querySelector(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n )\n ) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n}\n\n/**\n * Update subdivisions for all linked subdivision selects when country changes\n */\nexport async function updateSubdivisions(\n countrySelect: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n // Don't update subdivisions for multi-select countries (not supported)\n if (countrySelect.hasAttribute('multiple')) {\n return;\n }\n\n const selectedCountry = countrySelect.value;\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${countrySelect.dataset.name}\"]`\n )\n );\n\n for (const select of linkedSubdivisionSelects) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n selectedCountry\n );\n }\n}\n\n/**\n * Setup country selection elements\n */\nexport async function setupCountrySelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n defaultLanguage?: string;\n forcedLanguage?: string;\n isoCountryNames: boolean;\n followRelated: boolean;\n followUpward: boolean;\n countryNameFilter?: (\n code: string,\n name: string,\n language: string,\n item: Country\n ) => string | false | null | undefined;\n },\n subdivisionConfig: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n const seenNames: Record<string, boolean> = {}; // track data-name to detect duplicates\n\n for (const select of countrySelects) {\n const name = select.dataset.name;\n\n // Duplicates\n if (name && seenNames[name]) {\n select.removeAttribute('data-name');\n initializeSelect(select, '&mdash;');\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: Duplicate field</option>`;\n continue;\n }\n if (name) {\n seenNames[name] = true;\n }\n\n // Avoid conflict if mis-classed\n if (select.classList.contains('subdivision-selection')) {\n select.classList.remove('subdivision-selection');\n select.classList.add('subdivision-selection-removed');\n }\n\n // Initialize\n initializeSelect(select, '&mdash;');\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let valueSetByWidget = false; // Track if value was set by widget\n let loadedInitialSubdivisions = false; // Track if subdivisions were loaded\n\n try {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n config.forcedLanguage,\n config.defaultLanguage\n );\n\n // Fetch & populate countries\n const countriesResult = await CountriesDBClient.fetchCountries({\n apiKey,\n backendUrl,\n shouldUseGeoIP,\n isoCountryNames: config.isoCountryNames,\n languageHeaders,\n });\n\n const countries = countriesResult.data;\n const countriesLanguage = countriesResult.language || 'en';\n\n state.countriesMap.set(select, countries);\n populateCountrySelect(\n select,\n countries,\n countriesLanguage,\n config.countryNameFilter\n );\n\n // Apply preselected (manual)\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, { type: 'country', reason: 'preselected' });\n valueSetByWidget = true;\n // Load subdivisions after applying preselected value\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // This will be handled by the updateSubdivisions call below\n // We need to pass the config for subdivisions\n }\n }\n\n // GeoIP auto-select\n if (shouldUseGeoIP) {\n const preselectedCountry = countries.find(\n (country) => country.preselected\n );\n if (preselectedCountry) {\n select.value = preselectedCountry.iso_alpha_2;\n dispatchUpdateEvent(select, { type: 'country', reason: 'geoip' });\n valueSetByWidget = true;\n }\n }\n\n // If already chosen, load subdivisions\n if (\n !loadedInitialSubdivisions &&\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // Subdivisions will be loaded by event handler\n loadedInitialSubdivisions = true;\n }\n\n // On change => update subdivisions\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n\n // Dispatch update event for user-initiated country change\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n\n // Update subdivisions\n await updateSubdivisions(select, apiKey, backendUrl, state, subdivisionConfig);\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const stored = state.countriesMap.get(select) || [];\n const picked = stored.find((c) => c.iso_alpha_2 === chosen);\n if (!picked) {\n return;\n }\n\n // followUpward from country perspective\n // Only works when country is single-select (never for multi-select)\n if (config.followUpward && !select.multiple && picked.is_subdivision_of) {\n await handleFollowUpwardFromCountry(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, subdivisionConfig, code)\n );\n }\n });\n } catch (error) {\n console.error('Failed to fetch countries:', error);\n handleApiError(select, error as Error);\n // Handle subdivision errors\n if (select.dataset.name) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n initializeSelect(s, '&mdash;');\n handleApiError(s, error as Error);\n }\n }\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // If no preselected and no geoip selection happened, emit a regular update\n if (!valueSetByWidget) {\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n }\n }\n }\n}\n\n","/**\n * @countriesdb/widget\n * \n * Plain JavaScript widget for CountriesDB.\n * Provides DOM manipulation and auto-initialization for country/subdivision selects.\n */\n\nimport type { WidgetOptions } from './types';\nimport type { WidgetConfig } from '@countriesdb/widget-core';\nimport { setupCountrySelection, setupSubdivisionSelection, updateSubdivisions } from './initialization';\nimport type { SelectElement, WidgetState } from './types';\n\n// Global namespace to prevent double initialization\nconst NS_KEY = '__CountriesWidgetNS__';\n\ninterface WidgetNamespace {\n initialized: boolean;\n initPromise: Promise<boolean> | null;\n version: number;\n}\n\ndeclare global {\n interface Window {\n [NS_KEY]: WidgetNamespace;\n CountriesWidgetLoad: typeof CountriesWidgetLoad;\n }\n}\n\n/**\n * Main widget initialization function\n */\nasync function CountriesWidgetLoad(\n options: WidgetOptions = {} as WidgetOptions\n): Promise<boolean> {\n // Initialize namespace\n if (!window[NS_KEY]) {\n window[NS_KEY] = {\n initialized: false,\n initPromise: null,\n version: 0,\n };\n }\n\n const NS = window[NS_KEY];\n\n // Share the same promise across concurrent calls\n NS.initPromise = (async () => {\n // Wait for DOM if needed\n if (document.readyState === 'loading') {\n await new Promise<void>((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true,\n });\n });\n }\n\n // Get configuration from options or script URL\n const config = getConfigFromOptionsOrScript(options);\n\n // Validate configuration\n if (!config.publicKey) {\n console.error('CountriesDB Widget: publicKey is required');\n return false;\n }\n\n // Check for conflicting parameters\n if (config.followRelated && config.followUpward) {\n showParamConflictError();\n return false;\n }\n\n // Initialize widget state\n const state: WidgetState = {\n countriesMap: new WeakMap(),\n subdivisionsMap: new WeakMap(),\n subdivisionsLanguageMap: new WeakMap(),\n isInitializing: new Set(),\n };\n\n // Setup subdivisions first (they depend on countries)\n await setupSubdivisionSelection(config.publicKey, config.backendUrl, state, {\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n });\n\n const subdivisionConfig = {\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n };\n\n // Setup countries\n await setupCountrySelection(\n config.publicKey,\n config.backendUrl,\n state,\n {\n defaultLanguage: config.defaultLanguage,\n forcedLanguage: config.forcedLanguage,\n isoCountryNames: config.isoCountryNames || false,\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n countryNameFilter: config.countryNameFilter,\n },\n subdivisionConfig\n );\n\n // After countries are set up, update subdivisions for any preselected countries\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n await updateSubdivisions(select, config.publicKey, config.backendUrl, state, subdivisionConfig);\n }\n }\n\n NS.initialized = true;\n return true;\n })();\n\n return NS.initPromise;\n}\n\n/**\n * Get configuration from options or script URL parameters\n */\nfunction getConfigFromOptionsOrScript(\n options: WidgetOptions\n): WidgetConfig & { backendUrl: string } {\n // Try to get config from script URL (for backward compatibility with widget.blade.php)\n let scriptUrl: URL | null = null;\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n scriptUrl = new URL(loaderScript.src);\n }\n } catch {\n // Ignore errors\n }\n\n const config: WidgetConfig & { backendUrl: string } = {\n publicKey: options.publicKey || scriptUrl?.searchParams.get('public_key') || '',\n backendUrl: options.backendUrl || scriptUrl?.searchParams.get('backend_url') || getBackendUrlFromScript(),\n defaultLanguage: options.defaultLanguage || scriptUrl?.searchParams.get('default_language') || undefined,\n forcedLanguage: options.forcedLanguage || scriptUrl?.searchParams.get('forced_language') || undefined,\n showSubdivisionType: options.showSubdivisionType !== undefined\n ? options.showSubdivisionType\n : parseBoolean(scriptUrl?.searchParams.get('show_subdivision_type') ?? '1'),\n followRelated: options.followRelated !== undefined\n ? options.followRelated\n : parseBoolean(scriptUrl?.searchParams.get('follow_related') ?? 'false'),\n followUpward: options.followUpward !== undefined\n ? options.followUpward\n : parseBoolean(scriptUrl?.searchParams.get('follow_upward') ?? 'false'),\n allowParentSelection: options.allowParentSelection !== undefined\n ? options.allowParentSelection\n : parseBoolean(scriptUrl?.searchParams.get('allow_parent_selection') ?? 'false'),\n isoCountryNames: options.isoCountryNames !== undefined\n ? options.isoCountryNames\n : parseBoolean(scriptUrl?.searchParams.get('iso_country_names') ?? 'false'),\n subdivisionRomanizationPreference:\n options.subdivisionRomanizationPreference ||\n scriptUrl?.searchParams.get('subdivision_romanization_preference') ||\n undefined,\n preferLocalVariant: options.preferLocalVariant !== undefined\n ? options.preferLocalVariant\n : parseBoolean(scriptUrl?.searchParams.get('prefer_local_variant') ?? 'false'),\n countryNameFilter: options.countryNameFilter,\n subdivisionNameFilter: options.subdivisionNameFilter,\n autoInit: options.autoInit !== undefined\n ? options.autoInit\n : parseBoolean(scriptUrl?.searchParams.get('auto_init') ?? 'true'),\n };\n\n // Resolve filter functions from global scope if specified by name\n if (scriptUrl) {\n const countryNameFilterName = scriptUrl.searchParams.get('countryNameFilter');\n if (countryNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[countryNameFilterName];\n if (typeof filter === 'function') {\n config.countryNameFilter = filter;\n }\n }\n\n const subdivisionNameFilterName = scriptUrl.searchParams.get('subdivisionNameFilter');\n if (subdivisionNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[subdivisionNameFilterName];\n if (typeof filter === 'function') {\n config.subdivisionNameFilter = filter;\n }\n }\n }\n\n return config;\n}\n\n/**\n * Get backend URL from script tag or use default\n */\nfunction getBackendUrlFromScript(): string {\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n const scriptUrl = new URL(loaderScript.src);\n const scheme = scriptUrl.protocol;\n const host = scriptUrl.hostname;\n const port = scriptUrl.port ? `:${scriptUrl.port}` : '';\n return `${scheme}//${host}${port}`;\n }\n } catch {\n // Ignore errors\n }\n\n // Default to API domain (never use embedding site's domain)\n return 'https://api.countriesdb.com';\n}\n\n/**\n * Parse boolean from string value\n */\nfunction parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n/**\n * Show error when both follow_related and follow_upward are enabled\n */\nfunction showParamConflictError(): void {\n const errorMessage = 'Error: Cannot enable both follow_related and follow_upward';\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n for (const select of subdivisionSelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n}\n\n// Expose public loader\nif (typeof window !== 'undefined') {\n window.CountriesWidgetLoad = CountriesWidgetLoad;\n\n // Auto-init if script URL has auto_init=true (or not set, default is true)\n // Use a function that waits for DOM to be ready and finds the script tag reliably\n (function checkAutoInit() {\n // Wait for DOM to be ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', checkAutoInit, { once: true });\n return;\n }\n\n // Find the script tag that loaded this widget\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n }\n \n // Default to auto-init = true (only disable if explicitly set to false)\n let shouldAutoInit = true;\n \n if (loaderScript && loaderScript.src) {\n try {\n const scriptUrl = new URL(loaderScript.src);\n const autoInit = scriptUrl.searchParams.get('auto_init');\n // Only disable if explicitly set to false/0\n shouldAutoInit = autoInit === null || autoInit === 'true' || autoInit === '1';\n } catch {\n // If URL parsing fails, default to true (auto-init enabled)\n shouldAutoInit = true;\n }\n }\n \n // Auto-init by default (unless explicitly disabled)\n if (shouldAutoInit) {\n // Use setTimeout to ensure script tag is fully processed\n setTimeout(() => {\n CountriesWidgetLoad().catch(console.error);\n }, 0);\n }\n })();\n}\n\n// Export for ES modules\nexport default CountriesWidgetLoad;\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../widget-core/dist/esm/api-client.js","../../widget-core/dist/esm/subdivision-tree.js","../../widget-core/dist/esm/filters.js","../src/dom-manipulation.ts","../src/event-system.ts","../src/follow-logic.ts","../src/initialization.ts","../src/index.ts"],"sourcesContent":["/**\n * API client for CountriesDB API\n */\nexport class CountriesDBClient {\n /**\n * Fetch countries from the API\n */\n static async fetchCountries(options) {\n const { apiKey, backendUrl, shouldUseGeoIP = true, isoCountryNames = false, languageHeaders = {}, } = options;\n const base = `${backendUrl}/api/countries`;\n const params = [];\n if (!shouldUseGeoIP) {\n params.push('no_geoip=1');\n }\n if (isoCountryNames) {\n params.push('country_name_source=iso');\n }\n const url = params.length ? `${base}?${params.join('&')}` : base;\n return this.fetchFromApi(url, apiKey, languageHeaders);\n }\n /**\n * Fetch subdivisions for a specific country\n */\n static async fetchSubdivisions(options) {\n const { apiKey, backendUrl, countryCode, shouldUseGeoIP = true, preferOfficial = false, subdivisionRomanizationPreference, preferLocalVariant = false, languageHeaders = {}, } = options;\n if (!countryCode) {\n return { data: [], language: null };\n }\n const base = `${backendUrl}/api/countries/${countryCode}/subdivisions`;\n const params = [];\n if (!shouldUseGeoIP) {\n params.push('no_geoip=1');\n }\n if (subdivisionRomanizationPreference) {\n params.push(`subdivision_romanization_preference=${encodeURIComponent(subdivisionRomanizationPreference)}`);\n }\n if (preferLocalVariant) {\n params.push('prefer_local_variant=1');\n }\n if (preferOfficial) {\n params.push('prefer_official=1');\n }\n const url = params.length ? `${base}?${params.join('&')}` : base;\n return this.fetchFromApi(url, apiKey, languageHeaders);\n }\n /**\n * Generic API fetch method\n */\n static async fetchFromApi(url, apiKey, languageHeaders) {\n try {\n const response = await fetch(url, {\n headers: {\n ...languageHeaders,\n 'X-API-KEY': apiKey,\n 'Content-Type': 'application/json',\n },\n });\n if (!response.ok) {\n let errorMessage = `HTTP Error: ${response.status}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n }\n catch {\n // Ignore JSON parse errors\n }\n throw new Error(errorMessage);\n }\n const data = (await response.json());\n const language = response.headers.get('X-Selected-Language') || null;\n return { data, language };\n }\n catch (error) {\n console.error(`Failed to fetch data from ${url}:`, error);\n throw error;\n }\n }\n /**\n * Get language headers from browser and config\n */\n static getLanguageHeaders(forcedLanguage, defaultLanguage) {\n const headers = {};\n if (forcedLanguage) {\n headers['X-Forced-Language'] = forcedLanguage;\n }\n if (defaultLanguage) {\n headers['X-Default-Language'] = defaultLanguage;\n }\n // Use browser's language preference\n if (typeof navigator !== 'undefined' && navigator.language) {\n headers['Accept-Language'] = navigator.language;\n }\n else {\n headers['Accept-Language'] = 'en';\n }\n return headers;\n }\n}\n","/**\n * Utilities for building and working with subdivision trees\n */\n/**\n * Build a tree structure from a flat list of subdivisions\n */\nexport function buildSubdivisionTree(subdivisions) {\n const map = {};\n const roots = [];\n // Create map of all subdivisions\n subdivisions.forEach((item) => {\n map[item.id] = {\n ...item,\n children: [],\n };\n });\n // Build tree structure\n subdivisions.forEach((item) => {\n const node = map[item.id];\n if (item.parent_id && map[item.parent_id]) {\n map[item.parent_id].children.push(node);\n }\n else {\n roots.push(node);\n }\n });\n return roots;\n}\n/**\n * Flatten subdivision tree into HTML options\n */\nexport function flattenSubdivisionOptions(nodes, level, prefixes, labelKey, language, allowParentSelection, subdivisionNameFilter) {\n let html = '';\n // Apply name filter and get display names\n const nodesWithDisplayNames = nodes\n .map((node) => {\n let displayName = node[labelKey] || node.name;\n const countryCode = node.code ? node.code.split('-')[0] : null;\n // Apply subdivisionNameFilter if provided\n if (subdivisionNameFilter && typeof subdivisionNameFilter === 'function') {\n const filteredName = subdivisionNameFilter(node.code, displayName, language, countryCode, node);\n if (filteredName === false) {\n return null; // Mark for filtering - remove this item\n }\n if (filteredName !== null && filteredName !== undefined) {\n displayName = filteredName;\n }\n }\n return { ...node, _displayName: displayName };\n })\n .filter((node) => node !== null);\n // Sort: use Unicode-aware sorting if subdivisionNameFilter was used\n const locale = subdivisionNameFilter && typeof subdivisionNameFilter === 'function' && language\n ? language\n : undefined;\n nodesWithDisplayNames.sort((a, b) => {\n if (locale) {\n return a._displayName.localeCompare(b._displayName, locale, {\n sensitivity: 'accent', // Case-insensitive, accent-sensitive\n ignorePunctuation: false,\n });\n }\n return a._displayName.localeCompare(b._displayName); // Default behavior\n });\n const prefix = level > 0 ? (prefixes[level] ?? '&nbsp;'.repeat(level * 2)) : '';\n const cssClass = `subdivision-level-${level}`;\n for (const node of nodesWithDisplayNames) {\n const hasChildren = node.children && node.children.length > 0;\n const displayName = node._displayName;\n const label = `${prefix}${displayName}`;\n if (hasChildren) {\n if (allowParentSelection) {\n html += `<option value=\"${node.code}\" class=\"${cssClass}\">${label}</option>`;\n }\n else {\n html += `<option disabled value=\"${node.code}\" class=\"${cssClass}\">${label}</option>`;\n }\n html += flattenSubdivisionOptions(node.children, level + 1, prefixes, labelKey, language, allowParentSelection, subdivisionNameFilter);\n }\n else {\n html += `<option value=\"${node.code}\" class=\"${cssClass}\">${label}</option>`;\n }\n }\n return html;\n}\n/**\n * Parse nesting prefixes from data attributes\n */\nexport function parseNestingPrefixes(dataAttributes) {\n const prefixes = {};\n for (let lvl = 1; lvl <= 10; lvl++) {\n const key = `nested${lvl}Prefix`;\n const value = dataAttributes[key];\n if (value !== undefined) {\n prefixes[lvl] = value;\n }\n else {\n break;\n }\n }\n return prefixes;\n}\n","/**\n * Name filtering utilities\n */\n/**\n * Apply country name filter to a list of countries\n */\nexport function applyCountryNameFilter(countries, filter, language) {\n if (!filter || typeof filter !== 'function') {\n return countries.map((c) => ({ ...c, _displayName: c.name }));\n }\n return countries\n .map((country) => {\n const filteredName = filter(country.iso_alpha_2, country.name, language, country);\n if (filteredName === false) {\n return null; // Skip this item\n }\n const displayName = filteredName !== null && filteredName !== undefined\n ? filteredName\n : country.name;\n return { ...country, _displayName: displayName };\n })\n .filter((c) => c !== null);\n}\n/**\n * Sort countries with Unicode-aware sorting\n */\nexport function sortCountries(countries, language) {\n const locale = language || undefined;\n return [...countries].sort((a, b) => {\n if (locale) {\n return a._displayName.localeCompare(b._displayName, locale, {\n sensitivity: 'accent', // Case-insensitive, accent-sensitive\n ignorePunctuation: false,\n });\n }\n return a._displayName.localeCompare(b._displayName);\n });\n}\n/**\n * Apply subdivision name filter to a list of subdivisions\n */\nexport function applySubdivisionNameFilter(subdivisions, filter, language, countryCode) {\n if (!filter || typeof filter !== 'function') {\n return subdivisions.map((s) => ({\n ...s,\n _displayName: s.full_name || s.name,\n }));\n }\n return subdivisions\n .map((subdivision) => {\n const originalName = subdivision.full_name || subdivision.name;\n const filteredName = filter(subdivision.code, originalName, language, countryCode, subdivision);\n if (filteredName === false) {\n return null; // Skip this item\n }\n const displayName = filteredName !== null && filteredName !== undefined\n ? filteredName\n : originalName;\n return { ...subdivision, _displayName: displayName };\n })\n .filter((s) => s !== null);\n}\n","/**\n * DOM manipulation utilities\n */\n\nimport type { SelectElement } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport {\n applyCountryNameFilter,\n sortCountries,\n buildSubdivisionTree,\n flattenSubdivisionOptions,\n parseNestingPrefixes,\n} from '@countriesdb/widget-core';\n\n/**\n * Initialize a select element with default option\n */\nexport function initializeSelect(\n select: SelectElement,\n fallbackLabel: string = 'Not Applicable',\n isSubdivision: boolean = false\n): void {\n const isMultiple = select.hasAttribute('multiple');\n\n // For multi-select, don't add default option or use data-label/data-default-value\n if (isMultiple) {\n select.innerHTML = '';\n // Remove data-label and data-default-value for multi-select (they're ignored)\n if (select.dataset.label !== undefined) {\n delete select.dataset.label;\n }\n if (select.dataset.defaultValue !== undefined) {\n delete select.dataset.defaultValue;\n }\n } else {\n const dataLabel = select.dataset.label;\n const dataDefaultValue = select.dataset.defaultValue;\n\n const label = dataLabel || fallbackLabel;\n const defaultValue = dataDefaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\">${label}</option>`;\n\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n if (isSubdivision) {\n select.disabled = true;\n }\n}\n\n/**\n * Populate a select element with countries\n */\nexport function populateCountrySelect(\n select: SelectElement,\n countries: Country[],\n language: string,\n countryNameFilter?: (code: string, name: string, lang: string, item: Country) => string | false | null | undefined\n): void {\n // Apply filter and get display names\n let filteredCountries = applyCountryNameFilter(countries, countryNameFilter, language);\n \n // Sort if filter was applied\n if (countryNameFilter) {\n filteredCountries = sortCountries(filteredCountries, language);\n }\n\n // Clear existing options (except default)\n const defaultOption = select.querySelector('option[value=\"\"]') || \n (select.dataset.defaultValue ? select.querySelector(`option[value=\"${select.dataset.defaultValue}\"]`) : null);\n const defaultValue = select.dataset.defaultValue ?? '';\n \n // Keep default option if it exists\n select.innerHTML = defaultOption ? defaultOption.outerHTML : `<option value=\"${defaultValue}\">${select.dataset.label || '&mdash;'}</option>`;\n\n // Add country options\n filteredCountries.forEach((country) => {\n const option = document.createElement('option');\n option.value = country.iso_alpha_2;\n option.textContent = country._displayName;\n select.appendChild(option);\n });\n}\n\n/**\n * Populate a select element with subdivisions\n */\nexport function buildSubdivisionOptionsHTML(\n subdivisions: Subdivision[],\n select: SelectElement,\n language: string,\n showSubdivisionType: boolean,\n allowParentSelection: boolean,\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined\n): string {\n const tree = buildSubdivisionTree(subdivisions);\n \n // Parse nesting prefixes from data attributes\n const dataAttributes: Record<string, string | undefined> = {};\n for (let lvl = 1; lvl <= 10; lvl++) {\n const key = `nested${lvl}Prefix`;\n const value = select.dataset[key];\n if (value !== undefined) {\n dataAttributes[`nested${lvl}Prefix`] = value;\n } else {\n break;\n }\n }\n const prefixes = parseNestingPrefixes(dataAttributes);\n \n const isMultiple = select.hasAttribute('multiple');\n const labelKey = showSubdivisionType ? 'full_name' : 'name';\n\n let html = '';\n // For multi-select, don't add default option\n if (!isMultiple) {\n const defaultLabel = select.dataset.label || '&mdash;';\n const defaultValue = select.dataset.defaultValue ?? '';\n html = `<option value=\"${defaultValue}\">${defaultLabel}</option>`;\n }\n\n html += flattenSubdivisionOptions(\n tree,\n 0,\n prefixes,\n labelKey,\n language,\n allowParentSelection,\n subdivisionNameFilter\n );\n \n return html;\n}\n\n/**\n * Apply preselected value to a select element\n */\nexport function applyPreselectedValue(\n select: SelectElement,\n value: string\n): void {\n if (!value || value.trim() === '') {\n return;\n }\n\n const isMultiple = select.hasAttribute('multiple');\n\n if (isMultiple) {\n // For multi-select, parse comma-separated values\n const values = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '');\n // Select all matching options\n Array.from(select.options).forEach((option) => {\n option.selected = values.includes(option.value);\n });\n } else {\n // Single select: set single value\n select.value = value;\n }\n}\n\n/**\n * Handle API error by showing error message in select\n */\nexport function handleApiError(\n select: SelectElement,\n errorMessage: string | Error\n): void {\n const message = errorMessage instanceof Error ? errorMessage.message : errorMessage;\n const defaultValue = select.dataset.defaultValue ?? '';\n // Add \"Error: \" prefix to match old widget behavior and test expectations\n const formattedMessage = message.startsWith('Error: ') ? message : `Error: ${message}`;\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>${formattedMessage}</option>`;\n}\n\n/**\n * Parse boolean from string value\n */\nexport function parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n","/**\n * Event system for widget updates\n */\n\nimport type { SelectElement, UpdateEventDetail } from './types';\n\n/**\n * Dispatch a custom update event for widget changes\n */\nexport function dispatchUpdateEvent(\n select: SelectElement,\n detail: Partial<UpdateEventDetail> = {}\n): void {\n let selectedValues: string[] = [];\n \n if (select.multiple) {\n // For multi-select, selectedOptions is a HTMLCollection, convert to array\n selectedValues = Array.from(select.selectedOptions || [])\n .map((opt) => opt.value)\n .filter((v) => v !== '');\n } else {\n // For single-select, use value\n selectedValues = select.value ? [select.value] : [];\n }\n\n const evt = new CustomEvent<UpdateEventDetail>('countriesWidget:update', {\n bubbles: true,\n detail: {\n value: select.value || '',\n selectedValues,\n name: select.dataset.name || null,\n country: select.dataset.country || null,\n isSubdivision: select.classList.contains('subdivision-selection'),\n ...detail,\n },\n });\n \n select.dispatchEvent(evt);\n}\n\n/**\n * Check if an event was initiated by the widget (not user)\n */\nexport function isWidgetInitiatedEvent(event: Event): boolean {\n return (event as any).isWidgetInitiated === true;\n}\n\n/**\n * Mark an event as widget-initiated\n */\nexport function markEventAsWidgetInitiated(event: Event): void {\n (event as any).isWidgetInitiated = true;\n}\n\n","/**\n * Follow logic for related and upward navigation\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Subdivision } from '@countriesdb/widget-core';\nimport { dispatchUpdateEvent } from './event-system';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport { updateSubdivisionSelect } from './initialization';\n\n/**\n * Trigger follow logic when a subdivision is selected\n */\nexport async function triggerFollowLogic(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated && !followUpward) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // For follow_upward, only work if subdivision is single-select\n if (followUpward && select.multiple) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked) {\n return;\n }\n\n // follow_related\n if (followRelated && picked.related_country_code) {\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset._widgetTempPreselect = targetSubdivision; // one-time preselect\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n }\n\n // follow_upward\n if (followUpward && picked.is_subdivision_of) {\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n relatedSubsSelect.dataset._widgetTempPreselect = parentSub; // one-time preselect\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect && !relatedSubsSelect.multiple) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n }\n}\n\n/**\n * Handle follow_related from subdivision change event\n */\nexport async function handleFollowRelatedFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followRelated: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followRelated) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n // Get selected code (for multi-select, use first selected value)\n const selectedCode = select.multiple\n ? (select.selectedOptions[0]?.value || null)\n : select.value;\n \n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.related_country_code) {\n return;\n }\n\n const targetCountry = picked.related_country_code;\n const targetSubdivision = picked.related_subdivision_code;\n\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n \n if (relatedSubsSelect && targetSubdivision) {\n relatedSubsSelect.dataset.preselected = targetSubdivision;\n }\n\n if (linkedCountrySelect.value !== targetCountry) {\n linkedCountrySelect.value = targetCountry;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, targetCountry);\n } else {\n if (relatedSubsSelect && targetSubdivision) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, targetCountry);\n }\n }\n}\n\n/**\n * Handle follow_upward from subdivision change event\n */\nexport async function handleFollowUpwardFromSubdivision(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n if (!followUpward) {\n return;\n }\n \n // Disable for multi-select subdivisions\n if (select.multiple) {\n return;\n }\n\n const linkedCountrySelect = document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n );\n \n // Only work if country is single-select (never when country is multi)\n if (!linkedCountrySelect || linkedCountrySelect.multiple) {\n return;\n }\n\n const allSubs = state.subdivisionsMap.get(select);\n if (!allSubs) {\n return;\n }\n\n const selectedCode = select.value;\n if (!selectedCode) {\n return;\n }\n\n const picked = allSubs.find((s) => s.code === selectedCode);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n relatedSubsSelect.dataset.preselected = parentSub;\n }\n }\n\n if (linkedCountrySelect.value !== parentCode) {\n linkedCountrySelect.value = parentCode;\n dispatchUpdateEvent(linkedCountrySelect, { type: 'country', reason: 'follow' });\n await updateSubdivisionSelectFn(linkedCountrySelect, apiKey, parentCode);\n } else if (parentSub) {\n const relatedSubsSelect = document.querySelector<SelectElement>(\n `.subdivision-selection[data-country=\"${linkedCountrySelect.dataset.name}\"]`\n );\n if (relatedSubsSelect) {\n await updateSubdivisionSelectFn(relatedSubsSelect, apiKey, parentCode);\n }\n }\n}\n\n/**\n * Handle follow_upward from country change event\n */\nexport async function handleFollowUpwardFromCountry(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n followUpward: boolean,\n updateSubdivisionSelectFn: (\n select: SelectElement,\n apiKey: string,\n countryCode: string\n ) => Promise<void>\n): Promise<void> {\n // Only works when country is single-select (never for multi-select)\n if (!followUpward || select.multiple) {\n return;\n }\n\n const countries = state.countriesMap.get(select);\n if (!countries) {\n return;\n }\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const picked = countries.find((c) => c.iso_alpha_2 === chosen);\n if (!picked || !picked.is_subdivision_of) {\n return;\n }\n\n const parentCode = picked.is_subdivision_of.parent_country_code;\n const parentSub = picked.is_subdivision_of.subdivision_code;\n\n if (select.value !== parentCode) {\n if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only preselect if subdivision is single-select (follow_upward doesn't work with multi)\n if (!s.multiple) {\n s.dataset.preselected = parentSub;\n }\n }\n }\n select.value = parentCode;\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n await updateSubdivisionSelectFn(select, apiKey, parentCode);\n } else if (parentSub) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n // Only update if subdivision is single-select\n if (!s.multiple) {\n await updateSubdivisionSelectFn(s, apiKey, parentCode);\n }\n }\n }\n}\n\n","/**\n * Widget initialization logic\n */\n\nimport type { SelectElement, WidgetState } from './types';\nimport type { Country, Subdivision } from '@countriesdb/widget-core';\nimport { CountriesDBClient } from '@countriesdb/widget-core';\nimport {\n initializeSelect,\n populateCountrySelect,\n buildSubdivisionOptionsHTML,\n applyPreselectedValue,\n handleApiError,\n parseBoolean,\n} from './dom-manipulation';\nimport { dispatchUpdateEvent, isWidgetInitiatedEvent } from './event-system';\nimport {\n triggerFollowLogic,\n handleFollowRelatedFromSubdivision,\n handleFollowUpwardFromSubdivision,\n handleFollowUpwardFromCountry,\n} from './follow-logic';\n\n/**\n * Setup subdivision selection elements\n */\nexport async function setupSubdivisionSelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n followRelated: boolean;\n followUpward: boolean;\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n\n for (const select of subdivisionSelects) {\n // Initialize with a default option\n initializeSelect(select, '&mdash;', true);\n\n // Linked country select (if any)\n const countryName = select.dataset.country;\n const linkedCountrySelect = countryName\n ? document.querySelector<SelectElement>(\n `.country-selection[data-name=\"${countryName}\"]`\n )\n : null;\n\n // Check if linked country select is multi-select (not allowed)\n if (linkedCountrySelect && linkedCountrySelect.hasAttribute('multiple')) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML = `<option value=\"${defaultValue}\" disabled>Error: Cannot link to multi-select country. Use data-country-code instead.</option>`;\n continue;\n }\n\n // No direct link → maybe data-country-code\n if (!countryName || !linkedCountrySelect) {\n if (\n select.hasAttribute('data-country-code') &&\n select.dataset.countryCode\n ) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n select.dataset.countryCode\n );\n } else {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n }\n\n // Always dispatch an update event for user-initiated subdivision changes\n select.addEventListener('change', (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n dispatchUpdateEvent(select, { type: 'subdivision', reason: 'regular' });\n });\n\n // --- follow_related (forward direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowRelatedFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followRelated,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n\n // --- follow_upward (reverse direction) ---\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n await handleFollowUpwardFromSubdivision(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n });\n }\n}\n\n/**\n * Update subdivision select with data for a specific country\n */\nexport async function updateSubdivisionSelect(\n select: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n },\n countryCode: string\n): Promise<void> {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n\n // Check if this is a reload (select was already populated before)\n const isReload = state.subdivisionsMap.has(select);\n\n initializeSelect(select, '&mdash;', true);\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let effectiveCountryCode = countryCode;\n if (!effectiveCountryCode) {\n effectiveCountryCode = select.dataset.countryCode || '';\n }\n\n if (effectiveCountryCode) {\n let valueSetByWidget = false; // Track if a value was set by widget\n try {\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n // Check if this subdivision select prefers official subdivisions\n const preferOfficial = select.hasAttribute('data-prefer-official');\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n undefined,\n undefined\n );\n\n const subdivisionsResult = await CountriesDBClient.fetchSubdivisions({\n apiKey,\n backendUrl,\n countryCode: effectiveCountryCode,\n shouldUseGeoIP,\n preferOfficial,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant,\n languageHeaders,\n });\n\n const subdivisions = subdivisionsResult.data;\n const subdivisionsLanguage = subdivisionsResult.language || 'en';\n\n // Store in memory\n state.subdivisionsMap.set(select, subdivisions);\n state.subdivisionsLanguageMap.set(select, subdivisionsLanguage);\n\n if (subdivisions.length > 0) {\n // Populate <option>\n select.disabled = false;\n\n // Preserve data attributes before setting innerHTML (only for non-multi-select)\n const isMultiple = select.hasAttribute('multiple');\n const dataLabel = !isMultiple ? select.dataset.label : undefined;\n const dataDefaultValue = !isMultiple\n ? select.dataset.defaultValue\n : undefined;\n\n select.innerHTML = buildSubdivisionOptionsHTML(\n subdivisions,\n select,\n subdivisionsLanguage,\n config.showSubdivisionType,\n config.allowParentSelection,\n config.subdivisionNameFilter\n );\n\n // Restore data attributes after setting innerHTML\n if (!isMultiple) {\n if (dataLabel !== undefined) {\n select.dataset.label = dataLabel;\n }\n if (dataDefaultValue !== undefined) {\n select.dataset.defaultValue = dataDefaultValue;\n }\n }\n\n // Manual preselection wins\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'preselected',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false, // followRelated - handled in event listeners\n false, // followUpward - handled in event listeners\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n } else {\n // Try GeoIP preselect\n if (shouldUseGeoIP) {\n const preselectedSubdivision = subdivisions.find(\n (subdivision) => subdivision.preselected\n );\n if (preselectedSubdivision) {\n const isMultiple = select.hasAttribute('multiple');\n if (isMultiple) {\n // For multi-select, find and select the option\n const option = Array.from(select.options).find(\n (opt) => opt.value === preselectedSubdivision.code\n );\n if (option) {\n option.selected = true;\n }\n } else {\n // Single select: set value directly\n select.value = preselectedSubdivision.code;\n }\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'geoip',\n });\n valueSetByWidget = true;\n await triggerFollowLogic(\n select,\n apiKey,\n backendUrl,\n state,\n false,\n false,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, config, code)\n );\n }\n }\n }\n } else {\n select.disabled = true;\n }\n } catch (error) {\n console.error('Failed to fetch subdivisions:', error);\n handleApiError(select, error as Error);\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // Only fire 'reload' if this is a reload, not initial load\n if (isReload && !valueSetByWidget) {\n dispatchUpdateEvent(select, {\n type: 'subdivision',\n reason: 'reload',\n });\n }\n }\n } else if (\n !select.dataset.country ||\n !document.querySelector(\n `.country-selection[data-name=\"${select.dataset.country}\"]`\n )\n ) {\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: No country select present</option>`;\n }\n}\n\n/**\n * Update subdivisions for all linked subdivision selects when country changes\n */\nexport async function updateSubdivisions(\n countrySelect: SelectElement,\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n // Don't update subdivisions for multi-select countries (not supported)\n if (countrySelect.hasAttribute('multiple')) {\n return;\n }\n\n const selectedCountry = countrySelect.value;\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${countrySelect.dataset.name}\"]`\n )\n );\n\n for (const select of linkedSubdivisionSelects) {\n await updateSubdivisionSelect(\n select,\n apiKey,\n backendUrl,\n state,\n config,\n selectedCountry\n );\n }\n}\n\n/**\n * Setup country selection elements\n */\nexport async function setupCountrySelection(\n apiKey: string,\n backendUrl: string,\n state: WidgetState,\n config: {\n defaultLanguage?: string;\n forcedLanguage?: string;\n isoCountryNames: boolean;\n followRelated: boolean;\n followUpward: boolean;\n countryNameFilter?: (\n code: string,\n name: string,\n language: string,\n item: Country\n ) => string | false | null | undefined;\n },\n subdivisionConfig: {\n showSubdivisionType: boolean;\n allowParentSelection: boolean;\n subdivisionRomanizationPreference?: string;\n preferLocalVariant: boolean;\n subdivisionNameFilter?: (\n code: string,\n originalName: string,\n language: string,\n countryCode: string | null,\n item: Subdivision\n ) => string | false | null | undefined;\n }\n): Promise<void> {\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n const seenNames: Record<string, boolean> = {}; // track data-name to detect duplicates\n\n for (const select of countrySelects) {\n const name = select.dataset.name;\n\n // Duplicates\n if (name && seenNames[name]) {\n select.removeAttribute('data-name');\n initializeSelect(select, '&mdash;');\n const defaultValue = select.dataset.defaultValue ?? '';\n select.innerHTML += `<option value=\"${defaultValue}\" disabled>Error: Duplicate field</option>`;\n continue;\n }\n if (name) {\n seenNames[name] = true;\n }\n\n // Note: Class renaming is now handled earlier in fixMisClassedElements()\n // This check is kept as a safety net but should not be needed\n\n // Initialize\n initializeSelect(select, '&mdash;');\n\n // Mark as initializing to prevent change events\n state.isInitializing.add(select);\n\n let valueSetByWidget = false; // Track if value was set by widget\n let loadedInitialSubdivisions = false; // Track if subdivisions were loaded\n\n try {\n const preselectedValue =\n select.getAttribute('data-preselected') || select.dataset.preselected;\n // Use GeoIP only if data-preselected attribute is not set at all\n const shouldUseGeoIP =\n preselectedValue === undefined || preselectedValue === null;\n\n const languageHeaders = CountriesDBClient.getLanguageHeaders(\n config.forcedLanguage,\n config.defaultLanguage\n );\n\n // Fetch & populate countries\n const countriesResult = await CountriesDBClient.fetchCountries({\n apiKey,\n backendUrl,\n shouldUseGeoIP,\n isoCountryNames: config.isoCountryNames,\n languageHeaders,\n });\n\n const countries = countriesResult.data;\n const countriesLanguage = countriesResult.language || 'en';\n\n state.countriesMap.set(select, countries);\n populateCountrySelect(\n select,\n countries,\n countriesLanguage,\n config.countryNameFilter\n );\n\n // Apply preselected (manual)\n if (\n preselectedValue !== undefined &&\n preselectedValue !== null &&\n preselectedValue.trim() !== ''\n ) {\n applyPreselectedValue(select, preselectedValue);\n dispatchUpdateEvent(select, { type: 'country', reason: 'preselected' });\n valueSetByWidget = true;\n // Load subdivisions after applying preselected value\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // This will be handled by the updateSubdivisions call below\n // We need to pass the config for subdivisions\n }\n }\n\n // GeoIP auto-select\n if (shouldUseGeoIP) {\n const preselectedCountry = countries.find(\n (country) => country.preselected\n );\n if (preselectedCountry) {\n select.value = preselectedCountry.iso_alpha_2;\n dispatchUpdateEvent(select, { type: 'country', reason: 'geoip' });\n valueSetByWidget = true;\n }\n }\n\n // If already chosen, load subdivisions\n if (\n !loadedInitialSubdivisions &&\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n // Subdivisions will be loaded by event handler\n loadedInitialSubdivisions = true;\n }\n\n // On change => update subdivisions\n select.addEventListener('change', async (event: Event) => {\n if (isWidgetInitiatedEvent(event)) {\n return;\n }\n\n // Dispatch update event for user-initiated country change\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n\n // Update subdivisions\n await updateSubdivisions(select, apiKey, backendUrl, state, subdivisionConfig);\n\n const chosen = select.value;\n if (!chosen) {\n return;\n }\n\n const stored = state.countriesMap.get(select) || [];\n const picked = stored.find((c) => c.iso_alpha_2 === chosen);\n if (!picked) {\n return;\n }\n\n // followUpward from country perspective\n // Only works when country is single-select (never for multi-select)\n if (config.followUpward && !select.multiple && picked.is_subdivision_of) {\n await handleFollowUpwardFromCountry(\n select,\n apiKey,\n backendUrl,\n state,\n config.followUpward,\n (s, key, code) =>\n updateSubdivisionSelect(s, key, backendUrl, state, subdivisionConfig, code)\n );\n }\n });\n } catch (error) {\n console.error('Failed to fetch countries:', error);\n handleApiError(select, error as Error);\n // Handle subdivision errors\n if (select.dataset.name) {\n const linkedSubdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>(\n `.subdivision-selection[data-country=\"${select.dataset.name}\"]`\n )\n );\n for (const s of linkedSubdivisionSelects) {\n initializeSelect(s, '&mdash;');\n handleApiError(s, error as Error);\n }\n }\n } finally {\n // Mark initialization as complete\n state.isInitializing.delete(select);\n // If no preselected and no geoip selection happened, emit a regular update\n if (!valueSetByWidget) {\n dispatchUpdateEvent(select, { type: 'country', reason: 'regular' });\n }\n }\n }\n}\n\n","/**\n * @countriesdb/widget\n * \n * Plain JavaScript widget for CountriesDB.\n * Provides DOM manipulation and auto-initialization for country/subdivision selects.\n */\n\nimport type { WidgetOptions } from './types';\nimport type { WidgetConfig } from '@countriesdb/widget-core';\nimport { setupCountrySelection, setupSubdivisionSelection, updateSubdivisions } from './initialization';\nimport type { SelectElement, WidgetState } from './types';\n\n// Global namespace to prevent double initialization\nconst NS_KEY = '__CountriesWidgetNS__';\n\ninterface WidgetNamespace {\n initialized: boolean;\n initPromise: Promise<boolean> | null;\n version: number;\n}\n\ndeclare global {\n interface Window {\n [NS_KEY]: WidgetNamespace;\n CountriesWidgetLoad: typeof CountriesWidgetLoad;\n }\n}\n\n/**\n * Main widget initialization function\n */\nasync function CountriesWidgetLoad(\n options: WidgetOptions = {} as WidgetOptions\n): Promise<boolean> {\n // Initialize namespace\n if (!window[NS_KEY]) {\n window[NS_KEY] = {\n initialized: false,\n initPromise: null,\n version: 0,\n };\n }\n\n const NS = window[NS_KEY];\n\n // Share the same promise across concurrent calls\n NS.initPromise = (async () => {\n // Wait for DOM if needed\n if (document.readyState === 'loading') {\n await new Promise<void>((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true,\n });\n });\n }\n\n // Get configuration from options or script URL\n const config = getConfigFromOptionsOrScript(options);\n\n // Fix mis-classed elements early (DOM cleanup that should always happen)\n fixMisClassedElements();\n\n // Check for conflicting parameters\n if (config.followRelated && config.followUpward) {\n showParamConflictError();\n return false;\n }\n\n // Initialize widget state\n const state: WidgetState = {\n countriesMap: new WeakMap(),\n subdivisionsMap: new WeakMap(),\n subdivisionsLanguageMap: new WeakMap(),\n isInitializing: new Set(),\n };\n\n // Use empty string if publicKey is missing (will show error when API calls fail)\n const apiKey = config.publicKey || '';\n\n // Setup subdivisions first (they depend on countries)\n await setupSubdivisionSelection(apiKey, config.backendUrl, state, {\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n });\n\n const subdivisionConfig = {\n showSubdivisionType: config.showSubdivisionType !== false,\n allowParentSelection: config.allowParentSelection || false,\n subdivisionRomanizationPreference: config.subdivisionRomanizationPreference,\n preferLocalVariant: config.preferLocalVariant || false,\n subdivisionNameFilter: config.subdivisionNameFilter,\n };\n\n // Setup countries\n await setupCountrySelection(\n apiKey,\n config.backendUrl,\n state,\n {\n defaultLanguage: config.defaultLanguage,\n forcedLanguage: config.forcedLanguage,\n isoCountryNames: config.isoCountryNames || false,\n followRelated: config.followRelated || false,\n followUpward: config.followUpward || false,\n countryNameFilter: config.countryNameFilter,\n },\n subdivisionConfig\n );\n\n // After countries are set up, update subdivisions for any preselected countries\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n if (\n select.value &&\n select.value !== (select.dataset.defaultValue || '')\n ) {\n await updateSubdivisions(select, apiKey, config.backendUrl, state, subdivisionConfig);\n }\n }\n\n NS.initialized = true;\n return true;\n })();\n\n return NS.initPromise;\n}\n\n/**\n * Get configuration from options or script URL parameters\n */\nfunction getConfigFromOptionsOrScript(\n options: WidgetOptions\n): WidgetConfig & { backendUrl: string } {\n // Try to get config from script URL (for backward compatibility with widget.blade.php)\n let scriptUrl: URL | null = null;\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n scriptUrl = new URL(loaderScript.src);\n }\n } catch {\n // Ignore errors\n }\n\n const config: WidgetConfig & { backendUrl: string } = {\n publicKey: options.publicKey || scriptUrl?.searchParams.get('public_key') || '',\n backendUrl: options.backendUrl || scriptUrl?.searchParams.get('backend_url') || getBackendUrlFromScript(),\n defaultLanguage: options.defaultLanguage || scriptUrl?.searchParams.get('default_language') || undefined,\n forcedLanguage: options.forcedLanguage || scriptUrl?.searchParams.get('forced_language') || undefined,\n showSubdivisionType: options.showSubdivisionType !== undefined\n ? options.showSubdivisionType\n : parseBoolean(scriptUrl?.searchParams.get('show_subdivision_type') ?? '1'),\n followRelated: options.followRelated !== undefined\n ? options.followRelated\n : parseBoolean(scriptUrl?.searchParams.get('follow_related') ?? 'false'),\n followUpward: options.followUpward !== undefined\n ? options.followUpward\n : parseBoolean(scriptUrl?.searchParams.get('follow_upward') ?? 'false'),\n allowParentSelection: options.allowParentSelection !== undefined\n ? options.allowParentSelection\n : parseBoolean(scriptUrl?.searchParams.get('allow_parent_selection') ?? 'false'),\n isoCountryNames: options.isoCountryNames !== undefined\n ? options.isoCountryNames\n : parseBoolean(scriptUrl?.searchParams.get('iso_country_names') ?? 'false'),\n subdivisionRomanizationPreference:\n options.subdivisionRomanizationPreference ||\n scriptUrl?.searchParams.get('subdivision_romanization_preference') ||\n undefined,\n preferLocalVariant: options.preferLocalVariant !== undefined\n ? options.preferLocalVariant\n : parseBoolean(scriptUrl?.searchParams.get('prefer_local_variant') ?? 'false'),\n countryNameFilter: options.countryNameFilter,\n subdivisionNameFilter: options.subdivisionNameFilter,\n autoInit: options.autoInit !== undefined\n ? options.autoInit\n : parseBoolean(scriptUrl?.searchParams.get('auto_init') ?? 'true'),\n };\n\n // Resolve filter functions from global scope if specified by name\n if (scriptUrl) {\n const countryNameFilterName = scriptUrl.searchParams.get('countryNameFilter');\n if (countryNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[countryNameFilterName];\n if (typeof filter === 'function') {\n config.countryNameFilter = filter;\n }\n }\n\n const subdivisionNameFilterName = scriptUrl.searchParams.get('subdivisionNameFilter');\n if (subdivisionNameFilterName && typeof window !== 'undefined') {\n const filter = (window as any)[subdivisionNameFilterName];\n if (typeof filter === 'function') {\n config.subdivisionNameFilter = filter;\n }\n }\n }\n\n return config;\n}\n\n/**\n * Get backend URL from script tag or use default\n */\nfunction getBackendUrlFromScript(): string {\n try {\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n \n // If still not found, try the last script with src\n if (!loaderScript) {\n loaderScript = scripts.filter((s) => s.src).pop() as HTMLScriptElement || null;\n }\n }\n \n if (loaderScript && loaderScript.src) {\n const scriptUrl = new URL(loaderScript.src);\n const scheme = scriptUrl.protocol;\n const host = scriptUrl.hostname;\n const port = scriptUrl.port ? `:${scriptUrl.port}` : '';\n return `${scheme}//${host}${port}`;\n }\n } catch {\n // Ignore errors\n }\n\n // Default to API domain (never use embedding site's domain)\n return 'https://api.countriesdb.com';\n}\n\n/**\n * Fix mis-classed elements (e.g., country-selection with subdivision-selection class)\n * This should happen early, before API calls, as it's just DOM cleanup\n */\nfunction fixMisClassedElements(): void {\n const countrySelects = Array.from(\n document.querySelectorAll<HTMLSelectElement>('.country-selection')\n );\n \n for (const select of countrySelects) {\n // Avoid conflict if mis-classed\n if (select.classList.contains('subdivision-selection')) {\n select.classList.remove('subdivision-selection');\n select.classList.add('subdivision-selection-removed');\n }\n }\n}\n\n/**\n * Parse boolean from string value\n */\nfunction parseBoolean(value: string | null | undefined): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n const lowered = String(value).trim().toLowerCase();\n return !(lowered === '0' || lowered === 'false');\n}\n\n/**\n * Show error when both follow_related and follow_upward are enabled\n */\nfunction showParamConflictError(): void {\n const errorMessage = 'Error: Cannot enable both follow_related and follow_upward';\n const countrySelects = Array.from(\n document.querySelectorAll<SelectElement>('.country-selection')\n );\n for (const select of countrySelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n const subdivisionSelects = Array.from(\n document.querySelectorAll<SelectElement>('.subdivision-selection')\n );\n for (const select of subdivisionSelects) {\n select.innerHTML = `<option value=\"${select.dataset.defaultValue ?? ''}\" disabled>${errorMessage}</option>`;\n }\n}\n\n// Expose public loader\nif (typeof window !== 'undefined') {\n window.CountriesWidgetLoad = CountriesWidgetLoad;\n\n // Auto-init if script URL has auto_init=true (or not set, default is true)\n // Use a function that waits for DOM to be ready and finds the script tag reliably\n (function checkAutoInit() {\n // Wait for DOM to be ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', checkAutoInit, { once: true });\n return;\n }\n\n // Find the script tag that loaded this widget\n let loaderScript: HTMLScriptElement | null = null;\n \n // First try document.currentScript (works during script execution)\n if (document.currentScript && document.currentScript instanceof HTMLScriptElement) {\n loaderScript = document.currentScript;\n } else {\n // Fallback: find script tag with @countriesdb/widget in src\n const scripts = Array.from(document.getElementsByTagName('script'));\n loaderScript = scripts.find((s) => \n s.src && (\n s.src.includes('@countriesdb/widget') ||\n s.src.includes('widget/dist/index.js')\n )\n ) as HTMLScriptElement || null;\n }\n \n // Default to auto-init = true (only disable if explicitly set to false)\n let shouldAutoInit = true;\n \n if (loaderScript && loaderScript.src) {\n try {\n const scriptUrl = new URL(loaderScript.src);\n const autoInit = scriptUrl.searchParams.get('auto_init');\n // Only disable if explicitly set to false/0\n shouldAutoInit = autoInit === null || autoInit === 'true' || autoInit === '1';\n } catch {\n // If URL parsing fails, default to true (auto-init enabled)\n shouldAutoInit = true;\n }\n }\n \n // Auto-init by default (unless explicitly disabled)\n if (shouldAutoInit) {\n // Use setTimeout to ensure script tag is fully processed\n setTimeout(() => {\n CountriesWidgetLoad().catch(console.error);\n }, 0);\n }\n })();\n}\n\n// Export for ES modules\nexport default CountriesWidgetLoad;\n\n"],"names":[],"mappings":"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"}
@@ -214,11 +214,8 @@ export async function setupCountrySelection(apiKey, backendUrl, state, config, s
214
214
  if (name) {
215
215
  seenNames[name] = true;
216
216
  }
217
- // Avoid conflict if mis-classed
218
- if (select.classList.contains('subdivision-selection')) {
219
- select.classList.remove('subdivision-selection');
220
- select.classList.add('subdivision-selection-removed');
221
- }
217
+ // Note: Class renaming is now handled earlier in fixMisClassedElements()
218
+ // This check is kept as a safety net but should not be needed
222
219
  // Initialize
223
220
  initializeSelect(select, '&mdash;');
224
221
  // Mark as initializing to prevent change events
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@countriesdb/widget",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Country and state/province select widget with ISO 3166-1 and ISO 3166-2 codes. Auto-populates dropdowns with up-to-date country and subdivision data in multiple languages. Easy integration for forms, location selection, and address validation.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",