v3.0.0
DraggingMapPin

The pin a person sets an address with by dragging the map under it — the pickup point or the destination, named by the tooltip above it.

-- -- -- 3.0.1
Pickup point, Botanical Garden

Overview

DraggingMapPin marks the address a person is choosing on a map — where the ride or the courier picks them up, or where the trip ends. The map moves under it; the pin lifts while the map moves and sets down on the new address, which the tooltip above it names.

  • 1
    Point A (RH)
  • 2
    Point A (Courier)
  • 3
    Point B
Pickup point, Botanical Garden
Pickup point, Jinnah Avenue, F-8
Destination, Safa Gold Cineplex

States

Six states, the same for Point A and Point B — Point A (Courier) is the RH pin. The host sets them from the map: Drag while it moves, Address Loading while it asks for the address, then Standard or Error; over a suggested pickup point, Hover and Selected Suggested Pickup.

Standard

Pickup point, Botanical Garden
Destination, Safa Gold Cineplex
  • 1
    Address Tooltip --background-base-white — the fill.--border-transparent — the 1 edge outside it.--text-and-icon-secondary — the Subtitle.--text-and-icon-primary — the Title and the chevron.
  • 2
    Pin --text-and-icon-primary — Point A's head and the stick.--background-inverse-primary — Point B's head — Figma's onmap-b-pin-color binds Background.--text-and-icon-inverse-primary — the 2 ring round the head and the glyph.
  • 3
    Shadow --text-and-icon-always-dark — at Figma's 12% layer opacity, blurred 4 — the pin rests on the location.
  • Figma Selected — the initial state: the app finds the person's location and shows its address.

Drag

Pickup point, Botanical Garden
Destination, Safa Gold Cineplex
  • 1
    Pin var(--sp-100-s10) — the lift — the stick ends var(--sp-100-s4) above the shadow.The colours stay.
  • 2
    Shadow --text-and-icon-always-dark — at 8%, grown to var(--sp-100-s40) × var(--sp-100-s12) — the pin is off the ground.
  • Address Tooltip Hidden while the map moves — the address is not known yet.

Hover Suggested Pickup

Pickup point, Botanical Garden
Destination, Safa Gold Cineplex
  • 1
    Point --text-and-icon-primary — the outer ring, at the icon's own 50%.--text-and-icon-inverse-primary — the centre.The 24 hover form (onmap-point-selected-color) — the point grows under the pin.
  • 2
    Pin --text-and-icon-primary — Point B's head too — the passenger-android pin Figma uses here.No stick: the head sits var(--sp-100-s4) above the point.
  • Shadow None — the pin rests on the point.

Selected Suggested Pickup

Pickup point, Botanical Garden
Destination, Safa Gold Cineplex
  • 1
    Point --text-and-icon-primary — the ring.--text-and-icon-inverse-primary — the centre.Back to the 20 form (onmap-point-color) — the pin is set on the point.
  • The Other Points Turn transparent — they are MapPinSuggestedPickup (Figma-only), not this component.

Address Loading

  • 1
    Loader --text-and-icon-primary — [Loader] S (20), Style=Primary — in place of the text while the app asks for the address.
  • Pin As in Standard. Figma's Point B variant draws the Point A pin — the web draws Point B's; flagged.

Error

Address not found
Address not found
  • 1
    Pin --text-and-icon-warning — the head and the stick — "the Pin's color changes to orange".
  • 2
    Glyph --text-and-icon-inverse-primary — warning-filled, in place of the type's glyph — Point A and Point B look the same.
  • 3
    Address Tooltip --text-and-icon-primary — "Address not found" — the Title alone: no Subtitle, no chevron.

Anatomy

A pin on the location with the address above it. The map moves under the pin; the parts move around one fixed spot — the root's bottom centre — and the host only sets the state.

Parts

