From b4db24c54c1d4c5710d0be1bc29947892f337ea2 Mon Sep 17 00:00:00 2001 From: doxa-maps Date: Sat, 12 Sep 2026 02:04:10 +0000 Subject: [PATCH] feat: migrate research dashboard into doxa-maps as app-profile research-dashboard (self-contained; reuses @map library; includes facet/rail collapse + table density fixes) --- .../research-dashboard/dashboard.config.js | 118 ++++++ app-profiles/research-dashboard/index.html | 159 ++++++++ app-profiles/research-dashboard/index.js | 66 ++++ .../research-dashboard/research-dashboard.vue | 222 +++++++++++ .../dashboards/DashboardBreadcrumb.vue | 43 +++ .../dashboards/DashboardChartsRail.vue | 116 ++++++ .../dashboards/DashboardDataTable.vue | 194 ++++++++++ .../dashboards/DashboardDetailDrawer.vue | 176 +++++++++ .../dashboards/DashboardFacetRail.vue | 185 ++++++++++ .../dashboards/DashboardFilterChips.vue | 39 ++ .../dashboards/DashboardMapPanel.vue | 273 ++++++++++++++ .../dashboards/DashboardSearchHeader.vue | 210 +++++++++++ .../components/dashboards/DashboardTopBar.vue | 160 ++++++++ .../src/components/dashboards/index.js | 23 ++ .../src/composables/useCsvExport.js | 69 ++++ .../composables/useDashboardAggregations.js | 49 +++ .../src/composables/useDashboardData.js | 76 ++++ .../src/composables/useDashboardLayout.js | 183 +++++++++ .../src/composables/useDashboardShell.js | 221 +++++++++++ .../src/composables/useSelectionBus.js | 52 +++ public/doxa-maps/cities-internet/index.html | 2 +- public/doxa-maps/country-posters/index.html | 2 +- public/doxa-maps/demo-map/index.html | 2 +- public/doxa-maps/doxa-research-map/index.html | 2 +- public/doxa-maps/doxa-simple-map/index.html | 2 +- public/doxa-maps/gospel-resources/index.html | 2 +- public/doxa-maps/index.html | 2 +- public/doxa-maps/key-cities/index.html | 2 +- public/doxa-maps/manifest.json | 27 +- public/doxa-maps/my-upg-100-list/index.html | 2 +- .../doxa-maps/research-dashboard/index.html | 347 ++++++++++++++++++ .../research-dashboard/research-dashboard.js | 326 ++++++++++++++++ .../research-dashboard/index.html | 121 ++++++ public/doxa-maps/template-bundle/index.html | 2 +- 34 files changed, 3463 insertions(+), 12 deletions(-) create mode 100644 app-profiles/research-dashboard/dashboard.config.js create mode 100644 app-profiles/research-dashboard/index.html create mode 100644 app-profiles/research-dashboard/index.js create mode 100644 app-profiles/research-dashboard/research-dashboard.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardBreadcrumb.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardChartsRail.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardDataTable.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardDetailDrawer.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardFacetRail.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardFilterChips.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardMapPanel.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardSearchHeader.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/DashboardTopBar.vue create mode 100644 app-profiles/research-dashboard/src/components/dashboards/index.js create mode 100644 app-profiles/research-dashboard/src/composables/useCsvExport.js create mode 100644 app-profiles/research-dashboard/src/composables/useDashboardAggregations.js create mode 100644 app-profiles/research-dashboard/src/composables/useDashboardData.js create mode 100644 app-profiles/research-dashboard/src/composables/useDashboardLayout.js create mode 100644 app-profiles/research-dashboard/src/composables/useDashboardShell.js create mode 100644 app-profiles/research-dashboard/src/composables/useSelectionBus.js create mode 100644 public/doxa-maps/research-dashboard/index.html create mode 100644 public/doxa-maps/research-dashboard/research-dashboard.js create mode 100644 public/doxa-maps/research-dashboard/research-dashboard/index.html diff --git a/app-profiles/research-dashboard/dashboard.config.js b/app-profiles/research-dashboard/dashboard.config.js new file mode 100644 index 000000000..b9279c8bf --- /dev/null +++ b/app-profiles/research-dashboard/dashboard.config.js @@ -0,0 +1,118 @@ +/** + * dashboard.config.js — the ONE config object for the doxa-research-dashboard profile. + * + * This is the headline DOXA-LIB-2 proof: the FACET_ACC accessor map (formerly copy-pasted + * into 9 files) is declared ONCE here, under `facets`, and read everywhere via + * inject('dashboardConfig') + useDashboardShell. Columns / charts / facet-rail sections / + * KPIs / detail fields are likewise data, not code — the library panels render them + * generically. Values are copied faithfully from the original research-dashboard so the + * migrated bundle behaves identically. + */ +import { lbl } from './src/composables/useDashboardAggregations.js' + +// same numeric coercion the DataTable uses for its num columns +const num = (v) => { if (typeof v === 'number') return v; const n = parseFloat(String(v ?? '').replace(/[^0-9.\-]/g, '')); return isNaN(n) ? null : n } + +// affinity fields arrive on the RAW pray-tools row as {value,label} objects +// (rop1 / imb_reg_of_people_2 / imb_reg_of_people_25 — the same objects DataSourceManager +// splits into affinityBlock+affinityBlockLabel / cluster+clusterLabel / peopleGroup+peopleGroupLabel). +// The People facet accessors return the stable CODE (value) for identity/filtering; the human +// name is resolved in DashboardFacetRail via useAffinityBlockLegendData — the SAME resolver the +// research-map's semantic tree uses — so bloc/cluster/PG labels can never drift from the map. +const code = (v) => (v && typeof v === 'object' ? (v.value ?? v.label ?? '') : (v ?? '')) + +export default { + // ── identity ── + id: 'doxa-research-dashboard', + title: 'Research Dashboard', + element: 'doxa-research-dashboard', + + // ── data source ── (consumed by useDashboardData; the arg is currently advisory — + // the store reads @map/config/sources.json activeSource = pray-tools, preserving behavior) + data: { + source: 'pray-tools', + primaryKey: 'slug', + }, + + // ── facet accessors ── THE single former-duplicated FACET_ACC, declared ONCE. + facets: { + religion: { label: 'Religion', get: (r) => lbl(r.religion) }, + wagf_region: { label: 'Region', get: (r) => lbl(r.wagf_region) }, + wagf_block: { label: 'Block', get: (r) => lbl(r.wagf_block) }, + country_code: { label: 'Country', get: (r) => lbl(r.country_code), geoIso: (r) => r.country_code && r.country_code.value }, + engagement_status: { label: 'Status', get: (r) => lbl(r.engagement_status) }, + language_family: { label: 'Language Family', get: (r) => lbl(r.imb_language_family) }, + primary_language: { label: 'Language', get: (r) => lbl(r.primary_language) }, + // People tier accessors — key by CODE (DashboardFacetRail resolves code→human name via + // useAffinityBlockLegendData). Mirrors research-map's affinity-block → cluster → PG hierarchy. + affinity_bloc: { label: 'Affinity Bloc', get: (r) => code(r.rop1) }, + cluster: { label: 'Cluster', get: (r) => code(r.imb_reg_of_people_2) }, + people_group: { label: 'People Group', get: (r) => code(r.imb_reg_of_people_25) }, + }, + + // ── facet rail sections ── (DashboardFacetRail) — ONE centralized semantic tree mirroring the + // research-map's tree, top→bottom: People → Place → Language → Religion → Status. + // `tree:'affinity'` tells the rail to resolve the People codes to human names via the shared + // useAffinityBlockLegendData composable (single source of truth with the map's semantic tree). + facetRail: [ + { id: 'people', title: 'People', drill: ['affinity_bloc', 'cluster', 'people_group'], tree: 'affinity', topN: [30, 40, 60] }, + { id: 'place', title: 'Place', drill: ['wagf_region', 'wagf_block', 'country_code'] }, + { id: 'language', title: 'Language', drill: ['language_family', 'primary_language'] }, + { id: 'religion', title: 'Religion', facet: 'religion', topN: 24 }, + { id: 'status', title: 'Status', facet: 'engagement_status', topN: 16 }, + ], + + // ── KPI strip ── (computed by useDashboardShell; mirrors the original 6 stat computeds) + kpis: [ + { id: 'total', label: 'UPGs in scope', kind: 'count', showDelta: true }, + { id: 'pop', label: 'Σ population', kind: 'sum', field: 'population' }, + { id: 'unreached', label: '% unreached', kind: 'pct', + test: (r) => !/engaged/i.test(lbl(r.engagement_status)) || /unengaged/i.test(lbl(r.engagement_status)) }, + { id: 'countries', label: 'countries touched', kind: 'distinct', field: 'country_code', via: 'geoIso' }, + { id: 'praying', label: 'Σ praying', kind: 'sum', field: 'people_praying' }, + { id: 'adopted', label: 'Adopted %', kind: 'pct', test: (r) => Number(r.adopted_by_churches) > 0 }, + ], + + // ── table columns ── (DashboardDataTable) + columns: [ + { key: 'name', label: 'People Group', get: (r) => r.name || '', type: 'str' }, + { key: 'country', label: 'Country', get: (r) => lbl(r.country_code), type: 'str' }, + { key: 'region', label: 'Region', get: (r) => lbl(r.wagf_region), type: 'str' }, + { key: 'language', label: 'Language', get: (r) => lbl(r.primary_language), type: 'str' }, + { key: 'religion', label: 'Religion', get: (r) => lbl(r.religion), type: 'str' }, + { key: 'population', label: 'Population', get: (r) => num(r.population), type: 'num' }, + { key: 'people_praying', label: 'Praying', get: (r) => num(r.people_praying), type: 'num' }, + { key: 'engagement', label: 'Engagement', get: (r) => lbl(r.engagement_status), type: 'str' }, + ], + + // ── charts ── (DashboardChartsRail) + charts: [ + { id: 'religion', type: 'donut', facet: 'religion', title: 'Religion', topN: 8 }, + { id: 'region', type: 'donut', facet: 'wagf_region', title: 'Region', topN: 9 }, + { id: 'country', type: 'bar', facet: 'country_code', title: 'Top countries', topN: 12 }, + ], + + // ── detail drawer ── fields surfaced for a focused record + detail: { + photo: (r) => r.has_photo && r.image_url, + fields: ['religion', 'primary_language', 'people_praying', 'adopted_by_churches', 'engagement_status'], + }, + + // ── search header ── (DOXA-LIB-3) the 4 facet search bars (DashboardSearchHeader). + // Each bar = one standalone GeocoderComponent consuming useGeocoderSearch via a + // busAdapter sink. `context` scopes the geocoder's result ordering; `kinds` is the + // supportedKinds subset the composable accepts for that bar; `label` is the placeholder. + // The bar's busAdapter maps the RESOLVED kind → a dashboard facet key (people-group + // results go to selectionSet; the rest to filterSet) — the kind-switch itself stays in + // the composable. See src/components/dashboards/README.md. + search: [ + { id: 'people', label: 'Search people', context: 'people-groups', + kinds: ['affinity-bloc', 'cluster', 'people-group'] }, + { id: 'place', label: 'Search place', context: 'regions', + kinds: ['region', 'country'] }, + { id: 'language', label: 'Search language', context: 'language', + kinds: ['language-family', 'language', 'dialect'] }, + { id: 'religion', label: 'Search religion', context: 'religion', + kinds: ['religion'] }, + ], +} diff --git a/app-profiles/research-dashboard/index.html b/app-profiles/research-dashboard/index.html new file mode 100644 index 000000000..00e26dabf --- /dev/null +++ b/app-profiles/research-dashboard/index.html @@ -0,0 +1,159 @@ + + + + + + doxa-maps · research-dashboard staging + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + diff --git a/app-profiles/research-dashboard/index.js b/app-profiles/research-dashboard/index.js new file mode 100644 index 000000000..53ffb932b --- /dev/null +++ b/app-profiles/research-dashboard/index.js @@ -0,0 +1,66 @@ +/** + * research-dashboard / index.js — Bundle entry (DOXA-LIB-2) + * + * Vite multi-entry build target. Emits app/research-dashboard.js. + * + * Mirrors app-profiles/doxa-research-map/index.js (same ProfileLoader plumbing). + * Registers a SINGLE tag (UNCHANGED from the original profile — only the bundle folder + * is now plural so it can host N dashboard profiles tomorrow): + * - config-driven people-group research dashboard + * + * The dashboard mounts a Mapbox map in its center cell (Mapbox GL is loaded globally by + * index.html and the token arrives via profile-config.tk), so the RTL-text plugin is + * loaded once here, exactly like the map bundles. + * + * Profile registry — same Q3 contract as the map bundles: ProfileLoader lives in @map and + * cannot import.meta.glob across the package boundary, so the bundle evaluates + * import.meta.glob('./*.vue') HERE and hands the result to the loader via + * app.provide('profileModules'). The library panels live in @map/components/dashboards and + * are imported by the profile .vue — the glob only registers the profile screen(s). + */ + +import { defineCustomElement } from 'vue' +import { createPinia } from 'pinia' +import ProfileLoader from '@map/ProfileLoader.vue' +import { createAppI18n } from '@map/i18n/index.js' + +// ─── Bundle-private profile registry ───────────────────────────────────────── +const profileModules = import.meta.glob('./*.vue') + +// ─── Mapbox RTL text plugin — load ONCE before any map instance ────────────── +if (typeof window !== 'undefined' && window.mapboxgl?.setRTLTextPlugin) { + try { + window.mapboxgl.setRTLTextPlugin( + 'https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.3.0/mapbox-gl-rtl-text.js', + null, + true // lazy + ) + } catch (_) { + // Already set in this session — ignore. + } +} + +/** + * Build a fresh defineCustomElement-wrapped class. Each instance gets its own Pinia + i18n + * so multiple embeds on the same page don't bleed state. + */ +function buildDoxaResearchDashboardElement() { + return defineCustomElement(ProfileLoader, { + configureApp(app) { + app.use(createPinia()) + app.use(createAppI18n()) + app.provide('profileModules', profileModules) + } + }) +} + +const DoxaResearchDashboardElement = buildDoxaResearchDashboardElement() + +// ─── Register ONE tag — ──────────────────────────── +if (typeof customElements !== 'undefined') { + if (!customElements.get('research-dashboard-map')) { + customElements.define('research-dashboard-map', DoxaResearchDashboardElement) + } +} + +export default DoxaResearchDashboardElement diff --git a/app-profiles/research-dashboard/research-dashboard.vue b/app-profiles/research-dashboard/research-dashboard.vue new file mode 100644 index 000000000..af11771aa --- /dev/null +++ b/app-profiles/research-dashboard/research-dashboard.vue @@ -0,0 +1,222 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardBreadcrumb.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardBreadcrumb.vue new file mode 100644 index 000000000..acc8ac767 --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardBreadcrumb.vue @@ -0,0 +1,43 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardChartsRail.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardChartsRail.vue new file mode 100644 index 000000000..88186ef12 --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardChartsRail.vue @@ -0,0 +1,116 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardDataTable.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardDataTable.vue new file mode 100644 index 000000000..d64554e80 --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardDataTable.vue @@ -0,0 +1,194 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardDetailDrawer.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardDetailDrawer.vue new file mode 100644 index 000000000..42cb273b5 --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardDetailDrawer.vue @@ -0,0 +1,176 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardFacetRail.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardFacetRail.vue new file mode 100644 index 000000000..e7b3fac0e --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardFacetRail.vue @@ -0,0 +1,185 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardFilterChips.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardFilterChips.vue new file mode 100644 index 000000000..ade06204c --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardFilterChips.vue @@ -0,0 +1,39 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardMapPanel.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardMapPanel.vue new file mode 100644 index 000000000..d66a9d407 --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardMapPanel.vue @@ -0,0 +1,273 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardSearchHeader.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardSearchHeader.vue new file mode 100644 index 000000000..27101f475 --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardSearchHeader.vue @@ -0,0 +1,210 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/DashboardTopBar.vue b/app-profiles/research-dashboard/src/components/dashboards/DashboardTopBar.vue new file mode 100644 index 000000000..821cb205c --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/DashboardTopBar.vue @@ -0,0 +1,160 @@ + + + diff --git a/app-profiles/research-dashboard/src/components/dashboards/index.js b/app-profiles/research-dashboard/src/components/dashboards/index.js new file mode 100644 index 000000000..39aa3785a --- /dev/null +++ b/app-profiles/research-dashboard/src/components/dashboards/index.js @@ -0,0 +1,23 @@ +/** + * dashboards/index.js — barrel export for the config-driven dashboards kit (DOXA-LIB-2). + * + * A profile imports the panels it needs from one place: + * import { DashboardTopBar, DashboardDataTable, DashboardMapPanel } from '@map/components/dashboards' + * + * Every panel is config-aware: it injects('dashboardConfig') (provided once by + * useDashboardShell) instead of hard-coding FACET_ACC / COLUMNS / chart defs / KPI defs. + * See ./README.md for the library-vs-profile rule and the build-a-dashboard steps. + * + * DashboardSearchHeader (DOXA-LIB-3) is the 4-bar facet search header: it renders one + * standalone GeocoderComponent per config.search entry, each consuming the shared + * useGeocoderSearch composable via a busAdapter sink (kind-switch stays in the composable). + */ +export { default as DashboardTopBar } from './DashboardTopBar.vue' +export { default as DashboardFacetRail } from './DashboardFacetRail.vue' +export { default as DashboardDataTable } from './DashboardDataTable.vue' +export { default as DashboardChartsRail } from './DashboardChartsRail.vue' +export { default as DashboardDetailDrawer } from './DashboardDetailDrawer.vue' +export { default as DashboardFilterChips } from './DashboardFilterChips.vue' +export { default as DashboardBreadcrumb } from './DashboardBreadcrumb.vue' +export { default as DashboardMapPanel } from './DashboardMapPanel.vue' +export { default as DashboardSearchHeader } from './DashboardSearchHeader.vue' diff --git a/app-profiles/research-dashboard/src/composables/useCsvExport.js b/app-profiles/research-dashboard/src/composables/useCsvExport.js new file mode 100644 index 000000000..ce49284b4 --- /dev/null +++ b/app-profiles/research-dashboard/src/composables/useCsvExport.js @@ -0,0 +1,69 @@ +/** + * useCsvExport.js — RDASH phase 4: export-any-selection to CSV (native Blob, 0-dep). + * + * Priority model (plan §INTERACTION): selectionSet (explicit picks) > filterSet result (in scope) > + * full dataset. Serializes the FULL stored record per row (flattening {value,label} -> label), + * with a '#' provenance header line of the active chips, RFC-ish quoting, and CSV-injection + * neutralization (leading = + - @ prefixed with a single quote). Shadow-DOM is a non-issue — + * export touches no rendered DOM/styles. + */ +export function useCsvExport({ rowStore, rows, selectionSet, filterSet, FACET_ACC }) { + function pickRows() { + if (selectionSet && selectionSet.size) { + return [...selectionSet].map((s) => rowStore.value.get(s)).filter(Boolean) + } + const keys = Object.keys(filterSet) + if (keys.length) { + return (rows.value || []).filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === filterSet[k] : true })) + } + return rows.value || [] + } + function scopeLabel() { + if (selectionSet && selectionSet.size) return `selection (${selectionSet.size})` + return Object.keys(filterSet).length ? 'filter result' : 'all' + } + function flatten(r) { + const o = {} + for (const k of Object.keys(r)) { const v = r[k]; o[k] = (v && typeof v === 'object') ? (v.label ?? v.value ?? JSON.stringify(v)) : v } + return o + } + // Quote if the field has , " CR LF; double internal quotes; neutralize leading = + - @ (CSV injection). + function esc(v) { + let s = v === null || v === undefined ? '' : String(v) + if (/^[=+\-@]/.test(s)) s = "'" + s + if (/[",\n\r]/.test(s)) s = '"' + s.replace(/"/g, '""') + '"' + return s + } + function buildCsv() { + const picked = pickRows().map(flatten) + const cols = [...picked.reduce((set, r) => { Object.keys(r).forEach((k) => set.add(k)); return set }, new Set())] + const chips = Object.entries(filterSet).map(([k, v]) => `${k}=${v}`).join(' | ') || 'none' + const provenance = `# Research Dashboard export — scope: ${scopeLabel()}; filters: ${chips}; rows: ${picked.length}` + const lines = [provenance, cols.map(esc).join(','), ...picked.map((r) => cols.map((c) => esc(r[c])).join(','))] + return lines.join('\r\n') + } + // Last-export status for UI feedback (toast). The platform gem-frame iframe is sandboxed WITHOUT + // `allow-downloads`, so the native is silently blocked there — CLIPBOARD is the robust + // primary path (the iframe `allow`s clipboard-write); native download still works outside a sandbox. + const lastExport = { rows: 0, clipboard: false, downloaded: false, at: 0 } + function exportCsv() { + const csv = buildCsv() + const rows = pickRows().length + try { if (typeof window !== 'undefined') window.__rdashLastCsv = csv } catch (_) { /* verify hook */ } + let clipboard = false, downloaded = false + // 1) clipboard — works inside the sandboxed gem-frame iframe (the guaranteed path) + try { if (typeof navigator !== 'undefined' && navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(csv).catch(() => {}); clipboard = true } } catch (_) { /* no clipboard */ } + // 2) native file download — works when NOT in a download-blocked sandbox + try { + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' }) + const url = URL.createObjectURL(blob) + const a = document.createElement('a'); a.href = url; a.download = 'research-dashboard.csv'; a.style.display = 'none' + document.body.appendChild(a); a.click(); downloaded = true + setTimeout(() => { try { URL.revokeObjectURL(url); a.remove() } catch (_) {} }, 200) + } catch (_) { /* download blocked — clipboard above already has it */ } + Object.assign(lastExport, { rows, clipboard, downloaded, at: (typeof performance !== 'undefined' ? performance.now() : 0) }) + try { window.__rdashExportStatus = { rows, clipboard, downloaded } } catch (_) {} + return { csv, rows, clipboard, downloaded } + } + return { exportCsv, buildCsv, pickRows, scopeLabel, lastExport } +} diff --git a/app-profiles/research-dashboard/src/composables/useDashboardAggregations.js b/app-profiles/research-dashboard/src/composables/useDashboardAggregations.js new file mode 100644 index 000000000..c55dc1316 --- /dev/null +++ b/app-profiles/research-dashboard/src/composables/useDashboardAggregations.js @@ -0,0 +1,49 @@ +/** + * useAggregations.js — RDASH phase 5: client-side facet aggregation + chart geometry + palettes. + * + * Hand-rolled (no ECharts: starter-kit node_modules is a symlink into frozen doxa-life — can't + * install). SVG donut/bar geometry is pure math, renders in the shadow root, tweens via CSS. + */ +export const REGION_COLORS = { + 'Africa': '#e74c3c', 'Asia': '#3498db', 'Europe': '#2ecc71', 'Latin America': '#f39c12', + 'Middle East': '#9b59b6', 'North America': '#1abc9c', 'Oceania': '#e67e22', 'Other': '#95a5a6', +} +export const CATEGORICAL = ['#2456c7', '#e67e22', '#16a085', '#8e44ad', '#c0392b', '#27ae60', '#2c3e50', '#d35400', '#2980b9', '#7f8c8d', '#f39c12', '#9b59b6', '#1abc9c', '#34495e', '#e74c3c'] + +export const lbl = (v) => (v === null || v === undefined ? '' : (typeof v === 'object' ? (v.label ?? v.value ?? '') : v)) + +/** Count rows by a key accessor; collapse the long tail into 'Other'. */ +export function aggregate(rows, keyFn, topN) { + const m = new Map() + for (const r of rows) { const k = keyFn(r); if (k === null || k === undefined || k === '') continue; m.set(k, (m.get(k) || 0) + 1) } + let arr = [...m.entries()].map(([key, value]) => ({ key, value })).sort((a, b) => b.value - a.value) + if (topN && arr.length > topN) { + const top = arr.slice(0, topN) + const other = arr.slice(topN).reduce((s, x) => s + x.value, 0) + if (other > 0) top.push({ key: 'Other', value: other, other: true }) + arr = top + } + return arr +} + +/** Donut slice geometry (SVG path strings), starting at 12 o'clock, clockwise. */ +export function buildDonut(data, size = 132, innerRatio = 0.58) { + const cx = size / 2, cy = size / 2, r = size / 2 - 3, ri = (size / 2 - 3) * innerRatio + const total = data.reduce((s, d) => s + d.value, 0) || 1 + let a = -Math.PI / 2 + return data.map((d, i) => { + const a0 = a, a1 = a + (d.value / total) * Math.PI * 2; a = a1 + const big = (a1 - a0) > Math.PI ? 1 : 0 + const p = (ang, rad) => `${(cx + rad * Math.cos(ang)).toFixed(2)},${(cy + rad * Math.sin(ang)).toFixed(2)}` + const path = `M${p(a0, r)} A${r},${r} 0 ${big} 1 ${p(a1, r)} L${p(a1, ri)} A${ri},${ri} 0 ${big} 0 ${p(a0, ri)} Z` + return { ...d, path, pct: Math.round((d.value / total) * 100), color: colorFor(d.key, i) } + }) +} + +/** Horizontal-bar geometry as fractions of the widest bar. */ +export function buildBars(data) { + const max = data.reduce((m, d) => Math.max(m, d.value), 0) || 1 + return data.map((d, i) => ({ ...d, frac: d.value / max, color: colorFor(d.key, i) })) +} + +export function colorFor(key, i) { return REGION_COLORS[key] || CATEGORICAL[i % CATEGORICAL.length] } diff --git a/app-profiles/research-dashboard/src/composables/useDashboardData.js b/app-profiles/research-dashboard/src/composables/useDashboardData.js new file mode 100644 index 000000000..97be6a55e --- /dev/null +++ b/app-profiles/research-dashboard/src/composables/useDashboardData.js @@ -0,0 +1,76 @@ +/** + * useDashboardData.js — RDASH phase 2: the single in-memory row store (kills the hardcode). + * + * Loads ALL people groups once + /statistics into a slug-keyed store. Uses the SHARED data layer + * — sources.json (active source = pray-tools, its endpoints + defaultFields + lang) and getApiBaseUrl + * (window.MAP_APP_API_URL / VITE_API_BASE_URL / pray.doxa.life) — but keeps the RAW API record per + * row rather than DataSourceManager's normalized projection: the dashboard table/charts/CSV reference + * raw fields ({value,label} objects like country_code, wagf_region, religion) and the CSV export must + * serialize the FULL API record. DataSourceManager.normalizeData renames fields to system names and + * drops no-coordinate rows (geo set for the map layer, phase 7) — wrong shape for this store. + * + * Shadow-DOM safe: pure data, no DOM/style. Reuses read-only @map config without editing it. + */ +import { ref, shallowRef } from 'vue' +import { getApiBaseUrl } from '@map/api/apiBaseUrl.js' +import sourcesConfig from '@map/api/sources.json' + +export function useDashboardData(dataOpts = {}) { + const loading = ref(false) + const error = ref(null) + const rowStore = shallowRef(new Map()) // slug (PK) -> full raw API record + const rows = shallowRef([]) // array view of the same records + const stats = ref(null) // /statistics global aggregates (KPI baselines) + const total = ref(0) // rowStore size (live-data marker; mock had 3) + + // Which sources.json source the rows come from. Honors the profile's declared + // config.data.source (parameterizable) and falls back to the shared activeSource, + // preserving current pray-tools behavior. Exposed so the shell can normalize the + // SAME source's fieldMappings for the geocoder dataStore (rows + normalization stay + // in lockstep — no desync if a dashboard ever points at a non-active source). + const sourceId = dataOpts.source || sourcesConfig.activeSource + + async function load() { + loading.value = true + error.value = null + try { + const src = sourcesConfig?.sources?.[sourceId] || {} + const base = getApiBaseUrl() + const bulk = src.endpoints?.bulk || '/api/people-groups/list' + const fields = (src.defaultFields || []).join(',') + const lang = src.queryParams?.lang || 'en' + + // ── 1) bulk list (shared config: endpoint + defaultFields + lang + cache-bust) ── + const listUrl = `${base}${bulk}?${fields ? `fields=${fields}&` : ''}lang=${lang}&_=${Date.now()}` + const res = await fetch(listUrl, { cache: 'no-store' }) + if (!res.ok) throw new Error(`list HTTP ${res.status}`) + const json = await res.json() + const raw = Array.isArray(json) ? json : (json.posts || json.data || json.results || []) + const map = new Map() + for (const r of raw) { + const slug = r && (r.slug || r.id) + if (slug) map.set(slug, r) + } + rowStore.value = map + rows.value = raw + total.value = map.size + + // ── 2) /statistics seeds KPI baselines ── + const statEndpoint = src.endpoints?.statistics || '/api/people-groups/statistics' + try { + const sres = await fetch(`${base}${statEndpoint}?_=${Date.now()}`, { cache: 'no-store' }) + if (sres.ok && (sres.headers.get('content-type') || '').includes('json')) { + stats.value = await sres.json() + } + } catch (_) { /* KPI baselines optional; the list is the source of truth */ } + + if (total.value === 0) error.value = 'No records loaded from the live API.' + } catch (e) { + error.value = (e && e.message) ? e.message : String(e) + } finally { + loading.value = false + } + } + + return { loading, error, rowStore, rows, stats, total, load, sourceId } +} diff --git a/app-profiles/research-dashboard/src/composables/useDashboardLayout.js b/app-profiles/research-dashboard/src/composables/useDashboardLayout.js new file mode 100644 index 000000000..1dc513398 --- /dev/null +++ b/app-profiles/research-dashboard/src/composables/useDashboardLayout.js @@ -0,0 +1,183 @@ +/** + * useDashboardLayout.js — reusable drag-resize + persistence engine for the CMV dashboard grid. + * + * A dashboard shell (see app-profiles/doxa-research-dashboards/research-dashboards.vue) is a CSS + * grid whose three flexible tracks are driven by CSS custom properties: + * --facet-w (left facet-rail column width) default 248px + * --rail-w (right charts-rail column width) default 312px + * --table-h (bottom table row height) default 34% (map above it is the 1fr hero) + * + * This composable OWNS those three vars: it exposes pointer-based drag handlers (one per edge), + * clamps each to a sane min/max, writes the vars onto the shell root element as INLINE custom + * properties, PERSISTS the chosen layout to localStorage on every drag-end, RESTORES it on init, + * and offers reset() to clear the key and snap back to the exact defaults. + * + * COMPOSITION with the collapse-table fix (do NOT regress): + * The shell's DEFAULT rows are `52px auto 42px 1fr var(--table-h,34%)` while the collapsed rule + * `.rd-shell.rd-table-collapsed{ grid-template-rows:52px auto 42px 1fr 0 }` comes LATER in source + * order (same specificity) so COLLAPSE WINS over --table-h. Because we only touch the CSS var + * (never the collapsed row template), collapsing hides the table regardless of a dragged height, + * and expanding restores the user's dragged --table-h. The center map is 1fr and already + * self-resizes via DashboardMapPanel's ResizeObserver → map.resize(); we add no second resize. + * + * NON-REGRESSION with the responsive slim rails: + * `.rd-shell.rd-slim-rail{ --rail-w:240px }` / `.rd-shell.rd-slim-facet{ --facet-w:196px }` are + * medium-width niceties set via CLASS. Inline styles always beat class rules, so we apply inline + * vars ONLY once the layout is customized (restored-from-storage or dragged). An untouched + * dashboard writes no inline vars → the slim classes and the exact CSS defaults are preserved. + * reset() removes the inline vars entirely, fully handing control back to the stylesheet. + * + * DESKTOP-ONLY: every drag is gated on `!isNarrow`; narrow/mobile never resizes or persists. + * + * Library-parameterizable — the profile's identity (defaults + storage key) lives in options, not + * here. Any dashboard grid exposing the same three vars can reuse this unchanged. + * + * @param {object} options + * @param {import('vue').Ref} options.shellRef ref holding the .rd-shell root el + * @param {object=} options.bus selection bus; when given, listens bus.on('resetLayout', reset) + * @param {import('vue').Ref|boolean=} options.isNarrow desktop gate (true = mobile/narrow) + * @param {string=} options.storageKey localStorage key (default 'rd-dashboard-layout') + * @param {{facetW?:number, railW?:number, tableH?:string}=} options.defaults default track sizes + * @param {{facetW?:[number,number], railW?:[number,number], tableH?:[number,number]}=} options.clamps + * min/max — facetW/railW in px, tableH in percent-of-shell-height + * + * @returns {{ + * facetW: import('vue').Ref, railW: import('vue').Ref, tableH: import('vue').Ref, + * startFacetResize:(e:PointerEvent)=>void, startRailResize:(e:PointerEvent)=>void, + * startTableResize:(e:PointerEvent)=>void, reset:()=>void, applyVars:()=>void, customized:import('vue').Ref + * }} + */ +import { ref, unref, onMounted, onBeforeUnmount } from 'vue' + +const DEFAULTS = { facetW: 248, railW: 312, tableH: '34%' } +const CLAMPS = { facetW: [160, 420], railW: [200, 520], tableH: [12, 70] } + +const clamp = (v, [lo, hi]) => Math.min(hi, Math.max(lo, v)) +const pctNum = (v, fallback) => { + const n = parseFloat(String(v)) + return Number.isFinite(n) ? n : fallback +} + +export function useDashboardLayout(options = {}) { + const { + shellRef, + bus = null, + isNarrow = false, + storageKey = 'rd-dashboard-layout', + } = options + + const defaults = { ...DEFAULTS, ...(options.defaults || {}) } + const clamps = { ...CLAMPS, ...(options.clamps || {}) } + + const facetW = ref(defaults.facetW) // px + const railW = ref(defaults.railW) // px + const tableH = ref(defaults.tableH) // string, e.g. '34%' + const customized = ref(false) // has the user (or a restored layout) diverged from CSS defaults? + + const narrow = () => !!unref(isNarrow) + + // ── write / clear the three inline CSS custom properties on the shell root ── + function applyVars() { + const el = shellRef && shellRef.value + if (!el || !customized.value) return + el.style.setProperty('--facet-w', facetW.value + 'px') + el.style.setProperty('--rail-w', railW.value + 'px') + el.style.setProperty('--table-h', tableH.value) + } + function clearVars() { + const el = shellRef && shellRef.value + if (!el) return + el.style.removeProperty('--facet-w') + el.style.removeProperty('--rail-w') + el.style.removeProperty('--table-h') + } + + // ── persistence ── + function persist() { + try { + localStorage.setItem(storageKey, JSON.stringify({ + facetW: facetW.value, railW: railW.value, tableH: tableH.value, + })) + } catch (_) { /* storage blocked / SSR — layout still works this session */ } + } + function restore() { + try { + const raw = localStorage.getItem(storageKey) + if (!raw) return false + const s = JSON.parse(raw) + if (Number.isFinite(s.facetW)) facetW.value = clamp(s.facetW, clamps.facetW) + if (Number.isFinite(s.railW)) railW.value = clamp(s.railW, clamps.railW) + if (s.tableH != null) tableH.value = clamp(pctNum(s.tableH, pctNum(defaults.tableH, 34)), clamps.tableH) + '%' + customized.value = true + return true + } catch (_) { return false } + } + + // ── reset: clear the key + snap back to the EXACT defaults (hand control to the stylesheet) ── + function reset() { + try { localStorage.removeItem(storageKey) } catch (_) { /* ignore */ } + facetW.value = defaults.facetW + railW.value = defaults.railW + tableH.value = defaults.tableH + customized.value = false + clearVars() + } + + // ── generic pointer drag; axis ∈ 'facet' | 'rail' | 'table' ── + function startResize(axis, e) { + if (narrow()) return + const el = shellRef && shellRef.value + if (!el) return + e.preventDefault() + const rect = el.getBoundingClientRect() + const startX = e.clientX + const startFacet = facetW.value + const startRail = railW.value + const handleEl = e.currentTarget + try { handleEl && handleEl.setPointerCapture && handleEl.setPointerCapture(e.pointerId) } catch (_) {} + + function move(ev) { + if (axis === 'facet') { + // left facet edge → dragging right widens the facet column + facetW.value = Math.round(clamp(startFacet + (ev.clientX - startX), clamps.facetW)) + } else if (axis === 'rail') { + // right rail's LEFT edge → dragging left widens the rail column + railW.value = Math.round(clamp(startRail - (ev.clientX - startX), clamps.railW)) + } else if (axis === 'table') { + // map/table divider → dragging up grows the table (height measured from shell bottom) + const pct = ((rect.bottom - ev.clientY) / rect.height) * 100 + tableH.value = Math.round(clamp(pct, clamps.tableH)) + '%' + } + customized.value = true + applyVars() + } + function up(ev) { + window.removeEventListener('pointermove', move) + window.removeEventListener('pointerup', up) + window.removeEventListener('pointercancel', up) + try { handleEl && handleEl.releasePointerCapture && handleEl.releasePointerCapture(ev.pointerId) } catch (_) {} + persist() + } + window.addEventListener('pointermove', move) + window.addEventListener('pointerup', up) + window.addEventListener('pointercancel', up) + } + + const startFacetResize = (e) => startResize('facet', e) + const startRailResize = (e) => startResize('rail', e) + const startTableResize = (e) => startResize('table', e) + + // ── lifecycle: restore + apply after the shell el exists; wire the reset bus event ── + let offReset = null + onMounted(() => { + if (restore()) applyVars() + if (bus && typeof bus.on === 'function') offReset = bus.on('resetLayout', reset) + }) + onBeforeUnmount(() => { try { offReset && offReset() } catch (_) {} }) + + return { + facetW, railW, tableH, customized, + startFacetResize, startRailResize, startTableResize, + startResize, reset, applyVars, + } +} diff --git a/app-profiles/research-dashboard/src/composables/useDashboardShell.js b/app-profiles/research-dashboard/src/composables/useDashboardShell.js new file mode 100644 index 000000000..20b75145b --- /dev/null +++ b/app-profiles/research-dashboard/src/composables/useDashboardShell.js @@ -0,0 +1,221 @@ +/** + * useDashboardShell.js — the config-driven dashboard assembler (DOXA-LIB-2 foundation). + * + * Does generically what research-dashboard.vue's + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"cities-internet","scriptUrl":"./cities-internet/cities-internet.js","output":"doxa-maps/cities-internet/cities-internet.js","elements":["cities-internet-map"],"profiles":[{"profile":"connectivity-list","file":"connectivity-list.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-list/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"connectivity-map","file":"connectivity-map.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-map/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/data-tables/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}}]}]}; + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"country-posters","scriptUrl":"./country-posters/country-posters.js","output":"doxa-maps/country-posters/country-posters.js","elements":["country-posters-map"],"profiles":[{"profile":"countries-map","file":"countries-map.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/countries-map/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}},{"profile":"country-poster-wall","file":"country-poster-wall.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/country-poster-wall/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/country-poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}}]}]}; + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"demo-map","scriptUrl":"./demo-map/demo-map.js","output":"doxa-maps/demo-map/demo-map.js","elements":["demo-map"],"profiles":[{"profile":"demo-map","file":"demo-map.vue","description":"Simple two-tab demo map. Tab 1 colors pins by religion (shared","element":"demo-map","iframeUrl":"./demo-map/demo-map/index.html","scriptUrl":"./demo-map/demo-map.js","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./demo-map/demo-map.js\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/demo-map>"},"bundle":"demo-map"}]}]}; + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"doxa-research-map","scriptUrl":"./doxa-research-map/doxa-research-map.js","output":"doxa-maps/doxa-research-map/doxa-research-map.js","elements":["doxa-research-map"],"profiles":[{"profile":"research-map","file":"research-map.vue","description":"","element":"doxa-research-map","iframeUrl":"./doxa-research-map/research-map/index.html","scriptUrl":"./doxa-research-map/doxa-research-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-research-map/doxa-research-map.js\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-research-map>"}}]}]}; + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"doxa-simple-map","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","output":"doxa-maps/doxa-simple-map/doxa-simple-map.js","elements":["doxa-map","doxa-simple-map"],"profiles":[{"profile":"doxa-simple-map","file":"doxa-simple-map.vue","description":"","element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/index.html","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-map>"},"instances":[{"id":"prayer","title":"Prayer Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-prayer","dataSource":"pray-tools","tabs":[{"id":"prayer","colorStrategy":"prayer","legend":"prayer","popup":"prayer"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/prayer/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/prayer/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"engagement","title":"Engagement Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-engagement","dataSource":"pray-tools","tabs":[{"id":"engagement","colorStrategy":"engagement","legend":"engagement","popup":"engagement"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/engagement/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/engagement/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"adoption","title":"Adoption Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-adoption","dataSource":"pray-tools","tabs":[{"id":"adoption","colorStrategy":"adoption","legend":"adoption","popup":"adoption"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/adoption/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/adoption/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]}]}; + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"gospel-resources","scriptUrl":"./gospel-resources/gospel-resources.js","output":"doxa-maps/gospel-resources/gospel-resources.js","elements":["gospel-resources-map"],"profiles":[{"profile":"charts","file":"charts.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/charts/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/data-tables/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-list","file":"resources-list.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-list/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-map","file":"resources-map.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-map/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}}]}]}; + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"cities-internet","scriptUrl":"./cities-internet/cities-internet.js","output":"doxa-maps/cities-internet/cities-internet.js","elements":["cities-internet-map"],"profiles":[{"profile":"connectivity-list","file":"connectivity-list.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-list/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"connectivity-map","file":"connectivity-map.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-map/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/data-tables/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}}]},{"bundle":"country-posters","scriptUrl":"./country-posters/country-posters.js","output":"doxa-maps/country-posters/country-posters.js","elements":["country-posters-map"],"profiles":[{"profile":"countries-map","file":"countries-map.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/countries-map/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}},{"profile":"country-poster-wall","file":"country-poster-wall.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/country-poster-wall/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/country-poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}}]},{"bundle":"demo-map","scriptUrl":"./demo-map/demo-map.js","output":"doxa-maps/demo-map/demo-map.js","elements":["demo-map"],"profiles":[{"profile":"demo-map","file":"demo-map.vue","description":"Simple two-tab demo map. Tab 1 colors pins by religion (shared","element":"demo-map","iframeUrl":"./demo-map/demo-map/index.html","scriptUrl":"./demo-map/demo-map.js","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./demo-map/demo-map.js\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/demo-map>"},"bundle":"demo-map"}]},{"bundle":"doxa-research-map","scriptUrl":"./doxa-research-map/doxa-research-map.js","output":"doxa-maps/doxa-research-map/doxa-research-map.js","elements":["doxa-research-map"],"profiles":[{"profile":"research-map","file":"research-map.vue","description":"","element":"doxa-research-map","iframeUrl":"./doxa-research-map/research-map/index.html","scriptUrl":"./doxa-research-map/doxa-research-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-research-map/doxa-research-map.js\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-research-map>"}}]},{"bundle":"doxa-simple-map","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","output":"doxa-maps/doxa-simple-map/doxa-simple-map.js","elements":["doxa-map","doxa-simple-map"],"profiles":[{"profile":"doxa-simple-map","file":"doxa-simple-map.vue","description":"","element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/index.html","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-map>"},"instances":[{"id":"prayer","title":"Prayer Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-prayer","dataSource":"pray-tools","tabs":[{"id":"prayer","colorStrategy":"prayer","legend":"prayer","popup":"prayer"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/prayer/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/prayer/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"engagement","title":"Engagement Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-engagement","dataSource":"pray-tools","tabs":[{"id":"engagement","colorStrategy":"engagement","legend":"engagement","popup":"engagement"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/engagement/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/engagement/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"adoption","title":"Adoption Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-adoption","dataSource":"pray-tools","tabs":[{"id":"adoption","colorStrategy":"adoption","legend":"adoption","popup":"adoption"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/adoption/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/adoption/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"gospel-resources","scriptUrl":"./gospel-resources/gospel-resources.js","output":"doxa-maps/gospel-resources/gospel-resources.js","elements":["gospel-resources-map"],"profiles":[{"profile":"charts","file":"charts.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/charts/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/data-tables/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-list","file":"resources-list.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-list/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-map","file":"resources-map.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-map/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}}]},{"bundle":"key-cities","scriptUrl":"./key-cities/key-cities.js","output":"doxa-maps/key-cities/key-cities.js","elements":["key-cities-map"],"profiles":[{"profile":"cities-list","file":"cities-list.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/cities-list/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/cities-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"cities-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}},{"profile":"cities-map","file":"cities-map.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/cities-map/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/cities-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"cities-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}},{"profile":"city-poster-wall","file":"city-poster-wall.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/city-poster-wall/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/city-poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"city-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/data-tables/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}}]},{"bundle":"my-upg-100-list","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","output":"doxa-maps/my-upg-100-list/my-upg-100-list.js","elements":["my-upg-100-list-map"],"profiles":[{"profile":"poster-wall","file":"poster-wall.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/poster-wall/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-list","file":"upg-100-list.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/upg-100-list/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}}]},{"bundle":"research-dashboard","scriptUrl":"./research-dashboard/research-dashboard.js","output":"doxa-maps/research-dashboard/research-dashboard.js","elements":["research-dashboard-map"],"profiles":[{"profile":"research-dashboard","file":"research-dashboard.vue","description":"Coordinated-Multiple-Views research dashboard for 10/40-window UPGs (live pray.doxa.life): docked facet rail + map-as-hero + linked table/charts, brushing-and-linking over one in-memory store.","element":"research-dashboard-map","iframeUrl":"./research-dashboard/research-dashboard/index.html","scriptUrl":"./research-dashboard/research-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./research-dashboard/research-dashboard/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./research-dashboard/research-dashboard.js\">\u003c/script>\n\u003cresearch-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/research-dashboard-map>"},"bundle":"research-dashboard"}]},{"bundle":"template-bundle","scriptUrl":"./template-bundle/template-bundle.js","output":"doxa-maps/template-bundle/template-bundle.js","elements":["template-bundle"],"profiles":[{"profile":"template-map-a","file":"template-map-a.vue","description":"Minimal example profile A — a colored placeholder, no Mapbox or data.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-a/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-a/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"},{"profile":"template-map-b","file":"template-map-b.vue","description":"Minimal example profile B — a second profile in the same bundle.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-b/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-b/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"}]}]}; + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"key-cities","scriptUrl":"./key-cities/key-cities.js","output":"doxa-maps/key-cities/key-cities.js","elements":["key-cities-map"],"profiles":[{"profile":"cities-list","file":"cities-list.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/cities-list/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/cities-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"cities-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}},{"profile":"cities-map","file":"cities-map.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/cities-map/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/cities-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"cities-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}},{"profile":"city-poster-wall","file":"city-poster-wall.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/city-poster-wall/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/city-poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"city-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"key-cities-map","iframeUrl":"./key-cities/data-tables/index.html","scriptUrl":"./key-cities/key-cities.js","embed":{"iframe":"\u003ciframe src=\"./key-cities/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./key-cities/key-cities.js\">\u003c/script>\n\u003ckey-cities-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/key-cities-map>"}}]}]}; \n" + }, + "bundle": "research-dashboard" + } + ] + }, { "bundle": "template-bundle", "scriptUrl": "./template-bundle/template-bundle.js", diff --git a/public/doxa-maps/my-upg-100-list/index.html b/public/doxa-maps/my-upg-100-list/index.html index 70225c1e6..588f4fdc3 100644 --- a/public/doxa-maps/my-upg-100-list/index.html +++ b/public/doxa-maps/my-upg-100-list/index.html @@ -129,7 +129,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut) + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"my-upg-100-list","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","output":"doxa-maps/my-upg-100-list/my-upg-100-list.js","elements":["my-upg-100-list-map"],"profiles":[{"profile":"poster-wall","file":"poster-wall.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/poster-wall/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-list","file":"upg-100-list.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/upg-100-list/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}}]}]}; + + + diff --git a/public/doxa-maps/research-dashboard/research-dashboard.js b/public/doxa-maps/research-dashboard/research-dashboard.js new file mode 100644 index 000000000..db2ac4f8a --- /dev/null +++ b/public/doxa-maps/research-dashboard/research-dashboard.js @@ -0,0 +1,326 @@ +(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".profile-loader[data-v-e7b71944]{width:100%;height:100%;position:relative}.profile-error[data-v-e7b71944]{padding:1rem;background:#fff3cd;border:1px solid #ffc107;border-radius:4px;font-family:monospace;font-size:13px}")),document.head.appendChild(e)}}catch(d){console.error("vite-plugin-css-injected-by-js",d)}})(); +(function(){"use strict";var qc;var ka=typeof document<"u"?document.currentScript:null;const pv="modulepreload",hv=function(e){return"/"+e},mv={},Zc=function(t,n,o){let a=Promise.resolve();function r(s){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s}return a.then(s=>{for(const i of s||[])i.status==="rejected"&&r(i.reason);return t().catch(r)})};/** +* @vue/shared v3.5.42 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function La(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ne={},Ln=[],Lt=()=>{},ns=()=>!1,$o=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ao=e=>e.startsWith("onUpdate:"),De=Object.assign,Ea=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qc=Object.prototype.hasOwnProperty,Le=(e,t)=>Qc.call(e,t),fe=Array.isArray,tn=e=>Hn(e)==="[object Map]",ko=e=>Hn(e)==="[object Set]",os=e=>Hn(e)==="[object Date]",me=e=>typeof e=="function",Re=e=>typeof e=="string",ft=e=>typeof e=="symbol",Ee=e=>e!==null&&typeof e=="object",as=e=>(Ee(e)||me(e))&&me(e.then)&&me(e.catch),rs=Object.prototype.toString,Hn=e=>rs.call(e),eu=e=>Hn(e).slice(8,-1),Lo=e=>Hn(e)==="[object Object]",Eo=e=>Re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,zn=La(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),To=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},tu=/-\w/g,Ve=To(e=>e.replace(tu,t=>t.slice(1).toUpperCase())),nu=/\B([A-Z])/g,gt=To(e=>e.replace(nu,"-$1").toLowerCase()),Co=To(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ta=To(e=>e?`on${Co(e)}`:""),Et=(e,t)=>!Object.is(e,t),xo=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:n})},Ca=e=>{const t=parseFloat(e);return isNaN(t)?e:t},is=e=>{const t=Re(e)?Number(e):NaN;return isNaN(t)?e:t};let ls;const Po=()=>ls||(ls=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Bt(e){if(fe(e)){const t={};for(let n=0;n{if(n){const o=n.split(au);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Ze(e){let t="";if(Re(e))t=e;else if(fe(e))for(let n=0;n!!(e&&e.__v_isRef===!0),de=e=>Re(e)?e:e==null?"":fe(e)||Ee(e)&&(e.toString===rs||!me(e.toString))?ds(e)?de(e.value):JSON.stringify(e,fs,2):String(e),fs=(e,t)=>ds(t)?fs(e,t.value):tn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,a],r)=>(n[xa(o,r)+" =>"]=a,n),{})}:ko(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>xa(n))}:ft(t)?xa(t):Ee(t)&&!fe(t)&&!Lo(t)?String(t):t,xa=(e,t="")=>{var n;return ft(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.42 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let He;class gs{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&He&&(He.active?(this.parent=He,this.index=(He.scopes||(He.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const o=this.scopes.slice();for(t=0,n=o.length;t0&&--this._on===0){if(He===this)He=this.prevScope;else{let t=He;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,o;for(n=0,o=this.effects.length;n0)return;if(Wn){let t=Wn;for(Wn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Vn;){let t=Vn;for(Vn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=n}}if(e)throw e}function _s(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ys(e){let t,n=e.depsTail,o=n;for(;o;){const a=o.prevDep;o.version===-1?(o===n&&(n=a),Fa(o),uu(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=a}e.deps=t,e.depsTail=n}function Ra(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(vs(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function vs(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Yn)||(e.globalVersion=Yn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ra(e))))return;e.flags|=2;const t=e.dep,n=Me,o=vt;Me=e,vt=!0;try{_s(e);const a=e.fn(e._value);(t.version===0||Et(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{Me=n,vt=o,ys(e),e.flags&=-3}}function Fa(e,t=!1){const{dep:n,prevSub:o,nextSub:a}=e;if(o&&(o.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=o,e.nextSub=void 0),n.subs===e&&(n.subs=o,!o&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Fa(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function uu(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let vt=!0;const Ss=[];function Tt(){Ss.push(vt),vt=!1}function Ct(){const e=Ss.pop();vt=e===void 0?!0:e}function ws(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Me;Me=void 0;try{t()}finally{Me=n}}}let Yn=0;class du{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Oa{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Me||!vt||Me===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Me)n=this.activeLink=new du(Me,this),Me.deps?(n.prevDep=Me.depsTail,Me.depsTail.nextDep=n,Me.depsTail=n):Me.deps=Me.depsTail=n,$s(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const o=n.nextDep;o.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=o),n.prevDep=Me.depsTail,n.nextDep=void 0,Me.depsTail.nextDep=n,Me.depsTail=n,Me.deps===n&&(Me.deps=o)}return n}trigger(t){this.version++,Yn++,this.notify(t)}notify(t){Ma();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ia()}}}function $s(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)$s(o)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Mo=new WeakMap,bn=Symbol(""),Da=Symbol(""),qn=Symbol("");function Qe(e,t,n){if(vt&&Me){let o=Mo.get(e);o||Mo.set(e,o=new Map);let a=o.get(n);a||(o.set(n,a=new Oa),a.map=o,a.key=n),a.track()}}function Ut(e,t,n,o,a,r){const s=Mo.get(e);if(!s){Yn++;return}const i=l=>{l&&l.trigger()};if(Ma(),t==="clear")s.forEach(i);else{const l=fe(e),c=l&&Eo(n);if(l&&n==="length"){const u=Number(o);s.forEach((f,d)=>{(d==="length"||d===qn||!ft(d)&&d>=u)&&i(f)})}else switch((n!==void 0||s.has(void 0))&&i(s.get(n)),c&&i(s.get(qn)),t){case"add":l?c&&i(s.get("length")):(i(s.get(bn)),tn(e)&&i(s.get(Da)));break;case"delete":l||(i(s.get(bn)),tn(e)&&i(s.get(Da)));break;case"set":tn(e)&&i(s.get(bn));break}}Ia()}function fu(e,t){const n=Mo.get(e);return n&&n.get(t)}function En(e){const t=$e(e);return t===e?t:(Qe(t,"iterate",qn),pt(e)?t:t.map(St))}function Io(e){return Qe(e=$e(e),"iterate",qn),e}function xt(e,t){return Gt(e)?Tn(Kt(e)?St(t):t):St(t)}const gu={__proto__:null,[Symbol.iterator](){return Ba(this,Symbol.iterator,e=>xt(this,e))},concat(...e){return En(this).concat(...e.map(t=>fe(t)?En(t):t))},entries(){return Ba(this,"entries",e=>(e[1]=xt(this,e[1]),e))},every(e,t){return jt(this,"every",e,t,void 0,arguments)},filter(e,t){return jt(this,"filter",e,t,n=>n.map(o=>xt(this,o)),arguments)},find(e,t){return jt(this,"find",e,t,n=>xt(this,n),arguments)},findIndex(e,t){return jt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return jt(this,"findLast",e,t,n=>xt(this,n),arguments)},findLastIndex(e,t){return jt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return jt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ua(this,"includes",e)},indexOf(...e){return Ua(this,"indexOf",e)},join(e){return En(this).join(e)},lastIndexOf(...e){return Ua(this,"lastIndexOf",e)},map(e,t){return jt(this,"map",e,t,void 0,arguments)},pop(){return Jn(this,"pop")},push(...e){return Jn(this,"push",e)},reduce(e,...t){return As(this,"reduce",e,t)},reduceRight(e,...t){return As(this,"reduceRight",e,t)},shift(){return Jn(this,"shift")},some(e,t){return jt(this,"some",e,t,void 0,arguments)},splice(...e){return Jn(this,"splice",e)},toReversed(){return En(this).toReversed()},toSorted(e){return En(this).toSorted(e)},toSpliced(...e){return En(this).toSpliced(...e)},unshift(...e){return Jn(this,"unshift",e)},values(){return Ba(this,"values",e=>xt(this,e))}};function Ba(e,t,n){const o=Io(e),a=o[t]();return o!==e&&!pt(e)&&(a._next=a.next,a.next=()=>{const r=a._next();return r.done||(r.value=n(r.value)),r}),a}const pu=Array.prototype;function jt(e,t,n,o,a,r){const s=Io(e),i=s!==e&&!pt(e),l=s[t];if(l!==pu[t]){const f=l.apply(e,r);return i?St(f):f}let c=n;s!==e&&(i?c=function(f,d){return n.call(this,xt(e,f),d,e)}:n.length>2&&(c=function(f,d){return n.call(this,f,d,e)}));const u=l.call(s,c,o);return i&&a?a(u):u}function As(e,t,n,o){const a=Io(e),r=a!==e&&!pt(e);let s=n,i=!1;a!==e&&(r?(i=o.length===0,s=function(c,u,f){return i&&(i=!1,c=xt(e,c)),n.call(this,c,xt(e,u),f,e)}):n.length>3&&(s=function(c,u,f){return n.call(this,c,u,f,e)}));const l=a[t](s,...o);return i?xt(e,l):l}function Ua(e,t,n){const o=$e(e);Qe(o,"iterate",qn);const a=o[t](...n);return(a===-1||a===!1)&&Bo(n[0])?(n[0]=$e(n[0]),o[t](...n)):a}function Jn(e,t,n=[]){Tt(),Ma();const o=$e(e)[t].apply(e,n);return Ia(),Ct(),o}const hu=La("__proto__,__v_isRef,__isVue"),ks=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ft));function mu(e){ft(e)||(e=String(e));const t=$e(this);return Qe(t,"has",e),t.hasOwnProperty(e)}class Ls{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,o){if(n==="__v_skip")return t.__v_skip;const a=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!a;if(n==="__v_isReadonly")return a;if(n==="__v_isShallow")return r;if(n==="__v_raw")return o===(a?r?Ns:Ps:r?xs:Cs).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const s=fe(t);if(!a){let l;if(s&&(l=gu[n]))return l;if(n==="hasOwnProperty")return mu}const i=Reflect.get(t,n,Oe(t)?t:o);if((ft(n)?ks.has(n):hu(n))||(a||Qe(t,"get",n),r))return i;if(Oe(i)){const l=s&&Eo(n)?i:i.value;return a&&Ee(l)?Ka(l):l}return Ee(i)?a?Ka(i):_n(i):i}}class Es extends Ls{constructor(t=!1){super(!1,t)}set(t,n,o,a){let r=t[n];const s=fe(t)&&Eo(n);if(!this._isShallow){const c=Gt(r);if(!pt(o)&&!Gt(o)&&(r=$e(r),o=$e(o)),!s&&Oe(r)&&!Oe(o))return c||(r.value=o),!0}const i=s?Number(n)e,Ro=e=>Reflect.getPrototypeOf(e);function Su(e,t,n){return function(...o){const a=this.__v_raw,r=$e(a),s=tn(r),i=e==="entries"||e===Symbol.iterator&&s,l=e==="keys"&&s,c=a[e](...o),u=n?ja:t?Tn:St;return!t&&Qe(r,"iterate",l?Da:bn),De(Object.create(c),{next(){const{value:f,done:d}=c.next();return d?{value:f,done:d}:{value:i?[u(f[0]),u(f[1])]:u(f),done:d}}})}}function Fo(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function wu(e,t){const n={get(a){const r=this.__v_raw,s=$e(r),i=$e(a);e||(Et(a,i)&&Qe(s,"get",a),Qe(s,"get",i));const{has:l}=Ro(s),c=t?ja:e?Tn:St;if(l.call(s,a))return c(r.get(a));if(l.call(s,i))return c(r.get(i));r!==s&&r.get(a)},get size(){const a=this.__v_raw;return!e&&Qe($e(a),"iterate",bn),a.size},has(a){const r=this.__v_raw,s=$e(r),i=$e(a);return e||(Et(a,i)&&Qe(s,"has",a),Qe(s,"has",i)),a===i?r.has(a):r.has(a)||r.has(i)},forEach(a,r){const s=this,i=s.__v_raw,l=$e(i),c=t?ja:e?Tn:St;return!e&&Qe(l,"iterate",bn),i.forEach((u,f)=>a.call(r,c(u),c(f),s))}};return De(n,e?{add:Fo("add"),set:Fo("set"),delete:Fo("delete"),clear:Fo("clear")}:{add(a){const r=$e(this),s=Ro(r),i=$e(a),l=!t&&!pt(a)&&!Gt(a)?i:a;return s.has.call(r,l)||Et(a,l)&&s.has.call(r,a)||Et(i,l)&&s.has.call(r,i)||(r.add(l),Ut(r,"add",l,l)),this},set(a,r){!t&&!pt(r)&&!Gt(r)&&(r=$e(r));const s=$e(this),{has:i,get:l}=Ro(s);let c=i.call(s,a);c||(a=$e(a),c=i.call(s,a));const u=l.call(s,a);return s.set(a,r),c?Et(r,u)&&Ut(s,"set",a,r):Ut(s,"add",a,r),this},delete(a){const r=$e(this),{has:s,get:i}=Ro(r);let l=s.call(r,a);l||(a=$e(a),l=s.call(r,a)),i&&i.call(r,a);const c=r.delete(a);return l&&Ut(r,"delete",a,void 0),c},clear(){const a=$e(this),r=a.size!==0,s=a.clear();return r&&Ut(a,"clear",void 0,void 0),s}}),["keys","values","entries",Symbol.iterator].forEach(a=>{n[a]=Su(a,e,t)}),n}function Oo(e,t){const n=wu(e,t);return(o,a,r)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?o:Reflect.get(Le(n,a)&&a in o?n:o,a,r)}const $u={get:Oo(!1,!1)},Au={get:Oo(!1,!0)},ku={get:Oo(!0,!1)},Lu={get:Oo(!0,!0)},Cs=new WeakMap,xs=new WeakMap,Ps=new WeakMap,Ns=new WeakMap;function Eu(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function _n(e){return Gt(e)?e:Do(e,!1,bu,$u,Cs)}function Tu(e){return Do(e,!1,yu,Au,xs)}function Ka(e){return Do(e,!0,_u,ku,Ps)}function _v(e){return Do(e,!0,vu,Lu,Ns)}function Do(e,t,n,o,a){if(!Ee(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const r=a.get(e);if(r)return r;const s=Eu(eu(e));if(s===0)return e;const i=new Proxy(e,s===2?o:n);return a.set(e,i),i}function Kt(e){return Gt(e)?Kt(e.__v_raw):!!(e&&e.__v_isReactive)}function Gt(e){return!!(e&&e.__v_isReadonly)}function pt(e){return!!(e&&e.__v_isShallow)}function Bo(e){return e?!!e.__v_raw:!1}function $e(e){const t=e&&e.__v_raw;return t?$e(t):e}function Xn(e){return!Le(e,"__v_skip")&&Object.isExtensible(e)&&ss(e,"__v_skip",!0),e}const St=e=>Ee(e)?_n(e):e,Tn=e=>Ee(e)?Ka(e):e;function Oe(e){return e?e.__v_isRef===!0:!1}function pe(e){return Ms(e,!1)}function Uo(e){return Ms(e,!0)}function Ms(e,t){return Oe(e)?e:new Cu(e,t)}class Cu{constructor(t,n){this.dep=new Oa,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:$e(t),this._value=n?t:St(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,o=this.__v_isShallow||pt(t)||Gt(t);t=o?t:$e(t),Et(t,n)&&(this._rawValue=t,this._value=o?t:St(t),this.dep.trigger())}}function re(e){return Oe(e)?e.value:e}const xu={get:(e,t,n)=>t==="__v_raw"?e:re(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const a=e[t];return Oe(a)&&!Oe(n)?(a.value=n,!0):Reflect.set(e,t,n,o)}};function Is(e){return Kt(e)?e:new Proxy(e,xu)}function Pu(e){const t=fe(e)?new Array(e.length):{};for(const n in e)t[n]=Mu(e,n);return t}class Nu{constructor(t,n,o){this._object=t,this._defaultValue=o,this.__v_isRef=!0,this._value=void 0,this._key=ft(n)?n:String(n),this._raw=$e(t);let a=!0,r=t;if(!fe(t)||ft(this._key)||!Eo(this._key))do a=!Bo(r)||pt(r);while(a&&(r=r.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=re(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Oe(this._raw[this._key])){const n=this._object[this._key];if(Oe(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return fu(this._raw,this._key)}}function Mu(e,t,n){return new Nu(e,t,n)}class Iu{constructor(t,n,o){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Oa(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Yn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&Me!==this)return bs(this,!0),!0}get value(){const t=this.dep.track();return vs(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ru(e,t,n=!1){let o,a;return me(e)?o=e:(o=e.get,a=e.set),new Iu(o,a,n)}const jo={},Ko=new WeakMap;let yn;function Fu(e,t=!1,n=yn){if(n){let o=Ko.get(n);o||Ko.set(n,o=[]),o.push(e)}}function Ou(e,t,n=Ne){const{immediate:o,deep:a,once:r,scheduler:s,augmentJob:i,call:l}=n,c=m=>a?m:pt(m)||a===!1||a===0?Ht(m,1):Ht(m);let u,f,d,b,_=!1,v=!1;if(Oe(e)?(f=()=>e.value,_=pt(e)):Kt(e)?(f=()=>c(e),_=!0):fe(e)?(v=!0,_=e.some(m=>Kt(m)||pt(m)),f=()=>e.map(m=>{if(Oe(m))return m.value;if(Kt(m))return c(m);if(me(m))return l?l(m,2):m()})):me(e)?t?f=l?()=>l(e,2):e:f=()=>{if(d){Tt();try{d()}finally{Ct()}}const m=yn;yn=u;try{return l?l(e,3,[b]):e(b)}finally{yn=m}}:f=Lt,t&&a){const m=f,w=a===!0?1/0:a;f=()=>Ht(m(),w)}const E=ps(),k=()=>{u.stop(),E&&E.active&&Ea(E.effects,u)};if(r&&t){const m=t;t=(...w)=>{const S=m(...w);return k(),S}}let A=v?new Array(e.length).fill(jo):jo;const h=m=>{if(!(!(u.flags&1)||!u.dirty&&!m))if(t){const w=u.run();if(m||a||_||(v?w.some((S,T)=>Et(S,A[T])):Et(w,A))){d&&d();const S=yn;yn=u;try{const T=[w,A===jo?void 0:v&&A[0]===jo?[]:A,b];A=w,l?l(t,3,T):t(...T)}finally{yn=S}}}else u.run()};return i&&i(h),u=new hs(f),u.scheduler=s?()=>s(h,!1):h,b=m=>Fu(m,!1,u),d=u.onStop=()=>{const m=Ko.get(u);if(m){if(l)l(m,4);else for(const w of m)w();Ko.delete(u)}},t?o?h(!0):A=u.run():s?s(h.bind(null,!0),!0):u.run(),k.pause=u.pause.bind(u),k.resume=u.resume.bind(u),k.stop=k,k}function Ht(e,t=1/0,n){if(t<=0||!Ee(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Oe(e))Ht(e.value,t,n);else if(fe(e))for(let o=0;o{Ht(o,t,n)});else if(Lo(e)){for(const o in e)Ht(e[o],t,n);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&Ht(e[o],t,n)}return e}/** +* @vue/runtime-core v3.5.42 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const Zn=[];let Ga=!1;function yv(e,...t){if(Ga)return;Ga=!0,Tt();const n=Zn.length?Zn[Zn.length-1].component:null,o=n&&n.appContext.config.warnHandler,a=Du();if(o)Cn(o,n,11,[e+t.map(r=>{var s,i;return(i=(s=r.toString)==null?void 0:s.call(r))!=null?i:JSON.stringify(r)}).join(""),n&&n.proxy,a.map(({vnode:r})=>`at <${xi(n,r.type)}>`).join(` +`),a]);else{const r=[`[Vue warn]: ${e}`,...t];a.length&&r.push(` +`,...Bu(a)),console.warn(...r)}Ct(),Ga=!1}function Du(){let e=Zn[Zn.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const o=e.component&&e.component.parent;e=o&&o.vnode}return t}function Bu(e){const t=[];return e.forEach((n,o)=>{t.push(...o===0?[]:[` +`],...Uu(n))}),t}function Uu({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",o=e.component?e.component.parent==null:!1,a=` at <${xi(e.component,e.type,o)}`,r=">"+n;return e.props?[a,...ju(e.props),r]:[a+r]}function ju(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(o=>{t.push(...Rs(o,e[o]))}),n.length>3&&t.push(" ..."),t}function Rs(e,t,n){return Re(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:Oe(t)?(t=Rs(e,$e(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):me(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=$e(t),n?t:[`${e}=`,t])}function Cn(e,t,n,o){try{return o?e(...o):e()}catch(a){Qn(a,t,n)}}function wt(e,t,n,o){if(me(e)){const a=Cn(e,t,n,o);return a&&as(a)&&a.catch(r=>{Qn(r,t,n)}),a}if(fe(e)){const a=[];for(let r=0;r>>1,a=nt[o],r=eo(a);r=eo(n)?nt.push(e):nt.splice(Gu(t),0,e),e.flags|=1,Os()}}function Os(){Go||(Go=Fs.then(Us))}function Hu(e){if(!fe(e))nn&&e.id===-1?nn.splice(Pn+1,0,e):e.flags&1||(xn.push(e),e.flags|=1);else for(let t=0;teo(n)-eo(o));if(xn.length=0,nn){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Us(e){try{for(Pt=0;Pt{o._d&&ea(-1);const r=zo(t),s=Wt.length;let i;try{i=e(...a)}finally{for(let l=Wt.length;l>s;l--)ar();zo(r),o._d&&ea(1)}return i};return o._n=!0,o._c=!0,o._d=!0,o}function zt(e,t){if(Ye===null)return e;const n=aa(Ye),o=e.dirs||(e.dirs=[]);for(let a=0;a1)return n&&me(t)?t.call(o&&o.proxy):t}}function Vu(){return!!(an()||Sn)}const Wu=Symbol.for("v-scx"),Yu=()=>ve(Wu);function qu(e,t){return za(e,null,t)}function bt(e,t,n){return za(e,t,n)}function za(e,t,n=Ne){const{immediate:o,deep:a,flush:r,once:s}=n,i=De({},n),l=t&&o||!t&&r!=="post";let c;if(In){if(r==="sync"){const b=Yu();c=b.__watcherHandles||(b.__watcherHandles=[])}else if(!l){const b=()=>{};return b.stop=Lt,b.resume=Lt,b.pause=Lt,b}}const u=qe;i.call=(b,_,v)=>wt(b,u,_,v);let f=!1;r==="post"?i.scheduler=b=>{lt(b,u&&u.suspense)}:r!=="sync"&&(f=!0,i.scheduler=(b,_)=>{_?b():Ha(b)}),i.augmentJob=b=>{t&&(b.flags|=4),f&&(b.flags|=2,u&&(b.id=u.uid,b.i=u))};const d=Ou(e,t,i);return In&&(c?c.push(d):l&&d()),d}function Ju(e,t,n){const o=this.proxy,a=Re(e)?e.includes(".")?Ks(o,e):()=>o[e]:e.bind(o,o);let r;me(t)?r=t:(r=t.handler,n=t);const s=fo(this),i=za(a,r.bind(o),n);return s(),i}function Ks(e,t){const n=t.split(".");return()=>{let o=e;for(let a=0;ae.__isTeleport,Va=Symbol("_leaveCb");function Zu(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Nt){t=n;break}}return t}function Gs(e){if(!qo(e))return Vo(e.type)&&e.children?Zu(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&me(n.default))return n.default()}}function Wa(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;Wa(Vo(n.type)&&Gs(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function to(e,t){return me(e)?De({name:e.name},t,{setup:e}):e}function Ya(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Hs(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const Wo=new WeakMap;function no(e,t,n,o,a=!1){if(fe(e)){e.forEach((v,E)=>no(v,t&&(fe(t)?t[E]:t),n,o,a));return}if(Nn(o)&&!a){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&no(e,t,n,o.component.subTree);return}const r=o.shapeFlag&4?aa(o.component):o.el,s=a?null:r,{i,r:l}=e,c=t&&t.r,u=i.refs===Ne?i.refs={}:i.refs,f=i.setupState,d=$e(f),b=f===Ne?ns:v=>Hs(u,v)?!1:Le(d,v),_=(v,E)=>!(E&&Hs(u,E));if(c!=null&&c!==l){if(zs(t),Re(c))u[c]=null,b(c)&&(f[c]=null);else if(Oe(c)){const v=t;_(c,v.k)&&(c.value=null),v.k&&(u[v.k]=null)}}if(me(l))Cn(l,i,12,[s,u]);else{const v=Re(l),E=Oe(l);if(v||E){const k=()=>{if(e.f){const A=v?b(l)?f[l]:u[l]:_()||!e.k?l.value:u[e.k];if(a)fe(A)&&Ea(A,r);else if(fe(A))A.includes(r)||A.push(r);else if(v)u[l]=[r],b(l)&&(f[l]=u[l]);else{const h=[r];_(l,e.k)&&(l.value=h),e.k&&(u[e.k]=h)}}else v?(u[l]=s,b(l)&&(f[l]=s)):E&&(_(l,e.k)&&(l.value=s),e.k&&(u[e.k]=s))};if(s){const A=()=>{k(),Wo.delete(e)};A.id=-1,Wo.set(e,A),lt(A,n)}else zs(e),k()}}}function zs(e){const t=Wo.get(e);t&&(t.flags|=8,Wo.delete(e))}const Vs=e=>e.nodeType===8;Po().requestIdleCallback,Po().cancelIdleCallback;function Qu(e,t){if(Vs(e)&&e.data==="["){let n=1,o=e.nextSibling;for(;o;){if(o.nodeType===1){if(t(o)===!1)break}else if(Vs(o))if(o.data==="]"){if(--n===0)break}else o.data==="["&&n++;o=o.nextSibling}}else t(e)}const Nn=e=>!!e.type.__asyncLoader;function ed(e){me(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:a=200,hydrate:r,timeout:s,suspensible:i=!0,onError:l}=e;let c=null,u,f=0;const d=()=>(f++,c=null,b()),b=()=>{let _;return c||(_=c=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),l)return new Promise((E,k)=>{l(v,()=>E(d()),()=>k(v),f+1)});throw v}).then(v=>_!==c&&c?c:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),u=v,v)))};return to({name:"AsyncComponentWrapper",__asyncLoader:b,__asyncHydrate(_,v,E){const k=_.isConnected;let A=!1;(v.bu||(v.bu=[])).push(()=>A=!0);const h=()=>{A||!_.parentNode||k&&!_.isConnected||E()},m=r?()=>{const w=r(h,S=>Qu(_,S));w&&(v.bum||(v.bum=[])).push(w)}:h;u?m():b().then(()=>!v.isUnmounted&&m())},get __asyncResolved(){return u},setup(){const _=qe;if(Ya(_),u)return()=>Yo(u,_);const v=w=>{c=null,Qn(w,_,13,!o)};if(i&&_.suspense||In)return b().then(w=>()=>Yo(w,_)).catch(w=>(v(w),()=>o?Ce(o,{error:w}):null));const E=pe(!1),k=pe(),A=pe(!!a);let h,m;return Xo(()=>{h!=null&&clearTimeout(h),m!=null&&clearTimeout(m)}),a&&(m=setTimeout(()=>{_.isUnmounted||(A.value=!1)},a)),s!=null&&(h=setTimeout(()=>{if(!_.isUnmounted&&!E.value&&!k.value){const w=new Error(`Async component timed out after ${s}ms.`);v(w),k.value=w}},s)),b().then(()=>{_.isUnmounted||(E.value=!0,_.parent&&qo(_.parent.vnode)&&_.parent.update())}).catch(w=>{if(_.isUnmounted){c=null;return}v(w),k.value=w}),()=>{if(E.value&&u)return Yo(u,_);if(k.value&&o)return Ce(o,{error:k.value});if(n&&!A.value)return Yo(n,_)}}})}function Yo(e,t){const{ref:n,props:o,children:a,ce:r}=t.vnode,s=Ce(e,o,a);return s.ref=n,s.ce=r,delete t.vnode.ce,s}const qo=e=>e.type.__isKeepAlive;function td(e,t){Ws(e,"a",t)}function nd(e,t){Ws(e,"da",t)}function Ws(e,t,n=qe){const o=e.__wdc||(e.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(Jo(t,o,n),n){let a=n.parent;for(;a&&a.parent;)qo(a.parent.vnode)&&od(o,t,n,a),a=a.parent}}function od(e,t,n,o){const a=Jo(t,e,o,!0);Xo(()=>{Ea(o[t],a)},n)}function Jo(e,t,n=qe,o=!1){if(n){const a=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...s)=>{Tt();const i=fo(n),l=wt(t,n,e,s);return i(),Ct(),l});return o?a.unshift(r):a.push(r),r}}const Vt=e=>(t,n=qe)=>{(!In||e==="sp")&&Jo(e,(...o)=>t(...o),n)},Ys=Vt("bm"),it=Vt("m"),ad=Vt("bu"),rd=Vt("u"),on=Vt("bum"),Xo=Vt("um"),sd=Vt("sp"),id=Vt("rtg"),ld=Vt("rtc");function cd(e,t=qe){Jo("ec",e,t)}const ud="components",qs=Symbol.for("v-ndc");function dd(e){return Re(e)?fd(ud,e,!1)||e:e||qs}function fd(e,t,n=!0,o=!1){const a=Ye||qe;if(a){const r=a.type;{const i=Ci(r,!1);if(i&&(i===t||i===Ve(t)||i===Co(Ve(t))))return r}const s=Js(a[e]||r[e],t)||Js(a.appContext[e],t);return!s&&o?r:s}}function Js(e,t){return e&&(e[t]||e[Ve(t)]||e[Co(Ve(t))])}function et(e,t,n,o){let a;const r=n,s=fe(e);if(s||Re(e)){const i=s&&Kt(e);let l=!1,c=!1;i&&(l=!pt(e),c=Gt(e),e=Io(e)),a=new Array(e.length);for(let u=0,f=e.length;ut(i,l,void 0,r));else{const i=Object.keys(e);a=new Array(i.length);for(let l=0,c=i.length;l0;return ae(),io(Ae,null,[Ce("slot",c,o)],u?-2:64)}let s=e[t];s&&s._c&&(s._d=!1);const i=Wt.length;ae();let l;try{const c=s&&Xs(s(n)),u=n.key||r||c&&c.key;l=io(Ae,{key:(u&&!ft(u)?u:`_${t}`)+(!c&&o?"_fb":"")},c||(o?o():[]),c&&e._===1?64:-2)}catch(c){for(let u=Wt.length;u>i;u--)ar();throw c}finally{s&&s._c&&(s._d=!0)}return l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),l}function Xs(e){return e.some(t=>lo(t)?!(t.type===Nt||t.type===Ae&&!Xs(t.children)):!0)?e:null}const qa=e=>e?Li(e)?aa(e):qa(e.parent):null,oo=De(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>qa(e.parent),$root:e=>qa(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ti(e),$forceUpdate:e=>e.f||(e.f=()=>{Ha(e.update)}),$nextTick:e=>e.n||(e.n=Ho.bind(e.proxy)),$watch:e=>Ju.bind(e)}),Ja=(e,t)=>e!==Ne&&!e.__isScriptSetup&&Le(e,t),pd={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:o,data:a,props:r,accessCache:s,type:i,appContext:l}=e;if(t[0]!=="$"){const d=s[t];if(d!==void 0)switch(d){case 1:return o[t];case 2:return a[t];case 4:return n[t];case 3:return r[t]}else{if(Ja(o,t))return s[t]=1,o[t];if(a!==Ne&&Le(a,t))return s[t]=2,a[t];if(Le(r,t))return s[t]=3,r[t];if(n!==Ne&&Le(n,t))return s[t]=4,n[t];Xa&&(s[t]=0)}}const c=oo[t];let u,f;if(c)return t==="$attrs"&&Qe(e.attrs,"get",""),c(e);if((u=i.__cssModules)&&(u=u[t]))return u;if(n!==Ne&&Le(n,t))return s[t]=4,n[t];if(f=l.config.globalProperties,Le(f,t))return f[t]},set({_:e},t,n){const{data:o,setupState:a,ctx:r}=e;return Ja(a,t)?(a[t]=n,!0):o!==Ne&&Le(o,t)?(o[t]=n,!0):Le(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:a,props:r,type:s}},i){let l;return!!(n[i]||e!==Ne&&i[0]!=="$"&&Le(e,i)||Ja(t,i)||Le(r,i)||Le(o,i)||Le(oo,i)||Le(a.config.globalProperties,i)||(l=s.__cssModules)&&l[i])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Le(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Zs(e){return fe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Xa=!0;function hd(e){const t=ti(e),n=e.proxy,o=e.ctx;Xa=!1,t.beforeCreate&&Qs(t.beforeCreate,e,"bc");const{data:a,computed:r,methods:s,watch:i,provide:l,inject:c,created:u,beforeMount:f,mounted:d,beforeUpdate:b,updated:_,activated:v,deactivated:E,beforeDestroy:k,beforeUnmount:A,destroyed:h,unmounted:m,render:w,renderTracked:S,renderTriggered:T,errorCaptured:C,serverPrefetch:x,expose:F,inheritAttrs:W,components:z,directives:P,filters:H}=t;if(c&&md(c,o,null),s)for(const Y in s){const J=s[Y];me(J)&&(o[Y]=J.bind(n))}if(a){const Y=a.call(n,n);Ee(Y)&&(e.data=_n(Y))}if(Xa=!0,r)for(const Y in r){const J=r[Y],te=me(J)?J.bind(n,n):me(J.get)?J.get.bind(n,n):Lt,G=!me(J)&&me(J.set)?J.set.bind(n):Lt,q=se({get:te,set:G});Object.defineProperty(o,Y,{enumerable:!0,configurable:!0,get:()=>q.value,set:ee=>q.value=ee})}if(i)for(const Y in i)ei(i[Y],o,n,Y);if(l){const Y=me(l)?l.call(n):l;Reflect.ownKeys(Y).forEach(J=>{ot(J,Y[J])})}u&&Qs(u,e,"c");function U(Y,J){fe(J)?J.forEach(te=>Y(te.bind(n))):J&&Y(J.bind(n))}if(U(Ys,f),U(it,d),U(ad,b),U(rd,_),U(td,v),U(nd,E),U(cd,C),U(ld,S),U(id,T),U(on,A),U(Xo,m),U(sd,x),fe(F))if(F.length){const Y=e.exposed||(e.exposed={});F.forEach(J=>{Object.defineProperty(Y,J,{get:()=>n[J],set:te=>n[J]=te,enumerable:!0})})}else e.exposed||(e.exposed={});w&&e.render===Lt&&(e.render=w),W!=null&&(e.inheritAttrs=W),z&&(e.components=z),P&&(e.directives=P),x&&Ya(e)}function md(e,t,n=Lt){fe(e)&&(e=Za(e));for(const o in e){const a=e[o];let r;Ee(a)?"default"in a?r=ve(a.from||o,a.default,!0):r=ve(a.from||o):r=ve(a),Oe(r)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:s=>r.value=s}):t[o]=r}}function Qs(e,t,n){wt(fe(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function ei(e,t,n,o){let a=o.includes(".")?Ks(n,o):()=>n[o];if(Re(e)){const r=t[e];me(r)&&bt(a,r)}else if(me(e))bt(a,e.bind(n));else if(Ee(e))if(fe(e))e.forEach(r=>ei(r,t,n,o));else{const r=me(e.handler)?e.handler.bind(n):t[e.handler];me(r)&&bt(a,r,e)}}function ti(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:a,optionsCache:r,config:{optionMergeStrategies:s}}=e.appContext,i=r.get(t);let l;return i?l=i:!a.length&&!n&&!o?l=t:(l={},a.length&&a.forEach(c=>Zo(l,c,s,!0)),Zo(l,t,s)),Ee(t)&&r.set(t,l),l}function Zo(e,t,n,o=!1){const{mixins:a,extends:r}=t;r&&Zo(e,r,n,!0),a&&a.forEach(s=>Zo(e,s,n,!0));for(const s in t)if(!(o&&s==="expose")){const i=bd[s]||n&&n[s];e[s]=i?i(e[s],t[s]):t[s]}return e}const bd={data:ni,props:oi,emits:oi,methods:ao,computed:ao,beforeCreate:at,created:at,beforeMount:at,mounted:at,beforeUpdate:at,updated:at,beforeDestroy:at,beforeUnmount:at,destroyed:at,unmounted:at,activated:at,deactivated:at,errorCaptured:at,serverPrefetch:at,components:ao,directives:ao,watch:yd,provide:ni,inject:_d};function ni(e,t){return t?e?function(){return De(me(e)?e.call(this,this):e,me(t)?t.call(this,this):t)}:t:e}function _d(e,t){return ao(Za(e),Za(t))}function Za(e){if(fe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ve(t)}Modifiers`]||e[`${gt(t)}Modifiers`];function $d(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||Ne;let a=n;const r=t.startsWith("update:"),s=r&&wd(o,t.slice(7));s&&(s.trim&&(a=n.map(u=>Re(u)?u.trim():u)),s.number&&(a=a.map(Ca)));let i,l=o[i=Ta(t)]||o[i=Ta(Ve(t))];!l&&r&&(l=o[i=Ta(gt(t))]),l&&wt(l,e,6,a);const c=o[i+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,wt(c,e,6,a)}}const Ad=new WeakMap;function ri(e,t,n=!1){const o=n?Ad:t.emitsCache,a=o.get(e);if(a!==void 0)return a;const r=e.emits;let s={},i=!1;if(!me(e)){const l=c=>{const u=ri(c,t,!0);u&&(i=!0,De(s,u))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!r&&!i?(Ee(e)&&o.set(e,null),null):(fe(r)?r.forEach(l=>s[l]=null):De(s,r),Ee(e)&&o.set(e,s),s)}function Qo(e,t){return!e||!$o(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Le(e,t[0].toLowerCase()+t.slice(1))||Le(e,gt(t))||Le(e,t))}function vv(){}function si(e){const{type:t,vnode:n,proxy:o,withProxy:a,propsOptions:[r],slots:s,attrs:i,emit:l,render:c,renderCache:u,props:f,data:d,setupState:b,ctx:_,inheritAttrs:v}=e,E=zo(e);let k,A;try{if(n.shapeFlag&4){const m=a||o,w=m;k=Mt(c.call(w,m,u,f,b,d,_)),A=i}else{const m=t;k=Mt(m.length>1?m(f,{attrs:i,slots:s,emit:l}):m(f,null)),A=t.props?i:kd(i)}}catch(m){Wt.length=0,Qn(m,e,1),k=Ce(Nt)}let h=k;if(A&&v!==!1){const m=Object.keys(A),{shapeFlag:w}=h;m.length&&w&7&&(r&&m.some(Ao)&&(A=Ld(A,r)),h=Mn(h,A,!1,!0))}if(n.dirs&&(h=Mn(h,null,!1,!0),h.dirs=h.dirs?h.dirs.concat(n.dirs):n.dirs),n.transition){const m=Vo(h.type)&&Gs(h)||h;Wa(m,n.transition)}return k=h,zo(E),k}const kd=e=>{let t;for(const n in e)(n==="class"||n==="style"||$o(n))&&((t||(t={}))[n]=e[n]);return t},Ld=(e,t)=>{const n={};for(const o in e)(!Ao(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Ed(e,t,n){const{props:o,children:a,component:r}=e,{props:s,children:i,patchFlag:l}=t,c=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return o?ii(o,s,c):!!s;if(l&8){const u=t.dynamicProps;for(let f=0;fObject.create(ci),di=e=>Object.getPrototypeOf(e)===ci;function Cd(e,t,n,o=!1){const a={},r=ui();e.propsDefaults=Object.create(null),fi(e,t,a,r);for(const s in e.propsOptions[0])s in a||(a[s]=void 0);n?e.props=o?a:Tu(a):e.type.props?e.props=a:e.props=r,e.attrs=r}function xd(e,t,n,o){const{props:a,attrs:r,vnode:{patchFlag:s}}=e,i=$e(a),[l]=e.propsOptions;let c=!1;if((o||s>0)&&!(s&16)){if(s&8){const u=e.vnode.dynamicProps;for(let f=0;f{l=!0;const[d,b]=gi(f,t,!0);De(s,d),b&&i.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!r&&!l)return Ee(e)&&o.set(e,Ln),Ln;if(fe(r))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",tr=e=>fe(e)?e.map(Mt):[Mt(e)],Nd=(e,t,n)=>{if(t._n)return t;const o=zu((...a)=>tr(t(...a)),n);return o._c=!1,o},hi=(e,t,n)=>{const o=e._ctx;for(const a in e){if(er(a))continue;const r=e[a];if(me(r))t[a]=Nd(a,r,o);else if(r!=null){const s=tr(r);t[a]=()=>s}}},mi=(e,t)=>{const n=tr(t);e.slots.default=()=>n},bi=(e,t,n)=>{for(const o in t)(n||!er(o))&&(e[o]=t[o])},Md=(e,t,n)=>{const o=e.slots=ui();if(e.vnode.shapeFlag&32){const a=t._;a?(bi(o,t,n),n&&ss(o,"_",a,!0)):hi(t,o)}else t&&mi(e,t)},Id=(e,t,n)=>{const{vnode:o,slots:a}=e;let r=!0,s=Ne;if(o.shapeFlag&32){const i=t._;i?n&&i===1?r=!1:bi(a,t,n):(r=!t.$stable,hi(t,a)),s=t}else t&&(mi(e,t),s={default:1});if(r)for(const i in a)!er(i)&&s[i]==null&&delete a[i]},lt=Bd;function Rd(e){return Fd(e)}function Fd(e,t){const n=Po();n.__VUE__=!0;const{insert:o,remove:a,patchProp:r,createElement:s,createText:i,createComment:l,setText:c,setElementText:u,parentNode:f,nextSibling:d,setScopeId:b=Lt,insertStaticContent:_}=e,v=(y,L,$,I=null,B=null,j=null,Z=void 0,X=null,g=!!L.dynamicChildren)=>{if(y===L)return;y&&!co(y,L)&&(I=Ue(y),ee(y,B,j,!0),y=null),L.patchFlag===-2&&(g=!1,L.dynamicChildren=null);const{type:p,ref:M,shapeFlag:O}=L;switch(p){case ro:E(y,L,$,I);break;case Nt:k(y,L,$,I);break;case or:y==null&&A(L,$,I,Z);break;case Ae:z(y,L,$,I,B,j,Z,X,g);break;default:O&1?w(y,L,$,I,B,j,Z,X,g):O&6?P(y,L,$,I,B,j,Z,X,g):(O&64||O&128)&&p.process(y,L,$,I,B,j,Z,X,g,le)}M!=null&&B?no(M,y&&y.ref,j,L||y,!L):M==null&&y&&y.ref!=null&&no(y.ref,null,j,y,!0)},E=(y,L,$,I)=>{if(y==null)o(L.el=i(L.children),$,I);else{const B=L.el=y.el;L.children!==y.children&&c(B,L.children)}},k=(y,L,$,I)=>{y==null?o(L.el=l(L.children||""),$,I):L.el=y.el},A=(y,L,$,I)=>{[y.el,y.anchor]=_(y.children,L,$,I,y.el,y.anchor)},h=({el:y,anchor:L},$,I)=>{let B;for(;y&&y!==L;)B=d(y),o(y,$,I),y=B;o(L,$,I)},m=({el:y,anchor:L})=>{let $;for(;y&&y!==L;)$=d(y),a(y),y=$;a(L)},w=(y,L,$,I,B,j,Z,X,g)=>{if(L.type==="svg"?Z="svg":L.type==="math"&&(Z="mathml"),y==null)S(L,$,I,B,j,Z,X,g);else{const p=y.el&&y.el._isVueCE?y.el:null;try{p&&p._beginPatch(),x(y,L,B,j,Z,X,g)}finally{p&&p._endPatch()}}},S=(y,L,$,I,B,j,Z,X)=>{let g,p;const{props:M,shapeFlag:O,transition:Q,dirs:V}=y;if(g=y.el=s(y.type,j,M&&M.is,M),O&8?u(g,y.children):O&16&&C(y.children,g,null,I,B,nr(y,j),Z,X),V&&vn(y,null,I,"created"),T(g,y,y.scopeId,Z,I),M){for(const D in M)D!=="value"&&!zn(D)&&r(g,D,null,M[D],j,I);"value"in M&&r(g,"value",null,M.value,j),(p=M.onVnodeBeforeMount)&&It(p,I,y)}V&&vn(y,null,I,"beforeMount");const N=Od(B,Q);N&&Q.beforeEnter(g),o(g,L,$),((p=M&&M.onVnodeMounted)||N||V)&<(()=>{try{p&&It(p,I,y),N&&Q.enter(g),V&&vn(y,null,I,"mounted")}finally{}},B)},T=(y,L,$,I,B)=>{if($&&b(y,$),I)for(let j=0;j{for(let p=g;p{const X=L.el=y.el;let{patchFlag:g,dynamicChildren:p,dirs:M}=L;g|=y.patchFlag&16;const O=y.props||Ne,Q=L.props||Ne;let V;if($&&wn($,!1),(V=Q.onVnodeBeforeUpdate)&&It(V,$,L,y),M&&vn(L,y,$,"beforeUpdate"),$&&wn($,!0),p&&(!y.dynamicChildren||y.dynamicChildren.length!==p.length)&&(g=0,Z=!1,p=null),(O.innerHTML&&Q.innerHTML==null||O.textContent&&Q.textContent==null)&&u(X,""),p?F(y.dynamicChildren,p,X,$,I,nr(L,B),j):Z||J(y,L,X,null,$,I,nr(L,B),j,!1),g>0){if(g&16)W(X,O,Q,$,B);else if(g&2&&O.class!==Q.class&&r(X,"class",null,Q.class,B),g&4&&r(X,"style",O.style,Q.style,B),g&8){const N=L.dynamicProps;for(let D=0;D{V&&It(V,$,L,y),M&&vn(L,y,$,"updated")},I)},F=(y,L,$,I,B,j,Z)=>{for(let X=0;X{if(L!==$){if(L!==Ne)for(const j in L)!zn(j)&&!(j in $)&&r(y,j,L[j],null,B,I);for(const j in $){if(zn(j))continue;const Z=$[j],X=L[j];Z!==X&&j!=="value"&&r(y,j,X,Z,B,I)}"value"in $&&r(y,"value",L.value,$.value,B)}},z=(y,L,$,I,B,j,Z,X,g)=>{const p=L.el=y?y.el:i(""),M=L.anchor=y?y.anchor:i("");let{patchFlag:O,dynamicChildren:Q,slotScopeIds:V}=L;V&&(X=X?X.concat(V):V),y==null?(o(p,$,I),o(M,$,I),C(L.children||[],$,M,B,j,Z,X,g)):O>0&&O&64&&Q&&y.dynamicChildren&&y.dynamicChildren.length===Q.length?(F(y.dynamicChildren,Q,$,B,j,Z,X),(L.key!=null||B&&L===B.subTree)&&_i(y,L,!0)):J(y,L,$,M,B,j,Z,X,g)},P=(y,L,$,I,B,j,Z,X,g)=>{L.slotScopeIds=X,y==null?L.shapeFlag&512?B.ctx.activate(L,$,I,Z,g):H(L,$,I,B,j,Z,g):ne(y,L,g)},H=(y,L,$,I,B,j,Z)=>{const X=y.component=zd(y,I,B);if(qo(y)&&(X.ctx.renderer=le),Vd(X,!1,Z),X.asyncDep){if(B&&B.registerDep(X,U,Z),!y.el){const g=X.subTree=Ce(Nt);k(null,g,L,$),y.placeholder=g.el}}else U(X,y,L,$,B,j,Z)},ne=(y,L,$)=>{const I=L.component=y.component;if(Ed(y,L,$))if(I.asyncDep&&!I.asyncResolved){Y(I,L,$);return}else I.next=L,I.update();else L.el=y.el,I.vnode=L},U=(y,L,$,I,B,j,Z)=>{const X=()=>{if(y.isMounted){let{next:O,bu:Q,u:V,parent:N,vnode:D}=y;{const Xe=yi(y);if(Xe){O&&(O.el=D.el,Y(y,O,Z)),Xe.asyncDep.then(()=>{lt(()=>{y.isUnmounted||p()},B)});return}}let ue=O,ye;wn(y,!1),O?(O.el=D.el,Y(y,O,Z)):O=D,Q&&xo(Q),(ye=O.props&&O.props.onVnodeBeforeUpdate)&&It(ye,N,O,D),wn(y,!0);const Te=si(y),st=y.subTree;y.subTree=Te,v(st,Te,f(st.el),Ue(st),y,B,j),O.el=Te.el,ue===null&&Td(y,Te.el),V&<(V,B),(ye=O.props&&O.props.onVnodeUpdated)&<(()=>It(ye,N,O,D),B)}else{let O;const{el:Q,props:V}=L,{bm:N,m:D,parent:ue,root:ye,type:Te}=y,st=Nn(L);wn(y,!1),N&&xo(N),!st&&(O=V&&V.onVnodeBeforeMount)&&It(O,ue,L),wn(y,!0);{ye.ce&&ye.ce._hasShadowRoot()&&ye.ce._injectChildStyle(Te,y.parent?y.parent.type:void 0);const Xe=y.subTree=si(y);v(null,Xe,$,I,y,B,j),L.el=Xe.el}if(D&<(D,B),!st&&(O=V&&V.onVnodeMounted)){const Xe=L;lt(()=>It(O,ue,Xe),B)}(L.shapeFlag&256||ue&&Nn(ue.vnode)&&ue.vnode.shapeFlag&256)&&y.a&<(y.a,B),y.isMounted=!0,L=$=I=null}};y.scope.on();const g=y.effect=new hs(X);y.scope.off();const p=y.update=g.run.bind(g),M=y.job=g.runIfDirty.bind(g);M.i=y,M.id=y.uid,g.scheduler=()=>Ha(M),wn(y,!0),p()},Y=(y,L,$)=>{L.component=y;const I=y.vnode.props;y.vnode=L,y.next=null,xd(y,L.props,I,$),Id(y,L.children,$),Tt(),Ds(y),Ct()},J=(y,L,$,I,B,j,Z,X,g=!1)=>{const p=y&&y.children,M=y?y.shapeFlag:0,O=L.children,{patchFlag:Q,shapeFlag:V}=L;if(Q>0){if(Q&128){G(p,O,$,I,B,j,Z,X,g);return}else if(Q&256){te(p,O,$,I,B,j,Z,X,g);return}}V&8?(M&16&&Ge(p,B,j),O!==p&&u($,O)):M&16?V&16?G(p,O,$,I,B,j,Z,X,g):Ge(p,B,j,!0):(M&8&&u($,""),V&16&&C(O,$,I,B,j,Z,X,g))},te=(y,L,$,I,B,j,Z,X,g)=>{y=y||Ln,L=L||Ln;const p=y.length,M=L.length,O=Math.min(p,M);let Q;for(Q=0;QM?Ge(y,B,j,!0,!1,O):C(L,$,I,B,j,Z,X,g,O)},G=(y,L,$,I,B,j,Z,X,g)=>{let p=0;const M=L.length;let O=y.length-1,Q=M-1;for(;p<=O&&p<=Q;){const V=y[p],N=L[p]=g?Yt(L[p]):Mt(L[p]);if(co(V,N))v(V,N,$,null,B,j,Z,X,g);else break;p++}for(;p<=O&&p<=Q;){const V=y[O],N=L[Q]=g?Yt(L[Q]):Mt(L[Q]);if(co(V,N))v(V,N,$,null,B,j,Z,X,g);else break;O--,Q--}if(p>O){if(p<=Q){const V=Q+1,N=VQ)for(;p<=O;)ee(y[p],B,j,!0),p++;else{const V=p,N=p,D=new Map;for(p=N;p<=Q;p++){const mt=L[p]=g?Yt(L[p]):Mt(L[p]);mt.key!=null&&D.set(mt.key,p)}let ue,ye=0;const Te=Q-N+1;let st=!1,Xe=0;const kn=new Array(Te);for(p=0;p=Te){ee(mt,B,j,!0);continue}let Dt;if(mt.key!=null)Dt=D.get(mt.key);else for(ue=N;ue<=Q;ue++)if(kn[ue-N]===0&&co(mt,L[ue])){Dt=ue;break}Dt===void 0?ee(mt,B,j,!0):(kn[Dt-N]=p+1,Dt>=Xe?Xe=Dt:st=!0,v(mt,L[Dt],$,null,B,j,Z,X,g),ye++)}const ts=st?Dd(kn):Ln;for(ue=ts.length-1,p=Te-1;p>=0;p--){const mt=N+p,Dt=L[mt],Jc=L[mt+1],Xc=mt+1{const{el:j,type:Z,transition:X,children:g,shapeFlag:p}=y;if(p&6){q(y.component.subTree,L,$,I);return}if(p&128){y.suspense.move(L,$,I);return}if(p&64){Z.move(y,L,$,le);return}if(Z===Ae){o(j,L,$);for(let O=0;OX.enter(j),B));else{const{leave:O,delayLeave:Q,afterLeave:V}=X,N=()=>{y.ctx.isUnmounted?a(j):o(j,L,$)},D=()=>{const ue=j._isLeaving||!!j[Va];j._isLeaving&&j[Va](!0),X.persisted&&!ue?N():O(j,()=>{N(),V&&V()})};Q?Q(j,N,D):D()}else o(j,L,$)},ee=(y,L,$,I=!1,B=!1)=>{const{type:j,props:Z,ref:X,children:g,dynamicChildren:p,shapeFlag:M,patchFlag:O,dirs:Q,cacheIndex:V,memo:N}=y;if(O===-2&&(B=!1),X!=null&&(Tt(),no(X,null,$,y,!0),Ct()),V!=null&&(L.renderCache[V]=void 0),M&256){L.ctx.deactivate(y);return}const D=M&1&&Q,ue=!Nn(y);let ye;if(ue&&(ye=Z&&Z.onVnodeBeforeUnmount)&&It(ye,L,y),M&6)Pe(y.component,$,I);else{if(M&128){y.suspense.unmount($,I);return}D&&vn(y,null,L,"beforeUnmount"),M&64?y.type.remove(y,L,$,le,I):p&&!p.hasOnce&&(j!==Ae||O>0&&O&64)?Ge(p,L,$,!1,!0):(j===Ae&&O&384||!B&&M&16)&&Ge(g,L,$),I&&ce(y)}const Te=N!=null&&V==null;(ue&&(ye=Z&&Z.onVnodeUnmounted)||D||Te)&<(()=>{ye&&It(ye,L,y),D&&vn(y,null,L,"unmounted"),Te&&(y.el=null)},$)},ce=y=>{const{type:L,el:$,anchor:I,transition:B}=y;if(L===Ae){we($,I);return}if(L===or){m(y);return}const j=()=>{a($),B&&!B.persisted&&B.afterLeave&&B.afterLeave()};if(y.shapeFlag&1&&B&&!B.persisted){const{leave:Z,delayLeave:X}=B,g=()=>Z($,j);X?X(y.el,j,g):g()}else j()},we=(y,L)=>{let $;for(;y!==L;)$=d(y),a(y),y=$;a(L)},Pe=(y,L,$)=>{const{bum:I,scope:B,job:j,subTree:Z,um:X,m:g,a:p}=y;vi(g),vi(p),I&&xo(I),B.stop(),j&&(j.flags|=8,ee(Z,y,L,$)),X&<(X,L),lt(()=>{y.isUnmounted=!0},L)},Ge=(y,L,$,I=!1,B=!1,j=0)=>{for(let Z=j;Z{if(y.shapeFlag&6)return Ue(y.component.subTree);if(y.shapeFlag&128)return y.suspense.next();const L=d(y.anchor||y.el),$=L&&L[Xu];return $?d($):L};let je=!1;const K=(y,L,$)=>{let I;y==null?L._vnode&&(ee(L._vnode,null,null,!0),I=L._vnode.component):v(L._vnode||null,y,L,null,null,null,$),L._vnode=y,je||(je=!0,Ds(I),Bs(),je=!1)},le={p:v,um:ee,m:q,r:ce,mt:H,mc:C,pc:J,pbc:F,n:Ue,o:e};return{render:K,hydrate:void 0,createApp:Sd(K)}}function nr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function wn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Od(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function _i(e,t,n=!1){const o=e.children,a=t.children;if(fe(o)&&fe(a))for(let r=0;r>1,e[n[i]]0&&(t[o]=n[r-1]),n[r]=o)}}for(r=n.length,s=n[r-1];r-- >0;)n[r]=s,s=t[s];return n}function yi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:yi(t)}function vi(e){if(e)for(let t=0;te.__isSuspense;function Bd(e,t){t&&t.pendingBranch?fe(e)?t.effects.push(...e):t.effects.push(e):Hu(e)}const Ae=Symbol.for("v-fgt"),ro=Symbol.for("v-txt"),Nt=Symbol.for("v-cmt"),or=Symbol.for("v-stc"),Wt=[];let ht=null;function ae(e=!1){Wt.push(ht=e?null:[])}function ar(){Wt.pop(),ht=Wt[Wt.length-1]||null}let so=1;function ea(e,t=!1){so+=e,e<0&&ht&&t&&(ht.hasOnce=!0)}function $i(e){return e.dynamicChildren=so>0?ht||Ln:null,ar(),so>0&&ht&&ht.push(e),e}function ie(e,t,n,o,a,r){return $i(R(e,t,n,o,a,r,!0))}function io(e,t,n,o,a){return $i(Ce(e,t,n,o,a,!0))}function lo(e){return e?e.__v_isVNode===!0:!1}function co(e,t){return e.type===t.type&&e.key===t.key}const Ai=({key:e})=>e??null,ta=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Re(e)||Oe(e)||me(e)?{i:Ye,r:e,k:t,f:!!n}:e:null);function R(e,t=null,n=null,o=0,a=null,r=e===Ae?0:1,s=!1,i=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ai(t),ref:t&&ta(t),scopeId:js,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:o,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:Ye};return i?(na(l,n),r&128&&e.normalize(l)):n&&(l.shapeFlag|=Re(n)?8:16),so>0&&!s&&ht&&(l.patchFlag>0||r&6)&&l.patchFlag!==32&&ht.push(l),l}const Ce=Ud;function Ud(e,t=null,n=null,o=0,a=null,r=!1){if((!e||e===qs)&&(e=Nt),lo(e)){const i=Mn(e,t,!0);return n&&na(i,n),so>0&&!r&&ht&&(i.shapeFlag&6?ht[ht.indexOf(e)]=i:ht.push(i)),i.patchFlag=-2,i}if(Zd(e)&&(e=e.__vccOpts),t){t=jd(t);let{class:i,style:l}=t;i&&!Re(i)&&(t.class=Ze(i)),Ee(l)&&(Bo(l)&&!fe(l)&&(l=De({},l)),t.style=Bt(l))}const s=Re(e)?1:wi(e)?128:Vo(e)?64:Ee(e)?4:me(e)?2:0;return R(e,t,n,o,a,s,r,!0)}function jd(e){return e?Bo(e)||di(e)?De({},e):e:null}function Mn(e,t,n=!1,o=!1){const{props:a,ref:r,patchFlag:s,children:i,transition:l}=e,c=t?Kd(a||{},t):a,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Ai(c),ref:t&&t.ref?n&&r?fe(r)?r.concat(ta(t)):[r,ta(t)]:ta(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ae?s===-1?16:s|16:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Mn(e.ssContent),ssFallback:e.ssFallback&&Mn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&o&&Wa(u,l.clone(u)),u}function ct(e=" ",t=0){return Ce(ro,null,e,t)}function tt(e="",t=!1){return t?(ae(),io(Nt,null,e)):Ce(Nt,null,e)}function Mt(e){return e==null||typeof e=="boolean"?Ce(Nt):fe(e)?Ce(Ae,null,e.slice()):lo(e)?Yt(e):Ce(ro,null,String(e))}function Yt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Mn(e)}function na(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(fe(t))n=16;else if(typeof t=="object")if(o&65){const a=t.default;a&&(a._c&&(a._d=!1),na(e,a()),a._c&&(a._d=!0));return}else{n=32;const a=t._;!a&&!di(t)?t._ctx=Ye:a===3&&Ye&&(Ye.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(me(t)){if(o&65){na(e,{default:t});return}t={default:t,_ctx:Ye},n=32}else t=String(t),o&64?(n=16,t=[ct(t)]):n=8;e.children=t,e.shapeFlag|=n}function Kd(...e){const t={};for(let n=0;nqe||Ye;let oa,uo;{const e=Po(),t=(n,o)=>{let a;return(a=e[n])||(a=e[n]=[]),a.push(o),r=>{a.length>1?a.forEach(s=>s(r)):a[0](r)}};oa=t("__VUE_INSTANCE_SETTERS__",n=>qe=n),uo=t("__VUE_SSR_SETTERS__",n=>In=n)}const fo=e=>{const t=qe;return oa(e),e.scope.on(),()=>{e.scope.off(),oa(t)}},ki=()=>{qe&&qe.scope.off(),oa(null)};function Li(e){return e.vnode.shapeFlag&4}let In=!1;function Vd(e,t=!1,n=!1){t&&uo(t);const{props:o,children:a}=e.vnode,r=Li(e);Cd(e,o,r,t),Md(e,a,n||t);const s=r?Wd(e,t):void 0;return t&&uo(!1),s}function Wd(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,pd);const{setup:o}=n;if(o){Tt();const a=e.setupContext=o.length>1?qd(e):null,r=fo(e),s=Cn(o,e,0,[e.props,a]),i=as(s);if(Ct(),r(),(i||e.sp)&&!Nn(e)&&Ya(e),i){if(s.then(ki,ki),t)return s.then(l=>{uo(!0);try{Ei(e,l,t)}finally{uo(!1)}}).catch(l=>{Qn(l,e,0)});e.asyncDep=s}else Ei(e,s)}else Ti(e)}function Ei(e,t,n){me(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ee(t)&&(e.setupState=Is(t)),Ti(e)}function Ti(e,t,n){const o=e.type;e.render||(e.render=o.render||Lt);{const a=fo(e);Tt();try{hd(e)}finally{Ct(),a()}}}const Yd={get(e,t){return Qe(e,"get",""),e[t]}};function qd(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Yd),slots:e.slots,emit:e.emit,expose:t}}function aa(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Is(Xn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in oo)return oo[n](e)},has(t,n){return n in t||n in oo}})):e.proxy}const Jd=/(?:^|[-_])\w/g,Xd=e=>e.replace(Jd,t=>t.toUpperCase()).replace(/[-_]/g,"");function Ci(e,t=!0){return me(e)?e.displayName||e.name:e.name||t&&e.__name}function xi(e,t,n=!1){let o=Ci(t);if(!o&&t.__file){const a=t.__file.match(/([^/\\]+)\.\w+$/);a&&(o=a[1])}if(!o&&e){const a=r=>{for(const s in r)if(r[s]===t)return s};o=a(e.components)||e.parent&&a(e.parent.type.components)||a(e.appContext.components)}return o?Xd(o):n?"App":"Anonymous"}function Zd(e){return me(e)&&"__vccOpts"in e}const se=(e,t)=>Ru(e,t,In);function Pi(e,t,n){try{ea(-1);const o=arguments.length;return o===2?Ee(t)&&!fe(t)?lo(t)?Ce(e,null,[t]):Ce(e,t):Ce(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&lo(n)&&(n=[n]),Ce(e,t,n))}finally{ea(1)}}const Qd="3.5.42";/** +* @vue/runtime-dom v3.5.42 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let rr;const Ni=typeof window<"u"&&window.trustedTypes;if(Ni)try{rr=Ni.createPolicy("vue",{createHTML:e=>e})}catch{}const Mi=rr?e=>rr.createHTML(e):e=>e,ef="http://www.w3.org/2000/svg",tf="http://www.w3.org/1998/Math/MathML",qt=typeof document<"u"?document:null,Ii=qt&&qt.createElement("template"),nf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const a=t==="svg"?qt.createElementNS(ef,e):t==="mathml"?qt.createElementNS(tf,e):n?qt.createElement(e,{is:n}):qt.createElement(e);return e==="select"&&o&&o.multiple!=null&&a.setAttribute("multiple",o.multiple),a},createText:e=>qt.createTextNode(e),createComment:e=>qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,a,r){const s=n?n.previousSibling:t.lastChild;if(a&&(a===r||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n),!(a===r||!(a=a.nextSibling)););else{Ii.innerHTML=Mi(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const i=Ii.content;if(o==="svg"||o==="mathml"){const l=i.firstChild;for(;l.firstChild;)i.appendChild(l.firstChild);i.removeChild(l)}t.insertBefore(i,n)}return[s?s.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},of=Symbol("_vtc");function af(e,t,n){const o=e[of];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ra=Symbol("_vod"),Ri=Symbol("_vsh"),rn={name:"show",beforeMount(e,{value:t},{transition:n}){e[ra]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):go(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),go(e,!0),o.enter(e)):o.leave(e,()=>{go(e,!1)}):go(e,t))},beforeUnmount(e,{value:t}){go(e,t)}};function go(e,t){e.style.display=t?e[ra]:"none",e[Ri]=!t}const rf=Symbol(""),sf=/(?:^|;)\s*display\s*:/;function lf(e,t,n){const o=e.style,a=Re(n);let r=!1;if(n&&!a){if(t)if(Re(t))for(const s of t.split(";")){const i=s.slice(0,s.indexOf(":")).trim();n[i]==null&&po(o,i,"")}else for(const s in t)n[s]==null&&po(o,s,"");for(const s in n){s==="display"&&(r=!0);const i=n[s];i!=null?uf(e,s,!Re(t)&&t?t[s]:void 0,i)||po(o,s,i):po(o,s,"")}}else if(a){if(t!==n){const s=o[rf];s&&(n+=";"+s),o.cssText=n,r=sf.test(n)}}else t&&e.removeAttribute("style");ra in e&&(e[ra]=r?o.display:"",e[Ri]&&(o.display="none"))}const sa=/\s*!important$/;function po(e,t,n){if(fe(n))n.forEach(o=>po(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))sa.test(n)?e.setProperty(t,n.replace(sa,""),"important"):e.setProperty(t,n);else{const o=cf(e,t);sa.test(n)?e.setProperty(gt(o),n.replace(sa,""),"important"):e[o]=n}}const Fi=["Webkit","Moz","ms"],sr={};function cf(e,t){const n=sr[t];if(n)return n;let o=Ve(t);if(o!=="filter"&&o in e)return sr[t]=o;o=Co(o);for(let a=0;air||(mf.then(()=>ir=0),ir=Date.now());function _f(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;const a=n.value;if(fe(a)){const r=o.stopImmediatePropagation;o.stopImmediatePropagation=()=>{r.call(o),o._stopped=!0};const s=a.slice(),i=[o];for(let l=0;le.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,yf=(e,t,n,o,a,r)=>{const s=a==="svg";t==="class"?af(e,o,s):t==="style"?lf(e,n,o):$o(t)?Ao(t)||ff(e,t,n,o,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):vf(e,t,o,s))?(Bi(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Di(e,t,o,s,r,t!=="value")):e._isVueCE&&(Sf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Re(o)))?Bi(e,Ve(t),o,r,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Di(e,t,o,s))};function vf(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&ji(t)&&me(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return ji(t)&&Re(n)?!1:t in e}function Sf(e,t){const n=e._def.props;if(!n)return!1;const o=Ve(t);return Array.isArray(n)?n.some(a=>Ve(a)===o):Object.keys(n).some(a=>Ve(a)===o)}const Ki={};function wf(e,t,n){let o=to(e,t);Lo(o)&&(o=De({},o,t));class a extends lr{constructor(s){super(o,s,n)}}return a.def=o,a}const $f=typeof HTMLElement<"u"?HTMLElement:class{};class lr extends $f{constructor(t,n={},o=Yi){super(),this._def=t,this._props=n,this._createApp=o,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._styleAnchors=new WeakMap,this._ob=null,this.shadowRoot&&o!==Yi?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(De({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.assignedSlot||t.parentNode||t.host);)if(t instanceof lr){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{if(this._pendingResolve=void 0,this.isConnected)return this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,Ho(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const n of t)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return this._pendingResolve;for(let o=0;o{this._resolved=!0,this._pendingResolve=void 0;const{props:r,styles:s}=o;let i;if(r&&!fe(r))for(const l in r){const c=r[l];(c===Number||c&&c.type===Number)&&(l in this._props&&(this._props[l]=is(this._props[l])),(i||(i=Object.create(null)))[Ve(l)]=!0)}this._numberProps=i,this._resolveProps(o),this.shadowRoot&&this._applyStyles(s),this._mount(o)},n=this._def.__asyncLoader;if(n)return this._pendingResolve=n().then(o=>{o.configureApp=this._def.configureApp,t(this._def=o,!0)}),this._pendingResolve;t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const o in n)Le(this,o)||Object.defineProperty(this,o,{get:()=>re(n[o])})}_resolveProps(t){const{props:n}=t,o=fe(n)?n:Object.keys(n||{});for(const a of Object.keys(this))a[0]!=="_"&&o.includes(a)&&this._setProp(a,this[a]);for(const a of o.map(Ve))Object.defineProperty(this,a,{get(){return this._getProp(a)},set(r){this._setProp(a,r,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let o=n?this.getAttribute(t):Ki;const a=Ve(t);n&&this._numberProps&&this._numberProps[a]&&(o=is(o)),this._setProp(a,o,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,o=!0,a=!1){if(n!==this._props[t]&&(this._dirty=!0,n===Ki?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),a&&this._instance&&this._update(),o)){const r=this._ob;r&&(this._processMutations(r.takeRecords()),r.disconnect()),n===!0?this.setAttribute(gt(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(gt(t),n+""):n||this.removeAttribute(gt(t)),r&&r.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),xf(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=Ce(this._def,De(t,this._props));return this._instance||(n.ce=o=>{this._instance=o,o.ce=this,o.isCE=!0;const a=(r,s)=>{this.dispatchEvent(new CustomEvent(r,Lo(s[0])?De({detail:s},s[0]):{detail:s}))};o.emit=(r,...s)=>{a(r,s),gt(r)!==r&&a(gt(r),s)},this._setParent()}),n}_applyStyles(t,n,o){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const a=this._nonce,r=this.shadowRoot,s=o?this._getStyleAnchor(o)||this._getStyleAnchor(this._def):this._getRootStyleInsertionAnchor(r);let i=null;for(let l=t.length-1;l>=0;l--){const c=document.createElement("style");a&&c.setAttribute("nonce",a),c.textContent=t[l],r.insertBefore(c,i||s),i=c,l===0&&(o||this._styleAnchors.set(this._def,c),n&&this._styleAnchors.set(n,c))}}_getStyleAnchor(t){if(!t)return null;const n=this._styleAnchors.get(t);return n&&n.parentNode===this.shadowRoot?n:(n&&this._styleAnchors.delete(t),null)}_getRootStyleInsertionAnchor(t){for(let n=0;n{const t=e.props["onUpdate:modelValue"]||!1;return fe(t)?n=>xo(t,n):t};function Af(e){e.target.composing=!0}function Hi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ia=Symbol("_assign"),la=Symbol("_initialValue");function cr(e,t,n){return t&&(e=e.trim()),n&&(e=Ca(e)),e}const kf={created(e,{modifiers:{lazy:t,trim:n,number:o}},a){e.parentNode&&(e.type==="text"?e[la]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[la]=e.defaultValue.replace(/\r\n?/g,` +`))),e[ia]=Gi(a);const r=o||a.props&&a.props.type==="number";Rn(e,t?"change":"input",s=>{s.target.composing||e[ia](cr(e.value,n,r))}),(n||r)&&Rn(e,"change",()=>{e.value=cr(e.value,n,r)}),t||(Rn(e,"compositionstart",Af),Rn(e,"compositionend",Hi),Rn(e,"change",Hi))},mounted(e,{value:t,modifiers:{trim:n,number:o}}){const a=t??"",r=e[la];delete e[la],r!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==r?e[ia](cr(e.value,n,o)):e.value=a},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:o,trim:a,number:r}},s){if(e[ia]=Gi(s),e.composing)return;const i=(r||e.type==="number")&&!/^0\d/.test(e.value)?Ca(e.value):e.value,l=t??"";if(i===l)return;const c=e.getRootNode();(c instanceof Document||c instanceof ShadowRoot)&&c.activeElement===e&&e.type!=="range"&&(o&&t===n||a&&e.value.trim()===l)||(e.value=l)}},Lf=["ctrl","shift","alt","meta"],Ef={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Lf.some(n=>e[`${n}Key`]&&!t.includes(n))},ur=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=(a,...r)=>{for(let s=0;s{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=a=>{if(!("key"in a))return;const r=gt(a.key);if(t.some(s=>s===r||Tf[s]===r))return e(a)})},Cf=De({patchProp:yf},nf);let Vi;function Wi(){return Vi||(Vi=Rd(Cf))}const xf=(...e)=>{Wi().render(...e)},Yi=(...e)=>{const t=Wi().createApp(...e),{mount:n}=t;return t.mount=o=>{const a=Nf(o);if(!a)return;const r=t._component;!me(r)&&!r.render&&!r.template&&(r.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const s=n(a,!1,Pf(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),s},t};function Pf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Nf(e){return Re(e)?document.querySelector(e):e}/*! + * pinia v2.3.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let qi;const ca=e=>qi=e,Ji=Symbol();function dr(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ho;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ho||(ho={}));function Mf(){const e=Pa(!0),t=e.run(()=>pe({}));let n=[],o=[];const a=Xn({install(r){ca(a),a._a=r,r.provide(Ji,a),r.config.globalProperties.$pinia=a,o.forEach(s=>n.push(s)),o=[]},use(r){return this._a?n.push(r):o.push(r),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return a}const Xi=()=>{};function Zi(e,t,n,o=Xi){e.push(t);const a=()=>{const r=e.indexOf(t);r>-1&&(e.splice(r,1),o())};return!n&&ps()&&cu(a),a}function Fn(e,...t){e.slice().forEach(n=>{n(...t)})}const If=e=>e(),Qi=Symbol(),fr=Symbol();function gr(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],a=e[n];dr(a)&&dr(o)&&e.hasOwnProperty(n)&&!Oe(o)&&!Kt(o)?e[n]=gr(a,o):e[n]=o}return e}const Rf=Symbol();function Ff(e){return!dr(e)||!e.hasOwnProperty(Rf)}const{assign:sn}=Object;function Of(e){return!!(Oe(e)&&e.effect)}function Df(e,t,n,o){const{state:a,actions:r,getters:s}=t,i=n.state.value[e];let l;function c(){i||(n.state.value[e]=a?a():{});const u=Pu(n.state.value[e]);return sn(u,r,Object.keys(s||{}).reduce((f,d)=>(f[d]=Xn(se(()=>{ca(n);const b=n._s.get(e);return s[d].call(b,b)})),f),{}))}return l=el(e,c,t,n,o,!0),l}function el(e,t,n={},o,a,r){let s;const i=sn({actions:{}},n),l={deep:!0};let c,u,f=[],d=[],b;const _=o.state.value[e];!r&&!_&&(o.state.value[e]={});let v;function E(C){let x;c=u=!1,typeof C=="function"?(C(o.state.value[e]),x={type:ho.patchFunction,storeId:e,events:b}):(gr(o.state.value[e],C),x={type:ho.patchObject,payload:C,storeId:e,events:b});const F=v=Symbol();Ho().then(()=>{v===F&&(c=!0)}),u=!0,Fn(f,x,o.state.value[e])}const k=r?function(){const{state:x}=n,F=x?x():{};this.$patch(W=>{sn(W,F)})}:Xi;function A(){s.stop(),f=[],d=[],o._s.delete(e)}const h=(C,x="")=>{if(Qi in C)return C[fr]=x,C;const F=function(){ca(o);const W=Array.from(arguments),z=[],P=[];function H(Y){z.push(Y)}function ne(Y){P.push(Y)}Fn(d,{args:W,name:F[fr],store:w,after:H,onError:ne});let U;try{U=C.apply(this&&this.$id===e?this:w,W)}catch(Y){throw Fn(P,Y),Y}return U instanceof Promise?U.then(Y=>(Fn(z,Y),Y)).catch(Y=>(Fn(P,Y),Promise.reject(Y))):(Fn(z,U),U)};return F[Qi]=!0,F[fr]=x,F},m={_p:o,$id:e,$onAction:Zi.bind(null,d),$patch:E,$reset:k,$subscribe(C,x={}){const F=Zi(f,C,x.detached,()=>W()),W=s.run(()=>bt(()=>o.state.value[e],z=>{(x.flush==="sync"?u:c)&&C({storeId:e,type:ho.direct,events:b},z)},sn({},l,x)));return F},$dispose:A},w=_n(m);o._s.set(e,w);const T=(o._a&&o._a.runWithContext||If)(()=>o._e.run(()=>(s=Pa()).run(()=>t({action:h}))));for(const C in T){const x=T[C];if(Oe(x)&&!Of(x)||Kt(x))r||(_&&Ff(x)&&(Oe(x)?x.value=_[C]:gr(x,_[C])),o.state.value[e][C]=x);else if(typeof x=="function"){const F=h(x,C);T[C]=F,i.actions[C]=x}}return sn(w,T),sn($e(w),T),Object.defineProperty(w,"$state",{get:()=>o.state.value[e],set:C=>{E(x=>{sn(x,C)})}}),o._p.forEach(C=>{sn(w,s.run(()=>C({store:w,app:o._a,pinia:o,options:i})))}),_&&r&&n.hydrate&&n.hydrate(w.$state,_),c=!0,u=!0,w}/*! #__NO_SIDE_EFFECTS__ */function pr(e,t,n){let o,a;const r=typeof t=="function";typeof e=="string"?(o=e,a=r?n:t):(a=e,o=e.id);function s(i,l){const c=Vu();return i=i||(c?ve(Ji,null):null),i&&ca(i),i=qi,i._s.has(o)||(r?el(o,t,a,i):Df(o,a,i)),i._s.get(o)}return s.$id=o,s}const Bf={backToLegend:"العودة إلى المفتاح",closeDetailView:"إغلاق عرض التفاصيل"},Uf={prayForThem:"صلِّ من أجلهم",adoptThem:"تبنَّهم",moreInfo:"مزيد من المعلومات",zoomIn:"تكبير",zoomOut:"تصغير",switchToLightMode:"التبديل إلى الوضع الفاتح",switchToDarkMode:"التبديل إلى الوضع الداكن",resetView:"إعادة تعيين العرض",toggleFullscreen:"تبديل ملء الشاشة",aboutThisMap:"حول هذه الخريطة",closeMenu:"إغلاق القائمة",reloadMap:"إعادة تحميل الخريطة",showClusters:"إظهار المجموعات",clusterSettings:"إعدادات المجموعات",startAutoFly:"بدء الطيران التلقائي",stopFlight:"إيقاف الطيران",speedLabel:"السرعة:",speedOption:{slow:"بطيء",normal:"عادي",fast:"سريع"},shareEmbed:"مشاركة وتضمين"},jf={labels:{country:"الدولة:",population:"السكان:",language:"اللغة:",religion:"الديانة:",languageFamily:"العائلة اللغوية:",peopleCommitted:"ملتزمون بالصلاة:"},messages:{noDescription:"لا يوجد وصف متاح."}},Kf={title:{prayer:"تقدم الصلاة",engagement:"تقدم الانخراط",adoption:"تقدم التبني",languageFamilies:"العائلات اللغوية",doxaRegions:"مناطق Doxa",affinityBlocs:"كتل القرابة",gospelResources:"موارد الإنجيل"},header:{collapsed:"وسيلة الإيضاح",peopleGroupFallback:"مجموعة الشعب"},prayer:{needsPrayer:"يحتاج إلى صلاة",hasPrayer:"لديه صلاة",fullPrayerCoverage:"تغطية صلاة كاملة"},engagement:{needsEngagement:"يحتاج إلى انخراط",hasEngagement:"لديه انخراط"},adoption:{needsAdoption:"يحتاج إلى تبني",hasAdoption:"لديه تبني"},columns:{upgs:"UUPGs",population:"السكان",name:"الاسم"},footer:{total:"الإجمالي"},sortByUpgs:"ترتيب حسب UUPG",sortByPop:"ترتيب حسب السكان",colLabel:{religion:"ديانات UUPG",prayer:"حالة الصلاة",engagement:"حالة المشاركة",adoption:"حالة التبني",status:"الحالة"},titleBar:{legend:"مفتاح الخريطة",peopleGroups:"الشعوب",wagfRegions:"مناطق WAGF",languages:"اللغات"}},Gf={menuComingSoon:"القائمة قادمة قريباً"},Hf={clusterByRegion:"حسب منطقة Doxa",clusterByLanguageFamily:"حسب العائلة اللغوية",clusterByGospelResource:"حسب مورد الإنجيل"},zf={header:"دورة الصلاة الحالية",lap:"الدورة",upgs:"UUPGs",separator:" من "},Vf={placeholder:"شعب، مكان، لغة، ديانة",labels:{people:"الشعب:",place:"المكان:",language:"اللغة:",religion:"الديانة:"},kinds:{people:"الشعب + الدولة",peopleGroup:"الشعب",bloc:"كتلة التقارب",cluster:"مجموعة شعوب",country:"الدولة",region:"المنطقة",family:"عائلة اللغة",languageKind:"اللغة",dialect:"اللهجة",religionKind:"الدين"}},Wf={prayer:"الصلاة",adoption:"التبني",engagement:"المشاركة","affinity-blocks":"الشعوب",regions:"المناطق",countries:"الدول","language-families":"اللغات",religion:"الأديان",family:"عائلة اللغة",language:"اللغة",dialect:"اللهجة/التنوع",bloc:"كتلة التقارب",cluster:"المجموعة",group:"الشعب",pgic:"الشعب في الدولة",region:"منطقة WAGF",block:"كتلة WAGF",country:"الدولة"},Yf={backToLegend:"Zurück zur Legende",closeDetailView:"Detailansicht schließen"},qf={prayForThem:"Für sie beten",adoptThem:"Sie adoptieren",moreInfo:"Mehr Infos",zoomIn:"Vergrößern",zoomOut:"Verkleinern",switchToLightMode:"Zum hellen Modus wechseln",switchToDarkMode:"Zum dunklen Modus wechseln",resetView:"Ansicht zurücksetzen",toggleFullscreen:"Vollbild umschalten",aboutThisMap:"Über diese Karte",closeMenu:"Menü schließen",reloadMap:"Karte neu laden",showClusters:"Cluster anzeigen",clusterSettings:"Cluster-Einstellungen",startAutoFly:"Auto-Flug starten",stopFlight:"Flug stoppen",speedLabel:"Geschwindigkeit:",speedOption:{slow:"Langsam",normal:"Normal",fast:"Schnell"},shareEmbed:"Teilen und einbetten"},Jf={labels:{country:"Land:",population:"Bevölkerung:",language:"Sprache:",religion:"Religion:",languageFamily:"Sprachfamilie:",peopleCommitted:"Zum Gebet verpflichtet:"},messages:{noDescription:"Keine Beschreibung verfügbar."}},Xf={title:{prayer:"Gebetsfortschritt",engagement:"Engagement-Fortschritt",adoption:"Adoptionsfortschritt",languageFamilies:"Sprachfamilien",doxaRegions:"Doxa-Regionen",affinityBlocs:"Affinitätsblöcke",gospelResources:"Evangeliumsressourcen"},header:{collapsed:"Legende",peopleGroupFallback:"Volksgruppe"},prayer:{needsPrayer:"Braucht Gebet",hasPrayer:"Hat Gebet",fullPrayerCoverage:"Vollständige Gebetsabdeckung"},engagement:{needsEngagement:"Braucht Engagement",hasEngagement:"Hat Engagement"},adoption:{needsAdoption:"Braucht Adoption",hasAdoption:"Hat Adoption"},columns:{upgs:"UUPGs",population:"Bevölkerung"},footer:{total:"Gesamt"}},Zf={menuComingSoon:"Menü folgt in Kürze"},Qf={clusterByRegion:"Nach Doxa-Region",clusterByLanguageFamily:"Nach Sprachfamilie",clusterByGospelResource:"Nach Evangeliumsressource"},eg={header:"AKTUELLE GEBETSRUNDE",lap:"Runde",upgs:"UUPGs",separator:" von "},tg={placeholder:"Volk, Ort, Sprache, Religion",labels:{people:"Volk:",place:"Ort:",language:"Sprache:",religion:"Religion:"},sections:{within:"Innerhalb {selection}",allData:"Alle DOXA-Daten"}},ng={prayer:"Gebet",adoption:"Adoption",engagement:"Engagement","affinity-blocks":"Volksgruppen",regions:"Regionen",countries:"Länder","language-families":"Sprachen",religion:"Religionen",family:"Sprachfamilie",language:"Sprache",dialect:"Dialekt/Varietät",bloc:"Affinitätsblock",cluster:"Cluster",group:"Volksgruppe",pgic:"Volksgruppe im Land",region:"WAGF-Region",block:"WAGF-Block",country:"Land"},og={backToLegend:"Back to Legend",closeDetailView:"Close detail view"},ag={prayForThem:"Pray for them",adoptThem:"Adopt",moreInfo:"More info",zoomIn:"Zoom in",zoomOut:"Zoom out",switchToLightMode:"Switch to light mode",switchToDarkMode:"Switch to dark mode",resetView:"Reset view",toggleFullscreen:"Toggle fullscreen",aboutThisMap:"About this map",closeMenu:"Close menu",reloadMap:"Reload Map",showClusters:"Show Clusters",clusterSettings:"Cluster Settings",startAutoFly:"Start Auto Fly",stopFlight:"Stop Flight",speedLabel:"Speed:",speedOption:{slow:"Slow",normal:"Normal",fast:"Fast"},shareEmbed:"Share & embed"},rg={labels:{country:"Country:",population:"Population:",language:"Language:",religion:"Religion:",languageFamily:"Language Family:",peopleCommitted:"Committed to pray:"},messages:{noDescription:"No description available."}},sg={title:{prayer:"Prayer Progress",engagement:"Engagement Progress",adoption:"Adoption Progress",languageFamilies:"Language Families",doxaRegions:"Doxa Regions",affinityBlocs:"Affinity Blocks",gospelResources:"Gospel Resources"},header:{default:"Legend",collapsed:"Legend",peopleGroupFallback:"People Group"},prayer:{needsPrayer:"Needs Prayer",hasPrayer:"Has Prayer",fullPrayerCoverage:"Full Prayer Coverage"},engagement:{needsEngagement:"Unengaged",hasEngagement:"Engaged"},adoption:{needsAdoption:"Needs Adoption",hasAdoption:"Has Adoption"},columns:{upgs:"UUPGs",population:"Population",name:"Name"},footer:{total:"Total"},sortByUpgs:"Sort by UUPGs",sortByPop:"Sort by Population",colLabel:{religion:"UUPG Religions",prayer:"Prayer Status",engagement:"Engagement Status",adoption:"Adoption Status",status:"Status"},titleBar:{legend:"Legend",peopleGroups:"People Groups",wagfRegions:"WAGF Regions",languages:"Languages"}},ig={menuComingSoon:"Menu coming soon"},lg={clusterByRegion:"By Doxa Region",clusterByLanguageFamily:"By Language Family",clusterByGospelResource:"By Gospel Resource"},cg={country:{wagfRegion:"WAGF Region",wagfBlock:"WAGF Bloc",country:"Country",uupgCount:"UUPG Count"}},ug={header:"CURRENT PRAYER LAP",lap:"Lap",upgs:"UUPGs",separator:" of "},dg={placeholder:"People, place, language, religion",labels:{people:"People:",place:"Place:",language:"Language:",religion:"Religion:"},kinds:{people:"People Group + Country",peopleGroup:"People Group",bloc:"Affinity Block",cluster:"People Cluster",country:"Country",region:"Region",family:"Language Family",languageKind:"Language",dialect:"Dialect",religionKind:"Religion"},sections:{within:"Within {selection}",allData:"All DOXA Data"}},fg={prayer:"Prayer",adoption:"Adoption",engagement:"Engagement","affinity-blocks":"People Groups",regions:"Regions",countries:"Countries","language-families":"Languages",religion:"Religions",family:"Lang Family",language:"Language",dialect:"Dialect/Variety",bloc:"Affinity Block",cluster:"Cluster",group:"People Group",pgic:"PG in Country",region:"WAGF Region",block:"WAGF Bloc",country:"Country"},gg={backToLegend:"Volver a la leyenda",closeDetailView:"Cerrar vista de detalle"},pg={prayForThem:"Ora por ellos",adoptThem:"Adóptalos",moreInfo:"Más información",zoomIn:"Acercar",zoomOut:"Alejar",switchToLightMode:"Cambiar a modo claro",switchToDarkMode:"Cambiar a modo oscuro",resetView:"Restablecer vista",toggleFullscreen:"Alternar pantalla completa",aboutThisMap:"Acerca de este mapa",closeMenu:"Cerrar menú",reloadMap:"Recargar mapa",showClusters:"Mostrar clústeres",clusterSettings:"Ajustes de clústeres",startAutoFly:"Iniciar vuelo automático",stopFlight:"Detener vuelo",speedLabel:"Velocidad:",speedOption:{slow:"Lenta",normal:"Normal",fast:"Rápida"},shareEmbed:"Compartir e incrustar"},hg={labels:{country:"País:",population:"Población:",language:"Idioma:",religion:"Religión:",languageFamily:"Familia lingüística:",peopleCommitted:"Comprometidos a orar:"},messages:{noDescription:"No hay descripción disponible."}},mg={title:{prayer:"Progreso de oración",engagement:"Progreso de implicación",adoption:"Progreso de adopción",languageFamilies:"Familias lingüísticas",doxaRegions:"Regiones Doxa",affinityBlocs:"Bloques de afinidad",gospelResources:"Recursos del Evangelio"},header:{collapsed:"Leyenda",peopleGroupFallback:"Grupo de personas"},prayer:{needsPrayer:"Necesita oración",hasPrayer:"Tiene oración",fullPrayerCoverage:"Cobertura de oración completa"},engagement:{needsEngagement:"Necesita implicación",hasEngagement:"Tiene implicación"},adoption:{needsAdoption:"Necesita adopción",hasAdoption:"Tiene adopción"},columns:{upgs:"UUPGs",population:"Población",name:"Nombre"},footer:{total:"Total"},sortByUpgs:"Ordenar por UUPG",sortByPop:"Ordenar por población",colLabel:{religion:"Religiones UUPG",prayer:"Estado de oración",engagement:"Estado de compromiso",adoption:"Estado de adopción",status:"Estado"},titleBar:{legend:"Leyenda",peopleGroups:"Pueblos",wagfRegions:"Regiones WAGF",languages:"Idiomas"}},bg={menuComingSoon:"Menú próximamente"},_g={clusterByRegion:"Por región Doxa",clusterByLanguageFamily:"Por familia lingüística",clusterByGospelResource:"Por recurso del Evangelio"},yg={header:"VUELTA DE ORACIÓN ACTUAL",lap:"Vuelta",upgs:"UUPGs",separator:" de "},vg={placeholder:"Pueblo, lugar, idioma, religión",labels:{people:"Pueblo:",place:"Lugar:",language:"Idioma:",religion:"Religión:"},kinds:{people:"Pueblo + país",peopleGroup:"Pueblo",bloc:"Bloque de afinidad",cluster:"Clúster de pueblos",country:"País",region:"Región",family:"Familia lingüística",languageKind:"Idioma",dialect:"Dialecto",religionKind:"Religión"}},Sg={prayer:"Oración",adoption:"Adopción",engagement:"Compromiso","affinity-blocks":"Pueblos",regions:"Regiones",countries:"Países","language-families":"Idiomas",religion:"Religiones",family:"Familia lingüística",language:"Idioma",dialect:"Dialecto/Variedad",bloc:"Bloque de afinidad",cluster:"Clúster",group:"Pueblo",pgic:"Pueblo en país",region:"Región WAGF",block:"Bloque WAGF",country:"País"},wg={backToLegend:"Retour à la légende",closeDetailView:"Fermer la vue détaillée"},$g={prayForThem:"Priez pour eux",adoptThem:"Adoptez-les",moreInfo:"Plus d'infos",zoomIn:"Zoom avant",zoomOut:"Zoom arrière",switchToLightMode:"Passer au mode clair",switchToDarkMode:"Passer au mode sombre",resetView:"Réinitialiser la vue",toggleFullscreen:"Basculer en plein écran",aboutThisMap:"À propos de cette carte",closeMenu:"Fermer le menu",reloadMap:"Recharger la carte",showClusters:"Afficher les clusters",clusterSettings:"Paramètres des clusters",startAutoFly:"Démarrer le vol auto",stopFlight:"Arrêter le vol",speedLabel:"Vitesse :",speedOption:{slow:"Lente",normal:"Normale",fast:"Rapide"},shareEmbed:"Partager et intégrer"},Ag={labels:{country:"Pays :",population:"Population :",language:"Langue :",religion:"Religion :",languageFamily:"Famille de langues :",peopleCommitted:"Engagés à prier :"},messages:{noDescription:"Aucune description disponible."}},kg={title:{prayer:"Progression de la prière",engagement:"Progression de l'engagement",adoption:"Progression de l'adoption",languageFamilies:"Familles de langues",doxaRegions:"Régions Doxa",affinityBlocs:"Blocs d'affinité",gospelResources:"Ressources de l'Évangile"},header:{collapsed:"Légende",peopleGroupFallback:"Groupe de personnes"},prayer:{needsPrayer:"Besoin de prière",hasPrayer:"Prière en cours",fullPrayerCoverage:"Couverture de prière complète"},engagement:{needsEngagement:"Besoin d'engagement",hasEngagement:"Engagement en cours"},adoption:{needsAdoption:"Besoin d'adoption",hasAdoption:"Adoption en cours"},columns:{upgs:"UUPGs",population:"Population",name:"Nom"},footer:{total:"Total"},sortByUpgs:"Trier par UUPG",sortByPop:"Trier par population",colLabel:{religion:"Religions UUPG",prayer:"Statut de prière",engagement:"Statut d'engagement",adoption:"Statut d'adoption",status:"Statut"},titleBar:{legend:"Légende",peopleGroups:"Peuples",wagfRegions:"Régions WAGF",languages:"Langues"}},Lg={menuComingSoon:"Menu bientôt disponible"},Eg={clusterByRegion:"Par région Doxa",clusterByLanguageFamily:"Par famille de langues",clusterByGospelResource:"Par ressource de l'Évangile"},Tg={country:{wagfRegion:"Région WAGF",wagfBlock:"Bloc WAGF",country:"Pays",uupgCount:"Nombre d'UUPG"}},Cg={header:"TOUR DE PRIÈRE ACTUEL",lap:"Tour",upgs:"UUPGs",separator:" sur "},xg={placeholder:"Peuple, lieu, langue, religion",labels:{people:"Peuple :",place:"Lieu :",language:"Langue :",religion:"Religion :"},kinds:{people:"Peuple + pays",peopleGroup:"Peuple",bloc:"Bloc d'affinité",cluster:"Grappe de peuples",country:"Pays",region:"Région",family:"Famille linguistique",languageKind:"Langue",dialect:"Dialecte",religionKind:"Religion"}},Pg={prayer:"Prière",adoption:"Adoption",engagement:"Engagement","affinity-blocks":"Peuples",regions:"Régions",countries:"Pays","language-families":"Langues",religion:"Religions",family:"Famille linguistique",language:"Langue",dialect:"Dialecte/Variété",bloc:"Bloc d'affinité",cluster:"Grappe",group:"Peuple",pgic:"Peuple dans le pays",region:"Région WAGF",block:"Bloc WAGF",country:"Pays"},Ng={backToLegend:"लेजेंड पर वापस जाएं",closeDetailView:"विवरण दृश्य बंद करें"},Mg={prayForThem:"उनके लिए प्रार्थना करें",adoptThem:"उन्हें गोद लें",moreInfo:"अधिक जानकारी",zoomIn:"ज़ूम इन",zoomOut:"ज़ूम आउट",switchToLightMode:"लाइट मोड पर जाएं",switchToDarkMode:"डार्क मोड पर जाएं",resetView:"दृश्य रीसेट करें",toggleFullscreen:"फ़ुलस्क्रीन टॉगल करें",aboutThisMap:"इस मानचित्र के बारे में",closeMenu:"मेनू बंद करें",reloadMap:"मानचित्र पुनः लोड करें",showClusters:"क्लस्टर दिखाएं",clusterSettings:"क्लस्टर सेटिंग्स",startAutoFly:"ऑटो फ्लाई शुरू करें",stopFlight:"उड़ान रोकें",speedLabel:"गति:",speedOption:{slow:"धीमी",normal:"सामान्य",fast:"तेज़"},shareEmbed:"साझा करें और एम्बेड करें"},Ig={labels:{country:"देश:",population:"जनसंख्या:",language:"भाषा:",religion:"धर्म:",languageFamily:"भाषा परिवार:",peopleCommitted:"प्रार्थना के लिए प्रतिबद्ध:"},messages:{noDescription:"कोई विवरण उपलब्ध नहीं है।"}},Rg={title:{prayer:"प्रार्थना प्रगति",engagement:"सहभागिता प्रगति",adoption:"गोद लेने की प्रगति",languageFamilies:"भाषा परिवार",doxaRegions:"Doxa क्षेत्र",affinityBlocs:"समानता समूह",gospelResources:"सुसमाचार संसाधन"},header:{collapsed:"किंवदंती",peopleGroupFallback:"जनजाति समूह"},prayer:{needsPrayer:"प्रार्थना चाहिए",hasPrayer:"प्रार्थना है",fullPrayerCoverage:"पूर्ण प्रार्थना कवरेज"},engagement:{needsEngagement:"सहभागिता चाहिए",hasEngagement:"सहभागिता है"},adoption:{needsAdoption:"गोद लेना चाहिए",hasAdoption:"गोद लिया गया"},columns:{upgs:"UUPGs",population:"जनसंख्या"},footer:{total:"कुल"}},Fg={menuComingSoon:"मेनू शीघ्र आ रहा है"},Og={clusterByRegion:"Doxa क्षेत्र के अनुसार",clusterByLanguageFamily:"भाषा परिवार के अनुसार",clusterByGospelResource:"सुसमाचार संसाधन के अनुसार"},Dg={header:"वर्तमान प्रार्थना चक्र",lap:"चक्र",upgs:"UUPGs",separator:" में से "},Bg={placeholder:"लोग, स्थान, भाषा, धर्म",labels:{people:"लोग:",place:"स्थान:",language:"भाषा:",religion:"धर्म:"}},Ug={backToLegend:"Torna alla legenda",closeDetailView:"Chiudi vista dettaglio"},jg={prayForThem:"Prega per loro",adoptThem:"Adottali",moreInfo:"Più informazioni",zoomIn:"Ingrandisci",zoomOut:"Riduci",switchToLightMode:"Passa alla modalità chiara",switchToDarkMode:"Passa alla modalità scura",resetView:"Reimposta vista",toggleFullscreen:"Attiva/disattiva schermo intero",aboutThisMap:"Informazioni su questa mappa",closeMenu:"Chiudi menu",reloadMap:"Ricarica mappa",showClusters:"Mostra cluster",clusterSettings:"Impostazioni cluster",startAutoFly:"Avvia volo automatico",stopFlight:"Ferma volo",speedLabel:"Velocità:",speedOption:{slow:"Lenta",normal:"Normale",fast:"Veloce"},shareEmbed:"Condividi e incorpora"},Kg={labels:{country:"Paese:",population:"Popolazione:",language:"Lingua:",religion:"Religione:",languageFamily:"Famiglia linguistica:",peopleCommitted:"Impegnati a pregare:"},messages:{noDescription:"Nessuna descrizione disponibile."}},Gg={title:{prayer:"Avanzamento della preghiera",engagement:"Avanzamento dell'impegno",adoption:"Avanzamento dell'adozione",languageFamilies:"Famiglie linguistiche",doxaRegions:"Regioni Doxa",affinityBlocs:"Blocchi di affinità",gospelResources:"Risorse del Vangelo"},header:{collapsed:"Legenda",peopleGroupFallback:"Gruppo di persone"},prayer:{needsPrayer:"Necessita preghiera",hasPrayer:"Ha preghiera",fullPrayerCoverage:"Copertura di preghiera completa"},engagement:{needsEngagement:"Necessita impegno",hasEngagement:"Ha impegno"},adoption:{needsAdoption:"Necessita adozione",hasAdoption:"Ha adozione"},columns:{upgs:"UUPGs",population:"Popolazione"},footer:{total:"Totale"}},Hg={menuComingSoon:"Menu in arrivo"},zg={clusterByRegion:"Per regione Doxa",clusterByLanguageFamily:"Per famiglia linguistica",clusterByGospelResource:"Per risorsa del Vangelo"},Vg={header:"GIRO DI PREGHIERA ATTUALE",lap:"Giro",upgs:"UUPGs",separator:" di "},Wg={placeholder:"Popolo, luogo, lingua, religione",labels:{people:"Popolo:",place:"Luogo:",language:"Lingua:",religion:"Religione:"}},Yg={backToLegend:"Voltar à legenda",closeDetailView:"Fechar vista de detalhe"},qg={prayForThem:"Ore por eles",adoptThem:"Adote-os",moreInfo:"Mais informações",zoomIn:"Ampliar",zoomOut:"Reduzir",switchToLightMode:"Mudar para modo claro",switchToDarkMode:"Mudar para modo escuro",resetView:"Repor vista",toggleFullscreen:"Alternar ecrã inteiro",aboutThisMap:"Sobre este mapa",closeMenu:"Fechar menu",reloadMap:"Recarregar mapa",showClusters:"Mostrar clusters",clusterSettings:"Definições de clusters",startAutoFly:"Iniciar voo automático",stopFlight:"Parar voo",speedLabel:"Velocidade:",speedOption:{slow:"Lenta",normal:"Normal",fast:"Rápida"},shareEmbed:"Partilhar e incorporar"},Jg={labels:{country:"País:",population:"População:",language:"Língua:",religion:"Religião:",languageFamily:"Família linguística:",peopleCommitted:"Comprometidos a orar:"},messages:{noDescription:"Sem descrição disponível."}},Xg={title:{prayer:"Progresso da oração",engagement:"Progresso do envolvimento",adoption:"Progresso da adoção",languageFamilies:"Famílias linguísticas",doxaRegions:"Regiões Doxa",affinityBlocs:"Blocos de afinidade",gospelResources:"Recursos do Evangelho"},header:{collapsed:"Legenda",peopleGroupFallback:"Grupo de pessoas"},prayer:{needsPrayer:"Precisa de oração",hasPrayer:"Tem oração",fullPrayerCoverage:"Cobertura de oração completa"},engagement:{needsEngagement:"Precisa de envolvimento",hasEngagement:"Tem envolvimento"},adoption:{needsAdoption:"Precisa de adoção",hasAdoption:"Tem adoção"},columns:{upgs:"UUPGs",population:"População",name:"Nome"},footer:{total:"Total"},sortByUpgs:"Ordenar por UUPG",sortByPop:"Ordenar por população",colLabel:{religion:"Religiões UUPG",prayer:"Status de oração",engagement:"Status de engajamento",adoption:"Status de adoção",status:"Status"},titleBar:{legend:"Legenda",peopleGroups:"Povos",wagfRegions:"Regiões WAGF",languages:"Idiomas"}},Zg={menuComingSoon:"Menu em breve"},Qg={clusterByRegion:"Por região Doxa",clusterByLanguageFamily:"Por família linguística",clusterByGospelResource:"Por recurso do Evangelho"},ep={header:"VOLTA DE ORAÇÃO ATUAL",lap:"Volta",upgs:"UUPGs",separator:" de "},tp={placeholder:"Povo, local, língua, religião",labels:{people:"Povo:",place:"Local:",language:"Língua:",religion:"Religião:"},kinds:{people:"Povo + país",peopleGroup:"Povo",bloc:"Bloco de afinidade",cluster:"Agrupamento de povos",country:"País",region:"Região",family:"Família linguística",languageKind:"Idioma",dialect:"Dialeto",religionKind:"Religião"}},np={prayer:"Oração",adoption:"Adoção",engagement:"Engajamento","affinity-blocks":"Povos",regions:"Regiões",countries:"Países","language-families":"Idiomas",religion:"Religiões",family:"Família linguística",language:"Idioma",dialect:"Dialeto/Variedade",bloc:"Bloco de afinidade",cluster:"Agrupamento",group:"Povo",pgic:"Povo no país",region:"Região WAGF",block:"Bloco WAGF",country:"País"},op={backToLegend:"Înapoi la legendă",closeDetailView:"Închide vizualizarea detaliată"},ap={prayForThem:"Roagă-te pentru ei",adoptThem:"Adoptă-i",moreInfo:"Mai multe informații",zoomIn:"Mărește",zoomOut:"Micșorează",switchToLightMode:"Comută la modul luminos",switchToDarkMode:"Comută la modul întunecat",resetView:"Resetează vizualizarea",toggleFullscreen:"Comută ecran complet",aboutThisMap:"Despre această hartă",closeMenu:"Închide meniul",reloadMap:"Reîncarcă harta",showClusters:"Arată clusterele",clusterSettings:"Setări clustere",startAutoFly:"Pornește zborul automat",stopFlight:"Oprește zborul",speedLabel:"Viteză:",speedOption:{slow:"Lent",normal:"Normal",fast:"Rapid"},shareEmbed:"Partajează și încorporează"},rp={labels:{country:"Țară:",population:"Populație:",language:"Limbă:",religion:"Religie:",languageFamily:"Familie de limbi:",peopleCommitted:"Angajați să se roage:"},messages:{noDescription:"Nicio descriere disponibilă."}},sp={title:{prayer:"Progresul rugăciunii",engagement:"Progresul implicării",adoption:"Progresul adopției",languageFamilies:"Familii de limbi",doxaRegions:"Regiuni Doxa",affinityBlocs:"Blocuri de afinitate",gospelResources:"Resurse ale Evangheliei"},header:{collapsed:"Legendă",peopleGroupFallback:"Grup de popoare"},prayer:{needsPrayer:"Necesită rugăciune",hasPrayer:"Are rugăciune",fullPrayerCoverage:"Acoperire completă de rugăciune"},engagement:{needsEngagement:"Necesită implicare",hasEngagement:"Are implicare"},adoption:{needsAdoption:"Necesită adopție",hasAdoption:"Are adopție"},columns:{upgs:"UUPGs",population:"Populație"},footer:{total:"Total"}},ip={menuComingSoon:"Meniu în curând"},lp={clusterByRegion:"După regiune Doxa",clusterByLanguageFamily:"După familia de limbi",clusterByGospelResource:"După resursa Evangheliei"},cp={header:"TURUL DE RUGĂCIUNE CURENT",lap:"Tur",upgs:"UUPGs",separator:" din "},up={placeholder:"Popor, loc, limbă, religie",labels:{people:"Popor:",place:"Loc:",language:"Limbă:",religion:"Religie:"}},dp={backToLegend:"Назад к легенде",closeDetailView:"Закрыть подробный вид"},fp={prayForThem:"Молитесь о них",adoptThem:"Усыновите их",moreInfo:"Подробнее",zoomIn:"Приблизить",zoomOut:"Отдалить",switchToLightMode:"Переключить на светлый режим",switchToDarkMode:"Переключить на тёмный режим",resetView:"Сбросить вид",toggleFullscreen:"Полноэкранный режим",aboutThisMap:"Об этой карте",closeMenu:"Закрыть меню",reloadMap:"Перезагрузить карту",showClusters:"Показать кластеры",clusterSettings:"Настройки кластеров",startAutoFly:"Начать авто-полёт",stopFlight:"Остановить полёт",speedLabel:"Скорость:",speedOption:{slow:"Медленно",normal:"Нормально",fast:"Быстро"},shareEmbed:"Поделиться и встроить"},gp={labels:{country:"Страна:",population:"Население:",language:"Язык:",religion:"Религия:",languageFamily:"Языковая семья:",peopleCommitted:"Обязались молиться:"},messages:{noDescription:"Описание недоступно."}},pp={title:{prayer:"Прогресс молитвы",engagement:"Прогресс вовлечённости",adoption:"Прогресс усыновления",languageFamilies:"Языковые семьи",doxaRegions:"Регионы Doxa",affinityBlocs:"Блоки родства",gospelResources:"Евангельские ресурсы"},header:{collapsed:"Условные обозначения",peopleGroupFallback:"Народная группа"},prayer:{needsPrayer:"Нуждается в молитве",hasPrayer:"Есть молитва",fullPrayerCoverage:"Полное молитвенное покрытие"},engagement:{needsEngagement:"Нуждается в вовлечённости",hasEngagement:"Есть вовлечённость"},adoption:{needsAdoption:"Нуждается в усыновлении",hasAdoption:"Есть усыновление"},columns:{upgs:"UUPGs",population:"Население",name:"Название"},footer:{total:"Всего"},sortByUpgs:"Сортировать по UUPG",sortByPop:"Сортировать по населению",colLabel:{religion:"Религии UUPG",prayer:"Статус молитвы",engagement:"Статус вовлечённости",adoption:"Статус усыновления",status:"Статус"},titleBar:{legend:"Легенда",peopleGroups:"Народы",wagfRegions:"Регионы WAGF",languages:"Языки"}},hp={menuComingSoon:"Меню скоро появится"},mp={clusterByRegion:"По региону Doxa",clusterByLanguageFamily:"По языковой семье",clusterByGospelResource:"По евангельскому ресурсу"},bp={header:"ТЕКУЩИЙ КРУГ МОЛИТВЫ",lap:"Круг",upgs:"UUPGs",separator:" из "},_p={placeholder:"Народ, место, язык, религия",labels:{people:"Народ:",place:"Место:",language:"Язык:",religion:"Религия:"},kinds:{people:"Народ + страна",peopleGroup:"Народ",bloc:"Блок родства",cluster:"Кластер народов",country:"Страна",region:"Регион",family:"Языковая семья",languageKind:"Язык",dialect:"Диалект",religionKind:"Религия"}},yp={prayer:"Молитва",adoption:"Усыновление",engagement:"Вовлечённость","affinity-blocks":"Народы",regions:"Регионы",countries:"Страны","language-families":"Языки",religion:"Религии",family:"Языковая семья",language:"Язык",dialect:"Диалект/вариант",bloc:"Блок родства",cluster:"Кластер",group:"Народ",pgic:"Народ в стране",region:"Регион WAGF",block:"Блок WAGF",country:"Страна"},vp={backToLegend:"返回图例",closeDetailView:"关闭详情视图"},Sp={prayForThem:"为他们祷告",adoptThem:"认领他们",moreInfo:"更多信息",zoomIn:"放大",zoomOut:"缩小",switchToLightMode:"切换至浅色模式",switchToDarkMode:"切换至深色模式",resetView:"重置视图",toggleFullscreen:"切换全屏",aboutThisMap:"关于此地图",closeMenu:"关闭菜单",reloadMap:"重新加载地图",showClusters:"显示聚类",clusterSettings:"聚类设置",startAutoFly:"开始自动飞行",stopFlight:"停止飞行",speedLabel:"速度:",speedOption:{slow:"慢",normal:"正常",fast:"快"},shareEmbed:"分享与嵌入"},wp={labels:{country:"国家:",population:"人口:",language:"语言:",religion:"宗教:",languageFamily:"语系:",peopleCommitted:"承诺祷告人数:"},messages:{noDescription:"暂无描述。"}},$p={title:{prayer:"祷告进度",engagement:"参与进度",adoption:"认领进度",languageFamilies:"语系",doxaRegions:"Doxa 区域",affinityBlocs:"亲缘板块",gospelResources:"福音资源"},header:{collapsed:"图例",peopleGroupFallback:"民族群体"},prayer:{needsPrayer:"需要祷告",hasPrayer:"已有祷告",fullPrayerCoverage:"全面祷告覆盖"},engagement:{needsEngagement:"需要参与",hasEngagement:"已有参与"},adoption:{needsAdoption:"需要认领",hasAdoption:"已有认领"},columns:{upgs:"UUPGs",population:"人口"},footer:{total:"总计"}},Ap={menuComingSoon:"菜单即将推出"},kp={clusterByRegion:"按 Doxa 区域",clusterByLanguageFamily:"按语系",clusterByGospelResource:"按福音资源"},Lp={header:"当前祷告轮次",lap:"第",upgs:"UUPGs",separator:" / "},Ep={placeholder:"民族、地点、语言、宗教",labels:{people:"民族:",place:"地点:",language:"语言:",religion:"宗教:"}};/*! + * shared v9.14.5 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */function Tp(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const ua=typeof window<"u",ln=(e,t=!1)=>t?Symbol.for(e):Symbol(e),Cp=(e,t,n)=>xp({l:e,k:t,s:n}),xp=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),Ke=e=>typeof e=="number"&&isFinite(e),Pp=e=>rl(e)==="[object Date]",cn=e=>rl(e)==="[object RegExp]",da=e=>_e(e)&&Object.keys(e).length===0,Je=Object.assign,Np=Object.create,xe=(e=null)=>Np(e);let tl;const Jt=()=>tl||(tl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:xe());function nl(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function ol(e){return e.replace(/&(?![a-zA-Z0-9#]{2,6};)/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function Mp(e){return e=e.replace(/(\w+)\s*=\s*"([^"]*)"/g,(o,a,r)=>`${a}="${ol(r)}"`),e=e.replace(/(\w+)\s*=\s*'([^']*)'/g,(o,a,r)=>`${a}='${ol(r)}'`),/\s*on\w+\s*=\s*["']?[^"'>]+["']?/gi.test(e)&&(e=e.replace(/(\s+)(on)(\w+\s*=)/gi,"$1on$3")),[/(\s+(?:href|src|action|formaction)\s*=\s*["']?)\s*javascript:/gi,/(style\s*=\s*["'][^"']*url\s*\(\s*)javascript:/gi].forEach(o=>{e=e.replace(o,"$1javascript:")}),e}const Ip=Object.prototype.hasOwnProperty;function $t(e,t){return Ip.call(e,t)}const Fe=Array.isArray,Ie=e=>typeof e=="function",oe=e=>typeof e=="string",Se=e=>typeof e=="boolean",ke=e=>e!==null&&typeof e=="object",Rp=e=>ke(e)&&Ie(e.then)&&Ie(e.catch),al=Object.prototype.toString,rl=e=>al.call(e),_e=e=>{if(!ke(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object},Fp=e=>e==null?"":Fe(e)||_e(e)&&e.toString===al?JSON.stringify(e,null,2):String(e);function Op(e,t=""){return e.reduce((n,o,a)=>a===0?n+o:n+t+o,"")}function fa(e){let t=e;return()=>++t}const ga=e=>!ke(e)||Fe(e);function pa(e,t){if(ga(e)||ga(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:o,des:a}=n.pop();Object.keys(o).forEach(r=>{r!=="__proto__"&&(ke(o[r])&&!ke(a[r])&&(a[r]=Array.isArray(o[r])?[]:xe()),ga(a[r])||ga(o[r])?a[r]=o[r]:n.push({src:o[r],des:a[r]}))})}}/*! + * message-compiler v9.14.5 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */function Dp(e,t,n){return{line:e,column:t,offset:n}}function ha(e,t,n){return{start:e,end:t}}const Bp=/\{([0-9a-zA-Z]+)\}/g;function sl(e,...t){return t.length===1&&Up(t[0])&&(t=t[0]),(!t||!t.hasOwnProperty)&&(t={}),e.replace(Bp,(n,o)=>t.hasOwnProperty(o)?t[o]:"")}const il=Object.assign,ll=e=>typeof e=="string",Up=e=>e!==null&&typeof e=="object";function cl(e,t=""){return e.reduce((n,o,a)=>a===0?n+o:n+t+o,"")}const hr={USE_MODULO_SYNTAX:1,__EXTEND_POINT__:2},jp={[hr.USE_MODULO_SYNTAX]:"Use modulo before '{{0}}'."};function Kp(e,t,...n){const o=sl(jp[e],...n||[]),a={message:String(o),code:e};return t&&(a.location=t),a}const ge={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},Gp={[ge.EXPECTED_TOKEN]:"Expected token: '{0}'",[ge.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[ge.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[ge.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[ge.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[ge.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[ge.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[ge.EMPTY_PLACEHOLDER]:"Empty placeholder",[ge.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[ge.INVALID_LINKED_FORMAT]:"Invalid linked format",[ge.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[ge.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[ge.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[ge.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[ge.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[ge.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function On(e,t,n={}){const{domain:o,messages:a,args:r}=n,s=sl((a||Gp)[e]||"",...r||[]),i=new SyntaxError(String(s));return i.code=e,t&&(i.location=t),i.domain=o,i}function Hp(e){throw e}const Xt=" ",zp="\r",rt=` +`,Vp="\u2028",Wp="\u2029";function Yp(e){const t=e;let n=0,o=1,a=1,r=0;const s=T=>t[T]===zp&&t[T+1]===rt,i=T=>t[T]===rt,l=T=>t[T]===Wp,c=T=>t[T]===Vp,u=T=>s(T)||i(T)||l(T)||c(T),f=()=>n,d=()=>o,b=()=>a,_=()=>r,v=T=>s(T)||l(T)||c(T)?rt:t[T],E=()=>v(n),k=()=>v(n+r);function A(){return r=0,u(n)&&(o++,a=0),s(n)&&n++,n++,a++,t[n]}function h(){return s(n+r)&&r++,r++,t[n+r]}function m(){n=0,o=1,a=1,r=0}function w(T=0){r=T}function S(){const T=n+r;for(;T!==n;)A();r=0}return{index:f,line:d,column:b,peekOffset:_,charAt:v,currentChar:E,currentPeek:k,next:A,peek:h,reset:m,resetPeek:w,skipToPeek:S}}const un=void 0,qp=".",ul="'",Jp="tokenizer";function Xp(e,t={}){const n=t.location!==!1,o=Yp(e),a=()=>o.index(),r=()=>Dp(o.line(),o.column(),o.index()),s=r(),i=a(),l={currentType:14,offset:i,startLoc:s,endLoc:s,lastType:14,lastOffset:i,lastStartLoc:s,lastEndLoc:s,braceNest:0,inLinked:!1,text:""},c=()=>l,{onError:u}=t;function f(g,p,M,...O){const Q=c();if(p.column+=M,p.offset+=M,u){const V=n?ha(Q.startLoc,p):null,N=On(g,V,{domain:Jp,args:O});u(N)}}function d(g,p,M){g.endLoc=r(),g.currentType=p;const O={type:p};return n&&(O.loc=ha(g.startLoc,g.endLoc)),M!=null&&(O.value=M),O}const b=g=>d(g,14);function _(g,p){return g.currentChar()===p?(g.next(),p):(f(ge.EXPECTED_TOKEN,r(),0,p),"")}function v(g){let p="";for(;g.currentPeek()===Xt||g.currentPeek()===rt;)p+=g.currentPeek(),g.peek();return p}function E(g){const p=v(g);return g.skipToPeek(),p}function k(g){if(g===un)return!1;const p=g.charCodeAt(0);return p>=97&&p<=122||p>=65&&p<=90||p===95}function A(g){if(g===un)return!1;const p=g.charCodeAt(0);return p>=48&&p<=57}function h(g,p){const{currentType:M}=p;if(M!==2)return!1;v(g);const O=k(g.currentPeek());return g.resetPeek(),O}function m(g,p){const{currentType:M}=p;if(M!==2)return!1;v(g);const O=g.currentPeek()==="-"?g.peek():g.currentPeek(),Q=A(O);return g.resetPeek(),Q}function w(g,p){const{currentType:M}=p;if(M!==2)return!1;v(g);const O=g.currentPeek()===ul;return g.resetPeek(),O}function S(g,p){const{currentType:M}=p;if(M!==8)return!1;v(g);const O=g.currentPeek()===".";return g.resetPeek(),O}function T(g,p){const{currentType:M}=p;if(M!==9)return!1;v(g);const O=k(g.currentPeek());return g.resetPeek(),O}function C(g,p){const{currentType:M}=p;if(!(M===8||M===12))return!1;v(g);const O=g.currentPeek()===":";return g.resetPeek(),O}function x(g,p){const{currentType:M}=p;if(M!==10)return!1;const O=()=>{const V=g.currentPeek();return V==="{"?k(g.peek()):V==="@"||V==="%"||V==="|"||V===":"||V==="."||V===Xt||!V?!1:V===rt?(g.peek(),O()):z(g,!1)},Q=O();return g.resetPeek(),Q}function F(g){v(g);const p=g.currentPeek()==="|";return g.resetPeek(),p}function W(g){const p=v(g),M=g.currentPeek()==="%"&&g.peek()==="{";return g.resetPeek(),{isModulo:M,hasSpace:p.length>0}}function z(g,p=!0){const M=(Q=!1,V="",N=!1)=>{const D=g.currentPeek();return D==="{"?V==="%"?!1:Q:D==="@"||!D?V==="%"?!0:Q:D==="%"?(g.peek(),M(Q,"%",!0)):D==="|"?V==="%"||N?!0:!(V===Xt||V===rt):D===Xt?(g.peek(),M(!0,Xt,N)):D===rt?(g.peek(),M(!0,rt,N)):!0},O=M();return p&&g.resetPeek(),O}function P(g,p){const M=g.currentChar();return M===un?un:p(M)?(g.next(),M):null}function H(g){const p=g.charCodeAt(0);return p>=97&&p<=122||p>=65&&p<=90||p>=48&&p<=57||p===95||p===36}function ne(g){return P(g,H)}function U(g){const p=g.charCodeAt(0);return p>=97&&p<=122||p>=65&&p<=90||p>=48&&p<=57||p===95||p===36||p===45}function Y(g){return P(g,U)}function J(g){const p=g.charCodeAt(0);return p>=48&&p<=57}function te(g){return P(g,J)}function G(g){const p=g.charCodeAt(0);return p>=48&&p<=57||p>=65&&p<=70||p>=97&&p<=102}function q(g){return P(g,G)}function ee(g){let p="",M="";for(;p=te(g);)M+=p;return M}function ce(g){E(g);const p=g.currentChar();return p!=="%"&&f(ge.EXPECTED_TOKEN,r(),0,p),g.next(),"%"}function we(g){let p="";for(;;){const M=g.currentChar();if(M==="{"||M==="}"||M==="@"||M==="|"||!M)break;if(M==="%")if(z(g))p+=M,g.next();else break;else if(M===Xt||M===rt)if(z(g))p+=M,g.next();else{if(F(g))break;p+=M,g.next()}else p+=M,g.next()}return p}function Pe(g){E(g);let p="",M="";for(;p=Y(g);)M+=p;return g.currentChar()===un&&f(ge.UNTERMINATED_CLOSING_BRACE,r(),0),M}function Ge(g){E(g);let p="";return g.currentChar()==="-"?(g.next(),p+=`-${ee(g)}`):p+=ee(g),g.currentChar()===un&&f(ge.UNTERMINATED_CLOSING_BRACE,r(),0),p}function Ue(g){return g!==ul&&g!==rt}function je(g){E(g),_(g,"'");let p="",M="";for(;p=P(g,Ue);)p==="\\"?M+=K(g):M+=p;const O=g.currentChar();return O===rt||O===un?(f(ge.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,r(),0),O===rt&&(g.next(),_(g,"'")),M):(_(g,"'"),M)}function K(g){const p=g.currentChar();switch(p){case"\\":case"'":return g.next(),`\\${p}`;case"u":return le(g,p,4);case"U":return le(g,p,6);default:return f(ge.UNKNOWN_ESCAPE_SEQUENCE,r(),0,p),""}}function le(g,p,M){_(g,p);let O="";for(let Q=0;Q{const O=g.currentChar();return O==="{"||O==="%"||O==="@"||O==="|"||O==="("||O===")"||!O||O===Xt?M:(M+=O,g.next(),p(M))};return p("")}function I(g){E(g);const p=_(g,"|");return E(g),p}function B(g,p){let M=null;switch(g.currentChar()){case"{":return p.braceNest>=1&&f(ge.NOT_ALLOW_NEST_PLACEHOLDER,r(),0),g.next(),M=d(p,2,"{"),E(g),p.braceNest++,M;case"}":return p.braceNest>0&&p.currentType===2&&f(ge.EMPTY_PLACEHOLDER,r(),0),g.next(),M=d(p,3,"}"),p.braceNest--,p.braceNest>0&&E(g),p.inLinked&&p.braceNest===0&&(p.inLinked=!1),M;case"@":return p.braceNest>0&&f(ge.UNTERMINATED_CLOSING_BRACE,r(),0),M=j(g,p)||b(p),p.braceNest=0,M;default:{let Q=!0,V=!0,N=!0;if(F(g))return p.braceNest>0&&f(ge.UNTERMINATED_CLOSING_BRACE,r(),0),M=d(p,1,I(g)),p.braceNest=0,p.inLinked=!1,M;if(p.braceNest>0&&(p.currentType===5||p.currentType===6||p.currentType===7))return f(ge.UNTERMINATED_CLOSING_BRACE,r(),0),p.braceNest=0,Z(g,p);if(Q=h(g,p))return M=d(p,5,Pe(g)),E(g),M;if(V=m(g,p))return M=d(p,6,Ge(g)),E(g),M;if(N=w(g,p))return M=d(p,7,je(g)),E(g),M;if(!Q&&!V&&!N)return M=d(p,13,y(g)),f(ge.INVALID_TOKEN_IN_PLACEHOLDER,r(),0,M.value),E(g),M;break}}return M}function j(g,p){const{currentType:M}=p;let O=null;const Q=g.currentChar();switch((M===8||M===9||M===12||M===10)&&(Q===rt||Q===Xt)&&f(ge.INVALID_LINKED_FORMAT,r(),0),Q){case"@":return g.next(),O=d(p,8,"@"),p.inLinked=!0,O;case".":return E(g),g.next(),d(p,9,".");case":":return E(g),g.next(),d(p,10,":");default:return F(g)?(O=d(p,1,I(g)),p.braceNest=0,p.inLinked=!1,O):S(g,p)||C(g,p)?(E(g),j(g,p)):T(g,p)?(E(g),d(p,12,L(g))):x(g,p)?(E(g),Q==="{"?B(g,p)||O:d(p,11,$(g))):(M===8&&f(ge.INVALID_LINKED_FORMAT,r(),0),p.braceNest=0,p.inLinked=!1,Z(g,p))}}function Z(g,p){let M={type:14};if(p.braceNest>0)return B(g,p)||b(p);if(p.inLinked)return j(g,p)||b(p);switch(g.currentChar()){case"{":return B(g,p)||b(p);case"}":return f(ge.UNBALANCED_CLOSING_BRACE,r(),0),g.next(),d(p,3,"}");case"@":return j(g,p)||b(p);default:{if(F(g))return M=d(p,1,I(g)),p.braceNest=0,p.inLinked=!1,M;const{isModulo:Q,hasSpace:V}=W(g);if(Q)return V?d(p,0,we(g)):d(p,4,ce(g));if(z(g))return d(p,0,we(g));break}}return M}function X(){const{currentType:g,offset:p,startLoc:M,endLoc:O}=l;return l.lastType=g,l.lastOffset=p,l.lastStartLoc=M,l.lastEndLoc=O,l.offset=a(),l.startLoc=r(),o.currentChar()===un?d(l,14):Z(o,l)}return{nextToken:X,currentOffset:a,currentPosition:r,context:c}}const Zp="parser",Qp=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function eh(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const o=parseInt(t||n,16);return o<=55295||o>=57344?String.fromCodePoint(o):"�"}}}function th(e={}){const t=e.location!==!1,{onError:n,onWarn:o}=e;function a(h,m,w,S,...T){const C=h.currentPosition();if(C.offset+=S,C.column+=S,n){const x=t?ha(w,C):null,F=On(m,x,{domain:Zp,args:T});n(F)}}function r(h,m,w,S,...T){const C=h.currentPosition();if(C.offset+=S,C.column+=S,o){const x=t?ha(w,C):null;o(Kp(m,x,T))}}function s(h,m,w){const S={type:h};return t&&(S.start=m,S.end=m,S.loc={start:w,end:w}),S}function i(h,m,w,S){t&&(h.end=m,h.loc&&(h.loc.end=w))}function l(h,m){const w=h.context(),S=s(3,w.offset,w.startLoc);return S.value=m,i(S,h.currentOffset(),h.currentPosition()),S}function c(h,m){const w=h.context(),{lastOffset:S,lastStartLoc:T}=w,C=s(5,S,T);return C.index=parseInt(m,10),h.nextToken(),i(C,h.currentOffset(),h.currentPosition()),C}function u(h,m,w){const S=h.context(),{lastOffset:T,lastStartLoc:C}=S,x=s(4,T,C);return x.key=m,w===!0&&(x.modulo=!0),h.nextToken(),i(x,h.currentOffset(),h.currentPosition()),x}function f(h,m){const w=h.context(),{lastOffset:S,lastStartLoc:T}=w,C=s(9,S,T);return C.value=m.replace(Qp,eh),h.nextToken(),i(C,h.currentOffset(),h.currentPosition()),C}function d(h){const m=h.nextToken(),w=h.context(),{lastOffset:S,lastStartLoc:T}=w,C=s(8,S,T);return m.type!==12?(a(h,ge.UNEXPECTED_EMPTY_LINKED_MODIFIER,w.lastStartLoc,0),C.value="",i(C,S,T),{nextConsumeToken:m,node:C}):(m.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,At(m)),C.value=m.value||"",i(C,h.currentOffset(),h.currentPosition()),{node:C})}function b(h,m){const w=h.context(),S=s(7,w.offset,w.startLoc);return S.value=m,i(S,h.currentOffset(),h.currentPosition()),S}function _(h){const m=h.context(),w=s(6,m.offset,m.startLoc);let S=h.nextToken();if(S.type===9){const T=d(h);w.modifier=T.node,S=T.nextConsumeToken||h.nextToken()}switch(S.type!==10&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(S)),S=h.nextToken(),S.type===2&&(S=h.nextToken()),S.type){case 11:S.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(S)),w.key=b(h,S.value||"");break;case 5:S.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(S)),w.key=u(h,S.value||"");break;case 6:S.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(S)),w.key=c(h,S.value||"");break;case 7:S.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(S)),w.key=f(h,S.value||"");break;default:{a(h,ge.UNEXPECTED_EMPTY_LINKED_KEY,m.lastStartLoc,0);const T=h.context(),C=s(7,T.offset,T.startLoc);return C.value="",i(C,T.offset,T.startLoc),w.key=C,i(w,T.offset,T.startLoc),{nextConsumeToken:S,node:w}}}return i(w,h.currentOffset(),h.currentPosition()),{node:w}}function v(h){const m=h.context(),w=m.currentType===1?h.currentOffset():m.offset,S=m.currentType===1?m.endLoc:m.startLoc,T=s(2,w,S);T.items=[];let C=null,x=null;do{const z=C||h.nextToken();switch(C=null,z.type){case 0:z.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(z)),T.items.push(l(h,z.value||""));break;case 6:z.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(z)),T.items.push(c(h,z.value||""));break;case 4:x=!0;break;case 5:z.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(z)),T.items.push(u(h,z.value||"",!!x)),x&&(r(h,hr.USE_MODULO_SYNTAX,m.lastStartLoc,0,At(z)),x=null);break;case 7:z.value==null&&a(h,ge.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,At(z)),T.items.push(f(h,z.value||""));break;case 8:{const P=_(h);T.items.push(P.node),C=P.nextConsumeToken||null;break}}}while(m.currentType!==14&&m.currentType!==1);const F=m.currentType===1?m.lastOffset:h.currentOffset(),W=m.currentType===1?m.lastEndLoc:h.currentPosition();return i(T,F,W),T}function E(h,m,w,S){const T=h.context();let C=S.items.length===0;const x=s(1,m,w);x.cases=[],x.cases.push(S);do{const F=v(h);C||(C=F.items.length===0),x.cases.push(F)}while(T.currentType!==14);return C&&a(h,ge.MUST_HAVE_MESSAGES_IN_PLURAL,w,0),i(x,h.currentOffset(),h.currentPosition()),x}function k(h){const m=h.context(),{offset:w,startLoc:S}=m,T=v(h);return m.currentType===14?T:E(h,w,S,T)}function A(h){const m=Xp(h,il({},e)),w=m.context(),S=s(0,w.offset,w.startLoc);return t&&S.loc&&(S.loc.source=h),S.body=k(m),e.onCacheKey&&(S.cacheKey=e.onCacheKey(h)),w.currentType!==14&&a(m,ge.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,h[w.offset]||""),i(S,m.currentOffset(),m.currentPosition()),S}return{parse:A}}function At(e){if(e.type===14)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function nh(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:r=>(n.helpers.add(r),r)}}function dl(e,t){for(let n=0;nfl(n)),e}function fl(e){if(e.items.length===1){const t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;ns;function l(v,E){s.code+=v}function c(v,E=!0){const k=E?o:"";l(a?k+" ".repeat(v):k)}function u(v=!0){const E=++s.indentLevel;v&&c(E)}function f(v=!0){const E=--s.indentLevel;v&&c(E)}function d(){c(s.indentLevel)}return{context:i,push:l,indent:u,deindent:f,newline:d,helper:v=>`_${v}`,needIndent:()=>s.needIndent}}function lh(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),Bn(e,t.key),t.modifier?(e.push(", "),Bn(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function ch(e,t){const{helper:n,needIndent:o}=e;e.push(`${n("normalize")}([`),e.indent(o());const a=t.items.length;for(let r=0;r1){e.push(`${n("plural")}([`),e.indent(o());const a=t.cases.length;for(let r=0;r{const n=ll(t.mode)?t.mode:"normal",o=ll(t.filename)?t.filename:"message.intl";t.sourceMap;const a=t.breakLineCode!=null?t.breakLineCode:n==="arrow"?";":` +`,r=t.needIndent?t.needIndent:n!=="arrow",s=e.helpers||[],i=ih(e,{filename:o,breakLineCode:a,needIndent:r});i.push(n==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),i.indent(r),s.length>0&&(i.push(`const { ${cl(s.map(u=>`${u}: _${u}`),", ")} } = ctx`),i.newline()),i.push("return "),Bn(i,e),i.deindent(r),i.push("}"),delete e.helpers;const{code:l,map:c}=i.context();return{ast:e,code:l,map:c?c.toJSON():void 0}};function gh(e,t={}){const n=il({},t),o=!!n.jit,a=!!n.minify,r=n.optimize==null?!0:n.optimize,i=th(n).parse(e);return o?(r&&ah(i),a&&Dn(i),{ast:i,code:""}):(oh(i,n),fh(i,n))}/*! + * core-base v9.14.5 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */function ph(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Jt().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Jt().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Jt().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Rt(e){return ke(e)&&br(e)===0&&($t(e,"b")||$t(e,"body"))}const gl=["b","body"];function hh(e){return dn(e,gl)}const pl=["c","cases"];function mh(e){return dn(e,pl,[])}const hl=["s","static"];function bh(e){return dn(e,hl)}const ml=["i","items"];function _h(e){return dn(e,ml,[])}const bl=["t","type"];function br(e){return dn(e,bl)}const _l=["v","value"];function ma(e,t){const n=dn(e,_l);if(n!=null)return n;throw mo(t)}const yl=["m","modifier"];function yh(e){return dn(e,yl)}const vl=["k","key"];function vh(e){const t=dn(e,vl);if(t)return t;throw mo(6)}function dn(e,t,n){for(let o=0;o{s===void 0?s=i:s+=i},d[1]=()=>{s!==void 0&&(t.push(s),s=void 0)},d[2]=()=>{d[0](),a++},d[3]=()=>{if(a>0)a--,o=4,d[0]();else{if(a=0,s===void 0||(s=kh(s),s===!1))return!1;d[1]()}};function b(){const _=e[n+1];if(o===5&&_==="'"||o===6&&_==='"')return n++,i="\\"+_,d[0](),!0}for(;o!==null;)if(n++,r=e[n],!(r==="\\"&&b())){if(l=Ah(r),f=fn[o],c=f[l]||f.l||8,c===8||(o=c[0],c[1]!==void 0&&(u=d[c[1]],u&&(i=r,u()===!1))))return;if(o===7)return t}}const wl=new Map;function Eh(e,t){return ke(e)?e[t]:null}function Th(e,t){if(!ke(e))return null;let n=wl.get(t);if(n||(n=Lh(t),n&&wl.set(t,n)),!n)return null;const o=n.length;let a=e,r=0;for(;re,xh=e=>"",Ph="text",Nh=e=>e.length===0?"":Op(e),Mh=Fp;function $l(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function Ih(e){const t=Ke(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(Ke(e.named.count)||Ke(e.named.n))?Ke(e.named.count)?e.named.count:Ke(e.named.n)?e.named.n:t:t}function Rh(e,t){t.count||(t.count=e),t.n||(t.n=e)}function Fh(e={}){const t=e.locale,n=Ih(e),o=ke(e.pluralRules)&&oe(t)&&Ie(e.pluralRules[t])?e.pluralRules[t]:$l,a=ke(e.pluralRules)&&oe(t)&&Ie(e.pluralRules[t])?$l:void 0,r=k=>k[o(n,k.length,a)],s=e.list||[],i=k=>s[k],l=e.named||xe();Ke(e.pluralIndex)&&Rh(n,l);const c=k=>l[k];function u(k){const A=Ie(e.messages)?e.messages(k):ke(e.messages)?e.messages[k]:!1;return A||(e.parent?e.parent.message(k):xh)}const f=k=>e.modifiers?e.modifiers[k]:Ch,d=_e(e.processor)&&Ie(e.processor.normalize)?e.processor.normalize:Nh,b=_e(e.processor)&&Ie(e.processor.interpolate)?e.processor.interpolate:Mh,_=_e(e.processor)&&oe(e.processor.type)?e.processor.type:Ph,E={list:i,named:c,plural:r,linked:(k,...A)=>{const[h,m]=A;let w="text",S="";A.length===1?ke(h)?(S=h.modifier||S,w=h.type||w):oe(h)&&(S=h||S):A.length===2&&(oe(h)&&(S=h||S),oe(m)&&(w=m||w));const T=u(k)(E),C=w==="vnode"&&Fe(T)&&S?T[0]:T;return S?f(S)(C,w):C},message:u,type:_,interpolate:b,normalize:d,values:Je(xe(),s,l)};return E}let bo=null;function Oh(e){bo=e}function Dh(e,t,n){bo&&bo.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:n})}const Bh=Uh("function:translate");function Uh(e){return t=>bo&&bo.emit(e,t)}const jh=hr.__EXTEND_POINT__,$n=fa(jh),Kh={FALLBACK_TO_TRANSLATE:$n(),CANNOT_FORMAT_NUMBER:$n(),FALLBACK_TO_NUMBER_FORMAT:$n(),CANNOT_FORMAT_DATE:$n(),FALLBACK_TO_DATE_FORMAT:$n(),EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:$n(),__EXTEND_POINT__:$n()},Al=ge.__EXTEND_POINT__,An=fa(Al),kt={INVALID_ARGUMENT:Al,INVALID_DATE_ARGUMENT:An(),INVALID_ISO_DATE_ARGUMENT:An(),NOT_SUPPORT_NON_STRING_MESSAGE:An(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:An(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:An(),NOT_SUPPORT_LOCALE_TYPE:An(),__EXTEND_POINT__:An()};function Ft(e){return On(e,null,void 0)}function _r(e,t){return t.locale!=null?kl(t.locale):kl(e.locale)}let yr;function kl(e){if(oe(e))return e;if(Ie(e)){if(e.resolvedOnce&&yr!=null)return yr;if(e.constructor.name==="Function"){const t=e();if(Rp(t))throw Ft(kt.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return yr=t}else throw Ft(kt.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw Ft(kt.NOT_SUPPORT_LOCALE_TYPE)}function Gh(e,t,n){return[...new Set([n,...Fe(t)?t:ke(t)?Object.keys(t):oe(t)?[t]:[n]])]}function Ll(e,t,n){const o=oe(n)?n:Un,a=e;a.__localeChainCache||(a.__localeChainCache=new Map);let r=a.__localeChainCache.get(o);if(!r){r=[];let s=[n];for(;Fe(s);)s=El(r,s,t);const i=Fe(t)||!_e(t)?t:t.default?t.default:null;s=oe(i)?[i]:i,Fe(s)&&El(r,s,!1),a.__localeChainCache.set(o,r)}return r}function El(e,t,n){let o=!0;for(let a=0;a`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function Wh(){return{upper:(e,t)=>t==="text"&&oe(e)?e.toUpperCase():t==="vnode"&&ke(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&oe(e)?e.toLowerCase():t==="vnode"&&ke(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&oe(e)?Cl(e):t==="vnode"&&ke(e)&&"__v_isVNode"in e?Cl(e.children):e}}let xl;function Pl(e){xl=e}let Nl;function Yh(e){Nl=e}let Ml;function qh(e){Ml=e}let Il=null;const Jh=e=>{Il=e},Xh=()=>Il;let Rl=null;const Fl=e=>{Rl=e},Zh=()=>Rl;let Ol=0;function Qh(e={}){const t=Ie(e.onWarn)?e.onWarn:Tp,n=oe(e.version)?e.version:Vh,o=oe(e.locale)||Ie(e.locale)?e.locale:Un,a=Ie(o)?Un:o,r=Fe(e.fallbackLocale)||_e(e.fallbackLocale)||oe(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:a,s=_e(e.messages)?e.messages:vr(a),i=_e(e.datetimeFormats)?e.datetimeFormats:vr(a),l=_e(e.numberFormats)?e.numberFormats:vr(a),c=Je(xe(),e.modifiers,Wh()),u=e.pluralRules||xe(),f=Ie(e.missing)?e.missing:null,d=Se(e.missingWarn)||cn(e.missingWarn)?e.missingWarn:!0,b=Se(e.fallbackWarn)||cn(e.fallbackWarn)?e.fallbackWarn:!0,_=!!e.fallbackFormat,v=!!e.unresolving,E=Ie(e.postTranslation)?e.postTranslation:null,k=_e(e.processor)?e.processor:null,A=Se(e.warnHtmlMessage)?e.warnHtmlMessage:!0,h=!!e.escapeParameter,m=Ie(e.messageCompiler)?e.messageCompiler:xl,w=Ie(e.messageResolver)?e.messageResolver:Nl||Eh,S=Ie(e.localeFallbacker)?e.localeFallbacker:Ml||Gh,T=ke(e.fallbackContext)?e.fallbackContext:void 0,C=e,x=ke(C.__datetimeFormatters)?C.__datetimeFormatters:new Map,F=ke(C.__numberFormatters)?C.__numberFormatters:new Map,W=ke(C.__meta)?C.__meta:{};Ol++;const z={version:n,cid:Ol,locale:o,fallbackLocale:r,messages:s,modifiers:c,pluralRules:u,missing:f,missingWarn:d,fallbackWarn:b,fallbackFormat:_,unresolving:v,postTranslation:E,processor:k,warnHtmlMessage:A,escapeParameter:h,messageCompiler:m,messageResolver:w,localeFallbacker:S,fallbackContext:T,onWarn:t,__meta:W};return z.datetimeFormats=i,z.numberFormats=l,z.__datetimeFormatters=x,z.__numberFormatters=F,__INTLIFY_PROD_DEVTOOLS__&&Dh(z,n,W),z}const vr=e=>({[e]:xe()});function Sr(e,t,n,o,a){const{missing:r,onWarn:s}=e;if(r!==null){const i=r(e,n,t,a);return oe(i)?i:t}else return t}function _o(e,t,n){const o=e;o.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function em(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function tm(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let o=n+1;onm(n,e)}function nm(e,t){const n=hh(t);if(n==null)throw mo(0);if(br(n)===1){const r=mh(n);return e.plural(r.reduce((s,i)=>[...s,Dl(e,i)],[]))}else return Dl(e,n)}function Dl(e,t){const n=bh(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const o=_h(t).reduce((a,r)=>[...a,$r(e,r)],[]);return e.normalize(o)}}function $r(e,t){const n=br(t);switch(n){case 3:return ma(t,n);case 9:return ma(t,n);case 4:{const o=t;if($t(o,"k")&&o.k)return e.interpolate(e.named(o.k));if($t(o,"key")&&o.key)return e.interpolate(e.named(o.key));throw mo(n)}case 5:{const o=t;if($t(o,"i")&&Ke(o.i))return e.interpolate(e.list(o.i));if($t(o,"index")&&Ke(o.index))return e.interpolate(e.list(o.index));throw mo(n)}case 6:{const o=t,a=yh(o),r=vh(o);return e.linked($r(e,r),a?$r(e,a):void 0,e.type)}case 7:return ma(t,n);case 8:return ma(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}const Bl=e=>e;let jn=xe();function Ul(e,t={}){let n=!1;const o=t.onError||Hp;return t.onError=a=>{n=!0,o(a)},{...gh(e,t),detectError:n}}const om=(e,t)=>{if(!oe(e))throw Ft(kt.NOT_SUPPORT_NON_STRING_MESSAGE);{Se(t.warnHtmlMessage)&&t.warnHtmlMessage;const o=(t.onCacheKey||Bl)(e),a=jn[o];if(a)return a;const{code:r,detectError:s}=Ul(e,t),i=new Function(`return ${r}`)();return s?i:jn[o]=i}};function am(e,t){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&oe(e)){Se(t.warnHtmlMessage)&&t.warnHtmlMessage;const o=(t.onCacheKey||Bl)(e),a=jn[o];if(a)return a;const{ast:r,detectError:s}=Ul(e,{...t,location:!1,jit:!0}),i=wr(r);return s?i:jn[o]=i}else{const n=e.cacheKey;if(n){const o=jn[n];return o||(jn[n]=wr(e))}else return wr(e)}}const jl=()=>"",_t=e=>Ie(e);function Kl(e,...t){const{fallbackFormat:n,postTranslation:o,unresolving:a,messageCompiler:r,fallbackLocale:s,messages:i}=e,[l,c]=Ar(...t),u=Se(c.missingWarn)?c.missingWarn:e.missingWarn,f=Se(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,d=Se(c.escapeParameter)?c.escapeParameter:e.escapeParameter,b=!!c.resolvedMessage,_=oe(c.default)||Se(c.default)?Se(c.default)?r?l:()=>l:c.default:n?r?l:()=>l:"",v=n||_!=="",E=_r(e,c);d&&rm(c);let[k,A,h]=b?[l,E,i[E]||xe()]:Gl(e,l,E,s,f,u),m=k,w=l;if(!b&&!(oe(m)||Rt(m)||_t(m))&&v&&(m=_,w=m),!b&&(!(oe(m)||Rt(m)||_t(m))||!oe(A)))return a?ba:l;let S=!1;const T=()=>{S=!0},C=_t(m)?m:Hl(e,l,A,m,w,T);if(S)return m;const x=lm(e,A,h,c),F=Fh(x),W=sm(e,C,F);let z=o?o(W,l):W;if(d&&oe(z)&&(z=Mp(z)),__INTLIFY_PROD_DEVTOOLS__){const P={timestamp:Date.now(),key:oe(l)?l:_t(m)?m.key:"",locale:A||(_t(m)?m.locale:""),format:oe(m)?m:_t(m)?m.source:"",message:z};P.meta=Je({},e.__meta,Xh()||{}),Bh(P)}return z}function rm(e){Fe(e.list)?e.list=e.list.map(t=>oe(t)?nl(t):t):ke(e.named)&&Object.keys(e.named).forEach(t=>{oe(e.named[t])&&(e.named[t]=nl(e.named[t]))})}function Gl(e,t,n,o,a,r){const{messages:s,onWarn:i,messageResolver:l,localeFallbacker:c}=e,u=c(e,o,n);let f=xe(),d,b=null;const _="translate";for(let v=0;vo;return c.locale=n,c.key=t,c}const l=s(o,im(e,n,a,o,i,r));return l.locale=n,l.key=t,l.source=o,l}function sm(e,t,n){return t(n)}function Ar(...e){const[t,n,o]=e,a=xe();if(!oe(t)&&!Ke(t)&&!_t(t)&&!Rt(t))throw Ft(kt.INVALID_ARGUMENT);const r=Ke(t)?String(t):(_t(t),t);return Ke(n)?a.plural=n:oe(n)?a.default=n:_e(n)&&!da(n)?a.named=n:Fe(n)&&(a.list=n),Ke(o)?a.plural=o:oe(o)?a.default=o:_e(o)&&Je(a,o),[r,a]}function im(e,t,n,o,a,r){return{locale:t,key:n,warnHtmlMessage:a,onError:s=>{throw r&&r(s),s},onCacheKey:s=>Cp(t,n,s)}}function lm(e,t,n,o){const{modifiers:a,pluralRules:r,messageResolver:s,fallbackLocale:i,fallbackWarn:l,missingWarn:c,fallbackContext:u}=e,d={locale:t,modifiers:a,pluralRules:r,messages:b=>{let _=s(n,b);if(_==null&&u){const[,,v]=Gl(u,b,t,i,l,c);_=s(v,b)}if(oe(_)||Rt(_)){let v=!1;const k=Hl(e,b,t,_,b,()=>{v=!0});return v?jl:k}else return _t(_)?_:jl}};return e.processor&&(d.processor=e.processor),o.list&&(d.list=o.list),o.named&&(d.named=o.named),Ke(o.plural)&&(d.pluralIndex=o.plural),d}function zl(e,...t){const{datetimeFormats:n,unresolving:o,fallbackLocale:a,onWarn:r,localeFallbacker:s}=e,{__datetimeFormatters:i}=e,[l,c,u,f]=kr(...t),d=Se(u.missingWarn)?u.missingWarn:e.missingWarn;Se(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn;const b=!!u.part,_=_r(e,u),v=s(e,a,_);if(!oe(l)||l==="")return new Intl.DateTimeFormat(_,f).format(c);let E={},k,A=null;const h="datetime format";for(let S=0;S{Vl.includes(l)?s[l]=n[l]:r[l]=n[l]}),oe(o)?r.locale=o:_e(o)&&(s=o),_e(a)&&(s=a),[r.key||"",i,r,s]}function Wl(e,t,n){const o=e;for(const a in n){const r=`${t}__${a}`;o.__datetimeFormatters.has(r)&&o.__datetimeFormatters.delete(r)}}function Yl(e,...t){const{numberFormats:n,unresolving:o,fallbackLocale:a,onWarn:r,localeFallbacker:s}=e,{__numberFormatters:i}=e,[l,c,u,f]=Lr(...t),d=Se(u.missingWarn)?u.missingWarn:e.missingWarn;Se(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn;const b=!!u.part,_=_r(e,u),v=s(e,a,_);if(!oe(l)||l==="")return new Intl.NumberFormat(_,f).format(c);let E={},k,A=null;const h="number format";for(let S=0;S{ql.includes(l)?s[l]=n[l]:r[l]=n[l]}),oe(o)?r.locale=o:_e(o)&&(s=o),_e(a)&&(s=a),[r.key||"",i,r,s]}function Jl(e,t,n){const o=e;for(const a in n){const r=`${t}__${a}`;o.__numberFormatters.has(r)&&o.__numberFormatters.delete(r)}}ph();/*! + * vue-i18n v9.14.5 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */const cm="9.14.5";function um(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(Jt().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(Jt().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Jt().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Jt().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Jt().__INTLIFY_PROD_DEVTOOLS__=!1)}const dm=Kh.__EXTEND_POINT__,Zt=fa(dm);Zt(),Zt(),Zt(),Zt(),Zt(),Zt(),Zt(),Zt(),Zt();const Xl=kt.__EXTEND_POINT__,ut=fa(Xl),ze={UNEXPECTED_RETURN_TYPE:Xl,INVALID_ARGUMENT:ut(),MUST_BE_CALL_SETUP_TOP:ut(),NOT_INSTALLED:ut(),NOT_AVAILABLE_IN_LEGACY_MODE:ut(),REQUIRED_VALUE:ut(),INVALID_VALUE:ut(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:ut(),NOT_INSTALLED_WITH_PROVIDE:ut(),UNEXPECTED_ERROR:ut(),NOT_COMPATIBLE_LEGACY_VUE_I18N:ut(),BRIDGE_SUPPORT_VUE_2_ONLY:ut(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:ut(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:ut(),__EXTEND_POINT__:ut()};function We(e,...t){return On(e,null,void 0)}const Er=ln("__translateVNode"),Tr=ln("__datetimeParts"),Cr=ln("__numberParts"),Zl=ln("__setPluralRules"),Ql=ln("__injectWithOption"),xr=ln("__dispose");function yo(e){if(!ke(e)||Rt(e))return e;for(const t in e)if($t(e,t))if(!t.includes("."))ke(e[t])&&yo(e[t]);else{const n=t.split("."),o=n.length-1;let a=e,r=!1;for(let s=0;s{if("locale"in i&&"resource"in i){const{locale:l,resource:c}=i;l?(s[l]=s[l]||xe(),pa(c,s[l])):pa(c,s)}else oe(i)&&pa(JSON.parse(i),s)}),a==null&&r)for(const i in s)$t(s,i)&&yo(s[i]);return s}function ec(e){return e.type}function tc(e,t,n){let o=ke(t.messages)?t.messages:xe();"__i18nGlobal"in n&&(o=_a(e.locale.value,{messages:o,__i18n:n.__i18nGlobal}));const a=Object.keys(o);a.length&&a.forEach(r=>{e.mergeLocaleMessage(r,o[r])});{if(ke(t.datetimeFormats)){const r=Object.keys(t.datetimeFormats);r.length&&r.forEach(s=>{e.mergeDateTimeFormat(s,t.datetimeFormats[s])})}if(ke(t.numberFormats)){const r=Object.keys(t.numberFormats);r.length&&r.forEach(s=>{e.mergeNumberFormat(s,t.numberFormats[s])})}}}function nc(e){return Ce(ro,null,e,0)}const oc="__INTLIFY_META__",ac=()=>[],fm=()=>!1;let rc=0;function sc(e){return(t,n,o,a)=>e(n,o,an()||void 0,a)}const gm=()=>{const e=an();let t=null;return e&&(t=ec(e)[oc])?{[oc]:t}:null};function Pr(e={},t){const{__root:n,__injectWithOption:o}=e,a=n===void 0,r=e.flatJson,s=ua?pe:Uo,i=!!e.translateExistCompatible;let l=Se(e.inheritLocale)?e.inheritLocale:!0;const c=s(n&&l?n.locale.value:oe(e.locale)?e.locale:Un),u=s(n&&l?n.fallbackLocale.value:oe(e.fallbackLocale)||Fe(e.fallbackLocale)||_e(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:c.value),f=s(_a(c.value,e)),d=s(_e(e.datetimeFormats)?e.datetimeFormats:{[c.value]:{}}),b=s(_e(e.numberFormats)?e.numberFormats:{[c.value]:{}});let _=n?n.missingWarn:Se(e.missingWarn)||cn(e.missingWarn)?e.missingWarn:!0,v=n?n.fallbackWarn:Se(e.fallbackWarn)||cn(e.fallbackWarn)?e.fallbackWarn:!0,E=n?n.fallbackRoot:Se(e.fallbackRoot)?e.fallbackRoot:!0,k=!!e.fallbackFormat,A=Ie(e.missing)?e.missing:null,h=Ie(e.missing)?sc(e.missing):null,m=Ie(e.postTranslation)?e.postTranslation:null,w=n?n.warnHtmlMessage:Se(e.warnHtmlMessage)?e.warnHtmlMessage:!0,S=!!e.escapeParameter;const T=n?n.modifiers:_e(e.modifiers)?e.modifiers:{};let C=e.pluralRules||n&&n.pluralRules,x;x=(()=>{a&&Fl(null);const N={version:cm,locale:c.value,fallbackLocale:u.value,messages:f.value,modifiers:T,pluralRules:C,missing:h===null?void 0:h,missingWarn:_,fallbackWarn:v,fallbackFormat:k,unresolving:!0,postTranslation:m===null?void 0:m,warnHtmlMessage:w,escapeParameter:S,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};N.datetimeFormats=d.value,N.numberFormats=b.value,N.__datetimeFormatters=_e(x)?x.__datetimeFormatters:void 0,N.__numberFormatters=_e(x)?x.__numberFormatters:void 0;const D=Qh(N);return a&&Fl(D),D})(),_o(x,c.value,u.value);function W(){return[c.value,u.value,f.value,d.value,b.value]}const z=se({get:()=>c.value,set:N=>{c.value=N,x.locale=c.value}}),P=se({get:()=>u.value,set:N=>{u.value=N,x.fallbackLocale=u.value,_o(x,c.value,N)}}),H=se(()=>f.value),ne=se(()=>d.value),U=se(()=>b.value);function Y(){return Ie(m)?m:null}function J(N){m=N,x.postTranslation=N}function te(){return A}function G(N){N!==null&&(h=sc(N)),A=N,x.missing=h}const q=(N,D,ue,ye,Te,st)=>{W();let Xe;try{__INTLIFY_PROD_DEVTOOLS__,a||(x.fallbackContext=n?Zh():void 0),Xe=N(x)}finally{__INTLIFY_PROD_DEVTOOLS__,a||(x.fallbackContext=void 0)}if(ue!=="translate exists"&&Ke(Xe)&&Xe===ba||ue==="translate exists"&&!Xe){const[kn,ts]=D();return n&&E?ye(n):Te(kn)}else{if(st(Xe))return Xe;throw We(ze.UNEXPECTED_RETURN_TYPE)}};function ee(...N){return q(D=>Reflect.apply(Kl,null,[D,...N]),()=>Ar(...N),"translate",D=>Reflect.apply(D.t,D,[...N]),D=>D,D=>oe(D))}function ce(...N){const[D,ue,ye]=N;if(ye&&!ke(ye))throw We(ze.INVALID_ARGUMENT);return ee(D,ue,Je({resolvedMessage:!0},ye||{}))}function we(...N){return q(D=>Reflect.apply(zl,null,[D,...N]),()=>kr(...N),"datetime format",D=>Reflect.apply(D.d,D,[...N]),()=>Tl,D=>oe(D))}function Pe(...N){return q(D=>Reflect.apply(Yl,null,[D,...N]),()=>Lr(...N),"number format",D=>Reflect.apply(D.n,D,[...N]),()=>Tl,D=>oe(D))}function Ge(N){return N.map(D=>oe(D)||Ke(D)||Se(D)?nc(String(D)):D)}const je={normalize:Ge,interpolate:N=>N,type:"vnode"};function K(...N){return q(D=>{let ue;const ye=D;try{ye.processor=je,ue=Reflect.apply(Kl,null,[ye,...N])}finally{ye.processor=null}return ue},()=>Ar(...N),"translate",D=>D[Er](...N),D=>[nc(D)],D=>Fe(D))}function le(...N){return q(D=>Reflect.apply(Yl,null,[D,...N]),()=>Lr(...N),"number format",D=>D[Cr](...N),ac,D=>oe(D)||Fe(D))}function he(...N){return q(D=>Reflect.apply(zl,null,[D,...N]),()=>kr(...N),"datetime format",D=>D[Tr](...N),ac,D=>oe(D)||Fe(D))}function y(N){C=N,x.pluralRules=C}function L(N,D){return q(()=>{if(!N)return!1;const ue=oe(D)?D:c.value,ye=B(ue),Te=x.messageResolver(ye,N);return i?Te!=null:Rt(Te)||_t(Te)||oe(Te)},()=>[N],"translate exists",ue=>Reflect.apply(ue.te,ue,[N,D]),fm,ue=>Se(ue))}function $(N){let D=null;const ue=Ll(x,u.value,c.value);for(let ye=0;ye{l&&(c.value=N,x.locale=N,_o(x,c.value,u.value))}),bt(n.fallbackLocale,N=>{l&&(u.value=N,x.fallbackLocale=N,_o(x,c.value,u.value))}));const V={id:rc,locale:z,fallbackLocale:P,get inheritLocale(){return l},set inheritLocale(N){l=N,N&&n&&(c.value=n.locale.value,u.value=n.fallbackLocale.value,_o(x,c.value,u.value))},get availableLocales(){return Object.keys(f.value).sort()},messages:H,get modifiers(){return T},get pluralRules(){return C||{}},get isGlobal(){return a},get missingWarn(){return _},set missingWarn(N){_=N,x.missingWarn=_},get fallbackWarn(){return v},set fallbackWarn(N){v=N,x.fallbackWarn=v},get fallbackRoot(){return E},set fallbackRoot(N){E=N},get fallbackFormat(){return k},set fallbackFormat(N){k=N,x.fallbackFormat=k},get warnHtmlMessage(){return w},set warnHtmlMessage(N){w=N,x.warnHtmlMessage=N},get escapeParameter(){return S},set escapeParameter(N){S=N,x.escapeParameter=N},t:ee,getLocaleMessage:B,setLocaleMessage:j,mergeLocaleMessage:Z,getPostTranslationHandler:Y,setPostTranslationHandler:J,getMissingHandler:te,setMissingHandler:G,[Zl]:y};return V.datetimeFormats=ne,V.numberFormats=U,V.rt=ce,V.te=L,V.tm=I,V.d=we,V.n=Pe,V.getDateTimeFormat=X,V.setDateTimeFormat=g,V.mergeDateTimeFormat=p,V.getNumberFormat=M,V.setNumberFormat=O,V.mergeNumberFormat=Q,V[Ql]=o,V[Er]=K,V[Tr]=he,V[Cr]=le,V}function pm(e){const t=oe(e.locale)?e.locale:Un,n=oe(e.fallbackLocale)||Fe(e.fallbackLocale)||_e(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,o=Ie(e.missing)?e.missing:void 0,a=Se(e.silentTranslationWarn)||cn(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,r=Se(e.silentFallbackWarn)||cn(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,s=Se(e.fallbackRoot)?e.fallbackRoot:!0,i=!!e.formatFallbackMessages,l=_e(e.modifiers)?e.modifiers:{},c=e.pluralizationRules,u=Ie(e.postTranslation)?e.postTranslation:void 0,f=oe(e.warnHtmlInMessage)?e.warnHtmlInMessage!=="off":!0,d=!!e.escapeParameterHtml,b=Se(e.sync)?e.sync:!0;let _=e.messages;if(_e(e.sharedMessages)){const S=e.sharedMessages;_=Object.keys(S).reduce((C,x)=>{const F=C[x]||(C[x]={});return Je(F,S[x]),C},_||{})}const{__i18n:v,__root:E,__injectWithOption:k}=e,A=e.datetimeFormats,h=e.numberFormats,m=e.flatJson,w=e.translateExistCompatible;return{locale:t,fallbackLocale:n,messages:_,flatJson:m,datetimeFormats:A,numberFormats:h,missing:o,missingWarn:a,fallbackWarn:r,fallbackRoot:s,fallbackFormat:i,modifiers:l,pluralRules:c,postTranslation:u,warnHtmlMessage:f,escapeParameter:d,messageResolver:e.messageResolver,inheritLocale:b,translateExistCompatible:w,__i18n:v,__root:E,__injectWithOption:k}}function Nr(e={},t){{const n=Pr(pm(e)),{__extender:o}=e,a={id:n.id,get locale(){return n.locale.value},set locale(r){n.locale.value=r},get fallbackLocale(){return n.fallbackLocale.value},set fallbackLocale(r){n.fallbackLocale.value=r},get messages(){return n.messages.value},get datetimeFormats(){return n.datetimeFormats.value},get numberFormats(){return n.numberFormats.value},get availableLocales(){return n.availableLocales},get formatter(){return{interpolate(){return[]}}},set formatter(r){},get missing(){return n.getMissingHandler()},set missing(r){n.setMissingHandler(r)},get silentTranslationWarn(){return Se(n.missingWarn)?!n.missingWarn:n.missingWarn},set silentTranslationWarn(r){n.missingWarn=Se(r)?!r:r},get silentFallbackWarn(){return Se(n.fallbackWarn)?!n.fallbackWarn:n.fallbackWarn},set silentFallbackWarn(r){n.fallbackWarn=Se(r)?!r:r},get modifiers(){return n.modifiers},get formatFallbackMessages(){return n.fallbackFormat},set formatFallbackMessages(r){n.fallbackFormat=r},get postTranslation(){return n.getPostTranslationHandler()},set postTranslation(r){n.setPostTranslationHandler(r)},get sync(){return n.inheritLocale},set sync(r){n.inheritLocale=r},get warnHtmlInMessage(){return n.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(r){n.warnHtmlMessage=r!=="off"},get escapeParameterHtml(){return n.escapeParameter},set escapeParameterHtml(r){n.escapeParameter=r},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(r){},get pluralizationRules(){return n.pluralRules||{}},__composer:n,t(...r){const[s,i,l]=r,c={};let u=null,f=null;if(!oe(s))throw We(ze.INVALID_ARGUMENT);const d=s;return oe(i)?c.locale=i:Fe(i)?u=i:_e(i)&&(f=i),Fe(l)?u=l:_e(l)&&(f=l),Reflect.apply(n.t,n,[d,u||f||{},c])},rt(...r){return Reflect.apply(n.rt,n,[...r])},tc(...r){const[s,i,l]=r,c={plural:1};let u=null,f=null;if(!oe(s))throw We(ze.INVALID_ARGUMENT);const d=s;return oe(i)?c.locale=i:Ke(i)?c.plural=i:Fe(i)?u=i:_e(i)&&(f=i),oe(l)?c.locale=l:Fe(l)?u=l:_e(l)&&(f=l),Reflect.apply(n.t,n,[d,u||f||{},c])},te(r,s){return n.te(r,s)},tm(r){return n.tm(r)},getLocaleMessage(r){return n.getLocaleMessage(r)},setLocaleMessage(r,s){n.setLocaleMessage(r,s)},mergeLocaleMessage(r,s){n.mergeLocaleMessage(r,s)},d(...r){return Reflect.apply(n.d,n,[...r])},getDateTimeFormat(r){return n.getDateTimeFormat(r)},setDateTimeFormat(r,s){n.setDateTimeFormat(r,s)},mergeDateTimeFormat(r,s){n.mergeDateTimeFormat(r,s)},n(...r){return Reflect.apply(n.n,n,[...r])},getNumberFormat(r){return n.getNumberFormat(r)},setNumberFormat(r,s){n.setNumberFormat(r,s)},mergeNumberFormat(r,s){n.mergeNumberFormat(r,s)},getChoiceIndex(r,s){return-1}};return a.__extender=o,a}}const Mr={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function hm({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((o,a)=>[...o,...a.type===Ae?a.children:[a]],[]):t.reduce((n,o)=>{const a=e[o];return a&&(n[o]=a()),n},xe())}function ic(e){return Ae}const lc=to({name:"i18n-t",props:Je({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>Ke(e)||!isNaN(e)}},Mr),setup(e,t){const{slots:n,attrs:o}=t,a=e.i18n||vo({useScope:e.scope,__useComponent:!0});return()=>{const r=Object.keys(n).filter(f=>f!=="_"),s=xe();e.locale&&(s.locale=e.locale),e.plural!==void 0&&(s.plural=oe(e.plural)?+e.plural:e.plural);const i=hm(t,r),l=a[Er](e.keypath,i,s),c=Je(xe(),o),u=oe(e.tag)||ke(e.tag)?e.tag:ic();return Pi(u,c,l)}}});function mm(e){return Fe(e)&&!oe(e[0])}function cc(e,t,n,o){const{slots:a,attrs:r}=t;return()=>{const s={part:!0};let i=xe();e.locale&&(s.locale=e.locale),oe(e.format)?s.key=e.format:ke(e.format)&&(oe(e.format.key)&&(s.key=e.format.key),i=Object.keys(e.format).reduce((d,b)=>n.includes(b)?Je(xe(),d,{[b]:e.format[b]}):d,xe()));const l=o(e.value,s,i);let c=[s.key];Fe(l)?c=l.map((d,b)=>{const _=a[d.type],v=_?_({[d.type]:d.value,index:b,parts:l}):[d.value];return mm(v)&&(v[0].key=`${d.type}-${b}`),v}):oe(l)&&(c=[l]);const u=Je(xe(),r),f=oe(e.tag)||ke(e.tag)?e.tag:ic();return Pi(f,u,c)}}const uc=to({name:"i18n-n",props:Je({value:{type:Number,required:!0},format:{type:[String,Object]}},Mr),setup(e,t){const n=e.i18n||vo({useScope:e.scope,__useComponent:!0});return cc(e,t,ql,(...o)=>n[Cr](...o))}}),dc=to({name:"i18n-d",props:Je({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},Mr),setup(e,t){const n=e.i18n||vo({useScope:e.scope,__useComponent:!0});return cc(e,t,Vl,(...o)=>n[Tr](...o))}});function bm(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const o=n.__getInstance(t);return o!=null?o.__composer:e.global.__composer}}function _m(e){const t=s=>{const{instance:i,modifiers:l,value:c}=s;if(!i||!i.$)throw We(ze.UNEXPECTED_ERROR);const u=bm(e,i.$),f=fc(c);return[Reflect.apply(u.t,u,[...gc(f)]),u]};return{created:(s,i)=>{const[l,c]=t(i);ua&&e.global===c&&(s.__i18nWatcher=bt(c.locale,()=>{i.instance&&i.instance.$forceUpdate()})),s.__composer=c,s.textContent=l},unmounted:s=>{ua&&s.__i18nWatcher&&(s.__i18nWatcher(),s.__i18nWatcher=void 0,delete s.__i18nWatcher),s.__composer&&(s.__composer=void 0,delete s.__composer)},beforeUpdate:(s,{value:i})=>{if(s.__composer){const l=s.__composer,c=fc(i);s.textContent=Reflect.apply(l.t,l,[...gc(c)])}},getSSRProps:s=>{const[i]=t(s);return{textContent:i}}}}function fc(e){if(oe(e))return{path:e};if(_e(e)){if(!("path"in e))throw We(ze.REQUIRED_VALUE,"path");return e}else throw We(ze.INVALID_VALUE)}function gc(e){const{path:t,locale:n,args:o,choice:a,plural:r}=e,s={},i=o||{};return oe(n)&&(s.locale=n),Ke(a)&&(s.plural=a),Ke(r)&&(s.plural=r),[t,i,s]}function ym(e,t,...n){const o=_e(n[0])?n[0]:{},a=!!o.useI18nComponentName;(Se(o.globalInstall)?o.globalInstall:!0)&&([a?"i18n":lc.name,"I18nT"].forEach(s=>e.component(s,lc)),[uc.name,"I18nN"].forEach(s=>e.component(s,uc)),[dc.name,"I18nD"].forEach(s=>e.component(s,dc))),e.directive("t",_m(t))}function vm(e,t,n){return{beforeCreate(){const o=an();if(!o)throw We(ze.UNEXPECTED_ERROR);const a=this.$options;if(a.i18n){const r=a.i18n;if(a.__i18n&&(r.__i18n=a.__i18n),r.__root=t,this===this.$root)this.$i18n=pc(e,r);else{r.__injectWithOption=!0,r.__extender=n.__vueI18nExtend,this.$i18n=Nr(r);const s=this.$i18n;s.__extender&&(s.__disposer=s.__extender(this.$i18n))}}else if(a.__i18n)if(this===this.$root)this.$i18n=pc(e,a);else{this.$i18n=Nr({__i18n:a.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});const r=this.$i18n;r.__extender&&(r.__disposer=r.__extender(this.$i18n))}else this.$i18n=e;a.__i18nGlobal&&tc(t,a,a),this.$t=(...r)=>this.$i18n.t(...r),this.$rt=(...r)=>this.$i18n.rt(...r),this.$tc=(...r)=>this.$i18n.tc(...r),this.$te=(r,s)=>this.$i18n.te(r,s),this.$d=(...r)=>this.$i18n.d(...r),this.$n=(...r)=>this.$i18n.n(...r),this.$tm=r=>this.$i18n.tm(r),n.__setInstance(o,this.$i18n)},mounted(){},unmounted(){const o=an();if(!o)throw We(ze.UNEXPECTED_ERROR);const a=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,a.__disposer&&(a.__disposer(),delete a.__disposer,delete a.__extender),n.__deleteInstance(o),delete this.$i18n}}}function pc(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[Zl](t.pluralizationRules||e.pluralizationRules);const n=_a(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(o=>e.mergeLocaleMessage(o,n[o])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(o=>e.mergeDateTimeFormat(o,t.datetimeFormats[o])),t.numberFormats&&Object.keys(t.numberFormats).forEach(o=>e.mergeNumberFormat(o,t.numberFormats[o])),e}const Sm=ln("global-vue-i18n");function wm(e={},t){const n=__VUE_I18N_LEGACY_API__&&Se(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,o=Se(e.globalInjection)?e.globalInjection:!0,a=__VUE_I18N_LEGACY_API__&&n?!!e.allowComposition:!0,r=new Map,[s,i]=$m(e,n),l=ln("");function c(d){return r.get(d)||null}function u(d,b){r.set(d,b)}function f(d){r.delete(d)}{const d={get mode(){return __VUE_I18N_LEGACY_API__&&n?"legacy":"composition"},get allowComposition(){return a},async install(b,..._){if(b.__VUE_I18N_SYMBOL__=l,b.provide(b.__VUE_I18N_SYMBOL__,d),_e(_[0])){const k=_[0];d.__composerExtend=k.__composerExtend,d.__vueI18nExtend=k.__vueI18nExtend}let v=null;!n&&o&&(v=Nm(b,d.global)),__VUE_I18N_FULL_INSTALL__&&ym(b,d,..._),__VUE_I18N_LEGACY_API__&&n&&b.mixin(vm(i,i.__composer,d));const E=b.unmount;b.unmount=()=>{v&&v(),d.dispose(),E()}},get global(){return i},dispose(){s.stop()},__instances:r,__getInstance:c,__setInstance:u,__deleteInstance:f};return d}}function vo(e={}){const t=an();if(t==null)throw We(ze.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw We(ze.NOT_INSTALLED);const n=Am(t),o=Lm(n),a=ec(t),r=km(e,a);if(__VUE_I18N_LEGACY_API__&&n.mode==="legacy"&&!e.__useComponent){if(!n.allowComposition)throw We(ze.NOT_AVAILABLE_IN_LEGACY_MODE);return xm(t,r,o,e)}if(r==="global")return tc(o,e,a),o;if(r==="parent"){let l=Em(n,t,e.__useComponent);return l==null&&(l=o),l}const s=n;let i=s.__getInstance(t);if(i==null){const l=Je({},e);"__i18n"in a&&(l.__i18n=a.__i18n),o&&(l.__root=o),i=Pr(l),s.__composerExtend&&(i[xr]=s.__composerExtend(i)),Cm(s,t,i),s.__setInstance(t,i)}return i}function $m(e,t,n){const o=Pa();{const a=__VUE_I18N_LEGACY_API__&&t?o.run(()=>Nr(e)):o.run(()=>Pr(e));if(a==null)throw We(ze.UNEXPECTED_ERROR);return[o,a]}}function Am(e){{const t=ve(e.isCE?Sm:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw We(e.isCE?ze.NOT_INSTALLED_WITH_PROVIDE:ze.UNEXPECTED_ERROR);return t}}function km(e,t){return da(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function Lm(e){return e.mode==="composition"?e.global:e.global.__composer}function Em(e,t,n=!1){let o=null;const a=t.root;let r=Tm(t,n);for(;r!=null;){const s=e;if(e.mode==="composition")o=s.__getInstance(r);else if(__VUE_I18N_LEGACY_API__){const i=s.__getInstance(r);i!=null&&(o=i.__composer,n&&o&&!o[Ql]&&(o=null))}if(o!=null||a===r)break;r=r.parent}return o}function Tm(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Cm(e,t,n){it(()=>{},t),Xo(()=>{const o=n;e.__deleteInstance(t);const a=o[xr];a&&(a(),delete o[xr])},t)}function xm(e,t,n,o={}){const a=t==="local",r=Uo(null);if(a&&e.proxy&&!(e.proxy.$options.i18n||e.proxy.$options.__i18n))throw We(ze.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const s=Se(o.inheritLocale)?o.inheritLocale:!oe(o.locale),i=pe(!a||s?n.locale.value:oe(o.locale)?o.locale:Un),l=pe(!a||s?n.fallbackLocale.value:oe(o.fallbackLocale)||Fe(o.fallbackLocale)||_e(o.fallbackLocale)||o.fallbackLocale===!1?o.fallbackLocale:i.value),c=pe(_a(i.value,o)),u=pe(_e(o.datetimeFormats)?o.datetimeFormats:{[i.value]:{}}),f=pe(_e(o.numberFormats)?o.numberFormats:{[i.value]:{}}),d=a?n.missingWarn:Se(o.missingWarn)||cn(o.missingWarn)?o.missingWarn:!0,b=a?n.fallbackWarn:Se(o.fallbackWarn)||cn(o.fallbackWarn)?o.fallbackWarn:!0,_=a?n.fallbackRoot:Se(o.fallbackRoot)?o.fallbackRoot:!0,v=!!o.fallbackFormat,E=Ie(o.missing)?o.missing:null,k=Ie(o.postTranslation)?o.postTranslation:null,A=a?n.warnHtmlMessage:Se(o.warnHtmlMessage)?o.warnHtmlMessage:!0,h=!!o.escapeParameter,m=a?n.modifiers:_e(o.modifiers)?o.modifiers:{},w=o.pluralRules||a&&n.pluralRules;function S(){return[i.value,l.value,c.value,u.value,f.value]}const T=se({get:()=>r.value?r.value.locale.value:i.value,set:$=>{r.value&&(r.value.locale.value=$),i.value=$}}),C=se({get:()=>r.value?r.value.fallbackLocale.value:l.value,set:$=>{r.value&&(r.value.fallbackLocale.value=$),l.value=$}}),x=se(()=>r.value?r.value.messages.value:c.value),F=se(()=>u.value),W=se(()=>f.value);function z(){return r.value?r.value.getPostTranslationHandler():k}function P($){r.value&&r.value.setPostTranslationHandler($)}function H(){return r.value?r.value.getMissingHandler():E}function ne($){r.value&&r.value.setMissingHandler($)}function U($){return S(),$()}function Y(...$){return r.value?U(()=>Reflect.apply(r.value.t,null,[...$])):U(()=>"")}function J(...$){return r.value?Reflect.apply(r.value.rt,null,[...$]):""}function te(...$){return r.value?U(()=>Reflect.apply(r.value.d,null,[...$])):U(()=>"")}function G(...$){return r.value?U(()=>Reflect.apply(r.value.n,null,[...$])):U(()=>"")}function q($){return r.value?r.value.tm($):{}}function ee($,I){return r.value?r.value.te($,I):!1}function ce($){return r.value?r.value.getLocaleMessage($):{}}function we($,I){r.value&&(r.value.setLocaleMessage($,I),c.value[$]=I)}function Pe($,I){r.value&&r.value.mergeLocaleMessage($,I)}function Ge($){return r.value?r.value.getDateTimeFormat($):{}}function Ue($,I){r.value&&(r.value.setDateTimeFormat($,I),u.value[$]=I)}function je($,I){r.value&&r.value.mergeDateTimeFormat($,I)}function K($){return r.value?r.value.getNumberFormat($):{}}function le($,I){r.value&&(r.value.setNumberFormat($,I),f.value[$]=I)}function he($,I){r.value&&r.value.mergeNumberFormat($,I)}const y={get id(){return r.value?r.value.id:-1},locale:T,fallbackLocale:C,messages:x,datetimeFormats:F,numberFormats:W,get inheritLocale(){return r.value?r.value.inheritLocale:s},set inheritLocale($){r.value&&(r.value.inheritLocale=$)},get availableLocales(){return r.value?r.value.availableLocales:Object.keys(c.value)},get modifiers(){return r.value?r.value.modifiers:m},get pluralRules(){return r.value?r.value.pluralRules:w},get isGlobal(){return r.value?r.value.isGlobal:!1},get missingWarn(){return r.value?r.value.missingWarn:d},set missingWarn($){r.value&&(r.value.missingWarn=$)},get fallbackWarn(){return r.value?r.value.fallbackWarn:b},set fallbackWarn($){r.value&&(r.value.missingWarn=$)},get fallbackRoot(){return r.value?r.value.fallbackRoot:_},set fallbackRoot($){r.value&&(r.value.fallbackRoot=$)},get fallbackFormat(){return r.value?r.value.fallbackFormat:v},set fallbackFormat($){r.value&&(r.value.fallbackFormat=$)},get warnHtmlMessage(){return r.value?r.value.warnHtmlMessage:A},set warnHtmlMessage($){r.value&&(r.value.warnHtmlMessage=$)},get escapeParameter(){return r.value?r.value.escapeParameter:h},set escapeParameter($){r.value&&(r.value.escapeParameter=$)},t:Y,getPostTranslationHandler:z,setPostTranslationHandler:P,getMissingHandler:H,setMissingHandler:ne,rt:J,d:te,n:G,tm:q,te:ee,getLocaleMessage:ce,setLocaleMessage:we,mergeLocaleMessage:Pe,getDateTimeFormat:Ge,setDateTimeFormat:Ue,mergeDateTimeFormat:je,getNumberFormat:K,setNumberFormat:le,mergeNumberFormat:he};function L($){$.locale.value=i.value,$.fallbackLocale.value=l.value,Object.keys(c.value).forEach(I=>{$.mergeLocaleMessage(I,c.value[I])}),Object.keys(u.value).forEach(I=>{$.mergeDateTimeFormat(I,u.value[I])}),Object.keys(f.value).forEach(I=>{$.mergeNumberFormat(I,f.value[I])}),$.escapeParameter=h,$.fallbackFormat=v,$.fallbackRoot=_,$.fallbackWarn=b,$.missingWarn=d,$.warnHtmlMessage=A}return Ys(()=>{if(e.proxy==null||e.proxy.$i18n==null)throw We(ze.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const $=r.value=e.proxy.$i18n.__composer;t==="global"?(i.value=$.locale.value,l.value=$.fallbackLocale.value,c.value=$.messages.value,u.value=$.datetimeFormats.value,f.value=$.numberFormats.value):a&&L($)}),y}const Pm=["locale","fallbackLocale","availableLocales"],hc=["t","rt","d","n","tm","te"];function Nm(e,t){const n=Object.create(null);return Pm.forEach(a=>{const r=Object.getOwnPropertyDescriptor(t,a);if(!r)throw We(ze.UNEXPECTED_ERROR);const s=Oe(r.value)?{get(){return r.value.value},set(i){r.value.value=i}}:{get(){return r.get&&r.get()}};Object.defineProperty(n,a,s)}),e.config.globalProperties.$i18n=n,hc.forEach(a=>{const r=Object.getOwnPropertyDescriptor(t,a);if(!r||!r.value)throw We(ze.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${a}`,r)}),()=>{delete e.config.globalProperties.$i18n,hc.forEach(a=>{delete e.config.globalProperties[`$${a}`]})}}if(um(),__INTLIFY_JIT_COMPILATION__?Pl(am):Pl(om),Yh(Th),qh(Ll),__INTLIFY_PROD_DEVTOOLS__){const e=Jt();e.__INTLIFY__=!0,Oh(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const Mm=Object.assign({"./locales/ar/aria.json":Bf,"./locales/ar/buttons.json":Uf,"./locales/ar/detail.json":jf,"./locales/ar/legend.json":Kf,"./locales/ar/messages.json":Gf,"./locales/ar/options.json":Hf,"./locales/ar/prayerLaps.json":zf,"./locales/ar/search.json":Vf,"./locales/ar/tabs.json":Wf,"./locales/de/aria.json":Yf,"./locales/de/buttons.json":qf,"./locales/de/detail.json":Jf,"./locales/de/legend.json":Xf,"./locales/de/messages.json":Zf,"./locales/de/options.json":Qf,"./locales/de/prayerLaps.json":eg,"./locales/de/search.json":tg,"./locales/de/tabs.json":ng,"./locales/en/aria.json":og,"./locales/en/buttons.json":ag,"./locales/en/detail.json":rg,"./locales/en/legend.json":sg,"./locales/en/messages.json":ig,"./locales/en/options.json":lg,"./locales/en/popup.json":cg,"./locales/en/prayerLaps.json":ug,"./locales/en/search.json":dg,"./locales/en/tabs.json":fg,"./locales/es/aria.json":gg,"./locales/es/buttons.json":pg,"./locales/es/detail.json":hg,"./locales/es/legend.json":mg,"./locales/es/messages.json":bg,"./locales/es/options.json":_g,"./locales/es/prayerLaps.json":yg,"./locales/es/search.json":vg,"./locales/es/tabs.json":Sg,"./locales/fr/aria.json":wg,"./locales/fr/buttons.json":$g,"./locales/fr/detail.json":Ag,"./locales/fr/legend.json":kg,"./locales/fr/messages.json":Lg,"./locales/fr/options.json":Eg,"./locales/fr/popup.json":Tg,"./locales/fr/prayerLaps.json":Cg,"./locales/fr/search.json":xg,"./locales/fr/tabs.json":Pg,"./locales/hi/aria.json":Ng,"./locales/hi/buttons.json":Mg,"./locales/hi/detail.json":Ig,"./locales/hi/legend.json":Rg,"./locales/hi/messages.json":Fg,"./locales/hi/options.json":Og,"./locales/hi/prayerLaps.json":Dg,"./locales/hi/search.json":Bg,"./locales/it/aria.json":Ug,"./locales/it/buttons.json":jg,"./locales/it/detail.json":Kg,"./locales/it/legend.json":Gg,"./locales/it/messages.json":Hg,"./locales/it/options.json":zg,"./locales/it/prayerLaps.json":Vg,"./locales/it/search.json":Wg,"./locales/pt/aria.json":Yg,"./locales/pt/buttons.json":qg,"./locales/pt/detail.json":Jg,"./locales/pt/legend.json":Xg,"./locales/pt/messages.json":Zg,"./locales/pt/options.json":Qg,"./locales/pt/prayerLaps.json":ep,"./locales/pt/search.json":tp,"./locales/pt/tabs.json":np,"./locales/ro/aria.json":op,"./locales/ro/buttons.json":ap,"./locales/ro/detail.json":rp,"./locales/ro/legend.json":sp,"./locales/ro/messages.json":ip,"./locales/ro/options.json":lp,"./locales/ro/prayerLaps.json":cp,"./locales/ro/search.json":up,"./locales/ru/aria.json":dp,"./locales/ru/buttons.json":fp,"./locales/ru/detail.json":gp,"./locales/ru/legend.json":pp,"./locales/ru/messages.json":hp,"./locales/ru/options.json":mp,"./locales/ru/prayerLaps.json":bp,"./locales/ru/search.json":_p,"./locales/ru/tabs.json":yp,"./locales/zh/aria.json":vp,"./locales/zh/buttons.json":Sp,"./locales/zh/detail.json":wp,"./locales/zh/legend.json":$p,"./locales/zh/messages.json":Ap,"./locales/zh/options.json":kp,"./locales/zh/prayerLaps.json":Lp,"./locales/zh/search.json":Ep}),So={};for(const[e,t]of Object.entries(Mm)){const n=e.match(/\.\/locales\/([^/]+)\/([^/]+)\.json$/);if(!n)continue;const[,o,a]=n;So[o]??(So[o]={}),So[o][a]=t}const mc=["ar","de","en","es","fr","hi","it","pt","ro","ru","zh"];function Im(){var n;const t=(((n=document==null?void 0:document.documentElement)==null?void 0:n.lang)||"").split("-")[0].toLowerCase();return mc.includes(t)?t:"en"}function Rm(){return wm({legacy:!1,globalInjection:!0,locale:Im(),fallbackLocale:"en",messages:So,missingWarn:!1,fallbackWarn:!1})}let Fm=0;const Om=pr("ui",{state:()=>({_storeInstanceId:++Fm,theme:"light",colorScheme:"default",reducedMotion:!1,highContrast:!1,activeTab:"doxa-regions",sidebarCollapsed:!1,mobileMenuOpen:!1,legendState:"collapsed",_customLegendHeight:null,searchMode:!1,hamburgerMenuOpen:!1,legendMode:"prayer",prayerFilter:null,engagementFilter:null,adoptionFilter:null,religionFilter:null,selectedPeopleGroup:null,breakpoint:"desktop",windowSize:{width:window.innerWidth,height:window.innerHeight},toasts:[],nextToastId:1,toastDuration:5e3,openModals:[],modalData:new Map,isGlobalLoading:!1,globalLoadingMessage:"Loading...",loadingStates:new Map,interactionHistory:[],maxHistoryLength:20,keyboardShortcutsEnabled:!0,screenReaderAnnouncement:"",focusTrapActive:!1,debugMode:!1,showPerformanceOverlay:!1}),getters:{isDarkTheme:e=>!1,isMobile:e=>e.breakpoint==="mobile",isTablet:e=>e.breakpoint==="tablet",isDesktop:e=>e.breakpoint==="desktop"||e.breakpoint==="wide",legendHeight:e=>e._customLegendHeight?e._customLegendHeight:e.legendState==="collapsed"?"48px":e.legendState==="open"?"30%":e.legendState==="fullyOpen"?"calc(100% - 80px)":"48px",caretRotation:e=>e.legendState==="collapsed"?0:90,showPullTab:e=>e.legendState==="open"||e.legendState==="fullyOpen",getToastsByType:e=>t=>e.toasts.filter(n=>n.type===t),hasOpenModal:e=>e.openModals.length>0,topModal:e=>e.openModals.length===0?null:e.openModals[e.openModals.length-1],isModalOpen:e=>t=>e.openModals.includes(t),isAnyLoading:e=>e.isGlobalLoading||e.loadingStates.size>0,isLoading:e=>t=>e.loadingStates.get(t)||!1},actions:{setTheme(e){if(!["light","dark","auto"].includes(e))return;e="light",this.theme=e;const n=this.isDarkTheme;document.documentElement.setAttribute("data-theme",n?"dark":"light"),localStorage.setItem("theme",e)},toggleTheme(){const e=this.theme==="light"?"dark":"light";this.setTheme(e)},setColorScheme(e){this.colorScheme=e,document.documentElement.setAttribute("data-color-scheme",e)},toggleReducedMotion(){this.reducedMotion=!this.reducedMotion,document.documentElement.setAttribute("data-reduced-motion",this.reducedMotion)},toggleHighContrast(){this.highContrast=!this.highContrast,document.documentElement.setAttribute("data-high-contrast",this.highContrast)},setActiveTab(e){this.activeTab=e,this.addToHistory({type:"tab-change",tabId:e,timestamp:Date.now()})},toggleSidebar(){this.sidebarCollapsed=!this.sidebarCollapsed},openMobileMenu(){this.mobileMenuOpen=!0},closeMobileMenu(){this.mobileMenuOpen=!1},setLegendMode(e){["prayer","detail"].includes(e)&&(this.legendMode=e)},setPrayerFilter(e){[null,"noPrayer","hasPrayer","fullPrayer"].includes(e)&&(this.prayerFilter=e)},setEngagementFilter(e){[null,"notEngaged","hasEngagement"].includes(e)&&(this.engagementFilter=e)},setAdoptionFilter(e){[null,"notAdopted","hasAdoption"].includes(e)&&(this.adoptionFilter=e)},setReligionFilter(e){[null,"C","M","H","B","E","J","S","N","O","U"].includes(e)&&(this.religionFilter=e)},selectPeopleGroup(e){this.selectedPeopleGroup=e,e?(this._legendStateBeforeDetail=this.legendState,this.legendState="open",this._customLegendHeight=null,this.setLegendMode("detail")):(this.legendState=this._legendStateBeforeDetail||"open",this._customLegendHeight=null,this.setLegendMode("prayer"))},setLegendState(e){["collapsed","open","fullyOpen"].includes(e)&&(this.legendState=e)},toggleSearchMode(){this.searchMode=!this.searchMode},setSearchMode(e){this.searchMode=e},toggleHamburgerMenu(){this.hamburgerMenuOpen=!this.hamburgerMenuOpen},updateBreakpoint(e){let t;e<768?t="mobile":e<1024?t="tablet":e<1920?t="desktop":t="wide",t!==this.breakpoint&&(this.breakpoint=t)},updateWindowSize(e,t){this.windowSize.width=e,this.windowSize.height=t,this.updateBreakpoint(e)},showToast(e){const{message:t,type:n="info",duration:o=this.toastDuration,action:a=null,persistent:r=!1}=e,s={id:this.nextToastId++,message:t,type:n,duration:o,action:a,persistent:r,createdAt:Date.now()};return this.toasts.push(s),!r&&o>0&&setTimeout(()=>{this.removeToast(s.id)},o),s.id},showSuccess(e,t={}){return this.showToast({message:e,type:"success",...t})},showError(e,t={}){return this.showToast({message:e,type:"error",duration:7e3,...t})},showWarning(e,t={}){return this.showToast({message:e,type:"warning",...t})},showInfo(e,t={}){return this.showToast({message:e,type:"info",...t})},removeToast(e){const t=this.toasts.findIndex(n=>n.id===e);t!==-1&&this.toasts.splice(t,1)},clearAllToasts(){this.toasts=[]},openModal(e,t={}){this.openModals.includes(e)||(this.openModals.push(e),this.modalData.set(e,t),this.focusTrapActive=!0)},closeModal(e=null){if(e){const t=this.openModals.indexOf(e);t!==-1&&(this.openModals.splice(t,1),this.modalData.delete(e))}else{const t=this.openModals.pop();t&&this.modalData.delete(t)}this.openModals.length===0&&(this.focusTrapActive=!1)},closeAllModals(){this.openModals=[],this.modalData.clear(),this.focusTrapActive=!1},getModalData(e){return this.modalData.get(e)},showGlobalLoading(e="Loading..."){this.isGlobalLoading=!0,this.globalLoadingMessage=e},hideGlobalLoading(){this.isGlobalLoading=!1},setLoading(e,t=!0){t?this.loadingStates.set(e,!0):this.loadingStates.delete(e)},addToHistory(e){this.interactionHistory.push(e),this.interactionHistory.length>this.maxHistoryLength&&this.interactionHistory.shift()},clearHistory(){this.interactionHistory=[]},announce(e,t="polite"){this.screenReaderAnnouncement=e,setTimeout(()=>{this.screenReaderAnnouncement===e&&(this.screenReaderAnnouncement="")},1e3)},toggleKeyboardShortcuts(){this.keyboardShortcutsEnabled=!this.keyboardShortcutsEnabled},toggleDebugMode(){this.debugMode=!this.debugMode},togglePerformanceOverlay(){this.showPerformanceOverlay=!this.showPerformanceOverlay},toggleLegend(){this.legendState==="fullyOpen"?this.legendState="open":this.legendState==="open"?this.legendState="collapsed":this.legendState="open",this._customLegendHeight=null},openLegend(){this.legendState="open",this._customLegendHeight=null},fullyOpenLegend(){this.legendState="fullyOpen",this._customLegendHeight=null},collapseLegend(){this.legendState="collapsed",this._customLegendHeight=null},setLegendHeight(e){this._customLegendHeight=e},handleLegendItemClick(){this.legendState==="fullyOpen"&&(this.legendState="open")},enableSearchMode(){this.searchMode=!0},disableSearchMode(){this.searchMode=!1},toggleHamburgerMenu(){this.hamburgerMenuOpen=!this.hamburgerMenuOpen},openHamburgerMenu(){this.hamburgerMenuOpen=!0},closeHamburgerMenu(){this.hamburgerMenuOpen=!1},init(){const e=localStorage.getItem("theme");e&&this.setTheme(e),new ResizeObserver(n=>{for(const o of n)this.updateWindowSize(o.contentRect.width,o.contentRect.height)}).observe(document.documentElement),window.matchMedia&&(window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",n=>{this.theme==="auto"&&document.documentElement.setAttribute("data-theme",n.matches?"dark":"light")}),window.matchMedia("(prefers-reduced-motion: reduce)").addEventListener("change",n=>{this.reducedMotion=n.matches,document.documentElement.setAttribute("data-reduced-motion",n.matches)}))}}}),Dm=pr("map",{state:()=>({maps:{},activeMapId:null,selectedRegion:null,selectedFamily:null,selectedAffinityBlock:null,selectedLanguage:null,selectedDialect:null,activeLegendTab:"family",selectedResource:null,selectedPeopleGroup:null,selectedPinIds:[],globalFilters:{},searchQuery:"",autoFly:{isActive:!1,speed:1,interval:5e3,currentIndex:0,items:[],timerId:null},guidedTour:{isActive:!1,currentStep:0,steps:[]},showClusters:!1,clusterMode:"region",clusterFilterProperty:null,clusterFilterValue:null,flySpeed:"normal",fullscreenMapId:null,preferences:{theme:"light",defaultMapStyle:"streets",enableAnimations:!0,autoSavePreferences:!0}}),getters:{getMapById:e=>t=>e.maps[t],activeMap:e=>e.activeMapId?e.maps[e.activeMapId]:null,hasMap:e=>t=>t in e.maps,allMapIds:e=>Object.keys(e.maps),hasSelection:e=>!!(e.selectedRegion||e.selectedFamily||e.selectedAffinityBlock||e.selectedPeopleGroup),isAutoFlying:e=>e.autoFly.isActive,isGuidedTourActive:e=>e.guidedTour.isActive,isMapFullscreen:e=>t=>e.fullscreenMapId===t},actions:{registerMap(e,t,n={}){let o=1.5;n.zoom!==void 0?o=n.zoom:t&&typeof t.getZoom=="function"&&(o=t.getZoom());let a=[0,0];if(n.center)a=n.center;else if(t&&typeof t.getCenter=="function"){const r=t.getCenter();r&&(a=[r.lng,r.lat])}this.maps[e]={instance:t,config:n,isReady:!1,zoom:o,center:a,registeredAt:Date.now()},this.activeMapId||(this.activeMapId=e)},setMapReady(e){const t=this.maps[e];t&&(t.isReady=!0)},updateMapState(e,t){const n=this.maps[e];n&&Object.assign(n,t)},unregisterMap(e){if(delete this.maps[e],this.activeMapId===e){const t=this.allMapIds;this.activeMapId=t.length>0?t[0]:null}},setActiveMap(e){e in this.maps&&(this.activeMapId=e)},selectRegion(e){this.selectedFamily=null,this.selectedAffinityBlock=null,this.selectedPeopleGroup=null,this.selectedRegion=e},selectFamily(e){this.selectedRegion=null,this.selectedAffinityBlock=null,this.selectedPeopleGroup=null,this.selectedLanguage=null,this.selectedDialect=null,this.selectedFamily=e},setActiveLegendTab(e){this.activeLegendTab=e},selectLanguage(e){this.selectedRegion=null,this.selectedAffinityBlock=null,this.selectedPeopleGroup=null,this.selectedFamily=null,this.selectedDialect=null,this.selectedLanguage=e},selectDialect(e){this.selectedRegion=null,this.selectedFamily=null,this.selectedLanguage=null,this.selectedAffinityBlock=null,this.selectedPeopleGroup=null,this.selectedDialect=e},selectAffinityBlock(e){this.selectedRegion=null,this.selectedFamily=null,this.selectedPeopleGroup=null,this.selectedAffinityBlock=e},selectPeopleGroup(e){this.selectedPeopleGroup=e},selectResource(e){this.selectedRegion=null,this.selectedFamily=null,this.selectedAffinityBlock=null,this.selectedPeopleGroup=null,this.selectedResource===e?this.selectedResource=null:this.selectedResource=e},clearSelections(){this.selectedRegion=null,this.selectedFamily=null,this.selectedLanguage=null,this.selectedDialect=null,this.selectedAffinityBlock=null,this.selectedResource=null,this.selectedPeopleGroup=null,this.selectedPinIds=[],this.showClusters=!1,this.clusterMode="region"},setSelectedPinIds(e){this.selectedPinIds=e||[]},setFilter(e,t){this.globalFilters[e]=t},removeFilter(e){delete this.globalFilters[e]},clearFilters(){this.globalFilters={},this.searchQuery=""},setSearchQuery(e){this.searchQuery=e},startAutoFly(e,t=1){this.stopAutoFly(),this.autoFly.isActive=!0,this.autoFly.speed=t,this.autoFly.items=e,this.autoFly.currentIndex=0},stopAutoFly(){this.autoFly.timerId&&(clearInterval(this.autoFly.timerId),this.autoFly.timerId=null),this.autoFly.isActive=!1,this.autoFly.currentIndex=0},setAutoFlySpeed(e){this.autoFly.speed=Math.max(.5,Math.min(2,e))},nextAutoFlyItem(){if(!this.autoFly.isActive||this.autoFly.items.length===0)return;this.autoFly.currentIndex=(this.autoFly.currentIndex+1)%this.autoFly.items.length;const e=this.autoFly.items[this.autoFly.currentIndex];e.type==="region"?this.selectRegion(e):e.type==="family"&&this.selectFamily(e)},toggleClusters(e){typeof e=="boolean"?this.showClusters=e:this.showClusters=!this.showClusters},setClusterMode(e){["region","language-family","affinity-block","mst","resource"].includes(e)&&(this.clusterMode=e)},setClusterFilter(e,t){this.clusterFilterProperty=e||null,this.clusterFilterValue=t||null},clearClusterFilter(){this.clusterFilterProperty=null,this.clusterFilterValue=null},setFlySpeed(e){["slow","normal","fast"].includes(e)&&(this.flySpeed=e)},setSelectedFamily(e){this.selectFamily(e)},clearSelectedFamily(){this.selectFamily(null)},setSelectedRegion(e){this.selectRegion(e)},clearSelectedRegion(){this.selectRegion(null)},clearSelectedResource(){this.selectResource(null)},clearSelectedLanguage(){this.selectLanguage(null)},clearSelectedDialect(){this.selectDialect(null)},toggleFullscreen(e){this.fullscreenMapId===e?this.fullscreenMapId=null:this.fullscreenMapId=e},loadPreferences(){try{const e=localStorage.getItem("mapUserPreferences");if(e){const t=JSON.parse(e);this.preferences={...this.preferences,...t}}}catch(e){console.error("[mapStore] Failed to load preferences:",e)}},savePreferences(){try{localStorage.setItem("mapUserPreferences",JSON.stringify(this.preferences))}catch(e){console.error("[mapStore] Failed to save preferences:",e)}},setPreference(e,t){this.preferences[e]=t,this.preferences.autoSavePreferences&&this.savePreferences()}}}),Bm=pr("data",{state:()=>({sources:{},loadingStates:{}}),actions:{async load(e,t){if(!this.sources[e]){this.loadingStates[e]={isLoading:!0,error:null};try{const n=await t();this.sources[e]=Xn({features:n,timestamp:Date.now()}),this.loadingStates[e]={isLoading:!1,error:null}}catch(n){console.error(`[dataStore] Failed to load source "${e}":`,n),this.loadingStates[e]={isLoading:!1,error:n}}}},clearSource(e){delete this.sources[e],delete this.loadingStates[e]},cacheSourceData(e,t){this.sources[e]=Xn({features:t.normalizedData||[],timestamp:t.timestamp||Date.now()})},hasSourceData(e){return!!this.sources[e]},getSourceData(e){return this.sources[e]?{normalizedData:this.sources[e].features}:null}},getters:{getData:e=>t=>{var n;return((n=e.sources[t])==null?void 0:n.features)??null},isLoading:e=>t=>{var n;return((n=e.loadingStates[t])==null?void 0:n.isLoading)??!1},getError:e=>t=>{var n;return((n=e.loadingStates[t])==null?void 0:n.error)??null}}}),gn={_meta:{_comment:"Single source of truth for data-source connections across all doxa-maps bundles.",_comment_token:"Mapbox access token is fetched at runtime from window.MAP_TOKEN_URL (same modular pattern as window.MAP_APP_API_URL). Not hardcoded to any host — set mapboxTokenUrl below or override window.MAP_TOKEN_URL on the host page.",mapboxTokenUrl:"window.MAP_TOKEN_URL"},activeSource:"pray-tools",sources:{"pray-tools":{id:"pray-tools",name:"Prayer.Tools API",type:"rest-api",description:"pray.doxa.life live API — people-group prayer, engagement, and adoption data. Base URL read from window.MAP_APP_API_URL or VITE_API_BASE_URL at runtime.",endpoints:{bulk:"/api/people-groups/list",detail:"/api/people-groups/detail/{slug}",statistics:"/api/people-groups/statistics"},queryParams:{lang:"en"},defaultFields:["slug","name","latitude","longitude","wagf_region","wagf_block","wagf_member","rop1","imb_reg_of_people_2","imb_reg_of_people_25","imb_reg_of_people_3","country_code","religion","population","has_photo","image_url","people_praying","people_committed","adopted_by_churches","engagement_status","primary_language","imb_language_family","imb_language_class","imb_language_speakers"],pollFields:["slug","people_praying"],pollInterval:3e5,fallbackSourceId:null,fieldMappings:{uniqueId:"slug",slug:"slug",name:"name",latitude:"latitude",longitude:"longitude",wagfRegion:"wagf_region",doxaRegion:"wagf_region",wagfBlock:"wagf_block",wagfMember:"wagf_member",affinityBlock:"rop1",countryIso:"country_code",religion:"religion",religionCode:"religion",population:"population",hasPhoto:"has_photo",imageUrl:"image_url",photoUrl:"image_url",peoplePraying:"people_praying",peopleCommitted:"people_committed",engagementStatus:"engagement_status",adoptionStatus:"adopted_by_churches",language:"primary_language",cluster:"imb_reg_of_people_2",peopleGroup:"imb_reg_of_people_25",peopleGroupCountry:"imb_reg_of_people_3",languageFamily:"imb_language_family",languageClass:"imb_language_class",languageSpeakers:"imb_language_speakers"},imageConfig:{useField:"imageUrl",fallbackField:null,fallbackUrlTemplate:null,placeholderUrl:"https://www.peoplegroups.org/images/pgphotosearch/NoImageAvailable_search.jpg",useSvgPlaceholder:!0}},"doxa-csv":{id:"doxa-csv",name:"DOXA People Groups CSV",type:"csv",path:"assets/data/Joshua-project-ids-Doxa-1439.csv",description:"People groups dataset from DOXA / Joshua Project",fieldMappings:{uniqueId:"ROP3",peopleGroupId:"ROP3",countryCode:"ROG",peopleId3:"PeopleID3",name:"Name",displayName:"NmDisp",alternateName:"NmAlt",description:"PeopleDesc",locationDescription:"LocationDe",country:"Ctry",countryIso:"ISOalpha3",region:"Regn",subRegion:"RegnSub",wagfRegion:"WAGF Region",doxaRegion:"WAGF Region",wagfBlock:"WAGF BLOCK",affinityBloc:"Affbloc",affinityBlock:"ROP1",affinityCode:"AffCd",affinityName:"Aff",peopleCluster:"PplClstr",ethneName:"Ethne",latitude:"Latitude",longitude:"Longitude",population:"Pop",populationClass:"PopCls",status:"Status",engagementStatus:"EngStat",evangelicalLevel:"EvngLvl",gsec:"GSEC",gsecBrief:"GSECbrf",gsecLong:"GSEClng",spiScore:"SPI",spiDescription:"SPIdesc",language:"Lang",languageCode:"ROL",languageFamily:"LangFamily",religion:"Rlgn",religionCode:"ROR",religionDescription:"RORdesc",religionBase:"RlgnBs",religionDiv:"RlgnDiv",bible:"Bible",jesusFilm:"Jesus",radio:"Radio",gospel:"Gospel",audio:"Audio",stories:"Stories",resourcesTotal:"ResTot",bibleLevel:"LvlBible",yearPublished:"YrPub",photoCredit:"PicCrdt",photoUrl:"PicURL",hasPhoto:"Photo",isIndigenous:"Indigenous"},imageConfig:{useField:"photoUrl",fallbackField:"peopleId3",fallbackUrlTemplate:"https://joshuaproject.net/assets/media/profiles/photos/p{peopleId3}.jpg",placeholderUrl:"https://www.peoplegroups.org/images/pgphotosearch/NoImageAvailable_search.jpg"}}},systemFields:{uniqueId:{description:"Unique identifier per row (slug for API, ROP3+ROG for CSV)",required:!0},peopleGroupId:{description:"People group ID — same group can appear in multiple countries",required:!0},name:{description:"People group display name",required:!0},latitude:{description:"Latitude coordinate for map pin",required:!0},longitude:{description:"Longitude coordinate for map pin",required:!0},engagementStatus:{description:"Boolean — true if engaged_status = 'engaged'",required:!1},adoptionStatus:{description:"Boolean — true if adopted_by_churches > 0",required:!1},peoplePraying:{description:"Number of people currently praying for this group — from pray-tools API",required:!1},peopleCommitted:{description:"Raw count of committed workers for this group — source of engagementStatus",required:!1},languageFamily:{description:"Language family name",required:!1},religion:{description:"Primary religion",required:!1},population:{description:"Population count",required:!1},doxaRegion:{description:"WAGF/DOXA region name",required:!1},photoUrl:{description:"URL to people group photo",required:!1},description:{description:"People group description text",required:!1}}},Um=(e,t)=>{const n=e.__vccOpts||e;for(const[o,a]of t)n[o]=a;return n},jm={class:"profile-loader"},Km={key:0,class:"profile-error"},Gm={key:1,class:"profile-error"},Hm=Um({__name:"ProfileLoader",props:{profileConfig:{type:String,default:""}},setup(e){var E;const t=e,n=se(()=>{if(!t.profileConfig)return null;try{return JSON.parse(t.profileConfig)}catch{return console.error("[ProfileLoader] Invalid profile-config JSON:",t.profileConfig),null}}),o=se(()=>{var k;return((k=n.value)==null?void 0:k.profile)||null}),a=se(()=>{var k;return((k=n.value)==null?void 0:k.tk)||""}),r=se(()=>{var k;return((k=n.value)==null?void 0:k.dataSource)||gn.activeSource||"doxa-csv"}),s=se(()=>{var k;return((k=n.value)==null?void 0:k.colorSet)||"default"}),i=se(()=>{var A,h;const k=(((A=n.value)==null?void 0:A.locale)||((h=n.value)==null?void 0:h.lang)||"").split("-")[0].toLowerCase();return mc.includes(k)?k:""}),l=ve("appI18n",null);qu(()=>{i.value&&l&&(l.global.locale.value=i.value)});const c=se(()=>{var k,A;return i.value||((A=(k=l==null?void 0:l.global)==null?void 0:k.locale)==null?void 0:A.value)||"en"}),u=se(()=>{var k;return((k=n.value)==null?void 0:k.instanceId)||"doxa-map-"+Math.random().toString(36).slice(2,9)}),f=ve("profileModules",null);if(!f)throw new Error('[ProfileLoader] No profileModules provided. Bundle entry must `app.provide("profileModules", import.meta.glob("./*.vue"))`');const d=se(()=>{if(!o.value)return null;const k=`./${o.value}.vue`;return f[k]?ed(f[k]):(console.error(`[ProfileLoader] Profile not found: "${o.value}". Available:`,Object.keys(f)),null)});ot("mapboxToken",a),ot("dataSource",r),ot("colorSet",s),ot("profileConfig",n),ot("instanceId",u),ot("lang",c);const b=Om(),_=Dm(),v=Bm();if(typeof localStorage<"u"){const k=localStorage.getItem("theme");k&&((E=b.setTheme)==null||E.call(b,k))}return ot("uiStore",b),ot("mapStore",_),ot("dataStore",v),(k,A)=>(ae(),ie("div",jm,[n.value?d.value?(ae(),io(dd(d.value),{key:2})):(ae(),ie("div",Gm,[R("p",null,[A[1]||(A[1]=ct("⚠️ Profile ",-1)),R("strong",null,'"'+de(o.value)+'"',1),A[2]||(A[2]=ct(" not found.",-1))])])):(ae(),ie("div",Km,[...A[0]||(A[0]=[R("p",null,[ct("⚠️ "),R("strong",null,"doxa-map"),ct(": missing or invalid "),R("code",null,"profile-config"),ct(" prop.")],-1),R("p",null,[ct("Example: "),R("code",null,`profile-config='{"profile":"example-map","tk":"pk.eyJ..."}'`)],-1)])]))]))}},[["__scopeId","data-v-e7b71944"]]),zm=Object.assign({"./research-dashboard.vue":()=>Zc(()=>Promise.resolve().then(()=>gv),void 0)});if(typeof window<"u"&&((qc=window.mapboxgl)!=null&&qc.setRTLTextPlugin))try{window.mapboxgl.setRTLTextPlugin("https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.3.0/mapbox-gl-rtl-text.js",null,!0)}catch{}function Vm(){return wf(Hm,{configureApp(e){e.use(Mf()),e.use(Rm()),e.provide("profileModules",zm)}})}const Wm=Vm();typeof customElements<"u"&&(customElements.get("research-dashboard-map")||customElements.define("research-dashboard-map",Wm));function dt(e,t){const n=t||Ym(e);it(()=>{var i;const o=an();if(!o)return;const a=(i=o.proxy)==null?void 0:i.$el;if(!a)return;const r=a.getRootNode();if(!(r instanceof ShadowRoot)||r.querySelector(`style[data-shadow-styles="${n}"]`))return;const s=document.createElement("style");s.setAttribute("data-shadow-styles",n),s.textContent=e,r.appendChild(s)})}function Ym(e){let t=0;for(let n=0;n{var f;return(f=n.get(c))==null?void 0:f.delete(u)}}function a(c,u){var f;(f=n.get(c))==null||f.forEach(d=>{try{d(u)}catch{}})}function r(c,u){u==null?delete e[c]:e[c]=u,a("filter",e)}function s(){Object.keys(e).forEach(c=>delete e[c]),a("filter",e)}function i(c){t.has(c)?t.delete(c):t.add(c),a("select",t)}function l(){t.clear(),a("select",t)}return{filterSet:e,selectionSet:t,on:o,emit:a,setFilter:r,clearFilters:s,toggleSelect:i,clearSelection:l}}function bc(){return typeof window<"u"&&window.MAP_APP_API_URL||typeof{url:ka&&ka.tagName.toUpperCase()==="SCRIPT"&&ka.src||new URL("research-dashboard.js",document.baseURI).href}<"u"&&"https://pray.doxa.life"||""}function Jm(e={}){const t=pe(!1),n=pe(null),o=Uo(new Map),a=Uo([]),r=pe(null),s=pe(0),i=e.source||gn.activeSource;async function l(){var c,u,f,d;t.value=!0,n.value=null;try{const b=((c=gn==null?void 0:gn.sources)==null?void 0:c[i])||{},_=bc(),v=((u=b.endpoints)==null?void 0:u.bulk)||"/api/people-groups/list",E=(b.defaultFields||[]).join(","),k=((f=b.queryParams)==null?void 0:f.lang)||"en",A=`${_}${v}?${E?`fields=${E}&`:""}lang=${k}&_=${Date.now()}`,h=await fetch(A,{cache:"no-store"});if(!h.ok)throw new Error(`list HTTP ${h.status}`);const m=await h.json(),w=Array.isArray(m)?m:m.posts||m.data||m.results||[],S=new Map;for(const C of w){const x=C&&(C.slug||C.id);x&&S.set(x,C)}o.value=S,a.value=w,s.value=S.size;const T=((d=b.endpoints)==null?void 0:d.statistics)||"/api/people-groups/statistics";try{const C=await fetch(`${_}${T}?_=${Date.now()}`,{cache:"no-store"});C.ok&&(C.headers.get("content-type")||"").includes("json")&&(r.value=await C.json())}catch{}s.value===0&&(n.value="No records loaded from the live API.")}catch(b){n.value=b&&b.message?b.message:String(b)}finally{t.value=!1}}return{loading:t,error:n,rowStore:o,rows:a,stats:r,total:s,load:l,sourceId:i}}function Ir({rowStore:e,rows:t,selectionSet:n,filterSet:o,FACET_ACC:a}){function r(){if(n&&n.size)return[...n].map(b=>e.value.get(b)).filter(Boolean);const d=Object.keys(o);return d.length?(t.value||[]).filter(b=>d.every(_=>{const v=a[_];return v?v(b)===o[_]:!0})):t.value||[]}function s(){return n&&n.size?`selection (${n.size})`:Object.keys(o).length?"filter result":"all"}function i(d){const b={};for(const _ of Object.keys(d)){const v=d[_];b[_]=v&&typeof v=="object"?v.label??v.value??JSON.stringify(v):v}return b}function l(d){let b=d==null?"":String(d);return/^[=+\-@]/.test(b)&&(b="'"+b),/[",\n\r]/.test(b)&&(b='"'+b.replace(/"/g,'""')+'"'),b}function c(){const d=r().map(i),b=[...d.reduce((k,A)=>(Object.keys(A).forEach(h=>k.add(h)),k),new Set)],_=Object.entries(o).map(([k,A])=>`${k}=${A}`).join(" | ")||"none";return[`# Research Dashboard export — scope: ${s()}; filters: ${_}; rows: ${d.length}`,b.map(l).join(","),...d.map(k=>b.map(A=>l(k[A])).join(","))].join(`\r +`)}const u={rows:0,clipboard:!1,downloaded:!1,at:0};function f(){const d=c(),b=r().length;try{typeof window<"u"&&(window.__rdashLastCsv=d)}catch{}let _=!1,v=!1;try{typeof navigator<"u"&&navigator.clipboard&&navigator.clipboard.writeText&&(navigator.clipboard.writeText(d).catch(()=>{}),_=!0)}catch{}try{const E=new Blob([d],{type:"text/csv;charset=utf-8"}),k=URL.createObjectURL(E),A=document.createElement("a");A.href=k,A.download="research-dashboard.csv",A.style.display="none",document.body.appendChild(A),A.click(),v=!0,setTimeout(()=>{try{URL.revokeObjectURL(k),A.remove()}catch{}},200)}catch{}Object.assign(u,{rows:b,clipboard:_,downloaded:v,at:typeof performance<"u"?performance.now():0});try{window.__rdashExportStatus={rows:b,clipboard:_,downloaded:v}}catch{}return{csv:d,rows:b,clipboard:_,downloaded:v}}return{exportCsv:f,buildCsv:c,pickRows:r,scopeLabel:s,lastExport:u}}class _c{constructor(t={}){this.sourcesConfig=null,this.activeSource=null,this.rawData=[],this.normalizedData=[],this.dataByUniqueId=new Map,this.baseUrl=typeof window<"u"&&window.MAP_APP_BASE_URL||"./",this.locale=t.locale||null,this.cache=new Map,this.cacheEnabled=!0,this.cacheTTL=5*60*1e3}async init(){return this.sourcesConfig=gn,this.sourcesConfig}getActiveSourceId(){var t;return((t=this.sourcesConfig)==null?void 0:t.activeSource)||"doxa-csv"}getSourceConfig(t){var n,o;return(o=(n=this.sourcesConfig)==null?void 0:n.sources)==null?void 0:o[t]}async setActiveSource(t){const n=this.getSourceConfig(t);if(!n)throw new Error(`Source not found: ${t}`);if(this.activeSource=n,this.cacheEnabled&&this.cache.has(t)){const o=this.cache.get(t);return this.normalizedData=o.normalizedData,this.dataByUniqueId=o.dataByUniqueId,this.normalizedData}return n.type==="csv"?await this.loadCSVData(n):n.type==="api"?await this.loadAPIData(n):n.type==="rest-api"&&await this.loadRestApiData(n),this.cacheEnabled&&this.cache.set(t,{normalizedData:this.normalizedData,dataByUniqueId:this.dataByUniqueId,timestamp:Date.now()}),this.normalizedData}clearCache(t=null){t?this.cache.delete(t):this.cache.clear()}isCached(t){return this.cache.has(t)}async loadActiveSource(){return this.sourcesConfig||await this.init(),this.setActiveSource(this.getActiveSourceId())}parseCSV(t){const n=[],o=[];let a="",r=!1,s=[],i=!0;for(let l=0;l0){if(s.push(a.trim()),a="",i)o.push(...s),i=!1;else if(s.length>1){const f={};o.forEach((d,b)=>{f[d]=s[b]||""}),n.push(f)}s=[]}}else a+=c}if((a||s.length>0)&&(s.push(a.trim()),!i&&s.length>1)){const l={};o.forEach((c,u)=>{l[c]=s[u]||""}),n.push(l)}return{headers:o,data:n}}async loadCSVData(t){try{const o=await(await fetch(this.baseUrl+t.path)).text(),{headers:a,data:r}=this.parseCSV(o);return this.rawData=r,this.validateFieldMappings(t.fieldMappings,a,t.name),this.normalizeData(t),this.normalizedData}catch(n){throw console.error("Failed to load CSV data:",n),n}}validateFieldMappings(t,n,o){const a=new Set(n.map(s=>s.trim())),r=[];for(const[s,i]of Object.entries(t||{}))if(Array.isArray(i))for(const l of i)a.has(l)||r.push({systemField:s,sourceField:l,isComposite:!0});else i&&!a.has(i)&&r.push({systemField:s,sourceField:i,isComposite:!1});r.length>0&&console.warn(`[DataSourceManager] ${o}: missing CSV columns:`,r)}async loadAPIData(t){try{const o=await(await fetch(t.url||t.endpoint)).json();return this.rawData=Array.isArray(o)?o:o.posts||o.data||o.peopleGroups||o.results||[],this.normalizeData(t),this.normalizedData}catch(n){throw console.error("Failed to load API data:",n),n}}async loadRestApiData(t){var l,c;const n=bc(),o=((l=t.endpoints)==null?void 0:l.bulk)||"/api/people-groups/list",a=((c=t.defaultFields)==null?void 0:c.join(","))||"",r=[];a&&r.push(`fields=${a}`);const s={...t.queryParams||{}};this.locale&&(s.lang=this.locale);for(const[u,f]of Object.entries(s))r.push(`${u}=${encodeURIComponent(f)}`);const i=`${n}${o}?${r.join("&")}`;try{const u=await fetch(i);if(!u.ok)throw new Error(`HTTP ${u.status}: ${u.statusText}`);const f=u.headers.get("content-type")||"";if(!f.includes("application/json"))throw new Error(`API returned "${f}" instead of JSON. Server at ${n} may be down or misconfigured.`);const d=await u.json();return this.rawData=Array.isArray(d)?d:d.posts||d.data||d.results||[],this.normalizeData(t),this.normalizedData}catch(u){throw console.error(`[rest-api] Failed to load from ${t.id}:`,u),u}}normalizeData(t){const n=t.fieldMappings||{};this.normalizedData=[],this.dataByUniqueId=new Map;for(const o of this.rawData){const a={};for(const[l,c]of Object.entries(n))if(Array.isArray(c)){const u=c.map(f=>this.getFieldValue(o,f));a[l]=u.join("_")}else a[l]=this.getFieldValue(o,c);if(a.latitude=parseFloat(a.latitude)||0,a.longitude=parseFloat(a.longitude)||0,a.latitude===0&&a.longitude===0)continue;a.populationNum=this.parsePopulation(a.population),a.imageUrl=this.getImageUrl(a,t.imageConfig);const r=a.engagementStatus;r!=null&&(typeof r=="object"&&"value"in r?(a.engagementStatusLabel=r.label||r.value,a.engagementStatus=r.value==="engaged"):a.engagementStatus=r===!0||r===1||r==="1"||r==="true"||typeof r=="number"&&r>0||typeof r=="string"&&parseInt(r,10)>0);const s=a.adoptionStatus;s!=null&&(a.adoptionStatus=s===!0||s===1||s==="1"||s==="true"||typeof s=="object"&&!!(s!=null&&s.value)||typeof s=="number"&&s>0||typeof s=="string"&&parseInt(s,10)>0);const i=["doxaRegion","wagfRegion","wagfBlock","wagfMember","affinityBlock","cluster","peopleGroup","countryIso","religion","religionCode"];for(const l of i){const c=a[l];c!=null&&typeof c=="object"&&"value"in c?(a[l+"Label"]=c.label||c.value,a[l]=c.value):c!=null&&typeof c=="string"&&c!==""&&(a[l+"Label"]||(a[l+"Label"]=c))}a.countryName=a.countryIsoLabel||a.country||a.countryIso||"",a.religionName=a.religionLabel||a.religion||"",a._raw=o,this.normalizedData.push(a),this.dataByUniqueId.set(a.uniqueId,a)}this.rawData=null}getFieldValue(t,n){if(!n)return"";if(t[n]!==void 0)return t[n];const o=n.trim();if(t[o]!==void 0)return t[o];for(const a of Object.keys(t))if(a.trim()===o||a.includes(o)||o.includes(a.trim()))return t[a];return""}parsePopulation(t){if(!t)return 0;const n=String(t).replace(/,/g,"").trim(),o=parseInt(n,10);return isNaN(o)?0:o}getImageUrl(t,n){if(!n)return"";const o=n.placeholderUrl||"",a=t[n.useField];return a&&String(a).trim()&&!String(a).includes("NoImageAvailable")?a:o}getData(){return this.normalizedData}getByUniqueId(t){return this.dataByUniqueId.get(t)}getByCoordinates(t,n,o=1e-4){return this.normalizedData.find(a=>Math.abs(a.latitude-t)n.peopleGroupId===t)}getLanguageFamilies(){const t=new Set;return this.normalizedData.forEach(n=>{n.languageFamily&&t.add(n.languageFamily)}),Array.from(t).sort()}getDataByLanguageFamily(){const t={};return this.normalizedData.forEach(n=>{const o=n.languageFamily||"Unknown";t[o]||(t[o]=[]),t[o].push(n)}),t}getDataByRegion(){const t={};return this.normalizedData.forEach(n=>{const o=n.doxaRegion||"Unknown";t[o]||(t[o]=[]),t[o].push(n)}),t}getStats(){return{totalRecords:this.normalizedData.length,withPeopleId3:this.normalizedData.filter(t=>t.peopleId3).length,withPhotos:this.normalizedData.filter(t=>t.imageUrl&&!String(t.imageUrl).includes("NoImageAvailable")).length,languageFamilies:this.getLanguageFamilies().length,countries:new Set(this.normalizedData.map(t=>t.country)).size,regions:Object.keys(this.getDataByRegion()).length}}}new _c;const Xm=(e,t)=>Object.fromEntries(Object.entries(e||{}).map(([n,o])=>[n,t(o,n)])),yc=e=>e==null?"—":Number(e).toLocaleString("en-US");function Zm(e,t,n,o,a){return(e||[]).map(r=>{var l,c;let s,i;if(r.kind==="count")s=t.length,r.showDelta&&(i=Math.max(0,n.length-t.length));else if(r.kind==="sum")s=t.reduce((u,f)=>u+(Number(f[r.field])||0),0);else if(r.kind==="pct")s=t.length?Math.round(t.filter(r.test).length/t.length*100)+"%":"—";else if(r.kind==="distinct"){const u=r.via?(c=(l=a==null?void 0:a.facets)==null?void 0:l[r.field])==null?void 0:c[r.via]:o[r.field],f=new Set;t.forEach(d=>{const b=u?u(d):d[r.field];b&&f.add(b)}),s=f.size}return{id:r.id,label:r.label,kind:r.kind,value:s,delta:i}})}function Qm(e){const t=pe(null),n=pe(!1),o=pe(!1),a=pe(!1),r=pe("map"),s=[{k:"map",l:"Map"},{k:"facets",l:"Filters"},{k:"table",l:"Table"},{k:"charts",l:"Charts"}];let i=null;const l=pe(!1),c=pe(!1),u=pe(!1);it(()=>{t.value&&(i=new ResizeObserver(()=>{const E=t.value.clientWidth;n.value=E<760,o.value=E>=760&&E<1180,a.value=E>=760&&E<980}),i.observe(t.value)),e&&e.on("toggleTable",E=>{l.value=!!E}),e&&e.on("toggleFacet",E=>{c.value=!!E}),e&&e.on("toggleRail",E=>{u.value=!!E})}),on(()=>i&&i.disconnect());function f(E){const k=E.target.closest("[data-view]");k&&(r.value=k.getAttribute("data-view"))}const d=se(()=>!n.value||r.value==="facets"),b=se(()=>!n.value||r.value==="map"),_=se(()=>!n.value||r.value==="table"),v=se(()=>!n.value||r.value==="charts");return{shell:t,isNarrow:n,slimRail:o,slimFacet:a,mobileView:r,SEG:s,tableCollapsed:l,facetCollapsed:c,railCollapsed:u,setView:f,showFacets:d,showMap:b,showTable:_,showCharts:v}}function eb(e){function t(){try{const n=encodeURIComponent(JSON.stringify(e.filterSet));typeof location<"u"&&history.replaceState(null,"","#f="+n)}catch{}}bt(()=>({...e.filterSet}),t,{deep:!0}),it(()=>{try{const n=typeof location<"u"&&/[#&]f=([^&]+)/.exec(location.hash);if(n){const o=JSON.parse(decodeURIComponent(n[1]));Object.entries(o).forEach(([a,r])=>e.setFilter(a,r))}}catch{}})}function tb(e){var b;const t=qm(),n=Jm(e.data),o=Xm(e.facets,_=>_.get),a=se(()=>{const _=n.rows.value||[],v=Object.keys(t.filterSet);return v.length?_.filter(E=>v.every(k=>{const A=o[k];return A?A(E)===t.filterSet[k]:!0})):_}),r=se(()=>Zm(e.kpis,a.value,n.rows.value||[],o,e)),s=Ir({rowStore:n.rowStore,rows:n.rows,selectionSet:t.selectionSet,filterSet:t.filterSet,FACET_ACC:o}),i=Qm(t);eb(t);const l=n.sourceId||gn.activeSource,c=((b=gn.sources)==null?void 0:b[l])||{},u=new _c,f=se(()=>{const _=n.rows.value||[];return _.length?(u.rawData=_.slice(),u.normalizeData(c),u.normalizedData):[]}),d={sources:{[l]:{get features(){return f.value}}}};return ot("selectionBus",t),ot("dashboardData",n),ot("dashboardConfig",e),ot("dataStore",d),ot("searchSourceId",l),it(()=>n.load()),{bus:t,data:n,FACET_ACC:o,filteredRows:a,kpis:r,exporter:s,responsive:i}}const nb={facetW:248,railW:312,tableH:"34%"},ob={facetW:[160,420],railW:[200,520],tableH:[12,70]},Kn=(e,[t,n])=>Math.min(n,Math.max(t,e)),vc=(e,t)=>{const n=parseFloat(String(e));return Number.isFinite(n)?n:t};function ab(e={}){const{shellRef:t,bus:n=null,isNarrow:o=!1,storageKey:a="rd-dashboard-layout"}=e,r={...nb,...e.defaults||{}},s={...ob,...e.clamps||{}},i=pe(r.facetW),l=pe(r.railW),c=pe(r.tableH),u=pe(!1),f=()=>!!re(o);function d(){const S=t&&t.value;!S||!u.value||(S.style.setProperty("--facet-w",i.value+"px"),S.style.setProperty("--rail-w",l.value+"px"),S.style.setProperty("--table-h",c.value))}function b(){const S=t&&t.value;S&&(S.style.removeProperty("--facet-w"),S.style.removeProperty("--rail-w"),S.style.removeProperty("--table-h"))}function _(){try{localStorage.setItem(a,JSON.stringify({facetW:i.value,railW:l.value,tableH:c.value}))}catch{}}function v(){try{const S=localStorage.getItem(a);if(!S)return!1;const T=JSON.parse(S);return Number.isFinite(T.facetW)&&(i.value=Kn(T.facetW,s.facetW)),Number.isFinite(T.railW)&&(l.value=Kn(T.railW,s.railW)),T.tableH!=null&&(c.value=Kn(vc(T.tableH,vc(r.tableH,34)),s.tableH)+"%"),u.value=!0,!0}catch{return!1}}function E(){try{localStorage.removeItem(a)}catch{}i.value=r.facetW,l.value=r.railW,c.value=r.tableH,u.value=!1,b()}function k(S,T){if(f())return;const C=t&&t.value;if(!C)return;T.preventDefault();const x=C.getBoundingClientRect(),F=T.clientX,W=i.value,z=l.value,P=T.currentTarget;try{P&&P.setPointerCapture&&P.setPointerCapture(T.pointerId)}catch{}function H(U){if(S==="facet")i.value=Math.round(Kn(W+(U.clientX-F),s.facetW));else if(S==="rail")l.value=Math.round(Kn(z-(U.clientX-F),s.railW));else if(S==="table"){const Y=(x.bottom-U.clientY)/x.height*100;c.value=Math.round(Kn(Y,s.tableH))+"%"}u.value=!0,d()}function ne(U){window.removeEventListener("pointermove",H),window.removeEventListener("pointerup",ne),window.removeEventListener("pointercancel",ne);try{P&&P.releasePointerCapture&&P.releasePointerCapture(U.pointerId)}catch{}_()}window.addEventListener("pointermove",H),window.addEventListener("pointerup",ne),window.addEventListener("pointercancel",ne)}const A=S=>k("facet",S),h=S=>k("rail",S),m=S=>k("table",S);let w=null;return it(()=>{v()&&d(),n&&typeof n.on=="function"&&(w=n.on("resetLayout",E))}),on(()=>{try{w&&w()}catch{}}),{facetW:i,railW:l,tableH:c,customized:u,startFacetResize:A,startRailResize:h,startTableResize:m,startResize:k,reset:E,applyVars:d}}const rb=["data-chip"],sb={class:"fc"},ib={__name:"DashboardFilterChips",setup(e){const t=ve("selectionBus",null),n=ve("dashboardConfig",{}),o=(t==null?void 0:t.filterSet)||{},a=se(()=>Object.entries(o).map(([s,i])=>{var l,c;return{k:s,text:String(i),facet:((c=(l=n.facets)==null?void 0:l[s])==null?void 0:c.label)||s}}));function r(s){const i=s.target&&s.target.closest&&s.target.closest("[data-chip]");if(!i||!t)return;const l=i.getAttribute("data-chip");l==="__all__"?t.clearFilters():t.setFilter(l,null)}return dt(` + .rd-chips{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; } + .rd-chip{ display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:600; padding:3px 9px; border-radius:999px; + background:#fff; color:#1a1a2e; border:1px solid #e67e22; cursor:pointer; line-height:1.2; } + .rd-chip .fc{ opacity:.55; font-weight:500; } .rd-chip i{ font-style:normal; opacity:.6; font-size:12px; } + .rd-chip:hover{ background:#fff4ea; } .rd-chip:hover i{ opacity:1; } + .rd-chip.rd-clear{ border-color:#c7ccd6; color:#5a6577; } .rd-chip.rd-clear:hover{ background:#eef1f6; } +`,"rd-chips"),(s,i)=>a.value.length?(ae(),ie("div",{key:0,class:"rd-chips","data-chips-bar":"",onClick:r},[(ae(!0),ie(Ae,null,et(a.value,l=>(ae(),ie("span",{key:l.k,class:"rd-chip","data-chip":l.k,"data-filter-chip":""},[R("span",sb,de(l.facet)+":",1),ct(de(l.text)+" ",1),i[0]||(i[0]=R("i",null,"✕",-1))],8,rb))),128)),i[1]||(i[1]=R("span",{class:"rd-chip rd-clear","data-chip":"__all__"},"Clear all",-1))])):tt("",!0)}},lb=["data-crumb"],cb={__name:"DashboardBreadcrumb",setup(e){const t=ve("selectionBus",null),n=(t==null?void 0:t.filterSet)||{},o=se(()=>Object.entries(n).map(([s,i])=>({k:s,v:String(i)})));function a(s){const i=Object.keys(n),l=i.indexOf(s);l<0||!t||i.slice(l).forEach(c=>t.setFilter(c,null))}function r(s){const i=s.target&&s.target.closest&&s.target.closest("[data-crumb]");if(!i||!t)return;const l=i.getAttribute("data-crumb");l==="__root__"?t.clearFilters():a(l)}return dt(` + .rd-breadcrumb{ display:flex; align-items:center; gap:4px; font-size:11px; color:#cdd3df; overflow:hidden; } + .rd-crumb{ cursor:pointer; padding:2px 6px; border-radius:4px; white-space:nowrap; } + .rd-crumb:hover{ background:#ffffff1f; color:#fff; } + .rd-crumb.root{ color:#9aa4b8; } .rd-crumb.cur{ color:#fff; font-weight:700; } + .rd-sep{ opacity:.45; } +`,"rd-breadcrumb"),(s,i)=>(ae(),ie("nav",{class:"rd-breadcrumb","data-breadcrumb":"",onClick:r,"aria-label":"Filter breadcrumb"},[i[1]||(i[1]=R("span",{class:"rd-crumb root","data-crumb":"__root__"},"World",-1)),(ae(!0),ie(Ae,null,et(o.value,(l,c)=>(ae(),ie(Ae,{key:l.k},[i[0]||(i[0]=R("span",{class:"rd-sep"},"▸",-1)),R("span",{class:Ze(["rd-crumb",{cur:c===o.value.length-1}]),"data-crumb-item":"","data-crumb":l.k},de(l.v),11,lb)],64))),128))]))}},ub={Africa:"#e74c3c",Asia:"#3498db",Europe:"#2ecc71","Latin America":"#f39c12","Middle East":"#9b59b6","North America":"#1abc9c",Oceania:"#e67e22",Other:"#95a5a6"},Sc=["#2456c7","#e67e22","#16a085","#8e44ad","#c0392b","#27ae60","#2c3e50","#d35400","#2980b9","#7f8c8d","#f39c12","#9b59b6","#1abc9c","#34495e","#e74c3c"],Be=e=>e==null?"":typeof e=="object"?e.label??e.value??"":e;function Rr(e,t,n){const o=new Map;for(const r of e){const s=t(r);s==null||s===""||o.set(s,(o.get(s)||0)+1)}let a=[...o.entries()].map(([r,s])=>({key:r,value:s})).sort((r,s)=>s.value-r.value);if(n&&a.length>n){const r=a.slice(0,n),s=a.slice(n).reduce((i,l)=>i+l.value,0);s>0&&r.push({key:"Other",value:s,other:!0}),a=r}return a}function db(e,t=132,n=.58){const o=t/2,a=t/2,r=t/2-3,s=(t/2-3)*n,i=e.reduce((c,u)=>c+u.value,0)||1;let l=-Math.PI/2;return e.map((c,u)=>{const f=l,d=l+c.value/i*Math.PI*2;l=d;const b=d-f>Math.PI?1:0,_=(E,k)=>`${(o+k*Math.cos(E)).toFixed(2)},${(a+k*Math.sin(E)).toFixed(2)}`,v=`M${_(f,r)} A${r},${r} 0 ${b} 1 ${_(d,r)} L${_(d,s)} A${s},${s} 0 ${b} 0 ${_(f,s)} Z`;return{...c,path:v,pct:Math.round(c.value/i*100),color:wc(c.key,u)}})}function fb(e){const t=e.reduce((n,o)=>Math.max(n,o.value),0)||1;return e.map((n,o)=>({...n,frac:n.value/t,color:wc(n.key,o)}))}function wc(e,t){return ub[e]||Sc[t%Sc.length]}const gb={class:"rd-brand"},pb={class:"rd-ttl"},hb={key:0,class:"rd-search","data-search":""},mb=["data-slug"],bb={class:"nm"},_b={class:"sub"},yb={key:1,class:"rd-empty"},vb=["onKeydown"],Sb={key:0,class:"rd-csv-n"},wb={key:1,class:"rd-toast","data-export-toast":""},$b={__name:"DashboardTopBar",setup(e){const t=ve("dashboardData",null),n=ve("selectionBus",null),o=ve("dashboardConfig",{}),a=se(()=>o.showTopBarSearch===!0),r=Object.fromEntries(Object.entries(o.facets||{}).map(([S,T])=>[S,T.get])),s=t&&n?Ir({rowStore:t.rowStore,rows:t.rows,selectionSet:n.selectionSet,filterSet:n.filterSet,FACET_ACC:r}):null,i=se(()=>n!=null&&n.selectionSet?n.selectionSet.size:0),l=pe("");let c=null;function u(){if(!s)return;const S=s.exportCsv();l.value=S.downloaded?`✓ ${S.rows} rows exported`:S.clipboard?`✓ ${S.rows} rows copied to clipboard`:`✓ ${S.rows} rows`,clearTimeout(c),c=setTimeout(()=>{l.value=""},2800)}function f(){n&&n.emit("resetLayout")}const d=pe(""),b=pe(!1),_=pe(0),v=se(()=>{var x;const S=d.value.trim().toLowerCase();if(S.length<2)return[];const T=((x=t==null?void 0:t.rows)==null?void 0:x.value)||[],C=[];for(const F of T)if((F.name||"").toLowerCase().includes(S)&&(C.push(F),C.length>=8))break;return C});function E(S){!S||!n||(S.slug&&(n.toggleSelect(S.slug),n.emit("focusRow",{slug:S.slug,name:S.name})),d.value="",b.value=!1,_.value=0)}function k(){b.value=!0,_.value=0}function A(S){if(!v.value.length){S.key==="Escape"&&(d.value="",b.value=!1);return}S.key==="ArrowDown"?(S.preventDefault(),_.value=(_.value+1)%v.value.length):S.key==="ArrowUp"?(S.preventDefault(),_.value=(_.value-1+v.value.length)%v.value.length):S.key==="Enter"?(S.preventDefault(),E(v.value[_.value])):S.key==="Escape"&&(d.value="",b.value=!1,_.value=0)}function h(S){var F;const T=S.target&&S.target.closest&&S.target.closest("[data-slug]");if(!T)return;const C=T.getAttribute("data-slug"),x=(((F=t==null?void 0:t.rows)==null?void 0:F.value)||[]).find(W=>W.slug===C);x&&E(x)}const m=pe(null);function w(S){m.value&&!m.value.contains(S.target)&&(b.value=!1)}return it(()=>{var S,T;try{(T=(S=m.value)==null?void 0:S.getRootNode())==null||T.addEventListener("click",w)}catch{}}),on(()=>{var S,T;try{(T=(S=m.value)==null?void 0:S.getRootNode())==null||T.removeEventListener("click",w)}catch{}clearTimeout(c)}),dt(` + /* DOXA green research-map header — matches research-map.vue site header (#4e594f / light ink #F3F3F1). + Tokens stay overridable: --rd-header (green surface), --rd-header-ink (light text), + --rd-header-muted (light muted for icons/placeholders/sub-text). */ + .rd-topbar{ position:relative; display:flex; align-items:center; gap:12px; height:100%; padding:0 14px; + background:var(--rd-header,#4e594f); color:var(--rd-header-ink,#F3F3F1); border-bottom:1px solid var(--rd-header-line,#3c453d); + box-sizing:border-box; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; } + .rd-topbar .rd-brand{ display:flex; align-items:baseline; gap:7px; flex:0 0 auto; } + .rd-topbar .rd-ttl{ font-weight:800; font-size:var(--fs-lg,13px); letter-spacing:.2px; color:var(--rd-header-ink,#F3F3F1); } + .rd-topbar .rd-ttl .dot{ color:var(--rd-accent,#e67e22); } + .rd-topbar .rd-spacer{ flex:1; } + /* search — translucent light field so typed text stays legible on the green bar */ + .rd-search{ position:relative; flex:0 1 280px; min-width:140px; } + .rd-search input{ width:100%; box-sizing:border-box; height:30px; padding:0 10px 0 28px; font-size:var(--fs-md,12px); + color:var(--rd-header-ink,#F3F3F1); background:#ffffff1f; border:1px solid #ffffff3d; + border-radius:var(--r-md,6px); outline:none; } + .rd-search input:focus{ border-color:var(--rd-accent,#e67e22); background:#ffffff33; } + .rd-search input::placeholder{ color:var(--rd-header-muted,#cbc5b9); } + .rd-search .ic{ position:absolute; left:8px; top:50%; transform:translateY(-50%); font-size:12px; color:var(--rd-header-muted,#cbc5b9); pointer-events:none; } + .rd-results{ position:absolute; left:0; right:0; top:34px; z-index:60; background:#fff; border:1px solid var(--rd-line,#e2e6ec); + border-radius:var(--r-md,6px); box-shadow:0 8px 24px #1f273322; overflow:hidden; max-height:320px; overflow-y:auto; } + .rd-results .rd-res{ display:flex; align-items:baseline; gap:8px; padding:6px 10px; cursor:pointer; font-size:var(--fs-md,12px); } + .rd-results .rd-res:hover, .rd-results .rd-res.on{ background:var(--rd-bg,#f7f9fb); } + .rd-results .rd-res .nm{ font-weight:700; color:var(--rd-ink,#1f2733); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } + .rd-results .rd-res .sub{ margin-left:auto; color:var(--rd-muted,#6b7686); font-size:var(--fs-sm,11px); white-space:nowrap; flex:0 0 auto; } + .rd-results .rd-empty{ padding:8px 10px; color:var(--rd-muted,#6b7686); font-size:var(--fs-sm,11px); } + /* csv */ + .rd-topbar .rd-csv{ display:inline-flex; align-items:center; gap:5px; font-size:var(--fs-sm,11px); font-weight:700; cursor:pointer; + background:var(--rd-accent,#e67e22); color:#fff; border-radius:var(--r-md,6px); padding:5px 11px; user-select:none; flex:0 0 auto; } + .rd-topbar .rd-csv:hover{ background:#d8741c; } + .rd-topbar .rd-csv-n{ background:#ffffff33; border-radius:var(--r-pill,999px); padding:0 6px; font-size:10px; } + .rd-topbar .rd-toast{ font-size:var(--fs-sm,11px); font-weight:700; color:#1a7f46; background:#e7f6ed; border:1px solid #b6e3c6; + border-radius:var(--r-md,6px); padding:3px 9px; white-space:nowrap; flex:0 0 auto; } + /* Align Dashboard — subtle ghost button on the green bar; snaps the dragged layout to defaults. + Desktop-only: hidden whenever the shell is in its narrow/mobile mode (shared shadow root). */ + .rd-topbar .rd-align{ display:inline-flex; align-items:center; gap:5px; font-size:var(--fs-sm,11px); font-weight:700; + cursor:pointer; user-select:none; flex:0 0 auto; color:var(--rd-header-ink,#F3F3F1); + background:#ffffff1f; border:1px solid #ffffff3d; border-radius:var(--r-md,6px); padding:5px 11px; } + .rd-topbar .rd-align:hover{ background:#ffffff33; border-color:var(--rd-accent,#e67e22); color:#fff; } + .rd-shell.rd-narrow .rd-topbar .rd-align{ display:none; } +`,"rd-topbar"),(S,T)=>(ae(),ie("header",{ref_key:"rootEl",ref:m,class:"rd-topbar","data-region":"topbar"},[R("span",gb,[R("span",pb,[ct(de(re(o).title||"Research Dashboard"),1),T[1]||(T[1]=R("span",{class:"dot"},".",-1))])]),Ce(cb),Ce(ib),T[4]||(T[4]=R("span",{class:"rd-spacer"},null,-1)),a.value?(ae(),ie("div",hb,[T[2]||(T[2]=R("span",{class:"ic"},"⌕",-1)),zt(R("input",{type:"text","onUpdate:modelValue":T[0]||(T[0]=C=>d.value=C),placeholder:"Search people groups…","data-search-input":"","aria-label":"Search people groups",onInput:k,onFocus:k,onKeydown:A},null,544),[[kf,d.value]]),b.value&&d.value.trim().length>=2?(ae(),ie("div",{key:0,class:"rd-results","data-search-results":"",onClick:h},[v.value.length?(ae(!0),ie(Ae,{key:0},et(v.value,(C,x)=>(ae(),ie("div",{key:C.slug,class:Ze(["rd-res",{on:x===_.value}]),"data-slug":C.slug},[R("span",bb,de(C.name),1),R("span",_b,de(re(Be)(C.country_code))+" · "+de(re(Be)(C.religion)),1)],10,mb))),128)):(ae(),ie("div",yb,"No people groups match “"+de(d.value.trim())+"”.",1))])):tt("",!0)])):tt("",!0),R("span",{class:"rd-align",role:"button",tabindex:"0","data-align-btn":"",title:"Reset the dashboard layout to its default alignment",onClick:f,onKeydown:[zi(ur(f,["prevent"]),["enter"]),zi(ur(f,["prevent"]),["space"])]}," ⤢ Align Dashboard ",40,vb),R("span",{class:"rd-csv",role:"button",tabindex:"0","data-csv-btn":"",onClick:u},[T[3]||(T[3]=ct(" CSV ↓",-1)),i.value?(ae(),ie("span",Sb,de(i.value),1)):tt("",!0)]),l.value?(ae(),ie("span",wb,de(l.value),1)):tt("",!0)],512))}},$c="adoptionStatus",Qt={notAdopted:"#e74c3c",hasAdoption:"#22c55e"},Ab=Qt,Fr={notAdopted:"Needs Adoption",hasAdopted:"Has Adoption"},kb=Fr;function Ac(e){var o;const t=e.adoptionStatus??((o=e._raw)==null?void 0:o.adopted_by_churches);return t===!0||t===1||typeof t=="number"&&t>0||typeof t=="object"&&(t==null?void 0:t.value)?Qt.hasAdoption:Qt.notAdopted}function Or({colorSource:e="properties"}={}){const t=e==="feature-state"?["feature-state","adoptionStatus"]:["get","adoptionStatus"];return["case",["==",t,!0],Qt.hasAdoption,["==",t,1],Qt.hasAdoption,Qt.notAdopted]}const kc=Or,Lb=Object.freeze(Object.defineProperty({__proto__:null,ADOPTION_COLORS:Ab,ADOPTION_LABELS:kb,LABELS:Fr,PALETTE:Qt,PROPERTY_KEY:$c,applyColor:Or,buildColorExpression:kc,default:{name:"Adoption Progress",propertyKey:$c,palette:Qt,colors:Qt,labels:Fr,getColor:Ac,applyColor:Or,buildColorExpression:kc},getColor:Ac},Symbol.toStringTag,{value:"Module"})),Lc="engagementStatus",en={notEngaged:"#e74c3c",hasEngagement:"#22c55e"},Eb=en,Dr={notEngaged:"Unengaged",hasEngagement:"Engaged"},Tb=Dr;function Ec(e){var o;const t=e.engagementStatus??((o=e._raw)==null?void 0:o.people_committed);return t===!0||t===1||typeof t=="number"&&t>0||typeof t=="object"&&(t==null?void 0:t.value)?en.hasEngagement:en.notEngaged}function Br({colorSource:e="properties"}={}){const t=e==="feature-state"?["feature-state","engagementStatus"]:["get","engagementStatus"];return["case",["==",t,!0],en.hasEngagement,["==",t,1],en.hasEngagement,en.notEngaged]}const Tc=Br,Cb=Object.freeze(Object.defineProperty({__proto__:null,ENGAGEMENT_COLORS:Eb,ENGAGEMENT_LABELS:Tb,LABELS:Dr,PALETTE:en,PROPERTY_KEY:Lc,applyColor:Br,buildColorExpression:Tc,default:{name:"Engagement Progress",propertyKey:Lc,palette:en,colors:en,labels:Dr,getColor:Ec,applyColor:Br,buildColorExpression:Tc},getColor:Ec},Symbol.toStringTag,{value:"Module"})),Ur="languageFamily",xb="#000000",pn={"Indo-European":"#e74c3c",Dravidian:"#ff9800","Afro-Asiatic":"#27ae60","Sino-Tibetan":"#3498db","Niger-Congo":"#9b59b6",Unclassified:"#95a5a6","Nilo-Saharan":"#e91e63","Khoe-Kwadi":"#00bcd4","Austro-Asiatic":"#00bcd4","Kra-Dai":"#8e44ad",Austronesian:"#ff69b4","Hmong-Mien":"#f44336",Turkic:"#ffc107","Nakh-Daghestanian":"#009688",Mongolic:"#795548",Uralic:"#607d8b",Tungusic:"#4caf50",Japonic:"#ff5722",Cariban:"#673ab7",Tupian:"#03a9f4",Tucanoan:"#8bc34a",Maipurean:"#ffc107",Panoan:"#cddc39",Guajiboan:"#9e9e9e",Chibchan:"#ff7043",Quechuan:"#ab47bc",Jean:"#26a69a",Harákmbut:"#7e57c2",Nambikwara:"#42a5f5",Muran:"#66bb6a",Karajá:"#ffa726",Bororoan:"#ef5350",Arauan:"#5c6bc0",Yanomaman:"#26c6da",Yaguan:"#d4e157",Witotoan:"#78909c",Zamucoan:"#8d6e63",Puinavean:"#aed581",Barbacoan:"#4db6ac","Eyak-Athabaskan":"#7986cb","Trans-New Guinea":"#ba68c8",Andamanese:"#4dd0e1","Sign Language":"#212121",Creole:"#9575cd","Mixed language":"#a1887f","Language isolate":"#90a4ae",Unknown:"#000000"},Pb=pn;function jr(e){return pn[e]||xb}const Nb=(()=>{const e=n=>String(n||"").toLowerCase().trim(),t={};for(const n of Object.keys(pn))t[e(n)]=n;return t})();function Cc(e){if(!e)return"Unknown";const t=String(e).trim();return Nb[t.toLowerCase()]||t}function xc(e){var t;return jr(e.languageFamily||((t=e._normalized)==null?void 0:t.languageFamily))}function Kr(){const e=["match",["get",Ur]];return Object.entries(pn).forEach(([t,n])=>{e.push(t,n)}),e.push("#95a5a6"),e}const Pc=Kr,Mb=Object.freeze(Object.defineProperty({__proto__:null,LANGUAGE_FAMILY_COLORS:Pb,PALETTE:pn,PROPERTY_KEY:Ur,applyColor:Kr,buildColorExpression:Pc,canonicalFamilyName:Cc,default:{name:"Language Family",propertyKey:Ur,palette:pn,colors:pn,getColor:xc,applyColor:Kr,buildColorExpression:Pc,getLanguageFamilyColor:jr,canonicalFamilyName:Cc},defaultFamilyColor:"#95a5a6",getColor:xc,getLanguageFamilyColor:jr,languageFamilyColors:pn},Symbol.toStringTag,{value:"Module"})),Nc="peoplePraying",ya=144,hn={noPrayer:"#e74c3c",hasPrayer:"#f39c12",fullPrayer:"#22c55e"},Ib=hn,Gr={noPrayer:"Needs Prayer",hasPrayer:"Has Prayer",fullPrayer:"Has Full Prayer Coverage"},Rb=Gr;function va(e){var o;const t=(e==null?void 0:e.peoplePraying)??((o=e==null?void 0:e._raw)==null?void 0:o.people_praying)??null,n=Number(t)||0;return n>=ya?"fullPrayer":n>0?"hasPrayer":"noPrayer"}function Hr(e){return hn[va(e)]}function Mc(e){var n;const t=(e==null?void 0:e.peoplePraying)??((n=e==null?void 0:e._raw)==null?void 0:n.people_praying)??null;return t!==null&&t>0}function Ic(e){return va(e)==="fullPrayer"}function Rc(e){return Hr(e)}function zr({colorSource:e="properties"}={}){const t=e==="feature-state"?["feature-state","peoplePraying"]:["get","peoplePraying"];return["case",[">=",t,ya],hn.fullPrayer,[">",t,0],hn.hasPrayer,hn.noPrayer]}const Fc=zr,Fb=Object.freeze(Object.defineProperty({__proto__:null,FULL_PRAYER_THRESHOLD:ya,LABELS:Gr,PALETTE:hn,PRAYER_COLORS:Ib,PRAYER_LABELS:Rb,PROPERTY_KEY:Nc,applyColor:zr,buildColorExpression:Fc,checkHasFullPrayer:Ic,checkHasPrayer:Mc,default:{name:"Prayer Progress",propertyKey:Nc,palette:hn,colors:hn,labels:Gr,threshold:ya,getColor:Rc,applyColor:zr,buildColorExpression:Fc,getPrayerLevel:va,getPrayerColor:Hr,checkHasPrayer:Mc,checkHasFullPrayer:Ic},getColor:Rc,getPrayerColor:Hr,getPrayerLevel:va},Symbol.toStringTag,{value:"Module"})),Oc="religion",Vr="#94a3b8",Sa={C:"Christianity",M:"Islam",H:"Hinduism",B:"Buddhism",E:"Ethnoreligion",J:"Judaism",S:"Sikhism",N:"Unaffiliated",O:"Other",U:"Unknown"},yt={C:"#3b82f6",M:"#ef4444",H:"#f59e0b",B:"#facc15",E:"#84cc16",J:"#a855f7",S:"#ec4899",N:"#71717a",O:"#ff6b2b",U:"#94a3b8"};function wa(e){if(!e||typeof e!="string")return"U";const t=e.charAt(0).toUpperCase();return Sa[t]?t:"U"}function Dc(e){var n,o,a;const t=(e==null?void 0:e.religion)||((o=(n=e==null?void 0:e._raw)==null?void 0:n.religion)==null?void 0:o.value)||((a=e==null?void 0:e._raw)==null?void 0:a.religion);return yt[wa(t)]||Vr}function Wr(){return["match",["slice",["coalesce",["get","religion"],""],0,1],"C",yt.C,"M",yt.M,"H",yt.H,"B",yt.B,"E",yt.E,"J",yt.J,"S",yt.S,"N",yt.N,"O",yt.O,Vr]}const Bc=Wr,Ob=Object.assign({"./adoption.js":Lb,"./engagement.js":Cb,"./language-family.js":Mb,"./prayer-progress.js":Fb,"./religion.js":Object.freeze(Object.defineProperty({__proto__:null,PALETTE:yt,PROPERTY_KEY:Oc,RELIGION_FAMILIES:Sa,applyColor:Wr,buildColorExpression:Bc,default:{name:"Religion",propertyKey:Oc,palette:yt,families:Sa,getColor:Dc,applyColor:Wr,buildColorExpression:Bc,fallback:Vr},getColor:Dc,getReligionFamily:wa},Symbol.toStringTag,{value:"Module"}))}),Db=e=>e.replace(/-([a-z0-9])/g,(t,n)=>n.toUpperCase()),Bb=e=>e.replace(/-/g,"_").toUpperCase(),Yr={...{STATUS:"status",CUSTOM:"custom"}},qr={};function Ub(e){for(const t of Object.keys(e).sort()){const n=t.split("/").pop().replace(/\.js$/,"");if(n.startsWith("_")||n.startsWith("."))continue;const o=e[t].default;if(!o)continue;const a=Db(n);Yr[Bb(n)]=a,qr[a]=o}}Ub(Ob);function jb(e){return qr[e]||qr[Yr.LANGUAGE_FAMILY]}const Kb="#6b7280";function Gb(){const e=jb(Yr.AFFINITY_BLOCK);return e&&e.propertyKey==="affinityBlock"&&e.palette?e.palette:{}}function Hb(e,t){const n=Gb();return e&&n[e]?n[e]:Kb}function zb(e){return(e==null?void 0:e.properties)||e||{}}function Jr(e){return e&&typeof e=="object"&&"label"in e?e.label||e.value||"":e}function Vb(e){var t;return String(e.affinityBlock||Jr((t=e._raw)==null?void 0:t.rop1)||"").trim()}function Wb(e){var t;return String(e.affinityBlockLabel||(typeof((t=e._raw)==null?void 0:t.rop1)=="object"?e._raw.rop1.label:"")||"").trim()}function Yb(e){var t;return String(e.cluster||Jr((t=e._raw)==null?void 0:t.imb_reg_of_people_2)||"").trim()}function qb(e){var t;return String(e.clusterLabel||(typeof((t=e._raw)==null?void 0:t.imb_reg_of_people_2)=="object"?e._raw.imb_reg_of_people_2.label:"")||"").trim()}function Jb(e){var t;return String(e.peopleGroup||Jr((t=e._raw)==null?void 0:t.imb_reg_of_people_25)||"").trim()}function Xb(e){var t;return String(e.peopleGroupLabel||(typeof((t=e._raw)==null?void 0:t.imb_reg_of_people_25)=="object"?e._raw.imb_reg_of_people_25.label:"")||e.name||"").trim()}function Zb(e){var t;return String(e.uniqueId||e.slug||((t=e._raw)==null?void 0:t.slug)||"").trim()}function Qb(e){var t;return String(e.name||e.displayName||((t=e._raw)==null?void 0:t.name)||"").trim()}function e_(e){var n;const t=Number(e.population??e.populationNum??((n=e._raw)==null?void 0:n.population)??0);return Number.isFinite(t)?t:0}function t_(e){return String(e.countryName||e.country||e.countryIsoLabel||e.countryIso||"").trim()}function n_(e){const t=se(()=>{const r=e&&e.value||[],s=new Map;for(const i of r){const l=zb(i),c=Vb(l),u=Wb(l)||c||"— Unknown —",f=Yb(l),d=qb(l)||f||"— Unknown —",b=Jb(l),_=Xb(l)||b||"— Unknown —",v=Zb(l),E=Qb(l)||v,k=e_(l),A=t_(l);if(!v)continue;let h=s.get(c||"__unknown__");h||(h={code:c,label:u,count:0,pop:0,memberIds:[],clusters:new Map},s.set(c||"__unknown__",h)),h.count+=1,h.pop+=k,h.memberIds.push(v);let m=h.clusters.get(f||"__unknown__");m||(m={code:f,label:d,count:0,pop:0,memberIds:[],peopleGroups:new Map},h.clusters.set(f||"__unknown__",m)),m.count+=1,m.pop+=k,m.memberIds.push(v);let w=m.peopleGroups.get(b||"__unknown__");w||(w={code:b,label:_,count:0,pop:0,memberIds:[],instances:[]},m.peopleGroups.set(b||"__unknown__",w)),w.count+=1,w.pop+=k,w.memberIds.push(v),w.instances.push({id:v,name:E,country:A,pop:k})}return s}),n=r=>r&&r.length?["in",["get","uniqueId"],["literal",r]]:["==",["get","uniqueId"],"__none__"],o=se(()=>{const r=t.value,s=[];for(const i of r.values()){const l=Hb(i.code,i.label),c={id:`bloc:${i.code||i.label}`,label:i.label,color:l,count:i.count,pop:i.pop,filter:n(i.memberIds),children:[]};for(const u of i.clusters.values()){const f={id:`cluster:${i.code}__${u.code||u.label}`,label:`${u.label} (Cluster)`,color:l,count:u.count,pop:u.pop,filter:n(u.memberIds),children:[]};for(const d of u.peopleGroups.values()){const b={id:`pg:${i.code}__${u.code}__${d.code||d.label}`,label:`${d.label} (PG)`,color:l,count:d.count,pop:d.pop,filter:n(d.memberIds),children:[]};d.instances.sort((_,v)=>v.pop-_.pop||_.country.localeCompare(v.country));for(const _ of d.instances)b.children.push({id:`pgic:${_.id}`,label:`${_.country?`${_.name}, ${_.country}`:_.name} (PGIC)`,color:l,count:1,pop:_.pop,filter:["==",["get","uniqueId"],_.id],children:[]});f.children.push(b)}f.children.sort((d,b)=>b.count-d.count||b.pop-d.pop),c.children.push(f)}c.children.sort((u,f)=>f.count-u.count||f.pop-u.pop),s.push(c)}return s.sort((i,l)=>l.count-i.count||l.pop-i.pop),s});function a(r){if(typeof window>"u"||typeof window.CustomEvent!="function")return;if(!r){window.dispatchEvent(new CustomEvent("legend:highlight",{detail:{kind:null}}));return}const s=String(r.id||""),i={kind:null,label:r.label,filterExpr:r.filter};s.startsWith("bloc:")?i.kind="bloc":s.startsWith("cluster:")?i.kind="cluster":s.startsWith("pg:")?i.kind="people-group":s.startsWith("pgic:")&&(i.kind="people-group-in-country"),window.dispatchEvent(new CustomEvent("legend:highlight",{detail:i}))}return{aggregated:t,affinityTree:o,highlight:a}}const o_={class:"rd-facets","data-region":"facets"},a_={class:"fr-head"},r_={class:"fr-scope","data-scope-count":""},s_=["data-facet-section"],i_=["onClick"],l_={class:"fr-rows"},c_=["data-facet","data-value"],u_={class:"fr-lbl"},d_={class:"fr-bar"},f_={class:"fr-cnt"},g_={__name:"DashboardFacetRail",setup(e){const t=ve("dashboardData",null),n=ve("selectionBus",null),o=ve("dashboardConfig",{}),a=ve("dataStore",null),r=ve("searchSourceId",null),s=(n==null?void 0:n.filterSet)||{},i=Object.fromEntries(Object.entries(o.facets||{}).map(([w,S])=>[w,S.get]));function l(w){var C;const S=((C=t==null?void 0:t.rows)==null?void 0:C.value)||[],T=Object.keys(s).filter(x=>!w.includes(x));return T.length?S.filter(x=>T.every(F=>{const W=i[F];return W?W(x)===s[F]:!0})):S}const c=_n(Object.fromEntries((o.facetRail||[]).map(w=>[w.id,!0])));function u(w){c[w]=!c[w]}function f(w,S,T){const C=w.reduce((x,F)=>Math.max(x,F.value),0)||1;return w.map(x=>({facet:S,value:x.key,label:x.key,count:x.value,frac:x.value/C,level:T,other:!!x.other,active:!x.other&&s[S]===x.key}))}function d(w,S){return f(Rr(l([w]),i[w],S??24),w,0)}function b(w,S){const T=[],C=x=>{const F=w[x],W=(S&&S[x])??(x===w.length-1?40:30),z=f(Rr(l(w.slice(x)),i[F],W),F,x);for(const P of z)T.push(P),P.active&&x{const w=a&&r&&a.sources&&a.sources[r];return w&&w.features||[]}),{aggregated:v}=n_(_),E=se(()=>{const w=new Map,S=new Map,T=new Map;for(const C of v.value.values()){C.code&&w.set(C.code,C.label);for(const x of C.clusters.values()){x.code&&S.set(x.code,x.label);for(const F of x.peopleGroups.values())F.code&&T.set(F.code,F.label)}}return{affinity_bloc:w,cluster:S,people_group:T}}),k=se(()=>(o.facetRail||[]).map(w=>{let S=w.drill?b(w.drill,w.topN):d(w.facet,w.topN);if(w.tree==="affinity"){const T=E.value;S=S.map(C=>C.other?C:{...C,label:T[C.facet]&&T[C.facet].get(C.value)||C.label})}return{id:w.id,title:w.title,rows:S}})),A=se(()=>{var T;const w=((T=t==null?void 0:t.rows)==null?void 0:T.value)||[],S=Object.keys(s);return S.length?w.filter(C=>S.every(x=>{const F=i[x];return F?F(C)===s[x]:!0})).length:w.length});function h(w){const S=w.target&&w.target.closest&&w.target.closest("[data-facet]");if(!S||!n)return;const T=S.getAttribute("data-facet"),C=S.getAttribute("data-value");!T||!C||n.setFilter(T,s[T]===C?null:C)}const m=pe(null);return it(()=>{n&&n.on("mapFocus",({value:w}={})=>{if(!w||!m.value)return;const T=[...m.value.querySelectorAll(".fr-row")].find(C=>C.textContent&&C.textContent.includes(w));T&&(m.value.scrollTop=Math.max(0,T.offsetTop-8))})}),dt(` + .rd-facets{ display:flex; flex-direction:column; height:100%; min-height:0; box-sizing:border-box; + background:var(--rd-panel,#fff); } + .rd-facets .fr-head{ flex:0 0 auto; padding:var(--s3,12px) var(--s3,12px) var(--s2,8px); border-bottom:1px solid var(--rd-line,#e2e6ec); } + .rd-facets .fr-scope{ font-size:11px; color:var(--rd-muted,#6b7686); } .rd-facets .fr-scope b{ color:var(--rd-ink,#1f2733); font-size:13px; } + .rd-facets .fr-body{ flex:1 1 auto; min-height:0; overflow:auto; } + .fr-sec{ border-bottom:1px solid var(--rd-line,#e2e6ec); } + .fr-sech{ display:flex; align-items:center; gap:6px; padding:8px 12px; cursor:pointer; user-select:none; + font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.5px; color:var(--rd-muted,#6b7686); } + .fr-sech:hover{ background:var(--rd-bg,#f7f9fb); } + .fr-sech .chev{ margin-left:auto; transition:transform .15s; font-size:10px; color:#9aa4b2; } + .fr-sech.closed .chev{ transform:rotate(-90deg); } + .fr-rows{ padding-bottom:6px; } + .fr-row{ position:relative; display:flex; align-items:center; gap:8px; padding:3px 12px 3px 14px; cursor:pointer; font-size:12px; color:#3a4456; } + .fr-row:hover{ background:#f1f4f8; } + .fr-row.l1{ padding-left:26px; } .fr-row.l2{ padding-left:38px; } + .fr-row.on{ background:#fff4ea; font-weight:700; color:var(--rd-ink,#1f2733); } + .fr-row.on::before{ content:''; position:absolute; left:0; top:2px; bottom:2px; width:3px; background:var(--rd-accent,#e67e22); border-radius:0 2px 2px 0; } + .fr-row.other{ cursor:default; color:#9aa4b2; } + .fr-row.other:hover{ background:transparent; } + .fr-lbl{ flex:0 1 auto; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } + .fr-bar{ flex:1 1 auto; height:6px; min-width:24px; background:#eef1f6; border-radius:3px; overflow:hidden; } + .fr-bar i{ display:block; height:100%; background:#c7d6ea; border-radius:3px; transition:width .3s; } + .fr-row.on .fr-bar i{ background:var(--rd-accent,#e67e22); } + .fr-cnt{ flex:0 0 auto; font-variant-numeric:tabular-nums; color:#6b7686; min-width:30px; text-align:right; font-size:11px; } +`,"rd-facetrail"),(w,S)=>(ae(),ie("aside",o_,[R("div",a_,[R("div",r_,[R("b",null,de(A.value.toLocaleString("en-US")),1),S[0]||(S[0]=ct(" groups in scope",-1))])]),R("div",{class:"fr-body",ref_key:"railEl",ref:m,onClick:h},[(ae(!0),ie(Ae,null,et(k.value,T=>(ae(),ie("div",{key:T.id,class:"fr-sec","data-facet-section":T.id},[R("div",{class:Ze(["fr-sech",{closed:!c[T.id]}]),onClick:ur(C=>u(T.id),["stop"])},[R("span",null,de(T.title),1),S[1]||(S[1]=R("span",{class:"chev"},"▾",-1))],10,i_),zt(R("div",l_,[(ae(!0),ie(Ae,null,et(T.rows,C=>(ae(),ie("div",{key:C.facet+":"+C.value,class:Ze(["fr-row",["l"+C.level,{on:C.active,other:C.other}]]),"data-facet":C.other?null:C.facet,"data-value":C.other?null:C.value},[R("span",u_,de(C.label),1),R("span",d_,[R("i",{style:Bt({width:Math.max(4,C.frac*100)+"%"})},null,4)]),R("span",f_,de(C.count.toLocaleString("en-US")),1)],10,c_))),128))],512),[[rn,c[T.id]]])],8,s_))),128))],512)]))}},p_=["data-sel-count"],h_={class:"rd-table-bar"},m_=["title","aria-expanded"],b_={class:"ct","data-table-count":""},__={key:0,class:"rd-pill","data-sel-pill":""},y_=["aria-rowcount"],v_={class:"rd-thead",role:"row"},S_=["checked"],w_=["aria-sort","data-col","onClick"],$_={class:"ind"},A_=["data-slug","aria-selected"],k_={class:"rd-td chk",role:"gridcell"},L_=["checked","aria-label"],E_={class:"rd-foot",role:"row"},T_={class:"rd-td"},C_={class:"rd-td num"},wo=26,x_={__name:"DashboardDataTable",setup(e){const t=ve("dashboardData",null),n=ve("selectionBus",null),o=ve("dashboardConfig",{}),a=q=>{if(typeof q=="number")return q;const ee=parseFloat(String(q??"").replace(/[^0-9.\-]/g,""));return isNaN(ee)?null:ee},r=q=>q==null?"":Number(q).toLocaleString("en-US"),s=se(()=>o.columns||[]),i=Object.fromEntries(Object.entries(o.facets||{}).map(([q,ee])=>[q,ee.get])),l=se(()=>{var q;return((q=t==null?void 0:t.rows)==null?void 0:q.value)||[]}),c=(n==null?void 0:n.filterSet)||{},u=n==null?void 0:n.selectionSet;function f(q,ee,ce){const we=i[ee];if(!we)return!0;const Pe=we(q);return Array.isArray(ce)?ce.includes(Pe):Pe===ce}const d=se(()=>{const q=Object.keys(c);return q.length?l.value.filter(ee=>q.every(ce=>f(ee,ce,c[ce]))):l.value}),b=pe([]);function _(q,ee){const ce=!!(ee&&ee.shiftKey),we=b.value.findIndex(Pe=>Pe.key===q.key);if(we<0)b.value=(ce?[...b.value]:[]).concat({key:q.key,dir:"asc"});else if(b.value[we].dir==="asc"){const Pe=[...b.value];Pe[we]={key:q.key,dir:"desc"},b.value=Pe}else b.value=ce?b.value.filter(Pe=>Pe.key!==q.key):[]}function v(q){const ee=b.value.find(ce=>ce.key===q.key);return ee?ee.dir==="asc"?"ascending":"descending":"none"}const E=se(()=>{const q=b.value;if(!q.length)return d.value;const ee=q.map(ce=>({col:s.value.find(we=>we.key===ce.key),dir:ce.dir==="asc"?1:-1}));return d.value.slice().sort((ce,we)=>{for(const{col:Pe,dir:Ge}of ee){let Ue=Pe.get(ce),je=Pe.get(we);if((Ue==null||Ue==="")&&(Ue=Pe.type==="num"?-1/0:""),(je==null||je==="")&&(je=Pe.type==="num"?-1/0:""),Ueje)return 1*Ge}return 0})}),k=pe(0),A=pe(360),h=pe(null);let m=null;function w(q){k.value=q.target.scrollTop}const S=se(()=>Math.max(0,Math.floor(k.value/wo)-6)),T=se(()=>Math.ceil(A.value/wo)+12),C=se(()=>E.value.slice(S.value,S.value+T.value)),x=se(()=>S.value*wo),F=se(()=>Math.max(0,(E.value.length-(S.value+C.value.length))*wo));it(()=>{h.value&&(A.value=h.value.clientHeight||360,m=new ResizeObserver(()=>{A.value=h.value.clientHeight||A.value}),m.observe(h.value)),n&&n.on("toggleTable",q=>{Y.value=!!q}),n&&n.on("focusRow",({slug:q}={})=>{if(!q||!h.value)return;const ee=E.value.findIndex(ce=>ce.slug===q);ee>=0&&(h.value.scrollTop=Math.max(0,ee*wo-A.value/2))})}),on(()=>m&&m.disconnect());const W=se(()=>u?u.size:0),z=q=>!!(u&&u.has(q.slug));function P(q){const ee=q.target&&q.target.closest&&q.target.closest(".rd-row");if(ee){const ce=ee.getAttribute("data-slug");ce&&n&&n.toggleSelect(ce)}}const H=se(()=>d.value.length>0&&d.value.every(q=>z(q)));function ne(){n&&(H.value?d.value.forEach(q=>u.has(q.slug)&&n.toggleSelect(q.slug)):d.value.forEach(q=>!u.has(q.slug)&&n.toggleSelect(q.slug)))}function U(){n&&n.clearSelection()}const Y=pe(!1);function J(){Y.value=!Y.value,n&&n.emit("toggleTable",Y.value)}const te=se(()=>d.value.reduce((q,ee)=>q+(a(ee.population)||0),0)),G=se(()=>d.value.length);return dt(` + .rd-table-wrap{ display:flex; flex-direction:column; height:100%; min-height:0; background:#fff; font-size:12px; } + .rd-table-bar{ display:flex; align-items:center; gap:10px; padding:4px 10px; border-bottom:1px solid #dde3ec; flex:0 0 auto; } + .rd-table-bar .ttl{ font-weight:700; color:var(--rd-ink,#1f2733); } .rd-table-bar .ct{ color:#7a8494; } + .rd-dock{ all:unset; cursor:pointer; flex:0 0 auto; width:20px; height:20px; line-height:20px; text-align:center; border-radius:4px; + color:var(--rd-muted,#6b7686); font-size:12px; } + .rd-dock:hover{ background:var(--rd-bg,#f7f9fb); color:var(--rd-accent,#e67e22); } + .rd-pill{ margin-left:auto; display:inline-flex; align-items:center; gap:6px; font-weight:700; font-size:11px; padding:3px 9px; border-radius:999px; + background:#eef4ff; color:#2456c7; border:1px solid #cfe0ff; } + .rd-pill button{ all:unset; cursor:pointer; color:#2456c7; opacity:.7; } .rd-pill button:hover{ opacity:1; } + .rd-grid{ flex:1 1 auto; min-height:0; overflow:auto; position:relative; } + .rd-thead{ position:sticky; top:0; z-index:2; display:flex; background:#f4f6fa; border-bottom:1px solid #dde3ec; } + .rd-th{ flex:1 1 0; min-width:0; padding:3px 8px; font-weight:700; color:#3a4456; cursor:pointer; user-select:none; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } + .rd-th.num{ text-align:right; } .rd-th.chk{ flex:0 0 30px; cursor:default; text-align:center; padding:6px 0; } + .rd-th .ind{ font-size:9px; color:#2456c7; margin-left:3px; } + .rd-row{ display:flex; height:26px; line-height:16px; border-bottom:1px solid #f0f2f6; align-items:center; } + .rd-row:hover{ background:#f8fafd; } .rd-row.sel{ background:#fff7ec; box-shadow:inset 3px 0 0 #e67e22; } + .rd-td{ flex:1 1 0; min-width:0; padding:0 8px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:#2a3240; } + .rd-td.num{ text-align:right; font-variant-numeric:tabular-nums; } .rd-td.chk{ flex:0 0 30px; text-align:center; padding:0; } + .rd-foot{ flex:0 0 auto; display:flex; border-top:2px solid #dde3ec; background:#f4f6fa; font-weight:700; height:28px; align-items:center; color:#3a4456; } + .rd-foot .rd-td{ color:#3a4456; } +`,"rd-datatable"),(q,ee)=>(ae(),ie("div",{class:"rd-table-wrap","data-sel-count":W.value},[R("div",h_,[R("button",{class:"rd-dock",title:Y.value?"Expand table":"Collapse table — grow the map","data-table-dock":"","aria-expanded":Y.value?"false":"true",onClick:J},de(Y.value?"▴":"▾"),9,m_),ee[0]||(ee[0]=R("span",{class:"ttl"},"People Groups",-1)),R("span",b_,de(r(G.value))+" rows",1),W.value?(ae(),ie("span",__,[R("span",null,de(W.value)+" selected",1),R("button",{title:"Clear selection",onClick:U},"✕")])):tt("",!0)]),R("div",{ref_key:"scroller",ref:h,class:"rd-grid",role:"grid","aria-rowcount":G.value+1,onScroll:w,onClick:P},[R("div",v_,[R("div",{class:"rd-th chk",style:{cursor:"pointer"},onClick:ne},[R("input",{type:"checkbox",checked:H.value,"aria-label":"Select all",tabindex:"-1",style:{"pointer-events":"none"}},null,8,S_)]),(ae(!0),ie(Ae,null,et(s.value,ce=>(ae(),ie("div",{key:ce.key,class:Ze(["rd-th",{num:ce.type==="num"}]),role:"columnheader","aria-sort":v(ce),"data-col":ce.key,onClick:we=>_(ce,we)},[ct(de(ce.label),1),R("span",$_,de(v(ce)==="ascending"?"▲":v(ce)==="descending"?"▼":""),1)],10,w_))),128))]),R("div",{style:Bt({height:x.value+"px"})},null,4),(ae(!0),ie(Ae,null,et(C.value,ce=>(ae(),ie("div",{key:ce.slug,class:Ze(["rd-row",{sel:z(ce)}]),role:"row","data-slug":ce.slug,"aria-selected":z(ce)?"true":"false"},[R("div",k_,[R("input",{type:"checkbox",class:"rd-rowchk",checked:z(ce),"aria-label":"Select "+ce.name,tabindex:"-1",style:{"pointer-events":"none"}},null,8,L_)]),(ae(!0),ie(Ae,null,et(s.value,we=>(ae(),ie("div",{key:we.key,class:Ze(["rd-td",{num:we.type==="num"}]),role:"gridcell"},de(we.type==="num"?r(we.get(ce)):we.get(ce)),3))),128))],10,A_))),128)),R("div",{style:Bt({height:F.value+"px"})},null,4)],40,y_),R("div",E_,[ee[1]||(ee[1]=R("div",{class:"rd-td chk"},null,-1)),R("div",T_,"Σ "+de(r(G.value))+" groups",1),ee[2]||(ee[2]=R("div",{class:"rd-td"},null,-1)),ee[3]||(ee[3]=R("div",{class:"rd-td"},null,-1)),ee[4]||(ee[4]=R("div",{class:"rd-td"},null,-1)),ee[5]||(ee[5]=R("div",{class:"rd-td"},null,-1)),R("div",C_,de(r(te.value)),1),ee[6]||(ee[6]=R("div",{class:"rd-td"},null,-1)),ee[7]||(ee[7]=R("div",{class:"rd-td"},null,-1))])],8,p_))}},P_=["data-chart"],N_={class:"rd-ct"},M_={class:"rd-donutwrap"},I_=["aria-label"],R_=["d","fill","data-facet","data-key"],F_={class:"rd-legend"},O_=["data-facet","data-key"],D_=["data-chart"],B_={class:"rd-ct"},U_={class:"rd-bars"},j_=["data-facet","data-key"],K_={class:"rd-bl"},G_={class:"rd-bt"},H_={class:"rd-bv"},z_={__name:"DashboardChartsRail",setup(e){const t=ve("dashboardData",null),n=ve("selectionBus",null),o=ve("dashboardConfig",{}),a=(n==null?void 0:n.filterSet)||{},r=Object.fromEntries(Object.entries(o.facets||{}).map(([d,b])=>[d,b.get]));function s(d){var v;const b=((v=t==null?void 0:t.rows)==null?void 0:v.value)||[],_=Object.keys(a).filter(E=>!d.includes(E));return _.length?b.filter(E=>_.every(k=>{const A=r[k];return A?A(E)===a[k]:!0})):b}const i=se(()=>(o.charts||[]).map(d=>{var v,E;const b=((E=(v=o.facets)==null?void 0:v[d.facet])==null?void 0:E.get)||(k=>Be(k[d.facet])),_=Rr(s([d.facet]),b,d.topN);return{id:d.id,type:d.type,facet:d.facet,title:d.title,geometry:d.type==="bar"?fb(_):db(_)}})),l=(d,b)=>a[d]===b,c=d=>a[d]!=null;function u(d,b){!b||b==="Other"||!n||n.setFilter(d,a[d]===b?null:b)}function f(d){const b=d.target&&d.target.closest&&d.target.closest("[data-facet]");b&&u(b.getAttribute("data-facet"),b.getAttribute("data-key"))}return dt(` + .rd-charts{ display:flex; flex-direction:column; gap:var(--s3,12px); height:100%; min-height:0; padding:var(--s3,12px); + background:var(--rd-panel,#fff); overflow:auto; box-sizing:border-box; + font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; } + .rd-charts .rd-h{ font-weight:700; font-size:var(--fs-md,12px); text-transform:uppercase; letter-spacing:.5px; color:var(--rd-muted,#6b7686); } + .rd-chart{ border:1px solid var(--rd-line,#e2e6ec); border-radius:var(--r-lg,10px); background:var(--rd-bg,#f7f9fb); padding:10px; } + .rd-chart .rd-ct{ font-weight:700; font-size:var(--fs-sm,11px); color:var(--rd-ink,#1f2733); margin-bottom:6px; } + .rd-donutwrap{ display:flex; align-items:center; gap:10px; } + .rd-donut{ width:108px; height:108px; flex:0 0 auto; } + .rd-slice{ cursor:pointer; transition:opacity .18s, transform .18s; transform-box:view-box; transform-origin:center; } + .rd-slice:hover{ opacity:.82; } + /* Active slice pops out (scale) with a clear ink stroke; when a slice is selected the rest dim. */ + .rd-donut.has-sel .rd-slice{ opacity:.42; } + .rd-slice.on, .rd-donut.has-sel .rd-slice.on{ opacity:1; stroke:var(--rd-ink,#1f2733); stroke-width:2.5; + transform:scale(1.08); filter:drop-shadow(0 1px 2px rgba(31,39,51,.35)); } + .rd-legend{ display:flex; flex-direction:column; gap:2px; font-size:10.5px; color:#3a4456; max-height:108px; overflow:auto; flex:1 1 auto; } + .rd-li{ display:flex; align-items:center; gap:5px; cursor:pointer; white-space:nowrap; padding:1px 2px; border-radius:3px; } + .rd-li:hover{ background:#eef2f8; } .rd-li.on{ background:#fff4ea; font-weight:700; color:var(--rd-ink,#1f2733); } + .rd-li i{ width:9px; height:9px; border-radius:2px; flex:0 0 auto; } .rd-li b{ margin-left:auto; color:var(--rd-muted,#6b7686); font-variant-numeric:tabular-nums; } + .rd-bars{ display:flex; flex-direction:column; gap:3px; } + .rd-bar{ display:flex; align-items:center; gap:6px; cursor:pointer; font-size:10.5px; padding:1px 2px; border-radius:3px; } + .rd-bar:hover{ background:#eef2f8; } .rd-bar.on{ background:#fff4ea; font-weight:700; color:var(--rd-ink,#1f2733); } + .rd-bl{ flex:0 0 84px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:#3a4456; } + .rd-bt{ flex:1 1 auto; height:11px; background:#eef1f6; border-radius:3px; overflow:hidden; } + .rd-bf{ display:block; height:100%; border-radius:3px; transition:width .35s cubic-bezier(.4,0,.2,1); } + .rd-bv{ flex:0 0 auto; color:var(--rd-muted,#6b7686); font-variant-numeric:tabular-nums; min-width:30px; text-align:right; } +`,"rd-charts"),(d,b)=>(ae(),ie("aside",{class:"rd-charts","data-region":"charts-rail",onClick:f},[b[0]||(b[0]=R("div",{class:"rd-h"},"Charts",-1)),(ae(!0),ie(Ae,null,et(i.value,_=>(ae(),ie(Ae,{key:_.id},[_.type==="donut"?(ae(),ie("div",{key:0,class:"rd-chart","data-chart":_.facet},[R("div",N_,de(_.title),1),R("div",M_,[(ae(),ie("svg",{class:Ze(["rd-donut",{"has-sel":c(_.facet)}]),viewBox:"0 0 132 132",role:"img","aria-label":_.title+" donut"},[(ae(!0),ie(Ae,null,et(_.geometry,v=>(ae(),ie("path",{key:v.key,d:v.path,fill:v.color,class:Ze(["rd-slice",{on:l(_.facet,v.key)}]),"data-facet":_.facet,"data-key":v.key},[R("title",null,de(v.key)+": "+de(v.value)+" ("+de(v.pct)+"%)",1)],10,R_))),128))],10,I_)),R("div",F_,[(ae(!0),ie(Ae,null,et(_.geometry,v=>(ae(),ie("span",{key:v.key,class:Ze(["rd-li",{on:l(_.facet,v.key)}]),"data-facet":_.facet,"data-key":v.key},[R("i",{style:Bt({background:v.color})},null,4),ct(de(v.key),1),R("b",null,de(v.value),1)],10,O_))),128))])])],8,P_)):(ae(),ie("div",{key:1,class:"rd-chart","data-chart":_.facet},[R("div",B_,de(_.title),1),R("div",U_,[(ae(!0),ie(Ae,null,et(_.geometry,v=>(ae(),ie("div",{key:v.key,class:Ze(["rd-bar",{on:l(_.facet,v.key)}]),"data-facet":_.facet,"data-key":v.key},[R("span",K_,de(v.key),1),R("span",G_,[R("span",{class:"rd-bf",style:Bt({width:v.frac*100+"%",background:v.color})},null,4)]),R("span",H_,de(v.value),1)],10,j_))),128))])],8,D_))],64))),128))]))}},V_={class:"rd-detail","data-region":"detail-drawer"},W_={class:"rd-dh"},Y_={key:0,class:"rd-empty","data-detail-empty":""},q_={class:"rd-top"},J_=["src","alt"],X_={key:1,class:"rd-ph","data-detail-thumb":""},Z_={class:"rd-name","data-detail-name":""},Q_={class:"rd-meta"},ey={class:"rd-actions"},ty=["href","title"],ny=["href","title"],oy={class:"rd-rows"},ay={class:"rd-row"},ry={class:"v"},sy={key:0,class:"fam"},iy={class:"rd-row"},ly={class:"v"},cy={class:"rd-row"},uy={class:"v"},dy={class:"rd-row"},fy={class:"v"},gy={class:"rd-row"},py={class:"v"},hy={class:"rd-row"},my={class:"v"},by={__name:"DashboardDetailDrawer",setup(e){const t=ve("dashboardData",null),n=ve("selectionBus",null),o=ve("dashboardConfig",{}),a=Object.fromEntries(Object.entries(o.facets||{}).map(([h,m])=>[h,m.get])),r=t&&n?Ir({rowStore:t.rowStore,rows:t.rows,selectionSet:n.selectionSet,filterSet:n.filterSet,FACET_ACC:a}):null,s=pe(null),i=[];it(()=>{n&&(i.push(n.on("focusRow",h=>{h&&h.slug&&(s.value=h.slug)})),i.push(n.on("select",h=>{const m=h?[...h]:[];m.length&&(s.value=m[m.length-1])})))}),on(()=>{i.forEach(h=>{try{h()}catch{}}),i.length=0});const l=se(()=>{const h=s.value;return!h||!t||!t.rowStore||!t.rowStore.value?null:t.rowStore.value.get(h)||null}),c=h=>h==null||h===""?"—":Number(h).toLocaleString("en-US"),u=se(()=>{const h=l.value;return h?o.detail&&typeof o.detail.photo=="function"?!!o.detail.photo(h):!!(h.has_photo&&h.image_url):!1}),f=se(()=>o.detail||{});function d(h,m,w){if(typeof h=="function")try{return h(m)||w}catch{return w}return typeof h=="string"&&h?h.replace("{slug}",encodeURIComponent(m.slug||"")):w}const b=se(()=>{const h=l.value;if(!h)return null;const m=`https://pray.doxa.life/${encodeURIComponent(h.slug||"")}?source=doxalife`;return d(f.value.prayUrl,h,m)}),_=se(()=>{var S;const h=l.value;if(!h)return null;const w=`${typeof window<"u"&&((S=window.location)==null?void 0:S.origin)||"https://doxa.life"}/research/${encodeURIComponent(h.slug||"")}/`;return d(f.value.moreInfoUrl,h,w)}),v=se(()=>f.value.prayLabel||"Pray for this people group"),E=se(()=>f.value.moreInfoLabel||"More information");function k(){!r||!n||(!n.selectionSet.size&&s.value&&n.toggleSelect(s.value),r.exportCsv())}function A(){s.value=null,n&&typeof n.clearSelection=="function"&&n.clearSelection()}return dt(` + .rd-detail{ box-sizing:border-box; background:var(--rd-panel,#fff); border-left:1px solid var(--rd-line,#e2e6ec); + border-bottom:1px solid var(--rd-line,#e2e6ec); padding:var(--s3,12px); + font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; color:var(--rd-ink,#1f2733); flex:0 0 auto; } + .rd-detail .rd-dh{ display:flex; align-items:center; justify-content:space-between; gap:8px; + font-weight:700; font-size:var(--fs-md,12px); text-transform:uppercase; letter-spacing:.5px; + color:var(--rd-muted,#6b7686); margin-bottom:var(--s2,8px); } + .rd-detail .rd-detail-close{ background:none; border:none; padding:2px 4px; cursor:pointer; line-height:1; + font-size:15px; color:var(--rd-muted,#6b7686); border-radius:var(--r-md,6px); flex-shrink:0; } + .rd-detail .rd-detail-close:hover{ color:var(--rd-ink,#1f2733); background:var(--rd-bg,#f7f9fb); } + .rd-detail .rd-empty{ font-size:var(--fs-md,12px); color:var(--rd-muted,#6b7686); padding:var(--s1,4px) 0; } + .rd-detail .rd-top{ display:flex; gap:var(--s3,12px); align-items:flex-start; } + .rd-detail .rd-thumb{ width:64px; height:64px; border-radius:var(--r-md,6px); object-fit:cover; flex:0 0 auto; + border:1px solid var(--rd-line,#e2e6ec); display:block; } + .rd-detail .rd-ph{ width:64px; height:64px; border-radius:var(--r-md,6px); flex:0 0 auto; background:var(--rd-bg,#f7f9fb); + border:1px solid var(--rd-line,#e2e6ec); display:flex; align-items:center; justify-content:center; + color:var(--rd-muted,#6b7686); font-size:var(--fs-xs,10px); text-transform:uppercase; letter-spacing:.4px; } + .rd-detail .rd-name{ font-weight:800; font-size:var(--fs-xl,16px); line-height:1.2; color:var(--rd-ink,#1f2733); } + .rd-detail .rd-meta{ font-size:var(--fs-sm,11px); color:var(--rd-muted,#6b7686); margin-top:2px; } + .rd-detail .rd-rows{ display:flex; flex-direction:column; gap:2px; margin-top:var(--s3,12px); } + .rd-detail .rd-row{ display:flex; align-items:baseline; gap:var(--s2,8px); font-size:var(--fs-md,12px); + padding:2px 0; border-bottom:1px solid var(--rd-line,#e2e6ec); } + .rd-detail .rd-row:last-child{ border-bottom:0; } + .rd-detail .rd-row .k{ color:var(--rd-muted,#6b7686); flex:0 0 auto; min-width:118px; } + .rd-detail .rd-row .v{ color:var(--rd-ink,#1f2733); margin-left:auto; text-align:right; font-variant-numeric:tabular-nums; } + .rd-detail .rd-row .v .fam{ color:var(--rd-muted,#6b7686); } + .rd-detail .rd-exp{ margin-top:var(--s3,12px); width:100%; border:0; border-radius:var(--r-md,6px); cursor:pointer; + background:var(--rd-accent,#e67e22); color:#fff; font-weight:700; font-size:var(--fs-md,12px); padding:var(--s2,8px) var(--s3,12px); } + .rd-detail .rd-exp:hover{ background:#d8741c; } + .rd-detail .rd-actions{ display:flex; gap:var(--s2,8px); margin-top:var(--s3,12px); flex-wrap:wrap; } + .rd-detail .rd-act{ display:inline-flex; align-items:center; justify-content:center; gap:6px; text-decoration:none; + border:0; border-radius:var(--r-md,6px); cursor:pointer; font-weight:700; font-size:var(--fs-md,12px); + padding:var(--s2,8px) var(--s3,12px); line-height:1; } + .rd-detail .rd-act svg{ flex:0 0 auto; } + .rd-detail .rd-act-pray{ flex:1 1 auto; background:var(--rd-pray,#73A17F); color:#fff; } + .rd-detail .rd-act-pray:hover{ background:var(--rd-pray-hover,#5f8c6a); } + .rd-detail .rd-act-info{ flex:0 1 auto; background:var(--rd-bg,#f7f9fb); color:var(--rd-ink,#1f2733); + border:1px solid var(--rd-line,#e2e6ec); } + .rd-detail .rd-act-info:hover{ background:var(--rd-panel,#fff); border-color:var(--rd-muted,#6b7686); } +`,"rd-detaildrawer"),(h,m)=>(ae(),ie("section",V_,[R("div",W_,[m[0]||(m[0]=R("span",null,"Detail",-1)),l.value?(ae(),ie("button",{key:0,class:"rd-detail-close",type:"button","aria-label":"Close detail","data-detail-close":"",onClick:A},"✕")):tt("",!0)]),l.value?(ae(),ie(Ae,{key:1},[R("div",q_,[u.value?(ae(),ie("img",{key:0,class:"rd-thumb",src:l.value.image_url,alt:l.value.name,"data-detail-thumb":""},null,8,J_)):(ae(),ie("div",X_,"No photo")),R("div",null,[R("div",Z_,de(l.value.name||"—"),1),R("div",Q_,de(re(Be)(l.value.country_code)||"—")+" · "+de(re(Be)(l.value.religion)||"—"),1)])]),R("div",ey,[b.value?(ae(),ie("a",{key:0,class:"rd-act rd-act-pray",href:b.value,target:"_blank",rel:"noopener",title:v.value,"data-detail-pray":""},[m[1]||(m[1]=R("svg",{width:"16",height:"16",viewBox:"0 0 16 16","aria-hidden":"true"},[R("path",{d:"M8 2L10 6L14 6.5L11 9.5L11.5 14L8 12L4.5 14L5 9.5L2 6.5L6 6L8 2Z",fill:"currentColor"})],-1)),R("span",null,de(v.value),1)],8,ty)):tt("",!0),_.value?(ae(),ie("a",{key:1,class:"rd-act rd-act-info",href:_.value,target:"_blank",rel:"noopener",title:E.value,"data-detail-moreinfo":""},[m[2]||(m[2]=R("svg",{width:"16",height:"16",viewBox:"0 0 16 16","aria-hidden":"true"},[R("circle",{cx:"8",cy:"8",r:"6",stroke:"currentColor","stroke-width":"2",fill:"none"}),R("path",{d:"M8 6V8M8 10H8.01",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)),R("span",null,de(E.value),1)],8,ny)):tt("",!0)]),R("div",oy,[R("div",ay,[m[3]||(m[3]=R("span",{class:"k"},"Language",-1)),R("span",ry,[ct(de(re(Be)(l.value.primary_language)||"—"),1),l.value.imb_language_family?(ae(),ie("span",sy," ("+de(l.value.imb_language_family)+")",1)):tt("",!0)])]),R("div",iy,[m[4]||(m[4]=R("span",{class:"k"},"Population",-1)),R("span",ly,de(c(l.value.population)),1)]),R("div",cy,[m[5]||(m[5]=R("span",{class:"k"},"People praying",-1)),R("span",uy,de(c(l.value.people_praying)),1)]),R("div",dy,[m[6]||(m[6]=R("span",{class:"k"},"People committed",-1)),R("span",fy,de(c(l.value.people_committed)),1)]),R("div",gy,[m[7]||(m[7]=R("span",{class:"k"},"Adopted by churches",-1)),R("span",py,de(c(l.value.adopted_by_churches)),1)]),R("div",hy,[m[8]||(m[8]=R("span",{class:"k"},"Engagement",-1)),R("span",my,de(re(Be)(l.value.engagement_status)||"—"),1)])]),R("button",{class:"rd-exp",type:"button","data-detail-export":"",onClick:k},"Export this selection ↓")],64)):(ae(),ie("div",Y_,"Select a people group to see detail"))]))}},_y="rgba(120, 128, 134, 0.28)",Uc="36px",jc=()=>{};function yy(e,t={}){const{enabled:n=!0}=t;if(!n||!e)return jc;const o=Array.from(e.querySelectorAll(".map-scroll-edge"));if(!o.length)return jc;const a=A=>A.classList.contains("map-scroll-edge--left");for(const A of o)A.style.background=`linear-gradient(${a(A)?"to right":"to left"}, ${_y} ${Uc}, transparent ${Uc})`,A.style.opacity="0",A.style.transition="opacity 0.16s ease",A.style.userSelect="none",A.style.webkitUserSelect="none";const r=A=>{A.style.opacity="1"},s=A=>{A.style.opacity="0"},i=()=>o.find(A=>!a(A))||null,l=new Set;let c=!1,u=null;const f=()=>{for(const A of o)l.has(A)||s(A)},d=()=>{const A=i();A&&(r(A),u&&clearTimeout(u),u=setTimeout(f,250))},b=()=>d(),_=A=>{if(!(A.touches&&A.touches.length===1))return;const h=A.target;h&&h.classList&&h.classList.contains("map-scroll-edge")||d()},v=()=>{u&&clearTimeout(u),f()};e.addEventListener("wheel",b,{passive:!0}),e.addEventListener("touchmove",_,{passive:!0}),e.addEventListener("touchend",v,{passive:!0}),e.addEventListener("touchcancel",v,{passive:!0});const E=()=>{c||d()};typeof window<"u"&&window.addEventListener("scroll",E,{passive:!0});const k=[];for(const A of o){const h=()=>{l.add(A),r(A)},m=()=>{l.delete(A),s(A)},w=()=>{c=!0,r(A)},S=()=>{c=!1,s(A)};A.addEventListener("mouseenter",h),A.addEventListener("mouseleave",m),A.addEventListener("touchstart",w,{passive:!0}),A.addEventListener("touchend",S,{passive:!0}),k.push(()=>{A.removeEventListener("mouseenter",h),A.removeEventListener("mouseleave",m),A.removeEventListener("touchstart",w),A.removeEventListener("touchend",S)})}return function(){u&&(clearTimeout(u),u=null),e.removeEventListener("wheel",b),e.removeEventListener("touchmove",_),e.removeEventListener("touchend",v),e.removeEventListener("touchcancel",v),typeof window<"u"&&window.removeEventListener("scroll",E);for(const h of k)h();for(const h of o)s(h)}}const Gn={mapbox:{global:"mapboxgl",js:"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js",css:"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.css"},maplibre:{global:"maplibregl",js:"https://cdn.jsdelivr.net/npm/maplibre-gl@5/dist/maplibre-gl.js",css:"https://cdn.jsdelivr.net/npm/maplibre-gl@5/dist/maplibre-gl.css"}},vy=Gn.mapbox.css,Sy="https://tiles.openfreemap.org/styles/liberty";function Xr(e){var n;const t=((n=Gn[e])==null?void 0:n.global)||Gn.mapbox.global;return typeof window<"u"?window[t]:void 0}async function wy(e){const t=Gn[e]||Gn.mapbox;if(Xr(e)||typeof document>"u")return;if(!document.querySelector(`link[href="${t.css}"]`)){const o=document.createElement("link");o.rel="stylesheet",o.href=t.css,document.head.appendChild(o)}const n=document.querySelector(`script[src="${t.js}"]`);if(n){if(Xr(e))return;await new Promise(o=>{n.addEventListener("load",o,{once:!0}),n.addEventListener("error",o,{once:!0})});return}await new Promise((o,a)=>{const r=document.createElement("script");r.src=t.js,r.async=!1,r.addEventListener("load",o,{once:!0}),r.addEventListener("error",()=>a(new Error(`[useMapInstance] Failed to load ${e} engine script`)),{once:!0}),document.head.appendChild(r)})}async function $y(e,t){const n=e.getRootNode();if(!(n instanceof ShadowRoot))return;const o=s=>new Promise(i=>setTimeout(i,s)),a=n.querySelector(`link[href="${t}"]`);if(a){if(a.sheet)return;await Promise.race([new Promise(s=>{a.addEventListener("load",s,{once:!0}),a.addEventListener("error",s,{once:!0})}),o(2e3)]);return}const r=document.createElement("link");r.rel="stylesheet",r.href=t,await Promise.race([new Promise(s=>{r.addEventListener("load",s,{once:!0}),r.addEventListener("error",s,{once:!0}),n.prepend(r)}),o(2e3)])}function Ay(e){return typeof e=="string"&&/^https?:\/\//.test(e)?e:Sy}const ky=85.0511,Kc=-2,Ly=0,Ey=-60;function Gc(e){return(1-Math.log(Math.tan(Math.PI/4+e*Math.PI/180/2))/Math.PI)/2}function Ty(e,t,n,o){if(!e||e<=0||!t||t<=0)return Ly;const a=Math.log2(e/512),r=Gc(o)-Gc(ky),s=Math.log2(t/(512*r)),i=Math.max(a,s);return Math.max(Kc,Math.min(i,(n??18)-1))}function Cy({containerRef:e,accessToken:t,style:n,provider:o="mapbox",center:a=[20,10],zoom:r=2,minZoom:s=void 0,maxZoom:i=18,pitch:l=0,bearing:c=0,renderWorldCopies:u=!0,showEdgeBorders:f=!0,southCutoff:d=Ey,maxBounds:b=void 0}){const _=pe(null),v=pe(!1);let E=null,k=null;const A=o==="maplibre";async function h(){var P;if(!e.value){console.error("containerRef.value is null — call initializeMap() inside onMounted()");return}await wy(o);const w=Xr(o);if(!w){console.error(`[useMapInstance] ${A?"maplibregl":"mapboxgl"} is not available. Add the ${A?"MapLibre":"Mapbox"} GL JS script to your page.`);return}if(!A){if(!t){console.error('No Mapbox access token provided. Pass "tk" in profile-config JSON.');return}if(!t.startsWith("pk.")){console.error('Mapbox token looks invalid (expected "pk." prefix). Got:',t.slice(0,10)+"...");return}}await $y(e.value,A?Gn.maplibre.css:vy),await new Promise(H=>requestAnimationFrame(H));const S=e.value,T=S.clientWidth,C=S.clientHeight;if(T===0||C===0){console.error(`[useMapInstance] Container has ZERO dimensions (${T}×${C}). Map will be invisible. Check that parent elements have CSS sizing.`);let H=S.parentElement,ne=0;for(;H&&ne<5;)H=H.parentElement,ne++}const x=t;A||(w.accessToken=x);const F=()=>typeof window<"u"&&window.innerWidth>=1024,W=(H,ne)=>{if(!F())return Kc;const U=Ty(H,ne,i,d);return typeof s=="number"?Math.max(s,U):U},z=W(S.clientWidth,S.clientHeight);A?_.value=new w.Map({container:e.value,style:Ay(n),center:a,zoom:r,minZoom:z,maxZoom:i,pitch:l,bearing:c,dragRotate:!1,renderWorldCopies:u,...b?{maxBounds:b}:{},attributionControl:!1}):_.value=new w.Map({accessToken:x,container:e.value,style:n,center:a,zoom:r,minZoom:z,maxZoom:i,pitch:l,bearing:c,dragRotate:!1,touchPitch:!1,renderWorldCopies:u,...b?{maxBounds:b}:{},attributionControl:!1});try{_.value.touchZoomRotate.disableRotation()}catch{}k=yy(((P=e.value)==null?void 0:P.parentElement)||null,{enabled:f}),E=()=>{const H=_.value;if(!H)return;const ne=W(S.clientWidth,S.clientHeight);H.setMinZoom(ne),H.getZoom(){requestAnimationFrame(()=>{var H;(H=_.value)==null||H.resize(),_.value&&_.value.setMinZoom(W(S.clientWidth,S.clientHeight)),v.value=!0})})}function m(){_.value&&(E&&(_.value.off("resize",E),typeof window<"u"&&(window.removeEventListener("resize",E),window.removeEventListener("orientationchange",E)),E=null),k&&(k(),k=null),_.value.remove(),_.value=null,v.value=!1)}return{map:_,isMapReady:v,initializeMap:h,destroy:m}}const xy=["data-projection"],Py={class:"rd-legend-map","data-map-legend":"","aria-label":"UPG count legend"},Ny={__name:"DashboardMapPanel",setup(e){var we,Pe,Ge,Ue,je;const t=ve("dashboardData",null),n=ve("selectionBus",null),o=ve("mapboxToken",pe("")),a=ve("dashboardConfig",{}),r=(n==null?void 0:n.filterSet)||{},s=Object.fromEntries(Object.entries(a.facets||{}).map(([K,le])=>[K,le.get])),i=se(()=>{var he;const K=((he=t==null?void 0:t.rows)==null?void 0:he.value)||[],le=Object.keys(r);return le.length?K.filter(y=>le.every(L=>{const $=s[L];return $?$(y)===r[L]:!0})):K}),l=((we=a.map)==null?void 0:we.geoFacet)||"country_code",c=((Ge=(Pe=a.facets)==null?void 0:Pe[l])==null?void 0:Ge.geoIso)||(K=>{const le=K[l];return le&&le.value?le.value:null}),u=s[l]||(K=>Be(K[l])),f=se(()=>{var le;const K=new Map;for(const he of((le=t==null?void 0:t.rows)==null?void 0:le.value)||[]){const y=c(he);y&&K.set(y,u(he)||y)}return K}),d=se(()=>{const K=new Map;for(const le of i.value){const he=c(le);he&&K.set(he,(K.get(he)||0)+1)}return K}),b=pe(null),{map:_,isMapReady:v,initializeMap:E,destroy:k}=Cy({containerRef:b,accessToken:re(o)||o&&o.value||"",center:[28,18],zoom:1.45,minZoom:1});let A=!1,h=null,m=0;function w(){m||(m=requestAnimationFrame(()=>{m=0;const K=_.value;if(K&&typeof K.resize=="function")try{K.resize()}catch{}}))}const S=((Ue=a.map)==null?void 0:Ue.bins)||[{upTo:5,c:"#e0e0e0",l:"1–4"},{upTo:20,c:"#b0b0b0",l:"5–19"},{upTo:60,c:"#808080",l:"20–59"},{upTo:150,c:"#404040",l:"60–149"},{upTo:1/0,c:"#000000",l:"150+"}];function T(K){if(!K)return"#f2f2f2";for(const le of S)if(K({c:K.c,l:K.l})),x=((je=a.map)==null?void 0:je.selectedColor)||"#ff6a00";function F(){const K=d.value,le=[],he=[];K.forEach((I,B)=>{le.push(B,T(I)),he.push(B)});const y=le.length?["match",["get","iso_3166_1_alpha_3"],...le,"#f2f2f2"]:"#f2f2f2",$=Object.keys(r).length>0&&he.length?["match",["get","iso_3166_1_alpha_3"],...he.flatMap(I=>[I,.92]),.12]:.78;return{fillColor:y,fillOpacity:$}}function W(){const K=_.value;if(!K||!K.getLayer("rd-choropleth"))return;const{fillColor:le,fillOpacity:he}=F();K.setPaintProperty("rd-choropleth","fill-color",le),K.setPaintProperty("rd-choropleth","fill-opacity",he);const y=K.getSource("rd-bubbles");y&&y.setData(z())}function z(){return{type:"FeatureCollection",features:i.value.filter(K=>Number(K.latitude)&&Number(K.longitude)).map(K=>({type:"Feature",geometry:{type:"Point",coordinates:[Number(K.longitude),Number(K.latitude)]},properties:{pop:Number(K.population)||0,slug:K.slug||"",name:K.name||""}}))}}function P(){var he;const K=n==null?void 0:n.selectionSet,le=((he=t==null?void 0:t.rows)==null?void 0:he.value)||[];return!K||!K.size?{type:"FeatureCollection",features:[]}:{type:"FeatureCollection",features:le.filter(y=>K.has(y.slug)&&Number(y.latitude)&&Number(y.longitude)).map(y=>({type:"Feature",geometry:{type:"Point",coordinates:[Number(y.longitude),Number(y.latitude)]},properties:{slug:y.slug||"",name:y.name||""}}))}}function H(){const K=_.value;if(!K)return;const le=K.getSource("rd-bubble-selected");le&&le.setData(P())}function ne(){const K=_.value;if(!K||A)return;A=!0,K.getSource("rd-countries")||K.addSource("rd-countries",{type:"vector",url:"mapbox://mapbox.country-boundaries-v1"});const{fillColor:le,fillOpacity:he}=F();K.addLayer({id:"rd-choropleth",type:"fill",source:"rd-countries","source-layer":"country_boundaries",paint:{"fill-color":le,"fill-opacity":he,"fill-outline-color":"#ffffff"}}),K.addSource("rd-bubbles",{type:"geojson",data:z()}),K.addLayer({id:"rd-bubble-layer",type:"circle",source:"rd-bubbles",paint:{"circle-radius":["interpolate",["linear"],["zoom"],1,2,6,5],"circle-color":"#e67e22","circle-opacity":.6,"circle-stroke-width":1,"circle-stroke-color":"#fff"}}),K.addSource("rd-bubble-selected",{type:"geojson",data:P()}),K.addLayer({id:"rd-bubble-selected",type:"circle",source:"rd-bubble-selected",paint:{"circle-radius":["interpolate",["linear"],["zoom"],1,5,6,11],"circle-color":x,"circle-opacity":.18,"circle-stroke-width":3,"circle-stroke-color":x,"circle-stroke-opacity":.95}}),K.on("click","rd-choropleth",U),K.on("click","rd-bubble-layer",Y),K.on("mouseenter","rd-choropleth",()=>{K.getCanvas().style.cursor="pointer"}),K.on("mouseleave","rd-choropleth",()=>{K.getCanvas().style.cursor=""}),K.on("mouseenter","rd-bubble-layer",()=>{K.getCanvas().style.cursor="pointer"}),K.on("mouseleave","rd-bubble-layer",()=>{K.getCanvas().style.cursor=""});try{window.__rdashMap=K,window.__rdashClickAt=(y,L)=>{const $=K.project([y,L]),I=K.queryRenderedFeatures($,{layers:["rd-choropleth"]});return I&&I[0]?(U({features:I}),I[0].properties&&I[0].properties.iso_3166_1_alpha_3):null},window.__rdashPinAt=(y,L)=>{const $=K.project([y,L]),I=K.queryRenderedFeatures([[$.x-7,$.y-7],[$.x+7,$.y+7]],{layers:["rd-bubble-layer"]});return I&&I[0]?(Y({features:[I[0]]}),I[0].properties&&I[0].properties.slug):null}}catch{}te(),n&&n.on("select",H),H(),n&&n.on("focusRow",({slug:y}={})=>{var I;if(!y)return;const L=(((I=t==null?void 0:t.rows)==null?void 0:I.value)||[]).find(B=>B.slug===y),$=_.value;if($&&L&&Number(L.latitude)&&Number(L.longitude))try{$.flyTo({center:[Number(L.longitude),Number(L.latitude)],zoom:5.5,duration:1200})}catch{}})}function U(K){const le=_.value;if(le&&K.point){const $=le.queryRenderedFeatures([[K.point.x-5,K.point.y-5],[K.point.x+5,K.point.y+5]],{layers:["rd-bubble-layer"]});if($&&$.length)return}const he=K.features&&K.features[0];if(!he||!n)return;const y=he.properties&&he.properties.iso_3166_1_alpha_3,L=f.value.get(y);L&&(n.setFilter(l,r[l]===L?null:L),n.emit("mapFocus",{facet:l,value:L}))}function Y(K){const le=K.features&&K.features[0];if(!le||!n)return;const he=le.properties&&le.properties.slug;he&&(n.toggleSelect(he),n.emit("focusRow",{slug:he,name:le.properties&&le.properties.name}))}it(async()=>{await E();const K=_.value;K&&(K.isStyleLoaded()?ne():K.on("load",ne),K.on("idle",()=>{!A&&K.isStyleLoaded()&&ne()}),typeof ResizeObserver<"u"&&b.value&&(h=new ResizeObserver(w),h.observe(b.value)))}),on(()=>{if(h){try{h.disconnect()}catch{}h=null}m&&(cancelAnimationFrame(m),m=0);try{k&&k()}catch{}}),bt([i,v],W);const J=pe("globe");function te(){const K=_.value;if(K)try{K.setProjection(J.value)}catch{}}function G(){J.value=J.value==="globe"?"mercator":"globe",te()}function q(K){const le=K.filter(I=>Number(I.latitude)&&Number(I.longitude));if(!le.length)return null;let he=180,y=90,L=-180,$=-90;for(const I of le){const B=Number(I.longitude),j=Number(I.latitude);BL&&(L=B),j$&&($=j)}return[[he,y],[L,$]]}function ee(){const K=_.value;if(!K)return;if(!Object.keys(r).length){try{K.flyTo({center:[28,18],zoom:1.45,duration:1e3})}catch{}return}const le=q(i.value);if(le)try{K.fitBounds(le,{padding:70,duration:1200,maxZoom:5.5})}catch{}}let ce=null;return bt(()=>JSON.stringify(r),()=>{clearTimeout(ce),ce=setTimeout(ee,260)}),dt(` + .rd-mapwrap{ position:relative; width:100%; height:100%; min-height:0; background:#dfe6ef; } + .rd-mapwrap .rd-mapc{ position:absolute; inset:0; } + .rd-maptag{ position:absolute; left:8px; bottom:8px; z-index:2; font-size:10px; color:#33415588; background:#ffffffcc; padding:2px 6px; border-radius:4px; } + .rd-proj{ position:absolute; right:8px; top:8px; z-index:3; font-size:11px; font-weight:700; cursor:pointer; user-select:none; + background:#1a1a2ecc; color:#fff; border:1px solid #ffffff33; border-radius:6px; padding:4px 9px; backdrop-filter:blur(4px); } + .rd-proj:hover{ background:#1a1a2e; } + .rd-legend-map{ position:absolute; right:8px; bottom:8px; z-index:2; background:#ffffffe8; border:1px solid var(--rd-line,#e2e6ec); + border-radius:var(--r-md,6px); padding:6px 8px; backdrop-filter:blur(3px); box-sizing:border-box; max-width:148px; + font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; } + .rd-legend-map .lg-h{ font-size:9px; font-weight:700; text-transform:uppercase; letter-spacing:.4px; color:var(--rd-muted,#6b7686); margin-bottom:4px; } + .rd-legend-map .lg-row{ display:flex; align-items:center; gap:6px; font-size:10px; color:#3a4456; line-height:1.5; } + .rd-legend-map .lg-sw{ width:11px; height:11px; border-radius:2px; flex:0 0 auto; border:1px solid #00000014; } +`,"rd-mappanel"),(K,le)=>(ae(),ie("div",{class:"rd-mapwrap","data-sub":"map","data-projection":J.value},[R("div",{ref_key:"mapContainer",ref:b,class:"rd-mapc","data-map-canvas":""},null,512),R("span",{class:"rd-proj",role:"button",tabindex:"0","data-proj-toggle":"",onClick:G},de(J.value==="globe"?"🌐 Globe":"▭ Flat"),1),le[1]||(le[1]=R("div",{class:"rd-maptag"},"UPG choropleth · click a country to filter · click a pin to select",-1)),R("div",Py,[le[0]||(le[0]=R("div",{class:"lg-h"},"UPGs / country",-1)),(ae(!0),ie(Ae,null,et(re(C),he=>(ae(),ie("div",{key:he.l,class:"lg-row"},[R("span",{class:"lg-sw",style:Bt({background:he.c})},null,4),R("span",null,de(he.l),1)]))),128))])],8,xy))}},mn={Chamacoco:"Zamucoan",Ninam:"Yanomaman",Yagua:"Yaguan",Muinane:"Witotoan",Finnish:"Uralic","Hill Mari":"Uralic",Mansi:"Uralic","Meadow Mari":"Uralic","North Saami":"Uralic",Carabayo:"Unclassified",Kujarge:"Unclassified",Shabo:"Unclassified",Ainu:"Turkic",Kazakh:"Turkic","Khorasani Turkish":"Turkic",Kyrgyz:"Turkic","Northern Uzbek":"Turkic","South Azerbaijani":"Turkic",Turkish:"Turkic",Tuvan:"Turkic",Uyghur:"Turkic",Amundava:"Tupian",Araweté:"Tupian","Asurini of Xingú":"Tupian","Avá-Canoeiro":"Tupian",Awetí:"Tupian",Kamayurá:"Tupian",Karo:"Tupian",Morerebi:"Tupian",Tenharim:"Tupian","Uru-Eu-Wau-Wau":"Tupian","Uru-Pa-In":"Tupian",Wayampi:"Tupian","Zo’é":"Tupian",Evenki:"Tungusic",Xibe:"Tungusic",Carapana:"Tucanoan",Cubeo:"Tucanoan",Desano:"Tucanoan",Macuna:"Tucanoan",Piratapuyo:"Tucanoan",Siona:"Tucanoan",Siriano:"Tucanoan",Tucano:"Tucanoan",Tuyuca:"Tucanoan",Waimaha:"Tucanoan",Tay:"Trans-New Guinea",Adi:"Sino-Tibetan",Akha:"Sino-Tibetan","Amdo Tibetan":"Sino-Tibetan",Axi:"Sino-Tibetan",Biyo:"Sino-Tibetan","Boro (India)":"Sino-Tibetan",Brokkat:"Sino-Tibetan",Bugun:"Sino-Tibetan",Byangsi:"Sino-Tibetan","Central Lalo":"Sino-Tibetan","Central Tibetan":"Sino-Tibetan",Chak:"Sino-Tibetan",Chalikha:"Sino-Tibetan",Chaudangsi:"Sino-Tibetan",Chocangacakha:"Sino-Tibetan",Darlong:"Sino-Tibetan",Dhimal:"Sino-Tibetan","Digaro-Mishmi":"Sino-Tibetan",Dzalakha:"Sino-Tibetan","Eastern Nisu":"Sino-Tibetan",Ersu:"Sino-Tibetan",Gahri:"Sino-Tibetan",Gongduk:"Sino-Tibetan",Gyalsumdo:"Sino-Tibetan",Hani:"Sino-Tibetan","Idu-Mishmi":"Sino-Tibetan",Kaike:"Sino-Tibetan",Kanashi:"Sino-Tibetan",Katso:"Sino-Tibetan",Khamba:"Sino-Tibetan",Koireng:"Sino-Tibetan",Kucong:"Sino-Tibetan",Kurtokha:"Sino-Tibetan",Ladakhi:"Sino-Tibetan",Lakha:"Sino-Tibetan","Lang’e":"Sino-Tibetan",Lhokpu:"Sino-Tibetan",Lolopo:"Sino-Tibetan",Lunanakha:"Sino-Tibetan","Mandarin Chinese":"Sino-Tibetan",Meitei:"Sino-Tibetan","Miju-Mishmi":"Sino-Tibetan",Mpi:"Sino-Tibetan",Na:"Sino-Tibetan",Namuyi:"Sino-Tibetan",Narua:"Sino-Tibetan",Naxi:"Sino-Tibetan","Northern Muji":"Sino-Tibetan",Nuosu:"Sino-Tibetan",Nupbikha:"Sino-Tibetan",Nyenkha:"Sino-Tibetan",Olekha:"Sino-Tibetan",Pahari:"Sino-Tibetan",Pattani:"Sino-Tibetan","Phana’":"Sino-Tibetan",Phula:"Sino-Tibetan",Phunoi:"Sino-Tibetan",Puma:"Sino-Tibetan",Puroik:"Sino-Tibetan",Raji:"Sino-Tibetan",Rawat:"Sino-Tibetan",Sani:"Sino-Tibetan",Sherdukpen:"Sino-Tibetan",Sherpa:"Sino-Tibetan",Shuhi:"Sino-Tibetan",Sila:"Sino-Tibetan",Singpho:"Sino-Tibetan",Sunwar:"Sino-Tibetan","Tawang Monpa":"Sino-Tibetan",Tseku:"Sino-Tibetan",Tshangla:"Sino-Tibetan",Usoi:"Sino-Tibetan","Western Minyag":"Sino-Tibetan","Wusa Nasu":"Sino-Tibetan","Xiang Chinese":"Sino-Tibetan",Yakkha:"Sino-Tibetan","Youle Jinuo":"Sino-Tibetan","Yue Chinese":"Sino-Tibetan",Zakhring:"Sino-Tibetan","Afghan Sign Language":"Sign Language","Albanian Sign Language":"Sign Language","Algerian Sign Language":"Sign Language","American Sign Language":"Sign Language","Armenian Sign Language":"Sign Language","British Sign Language":"Sign Language","Bulgarian Sign Language":"Sign Language","Cambodian Sign Language":"Sign language","Cuban Sign Language":"Sign Language","Egyptian Sign Language":"Sign Language","Greek Sign Language":"Sign Language","Guinean Sign Language":"Sign Language","Hong Kong Sign Language":"Sign Language","Icelandic Sign Language":"Sign Language","Iranian Sign Language":"Sign Language","Israeli Sign Language":"Sign Language","Jamaican Sign Language":"Sign Language","Jordanian Sign Language":"Sign Language","Laos Sign Language":"Sign Language","Libyan Sign Language":"Sign Language","Maltese Sign Language":"Sign Language","Mauritian Sign Language":"Sign Language","Moroccan Sign Language":"Sign Language","Mozambican Sign Language":"Sign Language","Myanmar Sign Language":"Sign language","Natural Sign Language":"Sign Language","Pakistan Sign Language":"Sign Language","Papua New Guinean Sign Language":"Sign language","Russian Sign Language":"Sign Language","Saudi Arabian Sign Language":"Sign Language","Sign Language of the Netherlands":"Sign Language","Solomon Islands Sign Language":"Sign Language","Sri Lankan Sign Language":"Sign Language","Swedish Sign Language":"Sign Language","Turkish Sign Language":"Sign Language","Northern Conchucos Ancash Quechua":"Quechuan","Northern Pastaza Quichua":"Quechuan",Hupdë:"Puinavean",Amahuaca:"Panoan",Korubo:"Panoan",Sharanahua:"Panoan","Shipibo-Conibo":"Panoan",Yaminahua:"Panoan",Yawanawa:"Panoan",Afitti:"Nilo-Saharan",Assangori:"Nilo-Saharan","Beli (South Sudan)":"Nilo-Saharan",Berta:"Nilo-Saharan",Burun:"Nilo-Saharan","Dar Daju Daju":"Nilo-Saharan","Dar Fur Daju":"Nilo-Saharan","Dar Sila Daju":"Nilo-Saharan",Dazaga:"Nilo-Saharan","Dendi (Benin)":"Nilo-Saharan",Dilling:"Nilo-Saharan",Fur:"Nilo-Saharan",Gbaya:"Nilo-Saharan",Ghulfan:"Nilo-Saharan",Gwama:"Nilo-Saharan","Humburi Senni Songhay":"Nilo-Saharan",Jopadhola:"Nilo-Saharan",Kadaru:"Nilo-Saharan",Kanga:"Nilo-Saharan",Karanga:"Nilo-Saharan",Karko:"Nilo-Saharan",Kebu:"Nilo-Saharan",Keiga:"Nilo-Saharan",Keliko:"Nilo-Saharan",Kendeje:"Nilo-Saharan",Kibet:"Nilo-Saharan","Komo (Sudan)":"Nilo-Saharan",Korandje:"Nilo-Saharan",Kulfa:"Nilo-Saharan",Kwegu:"Nilo-Saharan",Laarim:"Nilo-Saharan",Logorik:"Nilo-Saharan",Majang:"Nilo-Saharan","Manga Kanuri":"Nilo-Saharan",Mango:"Nilo-Saharan",Mararit:"Nilo-Saharan",Marfa:"Nilo-Saharan",Midob:"Nilo-Saharan","Mo’da":"Nilo-Saharan",Morom:"Nilo-Saharan",Moru:"Nilo-Saharan",Naba:"Nilo-Saharan",Nara:"Nilo-Saharan",Njalgulgule:"Nilo-Saharan",Nuer:"Nilo-Saharan","Nyamusa-Molo":"Nilo-Saharan",Nyangatom:"Nilo-Saharan","Olu’bo":"Nilo-Saharan",Opo:"Nilo-Saharan",Päri:"Nilo-Saharan","Sara Kaba Naa":"Nilo-Saharan",Surbakhal:"Nilo-Saharan",Tadaksahak:"Nilo-Saharan","Tama (Chad)":"Nilo-Saharan",Temein:"Nilo-Saharan",Thuri:"Nilo-Saharan","Tirmaga-Chai Suri":"Nilo-Saharan",Toposa:"Nilo-Saharan",Tumtum:"Nilo-Saharan","Wali (Sudan)":"Nilo-Saharan","Yerwa Kanuri":"Nilo-Saharan",Yulu:"Nilo-Saharan",Zaghawa:"Nilo-Saharan","Adamawa Fulfulde":"Niger-Congo",Akaselem:"Niger-Congo","Amba (Uganda)":"Niger-Congo",Anii:"Niger-Congo",Baangi:"Niger-Congo",Badyara:"Niger-Congo","Bago-Kusuntu":"Niger-Congo",Bai:"Niger-Congo","Bainouk-Gunyaamolo":"Niger-Congo",Bamanankan:"Niger-Congo","Banda-Mbrès":"Niger-Congo",Bandial:"Niger-Congo",Bankagooma:"Niger-Congo","Belanda Viri":"Niger-Congo",Bemba:"Niger-Congo",Bolgo:"Niger-Congo","Bon Gula":"Niger-Congo",Bua:"Niger-Congo",Chichewa:"Niger-Congo","Chung (Cameroon)":"Niger-Congo","Ci Gbe":"Niger-Congo",Degema:"Niger-Congo",Dek:"Niger-Congo",Dhimba:"Niger-Congo",Dogoso:"Niger-Congo","East Limba":"Niger-Congo",Engenni:"Niger-Congo",Epie:"Niger-Congo",Éwé:"Niger-Congo",Fania:"Niger-Congo",Foodo:"Niger-Congo",Fwe:"Niger-Congo",Gciriku:"Niger-Congo",Gwa:"Niger-Congo",Herero:"Niger-Congo",Ibuoro:"Niger-Congo","Jenaama Bozo":"Niger-Congo",Jita:"Niger-Congo",Jula:"Niger-Congo",Kabiyè:"Niger-Congo",Kadung:"Niger-Congo",Kakabe:"Niger-Congo",Kalamsé:"Niger-Congo","Kami (Tanzania)":"Niger-Congo","Kango (Bas-Uélé District)":"Niger-Congo",Kasem:"Niger-Congo","Kelengaxo Bozo":"Niger-Congo",Khe:"Niger-Congo",Khisa:"Niger-Congo",Kim:"Niger-Congo",Kinyarwanda:"Niger-Congo",Kipfokomu:"Niger-Congo",Kitharaka:"Niger-Congo",Kiyombe:"Niger-Congo",Ko:"Niger-Congo",Koalib:"Niger-Congo",Koke:"Niger-Congo",Konongo:"Niger-Congo","Koro Nulu":"Niger-Congo","Koro Zuba":"Niger-Congo",Kuhane:"Niger-Congo",Kunda:"Niger-Congo",Kuranko:"Niger-Congo",Kuria:"Niger-Congo",Kwangali:"Niger-Congo",Lame:"Niger-Congo",Laru:"Niger-Congo",Lopa:"Niger-Congo","Makhuwa-Meetto":"Niger-Congo","Makhuwa-Shirima":"Niger-Congo","Malawi Nyiha":"Niger-Congo",Mandinka:"Niger-Congo",Mankanya:"Niger-Congo",Mansoanka:"Niger-Congo",Mbukushu:"Niger-Congo","Mende (Sierra Leone)":"Niger-Congo",Miyobe:"Niger-Congo",Mushungulu:"Niger-Congo","Mwali Comorian":"Niger-Congo","Mwera (Chimwera)":"Niger-Congo",Ndemli:"Niger-Congo",Ndengereko:"Niger-Congo",Ndumu:"Niger-Congo",Ndunga:"Niger-Congo","Ndzwani Comorian":"Niger-Congo",Ngile:"Niger-Congo","Northwest Gbaya":"Niger-Congo",Notre:"Niger-Congo",Nyamwanga:"Niger-Congo",Nyankore:"Niger-Congo",Nyengo:"Niger-Congo",Okpamheri:"Niger-Congo",Osatu:"Niger-Congo","Pana (Burkina Faso)":"Niger-Congo",Pulaar:"Niger-Congo",Pular:"Niger-Congo",Rufiji:"Niger-Congo","Sankaran Maninka":"Niger-Congo",Sapo:"Niger-Congo","Senara Sénoufo":"Niger-Congo",Shanga:"Niger-Congo",Sininkere:"Niger-Congo","Southern Ngbandi":"Niger-Congo",Swahili:"Niger-Congo","Syenara Sénoufo":"Niger-Congo",Tagbu:"Niger-Congo",Tagoi:"Niger-Congo",Tegali:"Niger-Congo",Tem:"Niger-Congo","Tiéyaxo Bozo":"Niger-Congo",Tiyaa:"Niger-Congo",Tocho:"Niger-Congo","Tonga (Zambia)":"Niger-Congo",Totela:"Niger-Congo","Toura (Côte d’Ivoire)":"Niger-Congo",Tswa:"Niger-Congo",Tumbuka:"Niger-Congo",Ukaan:"Niger-Congo",Uneme:"Niger-Congo",Vai:"Niger-Congo",Vute:"Niger-Congo",Waama:"Niger-Congo",Warnang:"Niger-Congo",Wolof:"Niger-Congo",Yao:"Niger-Congo",Yauma:"Niger-Congo",Yom:"Niger-Congo","Zan Gula":"Niger-Congo",Zande:"Niger-Congo",Zigula:"Niger-Congo",Mamaindê:"Nambikwara",Aghul:"Nakh-Daghestanian",Akhvakh:"Nakh-Daghestanian",Andi:"Nakh-Daghestanian",Avar:"Nakh-Daghestanian",Bagvalal:"Nakh-Daghestanian",Botlikh:"Nakh-Daghestanian",Chamalal:"Nakh-Daghestanian",Chechen:"Nakh-Daghestanian",Dargwa:"Nakh-Daghestanian",Kaitag:"Nakh-Daghestanian",Karata:"Nakh-Daghestanian",Khvarshi:"Nakh-Daghestanian",Tindi:"Nakh-Daghestanian",Pirahã:"Muran",Bonan:"Mongolic","China Buriat":"Mongolic",Daur:"Mongolic","Kalmyk-Oirat":"Mongolic","Peripheral Mongolian":"Mongolic","Russia Buriat":"Mongolic",Tagdal:"Mixed language",Wutunhua:"Mixed language","Ashéninka Perené":"Maipurean",Baniwa:"Maipurean",Cabiyarí:"Maipurean",Curripaco:"Maipurean","Enawené-Nawé":"Maipurean",Kanamarí:"Maipurean",Mehináku:"Maipurean","Pichis Ashéninka":"Maipurean",Waurá:"Maipurean",Bangime:"Language isolate",Burushaski:"Language isolate","Ai-Cham":"Kra-Dai",Aiton:"Kra-Dai","Dai Zhuang":"Kra-Dai",Duoluo:"Kra-Dai","Green Gelao":"Kra-Dai","Guibian Zhuang":"Kra-Dai",Hlai:"Kra-Dai",Jiamao:"Kra-Dai",Kang:"Kra-Dai",Khün:"Kra-Dai",Kuan:"Kra-Dai",Lachi:"Kra-Dai","Laha (Viet Nam)":"Kra-Dai",Lao:"Kra-Dai",Lü:"Kra-Dai","Mak (China)":"Kra-Dai","Northeastern Thai":"Kra-Dai","Northern Dong":"Kra-Dai","Northern Thai":"Kra-Dai",Nyaw:"Kra-Dai",Phake:"Kra-Dai","Phu Thai":"Kra-Dai",Qabiao:"Kra-Dai",Qau:"Kra-Dai","Qiubei Zhuang":"Kra-Dai",Shan:"Kra-Dai","Southern Dong":"Kra-Dai",Sui:"Kra-Dai","T’en":"Kra-Dai","Tai Daeng":"Kra-Dai","Tai Dam":"Kra-Dai","Tai Hongjin":"Kra-Dai","Tai Nüa":"Kra-Dai","Tai Ya":"Kra-Dai","Tai Yo":"Kra-Dai","Ts’ün-Lao":"Kra-Dai","Yang Zhuang":"Kra-Dai",Yerong:"Kra-Dai",Yong:"Kra-Dai",Yoy:"Kra-Dai",Khoekhoe:"Khoe-Kwadi",Karajá:"Karajá","Pará Gavião":"Jean",Suyá:"Jean",Japanese:"Japonic","Oki-No-Erabu":"Japonic","Toku-No-Shima":"Japonic",Yaeyama:"Japonic",Yoron:"Japonic","Adivasi Oriya":"Indo-European",Afrikaans:"Indo-European","Alviri-Vidari":"Indo-European",Angika:"Indo-European",Assamese:"Indo-European",Bagheli:"Indo-European",Bagri:"Indo-European",Bashkardi:"Indo-European",Bateri:"Indo-European",Bengali:"Indo-European",Bhojpuri:"Indo-European",Bhunjia:"Indo-European",Bilaspuri:"Indo-European",Bosnian:"Indo-European","Braj Bhasha":"Indo-European",Brokskat:"Indo-European",Bundeli:"Indo-European",Catalan:"Indo-European",Chambeali:"Indo-European",Chhattisgarhi:"Indo-European",Dameli:"Indo-European",Dari:"Indo-European",Dhundari:"Indo-European",Dogri:"Indo-European",Domari:"Indo-European",Dutch:"Indo-European","Eastern Balochi":"Indo-European","Eastern Panjabi":"Indo-European","Eastern Yiddish":"Indo-European",English:"Indo-European",French:"Indo-European",Gaddi:"Indo-European",Garhwali:"Indo-European",Gawri:"Indo-European",Gowro:"Indo-European",Gujarati:"Indo-European",Gujari:"Indo-European",Halbi:"Indo-European",Haroti:"Indo-European",Haryanvi:"Indo-European",Hindi:"Indo-European","Indus Kohistani":"Indo-European","Iranian Persian":"Indo-European",Ishkashimi:"Indo-European",Kacchi:"Indo-European",Kalkoti:"Indo-European",Kanauji:"Indo-European",Kangri:"Indo-European",Karingani:"Indo-European",Kashmiri:"Indo-European",Kati:"Indo-European",Khunsari:"Indo-European",Konkani:"Indo-European",Kudmali:"Indo-European",Kumaoni:"Indo-European",Kumzari:"Indo-European",Laki:"Indo-European",Lasi:"Indo-European",Luwati:"Indo-European",Magahi:"Indo-European",Maithili:"Indo-European",Maldivian:"Indo-European",Malvi:"Indo-European",Marathi:"Indo-European","Marwari (India)":"Indo-European",Mewari:"Indo-European",Munji:"Indo-European",Nepali:"Indo-European",Nimadi:"Indo-European","Northern Kurdish":"Indo-European",Odia:"Indo-European","Pahari-Potwari":"Indo-European",Palula:"Indo-European",Panchpargania:"Indo-European",Pangwali:"Indo-European",Parachi:"Indo-European",Portuguese:"Indo-European",Russian:"Indo-European",Sadri:"Indo-European",Sanglechi:"Indo-European",Sarikoli:"Indo-European",Savi:"Indo-European",Semnani:"Indo-European",Serbian:"Indo-European",Shabak:"Indo-European",Shahrudi:"Indo-European",Shekhawati:"Indo-European",Shina:"Indo-European",Shughni:"Indo-European",Shumashti:"Indo-European",Sindhi:"Indo-European",Sivandi:"Indo-European",Soi:"Indo-European","Southern Balochi":"Indo-European",Spanish:"Indo-European",Tajik:"Indo-European",Talysh:"Indo-European",Urdu:"Indo-European",Ushojo:"Indo-European",Vaghri:"Indo-European","Vlax Romani":"Indo-European",Wagdi:"Indo-European",Wakhi:"Indo-European",Waneci:"Indo-European","Western Balochi":"Indo-European",Yadgha:"Indo-European","Bu-Nao Bunu":"Hmong-Mien","Central Mashan Miao":"Hmong-Mien","Chuanqiandian Cluster Miao":"Hmong-Mien","Eastern Xiangxi Miao":"Hmong-Mien","Iu Mien":"Hmong-Mien","Luopohe Miao":"Hmong-Mien","Northern Qiandong Miao":"Hmong-Mien","Pa-Hng":"Hmong-Mien","Southwestern Huishui Miao":"Hmong-Mien","Wunai Bunu":"Hmong-Mien","Younuo Bunu":"Hmong-Mien",Amarakaeri:"Harákmbut",Huachipaeri:"Harákmbut",Cuiba:"Guajiboan",Macaguán:"Guajiboan",Tlicho:"Eyak-Athabaskan",Kannada:"Dravidian",Kodava:"Dravidian","Korra Koraga":"Dravidian","Kota (India)":"Dravidian",Kudiya:"Dravidian",Malapandaram:"Dravidian",Malayalam:"Dravidian",Muthuvan:"Dravidian",Ravula:"Dravidian",Sholaga:"Dravidian",Tamil:"Dravidian",Telugu:"Dravidian",Tulu:"Dravidian",Vishavan:"Dravidian","Andaman Hindi Creole":"Creole","Cocos Islands Malay":"Creole","Juba Arabic":"Creole",Nubi:"Creole",Barí:"Chibchan","Barro Negro Tunebo":"Chibchan","Western Tunebo":"Chibchan",Ikpeng:"Cariban","Kuikúro-Kalapálo":"Cariban",Pemon:"Cariban",Trió:"Cariban","Waimiri-Atroarí":"Cariban",Waiwai:"Cariban",Yukpa:"Cariban",Borôro:"Bororoan",Chachi:"Barbacoan","Abai Sungai":"Austronesian",Ambelau:"Austronesian",Asilulu:"Austronesian",Balaesang:"Austronesian","Batak Alas-Kluet":"Austronesian","Batak Dairi":"Austronesian","Batak Karo":"Austronesian",Bonerate:"Austronesian",Bonggi:"Austronesian",Brunei:"Austronesian","Brunei Bisaya":"Austronesian",Buol:"Austronesian","Central Malay":"Austronesian","Central Sama":"Austronesian","Coastal Konjo":"Austronesian",Dampelas:"Austronesian","Dibabawon Manobo":"Austronesian",Dondo:"Austronesian",Gane:"Austronesian","Geser-Gorom":"Austronesian","Highland Konjo":"Austronesian",Hitu:"Austronesian",Iban:"Austronesian",Indonesian:"Austronesian","Kadazan Dusun":"Austronesian",Kiput:"Austronesian",Komodo:"Austronesian",Kompane:"Austronesian",Lahanan:"Austronesian","Lampung Nyo":"Austronesian","Larike-Wakasihu":"Austronesian",Lola:"Austronesian",Luhu:"Austronesian",Malay:"Austronesian",Mariri:"Austronesian",Moronene:"Austronesian",Rukai:"Austronesian","Sabah Bisaya":"Austronesian","Seit-Kaitetu":"Austronesian",Sula:"Austronesian","Tae’":"Austronesian",Tajio:"Austronesian",Tomini:"Austronesian",Tutong:"Austronesian",Ujir:"Austronesian",Aheu:"Austro-Asiatic",Alak:"Austro-Asiatic",Bit:"Austro-Asiatic","Bo (Laos)":"Austro-Asiatic",Bondo:"Austro-Asiatic",Brao:"Austro-Asiatic",Bugan:"Austro-Asiatic",Chong:"Austro-Asiatic",Chut:"Austro-Asiatic",Danau:"Austro-Asiatic",Halang:"Austro-Asiatic","Halang Doan":"Austro-Asiatic",Hu:"Austro-Asiatic",Hung:"Austro-Asiatic",Ir:"Austro-Asiatic",Kensiu:"Austro-Asiatic",Khmu:"Austro-Asiatic",Khua:"Austro-Asiatic",Khuen:"Austro-Asiatic",Koda:"Austro-Asiatic","Kon Keu":"Austro-Asiatic",Kriang:"Austro-Asiatic",Kuay:"Austro-Asiatic",Laven:"Austro-Asiatic",Maleng:"Austro-Asiatic","Man Met":"Austro-Asiatic",Mang:"Austro-Asiatic",Minriq:"Austro-Asiatic",Mlabri:"Austro-Asiatic",Nguôn:"Austro-Asiatic",Nyaheun:"Austro-Asiatic",Nyahkur:"Austro-Asiatic","O’du":"Austro-Asiatic",Ong:"Austro-Asiatic",Oy:"Austro-Asiatic",Pacoh:"Austro-Asiatic","Phong-Kniang":"Austro-Asiatic",Prai:"Austro-Asiatic",Puoc:"Austro-Asiatic",Rengao:"Austro-Asiatic",Rmeet:"Austro-Asiatic","Rumai Palaung":"Austro-Asiatic",Sapuan:"Austro-Asiatic","Shwe Palaung":"Austro-Asiatic","So (Laos)":"Austro-Asiatic",Sou:"Austro-Asiatic","Tai Loi":"Austro-Asiatic",Talieng:"Austro-Asiatic",Tareng:"Austro-Asiatic",Tho:"Austro-Asiatic",U:"Austro-Asiatic","Upper Ta’oih":"Austro-Asiatic",Vietnamese:"Austro-Asiatic","Western Katu":"Austro-Asiatic",Suruahá:"Arauan",Jarawa:"Andamanese",Öñge:"Andamanese",Sentinel:"Andamanese",Afar:"Afro-Asiatic","Alaba-K’abeena":"Afro-Asiatic",Alagwa:"Afro-Asiatic",Ale:"Afro-Asiatic","Algerian Arabic":"Afro-Asiatic",Amharic:"Afro-Asiatic",Arbore:"Afro-Asiatic","Baharna Arabic":"Afro-Asiatic",Barein:"Afro-Asiatic",Bedawiyet:"Afro-Asiatic",Bidiyo:"Afro-Asiatic",Bilen:"Afro-Asiatic",Birgit:"Afro-Asiatic",Boor:"Afro-Asiatic","Borana-Arsi-Guji Oromo":"Afro-Asiatic",Buduma:"Afro-Asiatic","Central Atlas Tamazight":"Afro-Asiatic","Chadian Arabic":"Afro-Asiatic",Chenoua:"Afro-Asiatic",Ciwogai:"Afro-Asiatic",Daasanach:"Afro-Asiatic",Dabarre:"Afro-Asiatic",Dangaléat:"Afro-Asiatic",Deno:"Afro-Asiatic",Diri:"Afro-Asiatic",Duwai:"Afro-Asiatic","Eastern Egyptian Bedawi Arabic":"Afro-Asiatic","Eastern Oromo":"Afro-Asiatic",Garre:"Afro-Asiatic",Geruma:"Afro-Asiatic",Giiwo:"Afro-Asiatic",Gorowa:"Afro-Asiatic","Gulf Arabic":"Afro-Asiatic","Hadrami Arabic":"Afro-Asiatic",Harsusi:"Afro-Asiatic",Hassaniyya:"Afro-Asiatic",Hausa:"Afro-Asiatic",Hebrew:"Afro-Asiatic","Hijazi Arabic":"Afro-Asiatic",Hobyót:"Afro-Asiatic",Hozo:"Afro-Asiatic",Jiiddu:"Afro-Asiatic",Jimi:"Afro-Asiatic",Jina:"Afro-Asiatic","Jonkor Bourmataguil":"Afro-Asiatic","Judeo-Iraqi Arabic":"Afro-Asiatic","Judeo-Moroccan Arabic":"Afro-Asiatic",Kabalai:"Afro-Asiatic",Kajakse:"Afro-Asiatic",Kariya:"Afro-Asiatic","Karo (Ethiopia)":"Afro-Asiatic",Kutto:"Afro-Asiatic","Levantine Arabic":"Afro-Asiatic",Libido:"Afro-Asiatic","Libyan Arabic":"Afro-Asiatic","Lishana Deni":"Afro-Asiatic",Maaka:"Afro-Asiatic",Maay:"Afro-Asiatic",Majera:"Afro-Asiatic",Male:"Afro-Asiatic",Maslam:"Afro-Asiatic",Masmaje:"Afro-Asiatic",Mburku:"Afro-Asiatic",Mehri:"Afro-Asiatic","Mesopotamian Arabic":"Afro-Asiatic",Migaama:"Afro-Asiatic",Mogum:"Afro-Asiatic","Moroccan Arabic":"Afro-Asiatic",Mositacha:"Afro-Asiatic",Mubi:"Afro-Asiatic",Mukulu:"Afro-Asiatic",Nafusi:"Afro-Asiatic","Najdi Arabic":"Afro-Asiatic",Nyam:"Afro-Asiatic","Omani Arabic":"Afro-Asiatic","Pa’a":"Afro-Asiatic",Saba:"Afro-Asiatic",Saho:"Afro-Asiatic","Sanaani Arabic":"Afro-Asiatic",Seze:"Afro-Asiatic",Shehri:"Afro-Asiatic",Shekkacho:"Afro-Asiatic",Sheko:"Afro-Asiatic","Shihhi Arabic":"Afro-Asiatic",Siwi:"Afro-Asiatic",Sokoro:"Afro-Asiatic",Soqotri:"Afro-Asiatic","South Levantine Arabic":"Afro-Asiatic","Standard Arabic":"Afro-Asiatic","Sudanese Arabic":"Afro-Asiatic","Ta’izzi-Adeni Arabic":"Afro-Asiatic","Tahaggart Tamahaq":"Afro-Asiatic",Taznatit:"Afro-Asiatic",Tigré:"Afro-Asiatic",Toram:"Afro-Asiatic",Tsamai:"Afro-Asiatic",Tumzabt:"Afro-Asiatic",Tunni:"Afro-Asiatic",Waata:"Afro-Asiatic","West Central Oromo":"Afro-Asiatic",Xamtanga:"Afro-Asiatic",Zumbun:"Afro-Asiatic"},My=["blocs","clusters","peopleGroups","families","languages","dialects","people","places","regions","wagfBlocks","religions"],Iy={"people-groups":["blocs","clusters","peopleGroups","people","places","families","languages","dialects","regions","religions"],language:["families","languages","dialects","people","blocs","clusters","peopleGroups","places","regions","religions"],regions:["regions","wagfBlocks","places","blocs","clusters","peopleGroups","people","families","languages","dialects","religions"],religion:["religions","people","blocs","clusters","peopleGroups","places","families","languages","dialects","regions"]};function Ry(e){return Iy[e]||My}const Fy={blocs:3,clusters:3,peopleGroups:3,families:3,languages:3,dialects:3,people:5,places:2,regions:3,wagfBlocks:3,religions:2},$a=["peopleGroups","people","places","languages","religions"],Oy={regions:[...$a,"regions","wagfBlocks"],"people-groups":[...$a,"blocs","clusters"],language:[...$a,"dialects","families"],religion:[...$a]},Dy=100,By=50,Uy=25,jy=10,Zr=5,Hc=20,Ky=[[/ sign language$/i,"Sign Language"]];function Gy(e){if(!e||typeof e!="string")return"";const t=e.indexOf(",");return t>0?e.slice(0,t).trim():e.trim()}function Hy(e){if(!e||typeof e!="string")return null;const t=e.indexOf(",");return t>=0&&e.slice(t+1).trim()||null}function zy(e){if(!e||typeof e!="string")return null;const t=e.split(",").map(o=>o.trim()).filter(Boolean);if(t.length>=2){const o=[...t].reverse().join(" ");if(mn[o])return mn[o];if(t.length>=3){const a=[t[1],t[0]].join(" ");if(mn[a])return mn[a]}}if(mn[e])return mn[e];const n=e.replace(/\s*\(.*?\)\s*$/,"").trim();if(n!==e&&mn[n])return mn[n];for(const[o,a]of Ky)if(o.test(e))return a;return null}function zc(e,t){return{id:`doxa-section-header-${Qr(e)}`,place_name:e,text:e,center:[0,0],place_type:["doxa-section-header"],geometry:{type:"Point",coordinates:[0,0]},properties:{headerLabel:e,isHeader:!0,isAllDataSection:!!t},feature:null}}function Qr(e){return String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function be(e){return e==null?"":typeof e=="string"?e.toLowerCase():typeof e=="object"&&"label"in e?String(e.label||"").toLowerCase():typeof e=="object"&&"value"in e?String(e.value||"").toLowerCase():String(e).toLowerCase()}function Aa(e){return e==null?"":typeof e=="string"?e:typeof e=="object"?e.label||e.value||"":String(e)}function Vy(e){var n,o,a,r,s;if(!Array.isArray(e))return[];const t=[];for(const i of e){if(!i)continue;const l=Number(i.latitude),c=Number(i.longitude);if(!Number.isFinite(l)||!Number.isFinite(c))continue;const u=be(i.name)+" "+be(i.displayName)+" "+be(i.alternateName),f=be(i.countryName)+" "+be(i.country)+" "+be(i.countryIso)+" "+be(i.countryIsoLabel),d=be(i.religionName)+" "+be(i.religion)+" "+be(i.religionLabel)+" "+be(i.religionCode),b=be(i.language)+" "+be(i.languageFamily)+" "+be(i.languageCode),_=be(i.doxaRegion)+" "+be(i.wagfRegion)+" "+be(i.wagfBlock),v=be(i.affinityBlock)+" "+be(i.affinityBlockLabel)+" "+be((n=i._raw)==null?void 0:n.rop1),E=be(i.cluster)+" "+be(i.clusterLabel)+" "+be((o=i._raw)==null?void 0:o.imb_reg_of_people_2),k=be(i.peopleGroup)+" "+be(i.peopleGroupLabel)+" "+be((a=i._raw)==null?void 0:a.imb_reg_of_people_25),A=((r=i._raw)==null?void 0:r.primary_language)??((s=i._raw)==null?void 0:s.PrimaryLanguage),h=A&&(typeof A=="object"?A.label||A.value:A)||Aa(i.language)||Aa(i.primaryLanguage)||"",m=Gy(h),w=Hy(h);t.push({feature:i,nameHay:u,countryHay:f,religionHay:d,languageHay:b,regionHay:_,haystack:u+" "+f+" "+d+" "+b+" "+_+" "+v+" "+E+" "+k,blocHay:v,clusterHay:E,pgHay:k,lat:l,lng:c,familyDerived:zy(h)||null,languageLabel:h,baseLang:m,dialectLabel:w})}return t}function Wy(e){const t=(n,o,a)=>{const r=new Map;for(const s of e){const i=n(s);if(!i)continue;const l=r.get(i);if(l)l.count+=1,l.lngSum+=s.lng,l.latSum+=s.lat,l.memberIds.push(String(s.feature.uniqueId??s.feature.id??s.feature.slug??"")),l.minLng=Math.min(l.minLng,s.lng),l.maxLng=Math.max(l.maxLng,s.lng),l.minLat=Math.min(l.minLat,s.lat),l.maxLat=Math.max(l.maxLat,s.lat),a&&a(l,s,!1);else{const c={key:i,label:Aa(o(s))||i,count:1,lngSum:s.lng,latSum:s.lat,minLng:s.lng,maxLng:s.lng,minLat:s.lat,maxLat:s.lat,memberIds:[String(s.feature.uniqueId??s.feature.id??s.feature.slug??"")]};a&&a(c,s,!0),r.set(i,c)}}for(const s of r.values())s.lng=s.lngSum/s.count,s.lat=s.latSum/s.count;return Array.from(r.values())};return{countries:t(n=>be(n.feature.countryName)||be(n.feature.country)||be(n.feature.countryIso),n=>n.feature.countryName||n.feature.country||n.feature.countryIso||""),families:t(n=>be(n.familyDerived),n=>n.familyDerived||""),languages:t(n=>be(n.baseLang),n=>n.baseLang||""),dialects:t(n=>n.dialectLabel?`${be(n.baseLang)}__${be(n.dialectLabel)}`:"",n=>`${n.baseLang}, ${n.dialectLabel}`,(n,o,a)=>{a?(n.originalLabels=new Set([o.languageLabel]),n.familyDerived=o.familyDerived||"",n.baseLang=o.baseLang||"",n.dialectLabel=o.dialectLabel||""):(n.originalLabels.add(o.languageLabel),!n.familyDerived&&o.familyDerived&&(n.familyDerived=o.familyDerived))}),religions:t(n=>{var o,a,r;return wa(n.feature.religion||((a=(o=n.feature._raw)==null?void 0:o.religion)==null?void 0:a.value)||((r=n.feature._raw)==null?void 0:r.religion)||"")},n=>{var o,a,r;return Sa[wa(n.feature.religion||((a=(o=n.feature._raw)==null?void 0:o.religion)==null?void 0:a.value)||((r=n.feature._raw)==null?void 0:r.religion)||"")]||"Unknown"}),regions:t(n=>be(n.feature.doxaRegion)||be(n.feature.wagfRegion),n=>{var o,a;return n.feature.wagfRegionLabel||n.feature.doxaRegionLabel||((a=(o=n.feature._raw)==null?void 0:o.wagf_region)==null?void 0:a.label)||n.feature.doxaRegion||n.feature.wagfRegion||""}),wagfBlocks:t(n=>be(n.feature.wagfBlock),n=>{var o,a;return n.feature.wagfBlockLabel||((a=(o=n.feature._raw)==null?void 0:o.wagf_block)==null?void 0:a.label)||n.feature.wagfBlock||""}),blocs:t(n=>be(n.feature.affinityBlockLabel)||be(n.feature.affinityBlock),n=>n.feature.affinityBlockLabel||n.feature.affinityBlock||"",(n,o,a)=>{a&&(n.blocCode=o.feature.affinityBlock||"")}),clusters:t(n=>{const o=n.feature.affinityBlock||"",a=n.feature.cluster||"";return a?`${o}__${a}`:""},n=>n.feature.clusterLabel||n.feature.cluster||"",(n,o,a)=>{a&&(n.blocCode=o.feature.affinityBlock||"",n.blocLabel=o.feature.affinityBlockLabel||"",n.clusterCode=o.feature.cluster||"")}),peopleGroups:t(n=>be(n.feature.peopleGroup)||be(n.feature.peopleGroupLabel),n=>n.feature.peopleGroupLabel||n.feature.peopleGroup||n.feature.name||"",(n,o,a)=>{a&&(n.blocCode=o.feature.affinityBlock||"",n.blocLabel=o.feature.affinityBlockLabel||"",n.clusterCode=o.feature.cluster||"",n.clusterLabel=o.feature.clusterLabel||"",n.peopleGroupCode=o.feature.peopleGroup||"")})}}function Yy(e){const t=e.feature,n=t.name||t.displayName||t.slug||"Unknown",o=t.countryName||t.country||t.countryIso||"",a=t.religionName||t.religion||"",r=t.slug||t.uniqueId||Qr(n+"-"+o),s=[e.lng,e.lat],i=[o,a].filter(Boolean).join(" — "),l=i?`${n}, ${i}`:n;return{id:`doxa-pg-${r}`,place_name:l,text:n,center:s,place_type:["people-group"],geometry:{type:"Point",coordinates:s},properties:{slug:r,...t},feature:t}}function Ot(e,t){let n,o;switch(e){case"country":n="doxa-country",o="doxa-country-";break;case"region":n="doxa-region",o="doxa-region-";break;case"language-family":n="doxa-language-family",o="doxa-language-family-";break;case"language":n="doxa-language",o="doxa-language-";break;case"dialect":n="doxa-dialect",o="doxa-dialect-";break;case"religion":n="doxa-religion",o="doxa-religion-";break;case"affinity-bloc":n="doxa-affinity-bloc",o="doxa-affinity-bloc-";break;case"cluster":n="doxa-cluster",o="doxa-cluster-";break;case"people-group":n="doxa-people-group",o="doxa-people-group-";break;default:n="doxa",o="doxa-"}const a=Aa(t.label)||t.key,r=Qr(t.key),s=[t.lng,t.lat],l={"affinity-bloc":"Affinity Block",cluster:"Cluster","people-group":"PG","pg-in-country":"PGIC"}[e],c=l?`${a} (${l}) · ${t.count}`:`${a} (${t.count})`,u=t.originalLabels?Array.from(t.originalLabels):void 0,f=e==="dialect"?{familyDerived:t.familyDerived||"",baseLang:t.baseLang||"",dialectLabel:t.dialectLabel||""}:null;return{id:`${o}${r}`,place_name:c,text:a,center:s,bbox:[t.minLng,t.minLat,t.maxLng,t.maxLat],place_type:[n],geometry:{type:"Point",coordinates:s},properties:{slug:r,doxaAggregate:e,count:t.count,label:a,memberIds:t.memberIds,bounds:[t.minLng,t.minLat,t.maxLng,t.maxLat],...u?{originalLabels:u}:{},...f||{},...e==="affinity-bloc"?{blocCode:t.blocCode||""}:{},...e==="cluster"?{blocCode:t.blocCode||"",blocLabel:t.blocLabel||"",clusterCode:t.clusterCode||""}:{},...e==="people-group"?{blocCode:t.blocCode||"",blocLabel:t.blocLabel||"",clusterCode:t.clusterCode||"",clusterLabel:t.clusterLabel||"",peopleGroupCode:t.peopleGroupCode||""}:{}},feature:null}}function qy(e={}){const{dataStore:t,dataSourceId:n,getActiveFilter:o,getActiveContext:a}=e,{t:r}=vo(),s=se(()=>{var f,d;if(!t||!t.sources)return[];if(n&&((f=t.sources[n])!=null&&f.features))return t.sources[n].features;for(const b of Object.keys(t.sources)){const _=t.sources[b];if((d=_==null?void 0:_.features)!=null&&d.length)return _.features}return[]}),i=se(()=>Vy(s.value)),l=se(()=>Wy(i.value));function c(f){const d=String(f||"").trim().toLowerCase(),b={people:[],places:[],regions:[],wagfBlocks:[],families:[],languages:[],dialects:[],religions:[],blocs:[],clusters:[],peopleGroups:[]};if(d.length<2)return b;const _=d.split(/[\s,;]+/).filter(Boolean);if(!_.length)return b;const v=i.value;if(!v.length)return b;const E=l.value,k=[];for(const U of v){let Y=!0;for(const te of _)if(!U.haystack.includes(te)){Y=!1;break}if(!Y)continue;let J=0;_.some(te=>U.nameHay.includes(te))&&(J+=Dy),_.some(te=>U.countryHay.includes(te))&&(J+=By),_.some(te=>U.religionHay.includes(te))&&(J+=Uy),_.some(te=>U.languageHay.includes(te))&&(J+=jy),k.push({entry:U,score:J})}k.sort((U,Y)=>Y.score-U.score);const A=k.slice(0,Zr).map(U=>Yy(U.entry)),h=U=>U.filter(Y=>_.every(J=>Y.key.includes(J)||be(Y.label).includes(J))).sort((Y,J)=>J.count-Y.count).slice(0,Zr),m=h(E.countries).map(U=>Ot("country",U)),w=h(E.regions).map(U=>Ot("region",U)),S=h(E.wagfBlocks).map(U=>Ot("region",U)),T=h(E.families).map(U=>Ot("language-family",U)),C=h(E.languages).map(U=>Ot("language",U)),x=h(E.dialects).map(U=>Ot("dialect",U)),F=h(E.religions).map(U=>Ot("religion",U)),W=h(E.blocs).map(U=>Ot("affinity-bloc",U));let z=h(E.clusters).map(U=>Ot("cluster",U)),P=h(E.peopleGroups).map(U=>Ot("people-group",U));const H=new Set(W.map(U=>be(U.text)));z=z.filter(U=>!H.has(be(U.text)));const ne=new Set(z.map(U=>be(U.text)));return P=P.filter(U=>!H.has(be(U.text))&&!ne.has(be(U.text))),{people:A,places:m,regions:w,wagfBlocks:S,families:T,languages:C,dialects:x,religions:F,blocs:W,clusters:z,peopleGroups:P}}function u(f){const d=typeof o=="function"?o():null,b=typeof a=="function"?a():null,_=c(f),v=Ry(b),E=Oy[b],k=E?Object.fromEntries(E.filter(T=>_[T]).map(T=>[T,_[T]])):_,A=v.flatMap(T=>k[T]||[]);if(!(d!=null&&d.key)||!A.length)return A.slice(0,Hc);const h=[];for(const T of _.people){const C=i.value.find(F=>F.feature===T.feature);let x=!1;C&&(d.kind==="family"?x=(C.familyDerived||"").toLowerCase()===d.key.toLowerCase():d.kind==="language"&&(x=C.languageLabel.toLowerCase()===d.key.toLowerCase())),x&&h.push(T)}const m=[],w=d.key;h.length&&(m.push(zc(r("search.sections.within",{selection:w}),!1)),m.push(...h.slice(0,Zr)));const S=v.flatMap(T=>(k[T]||[]).slice(0,Fy[T]??3)).map(T=>({...T,properties:{...T.properties,_allDataSection:!0}}));return m.push(zc(r("search.sections.allData"),!0)),m.push(...S),m.slice(0,Hc+8)}return{search:u,searchGrouped:c,index:i,aggregates:l}}const Vc="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1/dist/maplibre-gl-geocoder.min.js",Jy={__name:"GeocoderComponent",props:{mapInstance:{type:Object,required:!1,default:null},accessToken:{type:String,required:!0},provider:{type:String,default:"mapbox"},isDark:{type:Boolean,default:!1},standalone:{type:Boolean,default:!1},placeholder:{type:String,default:""},dataSourceId:{type:String,default:""},activeContext:{type:String,default:""}},emits:["result","people-group-result","aggregate-result","clear","error"],setup(e,{expose:t,emit:n}){function o(F){return F+F.replace(/mapboxgl/g,"maplibregl")}dt(o('.mapboxgl-ctrl-geocoder--input,.mapboxgl-ctrl-geocoder input[type="text"],.mapboxgl-ctrl-geocoder input[type="search"]{font-size:16px !important;line-height:1.3;}'),"geocoder-ios-zoom-fix"),dt(o(".mapboxgl-ctrl-geocoder--icon-loading{display:none !important;}"),"geocoder-hide-loading"),dt(o(".mapboxgl-ctrl-geocoder{height:35px!important;min-height:35px!important;box-sizing:border-box!important;}.mapboxgl-ctrl-geocoder--input{height:35px!important;min-height:35px!important;box-sizing:border-box!important;padding-top:0!important;padding-bottom:0!important;line-height:35px!important;}.mapboxgl-ctrl-geocoder--icon-search{top:50%!important;transform:translateY(-50%)!important;margin-top:0!important;left:7px!important;}"),"geocoder-height-35"),dt(o(".mapboxgl-ctrl-geocoder{width:100%!important;max-width:100%!important;min-width:0!important;}@media(max-width:767px){.mapboxgl-ctrl-top-left{top:10px!important;left:3px!important;right:3px!important;width:calc(100% - 6px)!important;max-width:none!important;}}.mapboxgl-ctrl-geocoder{border-radius:999px!important;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,0.15)!important;transition:box-shadow .12s,border-color .12s;}.mapboxgl-ctrl-geocoder:focus-within{box-shadow:0 2px 8px rgba(0,0,0,0.15),0 0 0 3px rgba(59,70,61,0.18)!important;}.mapboxgl-ctrl-geocoder--input{border-radius:999px!important;font-size:13px!important;}.mapboxgl-ctrl-geocoder--input::placeholder{font-size:12px!important;}.mapboxgl-ctrl-geocoder--button{display:none!important;top:50%!important;bottom:auto!important;transform:translateY(-50%)!important;margin:0!important;padding:0!important;width:24px!important;height:24px!important;background:transparent!important;border:none!important;box-shadow:none!important;}.mapboxgl-ctrl-geocoder:has(.mapboxgl-ctrl-geocoder--input:not(:placeholder-shown)) .mapboxgl-ctrl-geocoder--button{display:block!important;}.mapboxgl-ctrl-geocoder--button .mapboxgl-ctrl-geocoder--icon-close{position:absolute!important;top:50%!important;left:50%!important;transform:translate(-50%,-50%)!important;margin:0!important;width:16px!important;height:16px!important;}.mapboxgl-ctrl-geocoder--suggestions,.mapboxgl-ctrl-geocoder .suggestions{z-index:1200!important;position:absolute;max-height:60vh!important;overflow-y:auto!important;}.geocoder-dark.mapboxgl-ctrl-geocoder,.dsm-dark .mapboxgl-ctrl-geocoder{background:#4e594f!important;border:1px solid rgba(255,255,255,0.14)!important;box-shadow:0 2px 8px rgba(0,0,0,0.4)!important;}.geocoder-dark.mapboxgl-ctrl-geocoder:focus-within,.dsm-dark .mapboxgl-ctrl-geocoder:focus-within{box-shadow:0 2px 8px rgba(0,0,0,0.4),0 0 0 3px rgba(115,161,127,0.22)!important;}.geocoder-dark .mapboxgl-ctrl-geocoder--input,.dsm-dark .mapboxgl-ctrl-geocoder--input{color:#F3F3F1!important;background:transparent!important;}.geocoder-dark .mapboxgl-ctrl-geocoder--input::placeholder,.dsm-dark .mapboxgl-ctrl-geocoder--input::placeholder{color:rgba(243,243,241,0.65)!important;}.geocoder-dark .mapboxgl-ctrl-geocoder--icon,.dsm-dark .mapboxgl-ctrl-geocoder .mapboxgl-ctrl-geocoder--icon{fill:rgba(243,243,241,0.75)!important;}.geocoder-dark .mapboxgl-ctrl-geocoder--button,.dsm-dark .mapboxgl-ctrl-geocoder--button{background:transparent!important;}"),"geocoder-skin");const{t:a,locale:r}=vo(),s=e,i=se(()=>s.placeholder||a("search.placeholder")),l=n,c={"&":"&","<":"<",">":">",'"':""","'":"'"};function u(F){return String(F??"").replace(/[&<>"']/g,W=>c[W])}function f(F){return F==null?"":typeof F=="string"?F:typeof F=="object"?F.label||F.value||"":String(F)}const d={"people-group":"people","doxa-people-group":"peopleGroup","doxa-affinity-bloc":"bloc","doxa-cluster":"cluster","doxa-country":"country","doxa-region":"region","doxa-language-family":"family","doxa-language":"languageKind","doxa-dialect":"dialect","doxa-religion":"religionKind"};function b(F){const W=d[F];if(!W)return"";const z=a("search.kinds."+W);return`${u(z)}`}function _(F){var P;if(!F)return"";const W=F.place_type||[];if(W.includes("doxa-section-header"))return`
${u(((P=F.properties)==null?void 0:P.headerLabel)||F.text||"")}
`;if(W.includes("people-group")){const H=F.properties||{},ne=f(H.name)||f(H.displayName)||f(F.text)||"",U=f(H.countryName)||f(H.country)||f(H.countryIso)||"",Y=f(H.language)||f(H.primaryLanguage)||f(H.languageFamily)||"",J=f(H.religionName)||f(H.religion)||"",te=a("search.labels.place"),G=a("search.labels.language"),q=a("search.labels.religion"),ee=[];return U&&ee.push(`${u(te)} ${u(U)}`),Y&&ee.push(`${u(G)} ${u(Y)}`),J&&ee.push(`${u(q)} ${u(J)}`),`
${b("people-group")}${u(ne)}
`+(ee.length?`
${ee.join("")}
`:"")}const z=W.find(H=>H.startsWith("doxa-"));if(z){const H=F.properties||{},ne=u(f(H.label)||F.text||""),U=Number(H.count)||0,Y=U?` ${U}`:"";return`
${b(z)}${ne}${Y}
`}return`
${u(F.place_name||F.text||"")}
`}const v=ve("dataStore",null),E=ve("mapStore",null),k=ve("uiStore",null);function A(){return E?E.selectedFamily?{kind:"family",key:E.selectedFamily}:E.selectedLanguage?{kind:"language",key:E.selectedLanguage}:null:null}const{search:h}=qy({dataStore:v,dataSourceId:s.dataSourceId||void 0,getActiveFilter:A,getActiveContext:()=>s.activeContext||null}),m=pe(null),w=pe(null),S={mapbox:"https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.css",maplibre:"https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-geocoder@1/dist/maplibre-gl-geocoder.css"};function T(F,W){const z=S[W]||S.mapbox;if(F.querySelector(`link[href="${z}"]`))return;const P=document.createElement("link");P.rel="stylesheet",P.href=z,F.prepend(P)}async function C(){if(typeof window<"u"&&window.MaplibreGeocoder||typeof document>"u")return;const F=document.querySelector(`script[src="${Vc}"]`);if(F){if(window.MaplibreGeocoder)return;await new Promise(W=>{F.addEventListener("load",W,{once:!0}),F.addEventListener("error",W,{once:!0})});return}await new Promise((W,z)=>{const P=document.createElement("script");P.src=Vc,P.async=!1,P.addEventListener("load",W,{once:!0}),P.addEventListener("error",()=>z(new Error("[GeocoderComponent] Failed to load MapLibre geocoder")),{once:!0}),document.head.appendChild(P)})}function x(F,W){return async z=>{const P={features:[]};if(!F||!(z!=null&&z.query))return P;try{const H=Array.isArray(z.language)?z.language[0]:z.language||W()||"en",ne=new URLSearchParams({access_token:F,autocomplete:"true",limit:String(z.limit||5)});H&&ne.set("language",H);const U=`https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(z.query)}.json?${ne.toString()}`,Y=await fetch(U);if(!Y.ok)return P;const J=await Y.json();return J&&Array.isArray(J.features)?J:P}catch{return P}}}return it(async()=>{var H,ne,U,Y,J;const F=s.provider==="maplibre";if(F){if(await C(),typeof MaplibreGeocoder>"u"){console.error("[GeocoderComponent] MaplibreGeocoder global unavailable.");return}}else if(typeof MapboxGeocoder>"u")return;const W=s.mapInstance;if(!s.standalone&&!W)return;const z=s.standalone?(ne=(H=w.value)==null?void 0:H.getRootNode)==null?void 0:ne.call(H):(J=(Y=(U=W.getContainer)==null?void 0:U.call(W))==null?void 0:Y.getRootNode)==null?void 0:J.call(Y);z instanceof ShadowRoot&&T(z,s.provider);const P={marker:!1,flyTo:!s.standalone,trackProximity:!s.standalone,placeholder:i.value,language:r.value||"en",localGeocoder:h,limit:20,zoom:6,render:_};if(F){const te=typeof maplibregl<"u"?maplibregl:void 0,G={forwardGeocode:x(s.accessToken,()=>r.value)};m.value=new MaplibreGeocoder(G,{...P,maplibregl:te,showResultsWhileTyping:!0,reverseGeocode:!1})}else m.value=new MapboxGeocoder({accessToken:s.accessToken,mapboxgl,...P});if(m.value.on("result",te=>{var q,ee,ce,we,Pe,Ge,Ue,je,K,le,he,y,L,$,I,B,j,Z,X,g,p,M,O,Q,V,N,D,ue,ye,Te;const G=te==null?void 0:te.result;G&&((q=G.place_type)!=null&&q.includes("doxa-section-header")||(E&&(E.selectedRegion=null,E.selectedResource=null,E.selectedAffinityBlock=null,E.selectedDialect=null),k&&((ee=k.setPrayerFilter)==null||ee.call(k,null),(ce=k.setEngagementFilter)==null||ce.call(k,null),(we=k.setAdoptionFilter)==null||we.call(k,null),(Pe=k.setReligionFilter)==null||Pe.call(k,null)),(Ge=G.properties)!=null&&Ge._allDataSection&&E&&(E.selectedFamily=null,E.selectedLanguage=null),l("result",te),(Ue=G.place_type)!=null&&Ue.includes("people-group")&&G.feature?l("people-group-result",{type:"Feature",properties:G.properties||G.feature,geometry:G.geometry||{type:"Point",coordinates:G.center}}):((je=G.place_type)!=null&&je.includes("doxa-country")||(K=G.place_type)!=null&&K.includes("doxa-region")||(le=G.place_type)!=null&&le.includes("doxa-language-family")||(he=G.place_type)!=null&&he.includes("doxa-language")||(y=G.place_type)!=null&&y.includes("doxa-dialect")||(L=G.place_type)!=null&&L.includes("doxa-religion")||($=G.place_type)!=null&&$.includes("doxa-affinity-bloc")||(I=G.place_type)!=null&&I.includes("doxa-cluster")||(B=G.place_type)!=null&&B.includes("doxa-people-group"))&&l("aggregate-result",{kind:G.place_type[0].replace(/^doxa-/,""),label:((j=G.properties)==null?void 0:j.label)||G.text,count:((Z=G.properties)==null?void 0:Z.count)||0,memberIds:((X=G.properties)==null?void 0:X.memberIds)||[],bounds:((g=G.properties)==null?void 0:g.bounds)||null,center:G.center,originalLabels:((p=G.properties)==null?void 0:p.originalLabels)||null,familyDerived:((M=G.properties)==null?void 0:M.familyDerived)||"",baseLang:((O=G.properties)==null?void 0:O.baseLang)||"",dialectLabel:((Q=G.properties)==null?void 0:Q.dialectLabel)||"",slug:((V=G.properties)==null?void 0:V.slug)||null,id:G.id||null,blocCode:((N=G.properties)==null?void 0:N.blocCode)||"",blocLabel:((D=G.properties)==null?void 0:D.blocLabel)||"",clusterCode:((ue=G.properties)==null?void 0:ue.clusterCode)||"",clusterLabel:((ye=G.properties)==null?void 0:ye.clusterLabel)||"",peopleGroupCode:((Te=G.properties)==null?void 0:Te.peopleGroupCode)||"",properties:G.properties||null})))}),m.value.on("clear",()=>l("clear")),m.value.on("error",te=>l("error",te)),s.standalone){if(w.value){const te={on(){},off(){},fire(){},getContainer:()=>w.value,getZoom:()=>0,getCenter:()=>({lng:0,lat:0}),getBounds:()=>null,flyTo(){},fitBounds(){},addControl(){},removeControl(){},hasControl:()=>!1};try{const G=m.value.onAdd(s.mapInstance||te);G&&w.value.appendChild(G)}catch(G){l("error",G)}}}else W.addControl(m.value,"top-left")}),bt(i,F=>{var P,H;const W=m.value;if(!W)return;const z=W._inputEl||((H=(P=W.container)==null?void 0:P.querySelector)==null?void 0:H.call(P,"input.mapboxgl-ctrl-geocoder--input"));z&&(z.placeholder=F,z.setAttribute("placeholder",F)),W.options&&(W.options.placeholder=F)}),bt(r,F=>{const W=m.value;W!=null&&W.options&&(W.options.language=F||"en")}),on(()=>{var F,W;if(m.value){try{s.standalone?(W=(F=m.value).onRemove)==null||W.call(F):s.mapInstance&&s.mapInstance.removeControl(m.value)}catch{}m.value=null}}),t({geocoder:m}),(F,W)=>e.standalone?(ae(),ie("div",{key:0,ref_key:"standaloneContainer",ref:w,class:"dg-standalone-geocoder"},null,512)):gd(F.$slots,"default",{},void 0,void 0,1)}};function Xy(e){const{map:t,geocoderRef:n,clustering:o,mapStore:a,uiStore:r,mapLayers:s,pplrInstance:i,onSemanticTreeSelect:l,switchTab:c,activeTabId:u,clearAllHighlights:f,clearCountryHighlight:d,mapId:b,supportedKinds:_,legendRouters:v={},peopleGroupResult:E,busAdapter:k}=e,A=e.filterLayerId||"language-family-pins";let h=!1;function m(){var ne,U,Y,J,te;h=!0;const P=(U=(ne=n.value)==null?void 0:ne.geocoder)==null?void 0:U.value;(Y=P==null?void 0:P.clear)==null||Y.call(P);const H=(P==null?void 0:P._inputEl)||((te=(J=P==null?void 0:P.container)==null?void 0:J.querySelector)==null?void 0:te.call(J,"input.mapboxgl-ctrl-geocoder--input"));if(H){H.value="";try{H.dispatchEvent(new Event("input",{bubbles:!0}))}catch{}}h=!1}function w(P,H){const ne=`${A}-hitbox`;if(P!=null&&P.getLayer(ne))try{P.setFilter(ne,H)}catch{}}function S(){typeof window>"u"||typeof window.CustomEvent=="function"&&window.dispatchEvent(new CustomEvent("legend:reveal-selected",{detail:{mapId:b}}))}const T={country:"countryName","language-family":"languageFamily",language:"language",dialect:"language",religion:"religionName",region:"doxaRegion","affinity-bloc":"affinityBlock",cluster:"cluster","people-group":"peopleGroup"};function C(P,H,ne){var U,Y,J;if(P.kind==="language")return["any",["==",["get",H],ne],["==",["slice",["get",H],0,ne.length+1],ne+","],["in"," "+ne,["get",H]]];if(P.kind==="dialect"){const te=Array.isArray(P.originalLabels)?P.originalLabels:[];return te.length===1?["==",["get",H],te[0]]:te.length>1?["in",["get",H],["literal",te]]:["==",["get",H],ne]}else if(P.kind==="affinity-bloc"){const te=P.blocCode||((U=P.properties)==null?void 0:U.blocCode)||"";return te?["==",["get","affinityBlock"],te]:["==",["get","affinityBlockLabel"],ne]}else if(P.kind==="cluster"){const te=P.clusterCode||((Y=P.properties)==null?void 0:Y.clusterCode)||"",G=P.blocCode||((J=P.properties)==null?void 0:J.blocCode)||"";return te&&G?["all",["==",["get","affinityBlock"],G],["==",["get","cluster"],te]]:["==",["get","clusterLabel"],ne]}else return["==",["get",H],ne]}function x(P){if(!P||_&&!_.includes(P.kind))return null;const H=T[P.kind]||null,ne=P.label;return!H||ne==null||ne===""?null:{kind:P.kind,value:ne,property:H,expr:C(P,H,ne)}}function F(P){var U,Y,J,te;if(!P)return;d==null||d();const H=re(t),ne=((U=P.properties)==null?void 0:U.id)||((Y=P.properties)==null?void 0:Y.uniqueId)||null;if((J=r==null?void 0:r.selectPeopleGroup)==null||J.call(r,{...P,properties:{...P.properties,uniqueId:ne}}),H&&ne!=null&&H.getLayer(A)){const G=["==",["get","uniqueId"],ne];try{H.setFilter(A,null)}catch{}w(H,G),H.setPaintProperty(A,"circle-opacity",["case",G,1,0]),H.setPaintProperty(A,"circle-stroke-opacity",["case",G,1,0]),H.getLayer(`${A}-shadow`)&&H.setPaintProperty(`${A}-shadow`,"circle-opacity",["case",G,1,0]),(te=s==null?void 0:s.syncGlowFilter)==null||te.call(s,G)}}function W(P){var te;if(k){const G=x(P);if(!G)return;k.aggregate(G,P);return}const H=re(t);if(!P||!H||!H.getLayer(A)||_&&!_.includes(P.kind))return;P.kind!=="country"&&(d==null||d());const ne=x(P);if(!ne)return;const{property:U,value:Y}=ne;try{H.setFilter(A,ne.expr)}catch{}o.setSelectionFilter({property:U,value:Y});let J=!1;if(P.kind==="language-family"||P.kind==="family")a.selectFamily(P.label),a.setActiveLegendTab("family"),J=!0;else if(P.kind==="language")a.selectLanguage(P.label),a.setActiveLegendTab("language"),J=!0;else if(P.kind==="dialect"){const G=Array.isArray(P.originalLabels)?P.originalLabels:[],q=P.familyDerived||"",ee=P.baseLang||"",ce=P.dialectLabel||"",we=`${q}__${ee}__${ce}`;(te=a.selectDialect)==null||te.call(a,{key:we,originalLabels:G}),a.setActiveLegendTab("dialect"),J=!0}else if(P.kind==="affinity-bloc"||P.kind==="cluster"||P.kind==="people-group"){let G=null;if(P.kind==="affinity-bloc"){const q=P.blocCode||"";G={id:`bloc:${q}`,label:P.label,depth:0,filter:q?["==",["get","affinityBlock"],q]:null}}else if(P.kind==="cluster"){const q=P.blocCode||"",ee=P.clusterCode||"";G={id:`cluster:${q}__${ee}`,label:P.label,depth:1,filter:ee?["==",["get","cluster"],ee]:null}}else if(P.kind==="people-group"){const q=P.blocCode||"",ee=P.clusterCode||"",ce=P.peopleGroupCode||"";G={id:`pg:${q}__${ee}__${ce}`,label:P.label,depth:2,filter:ce?["==",["get","peopleGroup"],ce]:null}}if(G&&G.filter){const q=()=>{try{H.setFilter(A,null)}catch{}l(G),i&&i.selection&&(i.selection.value=G)};u.value!=="affinity-blocks"?(c("affinity-blocks"),Ho(q)):q()}J=!0}else v[P.kind]&&(v[P.kind](P,{map:H,filterLayerId:A,clearGeocoder:m,emitLegendReveal:S,property:U,value:Y}),J=!0);J&&(m(),S())}function z(){var H,ne,U;if(k){k.clear();return}if(h)return;d==null||d();const P=re(t);a.selectedRegion&&((H=a.selectRegion)==null||H.call(a,null)),a.selectedResource&&((ne=a.selectResource)==null||ne.call(a,null)),P&&P.getLayer(A)?f(P):(a.selectFamily(null),a.selectLanguage(null),(U=a.selectDialect)==null||U.call(a,null),o.setSelectionFilter(null))}return{onPeopleGroupResult:k?P=>k.peopleGroup(P):E||F,onAggregateResult:W,onClear:z,clearGeocoderProgrammatic:m}}const Zy={class:"rd-searchbar-header","data-region":"search","data-sub":"search-header"},Qy=["data-search-bar"],Wc="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.min.js",ev={__name:"DashboardSearchHeader",setup(e){const t=ve("selectionBus",null),n=ve("dashboardData",null),o=ve("dashboardConfig",{}),a=ve("mapboxToken",pe("")),r=ve("searchSourceId",""),s=se(()=>re(a)||""),i=pe(!1);function l(){if(typeof window>"u")return;if(typeof window.MapboxGeocoder<"u"){i.value=!0;return}let d=document.querySelector(`script[src="${Wc}"]`);d||(d=document.createElement("script"),d.src=Wc,d.async=!0,document.head.appendChild(d)),d.addEventListener("load",()=>{i.value=!0}),typeof window.MapboxGeocoder<"u"&&(i.value=!0)}it(l);const c={region:"wagf_region",country:"country_code",block:"wagf_block",province:"wagf_block",religion:"religion","language-family":"primary_language",language:"primary_language",dialect:"primary_language"};function u(d,b,_){var A,h,m;const v=(h=(A=o.facets)==null?void 0:A[d])==null?void 0:h.get,E=(m=n==null?void 0:n.rowStore)==null?void 0:m.value,k=(_==null?void 0:_.memberIds)&&_.memberIds[0]||(_==null?void 0:_.slug);if(v&&E&&k){const w=E.get(k);if(w){const S=v(w);if(S!=null&&S!=="")return S}}return(b==null?void 0:b.value)!=null&&b.value!==""?b.value:_==null?void 0:_.label}const f=(o.search||[]).map(d=>{const b=pe(null),_={_lastFacet:null,_selectedMembers:!1};function v(A,h){const m=Array.isArray(A)?A.filter(Boolean):[];if(!m.length||!t)return!1;t.selectionSet.clear();for(const w of m)t.selectionSet.add(w);return t.emit("select",t.selectionSet),t.emit("focusRow",{slug:m[0],name:h}),!0}const k=Xy({busAdapter:{aggregate(A,h){if(!t)return;const m=c[A.kind];if(m){const w=u(m,A,h);if(w==null||w==="")return;t.setFilter(m,w),_._lastFacet=m;return}v(h==null?void 0:h.memberIds,A.value)&&(_._selectedMembers=!0)},peopleGroup(A){var m,w;const h=((m=A==null?void 0:A.properties)==null?void 0:m.slug)||(A==null?void 0:A.slug);!h||!t||(t.toggleSelect(h),t.emit("focusRow",{slug:h,name:(w=A==null?void 0:A.properties)==null?void 0:w.name}))},clear(){t&&(_._lastFacet&&(t.setFilter(_._lastFacet,null),_._lastFacet=null),_._selectedMembers&&(t.clearSelection(),_._selectedMembers=!1))}},supportedKinds:d.kinds,geocoderRef:b,mapId:d.id});return{entry:d,geocoderRef:b,handlers:k}});return dt(` + /* position:relative + high z-index so the absolutely-positioned geocoder + suggestion dropdowns render ABOVE the stats/map/table rows below this header. + overflow MUST be visible — overflow-x:auto created a clipping context that + hid the dropdown extending below the single-row header. */ + .rd-searchbar-header{ position:relative; z-index:60; display:flex; align-items:center; gap:8px; + height:100%; padding:6px 14px; background:var(--rd-panel,#fff); + border-bottom:1px solid var(--rd-line,#e2e6ec); box-sizing:border-box; overflow:visible; } + .rd-searchbar{ position:relative; flex:1 1 0; min-width:150px; } + .rd-searchbar .dg-standalone-geocoder .mapboxgl-ctrl-geocoder{ width:100%!important; max-width:none!important; + box-shadow:none!important; border:1px solid var(--rd-line,#e2e6ec); border-radius:var(--r-md,6px); + background:var(--rd-bg,#f7f9fb); } + .rd-searchbar .dg-standalone-geocoder{ width:100%; } + /* lift the mapbox-gl-geocoder suggestions list above sibling dashboard panels */ + .rd-searchbar .mapboxgl-ctrl-geocoder .suggestions, + .rd-searchbar .mapboxgl-ctrl-geocoder ul.suggestions, + .rd-searchbar .mapboxgl-ctrl-geocoder--results{ z-index:200!important; } +`,"rd-search-header"),(d,b)=>(ae(),ie("div",Zy,[(ae(!0),ie(Ae,null,et(re(f),_=>(ae(),ie("div",{key:_.entry.id,class:"rd-searchbar","data-search-bar":_.entry.id},[i.value?(ae(),io(Jy,{key:0,ref_for:!0,ref:v=>{_.geocoderRef.value=v},standalone:"","access-token":s.value,"data-source-id":re(r),placeholder:_.entry.label,"active-context":_.entry.context,onAggregateResult:_.handlers.onAggregateResult,onPeopleGroupResult:_.handlers.onPeopleGroupResult,onClear:_.handlers.onClear},null,8,["access-token","data-source-id","placeholder","active-context","onAggregateResult","onPeopleGroupResult","onClear"])):tt("",!0)],8,Qy))),128))]))}},Yc=e=>{if(typeof e=="number")return e;const t=parseFloat(String(e??"").replace(/[^0-9.\-]/g,""));return isNaN(t)?null:t},es=e=>e&&typeof e=="object"?e.value??e.label??"":e??"",tv={id:"doxa-research-dashboard",title:"Research Dashboard",element:"doxa-research-dashboard",data:{source:"pray-tools",primaryKey:"slug"},facets:{religion:{label:"Religion",get:e=>Be(e.religion)},wagf_region:{label:"Region",get:e=>Be(e.wagf_region)},wagf_block:{label:"Block",get:e=>Be(e.wagf_block)},country_code:{label:"Country",get:e=>Be(e.country_code),geoIso:e=>e.country_code&&e.country_code.value},engagement_status:{label:"Status",get:e=>Be(e.engagement_status)},language_family:{label:"Language Family",get:e=>Be(e.imb_language_family)},primary_language:{label:"Language",get:e=>Be(e.primary_language)},affinity_bloc:{label:"Affinity Bloc",get:e=>es(e.rop1)},cluster:{label:"Cluster",get:e=>es(e.imb_reg_of_people_2)},people_group:{label:"People Group",get:e=>es(e.imb_reg_of_people_25)}},facetRail:[{id:"people",title:"People",drill:["affinity_bloc","cluster","people_group"],tree:"affinity",topN:[30,40,60]},{id:"place",title:"Place",drill:["wagf_region","wagf_block","country_code"]},{id:"language",title:"Language",drill:["language_family","primary_language"]},{id:"religion",title:"Religion",facet:"religion",topN:24},{id:"status",title:"Status",facet:"engagement_status",topN:16}],kpis:[{id:"total",label:"UPGs in scope",kind:"count",showDelta:!0},{id:"pop",label:"Σ population",kind:"sum",field:"population"},{id:"unreached",label:"% unreached",kind:"pct",test:e=>!/engaged/i.test(Be(e.engagement_status))||/unengaged/i.test(Be(e.engagement_status))},{id:"countries",label:"countries touched",kind:"distinct",field:"country_code",via:"geoIso"},{id:"praying",label:"Σ praying",kind:"sum",field:"people_praying"},{id:"adopted",label:"Adopted %",kind:"pct",test:e=>Number(e.adopted_by_churches)>0}],columns:[{key:"name",label:"People Group",get:e=>e.name||"",type:"str"},{key:"country",label:"Country",get:e=>Be(e.country_code),type:"str"},{key:"region",label:"Region",get:e=>Be(e.wagf_region),type:"str"},{key:"language",label:"Language",get:e=>Be(e.primary_language),type:"str"},{key:"religion",label:"Religion",get:e=>Be(e.religion),type:"str"},{key:"population",label:"Population",get:e=>Yc(e.population),type:"num"},{key:"people_praying",label:"Praying",get:e=>Yc(e.people_praying),type:"num"},{key:"engagement",label:"Engagement",get:e=>Be(e.engagement_status),type:"str"}],charts:[{id:"religion",type:"donut",facet:"religion",title:"Religion",topN:8},{id:"region",type:"donut",facet:"wagf_region",title:"Region",topN:9},{id:"country",type:"bar",facet:"country_code",title:"Top countries",topN:12}],detail:{photo:e=>e.has_photo&&e.image_url,fields:["religion","primary_language","people_praying","adopted_by_churches","engagement_status"]},search:[{id:"people",label:"Search people",context:"people-groups",kinds:["affinity-bloc","cluster","people-group"]},{id:"place",label:"Search place",context:"regions",kinds:["region","country"]},{id:"language",label:"Search language",context:"language",kinds:["language-family","language","dialect"]},{id:"religion",label:"Search religion",context:"religion",kinds:["religion"]}]},nv=["data-row-count","data-loading","data-error","data-narrow"],ov={class:"rd-stats","data-region":"stats","data-sub":"stat-strip"},av=["data-kpi"],rv={class:"l"},sv={key:0,class:"d","data-kpi-delta":""},iv={class:"rd-cell-map","data-region":"map"},lv=["title"],cv=["title"],uv={class:"rd-cell-table","data-region":"table"},dv={class:"rd-rail","data-region":"rail"},fv=["data-view"],gv=Object.freeze(Object.defineProperty({__proto__:null,default:{__name:"research-dashboard",setup(e){const{bus:t,data:n,kpis:o,exporter:a,responsive:r}=tb(tv),s=n.total,i=n.loading,l=n.error,{shell:c,isNarrow:u,slimRail:f,slimFacet:d,mobileView:b,SEG:_,tableCollapsed:v,facetCollapsed:E,railCollapsed:k,setView:A,showFacets:h,showMap:m,showTable:w,showCharts:S}=r,{startFacetResize:T,startRailResize:C,startTableResize:x}=ab({shellRef:c,bus:t,isNarrow:u,storageKey:"rd-dashboard-layout",defaults:{facetW:248,railW:312,tableH:"34%"}});function F(J){return J.kind==="pct"?J.value:J.kind==="distinct"?J.value||"—":yc(J.value)}const W=se(()=>t.selectionSet?t.selectionSet.size:0);function z(){a.exportCsv()}function P(){t.clearSelection()}function H(){t.emit("toggleTable",!1)}function ne(){t.emit("toggleFacet",!E.value)}function U(){t.emit("toggleRail",!k.value)}function Y(J){const te=J.target&&J.target.closest&&J.target.closest("[data-bar-export],[data-bar-clear]");te&&(te.hasAttribute("data-bar-export")?z():P())}return dt(` + :host{ display:block; width:100%; height:100%; min-height:560px; box-sizing:border-box; + --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; + --rd-accent:#e67e22; --rd-info:#2b6cb0; --rd-line:#e2e6ec; --rd-bg:#f7f9fb; + --rd-ink:#1f2733; --rd-muted:#6b7686; --rd-panel:#ffffff; + --facet-w:248px; --rail-w:312px; + --fs-xs:10px; --fs-sm:11px; --fs-md:12px; --fs-lg:13px; --fs-xl:16px; + --r-lg:10px; --r-md:6px; --r-pill:999px; } + .profile-loader{ width:100%; height:100%; } + .rd-shell{ position:relative; display:grid; width:100%; height:100%; min-height:560px; box-sizing:border-box; + grid-template-columns: var(--facet-w,248px) minmax(0,1fr) var(--rail-w,312px); + grid-template-rows: 52px auto 42px 1fr var(--table-h,34%); + grid-template-areas: "topbar topbar topbar" "search search search" "stats stats stats" "facets map rail" "facets table rail"; + gap:1px; background:var(--rd-line,#e2e6ec); container-type:inline-size; + font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; + color:var(--rd-ink,#1f2733); } + .rd-shell > [data-region="topbar"]{ grid-area:topbar; min-width:0; } + .rd-shell > [data-region="search"]{ grid-area:search; min-width:0; } + .rd-shell > [data-region="stats"]{ grid-area:stats; min-width:0; } + .rd-shell > [data-region="facets"]{ grid-area:facets; min-width:0; min-height:0; } + .rd-shell > [data-region="map"]{ grid-area:map; min-width:0; min-height:0; overflow:hidden; position:relative; } + .rd-shell > [data-region="table"]{ grid-area:table; min-width:0; min-height:0; overflow:hidden; } + .rd-shell > [data-region="rail"]{ grid-area:rail; min-width:0; min-height:0; } + .rd-rail{ display:flex; flex-direction:column; min-height:0; height:100%; background:var(--rd-bg,#f7f9fb); } + .rd-rail > [data-region="charts-rail"]{ flex:1 1 auto; min-height:0; } + .rd-shell.rd-table-collapsed{ grid-template-rows:52px auto 42px 1fr 0; } + /* Facet/rail collapse — override the COLUMN template (not the --*-w vars) so collapse wins + over a dragged inline width, exactly like the table row-template above. Map is minmax(0,1fr) + and self-resizes via DashboardMapPanel's ResizeObserver → map.resize(). */ + .rd-shell.rd-facet-collapsed{ grid-template-columns:0 minmax(0,1fr) var(--rail-w,312px); } + .rd-shell.rd-rail-collapsed{ grid-template-columns:var(--facet-w,248px) minmax(0,1fr) 0; } + .rd-shell.rd-facet-collapsed.rd-rail-collapsed{ grid-template-columns:0 minmax(0,1fr) 0; } + /* Always-reachable edge carets pinned to the map, toggle each rail (desktop only). */ + .rd-edge-caret{ position:absolute; top:50%; transform:translateY(-50%); z-index:6; width:16px; + height:46px; display:flex; align-items:center; justify-content:center; padding:0; cursor:pointer; + border:1px solid #dde3ec; background:#fff; color:#3a4456; border-radius:5px; font-size:11px; + line-height:1; box-shadow:0 1px 4px rgba(0,0,0,.14); } + .rd-edge-caret:hover{ background:#eef2f7; } + .rd-edge-facet{ left:5px; } .rd-edge-rail{ right:5px; } + /* floating restore affordance — shown only while the table is collapsed (desktop). Pinned to + the bottom edge of the center map cell so the map's 1fr can fill the whole center span. */ + .rd-table-restore{ position:absolute; left:50%; bottom:10px; transform:translateX(-50%); z-index:4; + display:inline-flex; align-items:center; gap:6px; cursor:pointer; user-select:none; + font-family:inherit; font-size:var(--fs-md,12px); font-weight:700; color:#fff; + background:var(--rd-ink,#1f2733); border:1px solid #ffffff33; border-radius:var(--r-pill,999px); + padding:5px 14px; box-shadow:0 2px 10px #0003; backdrop-filter:blur(4px); } + .rd-table-restore:hover{ background:#000; color:var(--rd-accent,#e67e22); } + .rd-shell.rd-slim-rail{ --rail-w:240px; } + .rd-shell.rd-slim-facet{ --facet-w:196px; } + /* Desktop drag-resize handles (useDashboardLayout). Thin, transparent until hover/active; each is + a grid item pinned to the edge of its cell so no pixel offsets are needed. Straddle the 1px grid + gap via a small negative margin for a comfortable hit target. Never rendered on narrow/mobile. */ + .rd-rz{ position:relative; z-index:6; background:transparent; touch-action:none; transition:background .15s; } + .rd-rz::after{ content:''; position:absolute; background:transparent; border-radius:var(--r-pill,999px); transition:background .15s; } + .rd-rz-facet{ grid-area:facets; justify-self:end; align-self:stretch; width:8px; margin-right:-4px; cursor:col-resize; } + .rd-rz-rail{ grid-area:rail; justify-self:start; align-self:stretch; width:8px; margin-left:-4px; cursor:col-resize; } + .rd-rz-table{ grid-area:map; align-self:end; justify-self:stretch; height:8px; margin-bottom:-4px; cursor:row-resize; } + .rd-rz-facet::after, .rd-rz-rail::after{ top:50%; left:50%; transform:translate(-50%,-50%); width:3px; height:34px; } + .rd-rz-table::after{ top:50%; left:50%; transform:translate(-50%,-50%); width:34px; height:3px; } + .rd-rz:hover::after{ background:var(--rd-accent,#e67e22); } + .rd-rz:active{ background:color-mix(in srgb, var(--rd-accent,#e67e22) 18%, transparent); } + .rd-rz:active::after{ background:var(--rd-accent,#e67e22); } + .rd-stats{ display:flex; align-items:center; gap:var(--s5,24px); height:100%; padding:0 var(--s4,16px); + background:var(--rd-panel,#fff); overflow-x:auto; box-sizing:border-box; } + .rd-stats .kpi{ display:flex; align-items:baseline; gap:6px; white-space:nowrap; } + .rd-stats .kpi .n{ font-weight:800; font-size:15px; color:var(--rd-ink,#1f2733); transition:color .2s; } + .rd-stats .kpi .l{ font-size:10px; text-transform:uppercase; letter-spacing:.4px; color:var(--rd-muted,#6b7686); } + .rd-stats .kpi .d{ color:var(--rd-accent,#e67e22); font-weight:700; font-size:11px; } + .rd-shell.rd-narrow{ grid-template-columns:1fr; grid-template-rows:52px auto 42px minmax(0,1fr) 46px; + grid-template-areas:"topbar" "search" "stats" "body" "seg"; } + .rd-shell.rd-narrow > [data-region]{ grid-area:body; min-width:0; min-height:0; } + .rd-shell.rd-narrow > [data-region="topbar"]{ grid-area:topbar; } + .rd-shell.rd-narrow > [data-region="search"]{ grid-area:search; } + .rd-shell.rd-narrow > [data-region="stats"]{ grid-area:stats; } + .rd-seg{ grid-area:seg; display:none; } + .rd-shell.rd-narrow .rd-seg{ display:flex; } + .rd-seg button{ flex:1; border:0; background:#fff; border-top:1px solid var(--rd-line,#e2e6ec); font-size:12px; font-weight:700; color:#5a6577; cursor:pointer; } + .rd-seg button.on{ color:var(--rd-ink,#1f2733); box-shadow:inset 0 -3px 0 var(--rd-accent,#e67e22); } + .rd-exportbar{ position:absolute; left:0; right:0; bottom:0; display:flex; align-items:center; gap:10px; padding:8px 14px; + background:var(--rd-ink,#1f2733); color:#fff; z-index:50; box-shadow:0 -2px 10px #0003; animation:rd-slideup .2s ease; } + .rd-exportbar .sp{ flex:1; } .rd-exportbar b{ font-size:13px; } + .rd-exportbar button{ border:0; border-radius:6px; padding:6px 14px; font-weight:700; font-size:12px; cursor:pointer; } + .rd-exportbar .x-go{ background:var(--rd-accent,#e67e22); color:#fff; } .rd-exportbar .x-clr{ background:#ffffff22; color:#fff; } + @keyframes rd-slideup{ from{ transform:translateY(100%); } to{ transform:translateY(0); } } + @media (prefers-reduced-motion: reduce){ .rd-shell *{ transition:none !important; animation:none !important; } } +`,"rd-shell-layout"),(J,te)=>(ae(),ie("div",{ref_key:"shell",ref:c,class:Ze(["rd-shell",{"rd-narrow":re(u),"rd-slim-rail":re(f),"rd-slim-facet":re(d),"rd-table-collapsed":re(v),"rd-facet-collapsed":re(E),"rd-rail-collapsed":re(k)}]),"data-row-count":re(s),"data-loading":re(i)?"1":"0","data-error":re(l)||"","data-narrow":re(u)?"1":"0"},[Ce(re($b)),Ce(re(ev)),R("div",ov,[(ae(!0),ie(Ae,null,et(re(o),G=>(ae(),ie("div",{class:"kpi",key:G.id},[R("span",{class:"n","data-kpi":G.id},de(G.kind==="count"&&re(i)?"…":F(G)),9,av),R("span",rv,de(G.label),1),G.delta?(ae(),ie("span",sv,"↓"+de(re(yc)(G.delta)),1)):tt("",!0)]))),128))]),zt(Ce(re(g_),null,null,512),[[rn,re(h)]]),zt(R("div",iv,[Ce(re(Ny)),re(v)&&!re(u)?(ae(),ie("button",{key:0,class:"rd-table-restore","data-table-restore":"",type:"button",title:"Show the people-groups table",onClick:H},"▴ Show table")):tt("",!0),re(u)?tt("",!0):(ae(),ie("button",{key:1,class:"rd-edge-caret rd-edge-facet",type:"button","data-toggle-facet":"",title:re(E)?"Show filters":"Hide filters — grow the map",onClick:ne},de(re(E)?"▸":"◂"),9,lv)),re(u)?tt("",!0):(ae(),ie("button",{key:2,class:"rd-edge-caret rd-edge-rail",type:"button","data-toggle-rail":"",title:re(k)?"Show charts":"Hide charts — grow the map",onClick:U},de(re(k)?"◂":"▸"),9,cv))],512),[[rn,re(m)]]),zt(R("div",uv,[Ce(re(x_))],512),[[rn,re(w)&&(re(u)||!re(v))]]),zt(R("aside",dv,[Ce(re(by)),Ce(re(z_))],512),[[rn,re(S)]]),zt(R("div",{class:"rd-rz rd-rz-facet","data-resize":"facet",role:"separator","aria-orientation":"vertical",title:"Drag to resize the filters rail",onPointerdown:te[0]||(te[0]=(...G)=>re(T)&&re(T)(...G))},null,544),[[rn,!re(u)&&!re(E)]]),zt(R("div",{class:"rd-rz rd-rz-rail","data-resize":"rail",role:"separator","aria-orientation":"vertical",title:"Drag to resize the charts rail",onPointerdown:te[1]||(te[1]=(...G)=>re(C)&&re(C)(...G))},null,544),[[rn,!re(u)&&!re(k)]]),zt(R("div",{class:"rd-rz rd-rz-table","data-resize":"table",role:"separator","aria-orientation":"horizontal",title:"Drag to resize the table",onPointerdown:te[2]||(te[2]=(...G)=>re(x)&&re(x)(...G))},null,544),[[rn,!re(u)&&!re(v)]]),R("div",{class:"rd-seg","data-segmented":"",onClick:te[3]||(te[3]=(...G)=>re(A)&&re(A)(...G))},[(ae(!0),ie(Ae,null,et(re(_),G=>(ae(),ie("button",{key:G.k,class:Ze({on:re(b)===G.k}),"data-view-btn":"","data-view":G.k},de(G.l),11,fv))),128))]),W.value?(ae(),ie("div",{key:0,class:"rd-exportbar","data-export-bar":"",onClick:Y},[R("b",null,de(W.value)+" selected",1),te[4]||(te[4]=R("span",{class:"sp"},null,-1)),te[5]||(te[5]=R("button",{class:"x-clr","data-bar-clear":""},"Clear",-1)),te[6]||(te[6]=R("button",{class:"x-go","data-bar-export":""},"Export CSV ↓",-1))])):tt("",!0)],10,nv))}}},Symbol.toStringTag,{value:"Module"}))})(); diff --git a/public/doxa-maps/research-dashboard/research-dashboard/index.html b/public/doxa-maps/research-dashboard/research-dashboard/index.html new file mode 100644 index 000000000..63dd5c126 --- /dev/null +++ b/public/doxa-maps/research-dashboard/research-dashboard/index.html @@ -0,0 +1,121 @@ + + + + + + research-dashboard · research-dashboard + + + + + + + + + +
+
loading token…
+ + + + + + + diff --git a/public/doxa-maps/template-bundle/index.html b/public/doxa-maps/template-bundle/index.html index a2753346f..090018da3 100644 --- a/public/doxa-maps/template-bundle/index.html +++ b/public/doxa-maps/template-bundle/index.html @@ -129,7 +129,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut) + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":10,"profileCount":21,"bundles":[{"bundle":"template-bundle","scriptUrl":"./template-bundle/template-bundle.js","output":"doxa-maps/template-bundle/template-bundle.js","elements":["template-bundle"],"profiles":[{"profile":"template-map-a","file":"template-map-a.vue","description":"Minimal example profile A — a colored placeholder, no Mapbox or data.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-a/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-a/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"},{"profile":"template-map-b","file":"template-map-b.vue","description":"Minimal example profile B — a second profile in the same bundle.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-b/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-b/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"}]}]};