From d0de376f4a6135ea35ae5667c437574805079a91 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Wed, 30 Sep 2026 04:25:04 +0000 Subject: [PATCH] =?UTF-8?q?Big=20Picture=20header:=20rounded-square=20?= =?UTF-8?q?=E2=93=98=20left=20of=20a=20rounded-square=20Share?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dashboard header gains an info button ("What can this map do for you?") to the left of Share. Both are rounded squares at the vertical tabs' radius (--vtl-radius), matching the app's own roundedness; map controls stay round. Built as a reusable, parameterized header-button form so other dashboards adopt it by prop, not by copy: - MapControlButton: new shape="rounded-square" (border-radius: var(--vtl-radius,8px)). - ShareButton / MapInfoButton: a shape prop forwarded to MapControlButton; ShareButton also squares its rotating ring so a round ring never wraps a square. Defaults stay 'round' — every existing consumer is unchanged in behaviour. - research-dashboard DashboardTopBar mounts the ⓘ and Share as one header-button group, sized to the bar with the 44px tap target kept for both. DOM order [ⓘ, Share] puts ⓘ at the logical start: left in English, right of Share in Arabic (the flex row reverses under rtl). - doxa-maps-spa dashboard-plus-grid tab -> trigger:'control', so the tab's MapInfo is driven by the header ⓘ and the gallery's floating ⓘ is suppressed: exactly one ⓘ, fail-open. No new strings (reuses mapInfo.open, 11 locales). --- .../map-controls/MapControlButton.vue | 9 ++- .../components/map-controls/MapInfoButton.vue | 5 +- .../components/map-controls/ShareButton.vue | 12 +++- plugin-designs/doxa-maps-spa/src/tabInfo.js | 7 +++ .../components/dashboards/DashboardTopBar.vue | 62 +++++++++++-------- 5 files changed, 65 insertions(+), 30 deletions(-) diff --git a/library/components/map-controls/MapControlButton.vue b/library/components/map-controls/MapControlButton.vue index c35713b24..b3f341455 100644 --- a/library/components/map-controls/MapControlButton.vue +++ b/library/components/map-controls/MapControlButton.vue @@ -68,6 +68,11 @@ useShadowStyles(` /* shape="square" on a STANDALONE button: their 4px corners, our fill and shadow kept. A button inside .map-toolbar--square is overridden back to 0 by the toolbar's rules. */ .mcb--square{ border-radius:4px; } +/* shape="rounded-square" — the HEADER-BAR button form (design rule, 2026-09-30): map controls stay ROUND, + but a button in a dashboard HEADER is a rounded square at the SAME radius as the gallery's vertical + tabs. --vtl-radius is that ONE shared variable (VerticalTabsLayout .vtl-tab), so the header button + and the tabs can never drift; 8px is only the fallback for a context that never set it. */ +.mcb--rounded-square{ border-radius:var(--vtl-radius,8px); } /* ★ REDUCED MOTION, OWNED BY THIS COMPONENT. A page-level rule cannot reach into a shadow root, and no generated leaf ships one anyway (measured: 0 across the whole tree), so a component @@ -93,7 +98,7 @@ defineProps({ * strip it back off -- the two rule sets compose rather than compete, and the toolbar wins by * being the more specific selector. */ - shape: { type: String, default: 'round' } + shape: { type: String, default: 'round', validator: (v) => ['round', 'square', 'rounded-square'].includes(v) } }) defineEmits(['click']) @@ -123,7 +128,7 @@ defineEmits(['click']) -->