Pickup point, Botanical Garden
  • 1
    Address Tooltip var(--sp-100-s4) — above the pin, centred on it.Figma MapPinTooltip in one of three forms — Standard (Figma Default), Loading or Not found; see Address Tooltip below. Hidden in Drag. Optional — on by default.
  • 2
    Pin var(--sp-100-s40) — the squircle head: a 2 ring round the fill, the type's glyph inside.The type's icon — onmap-a-pin-color (Point A) or onmap-b-pin-color (Point B) — with a 2 × 18 stick under the head; the Suggested states drop the stick, as here. Required.
  • 3
    Shadow var(--sp-100-s20) × var(--sp-100-s8) — a blurred ellipse on the ground, centred on the location.Standard, Drag, Address Loading and Error.
  • 4
    Point var(--sp-100-s4) — under the head, centred on the location.The suggested pickup point the pin sits on — onmap-point-color (20) when chosen, onmap-point-selected-color (24) while the pin hovers it. The two Suggested states only.
  • Root var(--sp-100-s40) × var(--sp-100-s52) — the pin's box.Its bottom centre is the location: the host places the root there and every state keeps it there. The tooltip, the shadow and the point overflow it.

Address Tooltip

Pickup point, Botanical Garden
  • 1
    Text var(--sp-100-s8) — top and bottom padding.var(--sp-100-s12) — left and right padding.The Subtitle over the Title, aligned to the start; longer text wraps. Required in Standard and Not found.
  • 2
    Subtitle Caption/Caption — what the pin is: "Pickup point" (Point A), "Destination" (Point B).The host may change it. Optional — on by default.
  • 3
    Title Body/Compact Body — the address. Required.
  • 4
    Slot End var(--sp-s24) — chevron-right: the tooltip leads on to the address search.var(--sp-100-s4) — after it.Optional — on by default.
  • 5
    Loader var(--sp-130-s20) — [Loader] S (20), Style=Primary, alone in the tooltip while the address loads.
  • Not Found The Title alone — "Address not found": no Subtitle, no Slot End. See States → Error.

Layout

Every part is placed from the location — the root's bottom centre. The pin stands on it, the tooltip sits above the pin, the shadow and the point centre on it. Each value takes the SP family Figma binds — the tooltip's box SP/100% ratio (fixed), the pin its own artwork, so only the text and the chevron grow.

General

Pickup point, Botanical Garden
  • Root var(--sp-100-s40) × var(--sp-100-s52) — the head over the stick. One size.
  • Address Tooltip var(--sp-100-s4) — above the pin, centred on it.var(--sp-100-s16) — the corner radius, Figma's SP/100% ratio/s16 binding. The frame's Tooltip list says "s4 — corner radius"; the binding wins — flagged.A 1 edge outside the box — the DS hairline.
  • Resizing Caption/Caption and Body/Compact Body — full scaling: the text grows to 150% and the tooltip with it.var(--sp-100-sN) — the pin and the tooltip's box stay fixed: the tooltip binds SP/100% ratio, the pin is unbound artwork.var(--sp-s24) — the chevron grows with the text (SP/150% ratio).var(--sp-130-s20) — the Loader caps at 130% (SP/130% ratio).

Address Tooltip

Pickup point, Botanical Garden
Botanical Garden
Pickup point, Shahrah-e-Faisal, Block 6, PECHS
  • Text var(--sp-100-s12) — left and right padding.var(--sp-100-s8) — top and bottom padding.
  • Slot End var(--sp-s24) — the chevron, centred on the tooltip's height.var(--sp-100-s4) — after it, to the edge.
  • Height var(--sp-100-s40) — the minimum: with the Subtitle off, the Title alone centres in it (middle).The tooltip hugs its text above it — two lines are 48.
  • Width calc(var(--sp-100-s100) + var(--sp-100-s100)) — the Text's maximum, 200: a longer address wraps (bottom). The scale has no s200.var(--sp-100-s64) — the Text's minimum.In between, the tooltip hugs its text.

Shadow and Lift

  • At Rest var(--sp-100-s20) × var(--sp-100-s8) — the shadow, centred on the location (left).--dragging-map-pin-shadow-blur — 4, Figma's layer blur.--dragging-map-pin-shadow-opacity — 12%, Figma's layer opacity.
  • Lift var(--sp-100-s10) — the pin rises in Drag (right): the stick ends var(--sp-100-s4) above the shadow.
  • In Drag var(--sp-100-s40) × var(--sp-100-s12) — the shadow grows, still centred on the location.--dragging-map-pin-shadow-opacity-drag — 8%.

Suggested Pickup

  • Head to Point var(--sp-100-s4) — between the head and the point, in both states.
  • Point var(--sp-100-s20) — Selected (left), onmap-point-color.var(--sp-100-s24) — Hover (right), onmap-point-selected-color.Centred on the location in both.
  • Head var(--sp-100-s2) — the rise in Selected.var(--sp-100-s4) — the rise in Hover.It keeps the var(--sp-100-s4) gap as the point grows; no stick.

