diff --git a/internal/check-batch-selection-export.mjs b/internal/check-batch-selection-export.mjs index a32cd67e4..27eb0d528 100644 --- a/internal/check-batch-selection-export.mjs +++ b/internal/check-batch-selection-export.mjs @@ -275,6 +275,8 @@ const wired = { && vue.indexOf('class="upg-hud-flash"') > 0 && vue.indexOf('class="upg-hud-flash"') < vue.indexOf('class="upg-hud-actions"') && !/\.upg-hud-flash\{[^}]*display:\s*none/.test(vue) && !/@media[^{]*\{[^}]*\.upg-hud-flash\{[^}]*display:\s*none/.test(vue) })(), + // The first batch selection dismisses PinHint through its documented event (it sat over the HUD's bottom row at 390). + 'the first batch selection dismisses the pin hint': /watch\(selCount, \(n, was\) => \{\s*\n\s*if \(n > 0 && !was && mapEl\.value\) mapEl\.value\.dispatchEvent\(new CustomEvent\('dxmaps:pin-selected', \{ bubbles: true \}\)\)/.test(vue), 'the regroup warning on Copy': /const warn = regroupable\(sel\) \? '' : t\('upgMap\.copyNotRegroupable'\)/.test(vue), // The packet / card-deck title goes through selectionTitleNames (arm A6 proves it), with the keyed empty case. 'the title names come from selectionTitleNames': /const names = selectionTitleNames\(zoneNames, selectedTerritories\.value, from,\s*\n\s*\(\) => keyedError\('wall\.hud\.noRecords'/.test(vue) 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 2c3a6035d..4a02ed4f1 100644 --- a/plugin-designs/my-upg-100-list/upg-100-list.vue +++ b/plugin-designs/my-upg-100-list/upg-100-list.vue @@ -239,6 +239,14 @@ const selectedTerritories = ref([]) // [{ key, name, count, kind }] const selTotal = computed(() => // live running UUPG total (null counts = 0) selectedTerritories.value.reduce((a, t) => a + (Number(t.count) || 0), 0)) const selCount = computed(() => selectedTerritories.value.length) +// ★ THE BATCH SELECTION IS THIS MAP'S OWN SELECTION GESTURE. PinHint ("Tap a coloured dot…") dismisses on uiStore's +// pin selection, or on a 'dxmaps:pin-selected' event from inside the map's root: its documented contract for a map +// with its own selection. A batch tap selects a TERRITORY, not a uiStore pin, so the pill stayed up and, at 390, sat +// over the HUD's bottom button row (Copy / Export CSV / Clear). The first territory selected dismisses it, as a +// pin tap does; before that the HUD has no button rows to cover. +watch(selCount, (n, was) => { + if (n > 0 && !was && mapEl.value) mapEl.value.dispatchEvent(new CustomEvent('dxmaps:pin-selected', { bubbles: true })) +}) const copyFlash = ref('') // transient "Copied!" / "Copy failed" label let countryNameMap = null // iso3→label, built from live records