From b55044ed9580aebeaa723697015fbd3d1ce10072 Mon Sep 17 00:00:00 2001 From: doxa-maps-88655c70 <88627970+doxa-maps-88655c70@users.noreply.github.com> Date: Thu, 24 Sep 2026 01:35:48 +0000 Subject: [PATCH] Vendor Bebas Neue: the last 7 region-page differences were all one font MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MEASURED before: the region dashboard matched live doxa.life on 61 of 68 computed properties, and every one of the 7 differences traced to a single cause — Bebas Neue could not be loaded. Three were the font-family itself, and four were workarounds it forced: an uppercase hack imitating Bebas's caps, and two font-sizes stepped down because a wider fallback face overflowed their card widths. So it was never seven problems, it was one with six knock-ons. DX-life does not ship the file either — @nuxt/fonts downloads and self-hosts it for them, which is why their computed family reads "Bebas Neue", "Bebas Neue Fallback: ...". We could not @font-face from their origin: their file is served without CORS headers, so a cross-origin face fails silently. The font is a Google Font under the OFL, so it is vendored here from Google Fonts — both subsets, their own unicode-ranges (css2 v16) — self-hosted, never a CDN, the same rule public/assets/vendor/tabulator follows. library/composables/useDocumentFont.js is shared because @font-face is DOCUMENT-scoped: a face declared inside a shadow root is ignored, so a custom element cannot register its own webfont through useShadowStyles. That asymmetry is the reason this is a separate composable rather than a flag on that one. Idempotent per document, so a composite registers one face for both panes; both profiles call it because each has a standalone leaf page where the other is absent. With the real face loaded, the workarounds are DELETED rather than kept: the goal-card heading is back to their 59.6046px, the headline figure back to 59.6046px, and text-transform:uppercase and font-stretch:condensed are gone — Bebas is already caps and already condensed, and stacking those changed the glyphs. The three-across switcher still holds at 372/372/372 with no overflow, which is the geometry that forced the step-downs in the first place. ★ THE CATCH THAT MATTERED. With the font vendored the diff said 68 of 68 IDENTICAL, 0 differ — and it was WRONG. document.fonts reported our face in "error" status: generate-tree stages an ALLOWLIST of asset dirs into the tree, fonts/ was not in it, so the leaf resolved assets/fonts/... to a 404 and every heading silently rendered on the fallback. Both sides were agreeing on a FALLBACK, which is not a match. A font that 404s is invisible to any check that reads font-family instead of asking the engine whether the family is usable, so the probe now calls document.fonts.check() and the staging list carries fonts/. After the fix: usable true, face "loaded", and the headings render in Bebas. Two honest notes. The fallback TAIL still differs — theirs carries @nuxt/fonts' generated metric-fallback names we do not produce — so the probe compares the FIRST family (the face actually used) and reports the tail as an accepted difference rather than counting it either way. And document.fonts.check() returns false on THEIR page, which contradicts it visibly rendering in Bebas, so that check is trusted in one direction only: it proves ours loaded, it does not prove parity. The licence ships beside the font, extensionless: check:public-hygiene refuses *.txt in a served folder and is right to, while the OFL requires the licence to accompany redistributed font files. The conventional name satisfies both. --- internal/generate-tree.mjs | 16 +++- library/composables/useDocumentFont.js | 73 ++++++++++++++++++ .../regions-dashboard/region-dashboards.vue | 26 ++++--- .../regions-dashboard/regions-list.vue | 15 +++- public/assets/fonts/bebas-neue/LICENSE | 24 ++++++ .../bebas-neue/bebas-neue-latin-ext.woff2 | Bin 0 -> 8928 bytes .../fonts/bebas-neue/bebas-neue-latin.woff2 | Bin 0 -> 13768 bytes .../doxa-maps/assets/fonts/bebas-neue/LICENSE | 24 ++++++ .../bebas-neue/bebas-neue-latin-ext.woff2 | Bin 0 -> 8928 bytes .../fonts/bebas-neue/bebas-neue-latin.woff2 | Bin 0 -> 13768 bytes public/doxa-maps/index.html | 2 +- public/doxa-maps/manifest.json | 8 +- .../region-dashboards/index.html | 2 +- .../regions-dashboard/regions-dashboard.js | 50 +++++++----- .../regions-dashboard/regions-list/index.html | 2 +- .../regions-dashboard/regions-mfe/index.html | 2 +- 16 files changed, 203 insertions(+), 41 deletions(-) create mode 100644 library/composables/useDocumentFont.js create mode 100644 public/assets/fonts/bebas-neue/LICENSE create mode 100644 public/assets/fonts/bebas-neue/bebas-neue-latin-ext.woff2 create mode 100644 public/assets/fonts/bebas-neue/bebas-neue-latin.woff2 create mode 100644 public/doxa-maps/assets/fonts/bebas-neue/LICENSE create mode 100644 public/doxa-maps/assets/fonts/bebas-neue/bebas-neue-latin-ext.woff2 create mode 100644 public/doxa-maps/assets/fonts/bebas-neue/bebas-neue-latin.woff2 diff --git a/internal/generate-tree.mjs b/internal/generate-tree.mjs index 51acf7b7f..9e2f0268d 100644 --- a/internal/generate-tree.mjs +++ b/internal/generate-tree.mjs @@ -1453,7 +1453,21 @@ function main() { // while an absolute assetsBaseUrl serves the originals on demand (the same escape hatch used // for partner-site and mobile embeds). Set bundlePosters:true to ship them anyway for a // fully offline drop, accepting the size. - const assetDirs = DEST_CONFIG.bundlePosters ? ['previews', 'posters'] : ['previews'] + // ★ fonts/ MUST be staged (measured 2026-09-24). A leaf page resolves its assetsBase to + // /assets, so a vendored @font-face at assets/fonts/... is fetched from INSIDE the + // tree — and this staging step is an allowlist, so a dir absent from it 404s. The regions + // clone vendors Bebas Neue (public/assets/fonts/bebas-neue, OFL) because DX-life serves + // theirs without CORS; with fonts/ unstaged the face registered, requested + // /assets/fonts/..., failed, and every heading silently rendered on the fallback. + // document.fonts reported the face in 'error' status while a computed-style diff of the + // two pages said 0 differences — both sides agreeing on a FALLBACK is not a match, and a + // font that 404s is invisible to every check that reads font-family rather than asking + // the engine whether the family is usable. + // Small and self-contained: a woff2 pair is ~22KB, and the tree's self-contained promise + // is exactly why it has to travel with it. + const assetDirs = DEST_CONFIG.bundlePosters + ? ['previews', 'posters', 'fonts'] + : ['previews', 'fonts'] for (const dirName of assetDirs) { const src = join(pubAssets, dirName) if (!existsSync(src)) { console.warn(`[generate-tree] WARN missing tree asset dir: assets/${dirName}`); continue } diff --git a/library/composables/useDocumentFont.js b/library/composables/useDocumentFont.js new file mode 100644 index 000000000..625cace55 --- /dev/null +++ b/library/composables/useDocumentFont.js @@ -0,0 +1,73 @@ +/** + * useDocumentFont.js — register a self-hosted @font-face at DOCUMENT level, once per page. + * + * WHY THIS IS NOT useShadowStyles. @font-face is DOCUMENT-SCOPED: a face declared inside a shadow + * root is ignored by every engine, so a custom element cannot register its own webfont the way it + * registers its own CSS. The face has to go in the host document; only then can shadow CSS refer + * to the family by name. That asymmetry is the whole reason this file exists next to + * useShadowStyles rather than inside it. + * + * WHY A WEBFONT AT ALL (measured 2026-09-24). The regions plugin is an exact clone of DX-life's + * /regions pages, whose headings are Bebas Neue. We cannot @font-face from their origin — their + * font file is served without CORS headers, so a cross-origin face silently fails and every + * heading falls back to a condensed system stack. That substitution was the ONLY difference left + * between our region dashboard and theirs: 7 computed properties, of which 3 were the family + * itself and 4 were knock-ons (an uppercase hack to imitate Bebas's caps, and two font-sizes + * stepped down because a wider fallback face overflowed their card widths). Vendoring the font + * collapses all 7 and DELETES those workarounds rather than adding more. + * + * SELF-HOSTED, NEVER A CDN — the same rule public/assets/vendor/tabulator follows, and the + * reason the files live under public/assets/fonts with their licence beside them. + * + * IDEMPOTENT per page: keyed by family name on document.head, so N elements composing on one page + * register one face. Safe to call from setup(); no-ops server-side and in any context without a + * document. + */ + +/** + * @param {string} family the family name shadow CSS will ask for, e.g. 'Bebas Neue' + * @param {Array} faces [{ src, unicodeRange? }] — src RELATIVE to assetsBase + * @param {string} assetsBase where the shared asset tree is served from (profileConfig.assetsBase) + * @param {object} [opts] { weight = '400', style = 'normal', display = 'swap' } + */ +export function useDocumentFont(family, faces, assetsBase, opts = {}) { + if (typeof document === 'undefined' || !family || !faces?.length) return + const key = 'doxa-font-' + String(family).toLowerCase().replace(/[^a-z0-9]+/g, '-') + if (document.getElementById(key)) return + + const base = String(assetsBase || './assets').replace(/\/+$/, '') + const weight = opts.weight || '400' + const style = opts.style || 'normal' + const display = opts.display || 'swap' + + const css = faces.map((f) => { + // The unicode-range values are Google's own (css2 API), carried through verbatim so the + // subset split behaves as it does on their site rather than pulling the larger file always. + const range = f.unicodeRange ? ` unicode-range: ${f.unicodeRange};\n` : '' + return `@font-face {\n font-family: '${family}';\n font-style: ${style};\n` + + ` font-weight: ${weight};\n font-display: ${display};\n` + + ` src: url('${base}/${String(f.src).replace(/^\/+/, '')}') format('woff2');\n${range}}` + }).join('\n') + + const el = document.createElement('style') + el.id = key + el.setAttribute('data-doxa-font', family) + el.textContent = css + document.head.appendChild(el) +} + +// Bebas Neue, as DX-life serves it: two subsets, Google's own ranges (css2 v16). +export const BEBAS_NEUE_FACES = [ + { + src: 'fonts/bebas-neue/bebas-neue-latin.woff2', + unicodeRange: 'U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, ' + + 'U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, ' + + 'U+FEFF, U+FFFD', + }, + { + src: 'fonts/bebas-neue/bebas-neue-latin-ext.woff2', + unicodeRange: 'U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, ' + + 'U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, ' + + 'U+2113, U+2C60-2C7F, U+A720-A7FF', + }, +] diff --git a/plugin-designs/regions-dashboard/region-dashboards.vue b/plugin-designs/regions-dashboard/region-dashboards.vue index 86787bfaf..6fa8a0722 100644 --- a/plugin-designs/regions-dashboard/region-dashboards.vue +++ b/plugin-designs/regions-dashboard/region-dashboards.vue @@ -24,6 +24,7 @@ */ import { inject, ref, computed, onMounted, onBeforeUnmount } from 'vue' import { useShadowStyles } from '@map/composables/useShadowStyles.js' +import { useDocumentFont, BEBAS_NEUE_FACES } from '@map/composables/useDocumentFont.js' import FilterDropdown from '@map/components/search/FilterDropdown.vue' import UupgsList from './src/UupgsList.vue' import RegionCountryMap from './src/RegionCountryMap.vue' @@ -62,6 +63,14 @@ const instanceId = computed(() => cfg.value.instanceId || '') // already forwards it in INHERITED_PAGE_KEYS; this reads it instead of trusting the default. const assetsBase = computed(() => cfg.value.assetsBase || './assets') +// ★ REGISTER BEBAS NEUE AT DOCUMENT LEVEL, not in the shadow root: @font-face is +// document-scoped and a face declared inside a shadow root is ignored. Their headings ARE +// this font (tokens/semantic/_typography.scss:5) and it could not be loaded from their +// origin — no CORS headers — so it is vendored under public/assets/fonts/bebas-neue (OFL, +// provenance in LICENSE.txt beside it). Loading it deleted an uppercase imitation and two +// stepped-down font-sizes that only existed because the fallback face was wider. +useDocumentFont('Bebas Neue', BEBAS_NEUE_FACES, assetsBase.value) + // ── state ─────────────────────────────────────────────────────────────────── const regions = ref([]) // The rollup aggregates records away, and the map needs them one by one. Kept flat and @@ -504,8 +513,8 @@ useShadowStyles( // h1: _globals.scss clamp(--font-size-3xl, 7vw, --font-size-5xl) = clamp(47.6837px,_,74.5058px), // heading family, line-height 1. cqw not vw -- see tab 1 for why. '.rd-title{ margin:0; font-size:clamp(47.6837px, 7cqw, 74.5058px); line-height:1;' + - ' font-family:"Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + - ' font-weight:400; font-stretch:condensed; text-transform:uppercase; }' + + ' font-family:"Bebas Neue","Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + + ' font-weight:400; }' + // their .color-brand-lighter summary under the h1 '.rd-summary{ margin:0; color:var(--dx-muted); font-size:19.5312px; }' + '.rd-prompt{ margin:0; color:var(--dx-muted); font-size:15.625px; }' + @@ -527,8 +536,8 @@ useShadowStyles( '.rd-stat__value[data-len="long"]{ font-size:38.147px; }' + '.rd-stat__value[data-len="xlong"]{ font-size:30.5176px; }' + '.rd-stat__value{ margin:0; font-size:47.6837px; line-height:1;' + - ' font-family:"Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + - ' font-weight:400; font-stretch:condensed; }' + + ' font-family:"Bebas Neue","Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + + ' font-weight:400; }' + '.rd-stat__label{ margin:7.5188px 0 0; font-size:15.625px; color:var(--dx-muted); }' + '.rd-chart{ padding:23.5264px clamp(17.689px, 4cqw, 31.2901px); }' + @@ -564,14 +573,13 @@ useShadowStyles( // substituted face can render in their card. Pinning it there keeps THEIR LAYOUT (three // cards across, heading on two lines) which is what the clone is actually for. The table // heading keeps the full clamp -- it has 1200px and no such constraint. - '.rd-goal-card .rd-h2{ font-size:38.147px; }' + - // .stack--lg (23.5264px) inside each card, centred; .region-goal pins to the bottom + // .stack--lg (23.5264px) inside each card, centred; .region-goal pins to the bottom // (margin-top:auto) so three cards of different heights still align their goal lines. '.rd-goal-card{ display:flex; flex-direction:column; gap:23.5264px; text-align:center; }' + // h2: _globals.scss clamp(--font-size-2xl, 6vw, --font-size-4xl) = clamp(38.147px,_,59.6046px) '.rd-h2{ margin:0; font-size:clamp(38.147px, 6cqw, 59.6046px); line-height:1;' + - ' font-family:"Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + - ' font-weight:400; font-stretch:condensed; }' + + ' font-family:"Bebas Neue","Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + + ' font-weight:400; }' + '.rd-h2--start{ text-align:start; }' + // .font-size-4xl .font-weight-medium / .font-size-lg // Their .font-size-4xl (59.6046px) verified live. Same substitution consequence as the h2: @@ -580,7 +588,7 @@ useShadowStyles( // THEIR scale) and pinned nowrap so a figure can never be split across lines. The stat-card // values keep the full 47.6837px -- those cards are wider and were measured to fit. '.rd-big{ margin:0; font-size:59.6046px; font-weight:500; line-height:1.1; }' + - '.rd-goal-card .rd-big{ font-size:47.6837px; white-space:nowrap; }' + + '.rd-goal-card .rd-big{ white-space:nowrap; }' + '.rd-big-label{ margin:0; font-size:24.4141px; }' + '.rd-stack-xs{ display:flex; flex-direction:column; gap:10px; }' + '.rd-goal{ margin:auto 0 0; font-size:15.625px; }' + diff --git a/plugin-designs/regions-dashboard/regions-list.vue b/plugin-designs/regions-dashboard/regions-list.vue index f9a8ec3c6..6f86063ee 100644 --- a/plugin-designs/regions-dashboard/regions-list.vue +++ b/plugin-designs/regions-dashboard/regions-list.vue @@ -31,6 +31,7 @@ */ import { inject, ref, computed, onMounted, getCurrentInstance } from 'vue' import { useShadowStyles } from '@map/composables/useShadowStyles.js' +import { useDocumentFont, BEBAS_NEUE_FACES } from '@map/composables/useDocumentFont.js' const props = defineProps({ profileConfig: { type: String, default: '' }, @@ -61,6 +62,16 @@ const cfg = computed(() => { }) const prayBaseUrl = computed(() => props.prayBaseUrl || cfg.value.prayBaseUrl || 'https://pray.doxa.life') const languageCode = computed(() => props.languageCode || cfg.value.languageCode || '') +// Where the shared asset tree is served from: the generator bakes it per page depth and the +// composite forwards it via INHERITED_PAGE_KEYS. Needed for the vendored @font-face path below. +const assetsBase = computed(() => cfg.value.assetsBase || './assets') + +// ★ REGISTER BEBAS NEUE AT DOCUMENT LEVEL, not in the shadow root: @font-face is document-scoped +// and a face declared inside a shadow root is ignored. This profile registers it too, and not +// only tab 2, because its own leaf page (regions-list/index.html) is a standalone surface where +// tab 2 is not present — relying on a sibling would leave THIS page on the fallback face. +// Idempotent per document, so the composite still registers exactly one. +useDocumentFont('Bebas Neue', BEBAS_NEUE_FACES, assetsBase.value) // ── state ─────────────────────────────────────────────────────────────────── const regions = ref([]) @@ -288,8 +299,8 @@ useShadowStyles( // the face's natural narrowness, but weight/leading/tracking/case now match the measured values // exactly rather than compounding extra "boldness" the source doesn't have. '.region-card__title{ margin:0; font-size:clamp(30.5176px, 4cqw, 47.6837px); line-height:1;' + - ' font-family:"Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + - ' font-weight:400; font-stretch:condensed; letter-spacing:normal; }' + + ' font-family:"Bebas Neue","Arial Narrow",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;' + + ' font-weight:400; letter-spacing:normal; }' + '.region-card__link{ appearance:none; background:none; border:0; padding:0; margin:0; text-align:left;' + ' cursor:pointer; color:inherit; font:inherit; display:inline-flex; align-items:baseline; gap:10px; }' + '.region-card__link:hover{ color:#92b195; }' + diff --git a/public/assets/fonts/bebas-neue/LICENSE b/public/assets/fonts/bebas-neue/LICENSE new file mode 100644 index 000000000..e7376bc49 --- /dev/null +++ b/public/assets/fonts/bebas-neue/LICENSE @@ -0,0 +1,24 @@ +Bebas Neue — SIL Open Font License, Version 1.1 +Designer: Ryoichi Tsunekawa (Dharma Type). Distributed via Google Fonts. +Full text: https://openfontlicense.org/ (OFL-1.1) + +WHY THIS FILE IS IN THIS REPO +DX-life's /regions pages set --font-family-heading to 'Bebas Neue'. Their own site does not +ship the file either — @nuxt/fonts downloads it at build and self-hosts it, which is why their +computed font-family reads "Bebas Neue", "Bebas Neue Fallback: ...". We cannot @font-face from +their origin: their font file is served without CORS headers, so a cross-origin face silently +fails and every heading fell back to a condensed system stack. That substitution was the ONLY +remaining difference between our regions dashboard and theirs (7 computed properties, all of +them this one font and its knock-on sizes). +So the font is vendored here, from Google Fonts, under the OFL that permits redistribution — +self-hosted, never a CDN, the same rule public/assets/vendor/tabulator/ follows. +Subsets and unicode-ranges are Google's own (css2 API, v16), reproduced verbatim in the +@font-face declared by library/composables/useDocumentFont.js. + +NOTE ON THIS FILENAME — it is deliberately extensionless. +check:public-hygiene refuses *.md / *.markdown / *.txt anywhere in the served tree ("no docs in a +served folder", Driver rule 2026-09-16), and it is right to: prose does not belong in a public +mirror. But the OFL requires this licence to accompany the font files wherever they are +redistributed, and the font files DO ship — they are fetched by the @font-face at runtime. So the +licence travels with them under the conventional extensionless name, which satisfies the rule +without weakening it. Do not rename this to LICENSE.txt. diff --git a/public/assets/fonts/bebas-neue/bebas-neue-latin-ext.woff2 b/public/assets/fonts/bebas-neue/bebas-neue-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..23b344f3d403eadc81e5fe6e9893aef20a5859d4 GIT binary patch literal 8928 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 z zadmU|@bvQb@%2McGKJa`8lAypu{m5GUmz5TB|Yn};WD{GsZwjS2#VnZNzn|;@%{eA zUP+EBlq$7GtJ52dCbPwAvlse$&~2=E#?FEL-sw-oS{&|UC)OE`JuSqF9KJVEWKZqG zO8my3(<%Sk!mSlgjyHtAHz@+)$7Lr*;OCbqln`a3k$@U1k;#YicaW;Xw1rSV0|E zkC@jc+5^^V4ZBuVWpF*}+gAQwS{pHAy$)7>#=ted96OPYJEtk^d!_eghE;9>KIdlZ z^^C)J?-2(vepenb!wGC%X{_VWSh1(ZKUT^M93US~hB%ximM1c$zhnTpPF8OI9WGv6 z`nSV(StD!Wm=q<}#4)pG*1RYu zCLPPkEjq5%6kflG$-ZiIM6VN!Z*T1KGyf_WE{~*x()fy+HU0Vi-yvO**rI!KcP~SV zHaA;TmkLD3pu`9S;=L7RL51Yo<51Ww!A)EYm{v;$U)JbZ)#NCMdI!Q1Dx ukL#ecfRlJ-kq&?#b}$}`QJAEW8&IatGyH$@tLW_45Le=tXq^s{F8}~`(B88E literal 0 HcmV?d00001 diff --git a/public/assets/fonts/bebas-neue/bebas-neue-latin.woff2 b/public/assets/fonts/bebas-neue/bebas-neue-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..92d6a0f7297276c67ade85119be8996eae8b3d57 GIT binary patch literal 13768 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≠ueS2(Z(=p06JW_4vixfA?-eT;=$)( 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 literal 0 HcmV?d00001 diff --git a/public/doxa-maps/assets/fonts/bebas-neue/LICENSE b/public/doxa-maps/assets/fonts/bebas-neue/LICENSE new file mode 100644 index 000000000..e7376bc49 --- /dev/null +++ b/public/doxa-maps/assets/fonts/bebas-neue/LICENSE @@ -0,0 +1,24 @@ +Bebas Neue — SIL Open Font License, Version 1.1 +Designer: Ryoichi Tsunekawa (Dharma Type). Distributed via Google Fonts. +Full text: https://openfontlicense.org/ (OFL-1.1) + +WHY THIS FILE IS IN THIS REPO +DX-life's /regions pages set --font-family-heading to 'Bebas Neue'. Their own site does not +ship the file either — @nuxt/fonts downloads it at build and self-hosts it, which is why their +computed font-family reads "Bebas Neue", "Bebas Neue Fallback: ...". We cannot @font-face from +their origin: their font file is served without CORS headers, so a cross-origin face silently +fails and every heading fell back to a condensed system stack. That substitution was the ONLY +remaining difference between our regions dashboard and theirs (7 computed properties, all of +them this one font and its knock-on sizes). +So the font is vendored here, from Google Fonts, under the OFL that permits redistribution — +self-hosted, never a CDN, the same rule public/assets/vendor/tabulator/ follows. +Subsets and unicode-ranges are Google's own (css2 API, v16), reproduced verbatim in the +@font-face declared by library/composables/useDocumentFont.js. + +NOTE ON THIS FILENAME — it is deliberately extensionless. +check:public-hygiene refuses *.md / *.markdown / *.txt anywhere in the served tree ("no docs in a +served folder", Driver rule 2026-09-16), and it is right to: prose does not belong in a public +mirror. But the OFL requires this licence to accompany the font files wherever they are +redistributed, and the font files DO ship — they are fetched by the @font-face at runtime. So the +licence travels with them under the conventional extensionless name, which satisfies the rule +without weakening it. Do not rename this to LICENSE.txt. diff --git a/public/doxa-maps/assets/fonts/bebas-neue/bebas-neue-latin-ext.woff2 b/public/doxa-maps/assets/fonts/bebas-neue/bebas-neue-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..23b344f3d403eadc81e5fe6e9893aef20a5859d4 GIT binary patch literal 8928 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 z zadmU|@bvQb@%2McGKJa`8lAypu{m5GUmz5TB|Yn};WD{GsZwjS2#VnZNzn|;@%{eA zUP+EBlq$7GtJ52dCbPwAvlse$&~2=E#?FEL-sw-oS{&|UC)OE`JuSqF9KJVEWKZqG zO8my3(<%Sk!mSlgjyHtAHz@+)$7Lr*;OCbqln`a3k$@U1k;#YicaW;Xw1rSV0|E zkC@jc+5^^V4ZBuVWpF*}+gAQwS{pHAy$)7>#=ted96OPYJEtk^d!_eghE;9>KIdlZ z^^C)J?-2(vepenb!wGC%X{_VWSh1(ZKUT^M93US~hB%ximM1c$zhnTpPF8OI9WGv6 z`nSV(StD!Wm=q<}#4)pG*1RYu zCLPPkEjq5%6kflG$-ZiIM6VN!Z*T1KGyf_WE{~*x()fy+HU0Vi-yvO**rI!KcP~SV zHaA;TmkLD3pu`9S;=L7RL51Yo<51Ww!A)EYm{v;$U)JbZ)#NCMdI!Q1Dx ukL#ecfRlJ-kq&?#b}$}`QJAEW8&IatGyH$@tLW_45Le=tXq^s{F8}~`(B88E literal 0 HcmV?d00001 diff --git a/public/doxa-maps/assets/fonts/bebas-neue/bebas-neue-latin.woff2 b/public/doxa-maps/assets/fonts/bebas-neue/bebas-neue-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..92d6a0f7297276c67ade85119be8996eae8b3d57 GIT binary patch literal 13768 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≠ueS2(Z(=p06JW_4vixfA?-eT;=$)( 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 literal 0 HcmV?d00001 diff --git a/public/doxa-maps/index.html b/public/doxa-maps/index.html index 07052d98f..f71fd4494 100644 --- a/public/doxa-maps/index.html +++ b/public/doxa-maps/index.html @@ -130,7 +130,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":"plugin-designs/*/*.vue","embedBase":".","bundleCount":21,"profileCount":32,"bundles":[{"bundle":"all-people-groups","scriptUrl":"./all-people-groups/all-people-groups.js","output":"doxa-maps/all-people-groups/all-people-groups.js","integrity":"sha384-xK62b4nEd/ei3xDdRNOOCl9YyDRliPUvS8dtna07xFFR1nwPqaCiAHBNuxRtuaIH","elements":["all-people-groups"],"profiles":[{"profile":"all-people-groups","file":"all-people-groups.vue","description":"All 12,379 people groups (peoplegroups.org) in four colors — reached,","element":"all-people-groups","type":"single","isMap":true,"iframeUrl":"./all-people-groups/all-people-groups/index.html","scriptUrl":"./all-people-groups/all-people-groups.js","embed":{"iframe":"\u003ciframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-xK62b4nEd/ei3xDdRNOOCl9YyDRliPUvS8dtna07xFFR1nwPqaCiAHBNuxRtuaIH\" crossorigin=\"anonymous\">\u003c/script>\n\u003call-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/all-people-groups>"},"bundle":"all-people-groups"}]},{"bundle":"big-picture","scriptUrl":"./big-picture/big-picture.js","output":"doxa-maps/big-picture/big-picture.js","integrity":"sha384-v0b+aZ7TBxmgUIBBLdKEm6HzwjY3jAGyOFNsKeKCKY4EIRpiWRTcNLavAitHRt8h","elements":["bp-big-picture","bp-research-header","people-groups-grid"],"composes":["bp-research-header","people-groups-grid"],"profiles":[{"profile":"big-picture","file":"big-picture.vue","description":"The Cat-4 composite that PAIRS the two real capability elements of the","element":"bp-big-picture","type":"nested-elements-mfe","isMap":false,"iframeUrl":"./big-picture/big-picture/index.html","scriptUrl":"./big-picture/big-picture.js","embed":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./big-picture/big-picture.js\" integrity=\"sha384-v0b+aZ7TBxmgUIBBLdKEm6HzwjY3jAGyOFNsKeKCKY4EIRpiWRTcNLavAitHRt8h\" crossorigin=\"anonymous\">\u003c/script>\n\u003cbp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/bp-big-picture>"},"instances":[{"id":"big-picture","title":"Big Picture — research header ↔ people-groups grid (composite)","apiBaseUrl":"","props":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture"},"element":"bp-big-picture","iframeUrl":"./big-picture/big-picture/big-picture/index.html","embed":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/big-picture/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"frontier","title":"Big Picture — frontier accent","apiBaseUrl":"","props":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture-frontier","accent":"#22d3ee","title":"Big Picture — Frontier Focus"},"element":"bp-big-picture","iframeUrl":"./big-picture/big-picture/frontier/index.html","embed":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/frontier/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}],"bundle":"big-picture"}]},{"bundle":"cities-internet","scriptUrl":"./cities-internet/cities-internet.js","output":"doxa-maps/cities-internet/cities-internet.js","integrity":"sha384-fqVHxFNirz7+lNdo6RyMGcSABK6RIBNOw+iEQ/Ea6/c5UP+9dqS+Qt4I26HW5B7q","elements":["cities-internet-map"],"profiles":[{"profile":"connectivity-list","file":"connectivity-list.vue","description":"Countries where DX people groups live, grouped by region, showing measured internet penetration","element":"cities-internet-map","type":"single","isMap":false,"iframeUrl":"./cities-internet/connectivity-list/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-fqVHxFNirz7+lNdo6RyMGcSABK6RIBNOw+iEQ/Ea6/c5UP+9dqS+Qt4I26HW5B7q\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"profile":"connectivity-map","file":"connectivity-map.vue","description":"Every country shaded by measured internet penetration, with its named carriers and dominant","element":"cities-internet-map","type":"single","isMap":true,"iframeUrl":"./cities-internet/connectivity-map/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-fqVHxFNirz7+lNdo6RyMGcSABK6RIBNOw+iEQ/Ea6/c5UP+9dqS+Qt4I26HW5B7q\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"Four validated research tables, one tab each, with sortable and filterable columns, CSV and JSON","element":"cities-internet-map","type":"single","isMap":false,"iframeUrl":"./cities-internet/data-tables/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-fqVHxFNirz7+lNdo6RyMGcSABK6RIBNOw+iEQ/Ea6/c5UP+9dqS+Qt4I26HW5B7q\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}}]},{"bundle":"country-posters","scriptUrl":"./country-posters/country-posters.js","output":"doxa-maps/country-posters/country-posters.js","integrity":"sha384-UTYLRFiNWmKlIlICfa6YLPib+AxYU4q0LRNq8iAzT+NaowJJltzEYEHa49htnFww","elements":["country-posters-map"],"profiles":[{"profile":"countries-map","file":"countries-map.vue","description":"The researcher's workbench retargeted from people groups to COUNTRIES — region","element":"country-posters-map","type":"single","isMap":true,"iframeUrl":"./country-posters/countries-map/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-UTYLRFiNWmKlIlICfa6YLPib+AxYU4q0LRNq8iAzT+NaowJJltzEYEHa49htnFww\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}},{"profile":"country-poster-wall","file":"country-poster-wall.vue","description":"One printable card per country, grouped into COLLAPSIBLE regional sections so the","element":"country-posters-map","type":"single","isMap":false,"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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-UTYLRFiNWmKlIlICfa6YLPib+AxYU4q0LRNq8iAzT+NaowJJltzEYEHa49htnFww\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}}]},{"bundle":"dashboard-plus-grid","scriptUrl":"./dashboard-plus-grid/dashboard-plus-grid.js","output":"doxa-maps/dashboard-plus-grid/dashboard-plus-grid.js","integrity":"sha384-e0HUXubejRqYxQaZKpTjMvFaWIdWEakh4U+4waJXdPsGWsFRBqMqzq4CrWPxkJ3Q","elements":["dashboard-plus-grid"],"composes":["research-dashboard","people-groups-grid"],"profiles":[{"profile":"dashboard-plus-grid","file":"dashboard-plus-grid.vue","description":"Both children are IMPORTED DIRECTLY (compiled into this ONE bundle — no runtime bundle","element":"dashboard-plus-grid","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./dashboard-plus-grid/dashboard-plus-grid/index.html","scriptUrl":"./dashboard-plus-grid/dashboard-plus-grid.js","embed":{"iframe":"\u003ciframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-e0HUXubejRqYxQaZKpTjMvFaWIdWEakh4U+4waJXdPsGWsFRBqMqzq4CrWPxkJ3Q\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/dashboard-plus-grid>"},"instances":[{"id":"default","title":"default","apiBaseUrl":"","props":{"profile":"dashboard-plus-grid"},"element":"dashboard-plus-grid","iframeUrl":"./dashboard-plus-grid/dashboard-plus-grid/default/index.html","embed":{"iframe":"\u003ciframe src=\"./dashboard-plus-grid/dashboard-plus-grid/default/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"demo-map","scriptUrl":"./demo-map/demo-map.js","output":"doxa-maps/demo-map/demo-map.js","integrity":"sha384-30eVMRgp3BZf/wqP7A2s3/n3G62zmxdAyRX1m7dktVcAXDAva/pAdALScLNtY/2D","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","type":"parameterized","isMap":true,"iframeUrl":"./demo-map/demo-map/index.html","scriptUrl":"./demo-map/demo-map.js","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./demo-map/demo-map.js\" integrity=\"sha384-30eVMRgp3BZf/wqP7A2s3/n3G62zmxdAyRX1m7dktVcAXDAva/pAdALScLNtY/2D\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/demo-map>"},"instances":[{"id":"maplibre","title":"Demo map — MapLibre (token-free)","apiBaseUrl":"","props":{"profile":"demo-map","provider":"maplibre","instanceId":"demo-maplibre"},"element":"demo-map","iframeUrl":"./demo-map/demo-map/maplibre/index.html","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/maplibre/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}],"bundle":"demo-map"}]},{"bundle":"doxa-maps-spa","scriptUrl":"./doxa-maps-spa/doxa-maps-spa.js","output":"doxa-maps/doxa-maps-spa/doxa-maps-spa.js","integrity":"sha384-Ce+DKsLgwfej+rgoWeaWFuMMbR3Y4H+8io/lVL+lQfX0O3iGKwDLf4remDkHGCrP","elements":["doxa-maps-spa"],"composes":["bp-big-picture","doxa-research-map","doxa-simple-map","cities-internet-map","gospel-resources-map","my-upg-100-list-map"],"profiles":[{"profile":"doxa-maps-spa","file":"doxa-maps-spa.vue","description":"The DX-maps app itself: one element whose vertical-tab rail nests every other","element":"doxa-maps-spa","type":"nested-mfe-spa","isMap":false,"iframeUrl":"./doxa-maps-spa/doxa-maps-spa/index.html","scriptUrl":"./doxa-maps-spa/doxa-maps-spa.js","embed":{"iframe":"\u003ciframe src=\"./doxa-maps-spa/doxa-maps-spa/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-maps-spa/doxa-maps-spa.js\" integrity=\"sha384-Ce+DKsLgwfej+rgoWeaWFuMMbR3Y4H+8io/lVL+lQfX0O3iGKwDLf4remDkHGCrP\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-maps-spa profile-config='{\"profile\":\"doxa-maps-spa\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-maps-spa>"},"instances":[{"id":"app","title":"DX-Maps SPA — Big Picture + every research map (app-shell)","apiBaseUrl":"","props":{"profile":"doxa-maps-spa","provider":"maplibre","instanceId":"doxa-maps-spa-app","title":"DX-Maps"},"element":"doxa-maps-spa","iframeUrl":"./doxa-maps-spa/doxa-maps-spa/app/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-maps-spa/doxa-maps-spa/app/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"doxa-research-map","scriptUrl":"./doxa-research-map/doxa-research-map.js","output":"doxa-maps/doxa-research-map/doxa-research-map.js","integrity":"sha384-DSgWMYtNlvvyqIwcrFlZzj0ti1WhYywDDGWr90iUpoFQH8wex8S6ASSBCjkRy5u7","elements":["doxa-research-map"],"profiles":[{"profile":"research-map","file":"research-map.vue","description":"The researcher's workbench: every piece a missiologist, demographer or","element":"doxa-research-map","type":"monolithic","isMap":true,"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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-DSgWMYtNlvvyqIwcrFlZzj0ti1WhYywDDGWr90iUpoFQH8wex8S6ASSBCjkRy5u7\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-research-map>"},"instances":[{"id":"maplibre","title":"Research map — MapLibre (token-free, no search bar)","apiBaseUrl":"","props":{"profile":"research-map","provider":"maplibre","instanceId":"research-map-maplibre"},"element":"doxa-research-map","iframeUrl":"./doxa-research-map/research-map/maplibre/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/maplibre/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"doxa-simple-map","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","output":"doxa-maps/doxa-simple-map/doxa-simple-map.js","integrity":"sha384-8zB7l5N7hIH+3BgOCV1PVu92q/8/19j2K29Ih1VC/0oMZZlcD4JfwaC3M6vTbDWO","elements":["doxa-map","doxa-simple-map"],"profiles":[{"profile":"doxa-simple-map","file":"doxa-simple-map.vue","description":"The simple world map, shipped as three presets off ONE prop table —","element":"doxa-map","type":"parameterized","isMap":true,"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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-8zB7l5N7hIH+3BgOCV1PVu92q/8/19j2K29Ih1VC/0oMZZlcD4JfwaC3M6vTbDWO\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\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?utm_source=YOUR_SOURCE\" 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?utm_source=YOUR_SOURCE\" 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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"doxa-vision-card","scriptUrl":"./doxa-vision-card/doxa-vision-card.js","output":"doxa-maps/doxa-vision-card/doxa-vision-card.js","integrity":"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn","elements":["doxa-vision-card"],"profiles":[{"profile":"doxa-vision-card","file":"doxa-vision-card.vue","description":"The Capability-1 example: ONE folder -> ONE bundle -> ONE element.","element":"doxa-vision-card","type":"parameterized","isMap":false,"iframeUrl":"./doxa-vision-card/doxa-vision-card/index.html","scriptUrl":"./doxa-vision-card/doxa-vision-card.js","embed":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-vision-card/doxa-vision-card.js\" integrity=\"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-vision-card profile-config='{\"profile\":\"doxa-vision-card\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-vision-card>"},"instances":[{"id":"default","title":"Vision card — reach at a glance","apiBaseUrl":"","props":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-default"},"element":"doxa-vision-card","iframeUrl":"./doxa-vision-card/doxa-vision-card/default/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/default/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"frontier","title":"Vision card — frontier accent","apiBaseUrl":"","props":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-frontier","accent":"#22d3ee","title":"The last frontier of the gospel.","tagline":"Frontier people groups — where fewer than one in a thousand follow Jesus.","stats":[{"value":"1,910","label":"Frontier groups","note":"under 0.1% believers"},{"value":"2.1B","label":"People","note":"living in frontier settings"},{"value":"0.1%","label":"Christian","note":"or fewer, in each group"}]},"element":"doxa-vision-card","iframeUrl":"./doxa-vision-card/doxa-vision-card/frontier/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/frontier/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}],"bundle":"doxa-vision-card"}]},{"bundle":"golden-path-check","scriptUrl":"./golden-path-check/golden-path-check.js","output":"doxa-maps/golden-path-check/golden-path-check.js","integrity":"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14","elements":["golden-path-check"],"profiles":[{"profile":"golden-path-check","file":"golden-path-check.vue","description":"A live self-test of the develop-a-plugin-and-see-it-live path: it reads the built","element":"golden-path-check","type":"single","isMap":false,"iframeUrl":"./golden-path-check/golden-path-check/index.html","scriptUrl":"./golden-path-check/golden-path-check.js","embed":{"iframe":"\u003ciframe src=\"./golden-path-check/golden-path-check/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./golden-path-check/golden-path-check.js\" integrity=\"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgolden-path-check profile-config='{\"profile\":\"golden-path-check\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/golden-path-check>"}}]},{"bundle":"gospel-resources","scriptUrl":"./gospel-resources/gospel-resources.js","output":"doxa-maps/gospel-resources/gospel-resources.js","integrity":"sha384-MBKsP+YZGmQ/TOcM1VDm7E0qB5EOP5W+MbUWVtfjiP1J0pIDSUi5SWbj1bgY74+X","elements":["gospel-resources-map"],"profiles":[{"profile":"charts","file":"charts.vue","description":"The gap by LANGUAGE (ISO 639-3) rather than by people group — because one translation serves every","element":"gospel-resources-map","type":"single","isMap":false,"iframeUrl":"./gospel-resources/charts/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-MBKsP+YZGmQ/TOcM1VDm7E0qB5EOP5W+MbUWVtfjiP1J0pIDSUi5SWbj1bgY74+X\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"Two validated tables: what resources exist per people group, and whether that access is keeping","element":"gospel-resources-map","type":"single","isMap":false,"iframeUrl":"./gospel-resources/data-tables/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-MBKsP+YZGmQ/TOcM1VDm7E0qB5EOP5W+MbUWVtfjiP1J0pIDSUi5SWbj1bgY74+X\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-list","file":"resources-list.vue","description":"Which DX people groups have scripture in their own language, and which have none. The zero-resource","element":"gospel-resources-map","type":"single","isMap":false,"iframeUrl":"./gospel-resources/resources-list/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-MBKsP+YZGmQ/TOcM1VDm7E0qB5EOP5W+MbUWVtfjiP1J0pIDSUi5SWbj1bgY74+X\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-map","file":"resources-map.vue","description":"Every country shaded by how much of its unengaged population has NO gospel resource in their own","element":"gospel-resources-map","type":"single","isMap":true,"iframeUrl":"./gospel-resources/resources-map/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-MBKsP+YZGmQ/TOcM1VDm7E0qB5EOP5W+MbUWVtfjiP1J0pIDSUi5SWbj1bgY74+X\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-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","integrity":"sha384-X8Guibb3M+sTLampUzojsKp8BlwTGfscE/ZKkGlwKm15PXhvIdGTwx8S/y3BQgEa","elements":["my-upg-100-list-map"],"composes":["my-upg-100-list/upg-100-list","my-upg-100-list/poster-wall"],"profiles":[{"profile":"poster-wall","file":"poster-wall.vue","description":"A wall of printable poster cards, one per 100-list entry, each with a \"Show on map\" action that","element":"my-upg-100-list-map","type":"single","isMap":true,"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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-X8Guibb3M+sTLampUzojsKp8BlwTGfscE/ZKkGlwKm15PXhvIdGTwx8S/y3BQgEa\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-list","file":"upg-100-list.vue","description":"A personal unreached-people-groups list painted as true boundary polygons —","element":"my-upg-100-list-map","type":"single","isMap":true,"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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-X8Guibb3M+sTLampUzojsKp8BlwTGfscE/ZKkGlwKm15PXhvIdGTwx8S/y3BQgEa\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-mfe","file":"upg-100-mfe.vue","description":"The standalone, shareable and embeddable composite of the my-upg-100-list family — it nests the map","element":"my-upg-100-list-map","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./my-upg-100-list/upg-100-mfe/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-X8Guibb3M+sTLampUzojsKp8BlwTGfscE/ZKkGlwKm15PXhvIdGTwx8S/y3BQgEa\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}}]},{"bundle":"people-groups-grid","scriptUrl":"./people-groups-grid/people-groups-grid.js","output":"doxa-maps/people-groups-grid/people-groups-grid.js","integrity":"sha384-wyfAzVfoufR5FaDoo3DSivtV33qOexc7PhDYZkXlYmru5FqZgncuUos3nN0kkMJL","elements":["people-groups-grid"],"profiles":[{"profile":"people-groups-grid","file":"people-groups-grid.vue","description":"The people-groups grid as an owned custom element: card list, search and four","element":"people-groups-grid","type":"parameterized","isMap":false,"iframeUrl":"./people-groups-grid/people-groups-grid/index.html","scriptUrl":"./people-groups-grid/people-groups-grid.js","embed":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-wyfAzVfoufR5FaDoo3DSivtV33qOexc7PhDYZkXlYmru5FqZgncuUos3nN0kkMJL\" crossorigin=\"anonymous\">\u003c/script>\n\u003cpeople-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/people-groups-grid>"},"instances":[{"id":"people-groups-grid","title":"People Groups Grid — standalone (own search + 4 dropdowns)","apiBaseUrl":"","props":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid","pray-base-url":"https://pray.doxa.life"},"element":"people-groups-grid","iframeUrl":"./people-groups-grid/people-groups-grid/people-groups-grid/index.html","embed":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/people-groups-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"driven","title":"People Groups Grid — externally driven (controls off, props/events)","apiBaseUrl":"","props":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid-driven","pray-base-url":"https://pray.doxa.life","show-search":"false","show-filters":"false"},"element":"people-groups-grid","iframeUrl":"./people-groups-grid/people-groups-grid/driven/index.html","embed":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/driven/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"plugin-studio","scriptUrl":"./plugin-studio/plugin-studio.js","output":"doxa-maps/plugin-studio/plugin-studio.js","integrity":"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH","elements":["plugin-studio"],"composes":["bp-big-picture","people-groups-grid","doxa-research-map","doxa-simple-map","cities-internet-map","gospel-resources-map","my-upg-100-list-map","doxa-vision-card","all-people-groups","research-dashboard"],"profiles":[{"profile":"plugin-studio","file":"plugin-studio.vue","description":"The developer's viewing surface: a sidebar that is the composability ladder","element":"plugin-studio","type":"nested-mfe-spa","isMap":false,"iframeUrl":"./plugin-studio/plugin-studio/index.html","scriptUrl":"./plugin-studio/plugin-studio.js","embed":{"iframe":"\u003ciframe src=\"./plugin-studio/plugin-studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cplugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/plugin-studio>"},"instances":[{"id":"studio","title":"Plugin Studio — every element by capability 5 -> 1 (developer studio)","apiBaseUrl":"","props":{"profile":"plugin-studio","provider":"maplibre","instanceId":"plugin-studio","title":"Plugin Studio"},"element":"plugin-studio","iframeUrl":"./plugin-studio/plugin-studio/studio/index.html","embed":{"iframe":"\u003ciframe src=\"./plugin-studio/plugin-studio/studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"prayer-walk-planner","scriptUrl":"./prayer-walk-planner/prayer-walk-planner.js","output":"doxa-maps/prayer-walk-planner/prayer-walk-planner.js","integrity":"sha384-12G2YbusFo4msQGPABgnUTa4Mva0C23QQRMrKFERfpAGTrO+xIsbDu8N3I5TP28j","elements":["prayer-walk-planner"],"profiles":[{"profile":"prayer-walk-planner","file":"prayer-walk-planner.vue","description":"A simple polygon-drawing tool for planning prayer-walking routes.","element":"prayer-walk-planner","type":"single","isMap":true,"iframeUrl":"./prayer-walk-planner/prayer-walk-planner/index.html","scriptUrl":"./prayer-walk-planner/prayer-walk-planner.js","embed":{"iframe":"\u003ciframe src=\"./prayer-walk-planner/prayer-walk-planner/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-12G2YbusFo4msQGPABgnUTa4Mva0C23QQRMrKFERfpAGTrO+xIsbDu8N3I5TP28j\" crossorigin=\"anonymous\">\u003c/script>\n\u003cprayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/prayer-walk-planner>"}}]},{"bundle":"regions-dashboard","scriptUrl":"./regions-dashboard/regions-dashboard.js","output":"doxa-maps/regions-dashboard/regions-dashboard.js","integrity":"sha384-OJKh00NzHcFLFpZDwX7l48y5QQdv99W05bCVGiHg4vAyJZjpLm/4GL45qrGZHn6k","elements":["regions-dashboard"],"composes":["regions-dashboard/regions-list","regions-dashboard/region-dashboards"],"profiles":[{"profile":"region-dashboards","file":"region-dashboards.vue","description":"The dashboard half of the Driver's 2-tab Regions element: given a region (or a","element":"regions-dashboard","type":"single","isMap":true,"iframeUrl":"./regions-dashboard/region-dashboards/index.html","scriptUrl":"./regions-dashboard/regions-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-OJKh00NzHcFLFpZDwX7l48y5QQdv99W05bCVGiHg4vAyJZjpLm/4GL45qrGZHn6k\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"profile":"regions-list","file":"regions-list.vue","description":"A refactor of DX-life's /regions index page (app/pages/regions/index.vue) into","element":"regions-dashboard","type":"single","isMap":true,"iframeUrl":"./regions-dashboard/regions-list/index.html","scriptUrl":"./regions-dashboard/regions-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-OJKh00NzHcFLFpZDwX7l48y5QQdv99W05bCVGiHg4vAyJZjpLm/4GL45qrGZHn6k\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"profile":"regions-mfe","file":"regions-mfe.vue","description":"The composite the Driver asked for: ONE element carrying the SELECT VIEW switcher","element":"regions-dashboard","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./regions-dashboard/regions-mfe/index.html","scriptUrl":"./regions-dashboard/regions-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-OJKh00NzHcFLFpZDwX7l48y5QQdv99W05bCVGiHg4vAyJZjpLm/4GL45qrGZHn6k\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}}]},{"bundle":"research-dashboard","scriptUrl":"./research-dashboard/research-dashboard.js","output":"doxa-maps/research-dashboard/research-dashboard.js","integrity":"sha384-38/J/SjWxW5MGCoqx5ttsr2pHXA6uSxV+ydQX+2urmWCSAimbHyW3KinkJA4ZSPf","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","type":"monolithic","isMap":true,"iframeUrl":"./research-dashboard/research-dashboard/index.html","scriptUrl":"./research-dashboard/research-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-38/J/SjWxW5MGCoqx5ttsr2pHXA6uSxV+ydQX+2urmWCSAimbHyW3KinkJA4ZSPf\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-dashboard-map>"},"bundle":"research-dashboard"}]},{"bundle":"research-map-plus-grid","scriptUrl":"./research-map-plus-grid/research-map-plus-grid.js","output":"doxa-maps/research-map-plus-grid/research-map-plus-grid.js","integrity":"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo","elements":["research-map-plus-grid"],"composes":["doxa-research-map","people-groups-grid"],"profiles":[{"profile":"research-map-plus-grid","file":"research-map-plus-grid.vue","description":"The monolithic 7-tab research map (cap-3) on top, the People Groups grid beneath,","element":"research-map-plus-grid","type":"nested-elements-mfe","isMap":false,"iframeUrl":"./research-map-plus-grid/research-map-plus-grid/index.html","scriptUrl":"./research-map-plus-grid/research-map-plus-grid.js","embed":{"iframe":"\u003ciframe src=\"./research-map-plus-grid/research-map-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-map-plus-grid>"},"instances":[{"id":"default","title":"default","apiBaseUrl":"","props":{"profile":"research-map-plus-grid"},"element":"research-map-plus-grid","iframeUrl":"./research-map-plus-grid/research-map-plus-grid/default/index.html","embed":{"iframe":"\u003ciframe src=\"./research-map-plus-grid/research-map-plus-grid/default/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"stack-demo","scriptUrl":"./stack-demo/stack-demo.js","output":"doxa-maps/stack-demo/stack-demo.js","integrity":"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf","elements":["stack-demo"],"composes":["research-dashboard-map","people-groups-grid"],"profiles":[{"profile":"stack-demo","file":"stack-demo.vue","description":"Groups TWO independent elements TOP-TO-BOTTOM so you can embed the pair on a page and","element":"stack-demo","type":"nested-elements-mfe","isMap":false,"iframeUrl":"./stack-demo/stack-demo/index.html","scriptUrl":"./stack-demo/stack-demo.js","embed":{"iframe":"\u003ciframe src=\"./stack-demo/stack-demo/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./stack-demo/stack-demo.js\" integrity=\"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf\" crossorigin=\"anonymous\">\u003c/script>\n\u003cstack-demo profile-config='{\"profile\":\"stack-demo\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/stack-demo>"},"instances":[{"id":"pair","title":"pair","apiBaseUrl":"","props":{"profile":"stack-demo"},"element":"stack-demo","iframeUrl":"./stack-demo/stack-demo/pair/index.html","embed":{"iframe":"\u003ciframe src=\"./stack-demo/stack-demo/pair/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"template-bundle","scriptUrl":"./template-bundle/template-bundle.js","output":"doxa-maps/template-bundle/template-bundle.js","integrity":"sha384-6BLnoGxxah2nBlYZe3+9dY5xquKg1exSyIUNazvQz7/0sJM4ROA4aHjRGjNMQL28","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","type":"single","isMap":false,"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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-6BLnoGxxah2nBlYZe3+9dY5xquKg1exSyIUNazvQz7/0sJM4ROA4aHjRGjNMQL28\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\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","type":"single","isMap":false,"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?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-6BLnoGxxah2nBlYZe3+9dY5xquKg1exSyIUNazvQz7/0sJM4ROA4aHjRGjNMQL28\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"}]}]}; \n\n" + "script": "\n\n" } }, { @@ -872,7 +872,7 @@ "scriptUrl": "./regions-dashboard/regions-dashboard.js", "embed": { "iframe": "", - "script": "\n\n" + "script": "\n\n" } }, { @@ -886,7 +886,7 @@ "scriptUrl": "./regions-dashboard/regions-dashboard.js", "embed": { "iframe": "", - "script": "\n\n" + "script": "\n\n" } } ] diff --git a/public/doxa-maps/regions-dashboard/region-dashboards/index.html b/public/doxa-maps/regions-dashboard/region-dashboards/index.html index eacaaf0f1..f9007b668 100644 --- a/public/doxa-maps/regions-dashboard/region-dashboards/index.html +++ b/public/doxa-maps/regions-dashboard/region-dashboards/index.html @@ -29,7 +29,7 @@ - + - + - +