RTL

Pickup point, Botanical Garden
Destination, Safa Gold Cineplex
  • 1
    Text Aligned right — the Subtitle and the Title start at the right edge; the paddings stay.
  • 2
    Slot End Moves to the left; the chevron points left.
  • 3
    Pin Not mirrored — the glyph keeps its direction, and so do the shadow and the point: "Don't mirror other map elements including MapPin and Suggested pickup point".
  • Web dir="rtl" on the root or an ancestor does both. Figma: MapPinTooltip RTL=true.

Animation

The pin follows the map: it lifts while the map moves and sets down when it stops; the tooltip goes and comes back with the address. Every movement is a token of the motion system — the Specification frame has no Animation block, so the picks are the DS's — accepted as the contract (owner, 2026-11-12).

Lift and Set Down

Pickup point, Botanical Garden
Pickup point, Botanical Garden
  • 1
    Pin var(--pattern-position-short-appear) — the lift into Drag: var(--sp-100-s10) up, 150ms slow-ease-out.var(--pattern-position-short-hide) — the set-down: 150ms accelerated-ease-in.On transform.
  • 2
    Shadow var(--pattern-position-short-appear) — grows to var(--sp-100-s40) × var(--sp-100-s12) and lightens to 8% with the lift.var(--pattern-position-short-hide) — back with the set-down.On transform and opacity: scaled about the location rather than resized, so its 4 blur scales too — accepted (owner, 2026-11-12).
  • 3
    Address Tooltip var(--transforming-exit-fast) — fades out as the map starts to move, 100ms.var(--transforming-enter-fast) — fades back in when it stops, 150ms — with the Loader, then the address.On opacity; the content's visibility follows the fade — the live region itself stays.

Suggested Pickup

  • 1
    Point var(--pattern-scale-short-appear) — into Hover (right): the 24 form fades in over the 20, 100ms.var(--pattern-scale-short-hide) — back to Selected (left), 200ms.On opacity.
  • 2
    Head var(--pattern-scale-short-appear) — rises to var(--sp-100-s4) into Hover.var(--pattern-scale-short-hide) — back to var(--sp-100-s2) in Selected.On transform; the tooltip rises with it.
  • Stick and Shadow Go at once on a suggested point and come back at once off it — no motion.

Address Loading

Address not found
  • 1
    Loader var(--pattern-spin) — one turn in 800ms, endless, while the app asks for the address.On transform, as on Button.
  • 2
    Error At once — no motion: the warning colour and the glyph come together, and the words say what happened.
  • Swaps The Loader, the address and "Address not found" swap at once, and the tooltip takes its new width at once — no motion on width.

Live

Pickup point, Botanical Garden
Live — press and hold the map, then let go; or hold Space or Enter
  • Try It Press and hold the map, then let go — or hold Space or Enter on it; a screen reader's activation runs one move at once. Drag, Address Loading, then the next address; every third time, Error.
  • Host The host sets each state from the map; the demo waits 1.2 s for the address.
  • Reduced Motion Every token above is zeroed at the token: the pin jumps, the tooltip appears at once and the Loader holds still. Address Loading stays silent; the address is announced when it arrives.

Usage

DraggingMapPin stands at the centre of a map the person moves to choose an address — where the ride or the courier picks them up, or where the trip ends. The tooltip names the address; the sheet under the map carries the rest of the screen.

  • 1
    The Pickup Point Point A on the first map screen and in a courier order: the person moves the map until the pin stands where they will be; the tooltip names the address under it.
  • 2
    The Destination Point B — the same pin with its own glyph, and "Destination" over the address.
  • 3
    A Suggested Pickup Point Over a suggested point the pin sits on it — Hover Suggested Pickup while it passes, Selected Suggested Pickup once set. The other points around it are MapPinSuggestedPickup, a Figma-only component.
  • 4
    ✕ A Placed Route Points that do not move — a placed route's start, end and stopovers — are the on-route pins (OnRouteMapPointA, OnRouteMapPointB, OnRouteMapStopover — Figma-only). DraggingMapPin is the one point the map moves under: it stays at the centre, and the person moves the map, not the pin.
  • 5
    ✕ An Explanation In The Tooltip The tooltip is the address. A hint about where to stand belongs in the sheet under the map, and an error that needs more than "Address not found" in a Notification.
