diff --git a/plugin-designs/my-upg-100-list/upg-100-list.vue b/plugin-designs/my-upg-100-list/upg-100-list.vue index 5a96d68ad..2074dff70 100644 --- a/plugin-designs/my-upg-100-list/upg-100-list.vue +++ b/plugin-designs/my-upg-100-list/upg-100-list.vue @@ -46,9 +46,12 @@ import LegendMobile from '@map/components/legends/LegendMobile.vue' // own built-in light theme avoids duplicating ~60 CSS rules that would drift.) import { createPplrInstance, provideInstance } from '@map/composables/usePplrInstance.js' // slice 13 §1a: pin-click → detail side panel. CONSUME the shared -// PeopleGroupDetail (never edit src/). defineAsyncComponent so its ~115 KB only -// loads on the first pin click — exactly the research-map pattern -// (research-map.vue:152). The component reads inject('uiStore') (provided by +// PeopleGroupDetail (never edit src/). Lazy so its ~115 KB only loads on the +// first pin click — exactly the research-map pattern (research-map.vue:193). +// retryableAsyncComponent, NOT raw defineAsyncComponent: Vue CACHES a rejected +// loader promise, so one dropped chunk request would kill the panel for the +// life of the page (card BUG-LAZY-PLUGIN-DEATH-ON-A-SINGLE-FAILED-IMPORT). +// The component reads inject('uiStore') (provided by // ProfileLoader) + useI18n() (installed by this bundle's index.js), and drives // its OWN visibility/close via uiStore.selectPeopleGroup(feature|null) — it has // NO @close emit, so we gate the panel on uiStore.selectedPeopleGroup and let