1
Pickup point, Botanical Garden
✓ Point A — the pickup point, set by moving the map
2
Destination, Safa Gold Cineplex
✓ Point B — the destination, the same way
3
Pickup point, Botanical Garden, gate 2
✓ Set on a suggested pickup point
4
✕ A placed route's points — the on-route pins mark them
5
Move the map so the pin stands at the entrance you need
✕ An explanation in the tooltip — it names the address

Accessibility

DraggingMapPin is a picture on a map with a line of text above it, and only the text speaks. The pin is not a control: it takes no focus and no gesture — the map does, and moving the map is the host's. Labels and voiced strings per platform: dragging-map-pin-a11y.md.

Pickup point, Botanical Garden
Pickup point, Botanical Garden
Address not found
  • 1
    The Tooltip Speaks Text — the Subtitle, then the Title: "Pickup point, Botanical Garden". The Specification frame: "The screen reader should announce only the Title and Subtitle."TalkBack: contentDescription "[Subtitle], [Title]" — plain text, no role.VoiceOver: the label "[Subtitle], [Title]", .staticText.Web: a role="status" element — a polite live region, read in browse mode as text and re-read when its content changes. A .visually-hidden ", " keeps the two from running together ("Pickup pointBotanical Garden").
  • 2
    The Rest Is Hidden The pin, the shadow, the suggested point and the chevron — the glyph (passenger / flag) repeats the Subtitle.TalkBack: importantForAccessibility = no / clearAndSetSemantics {}.VoiceOver: accessibilityHidden(true).Web: aria-hidden="true" on the pin <svg>, the shadow, the point and the chevron.
  • 3
    Chevron var(--sp-s44) — the target when the host makes the tooltip one: a <button> named by the same text, inside the status region that stays mounted. The tooltip's own minimum is var(--sp-100-s40), so the button's hit area reaches past it — flagged for the owner.Pictures that the tooltip leads on — to the address search on the platforms. Figma gives the tooltip the text role.
  • 4
    Drag Nothing is announced while the map moves — the tooltip is gone, on TalkBack and VoiceOver alike.Web: the tooltip fades on opacity and its content goes visibility: hidden — out of the accessibility tree — while the region itself stays: a region that came back with new text would be announced by no one.
  • 5
    Address Loading TalkBack: the Loader is not announced; the polite region (liveRegion = Polite) reads the address when it arrives.VoiceOver: nothing is announced; the address is announced when it arrives — UIAccessibility.post(notification: .announcement) with the new text.Web: the region stays with aria-busy="true" and the Loader aria-hidden; the host clears aria-busy as it puts the address in, and the region reads it once.
  • 6
    Error --text-and-icon-inverse-primary on --text-and-icon-warning — the glyph: 3.15:1 Day, 6.70:1 Night, a graphic on the 3:1 floor."Address not found" — read through the same region on TalkBack, announced on VoiceOver.The words and the glyph tell the state, never the colour alone.
  • One Region Across States The host keeps the same tooltip element from state to state and swaps only its content: a live region that is added, or comes back from hidden, at the moment its text changes is not announced.
  • No Focus Stop The pin is not focusable and takes no key. Keyboard users move the map through the host's map controls; the tooltip announces the address the pin lands on.
  • Suggested States The tooltip reads as in Standard; the point is not announced.
  • Contrast --text-and-icon-primary on --background-base-white — the Title: 17.76:1 Day, 21:1 Night.--text-and-icon-secondary on --background-base-white — the Subtitle: 5.25:1 Day, 9.75:1 Night.--text-and-icon-inverse-primary — the 2 ring that keeps the head apart from any map colour.
  • RTL And Text Scaling RTL: the tooltip mirrors and reads in the language's order; the pin is not mirrored and not announced.The Subtitle and the Title scale to 150% — Dynamic Type the same; the tooltip grows and wraps.
  • Forced Colours The pin and the point are artwork and keep their fills — forced-color-adjust: none, or the glyph would vanish into a CanvasText head; the tooltip draws a CanvasText outline in place of its edge.
  • Reduced Motion The lift, the tooltip fade and the point's growth are zeroed at the token; the Loader holds still.
  • Figma Covers Standard The Specification frame voices the Standard state only. The announcements of Address Loading, Error and the new address after a drag are the DS's addition — accepted as the contract (owner, 2026-11-12).