@krizaka/ui 3.7.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +4 -4
  2. package/dist/{chunk-JZPVUJIX.js → chunk-UB2BI3AW.js} +1 -1
  3. package/dist/{chunk-JZPVUJIX.js.map → chunk-UB2BI3AW.js.map} +1 -1
  4. package/dist/{geometry-CbOU4rtL.d.ts → geometry-B2E8oFhg.d.ts} +1 -1
  5. package/dist/index.d.ts +7 -5
  6. package/dist/index.js +26 -24
  7. package/dist/index.js.map +1 -1
  8. package/dist/map.js +1 -1
  9. package/dist/map.js.map +1 -1
  10. package/dist/mascot-quote.d.ts +1 -1
  11. package/dist/mascot-quote.js.map +1 -1
  12. package/dist/mascot-state.d.ts +1 -1
  13. package/dist/mascot-state.js +1 -1
  14. package/dist/mascots.d.ts +2 -2
  15. package/dist/mascots.js +1 -1
  16. package/dist/native/map.js +1 -1
  17. package/dist/native/map.js.map +1 -1
  18. package/dist/native.d.ts +9 -7
  19. package/dist/native.js +26 -24
  20. package/dist/native.js.map +1 -1
  21. package/dist/status-page.d.ts +1 -1
  22. package/dist/status-page.js.map +1 -1
  23. package/dist/vertical-video.js +2 -2
  24. package/dist/vertical-video.js.map +1 -1
  25. package/package.json +5 -5
  26. package/registry/examples/landing-page/krizaka.js +1 -1
  27. package/registry/examples/landing-page/krizaka.tsx +1 -1
  28. package/registry/examples/mascots/flock.tsx +1 -1
  29. package/registry/examples/profile-card/match.js +1 -1
  30. package/registry/examples/profile-card/match.tsx +1 -1
  31. package/registry/examples/status-page/building.js +1 -1
  32. package/registry/examples/status-page/building.tsx +1 -1
  33. package/registry/index.json +3 -3
  34. package/registry/landing-page.json +2 -2
  35. package/registry/loader.json +3 -3
  36. package/registry/map.json +1 -1
  37. package/registry/mascots.json +4 -4
  38. package/registry/product-page.json +2 -2
  39. package/registry/profile-card.json +1 -1
  40. package/registry/status-page.json +6 -6
  41. package/registry/vertical-video.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mascots/mascot.tsx","../src/mascots/geometry.ts","../src/mascot-quote/mascot-quote.tsx"],"sourcesContent":["// The Krizaka flock on the web: one bird, one mood, drawn from ./geometry in the host's brand colours.\nimport type * as React from \"react\";\nimport { useId } from \"react\";\n\nimport { archEye, BIRDS, brow, lidEye, LIGHT, type MascotBird, type MascotMood, type MascotPalette, type MascotTone, MOOD_PARTS, OWN_PALETTES, PARCEL, SHADE, upperLid } from \"./geometry\";\n\nconst CSS = `\n.kzb-bird { transform-box: view-box; transform-origin: 60px 108px; }\n.kzb-eye { transform-box: fill-box; transform-origin: center; }\n.kzb-wing { transform-box: view-box; }\n[data-animated] .kzb-bird { animation: kzb-bob 3.6s ease-in-out infinite; }\n[data-animated] .kzb-blink { animation: kzb-blink 5.2s ease-in-out infinite; }\n[data-animated][data-mood=\"welcome\"] .kzb-wing-r { animation: kzb-wave 1.1s ease-in-out infinite alternate; }\n[data-animated][data-mood=\"thinking\"] .kzb-dot { animation: kzb-dot 1.5s ease-in-out infinite; }\n[data-animated][data-mood=\"thinking\"] .kzb-dot:nth-child(2) { animation-delay: .2s; }\n[data-animated][data-mood=\"thinking\"] .kzb-dot:nth-child(3) { animation-delay: .4s; }\n[data-animated][data-mood=\"success\"] .kzb-bird { animation: kzb-hop 1.6s cubic-bezier(.3,1.6,.5,1) 1, kzb-bob 3.6s ease-in-out 1.6s infinite; }\n[data-animated][data-mood=\"success\"] .kzb-badge { animation: kzb-pop .5s cubic-bezier(.3,1.6,.5,1) .3s both; }\n[data-animated][data-mood=\"success\"] .kzb-sparkle { animation: kzb-twinkle 2.4s ease-in-out infinite; }\n[data-animated][data-mood=\"error\"] .kzb-bird { animation: kzb-shake .5s ease-in-out .2s 2, kzb-bob 3.6s ease-in-out 1.2s infinite; }\n[data-animated][data-mood=\"empty\"] .kzb-bird { animation: kzb-sway 5s ease-in-out infinite; }\n.kzb-badge, .kzb-sparkle, .kzb-dot { transform-box: fill-box; transform-origin: center; }\n@keyframes kzb-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-2.5px); } }\n@keyframes kzb-blink { 0%, 92%, 100% { transform: scaleY(1); } 95% { transform: scaleY(.1); } }\n@keyframes kzb-wave { from { transform: rotate(-8deg); } to { transform: rotate(-38deg); } }\n@keyframes kzb-dot { 0%, 100% { opacity: .35; transform: translateY(0); } 50% { opacity: 1; transform: translateY(-2px); } }\n@keyframes kzb-hop { 0% { transform: translateY(0); } 30% { transform: translateY(-9px); } 60% { transform: translateY(0); } 100% { transform: translateY(0); } }\n@keyframes kzb-pop { from { transform: scale(0); } to { transform: scale(1); } }\n@keyframes kzb-twinkle { 0%, 100% { opacity: .25; transform: scale(.7); } 50% { opacity: 1; transform: scale(1); } }\n@keyframes kzb-shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-3px); } 75% { transform: translateX(3px); } }\n@keyframes kzb-sway { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-2deg); } }\n@media (prefers-reduced-motion: reduce) {\n .kzb-bird, .kzb-blink, .kzb-wing-r, .kzb-dot, .kzb-badge, .kzb-sparkle { animation: none !important; }\n}\n`;\n\n/** The host's roles (`tone=\"brand\"`): the accent paints the bird, so it wears the product it is shown in. */\nconst BRAND: MascotPalette = {\n from: \"var(--kz-accent-2, var(--kz-accent))\",\n to: \"var(--kz-accent)\",\n wing: \"var(--kz-accent)\",\n detail: \"var(--kz-accent-2, var(--kz-accent))\",\n beak: \"var(--kz-warning)\",\n eye: \"var(--kz-text-primary)\",\n};\nconst OUTLINE = \"var(--kz-border-strong, color-mix(in srgb, currentColor 35%, transparent))\";\nconst SURFACE = \"var(--kz-surface-0)\";\n\nexport type MascotProps = Omit<React.ComponentProps<\"svg\">, \"children\"> & {\n /** Which bird of the flock: `falcon` (watch, security), `owl` (reading, documents), `duck` (building, code), `flamingo` (answers, support), `pigeon` (delivery, notifications), `lovebird` (introductions, two people who meet), `crane` (listening, a calm moment). */\n bird?: MascotBird;\n /** What the moment is: `welcome` (onboarding), `thinking` (a long task running), `success` (it is done), `empty` (nothing here yet), `error` (it failed). */\n mood?: MascotMood;\n /** `brand` (default): the host's accent, so the bird wears the product it is in. `own`: the bird's signature colours of the Krizaka story. */\n tone?: MascotTone;\n /** Width and height in pixels. */\n size?: number;\n /** A light idle motion and the mood's gesture. Off with `false`; always off under `prefers-reduced-motion`. */\n animated?: boolean;\n /** An accessible name (the bird becomes an image); without it the mascot is decorative. */\n title?: string;\n};\n\n/**\n * One of the seven Krizaka birds in one mood — for the moments a product speaks to a person: a welcome, a long wait,\n * a success, an empty list, an error. Drawn in the host's brand colours by default (`tone=\"own\"` for the story's).\n */\nexport function Mascot({ bird = \"owl\", mood = \"welcome\", tone = \"brand\", size = 96, animated = true, title, className, ...props }: MascotProps) {\n const uid = useId().replace(/[^a-zA-Z0-9_-]/g, \"\");\n const g = BIRDS[bird];\n const p = tone === \"own\" ? OWN_PALETTES[bird] : BRAND;\n const body = `url(#kzb-${uid})`;\n const line = { stroke: OUTLINE, strokeWidth: 1.4, strokeLinejoin: \"round\" as const };\n const eyeR = g.eyes.white || g.eyes.pupil * 1.2;\n const eyes = g.eyes.at.map((at, i) => {\n const look = mood === \"thinking\" ? 1.4 : 0;\n if (mood === \"success\") return <path key={i} d={archEye(at, eyeR * 0.85)} stroke={g.visor ? p.eye : OUTLINE} strokeWidth={2.2} strokeLinecap=\"round\" fill=\"none\" />;\n if (mood === \"empty\" && g.eyes.white > 0)\n return (\n <g key={i}>\n <circle cx={at[0]} cy={at[1]} r={g.eyes.white} fill={LIGHT} {...line} />\n <circle cx={at[0]} cy={at[1] + g.eyes.pupil * 0.7} r={g.eyes.pupil} fill={SHADE} />\n <path d={upperLid(at, g.eyes.white)} fill={p.detail} {...line} />\n </g>\n );\n if (mood === \"empty\") return <path key={i} d={lidEye(at, eyeR * 0.8)} stroke={g.visor ? p.eye : OUTLINE} strokeWidth={2.2} strokeLinecap=\"round\" fill=\"none\" />;\n return (\n <g key={i} className=\"kzb-eye kzb-blink\">\n {g.eyes.white > 0 && <circle cx={at[0]} cy={at[1]} r={g.eyes.white} fill={LIGHT} {...line} />}\n <circle cx={at[0] + look} cy={at[1] - look} r={g.eyes.pupil} fill={g.visor ? p.eye : SHADE} />\n {g.eyes.white > 0 && <circle cx={at[0] + look - g.eyes.pupil * 0.35} cy={at[1] - look - g.eyes.pupil * 0.35} r={g.eyes.pupil * 0.35} fill={LIGHT} />}\n </g>\n );\n });\n const [wl, wr] = g.wings;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 120 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-bird={bird}\n data-mood={mood}\n data-animated={animated ? \"\" : undefined}\n className={className}\n {...(title ? { role: \"img\", \"aria-label\": title } : { \"aria-hidden\": true })}\n {...props}\n >\n <style>{CSS}</style>\n <defs>\n <linearGradient id={`kzb-${uid}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" style={{ stopColor: p.from }} />\n <stop offset=\"100%\" style={{ stopColor: p.to }} />\n </linearGradient>\n </defs>\n <ellipse cx={g.shadow[0]} cy={g.shadow[1]} rx={g.shadow[2]} ry={g.shadow[3]} fill={SHADE} opacity={0.14} />\n {mood === \"empty\" && <path d={MOOD_PARTS.tray} stroke={OUTLINE} strokeWidth={1.6} strokeDasharray=\"3 3\" strokeLinejoin=\"round\" />}\n <g className=\"kzb-bird\">\n {g.legs.map((d) => (\n <path key={d} d={d} stroke={p.beak} strokeWidth={2.6} strokeLinecap=\"round\" />\n ))}\n {g.back?.map((d) => (d.endsWith(\"Z\") ? <path key={d} d={d} fill={p.detail} {...line} /> : <path key={d} d={d} stroke={OUTLINE} strokeWidth={1.4} />))}\n {g.parcel && (\n <g {...line}>\n {g.parcel.map((d, i) => (\n <path key={d} d={d} fill={PARCEL[i]} />\n ))}\n </g>\n )}\n <path d={g.body} fill={body} {...line} />\n <path d={g.belly} fill={LIGHT} opacity={0.28} />\n {[wl, wr].map((w, i) => {\n const turn = mood === \"success\" ? (i === 0 ? 28 : -28) : mood === \"welcome\" && i === 1 ? -20 : 0;\n return (\n <g key={i} className={i === 1 ? \"kzb-wing kzb-wing-r\" : \"kzb-wing\"} style={{ transformOrigin: `${w.pivot[0]}px ${w.pivot[1]}px`, transform: turn ? `rotate(${turn}deg)` : undefined }}>\n <path d={w.d} fill={p.wing} {...line} />\n <path d={w.d} fill={SHADE} opacity={0.16} />\n </g>\n );\n })}\n {g.neck && <path d={g.neck.d} stroke={body} strokeWidth={g.neck.width} strokeLinecap=\"round\" />}\n {g.head.r > 0 && <circle cx={g.head.cx} cy={g.head.cy} r={g.head.r} fill={body} {...line} />}\n {g.details.map((d) => (\n <path key={d} d={d} fill={p.detail} {...line} />\n ))}\n {g.visor && <rect x={g.visor.x} y={g.visor.y} width={g.visor.w} height={g.visor.h} rx={4} fill={SURFACE} {...line} />}\n {eyes}\n {g.glasses && (\n <g stroke={OUTLINE} strokeWidth={1.3}>\n {g.eyes.at.map(([x, y]) => (\n <circle key={x} cx={x} cy={y} r={6.5} fill={LIGHT} fillOpacity={0.12} />\n ))}\n <path d={`M${g.eyes.at[0][0] + 6.5} ${g.eyes.at[0][1]} L${g.eyes.at[1][0] - 6.5} ${g.eyes.at[1][1]}`} />\n </g>\n )}\n {mood === \"error\" &&\n g.eyes.at.map((at, i) => <path key={i} d={brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1)} stroke={OUTLINE} strokeWidth={2} strokeLinecap=\"round\" />)}\n <path d={g.beak} fill={p.beak} {...line} />\n </g>\n {mood === \"thinking\" && (\n <g>\n {MOOD_PARTS.dots.map(([cx, cy, r]) => (\n <circle key={cx} className=\"kzb-dot\" cx={cx} cy={cy} r={r} fill=\"var(--kz-text-secondary)\" />\n ))}\n </g>\n )}\n {mood === \"success\" && (\n <>\n {MOOD_PARTS.sparkles.map((d) => (\n <path key={d} className=\"kzb-sparkle\" d={d} fill={p.from} />\n ))}\n <g className=\"kzb-badge\">\n <circle cx={MOOD_PARTS.badge.cx} cy={MOOD_PARTS.badge.cy} r={MOOD_PARTS.badge.r} fill=\"var(--kz-success)\" />\n <path d={MOOD_PARTS.check} stroke={SURFACE} strokeWidth={2.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n </>\n )}\n {mood === \"error\" && (\n <g className=\"kzb-badge\">\n <circle cx={MOOD_PARTS.badge.cx} cy={MOOD_PARTS.badge.cy} r={MOOD_PARTS.badge.r} fill=\"var(--kz-danger)\" />\n <path d={MOOD_PARTS.bang.line} stroke={SURFACE} strokeWidth={2.8} strokeLinecap=\"round\" />\n <circle cx={MOOD_PARTS.bang.dot[0]} cy={MOOD_PARTS.bang.dot[1]} r={1.6} fill={SURFACE} />\n </g>\n )}\n </svg>\n );\n}\n","/**\n * The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one\n * (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,\n * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), the lovebird that\n * introduces (2026-10, with Yazakia: \"l'inséparable présente\") and the crane that listens (2026-10, with Yororis:\n * \"la grue écoute\"), redrawn on one 120 × 120 grid so that any bird can wear any mood.\n *\n * Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,\n * `--kz-accent-2`), so the same falcon is blue on krizaka.com, orange in Orazaka and violet in Orochia; `own` gives\n * each bird the signature palette it has in the Krizaka story (the brand layer's exception, like the marks). Shades\n * and highlights are black and white at a low opacity over the role, so they hold in both themes.\n */\n\nexport const MASCOT_BIRDS = [\"falcon\", \"owl\", \"duck\", \"flamingo\", \"pigeon\", \"lovebird\", \"crane\"] as const;\nexport type MascotBird = (typeof MASCOT_BIRDS)[number];\n\nexport const MASCOT_MOODS = [\"welcome\", \"thinking\", \"success\", \"empty\", \"error\"] as const;\nexport type MascotMood = (typeof MASCOT_MOODS)[number];\n\nexport type MascotTone = \"brand\" | \"own\";\n\ntype Point = readonly [number, number];\n\nexport interface BirdGeometry {\n /** The ground shadow: centre x, y and radii. */\n readonly shadow: readonly [number, number, number, number];\n /** Legs and feet, stroked in the beak colour. */\n readonly legs: readonly string[];\n /** Drawn behind the body (tail, parcel strings). */\n readonly back?: readonly string[];\n readonly body: string;\n readonly belly: string;\n /** Left then right wing, and the point each one turns around. */\n readonly wings: readonly [{ readonly d: string; readonly pivot: Point }, { readonly d: string; readonly pivot: Point }];\n /** A neck, stroked in the body colour with this width (the flamingo). */\n readonly neck?: { readonly d: string; readonly width: number };\n /** The head: a circle. */\n readonly head: { readonly cx: number; readonly cy: number; readonly r: number };\n /** Ear tufts, a crest, a visor's frame: filled with the detail colour. */\n readonly details: readonly string[];\n /** A band behind the eyes (the falcon's visor), in the page's surface. */\n readonly visor?: { readonly x: number; readonly y: number; readonly w: number; readonly h: number };\n /** Glasses (the duck): stroked rings around the eyes. */\n readonly glasses?: boolean;\n readonly beak: string;\n /** The eyes: centres, the radius of the white, the radius of the pupil (no white when `white` is 0). */\n readonly eyes: { readonly at: readonly Point[]; readonly white: number; readonly pupil: number };\n /** The parcel the pigeon carries: its three faces. */\n readonly parcel?: readonly [string, string, string];\n}\n\nconst mirror = (d: string) => d.replace(/(-?\\d+(?:\\.\\d+)?) (-?\\d+(?:\\.\\d+)?)/g, (_, x: string, y: string) => `${120 - Number(x)} ${y}`);\n\nconst falconWing = \"M29 58 C17 68 19 88 37 86 C31 76 31 66 29 58 Z\";\nconst pigeonWing = \"M36 58 C20 50 16 80 38 84 C34 74 34 66 36 58 Z\";\n\nexport const BIRDS: Readonly<Record<MascotBird, BirdGeometry>> = {\n falcon: {\n shadow: [60, 110, 26, 3.5],\n legs: [\"M51 94 L48 108 M44 108 L52 108\", \"M69 94 L72 108 M68 108 L76 108\"],\n body: \"M30 62 C30 42 90 42 90 62 C90 88 78 98 60 98 C42 98 30 88 30 62 Z\",\n belly: \"M41 66 C41 55 79 55 79 66 C79 82 71 90 60 90 C49 90 41 82 41 66 Z\",\n wings: [\n { d: falconWing, pivot: [29, 58] },\n { d: mirror(falconWing), pivot: [91, 58] },\n ],\n head: { cx: 60, cy: 38, r: 22 },\n details: [\"M46 20 L52 10 L56 19 Z\", \"M74 20 L68 10 L64 19 Z\"],\n visor: { x: 41, y: 29, w: 38, h: 13 },\n beak: \"M54 45 L66 45 L60 57 Z\",\n eyes: { at: [[50, 35.5], [70, 35.5]], white: 0, pupil: 3.2 },\n },\n owl: {\n shadow: [60, 110, 24, 3.5],\n legs: [\"M53 100 L51 107 M47 107 L55 107\", \"M67 100 L69 107 M65 107 L73 107\"],\n body: \"M28 52 C28 20 92 20 92 52 C92 86 82 102 60 102 C38 102 28 86 28 52 Z\",\n belly: \"M42 66 C42 52 78 52 78 66 C78 86 72 94 60 94 C48 94 42 86 42 66 Z\",\n wings: [\n { d: \"M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z\", pivot: [29, 58] },\n { d: mirror(\"M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z\"), pivot: [91, 58] },\n ],\n head: { cx: 60, cy: 42, r: 0 },\n details: [\"M31 20 L47 31 L31 41 Z\", \"M89 20 L73 31 L89 41 Z\"],\n beak: \"M55 50 L65 50 L60 59 Z\",\n eyes: { at: [[47, 41], [73, 41]], white: 10, pupil: 4 },\n },\n duck: {\n shadow: [60, 110, 30, 3.5],\n legs: [],\n back: [\"M88 80 C100 76 104 66 96 62 C98 70 94 74 88 74 Z\"],\n body: \"M26 80 C26 62 94 62 94 80 C94 100 82 106 60 106 C38 106 26 100 26 80 Z\",\n belly: \"M38 84 C38 72 82 72 82 84 C82 96 74 101 60 101 C46 101 38 96 38 84 Z\",\n wings: [\n { d: \"M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z\", pivot: [27, 74] },\n { d: mirror(\"M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z\"), pivot: [93, 74] },\n ],\n head: { cx: 60, cy: 42, r: 23 },\n details: [\"M57 20 C54 11 63 8 66 14 C62 13 60 16 61 20 Z\"],\n glasses: true,\n beak: \"M43 51 C43 46 55 45 60 45 C65 45 77 46 77 51 C77 56 66 60 60 60 C54 60 43 56 43 51 Z\",\n eyes: { at: [[51, 37], [69, 37]], white: 0, pupil: 2.6 },\n },\n flamingo: {\n shadow: [60, 110, 20, 3],\n legs: [\"M56 86 L55 97 L58 108 M53 108 L62 108\", \"M65 86 L66 108 M62 108 L71 108\"],\n body: \"M38 70 C38 54 88 54 88 70 C88 86 76 90 62 90 C48 90 38 86 38 70 Z\",\n belly: \"M46 72 C46 63 80 63 80 72 C80 82 72 85 63 85 C54 85 46 82 46 72 Z\",\n wings: [\n { d: \"M42 64 C30 68 32 84 47 84 C43 76 43 70 42 64 Z\", pivot: [42, 64] },\n { d: \"M84 64 C96 68 94 84 79 84 C83 76 83 70 84 64 Z\", pivot: [84, 64] },\n ],\n neck: { d: \"M58 60 C58 42 40 34 46 22\", width: 7 },\n head: { cx: 48, cy: 18, r: 11 },\n details: [],\n beak: \"M38 16 C28 18 29 28 24 33 C33 28 38 23 40 20 Z\",\n eyes: { at: [[46, 15]], white: 3.2, pupil: 1.8 },\n },\n pigeon: {\n shadow: [60, 112, 22, 3],\n legs: [\"M52 94 L51 99 M48 99 L54 99\", \"M68 94 L69 99 M66 99 L72 99\"],\n back: [\"M53 98 L52 103\", \"M67 98 L68 103\", \"M30 68 C16 72 14 62 28 56 C17 57 15 49 32 48 Z\"],\n body: \"M34 64 C34 44 86 44 86 64 C86 86 74 96 60 96 C46 96 34 86 34 64 Z\",\n belly: \"M43 68 C43 57 77 57 77 68 C77 82 70 88 60 88 C50 88 43 82 43 68 Z\",\n wings: [\n { d: pigeonWing, pivot: [36, 58] },\n { d: mirror(pigeonWing), pivot: [84, 58] },\n ],\n head: { cx: 60, cy: 36, r: 19 },\n details: [\"M54 18 C56 12 64 12 66 18 C63 16 57 16 54 18 Z\"],\n beak: \"M55 41 L65 41 L60 50 Z\",\n eyes: { at: [[52, 33], [68, 33]], white: 5, pupil: 2.4 },\n parcel: [\"M60 100 L71 105 L60 110 L49 105 Z\", \"M49 105 L60 110 L60 118 L49 113 Z\", \"M71 105 L60 110 L60 118 L71 113 Z\"],\n },\n /**\n * The lovebird — the inseparable that introduces two people. A plump little parrot: a short tail, a round head\n * with its coloured face (the detail colour), the white eye-rings of the species and a short hooked beak.\n */\n lovebird: {\n shadow: [60, 110, 23, 3.5],\n legs: [\"M53 96 L52 106 M48 106 L56 106\", \"M67 96 L68 106 M64 106 L72 106\"],\n back: [\"M74 90 C82 98 88 104 95 103 C91 98 86 91 82 84 Z\"],\n body: \"M32 66 C32 46 88 46 88 66 C88 90 76 100 60 100 C44 100 32 90 32 66 Z\",\n belly: \"M42 70 C42 59 78 59 78 70 C78 85 70 92 60 92 C50 92 42 85 42 70 Z\",\n wings: [\n { d: \"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\", pivot: [33, 60] },\n { d: mirror(\"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\"), pivot: [87, 60] },\n ],\n head: { cx: 60, cy: 38, r: 21 },\n details: [\"M43 40 C42 28 51 22 60 22 C69 22 78 28 77 40 C76 50 68 55 60 55 C52 55 44 50 43 40 Z\"],\n beak: \"M55 44 C55 40 65 40 65 44 C65 50 62 54 60 55 C58 54 55 50 55 44 Z\",\n eyes: { at: [[51, 36], [69, 36]], white: 4.6, pupil: 2.4 },\n },\n /**\n * The crane — the one that listens: posed, unhurried, drawn in one line. A tall wader seen in profile, standing still\n * on two straight legs, the neck a single stroke up to a small head with its crown (the detail colour) and a long,\n * straight beak; the folded wings low on its back. The flamingo bends and answers; the crane stands and listens.\n */\n crane: {\n shadow: [62, 110, 20, 3],\n legs: [\"M56 87 L55 108 M51 108 L59 108\", \"M67 87 L68 108 M64 108 L73 108\"],\n body: \"M40 66 C38 54 84 54 86 68 C88 82 76 88 62 88 C48 88 40 80 40 66 Z\",\n belly: \"M48 70 C48 62 78 62 79 70 C80 79 72 84 63 84 C54 84 48 79 48 70 Z\",\n wings: [\n { d: \"M44 62 C33 68 35 82 49 83 C45 76 45 69 44 62 Z\", pivot: [44, 62] },\n { d: \"M82 62 C93 67 96 82 80 84 C83 76 83 69 82 62 Z\", pivot: [82, 62] },\n ],\n neck: { d: \"M52 62 C48 47 52 37 48 26\", width: 6 },\n head: { cx: 47, cy: 21, r: 8.5 },\n details: [\"M41 16.5 C42 11 52 11 53 16.5 C50 14.6 44 14.6 41 16.5 Z\"],\n beak: \"M40.5 18.5 L19 22.5 L40.5 25.5 Z\",\n eyes: { at: [[45.5, 19.5]], white: 2.8, pupil: 1.6 },\n },\n};\n\n/** What a mood adds around the bird: a badge, a thought, an empty tray. */\nexport const MOOD_PARTS = {\n /** The badge of `success` and `error`, top right. */\n badge: { cx: 98, cy: 22, r: 11 },\n check: \"M92.5 22.5 L96.8 26.6 L103.6 18.4\",\n bang: { line: \"M98 15.5 L98 23.5\", dot: [98, 28] as Point },\n /** `thinking`: three dots rising to the right of the head. */\n dots: [\n [88, 26, 2.6],\n [96, 19, 3.2],\n [105, 11, 3.8],\n ] as const,\n /** `empty`: an open tray beside the bird. */\n tray: \"M90 96 L110 96 L107 108 L93 108 Z\",\n /** `success`: two sparkles. */\n sparkles: [\"M16 26 L18 31 L23 33 L18 35 L16 40 L14 35 L9 33 L14 31 Z\", \"M104 52 L105.2 55 L108 56 L105.2 57 L104 60 L102.8 57 L100 56 L102.8 55 Z\"],\n} as const;\n\n/** The happy eye of `success`: an arch. */\nexport const archEye = ([x, y]: Point, r: number) => `M${x - r} ${y + r * 0.45} Q${x} ${y - r * 1.15} ${x + r} ${y + r * 0.45}`;\n/** The lowered lid of `empty`: a line across the eye. */\nexport const lidEye = ([x, y]: Point, r: number) => `M${x - r} ${y + 0.4} L${x + r} ${y + 0.4}`;\n/** The heavy lid of `empty` over an eye with a white: its upper half. */\nexport const upperLid = ([x, y]: Point, r: number) => `M${x - r} ${y} A${r} ${r} 0 0 1 ${x + r} ${y} Z`;\n/** The worried brow of `error`, above one eye (`side` -1 left, 1 right). */\nexport const brow = ([x, y]: Point, r: number, side: number) =>\n `M${x - r * 1.1} ${y - r * 1.25 - (side < 0 ? 0 : r * 0.7)} L${x + r * 1.1} ${y - r * 1.5 - (side < 0 ? r * 0.7 : 0)}`;\n\nexport interface MascotPalette {\n /** Top and bottom of the body gradient. */\n readonly from: string;\n readonly to: string;\n /** Wings and details (tufts, crest). */\n readonly wing: string;\n readonly detail: string;\n /** Beak and feet. */\n readonly beak: string;\n /** The pupils (and the falcon's visor lights). */\n readonly eye: string;\n}\n\n/** The signature palettes of the Krizaka story (`tone=\"own\"`), from the first drawings of each bird. */\nexport const OWN_PALETTES: Readonly<Record<MascotBird, MascotPalette>> = {\n falcon: { from: \"#ff9f00\", to: \"#ff2a00\", wing: \"#d84315\", detail: \"#b4320d\", beak: \"#ffb300\", eye: \"#00c8d4\" },\n owl: { from: \"#a78bfa\", to: \"#6d28d9\", wing: \"#7c3aed\", detail: \"#5b21b6\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n duck: { from: \"#f43f5e\", to: \"#be123c\", wing: \"#db2777\", detail: \"#9f1239\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n flamingo: { from: \"#f9a8d4\", to: \"#db2777\", wing: \"#ec4899\", detail: \"#be185d\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n pigeon: { from: \"#22d3ee\", to: \"#6366f1\", wing: \"#a855f7\", detail: \"#4338ca\", beak: \"#f59e0b\", eye: \"#1f2937\" },\n lovebird: { from: \"#6ee7b7\", to: \"#059669\", wing: \"#047857\", detail: \"#fb7185\", beak: \"#f97316\", eye: \"#1f2937\" },\n // The sandhill crane (grue du Canada): sand-grey plumage, its red crown, dark legs and beak.\n crane: { from: \"#ebe3d6\", to: \"#9c8f80\", wing: \"#7d7266\", detail: \"#dc2626\", beak: \"#44403c\", eye: \"#1f2937\" },\n};\n\n/** Fixed light and shade, laid at a low opacity over a role (they read on both themes). */\nexport const LIGHT = \"#ffffff\";\nexport const SHADE = \"#000000\";\n/** The parcel's faces (pigeon). */\nexport const PARCEL = [\"#f59e0b\", \"#d97706\", \"#b45309\"] as const;\n","// Client (the bird has an id per instance). A rule, a promise or a decision told by a bird (blocks.css): the sentence in\n// a speech bubble — an opening quote mark, the hue around it — and under its tail the bird and who speaks. One bird per\n// idea (Mascot's rule): the falcon watches, the owl reads, the duck builds, the flamingo answers or gets paid, the\n// pigeon delivers, the lovebird introduces, the crane listens.\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport { type MascotBird, type MascotMood } from \"../mascots/geometry\";\nimport { Mascot } from \"../mascots/mascot\";\n\nexport type MascotQuoteProps = Omit<React.HTMLAttributes<HTMLElement>, \"children\"> & {\n /** The bird that speaks — the one whose idea it is. */\n bird: MascotBird;\n /**\n * Its mood.\n * @default \"thinking\"\n */\n mood?: MascotMood;\n /** Who speaks, under the bubble: `The falcon's rule`. */\n label: React.ReactNode;\n /** The sentence: the rule, the promise. */\n children: React.ReactNode;\n /**\n * `inline` inside a card (small, the bird answers the pointer); `callout` alone in a section (larger, the bird alive).\n * @default \"inline\"\n */\n variant?: \"inline\" | \"callout\";\n /** The bird's idle loop (it pauses off screen and stops under reduced motion). Defaults to `true` for a callout. */\n animated?: boolean;\n};\n\n/** A sentence told by a bird: a speech bubble, the bird under its tail, who speaks. The bird is decorative. */\nexport function MascotQuote({ bird, mood = \"thinking\", label, children, variant = \"inline\", animated, className, ...props }: MascotQuoteProps) {\n const callout = variant === \"callout\";\n return (\n <figure className={cn(\"kz-quote\", className)} data-variant={callout ? \"callout\" : undefined} {...props}>\n <blockquote>\n <p>{children}</p>\n </blockquote>\n <figcaption>\n <Mascot bird={bird} mood={mood} size={callout ? 72 : 44} animated={animated ?? callout} className=\"kz-quote-bird\" aria-hidden />\n <span>{label}</span>\n </figcaption>\n </figure>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/mascots/mascot.tsx","../src/mascots/geometry.ts","../src/mascot-quote/mascot-quote.tsx"],"sourcesContent":["// The Krizaka flock on the web: one bird, one mood, drawn from ./geometry in the host's brand colours.\nimport type * as React from \"react\";\nimport { useId } from \"react\";\n\nimport { archEye, BIRDS, brow, lidEye, LIGHT, type MascotBird, type MascotMood, type MascotPalette, type MascotTone, MOOD_PARTS, OWN_PALETTES, PARCEL, SHADE, upperLid } from \"./geometry\";\n\nconst CSS = `\n.kzb-bird { transform-box: view-box; transform-origin: 60px 108px; }\n.kzb-eye { transform-box: fill-box; transform-origin: center; }\n.kzb-wing { transform-box: view-box; }\n[data-animated] .kzb-bird { animation: kzb-bob 3.6s ease-in-out infinite; }\n[data-animated] .kzb-blink { animation: kzb-blink 5.2s ease-in-out infinite; }\n[data-animated][data-mood=\"welcome\"] .kzb-wing-r { animation: kzb-wave 1.1s ease-in-out infinite alternate; }\n[data-animated][data-mood=\"thinking\"] .kzb-dot { animation: kzb-dot 1.5s ease-in-out infinite; }\n[data-animated][data-mood=\"thinking\"] .kzb-dot:nth-child(2) { animation-delay: .2s; }\n[data-animated][data-mood=\"thinking\"] .kzb-dot:nth-child(3) { animation-delay: .4s; }\n[data-animated][data-mood=\"success\"] .kzb-bird { animation: kzb-hop 1.6s cubic-bezier(.3,1.6,.5,1) 1, kzb-bob 3.6s ease-in-out 1.6s infinite; }\n[data-animated][data-mood=\"success\"] .kzb-badge { animation: kzb-pop .5s cubic-bezier(.3,1.6,.5,1) .3s both; }\n[data-animated][data-mood=\"success\"] .kzb-sparkle { animation: kzb-twinkle 2.4s ease-in-out infinite; }\n[data-animated][data-mood=\"error\"] .kzb-bird { animation: kzb-shake .5s ease-in-out .2s 2, kzb-bob 3.6s ease-in-out 1.2s infinite; }\n[data-animated][data-mood=\"empty\"] .kzb-bird { animation: kzb-sway 5s ease-in-out infinite; }\n.kzb-badge, .kzb-sparkle, .kzb-dot { transform-box: fill-box; transform-origin: center; }\n@keyframes kzb-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-2.5px); } }\n@keyframes kzb-blink { 0%, 92%, 100% { transform: scaleY(1); } 95% { transform: scaleY(.1); } }\n@keyframes kzb-wave { from { transform: rotate(-8deg); } to { transform: rotate(-38deg); } }\n@keyframes kzb-dot { 0%, 100% { opacity: .35; transform: translateY(0); } 50% { opacity: 1; transform: translateY(-2px); } }\n@keyframes kzb-hop { 0% { transform: translateY(0); } 30% { transform: translateY(-9px); } 60% { transform: translateY(0); } 100% { transform: translateY(0); } }\n@keyframes kzb-pop { from { transform: scale(0); } to { transform: scale(1); } }\n@keyframes kzb-twinkle { 0%, 100% { opacity: .25; transform: scale(.7); } 50% { opacity: 1; transform: scale(1); } }\n@keyframes kzb-shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-3px); } 75% { transform: translateX(3px); } }\n@keyframes kzb-sway { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-2deg); } }\n@media (prefers-reduced-motion: reduce) {\n .kzb-bird, .kzb-blink, .kzb-wing-r, .kzb-dot, .kzb-badge, .kzb-sparkle { animation: none !important; }\n}\n`;\n\n/** The host's roles (`tone=\"brand\"`): the accent paints the bird, so it wears the product it is shown in. */\nconst BRAND: MascotPalette = {\n from: \"var(--kz-accent-2, var(--kz-accent))\",\n to: \"var(--kz-accent)\",\n wing: \"var(--kz-accent)\",\n detail: \"var(--kz-accent-2, var(--kz-accent))\",\n beak: \"var(--kz-warning)\",\n eye: \"var(--kz-text-primary)\",\n};\nconst OUTLINE = \"var(--kz-border-strong, color-mix(in srgb, currentColor 35%, transparent))\";\nconst SURFACE = \"var(--kz-surface-0)\";\n\nexport type MascotProps = Omit<React.ComponentProps<\"svg\">, \"children\"> & {\n /** Which bird of the flock: `falcon` (watch, security), `owl` (reading, documents), `duck` (building, code), `flamingo` (answers, support), `pigeon` (delivery, notifications), `lovebird` (introductions, two people who meet), `crane` (listening, a calm moment). */\n bird?: MascotBird;\n /** What the moment is: `welcome` (onboarding), `thinking` (a long task running), `success` (it is done), `empty` (nothing here yet), `error` (it failed). */\n mood?: MascotMood;\n /** `brand` (default): the host's accent, so the bird wears the product it is in. `own`: the bird's signature colours of the Krizaka story. */\n tone?: MascotTone;\n /** Width and height in pixels. */\n size?: number;\n /** A light idle motion and the mood's gesture. Off with `false`; always off under `prefers-reduced-motion`. */\n animated?: boolean;\n /** An accessible name (the bird becomes an image); without it the mascot is decorative. */\n title?: string;\n};\n\n/**\n * One of the seven Krizaka birds in one mood — for the moments a product speaks to a person: a welcome, a long wait,\n * a success, an empty list, an error. Drawn in the host's brand colours by default (`tone=\"own\"` for the story's).\n */\nexport function Mascot({ bird = \"owl\", mood = \"welcome\", tone = \"brand\", size = 96, animated = true, title, className, ...props }: MascotProps) {\n const uid = useId().replace(/[^a-zA-Z0-9_-]/g, \"\");\n const g = BIRDS[bird];\n const p = tone === \"own\" ? OWN_PALETTES[bird] : BRAND;\n const body = `url(#kzb-${uid})`;\n const line = { stroke: OUTLINE, strokeWidth: 1.4, strokeLinejoin: \"round\" as const };\n const eyeR = g.eyes.white || g.eyes.pupil * 1.2;\n const eyes = g.eyes.at.map((at, i) => {\n const look = mood === \"thinking\" ? 1.4 : 0;\n if (mood === \"success\") return <path key={i} d={archEye(at, eyeR * 0.85)} stroke={g.visor ? p.eye : OUTLINE} strokeWidth={2.2} strokeLinecap=\"round\" fill=\"none\" />;\n if (mood === \"empty\" && g.eyes.white > 0)\n return (\n <g key={i}>\n <circle cx={at[0]} cy={at[1]} r={g.eyes.white} fill={LIGHT} {...line} />\n <circle cx={at[0]} cy={at[1] + g.eyes.pupil * 0.7} r={g.eyes.pupil} fill={SHADE} />\n <path d={upperLid(at, g.eyes.white)} fill={p.detail} {...line} />\n </g>\n );\n if (mood === \"empty\") return <path key={i} d={lidEye(at, eyeR * 0.8)} stroke={g.visor ? p.eye : OUTLINE} strokeWidth={2.2} strokeLinecap=\"round\" fill=\"none\" />;\n return (\n <g key={i} className=\"kzb-eye kzb-blink\">\n {g.eyes.white > 0 && <circle cx={at[0]} cy={at[1]} r={g.eyes.white} fill={LIGHT} {...line} />}\n <circle cx={at[0] + look} cy={at[1] - look} r={g.eyes.pupil} fill={g.visor ? p.eye : SHADE} />\n {g.eyes.white > 0 && <circle cx={at[0] + look - g.eyes.pupil * 0.35} cy={at[1] - look - g.eyes.pupil * 0.35} r={g.eyes.pupil * 0.35} fill={LIGHT} />}\n </g>\n );\n });\n const [wl, wr] = g.wings;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 120 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-bird={bird}\n data-mood={mood}\n data-animated={animated ? \"\" : undefined}\n className={className}\n {...(title ? { role: \"img\", \"aria-label\": title } : { \"aria-hidden\": true })}\n {...props}\n >\n <style>{CSS}</style>\n <defs>\n <linearGradient id={`kzb-${uid}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" style={{ stopColor: p.from }} />\n <stop offset=\"100%\" style={{ stopColor: p.to }} />\n </linearGradient>\n </defs>\n <ellipse cx={g.shadow[0]} cy={g.shadow[1]} rx={g.shadow[2]} ry={g.shadow[3]} fill={SHADE} opacity={0.14} />\n {mood === \"empty\" && <path d={MOOD_PARTS.tray} stroke={OUTLINE} strokeWidth={1.6} strokeDasharray=\"3 3\" strokeLinejoin=\"round\" />}\n <g className=\"kzb-bird\">\n {g.legs.map((d) => (\n <path key={d} d={d} stroke={p.beak} strokeWidth={2.6} strokeLinecap=\"round\" />\n ))}\n {g.back?.map((d) => (d.endsWith(\"Z\") ? <path key={d} d={d} fill={p.detail} {...line} /> : <path key={d} d={d} stroke={OUTLINE} strokeWidth={1.4} />))}\n {g.parcel && (\n <g {...line}>\n {g.parcel.map((d, i) => (\n <path key={d} d={d} fill={PARCEL[i]} />\n ))}\n </g>\n )}\n <path d={g.body} fill={body} {...line} />\n <path d={g.belly} fill={LIGHT} opacity={0.28} />\n {[wl, wr].map((w, i) => {\n const turn = mood === \"success\" ? (i === 0 ? 28 : -28) : mood === \"welcome\" && i === 1 ? -20 : 0;\n return (\n <g key={i} className={i === 1 ? \"kzb-wing kzb-wing-r\" : \"kzb-wing\"} style={{ transformOrigin: `${w.pivot[0]}px ${w.pivot[1]}px`, transform: turn ? `rotate(${turn}deg)` : undefined }}>\n <path d={w.d} fill={p.wing} {...line} />\n <path d={w.d} fill={SHADE} opacity={0.16} />\n </g>\n );\n })}\n {g.neck && <path d={g.neck.d} stroke={body} strokeWidth={g.neck.width} strokeLinecap=\"round\" />}\n {g.head.r > 0 && <circle cx={g.head.cx} cy={g.head.cy} r={g.head.r} fill={body} {...line} />}\n {g.details.map((d) => (\n <path key={d} d={d} fill={p.detail} {...line} />\n ))}\n {g.visor && <rect x={g.visor.x} y={g.visor.y} width={g.visor.w} height={g.visor.h} rx={4} fill={SURFACE} {...line} />}\n {eyes}\n {g.glasses && (\n <g stroke={OUTLINE} strokeWidth={1.3}>\n {g.eyes.at.map(([x, y]) => (\n <circle key={x} cx={x} cy={y} r={6.5} fill={LIGHT} fillOpacity={0.12} />\n ))}\n <path d={`M${g.eyes.at[0][0] + 6.5} ${g.eyes.at[0][1]} L${g.eyes.at[1][0] - 6.5} ${g.eyes.at[1][1]}`} />\n </g>\n )}\n {mood === \"error\" &&\n g.eyes.at.map((at, i) => <path key={i} d={brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1)} stroke={OUTLINE} strokeWidth={2} strokeLinecap=\"round\" />)}\n <path d={g.beak} fill={p.beak} {...line} />\n </g>\n {mood === \"thinking\" && (\n <g>\n {MOOD_PARTS.dots.map(([cx, cy, r]) => (\n <circle key={cx} className=\"kzb-dot\" cx={cx} cy={cy} r={r} fill=\"var(--kz-text-secondary)\" />\n ))}\n </g>\n )}\n {mood === \"success\" && (\n <>\n {MOOD_PARTS.sparkles.map((d) => (\n <path key={d} className=\"kzb-sparkle\" d={d} fill={p.from} />\n ))}\n <g className=\"kzb-badge\">\n <circle cx={MOOD_PARTS.badge.cx} cy={MOOD_PARTS.badge.cy} r={MOOD_PARTS.badge.r} fill=\"var(--kz-success)\" />\n <path d={MOOD_PARTS.check} stroke={SURFACE} strokeWidth={2.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n </>\n )}\n {mood === \"error\" && (\n <g className=\"kzb-badge\">\n <circle cx={MOOD_PARTS.badge.cx} cy={MOOD_PARTS.badge.cy} r={MOOD_PARTS.badge.r} fill=\"var(--kz-danger)\" />\n <path d={MOOD_PARTS.bang.line} stroke={SURFACE} strokeWidth={2.8} strokeLinecap=\"round\" />\n <circle cx={MOOD_PARTS.bang.dot[0]} cy={MOOD_PARTS.bang.dot[1]} r={1.6} fill={SURFACE} />\n </g>\n )}\n </svg>\n );\n}\n","/**\n * The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one\n * (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,\n * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), the lovebird that\n * introduces (2026-10, with Yasakia: \"l'inséparable présente\") and the crane that listens (2026-10, with Yororis:\n * \"la grue écoute\"), redrawn on one 120 × 120 grid so that any bird can wear any mood.\n *\n * Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,\n * `--kz-accent-2`), so the same falcon is blue on krizaka.com, orange in Orazaka and violet in Orochia; `own` gives\n * each bird the signature palette it has in the Krizaka story (the brand layer's exception, like the marks). Shades\n * and highlights are black and white at a low opacity over the role, so they hold in both themes.\n */\n\nexport const MASCOT_BIRDS = [\"falcon\", \"owl\", \"duck\", \"flamingo\", \"pigeon\", \"lovebird\", \"crane\"] as const;\nexport type MascotBird = (typeof MASCOT_BIRDS)[number];\n\nexport const MASCOT_MOODS = [\"welcome\", \"thinking\", \"success\", \"empty\", \"error\"] as const;\nexport type MascotMood = (typeof MASCOT_MOODS)[number];\n\nexport type MascotTone = \"brand\" | \"own\";\n\ntype Point = readonly [number, number];\n\nexport interface BirdGeometry {\n /** The ground shadow: centre x, y and radii. */\n readonly shadow: readonly [number, number, number, number];\n /** Legs and feet, stroked in the beak colour. */\n readonly legs: readonly string[];\n /** Drawn behind the body (tail, parcel strings). */\n readonly back?: readonly string[];\n readonly body: string;\n readonly belly: string;\n /** Left then right wing, and the point each one turns around. */\n readonly wings: readonly [{ readonly d: string; readonly pivot: Point }, { readonly d: string; readonly pivot: Point }];\n /** A neck, stroked in the body colour with this width (the flamingo). */\n readonly neck?: { readonly d: string; readonly width: number };\n /** The head: a circle. */\n readonly head: { readonly cx: number; readonly cy: number; readonly r: number };\n /** Ear tufts, a crest, a visor's frame: filled with the detail colour. */\n readonly details: readonly string[];\n /** A band behind the eyes (the falcon's visor), in the page's surface. */\n readonly visor?: { readonly x: number; readonly y: number; readonly w: number; readonly h: number };\n /** Glasses (the duck): stroked rings around the eyes. */\n readonly glasses?: boolean;\n readonly beak: string;\n /** The eyes: centres, the radius of the white, the radius of the pupil (no white when `white` is 0). */\n readonly eyes: { readonly at: readonly Point[]; readonly white: number; readonly pupil: number };\n /** The parcel the pigeon carries: its three faces. */\n readonly parcel?: readonly [string, string, string];\n}\n\nconst mirror = (d: string) => d.replace(/(-?\\d+(?:\\.\\d+)?) (-?\\d+(?:\\.\\d+)?)/g, (_, x: string, y: string) => `${120 - Number(x)} ${y}`);\n\nconst falconWing = \"M29 58 C17 68 19 88 37 86 C31 76 31 66 29 58 Z\";\nconst pigeonWing = \"M36 58 C20 50 16 80 38 84 C34 74 34 66 36 58 Z\";\n\nexport const BIRDS: Readonly<Record<MascotBird, BirdGeometry>> = {\n falcon: {\n shadow: [60, 110, 26, 3.5],\n legs: [\"M51 94 L48 108 M44 108 L52 108\", \"M69 94 L72 108 M68 108 L76 108\"],\n body: \"M30 62 C30 42 90 42 90 62 C90 88 78 98 60 98 C42 98 30 88 30 62 Z\",\n belly: \"M41 66 C41 55 79 55 79 66 C79 82 71 90 60 90 C49 90 41 82 41 66 Z\",\n wings: [\n { d: falconWing, pivot: [29, 58] },\n { d: mirror(falconWing), pivot: [91, 58] },\n ],\n head: { cx: 60, cy: 38, r: 22 },\n details: [\"M46 20 L52 10 L56 19 Z\", \"M74 20 L68 10 L64 19 Z\"],\n visor: { x: 41, y: 29, w: 38, h: 13 },\n beak: \"M54 45 L66 45 L60 57 Z\",\n eyes: { at: [[50, 35.5], [70, 35.5]], white: 0, pupil: 3.2 },\n },\n owl: {\n shadow: [60, 110, 24, 3.5],\n legs: [\"M53 100 L51 107 M47 107 L55 107\", \"M67 100 L69 107 M65 107 L73 107\"],\n body: \"M28 52 C28 20 92 20 92 52 C92 86 82 102 60 102 C38 102 28 86 28 52 Z\",\n belly: \"M42 66 C42 52 78 52 78 66 C78 86 72 94 60 94 C48 94 42 86 42 66 Z\",\n wings: [\n { d: \"M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z\", pivot: [29, 58] },\n { d: mirror(\"M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z\"), pivot: [91, 58] },\n ],\n head: { cx: 60, cy: 42, r: 0 },\n details: [\"M31 20 L47 31 L31 41 Z\", \"M89 20 L73 31 L89 41 Z\"],\n beak: \"M55 50 L65 50 L60 59 Z\",\n eyes: { at: [[47, 41], [73, 41]], white: 10, pupil: 4 },\n },\n duck: {\n shadow: [60, 110, 30, 3.5],\n legs: [],\n back: [\"M88 80 C100 76 104 66 96 62 C98 70 94 74 88 74 Z\"],\n body: \"M26 80 C26 62 94 62 94 80 C94 100 82 106 60 106 C38 106 26 100 26 80 Z\",\n belly: \"M38 84 C38 72 82 72 82 84 C82 96 74 101 60 101 C46 101 38 96 38 84 Z\",\n wings: [\n { d: \"M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z\", pivot: [27, 74] },\n { d: mirror(\"M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z\"), pivot: [93, 74] },\n ],\n head: { cx: 60, cy: 42, r: 23 },\n details: [\"M57 20 C54 11 63 8 66 14 C62 13 60 16 61 20 Z\"],\n glasses: true,\n beak: \"M43 51 C43 46 55 45 60 45 C65 45 77 46 77 51 C77 56 66 60 60 60 C54 60 43 56 43 51 Z\",\n eyes: { at: [[51, 37], [69, 37]], white: 0, pupil: 2.6 },\n },\n flamingo: {\n shadow: [60, 110, 20, 3],\n legs: [\"M56 86 L55 97 L58 108 M53 108 L62 108\", \"M65 86 L66 108 M62 108 L71 108\"],\n body: \"M38 70 C38 54 88 54 88 70 C88 86 76 90 62 90 C48 90 38 86 38 70 Z\",\n belly: \"M46 72 C46 63 80 63 80 72 C80 82 72 85 63 85 C54 85 46 82 46 72 Z\",\n wings: [\n { d: \"M42 64 C30 68 32 84 47 84 C43 76 43 70 42 64 Z\", pivot: [42, 64] },\n { d: \"M84 64 C96 68 94 84 79 84 C83 76 83 70 84 64 Z\", pivot: [84, 64] },\n ],\n neck: { d: \"M58 60 C58 42 40 34 46 22\", width: 7 },\n head: { cx: 48, cy: 18, r: 11 },\n details: [],\n beak: \"M38 16 C28 18 29 28 24 33 C33 28 38 23 40 20 Z\",\n eyes: { at: [[46, 15]], white: 3.2, pupil: 1.8 },\n },\n pigeon: {\n shadow: [60, 112, 22, 3],\n legs: [\"M52 94 L51 99 M48 99 L54 99\", \"M68 94 L69 99 M66 99 L72 99\"],\n back: [\"M53 98 L52 103\", \"M67 98 L68 103\", \"M30 68 C16 72 14 62 28 56 C17 57 15 49 32 48 Z\"],\n body: \"M34 64 C34 44 86 44 86 64 C86 86 74 96 60 96 C46 96 34 86 34 64 Z\",\n belly: \"M43 68 C43 57 77 57 77 68 C77 82 70 88 60 88 C50 88 43 82 43 68 Z\",\n wings: [\n { d: pigeonWing, pivot: [36, 58] },\n { d: mirror(pigeonWing), pivot: [84, 58] },\n ],\n head: { cx: 60, cy: 36, r: 19 },\n details: [\"M54 18 C56 12 64 12 66 18 C63 16 57 16 54 18 Z\"],\n beak: \"M55 41 L65 41 L60 50 Z\",\n eyes: { at: [[52, 33], [68, 33]], white: 5, pupil: 2.4 },\n parcel: [\"M60 100 L71 105 L60 110 L49 105 Z\", \"M49 105 L60 110 L60 118 L49 113 Z\", \"M71 105 L60 110 L60 118 L71 113 Z\"],\n },\n /**\n * The lovebird — the inseparable that introduces two people. A plump little parrot: a short tail, a round head\n * with its coloured face (the detail colour), the white eye-rings of the species and a short hooked beak.\n */\n lovebird: {\n shadow: [60, 110, 23, 3.5],\n legs: [\"M53 96 L52 106 M48 106 L56 106\", \"M67 96 L68 106 M64 106 L72 106\"],\n back: [\"M74 90 C82 98 88 104 95 103 C91 98 86 91 82 84 Z\"],\n body: \"M32 66 C32 46 88 46 88 66 C88 90 76 100 60 100 C44 100 32 90 32 66 Z\",\n belly: \"M42 70 C42 59 78 59 78 70 C78 85 70 92 60 92 C50 92 42 85 42 70 Z\",\n wings: [\n { d: \"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\", pivot: [33, 60] },\n { d: mirror(\"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\"), pivot: [87, 60] },\n ],\n head: { cx: 60, cy: 38, r: 21 },\n details: [\"M43 40 C42 28 51 22 60 22 C69 22 78 28 77 40 C76 50 68 55 60 55 C52 55 44 50 43 40 Z\"],\n beak: \"M55 44 C55 40 65 40 65 44 C65 50 62 54 60 55 C58 54 55 50 55 44 Z\",\n eyes: { at: [[51, 36], [69, 36]], white: 4.6, pupil: 2.4 },\n },\n /**\n * The crane — the one that listens: posed, unhurried, drawn in one line. A tall wader seen in profile, standing still\n * on two straight legs, the neck a single stroke up to a small head with its crown (the detail colour) and a long,\n * straight beak; the folded wings low on its back. The flamingo bends and answers; the crane stands and listens.\n */\n crane: {\n shadow: [62, 110, 20, 3],\n legs: [\"M56 87 L55 108 M51 108 L59 108\", \"M67 87 L68 108 M64 108 L73 108\"],\n body: \"M40 66 C38 54 84 54 86 68 C88 82 76 88 62 88 C48 88 40 80 40 66 Z\",\n belly: \"M48 70 C48 62 78 62 79 70 C80 79 72 84 63 84 C54 84 48 79 48 70 Z\",\n wings: [\n { d: \"M44 62 C33 68 35 82 49 83 C45 76 45 69 44 62 Z\", pivot: [44, 62] },\n { d: \"M82 62 C93 67 96 82 80 84 C83 76 83 69 82 62 Z\", pivot: [82, 62] },\n ],\n neck: { d: \"M52 62 C48 47 52 37 48 26\", width: 6 },\n head: { cx: 47, cy: 21, r: 8.5 },\n details: [\"M41 16.5 C42 11 52 11 53 16.5 C50 14.6 44 14.6 41 16.5 Z\"],\n beak: \"M40.5 18.5 L19 22.5 L40.5 25.5 Z\",\n eyes: { at: [[45.5, 19.5]], white: 2.8, pupil: 1.6 },\n },\n};\n\n/** What a mood adds around the bird: a badge, a thought, an empty tray. */\nexport const MOOD_PARTS = {\n /** The badge of `success` and `error`, top right. */\n badge: { cx: 98, cy: 22, r: 11 },\n check: \"M92.5 22.5 L96.8 26.6 L103.6 18.4\",\n bang: { line: \"M98 15.5 L98 23.5\", dot: [98, 28] as Point },\n /** `thinking`: three dots rising to the right of the head. */\n dots: [\n [88, 26, 2.6],\n [96, 19, 3.2],\n [105, 11, 3.8],\n ] as const,\n /** `empty`: an open tray beside the bird. */\n tray: \"M90 96 L110 96 L107 108 L93 108 Z\",\n /** `success`: two sparkles. */\n sparkles: [\"M16 26 L18 31 L23 33 L18 35 L16 40 L14 35 L9 33 L14 31 Z\", \"M104 52 L105.2 55 L108 56 L105.2 57 L104 60 L102.8 57 L100 56 L102.8 55 Z\"],\n} as const;\n\n/** The happy eye of `success`: an arch. */\nexport const archEye = ([x, y]: Point, r: number) => `M${x - r} ${y + r * 0.45} Q${x} ${y - r * 1.15} ${x + r} ${y + r * 0.45}`;\n/** The lowered lid of `empty`: a line across the eye. */\nexport const lidEye = ([x, y]: Point, r: number) => `M${x - r} ${y + 0.4} L${x + r} ${y + 0.4}`;\n/** The heavy lid of `empty` over an eye with a white: its upper half. */\nexport const upperLid = ([x, y]: Point, r: number) => `M${x - r} ${y} A${r} ${r} 0 0 1 ${x + r} ${y} Z`;\n/** The worried brow of `error`, above one eye (`side` -1 left, 1 right). */\nexport const brow = ([x, y]: Point, r: number, side: number) =>\n `M${x - r * 1.1} ${y - r * 1.25 - (side < 0 ? 0 : r * 0.7)} L${x + r * 1.1} ${y - r * 1.5 - (side < 0 ? r * 0.7 : 0)}`;\n\nexport interface MascotPalette {\n /** Top and bottom of the body gradient. */\n readonly from: string;\n readonly to: string;\n /** Wings and details (tufts, crest). */\n readonly wing: string;\n readonly detail: string;\n /** Beak and feet. */\n readonly beak: string;\n /** The pupils (and the falcon's visor lights). */\n readonly eye: string;\n}\n\n/** The signature palettes of the Krizaka story (`tone=\"own\"`), from the first drawings of each bird. */\nexport const OWN_PALETTES: Readonly<Record<MascotBird, MascotPalette>> = {\n falcon: { from: \"#ff9f00\", to: \"#ff2a00\", wing: \"#d84315\", detail: \"#b4320d\", beak: \"#ffb300\", eye: \"#00c8d4\" },\n owl: { from: \"#a78bfa\", to: \"#6d28d9\", wing: \"#7c3aed\", detail: \"#5b21b6\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n duck: { from: \"#f43f5e\", to: \"#be123c\", wing: \"#db2777\", detail: \"#9f1239\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n flamingo: { from: \"#f9a8d4\", to: \"#db2777\", wing: \"#ec4899\", detail: \"#be185d\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n pigeon: { from: \"#22d3ee\", to: \"#6366f1\", wing: \"#a855f7\", detail: \"#4338ca\", beak: \"#f59e0b\", eye: \"#1f2937\" },\n lovebird: { from: \"#6ee7b7\", to: \"#059669\", wing: \"#047857\", detail: \"#fb7185\", beak: \"#f97316\", eye: \"#1f2937\" },\n // The sandhill crane (grue du Canada): sand-grey plumage, its red crown, dark legs and beak.\n crane: { from: \"#ebe3d6\", to: \"#9c8f80\", wing: \"#7d7266\", detail: \"#dc2626\", beak: \"#44403c\", eye: \"#1f2937\" },\n};\n\n/** Fixed light and shade, laid at a low opacity over a role (they read on both themes). */\nexport const LIGHT = \"#ffffff\";\nexport const SHADE = \"#000000\";\n/** The parcel's faces (pigeon). */\nexport const PARCEL = [\"#f59e0b\", \"#d97706\", \"#b45309\"] as const;\n","// Client (the bird has an id per instance). A rule, a promise or a decision told by a bird (blocks.css): the sentence in\n// a speech bubble — an opening quote mark, the hue around it — and under its tail the bird and who speaks. One bird per\n// idea (Mascot's rule): the falcon watches, the owl reads, the duck builds, the flamingo answers or gets paid, the\n// pigeon delivers, the lovebird introduces, the crane listens.\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport { type MascotBird, type MascotMood } from \"../mascots/geometry\";\nimport { Mascot } from \"../mascots/mascot\";\n\nexport type MascotQuoteProps = Omit<React.HTMLAttributes<HTMLElement>, \"children\"> & {\n /** The bird that speaks — the one whose idea it is. */\n bird: MascotBird;\n /**\n * Its mood.\n * @default \"thinking\"\n */\n mood?: MascotMood;\n /** Who speaks, under the bubble: `The falcon's rule`. */\n label: React.ReactNode;\n /** The sentence: the rule, the promise. */\n children: React.ReactNode;\n /**\n * `inline` inside a card (small, the bird answers the pointer); `callout` alone in a section (larger, the bird alive).\n * @default \"inline\"\n */\n variant?: \"inline\" | \"callout\";\n /** The bird's idle loop (it pauses off screen and stops under reduced motion). Defaults to `true` for a callout. */\n animated?: boolean;\n};\n\n/** A sentence told by a bird: a speech bubble, the bird under its tail, who speaks. The bird is decorative. */\nexport function MascotQuote({ bird, mood = \"thinking\", label, children, variant = \"inline\", animated, className, ...props }: MascotQuoteProps) {\n const callout = variant === \"callout\";\n return (\n <figure className={cn(\"kz-quote\", className)} data-variant={callout ? \"callout\" : undefined} {...props}>\n <blockquote>\n <p>{children}</p>\n </blockquote>\n <figcaption>\n <Mascot bird={bird} mood={mood} size={callout ? 72 : 44} animated={animated ?? callout} className=\"kz-quote-bird\" aria-hidden />\n <span>{label}</span>\n </figcaption>\n </figure>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs"]}
@@ -1,6 +1,6 @@
1
1
  import * as tailwind_variants from 'tailwind-variants';
2
2
  import * as React from 'react';
3
- import { M as MascotBird, a as MascotMood, b as MascotTone } from './geometry-CbOU4rtL.js';
3
+ import { M as MascotBird, a as MascotMood, b as MascotTone } from './geometry-B2E8oFhg.js';
4
4
 
5
5
  declare const mascotState: tailwind_variants.TVReturnType<{
6
6
  layout: {
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  Mascot
4
- } from "./chunk-JZPVUJIX.js";
4
+ } from "./chunk-UB2BI3AW.js";
5
5
 
6
6
  // src/mascot-state/mascot-state.tsx
7
7
  import { tv } from "tailwind-variants";
package/dist/mascots.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { M as MascotBird, a as MascotMood, b as MascotTone } from './geometry-CbOU4rtL.js';
2
- export { c as MASCOT_BIRDS, d as MASCOT_MOODS } from './geometry-CbOU4rtL.js';
1
+ import { M as MascotBird, a as MascotMood, b as MascotTone } from './geometry-B2E8oFhg.js';
2
+ export { c as MASCOT_BIRDS, d as MASCOT_MOODS } from './geometry-B2E8oFhg.js';
3
3
  import * as React from 'react';
4
4
 
5
5
  type MascotProps = Omit<React.ComponentProps<"svg">, "children"> & {
package/dist/mascots.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  MASCOT_BIRDS,
4
4
  MASCOT_MOODS,
5
5
  Mascot
6
- } from "./chunk-JZPVUJIX.js";
6
+ } from "./chunk-UB2BI3AW.js";
7
7
 
8
8
  // src/mascots/phoenix.tsx
9
9
  import { useId } from "react";
@@ -233,7 +233,7 @@ var brands = /* @__PURE__ */ Object.freeze({
233
233
  "brandGradientTo": "#fafafa"
234
234
  }
235
235
  },
236
- "yazakia": {
236
+ "yasakia": {
237
237
  "dark": {
238
238
  "accent": "#24dbc9",
239
239
  "accentHover": "#47e1d2",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/native/map.tsx","../../src/map/assets.ts","../../src/map/geo.ts","../../../tokens/dist/native.js","../../src/map/style.ts"],"sourcesContent":["/// <reference types=\"geojson\" />\n// React Native: the maps of `@krizaka/ui/map` on MapLibre Native (`@maplibre/maplibre-react-native`, an optional peer\n// installed only by the apps that show a map) — the same style generated from the tokens, the same Protomaps tiles on the\n// Krizaka CDN (MapLibre Native reads `pmtiles://` as it is), no API key. `Map`, `Marker`, `Cluster`, `UserPosition`,\n// `RadiusCircle`, `LocationPicker`; details of a place in a `Sheet` (`@krizaka/ui/native`).\nimport { type BrandId, Txt, useTheme } from \"@krizaka/ui/native\";\nimport {\n Camera,\n type CameraRef,\n GeoJSONSource,\n Layer,\n LocationManager,\n Map as MapView,\n Marker as MapMarker,\n} from \"@maplibre/maplibre-react-native\";\nimport * as React from \"react\";\nimport { Animated, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport { MAP_ATTRIBUTION } from \"../map/assets\";\nimport { circlePolygon, distanceMeters, formatDistance, type LngLat } from \"../map/geo\";\nimport { mapPalette, type MapRegion,mapStyle } from \"../map/style\";\n\ntype Ctx = { palette: ReturnType<typeof mapPalette>; reduce: boolean; places: { add: (id: string, text: string) => void; remove: (id: string) => void } };\nconst MapContext = React.createContext<Ctx | null>(null);\nconst useMapContext = () => {\n const ctx = React.useContext(MapContext);\n if (!ctx) throw new Error(\"inside a <Map> only\");\n return ctx;\n};\n\nexport type MapProps = {\n /** The map's accessible name (\"Pick-up points near you\"), passed translated; the places follow it. */\n label: string;\n /** Where the map looks: longitude, latitude. */\n center: LngLat;\n /** The zoom (0 the world, 12 a city, 16 a street). Default 12. */\n zoom?: number;\n /** The product whose accent the map carries. Default `krizaka`. */\n brand?: BrandId;\n /** The language of the labels (`fr`, `en`). Default `en`. */\n lang?: string;\n /** The detailed region (PMTiles) drawn from zoom 6.5. Default: our Montréal–Québec extract (to zoom 14). */\n region?: MapRegion | null;\n /** The world's low zooms (PMTiles). Default: our world extract (to zoom 6). */\n world?: MapRegion | null;\n /** Moves with the hand (default). */\n interactive?: boolean;\n /** Called when the camera rests: its centre and zoom. */\n onMoveEnd?: (view: { center: LngLat; zoom: number }) => void;\n /** Called with the position pressed on the map (not on a marker). */\n onPress?: (position: LngLat) => void;\n /** Markers, circles, clusters, the person's position. */\n children?: React.ReactNode;\n /** Styles merged last (its height). */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A map: MapLibre Native over our Protomaps tiles, styled from the tokens in the app's scheme; its places in its name. */\nexport function Map({ label, center, zoom = 12, brand, lang, region, world, interactive = true, onMoveEnd, onPress, children, style }: MapProps) {\n const { scheme, theme, radius, motion } = useTheme();\n const reduce = motion.duration.base === 0;\n const camera = React.useRef<CameraRef>(null);\n const [places, setPlaces] = React.useState<Record<string, string>>({});\n const registry = React.useMemo(\n () => ({\n add: (id: string, text: string) => setPlaces((p) => (p[id] === text ? p : { ...p, [id]: text })),\n remove: (id: string) =>\n setPlaces((p) => {\n const { [id]: _gone, ...rest } = p;\n return rest;\n }),\n }),\n [],\n );\n const styleJson = React.useMemo(() => mapStyle({ scheme, brand, lang, ...(region !== undefined ? { region } : {}), ...(world !== undefined ? { world } : {}) }), [scheme, brand, lang, region, world]);\n const palette = React.useMemo(() => mapPalette(scheme, brand), [scheme, brand]);\n const listed = Object.values(places);\n const ctx = React.useMemo(() => ({ palette, reduce, places: registry }), [palette, reduce, registry]);\n return (\n <MapContext.Provider value={ctx}>\n <View style={[styles.root, { borderRadius: radius.xl, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style]}>\n <MapView\n style={StyleSheet.absoluteFill}\n mapStyle={styleJson as never}\n aria-label={listed.length ? `${label}: ${listed.join(\", \")}` : label}\n dragPan={interactive}\n touchZoom={interactive}\n doubleTapZoom={interactive}\n touchRotate={false}\n touchPitch={false}\n attribution={false}\n logo={false}\n compass={false}\n onRegionDidChange={(e) => onMoveEnd?.({ center: e.nativeEvent.center as unknown as LngLat, zoom: e.nativeEvent.zoom })}\n onPress={(e) => {\n const coords = (e.nativeEvent as unknown as { lngLat?: LngLat }).lngLat;\n if (coords) onPress?.(coords);\n }}\n >\n <Camera ref={camera} center={[...center] as [number, number]} zoom={zoom} duration={reduce ? 0 : 600} easing={reduce ? undefined : \"ease\"} />\n {children}\n </MapView>\n <View style={[styles.attribution, { backgroundColor: theme.surface1, borderRadius: radius.sm }]}>\n <Text style={[styles.attributionText, { color: theme.textSecondary }]}>\n {MAP_ATTRIBUTION.protomaps} · {MAP_ATTRIBUTION.osm}\n </Text>\n </View>\n </View>\n </MapContext.Provider>\n );\n}\n\nfunction usePlace(label: string) {\n const { places } = useMapContext();\n const id = React.useId();\n React.useEffect(() => {\n places.add(id, label);\n return () => places.remove(id);\n }, [id, label, places]);\n return id;\n}\n\nexport type MarkerProps = {\n /** Where it stands. */\n position: LngLat;\n /** Its words: the place's name (read in the map's name and as the button's name). */\n label: string;\n /** Pressing it: details in a `Sheet`. */\n onPress?: () => void;\n /** The chosen one: larger, its label above it. */\n selected?: boolean;\n /** What it draws instead of the accent dot. */\n children?: React.ReactNode;\n};\n\n/** A place: an accent dot (or your view) that is a button when it does something. */\nexport function Marker({ position, label, onPress, selected, children }: MarkerProps) {\n const { palette } = useMapContext();\n const { theme, radius, haptic } = useTheme();\n const id = usePlace(label);\n return (\n <MapMarker id={id} lngLat={[...position] as [number, number]} anchor=\"center\" selected={selected}>\n <Pressable\n role={onPress ? \"button\" : undefined}\n aria-label={label}\n disabled={!onPress}\n hitSlop={12}\n onPress={() => {\n haptic(\"selection\");\n onPress?.();\n }}\n style={styles.markerSlot}\n >\n {selected ? (\n <View style={[styles.markerLabel, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.md }]}>\n <Txt variant=\"label\">{label}</Txt>\n </View>\n ) : null}\n {children ?? <View style={[styles.dot, { backgroundColor: palette.accent, borderColor: palette.onAccent, transform: [{ scale: selected ? 1.3 : 1 }] }]} />}\n </Pressable>\n </MapMarker>\n );\n}\n\nexport type UserPositionProps = {\n /** Where the person is. */\n position: LngLat;\n /** Its words (\"You are here\"). */\n label: string;\n /** The accuracy in metres: a soft disc. */\n accuracy?: number;\n};\n\n/** The person's position: a dot that pulses (still when the system reduces motion). */\nexport function UserPosition({ position, label, accuracy }: UserPositionProps) {\n const { palette, reduce } = useMapContext();\n const id = usePlace(label);\n const [pulse] = React.useState(() => new Animated.Value(0));\n React.useEffect(() => {\n if (reduce) return;\n const loop = Animated.loop(Animated.timing(pulse, { toValue: 1, duration: 2000, useNativeDriver: true }));\n loop.start();\n return () => loop.stop();\n }, [pulse, reduce]);\n return (\n <>\n {accuracy ? <RadiusCircle center={position} radius={accuracy} tone=\"soft\" /> : null}\n <MapMarker id={id} lngLat={[...position] as [number, number]} anchor=\"center\">\n <View role=\"img\" aria-label={label} accessible style={styles.userSlot}>\n <Animated.View style={[styles.userHalo, { backgroundColor: palette.accent, opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.4, 0] }), transform: [{ scale: pulse.interpolate({ inputRange: [0, 1], outputRange: [1, 3] }) }] }]} />\n <View style={[styles.user, { backgroundColor: palette.accent, borderColor: palette.halo }]} />\n </View>\n </MapMarker>\n </>\n );\n}\n\nexport type RadiusCircleProps = {\n /** Its centre. */\n center: LngLat;\n /** Its radius in metres. */\n radius: number;\n /** `accent` (a zone) or `soft` (an accuracy). */\n tone?: \"accent\" | \"soft\";\n};\n\n/** A circle on the ground: a delivery zone, a search radius. */\nexport function RadiusCircle({ center, radius, tone = \"accent\" }: RadiusCircleProps) {\n const { palette } = useMapContext();\n const id = `kz-circle-${React.useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const data = React.useMemo(() => circlePolygon(center, radius), [center, radius]);\n return (\n <GeoJSONSource id={id} data={data}>\n <Layer type=\"fill\" id={`${id}-fill`} paint={{ \"fill-color\": palette.accent, \"fill-opacity\": tone === \"soft\" ? 0.1 : 0.14 }} />\n <Layer type=\"line\" id={`${id}-line`} paint={{ \"line-color\": palette.accent, \"line-width\": tone === \"soft\" ? 1 : 2, \"line-opacity\": tone === \"soft\" ? 0.4 : 0.9 }} />\n </GeoJSONSource>\n );\n}\n\nexport type ClusterPoint = { id: string; position: LngLat; label: string };\n\nexport type ClusterProps = {\n /** The points: many of them. */\n points: readonly ClusterPoint[];\n /** Pressing a single point (details in a `Sheet`). */\n onPointPress?: (point: ClusterPoint) => void;\n /** The radius, in points, within which points group. Default 48. */\n radius?: number;\n};\n\n/** Many points grouped while they are close: a disc with the count; each point is part of the map's name. */\nexport function Cluster({ points, onPointPress, radius = 48 }: ClusterProps) {\n const { palette, places } = useMapContext();\n const id = `kz-cluster-${React.useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n React.useEffect(() => {\n for (const p of points) places.add(`${id}-${p.id}`, p.label);\n return () => points.forEach((p) => places.remove(`${id}-${p.id}`));\n }, [points, places, id]);\n const data = React.useMemo<GeoJSON.FeatureCollection>(\n () => ({ type: \"FeatureCollection\", features: points.map((p) => ({ type: \"Feature\", properties: { id: p.id, label: p.label }, geometry: { type: \"Point\", coordinates: [...p.position] } })) }),\n [points],\n );\n return (\n <GeoJSONSource\n id={id}\n data={data}\n cluster\n clusterRadius={radius}\n clusterMaxZoom={15}\n onPress={(e: unknown) => {\n const feature = (e as { nativeEvent?: { features?: GeoJSON.Feature[] } }).nativeEvent?.features?.[0];\n const pid = feature?.properties?.id;\n const point = points.find((p) => p.id === pid);\n if (point) onPointPress?.(point);\n }}\n >\n <Layer type=\"circle\" id={`${id}-groups`} filter={[\"has\", \"point_count\"]} paint={{ \"circle-color\": palette.accent, \"circle-radius\": [\"step\", [\"get\", \"point_count\"], 16, 10, 20, 50, 26], \"circle-stroke-width\": 3, \"circle-stroke-color\": palette.halo }} />\n <Layer type=\"symbol\" id={`${id}-count`} filter={[\"has\", \"point_count\"]} layout={{ \"text-field\": [\"get\", \"point_count_abbreviated\"], \"text-font\": [\"Noto Sans Medium\"], \"text-size\": 13 }} paint={{ \"text-color\": palette.onAccent }} />\n <Layer type=\"circle\" id={`${id}-points`} filter={[\"!\", [\"has\", \"point_count\"]]} paint={{ \"circle-color\": palette.accent, \"circle-radius\": 7, \"circle-stroke-width\": 2.5, \"circle-stroke-color\": palette.halo }} />\n </GeoJSONSource>\n );\n}\n\nexport type LocationPickerLabels = {\n /** \"Near me\". */\n nearMe: string;\n /** \"Finding you…\". */\n locating: string;\n /** \"Location is off for this app. Move the map instead.\" */\n denied: string;\n /** \"We could not find you. Move the map instead.\" */\n unavailable: string;\n /** \"You are here\". */\n you: string;\n /** The distance chip (\"1.2 km from you\"). */\n distance: (distance: string) => string;\n};\n\nconst pickerLabels: LocationPickerLabels = {\n nearMe: \"Near me\",\n locating: \"Finding you…\",\n denied: \"Location is off for this app. Move the map instead.\",\n unavailable: \"We could not find you. Move the map instead.\",\n you: \"You are here\",\n distance: (d) => `${d} from you`,\n};\n\nexport type LocationPickerProps = Pick<MapProps, \"brand\" | \"lang\" | \"region\" | \"world\" | \"style\"> & {\n /** The picker's accessible name (\"Meeting point\"). */\n label: string;\n /** The chosen position (the centre of the map). */\n value: LngLat;\n /** Called when the map rests on a new position. */\n onValueChange: (value: LngLat) => void;\n /** The BCP 47 locale of the distance. */\n locale: string;\n /** The zoom. Default 14. */\n zoom?: number;\n /** A radius in metres around the chosen position. */\n radius?: number;\n /** Where the person is, when already known. */\n origin?: LngLat | null;\n /** The words, passed translated. */\n labels?: Partial<LocationPickerLabels>;\n};\n\n/** A position picked by moving the map under a pin; its distance from the person; \"near me\" asks for the location only when pressed. */\nexport function LocationPicker({ label, value, onValueChange, locale, zoom = 14, radius: zone, origin: originProp = null, labels: given, style, ...map }: LocationPickerProps) {\n const labels = { ...pickerLabels, ...given };\n const { theme, radius, haptic } = useTheme();\n const [origin, setOrigin] = React.useState<LngLat | null>(originProp);\n const [camera, setCamera] = React.useState<LngLat>(value);\n const [status, setStatus] = React.useState<\"idle\" | \"locating\" | \"denied\" | \"unavailable\">(\"idle\");\n const nearMe = async () => {\n setStatus(\"locating\");\n try {\n if (!(await LocationManager.requestPermissions())) return setStatus(\"denied\");\n const p = await LocationManager.getCurrentPosition();\n if (!p) return setStatus(\"unavailable\");\n const here: LngLat = [p.coords.longitude, p.coords.latitude];\n haptic(\"success\");\n setOrigin(here);\n setCamera(here);\n onValueChange(here);\n setStatus(\"idle\");\n } catch {\n setStatus(\"unavailable\");\n }\n };\n const message = status === \"locating\" ? labels.locating : status === \"denied\" ? labels.denied : status === \"unavailable\" ? labels.unavailable : null;\n return (\n <View role=\"group\" aria-label={label} style={[styles.picker, style]}>\n <View style={styles.pickerFrame}>\n <Map {...map} label={label} center={camera} zoom={zoom} onMoveEnd={(v) => onValueChange(v.center)} style={StyleSheet.absoluteFill}>\n {zone ? <RadiusCircle center={value} radius={zone} /> : null}\n {origin ? <UserPosition position={origin} label={labels.you} /> : null}\n </Map>\n <View pointerEvents=\"none\" style={styles.pin}>\n <Svg width={30} height={40} viewBox=\"0 0 24 32\" aria-hidden>\n <Path d=\"M12 0C5.4 0 0 5.2 0 11.7 0 20.4 12 32 12 32s12-11.6 12-20.3C24 5.2 18.6 0 12 0Z\" fill={theme.accent} />\n <Circle cx={12} cy={11.5} r={4.5} fill={theme.onAccent} />\n </Svg>\n </View>\n <View style={styles.bar} pointerEvents=\"box-none\">\n {origin ? (\n <View style={[styles.chip, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.full }]}>\n <Txt variant=\"label\" aria-live=\"polite\">\n {labels.distance(formatDistance(distanceMeters(origin, value), locale))}\n </Txt>\n </View>\n ) : (\n <View />\n )}\n <Pressable role=\"button\" aria-label={labels.nearMe} disabled={status === \"locating\"} onPress={() => void nearMe()} style={[styles.near, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.full }]}>\n <Txt variant=\"label\">{status === \"locating\" ? labels.locating : labels.nearMe}</Txt>\n </Pressable>\n </View>\n </View>\n {message && status !== \"locating\" ? (\n <Txt variant=\"caption\" tone=\"danger\" role=\"alert\">\n {message}\n </Txt>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { height: 280, overflow: \"hidden\", borderWidth: StyleSheet.hairlineWidth, alignSelf: \"stretch\" },\n attribution: { position: \"absolute\", right: 6, bottom: 6, paddingHorizontal: 6, paddingVertical: 2, opacity: 0.9 },\n attributionText: { fontSize: 10 },\n markerSlot: { alignItems: \"center\", justifyContent: \"center\", minWidth: 44, minHeight: 44 },\n markerLabel: { position: \"absolute\", bottom: 40, paddingHorizontal: 8, paddingVertical: 4, borderWidth: StyleSheet.hairlineWidth },\n dot: { width: 18, height: 18, borderRadius: 9, borderWidth: 2.5 },\n userSlot: { width: 44, height: 44, alignItems: \"center\", justifyContent: \"center\" },\n userHalo: { position: \"absolute\", width: 16, height: 16, borderRadius: 8 },\n user: { width: 16, height: 16, borderRadius: 8, borderWidth: 3 },\n picker: { gap: 6, alignSelf: \"stretch\" },\n pickerFrame: { height: 320 },\n pin: { position: \"absolute\", left: \"50%\", top: \"50%\", marginLeft: -15, marginTop: -40 },\n bar: { position: \"absolute\", left: 12, right: 12, bottom: 28, flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\", gap: 8 },\n chip: { paddingHorizontal: 12, paddingVertical: 6, borderWidth: StyleSheet.hairlineWidth },\n near: { minHeight: 44, paddingHorizontal: 16, justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n});\n\nexport { MAP_ATTRIBUTION, MAP_GLYPHS, MAP_TILES } from \"../map/assets\";\nexport { circlePolygon, distanceMeters, formatDistance, type LngLat } from \"../map/geo\";\nexport { mapPalette, type MapRegion, mapStyle } from \"../map/style\";\n","// Where the basemap lives: Protomaps PMTiles extracts on the Krizaka CDN (Bunny), uploaded by tools/map-assets.mjs.\n// No API key, no metered service: one file per region, read by HTTP range requests. A new extract is a new file (its\n// build date in the name) and a new default here.\n\nconst CDN = \"https://krizaka-assets.b-cdn.net/maps/v1\";\n\n/** The basemap extracts: OpenStreetMap data built by Protomaps (ODbL). `world` up to zoom 6, `quebec` (Montréal–Québec) up to 14. */\nexport const MAP_TILES = {\n world: `${CDN}/tiles/world-20261012.pmtiles`,\n quebec: `${CDN}/tiles/quebec-20261012.pmtiles`,\n} as const;\n\n/** The glyphs of the labels (Noto Sans, SIL OFL): `{fontstack}` and `{range}` filled by MapLibre. */\nexport const MAP_GLYPHS = `${CDN}/fonts/{fontstack}/{range}.pbf`;\n\n/** The words every map shows, as the licences ask: OpenStreetMap's contributors (ODbL) and Protomaps. */\nexport const MAP_ATTRIBUTION = { osm: \"© OpenStreetMap contributors\", osmUrl: \"https://www.openstreetmap.org/copyright\", protomaps: \"Protomaps\", protomapsUrl: \"https://protomaps.com\" } as const;\n\nlet base: string | null = null;\n\n/**\n * Where the maps read the tiles and the glyphs, when not from the CDN itself: a same-origin path that proxies it\n * (`https://www.krizaka.com/maps/v1`, a rewrite of the site) — no cross-origin request at all. Absolute URL, no trailing slash.\n */\nexport function setMapAssetsBase(url: string | null) {\n base = url ? url.replace(/\\/+$/, \"\") : null;\n}\n\n/** The tiles and glyphs the maps read now: the CDN's, or under the base set by `setMapAssetsBase`. */\nexport function mapAssets() {\n const at = (u: string) => (base ? u.replace(CDN, base) : u);\n return { tiles: { world: at(MAP_TILES.world), quebec: at(MAP_TILES.quebec) }, glyphs: at(MAP_GLYPHS) };\n}\n","/// <reference types=\"geojson\" />\n\n// Plain geometry for the maps, web and native (no DOM, no React): distances, circles, the Web Mercator projection.\n\n/** A position: longitude, latitude (GeoJSON's order, MapLibre's `LngLat`). */\nexport type LngLat = readonly [lng: number, lat: number];\n\nconst R = 6_371_008.8;\nconst rad = (d: number) => (d * Math.PI) / 180;\n\n/** The great-circle distance between two positions, in metres (haversine). */\nexport function distanceMeters(a: LngLat, b: LngLat): number {\n const dLat = rad(b[1] - a[1]);\n const dLng = rad(b[0] - a[0]);\n const h = Math.sin(dLat / 2) ** 2 + Math.cos(rad(a[1])) * Math.cos(rad(b[1])) * Math.sin(dLng / 2) ** 2;\n return 2 * R * Math.asin(Math.min(1, Math.sqrt(h)));\n}\n\n/** A circle of `radius` metres around `center` as a GeoJSON polygon (`steps` points): a delivery zone, a search radius. */\nexport function circlePolygon(center: LngLat, radius: number, steps = 64): GeoJSON.Feature<GeoJSON.Polygon> {\n const [lng, lat] = center;\n const d = radius / R;\n const ring: [number, number][] = [];\n for (let i = 0; i <= steps; i++) {\n const brg = (2 * Math.PI * i) / steps;\n const lat2 = Math.asin(Math.sin(rad(lat)) * Math.cos(d) + Math.cos(rad(lat)) * Math.sin(d) * Math.cos(brg));\n const lng2 = rad(lng) + Math.atan2(Math.sin(brg) * Math.sin(d) * Math.cos(rad(lat)), Math.cos(d) - Math.sin(rad(lat)) * Math.sin(lat2));\n ring.push([(lng2 * 180) / Math.PI, (lat2 * 180) / Math.PI]);\n }\n return { type: \"Feature\", properties: {}, geometry: { type: \"Polygon\", coordinates: [ring] } };\n}\n\n/** The Web Mercator pixel of a position at a zoom (256-px tiles): what a static map draws without an engine. */\nexport function project([lng, lat]: LngLat, zoom: number): [number, number] {\n const scale = 256 * 2 ** zoom;\n const s = Math.sin(rad(Math.max(-85.0511, Math.min(85.0511, lat))));\n return [((lng + 180) / 360) * scale, (0.5 - Math.log((1 + s) / (1 - s)) / (4 * Math.PI)) * scale];\n}\n\n/** A distance written the locale's way: metres under 1 km, kilometres (one decimal under 10) above. */\nexport function formatDistance(meters: number, locale: string): string {\n if (meters < 1000) return new Intl.NumberFormat(locale, { style: \"unit\", unit: \"meter\", maximumFractionDigits: 0 }).format(Math.round(meters / 10) * 10);\n return new Intl.NumberFormat(locale, { style: \"unit\", unit: \"kilometer\", maximumFractionDigits: meters < 10_000 ? 1 : 0 }).format(meters / 1000);\n}\n","// @krizaka/tokens — GÉNÉRÉ depuis src/tokens/*.tokens.json par scripts/build.mjs : ne pas éditer.\n\n/** Colour roles per theme, resolved for React Native (`#rrggbb`, `rgba()` when translucent). */\nexport const themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({\n \"surface0\": \"#0c0c0e\",\n \"surface1\": \"#161618\",\n \"surface2\": \"#1f1f23\",\n \"surface3\": \"#2a2a2d\",\n \"media\": \"#1b1b1d\",\n \"borderSubtle\": \"rgba(255,255,255,0.06)\",\n \"borderDefault\": \"rgba(255,255,255,0.1)\",\n \"borderStrong\": \"rgba(255,255,255,0.16)\",\n \"textPrimary\": \"#f5f5f5\",\n \"textSecondary\": \"#a0a0a7\",\n \"textMuted\": \"#73737d\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\",\n \"success\": \"#10b77f\",\n \"successText\": \"#36d399\",\n \"successSoft\": \"rgba(16,183,127,0.14)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#f6a823\",\n \"warningSoft\": \"rgba(245,159,10,0.14)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#f87272\",\n \"dangerSoft\": \"rgba(239,67,67,0.14)\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\",\n \"surfaceSheen\": \"rgba(255,255,255,0.045)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.07)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(4,4,7,0.5)\",\n \"glassBg\": \"rgba(29,29,32,0.88)\",\n \"glassBorder\": \"rgba(255,255,255,0.1)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"surface0\": \"#fafafa\",\n \"surface1\": \"#ffffff\",\n \"surface2\": \"#f1f1f3\",\n \"surface3\": \"#e4e4e7\",\n \"media\": \"#e9e9ec\",\n \"borderSubtle\": \"rgba(0,0,0,0.06)\",\n \"borderDefault\": \"rgba(0,0,0,0.1)\",\n \"borderStrong\": \"rgba(0,0,0,0.16)\",\n \"textPrimary\": \"#18181b\",\n \"textSecondary\": \"#64646d\",\n \"textMuted\": \"#808089\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\",\n \"success\": \"#10b77f\",\n \"successText\": \"#0a714e\",\n \"successSoft\": \"rgba(16,183,127,0.1)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#955104\",\n \"warningSoft\": \"rgba(245,159,10,0.12)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#af1d1d\",\n \"dangerSoft\": \"rgba(239,67,67,0.1)\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\",\n \"surfaceSheen\": \"rgba(255,255,255,0.7)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.9)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(48,52,80,0.08)\",\n \"glassBg\": \"rgba(255,255,255,0.88)\",\n \"glassBorder\": \"rgba(0,0,0,0.08)\"\n}) });\n\n/** Corner radii, in dp. */\nexport const radius = /* @__PURE__ */ Object.freeze({\n \"xs\": 6,\n \"sm\": 8,\n \"md\": 12,\n \"lg\": 16,\n \"xl\": 20,\n \"2xl\": 28,\n \"full\": 9999\n});\n\n/** Font families: the first family of each web stack (React Native takes a single name). */\nexport const typography = /* @__PURE__ */ Object.freeze({\n \"sans\": \"Inter\",\n \"text\": \"Inter\",\n \"display\": \"Plus Jakarta Sans\",\n \"mono\": \"JetBrains Mono\"\n});\n\n/**\n * Motion: the cubic-bezier control points (`Easing.bezier(...motion.ease)`), the short spring of what answers the hand\n * (`motion.spring`) and the micro-interaction durations in ms (`motion.duration.fast`) — 0 when the system reduces motion.\n */\nexport const motion = /* @__PURE__ */ Object.freeze({ ease: /* @__PURE__ */ Object.freeze([0.16,1,0.3,1]), spring: /* @__PURE__ */ Object.freeze([0.34,1.36,0.64,1]), duration: /* @__PURE__ */ Object.freeze({\"instant\":90,\"fast\":150,\"base\":200}) });\n\n/**\n * The type scale in dp: fontSize, lineHeight and letterSpacing absolute (React Native has no em), fontWeight as a string,\n * and the role whose family sets it — with @krizaka/fonts: `{ ...typeScale.bodyMd, fontFamily: fontFamily(role, weight) }`.\n */\nexport const typeScale = /* @__PURE__ */ Object.freeze({\n \"display2xl\": {\n \"role\": \"display\",\n \"fontSize\": 72,\n \"lineHeight\": 73,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -2.52\n },\n \"displayXl\": {\n \"role\": \"display\",\n \"fontSize\": 56,\n \"lineHeight\": 59,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -1.68\n },\n \"displayLg\": {\n \"role\": \"display\",\n \"fontSize\": 44,\n \"lineHeight\": 48,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -1.1\n },\n \"displayMd\": {\n \"role\": \"display\",\n \"fontSize\": 34,\n \"lineHeight\": 39,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.68\n },\n \"displaySm\": {\n \"role\": \"display\",\n \"fontSize\": 26,\n \"lineHeight\": 31,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.39\n },\n \"titleLg\": {\n \"role\": \"display\",\n \"fontSize\": 20,\n \"lineHeight\": 27,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.2\n },\n \"titleMd\": {\n \"role\": \"text\",\n \"fontSize\": 17,\n \"lineHeight\": 24,\n \"fontWeight\": \"600\",\n \"letterSpacing\": -0.2\n },\n \"bodyLg\": {\n \"role\": \"text\",\n \"fontSize\": 18,\n \"lineHeight\": 29,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.25\n },\n \"bodyMd\": {\n \"role\": \"text\",\n \"fontSize\": 16,\n \"lineHeight\": 26,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.18\n },\n \"bodySm\": {\n \"role\": \"text\",\n \"fontSize\": 14,\n \"lineHeight\": 21,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.08\n },\n \"caption\": {\n \"role\": \"text\",\n \"fontSize\": 12,\n \"lineHeight\": 17,\n \"fontWeight\": \"500\",\n \"letterSpacing\": 0\n },\n \"overline\": {\n \"role\": \"mono\",\n \"fontSize\": 11,\n \"lineHeight\": 14,\n \"fontWeight\": \"600\",\n \"letterSpacing\": 1.32\n },\n \"monoMd\": {\n \"role\": \"mono\",\n \"fontSize\": 14,\n \"lineHeight\": 22,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n },\n \"monoSm\": {\n \"role\": \"mono\",\n \"fontSize\": 12,\n \"lineHeight\": 18,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n }\n});\n\n/**\n * The shadows per theme as React Native `boxShadow` strings (RN ≥ 0.76): `raised` (a button, a card), `floating`\n * (a menu, a popover), `overlay` (a sheet, a toast) — ink-tinted, several layers, as on the web.\n */\nexport const shadows = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.12), 0 1px 2px 0 rgba(0,0,0,0.06)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.15), 0 2px 4px 0 rgba(0,0,0,0.08)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.18), 0 4px 8px 0 rgba(0,0,0,0.08)\",\n \"raised\": \"0 1px 2px 0 rgba(4,4,7,0.45), 0 2px 6px -2px rgba(4,4,7,0.3)\",\n \"floating\": \"0 2px 4px 0 rgba(4,4,7,0.35), 0 12px 24px -6px rgba(4,4,7,0.45), 0 24px 48px -12px rgba(4,4,7,0.35)\",\n \"overlay\": \"0 4px 8px 0 rgba(4,4,7,0.4), 0 24px 48px -12px rgba(4,4,7,0.5), 0 48px 96px -24px rgba(4,4,7,0.45)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.06), 0 1px 2px 0 rgba(0,0,0,0.04)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.08), 0 2px 4px 0 rgba(0,0,0,0.04)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.1), 0 4px 8px 0 rgba(0,0,0,0.05)\",\n \"raised\": \"0 1px 2px 0 rgba(48,52,80,0.08), 0 2px 6px -2px rgba(48,52,80,0.08)\",\n \"floating\": \"0 2px 4px 0 rgba(48,52,80,0.06), 0 12px 24px -6px rgba(48,52,80,0.1), 0 24px 48px -12px rgba(48,52,80,0.1)\",\n \"overlay\": \"0 4px 8px 0 rgba(48,52,80,0.08), 0 24px 48px -12px rgba(48,52,80,0.14), 0 48px 96px -24px rgba(48,52,80,0.14)\"\n}) });\n\n/** The griffe (BRAND.md §6.1): the size of the 45° cut corner of a control, in dp. */\nexport const cut = /* @__PURE__ */ Object.freeze({\n \"size\": 10\n});\n\n/** The brand themes as ThemeProvider overrides (`overrides={brands.orazaka}`): the accent family per theme. */\nexport const brands = /* @__PURE__ */ Object.freeze({\n \"krizaka\": {\n \"dark\": {\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orazaka\": {\n \"dark\": {\n \"accent\": \"#f67e23\",\n \"accentHover\": \"#f79245\",\n \"accentSoft\": \"rgba(246,126,35,0.12)\",\n \"accentText\": \"#f78c3b\",\n \"accent2\": \"#f59e0b\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#f67e23\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#28170b\",\n \"brandGradientVia\": \"#17130c\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#b45309\",\n \"accentHover\": \"#964608\",\n \"accentSoft\": \"rgba(180,83,9,0.08)\",\n \"accentText\": \"#9b4808\",\n \"accent2\": \"#a45904\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#b45309\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#ffebd6\",\n \"brandGradientVia\": \"#fdf7ed\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orochia\": {\n \"dark\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(139,92,246,0.12)\",\n \"accentText\": \"#a78bfa\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#a78bfa\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#a78bfa\",\n \"brandGradientFrom\": \"#1a0e2a\",\n \"brandGradientVia\": \"#1c0d17\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(124,58,237,0.08)\",\n \"accentText\": \"#6d28d9\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#7c3aed\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#6d28d9\",\n \"brandGradientFrom\": \"#efe7fe\",\n \"brandGradientVia\": \"#fdedf5\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"yazakia\": {\n \"dark\": {\n \"accent\": \"#24dbc9\",\n \"accentHover\": \"#47e1d2\",\n \"accentSoft\": \"rgba(36,219,201,0.12)\",\n \"accentText\": \"#3ee0cf\",\n \"accent2\": \"#22c378\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#24dbc9\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0a241e\",\n \"brandGradientVia\": \"#0c1818\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#097169\",\n \"accentHover\": \"#085e57\",\n \"accentSoft\": \"rgba(9,113,105,0.08)\",\n \"accentText\": \"#096d64\",\n \"accent2\": \"#107546\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#097169\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e1faf1\",\n \"brandGradientVia\": \"#e9fbfa\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"yororis\": {\n \"dark\": {\n \"accent\": \"#98b587\",\n \"accentHover\": \"#adc69f\",\n \"accentSoft\": \"rgba(152,181,135,0.12)\",\n \"accentText\": \"#a7c497\",\n \"accent2\": \"#c3a579\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#98b587\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#1c1812\",\n \"brandGradientVia\": \"#11140f\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#456237\",\n \"accentHover\": \"#39532d\",\n \"accentSoft\": \"rgba(69,98,55,0.08)\",\n \"accentText\": \"#415b33\",\n \"accent2\": \"#745834\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#456237\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#f5efe5\",\n \"brandGradientVia\": \"#f1f6ee\",\n \"brandGradientTo\": \"#fafafa\"\n }\n }\n});\n/** The marks' emblem gradients: [offset, #rrggbb] stops, the same in both themes. */\nexport const marks = /* @__PURE__ */ Object.freeze({\n \"krizaka\": [\n [\n \"0%\",\n \"#196df5\"\n ],\n [\n \"100%\",\n \"#629cf8\"\n ]\n ],\n \"orazaka\": [\n [\n \"0%\",\n \"#b45309\"\n ],\n [\n \"100%\",\n \"#dc6509\"\n ]\n ],\n \"orochia\": [\n [\n \"0%\",\n \"#7c3aed\"\n ],\n [\n \"55%\",\n \"#d946ef\"\n ],\n [\n \"100%\",\n \"#f472b6\"\n ]\n ],\n \"yazakia\": [\n [\n \"0%\",\n \"#079d61\"\n ],\n [\n \"100%\",\n \"#089b96\"\n ]\n ],\n \"yororis\": [\n [\n \"0%\",\n \"#a4773d\"\n ],\n [\n \"100%\",\n \"#5d894d\"\n ]\n ]\n});\n","// The Krizaka map style, generated from the tokens (no hand-written colour): Protomaps' basemap layers\n// (@protomaps/basemaps) painted with a flavour drawn from `@krizaka/tokens` — the surfaces for the land, the accent\n// softened for the water, the text roles for the labels — in dark or light, the product's accent where a brand asks.\n// Platform-neutral: the web `Map` and the native `Map` both read it.\nimport { brands, themes } from \"@krizaka/tokens/native\";\nimport { type Flavor, layers, namedFlavor } from \"@protomaps/basemaps\";\n\nimport { MAP_ATTRIBUTION, mapAssets } from \"./assets\";\n\n/** A product of the family: its accent paints the map. */\nexport type MapBrand = keyof typeof brands;\n\n/** A colour mixed into another (`#rrggbb` only): `t` = 0 gives `a`, 1 gives `b`. */\nexport function mix(a: string, b: string, t: number): string {\n const p = (h: string) => [1, 3, 5].map((i) => parseInt(h.slice(i, i + 2), 16));\n const [x, y] = [p(a), p(b)];\n return `#${x.map((v, i) => Math.round(v + (y[i]! - v) * t).toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\n/** The colours of the map in a scheme (and a brand): what the style, the markers and the static map share. */\nexport function mapPalette(scheme: \"dark\" | \"light\", brand: MapBrand = \"krizaka\") {\n const t = { ...themes[scheme], ...(brands as Record<string, Partial<Record<\"dark\" | \"light\", Partial<typeof themes.dark>>>>)[brand]?.[scheme] };\n const dark = scheme === \"dark\";\n const land = dark ? t.surface1 : t.surface0;\n return {\n land,\n background: dark ? t.surface0 : t.surface2,\n water: mix(land, t.accent, dark ? 0.18 : 0.14),\n park: mix(land, t.success, dark ? 0.1 : 0.12),\n road: dark ? mix(land, t.textPrimary, 0.12) : \"#ffffff\",\n roadMajor: dark ? mix(land, t.textPrimary, 0.2) : mix(land, t.textPrimary, 0.06),\n casing: mix(land, t.textPrimary, dark ? 0.05 : 0.12),\n building: mix(land, t.textPrimary, dark ? 0.06 : 0.07),\n boundary: mix(land, t.textPrimary, 0.3),\n label: t.textSecondary,\n labelStrong: t.textPrimary,\n halo: land,\n accent: t.accent,\n onAccent: t.onAccent,\n };\n}\n\n/** The basemap flavour of a palette: every role of Protomaps' layers filled from the tokens. */\nexport function mapFlavor(scheme: \"dark\" | \"light\", brand?: MapBrand): Flavor {\n const c = mapPalette(scheme, brand);\n const base = namedFlavor(scheme);\n return {\n ...base,\n background: c.background,\n earth: c.land,\n park_a: c.park,\n park_b: c.park,\n wood_a: c.park,\n wood_b: c.park,\n scrub_a: c.park,\n scrub_b: c.park,\n glacier: c.land,\n sand: c.land,\n beach: c.land,\n zoo: c.park,\n hospital: c.land,\n industrial: c.land,\n school: c.land,\n military: c.land,\n aerodrome: c.land,\n pedestrian: c.land,\n runway: c.building,\n water: c.water,\n buildings: c.building,\n pier: c.building,\n boundaries: c.boundary,\n railway: c.casing,\n other: c.road,\n minor_service: c.road,\n minor_a: c.road,\n minor_b: c.road,\n link: c.road,\n major: c.roadMajor,\n highway: c.roadMajor,\n bridges_other: c.road,\n bridges_minor: c.road,\n bridges_link: c.road,\n bridges_major: c.roadMajor,\n bridges_highway: c.roadMajor,\n tunnel_other: c.road,\n tunnel_minor: c.road,\n tunnel_link: c.road,\n tunnel_major: c.roadMajor,\n tunnel_highway: c.roadMajor,\n minor_service_casing: c.casing,\n minor_casing: c.casing,\n link_casing: c.casing,\n major_casing_late: c.casing,\n major_casing_early: c.casing,\n highway_casing_late: c.casing,\n highway_casing_early: c.casing,\n bridges_other_casing: c.casing,\n bridges_minor_casing: c.casing,\n bridges_link_casing: c.casing,\n bridges_major_casing: c.casing,\n bridges_highway_casing: c.casing,\n tunnel_other_casing: c.casing,\n tunnel_minor_casing: c.casing,\n tunnel_link_casing: c.casing,\n tunnel_major_casing: c.casing,\n tunnel_highway_casing: c.casing,\n roads_label_minor: c.label,\n roads_label_minor_halo: c.halo,\n roads_label_major: c.label,\n roads_label_major_halo: c.halo,\n ocean_label: c.label,\n subplace_label: c.label,\n subplace_label_halo: c.halo,\n city_label: c.labelStrong,\n city_label_halo: c.halo,\n state_label: c.label,\n state_label_halo: c.halo,\n country_label: c.label,\n address_label: c.label,\n address_label_halo: c.halo,\n regular: \"Noto Sans Regular\",\n bold: \"Noto Sans Medium\",\n italic: \"Noto Sans Italic\",\n // No point-of-interest icons (no sprite to host): the app's own markers carry the places that matter.\n pois: undefined,\n landcover: undefined,\n };\n}\n\n/** A region of the basemap: its PMTiles file and the zoom up to which it has tiles. */\nexport type MapRegion = { url: string; maxzoom: number };\n\nexport type MapStyleOptions = {\n /** `dark` or `light`: the scheme of the page or the app. */\n scheme: \"dark\" | \"light\";\n /** The product whose accent the map carries (its markers, its water's tint). Default `krizaka`. */\n brand?: MapBrand;\n /** The language of the labels (`fr`, `en`): the place names in it where OpenStreetMap has them. Default `en`. */\n lang?: string;\n /** The low zooms of the whole world. Default: our world extract (zoom 0–6). */\n world?: MapRegion | null;\n /** The detailed region drawn from zoom 7. Default: Montréal–Québec (up to 14, overzoomed beyond). */\n region?: MapRegion | null;\n /** The glyphs' URL template. Default: our Noto Sans on the CDN. */\n glyphs?: string;\n};\n\n/** The zoom where the detailed region takes over from the world. */\nexport const REGION_FROM_ZOOM = 6.5;\n\n/**\n * The MapLibre style of a Krizaka map (a `StyleSpecification`): the world's low zooms, then the detailed region,\n * painted from the tokens. The `pmtiles://` sources need the PMTiles protocol (the web `Map` registers it; MapLibre\n * Native reads it as it is).\n */\nexport function mapStyle({ scheme, brand, lang = \"en\", world = { url: mapAssets().tiles.world, maxzoom: 6 }, region = { url: mapAssets().tiles.quebec, maxzoom: 14 }, glyphs = mapAssets().glyphs }: MapStyleOptions) {\n const flavor = mapFlavor(scheme, brand);\n const attribution = `<a href=\"${MAP_ATTRIBUTION.protomapsUrl}\">${MAP_ATTRIBUTION.protomaps}</a> · <a href=\"${MAP_ATTRIBUTION.osmUrl}\">${MAP_ATTRIBUTION.osm}</a>`;\n const sources: Record<string, unknown> = {};\n const all: { id: string; minzoom?: number; maxzoom?: number; [k: string]: unknown }[] = [];\n if (world) {\n sources.world = { type: \"vector\", url: `pmtiles://${world.url}`, attribution };\n for (const l of layers(\"world\", flavor, { lang }) as typeof all) {\n if (l.id === \"background\") all.push(l);\n else all.push({ ...l, id: `world-${l.id}`, maxzoom: region ? Math.min(l.maxzoom ?? 24, REGION_FROM_ZOOM) : l.maxzoom });\n }\n }\n if (region) {\n sources.region = { type: \"vector\", url: `pmtiles://${region.url}`, attribution };\n for (const l of layers(\"region\", flavor, { lang }) as typeof all) {\n if (l.id === \"background\") {\n if (!world) all.push(l);\n continue;\n }\n all.push({ ...l, id: `region-${l.id}`, minzoom: world ? Math.max(l.minzoom ?? 0, REGION_FROM_ZOOM) : l.minzoom });\n }\n }\n // No sprite is hosted: a layer that needs an icon (points of interest) is left out — the app's markers carry the places.\n const drawn = all.filter((l) => !(l.layout as Record<string, unknown> | undefined)?.[\"icon-image\"]);\n return { version: 8 as const, glyphs, sources, layers: drawn.map((l) => (l.maxzoom === undefined ? withoutKey(l, \"maxzoom\") : l)) };\n}\n\nconst withoutKey = <T extends Record<string, unknown>>(o: T, key: string) => Object.fromEntries(Object.entries(o).filter(([k]) => k !== key)) as T;\n"],"mappings":"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","names":["base"]}
1
+ {"version":3,"sources":["../../src/native/map.tsx","../../src/map/assets.ts","../../src/map/geo.ts","../../../tokens/dist/native.js","../../src/map/style.ts"],"sourcesContent":["/// <reference types=\"geojson\" />\n// React Native: the maps of `@krizaka/ui/map` on MapLibre Native (`@maplibre/maplibre-react-native`, an optional peer\n// installed only by the apps that show a map) — the same style generated from the tokens, the same Protomaps tiles on the\n// Krizaka CDN (MapLibre Native reads `pmtiles://` as it is), no API key. `Map`, `Marker`, `Cluster`, `UserPosition`,\n// `RadiusCircle`, `LocationPicker`; details of a place in a `Sheet` (`@krizaka/ui/native`).\nimport { type BrandId, Txt, useTheme } from \"@krizaka/ui/native\";\nimport {\n Camera,\n type CameraRef,\n GeoJSONSource,\n Layer,\n LocationManager,\n Map as MapView,\n Marker as MapMarker,\n} from \"@maplibre/maplibre-react-native\";\nimport * as React from \"react\";\nimport { Animated, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport { MAP_ATTRIBUTION } from \"../map/assets\";\nimport { circlePolygon, distanceMeters, formatDistance, type LngLat } from \"../map/geo\";\nimport { mapPalette, type MapRegion,mapStyle } from \"../map/style\";\n\ntype Ctx = { palette: ReturnType<typeof mapPalette>; reduce: boolean; places: { add: (id: string, text: string) => void; remove: (id: string) => void } };\nconst MapContext = React.createContext<Ctx | null>(null);\nconst useMapContext = () => {\n const ctx = React.useContext(MapContext);\n if (!ctx) throw new Error(\"inside a <Map> only\");\n return ctx;\n};\n\nexport type MapProps = {\n /** The map's accessible name (\"Pick-up points near you\"), passed translated; the places follow it. */\n label: string;\n /** Where the map looks: longitude, latitude. */\n center: LngLat;\n /** The zoom (0 the world, 12 a city, 16 a street). Default 12. */\n zoom?: number;\n /** The product whose accent the map carries. Default `krizaka`. */\n brand?: BrandId;\n /** The language of the labels (`fr`, `en`). Default `en`. */\n lang?: string;\n /** The detailed region (PMTiles) drawn from zoom 6.5. Default: our Montréal–Québec extract (to zoom 14). */\n region?: MapRegion | null;\n /** The world's low zooms (PMTiles). Default: our world extract (to zoom 6). */\n world?: MapRegion | null;\n /** Moves with the hand (default). */\n interactive?: boolean;\n /** Called when the camera rests: its centre and zoom. */\n onMoveEnd?: (view: { center: LngLat; zoom: number }) => void;\n /** Called with the position pressed on the map (not on a marker). */\n onPress?: (position: LngLat) => void;\n /** Markers, circles, clusters, the person's position. */\n children?: React.ReactNode;\n /** Styles merged last (its height). */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A map: MapLibre Native over our Protomaps tiles, styled from the tokens in the app's scheme; its places in its name. */\nexport function Map({ label, center, zoom = 12, brand, lang, region, world, interactive = true, onMoveEnd, onPress, children, style }: MapProps) {\n const { scheme, theme, radius, motion } = useTheme();\n const reduce = motion.duration.base === 0;\n const camera = React.useRef<CameraRef>(null);\n const [places, setPlaces] = React.useState<Record<string, string>>({});\n const registry = React.useMemo(\n () => ({\n add: (id: string, text: string) => setPlaces((p) => (p[id] === text ? p : { ...p, [id]: text })),\n remove: (id: string) =>\n setPlaces((p) => {\n const { [id]: _gone, ...rest } = p;\n return rest;\n }),\n }),\n [],\n );\n const styleJson = React.useMemo(() => mapStyle({ scheme, brand, lang, ...(region !== undefined ? { region } : {}), ...(world !== undefined ? { world } : {}) }), [scheme, brand, lang, region, world]);\n const palette = React.useMemo(() => mapPalette(scheme, brand), [scheme, brand]);\n const listed = Object.values(places);\n const ctx = React.useMemo(() => ({ palette, reduce, places: registry }), [palette, reduce, registry]);\n return (\n <MapContext.Provider value={ctx}>\n <View style={[styles.root, { borderRadius: radius.xl, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style]}>\n <MapView\n style={StyleSheet.absoluteFill}\n mapStyle={styleJson as never}\n aria-label={listed.length ? `${label}: ${listed.join(\", \")}` : label}\n dragPan={interactive}\n touchZoom={interactive}\n doubleTapZoom={interactive}\n touchRotate={false}\n touchPitch={false}\n attribution={false}\n logo={false}\n compass={false}\n onRegionDidChange={(e) => onMoveEnd?.({ center: e.nativeEvent.center as unknown as LngLat, zoom: e.nativeEvent.zoom })}\n onPress={(e) => {\n const coords = (e.nativeEvent as unknown as { lngLat?: LngLat }).lngLat;\n if (coords) onPress?.(coords);\n }}\n >\n <Camera ref={camera} center={[...center] as [number, number]} zoom={zoom} duration={reduce ? 0 : 600} easing={reduce ? undefined : \"ease\"} />\n {children}\n </MapView>\n <View style={[styles.attribution, { backgroundColor: theme.surface1, borderRadius: radius.sm }]}>\n <Text style={[styles.attributionText, { color: theme.textSecondary }]}>\n {MAP_ATTRIBUTION.protomaps} · {MAP_ATTRIBUTION.osm}\n </Text>\n </View>\n </View>\n </MapContext.Provider>\n );\n}\n\nfunction usePlace(label: string) {\n const { places } = useMapContext();\n const id = React.useId();\n React.useEffect(() => {\n places.add(id, label);\n return () => places.remove(id);\n }, [id, label, places]);\n return id;\n}\n\nexport type MarkerProps = {\n /** Where it stands. */\n position: LngLat;\n /** Its words: the place's name (read in the map's name and as the button's name). */\n label: string;\n /** Pressing it: details in a `Sheet`. */\n onPress?: () => void;\n /** The chosen one: larger, its label above it. */\n selected?: boolean;\n /** What it draws instead of the accent dot. */\n children?: React.ReactNode;\n};\n\n/** A place: an accent dot (or your view) that is a button when it does something. */\nexport function Marker({ position, label, onPress, selected, children }: MarkerProps) {\n const { palette } = useMapContext();\n const { theme, radius, haptic } = useTheme();\n const id = usePlace(label);\n return (\n <MapMarker id={id} lngLat={[...position] as [number, number]} anchor=\"center\" selected={selected}>\n <Pressable\n role={onPress ? \"button\" : undefined}\n aria-label={label}\n disabled={!onPress}\n hitSlop={12}\n onPress={() => {\n haptic(\"selection\");\n onPress?.();\n }}\n style={styles.markerSlot}\n >\n {selected ? (\n <View style={[styles.markerLabel, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.md }]}>\n <Txt variant=\"label\">{label}</Txt>\n </View>\n ) : null}\n {children ?? <View style={[styles.dot, { backgroundColor: palette.accent, borderColor: palette.onAccent, transform: [{ scale: selected ? 1.3 : 1 }] }]} />}\n </Pressable>\n </MapMarker>\n );\n}\n\nexport type UserPositionProps = {\n /** Where the person is. */\n position: LngLat;\n /** Its words (\"You are here\"). */\n label: string;\n /** The accuracy in metres: a soft disc. */\n accuracy?: number;\n};\n\n/** The person's position: a dot that pulses (still when the system reduces motion). */\nexport function UserPosition({ position, label, accuracy }: UserPositionProps) {\n const { palette, reduce } = useMapContext();\n const id = usePlace(label);\n const [pulse] = React.useState(() => new Animated.Value(0));\n React.useEffect(() => {\n if (reduce) return;\n const loop = Animated.loop(Animated.timing(pulse, { toValue: 1, duration: 2000, useNativeDriver: true }));\n loop.start();\n return () => loop.stop();\n }, [pulse, reduce]);\n return (\n <>\n {accuracy ? <RadiusCircle center={position} radius={accuracy} tone=\"soft\" /> : null}\n <MapMarker id={id} lngLat={[...position] as [number, number]} anchor=\"center\">\n <View role=\"img\" aria-label={label} accessible style={styles.userSlot}>\n <Animated.View style={[styles.userHalo, { backgroundColor: palette.accent, opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.4, 0] }), transform: [{ scale: pulse.interpolate({ inputRange: [0, 1], outputRange: [1, 3] }) }] }]} />\n <View style={[styles.user, { backgroundColor: palette.accent, borderColor: palette.halo }]} />\n </View>\n </MapMarker>\n </>\n );\n}\n\nexport type RadiusCircleProps = {\n /** Its centre. */\n center: LngLat;\n /** Its radius in metres. */\n radius: number;\n /** `accent` (a zone) or `soft` (an accuracy). */\n tone?: \"accent\" | \"soft\";\n};\n\n/** A circle on the ground: a delivery zone, a search radius. */\nexport function RadiusCircle({ center, radius, tone = \"accent\" }: RadiusCircleProps) {\n const { palette } = useMapContext();\n const id = `kz-circle-${React.useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const data = React.useMemo(() => circlePolygon(center, radius), [center, radius]);\n return (\n <GeoJSONSource id={id} data={data}>\n <Layer type=\"fill\" id={`${id}-fill`} paint={{ \"fill-color\": palette.accent, \"fill-opacity\": tone === \"soft\" ? 0.1 : 0.14 }} />\n <Layer type=\"line\" id={`${id}-line`} paint={{ \"line-color\": palette.accent, \"line-width\": tone === \"soft\" ? 1 : 2, \"line-opacity\": tone === \"soft\" ? 0.4 : 0.9 }} />\n </GeoJSONSource>\n );\n}\n\nexport type ClusterPoint = { id: string; position: LngLat; label: string };\n\nexport type ClusterProps = {\n /** The points: many of them. */\n points: readonly ClusterPoint[];\n /** Pressing a single point (details in a `Sheet`). */\n onPointPress?: (point: ClusterPoint) => void;\n /** The radius, in points, within which points group. Default 48. */\n radius?: number;\n};\n\n/** Many points grouped while they are close: a disc with the count; each point is part of the map's name. */\nexport function Cluster({ points, onPointPress, radius = 48 }: ClusterProps) {\n const { palette, places } = useMapContext();\n const id = `kz-cluster-${React.useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n React.useEffect(() => {\n for (const p of points) places.add(`${id}-${p.id}`, p.label);\n return () => points.forEach((p) => places.remove(`${id}-${p.id}`));\n }, [points, places, id]);\n const data = React.useMemo<GeoJSON.FeatureCollection>(\n () => ({ type: \"FeatureCollection\", features: points.map((p) => ({ type: \"Feature\", properties: { id: p.id, label: p.label }, geometry: { type: \"Point\", coordinates: [...p.position] } })) }),\n [points],\n );\n return (\n <GeoJSONSource\n id={id}\n data={data}\n cluster\n clusterRadius={radius}\n clusterMaxZoom={15}\n onPress={(e: unknown) => {\n const feature = (e as { nativeEvent?: { features?: GeoJSON.Feature[] } }).nativeEvent?.features?.[0];\n const pid = feature?.properties?.id;\n const point = points.find((p) => p.id === pid);\n if (point) onPointPress?.(point);\n }}\n >\n <Layer type=\"circle\" id={`${id}-groups`} filter={[\"has\", \"point_count\"]} paint={{ \"circle-color\": palette.accent, \"circle-radius\": [\"step\", [\"get\", \"point_count\"], 16, 10, 20, 50, 26], \"circle-stroke-width\": 3, \"circle-stroke-color\": palette.halo }} />\n <Layer type=\"symbol\" id={`${id}-count`} filter={[\"has\", \"point_count\"]} layout={{ \"text-field\": [\"get\", \"point_count_abbreviated\"], \"text-font\": [\"Noto Sans Medium\"], \"text-size\": 13 }} paint={{ \"text-color\": palette.onAccent }} />\n <Layer type=\"circle\" id={`${id}-points`} filter={[\"!\", [\"has\", \"point_count\"]]} paint={{ \"circle-color\": palette.accent, \"circle-radius\": 7, \"circle-stroke-width\": 2.5, \"circle-stroke-color\": palette.halo }} />\n </GeoJSONSource>\n );\n}\n\nexport type LocationPickerLabels = {\n /** \"Near me\". */\n nearMe: string;\n /** \"Finding you…\". */\n locating: string;\n /** \"Location is off for this app. Move the map instead.\" */\n denied: string;\n /** \"We could not find you. Move the map instead.\" */\n unavailable: string;\n /** \"You are here\". */\n you: string;\n /** The distance chip (\"1.2 km from you\"). */\n distance: (distance: string) => string;\n};\n\nconst pickerLabels: LocationPickerLabels = {\n nearMe: \"Near me\",\n locating: \"Finding you…\",\n denied: \"Location is off for this app. Move the map instead.\",\n unavailable: \"We could not find you. Move the map instead.\",\n you: \"You are here\",\n distance: (d) => `${d} from you`,\n};\n\nexport type LocationPickerProps = Pick<MapProps, \"brand\" | \"lang\" | \"region\" | \"world\" | \"style\"> & {\n /** The picker's accessible name (\"Meeting point\"). */\n label: string;\n /** The chosen position (the centre of the map). */\n value: LngLat;\n /** Called when the map rests on a new position. */\n onValueChange: (value: LngLat) => void;\n /** The BCP 47 locale of the distance. */\n locale: string;\n /** The zoom. Default 14. */\n zoom?: number;\n /** A radius in metres around the chosen position. */\n radius?: number;\n /** Where the person is, when already known. */\n origin?: LngLat | null;\n /** The words, passed translated. */\n labels?: Partial<LocationPickerLabels>;\n};\n\n/** A position picked by moving the map under a pin; its distance from the person; \"near me\" asks for the location only when pressed. */\nexport function LocationPicker({ label, value, onValueChange, locale, zoom = 14, radius: zone, origin: originProp = null, labels: given, style, ...map }: LocationPickerProps) {\n const labels = { ...pickerLabels, ...given };\n const { theme, radius, haptic } = useTheme();\n const [origin, setOrigin] = React.useState<LngLat | null>(originProp);\n const [camera, setCamera] = React.useState<LngLat>(value);\n const [status, setStatus] = React.useState<\"idle\" | \"locating\" | \"denied\" | \"unavailable\">(\"idle\");\n const nearMe = async () => {\n setStatus(\"locating\");\n try {\n if (!(await LocationManager.requestPermissions())) return setStatus(\"denied\");\n const p = await LocationManager.getCurrentPosition();\n if (!p) return setStatus(\"unavailable\");\n const here: LngLat = [p.coords.longitude, p.coords.latitude];\n haptic(\"success\");\n setOrigin(here);\n setCamera(here);\n onValueChange(here);\n setStatus(\"idle\");\n } catch {\n setStatus(\"unavailable\");\n }\n };\n const message = status === \"locating\" ? labels.locating : status === \"denied\" ? labels.denied : status === \"unavailable\" ? labels.unavailable : null;\n return (\n <View role=\"group\" aria-label={label} style={[styles.picker, style]}>\n <View style={styles.pickerFrame}>\n <Map {...map} label={label} center={camera} zoom={zoom} onMoveEnd={(v) => onValueChange(v.center)} style={StyleSheet.absoluteFill}>\n {zone ? <RadiusCircle center={value} radius={zone} /> : null}\n {origin ? <UserPosition position={origin} label={labels.you} /> : null}\n </Map>\n <View pointerEvents=\"none\" style={styles.pin}>\n <Svg width={30} height={40} viewBox=\"0 0 24 32\" aria-hidden>\n <Path d=\"M12 0C5.4 0 0 5.2 0 11.7 0 20.4 12 32 12 32s12-11.6 12-20.3C24 5.2 18.6 0 12 0Z\" fill={theme.accent} />\n <Circle cx={12} cy={11.5} r={4.5} fill={theme.onAccent} />\n </Svg>\n </View>\n <View style={styles.bar} pointerEvents=\"box-none\">\n {origin ? (\n <View style={[styles.chip, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.full }]}>\n <Txt variant=\"label\" aria-live=\"polite\">\n {labels.distance(formatDistance(distanceMeters(origin, value), locale))}\n </Txt>\n </View>\n ) : (\n <View />\n )}\n <Pressable role=\"button\" aria-label={labels.nearMe} disabled={status === \"locating\"} onPress={() => void nearMe()} style={[styles.near, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.full }]}>\n <Txt variant=\"label\">{status === \"locating\" ? labels.locating : labels.nearMe}</Txt>\n </Pressable>\n </View>\n </View>\n {message && status !== \"locating\" ? (\n <Txt variant=\"caption\" tone=\"danger\" role=\"alert\">\n {message}\n </Txt>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { height: 280, overflow: \"hidden\", borderWidth: StyleSheet.hairlineWidth, alignSelf: \"stretch\" },\n attribution: { position: \"absolute\", right: 6, bottom: 6, paddingHorizontal: 6, paddingVertical: 2, opacity: 0.9 },\n attributionText: { fontSize: 10 },\n markerSlot: { alignItems: \"center\", justifyContent: \"center\", minWidth: 44, minHeight: 44 },\n markerLabel: { position: \"absolute\", bottom: 40, paddingHorizontal: 8, paddingVertical: 4, borderWidth: StyleSheet.hairlineWidth },\n dot: { width: 18, height: 18, borderRadius: 9, borderWidth: 2.5 },\n userSlot: { width: 44, height: 44, alignItems: \"center\", justifyContent: \"center\" },\n userHalo: { position: \"absolute\", width: 16, height: 16, borderRadius: 8 },\n user: { width: 16, height: 16, borderRadius: 8, borderWidth: 3 },\n picker: { gap: 6, alignSelf: \"stretch\" },\n pickerFrame: { height: 320 },\n pin: { position: \"absolute\", left: \"50%\", top: \"50%\", marginLeft: -15, marginTop: -40 },\n bar: { position: \"absolute\", left: 12, right: 12, bottom: 28, flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\", gap: 8 },\n chip: { paddingHorizontal: 12, paddingVertical: 6, borderWidth: StyleSheet.hairlineWidth },\n near: { minHeight: 44, paddingHorizontal: 16, justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n});\n\nexport { MAP_ATTRIBUTION, MAP_GLYPHS, MAP_TILES } from \"../map/assets\";\nexport { circlePolygon, distanceMeters, formatDistance, type LngLat } from \"../map/geo\";\nexport { mapPalette, type MapRegion, mapStyle } from \"../map/style\";\n","// Where the basemap lives: Protomaps PMTiles extracts on the Krizaka CDN (Bunny), uploaded by tools/map-assets.mjs.\n// No API key, no metered service: one file per region, read by HTTP range requests. A new extract is a new file (its\n// build date in the name) and a new default here.\n\nconst CDN = \"https://krizaka-assets.b-cdn.net/maps/v1\";\n\n/** The basemap extracts: OpenStreetMap data built by Protomaps (ODbL). `world` up to zoom 6, `quebec` (Montréal–Québec) up to 14. */\nexport const MAP_TILES = {\n world: `${CDN}/tiles/world-20261012.pmtiles`,\n quebec: `${CDN}/tiles/quebec-20261012.pmtiles`,\n} as const;\n\n/** The glyphs of the labels (Noto Sans, SIL OFL): `{fontstack}` and `{range}` filled by MapLibre. */\nexport const MAP_GLYPHS = `${CDN}/fonts/{fontstack}/{range}.pbf`;\n\n/** The words every map shows, as the licences ask: OpenStreetMap's contributors (ODbL) and Protomaps. */\nexport const MAP_ATTRIBUTION = { osm: \"© OpenStreetMap contributors\", osmUrl: \"https://www.openstreetmap.org/copyright\", protomaps: \"Protomaps\", protomapsUrl: \"https://protomaps.com\" } as const;\n\nlet base: string | null = null;\n\n/**\n * Where the maps read the tiles and the glyphs, when not from the CDN itself: a same-origin path that proxies it\n * (`https://www.krizaka.com/maps/v1`, a rewrite of the site) — no cross-origin request at all. Absolute URL, no trailing slash.\n */\nexport function setMapAssetsBase(url: string | null) {\n base = url ? url.replace(/\\/+$/, \"\") : null;\n}\n\n/** The tiles and glyphs the maps read now: the CDN's, or under the base set by `setMapAssetsBase`. */\nexport function mapAssets() {\n const at = (u: string) => (base ? u.replace(CDN, base) : u);\n return { tiles: { world: at(MAP_TILES.world), quebec: at(MAP_TILES.quebec) }, glyphs: at(MAP_GLYPHS) };\n}\n","/// <reference types=\"geojson\" />\n\n// Plain geometry for the maps, web and native (no DOM, no React): distances, circles, the Web Mercator projection.\n\n/** A position: longitude, latitude (GeoJSON's order, MapLibre's `LngLat`). */\nexport type LngLat = readonly [lng: number, lat: number];\n\nconst R = 6_371_008.8;\nconst rad = (d: number) => (d * Math.PI) / 180;\n\n/** The great-circle distance between two positions, in metres (haversine). */\nexport function distanceMeters(a: LngLat, b: LngLat): number {\n const dLat = rad(b[1] - a[1]);\n const dLng = rad(b[0] - a[0]);\n const h = Math.sin(dLat / 2) ** 2 + Math.cos(rad(a[1])) * Math.cos(rad(b[1])) * Math.sin(dLng / 2) ** 2;\n return 2 * R * Math.asin(Math.min(1, Math.sqrt(h)));\n}\n\n/** A circle of `radius` metres around `center` as a GeoJSON polygon (`steps` points): a delivery zone, a search radius. */\nexport function circlePolygon(center: LngLat, radius: number, steps = 64): GeoJSON.Feature<GeoJSON.Polygon> {\n const [lng, lat] = center;\n const d = radius / R;\n const ring: [number, number][] = [];\n for (let i = 0; i <= steps; i++) {\n const brg = (2 * Math.PI * i) / steps;\n const lat2 = Math.asin(Math.sin(rad(lat)) * Math.cos(d) + Math.cos(rad(lat)) * Math.sin(d) * Math.cos(brg));\n const lng2 = rad(lng) + Math.atan2(Math.sin(brg) * Math.sin(d) * Math.cos(rad(lat)), Math.cos(d) - Math.sin(rad(lat)) * Math.sin(lat2));\n ring.push([(lng2 * 180) / Math.PI, (lat2 * 180) / Math.PI]);\n }\n return { type: \"Feature\", properties: {}, geometry: { type: \"Polygon\", coordinates: [ring] } };\n}\n\n/** The Web Mercator pixel of a position at a zoom (256-px tiles): what a static map draws without an engine. */\nexport function project([lng, lat]: LngLat, zoom: number): [number, number] {\n const scale = 256 * 2 ** zoom;\n const s = Math.sin(rad(Math.max(-85.0511, Math.min(85.0511, lat))));\n return [((lng + 180) / 360) * scale, (0.5 - Math.log((1 + s) / (1 - s)) / (4 * Math.PI)) * scale];\n}\n\n/** A distance written the locale's way: metres under 1 km, kilometres (one decimal under 10) above. */\nexport function formatDistance(meters: number, locale: string): string {\n if (meters < 1000) return new Intl.NumberFormat(locale, { style: \"unit\", unit: \"meter\", maximumFractionDigits: 0 }).format(Math.round(meters / 10) * 10);\n return new Intl.NumberFormat(locale, { style: \"unit\", unit: \"kilometer\", maximumFractionDigits: meters < 10_000 ? 1 : 0 }).format(meters / 1000);\n}\n","// @krizaka/tokens — GÉNÉRÉ depuis src/tokens/*.tokens.json par scripts/build.mjs : ne pas éditer.\n\n/** Colour roles per theme, resolved for React Native (`#rrggbb`, `rgba()` when translucent). */\nexport const themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({\n \"surface0\": \"#0c0c0e\",\n \"surface1\": \"#161618\",\n \"surface2\": \"#1f1f23\",\n \"surface3\": \"#2a2a2d\",\n \"media\": \"#1b1b1d\",\n \"borderSubtle\": \"rgba(255,255,255,0.06)\",\n \"borderDefault\": \"rgba(255,255,255,0.1)\",\n \"borderStrong\": \"rgba(255,255,255,0.16)\",\n \"textPrimary\": \"#f5f5f5\",\n \"textSecondary\": \"#a0a0a7\",\n \"textMuted\": \"#73737d\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\",\n \"success\": \"#10b77f\",\n \"successText\": \"#36d399\",\n \"successSoft\": \"rgba(16,183,127,0.14)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#f6a823\",\n \"warningSoft\": \"rgba(245,159,10,0.14)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#f87272\",\n \"dangerSoft\": \"rgba(239,67,67,0.14)\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\",\n \"surfaceSheen\": \"rgba(255,255,255,0.045)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.07)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(4,4,7,0.5)\",\n \"glassBg\": \"rgba(29,29,32,0.88)\",\n \"glassBorder\": \"rgba(255,255,255,0.1)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"surface0\": \"#fafafa\",\n \"surface1\": \"#ffffff\",\n \"surface2\": \"#f1f1f3\",\n \"surface3\": \"#e4e4e7\",\n \"media\": \"#e9e9ec\",\n \"borderSubtle\": \"rgba(0,0,0,0.06)\",\n \"borderDefault\": \"rgba(0,0,0,0.1)\",\n \"borderStrong\": \"rgba(0,0,0,0.16)\",\n \"textPrimary\": \"#18181b\",\n \"textSecondary\": \"#64646d\",\n \"textMuted\": \"#808089\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\",\n \"success\": \"#10b77f\",\n \"successText\": \"#0a714e\",\n \"successSoft\": \"rgba(16,183,127,0.1)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#955104\",\n \"warningSoft\": \"rgba(245,159,10,0.12)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#af1d1d\",\n \"dangerSoft\": \"rgba(239,67,67,0.1)\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\",\n \"surfaceSheen\": \"rgba(255,255,255,0.7)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.9)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(48,52,80,0.08)\",\n \"glassBg\": \"rgba(255,255,255,0.88)\",\n \"glassBorder\": \"rgba(0,0,0,0.08)\"\n}) });\n\n/** Corner radii, in dp. */\nexport const radius = /* @__PURE__ */ Object.freeze({\n \"xs\": 6,\n \"sm\": 8,\n \"md\": 12,\n \"lg\": 16,\n \"xl\": 20,\n \"2xl\": 28,\n \"full\": 9999\n});\n\n/** Font families: the first family of each web stack (React Native takes a single name). */\nexport const typography = /* @__PURE__ */ Object.freeze({\n \"sans\": \"Inter\",\n \"text\": \"Inter\",\n \"display\": \"Plus Jakarta Sans\",\n \"mono\": \"JetBrains Mono\"\n});\n\n/**\n * Motion: the cubic-bezier control points (`Easing.bezier(...motion.ease)`), the short spring of what answers the hand\n * (`motion.spring`) and the micro-interaction durations in ms (`motion.duration.fast`) — 0 when the system reduces motion.\n */\nexport const motion = /* @__PURE__ */ Object.freeze({ ease: /* @__PURE__ */ Object.freeze([0.16,1,0.3,1]), spring: /* @__PURE__ */ Object.freeze([0.34,1.36,0.64,1]), duration: /* @__PURE__ */ Object.freeze({\"instant\":90,\"fast\":150,\"base\":200}) });\n\n/**\n * The type scale in dp: fontSize, lineHeight and letterSpacing absolute (React Native has no em), fontWeight as a string,\n * and the role whose family sets it — with @krizaka/fonts: `{ ...typeScale.bodyMd, fontFamily: fontFamily(role, weight) }`.\n */\nexport const typeScale = /* @__PURE__ */ Object.freeze({\n \"display2xl\": {\n \"role\": \"display\",\n \"fontSize\": 72,\n \"lineHeight\": 73,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -2.52\n },\n \"displayXl\": {\n \"role\": \"display\",\n \"fontSize\": 56,\n \"lineHeight\": 59,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -1.68\n },\n \"displayLg\": {\n \"role\": \"display\",\n \"fontSize\": 44,\n \"lineHeight\": 48,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -1.1\n },\n \"displayMd\": {\n \"role\": \"display\",\n \"fontSize\": 34,\n \"lineHeight\": 39,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.68\n },\n \"displaySm\": {\n \"role\": \"display\",\n \"fontSize\": 26,\n \"lineHeight\": 31,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.39\n },\n \"titleLg\": {\n \"role\": \"display\",\n \"fontSize\": 20,\n \"lineHeight\": 27,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.2\n },\n \"titleMd\": {\n \"role\": \"text\",\n \"fontSize\": 17,\n \"lineHeight\": 24,\n \"fontWeight\": \"600\",\n \"letterSpacing\": -0.2\n },\n \"bodyLg\": {\n \"role\": \"text\",\n \"fontSize\": 18,\n \"lineHeight\": 29,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.25\n },\n \"bodyMd\": {\n \"role\": \"text\",\n \"fontSize\": 16,\n \"lineHeight\": 26,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.18\n },\n \"bodySm\": {\n \"role\": \"text\",\n \"fontSize\": 14,\n \"lineHeight\": 21,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.08\n },\n \"caption\": {\n \"role\": \"text\",\n \"fontSize\": 12,\n \"lineHeight\": 17,\n \"fontWeight\": \"500\",\n \"letterSpacing\": 0\n },\n \"overline\": {\n \"role\": \"mono\",\n \"fontSize\": 11,\n \"lineHeight\": 14,\n \"fontWeight\": \"600\",\n \"letterSpacing\": 1.32\n },\n \"monoMd\": {\n \"role\": \"mono\",\n \"fontSize\": 14,\n \"lineHeight\": 22,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n },\n \"monoSm\": {\n \"role\": \"mono\",\n \"fontSize\": 12,\n \"lineHeight\": 18,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n }\n});\n\n/**\n * The shadows per theme as React Native `boxShadow` strings (RN ≥ 0.76): `raised` (a button, a card), `floating`\n * (a menu, a popover), `overlay` (a sheet, a toast) — ink-tinted, several layers, as on the web.\n */\nexport const shadows = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.12), 0 1px 2px 0 rgba(0,0,0,0.06)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.15), 0 2px 4px 0 rgba(0,0,0,0.08)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.18), 0 4px 8px 0 rgba(0,0,0,0.08)\",\n \"raised\": \"0 1px 2px 0 rgba(4,4,7,0.45), 0 2px 6px -2px rgba(4,4,7,0.3)\",\n \"floating\": \"0 2px 4px 0 rgba(4,4,7,0.35), 0 12px 24px -6px rgba(4,4,7,0.45), 0 24px 48px -12px rgba(4,4,7,0.35)\",\n \"overlay\": \"0 4px 8px 0 rgba(4,4,7,0.4), 0 24px 48px -12px rgba(4,4,7,0.5), 0 48px 96px -24px rgba(4,4,7,0.45)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.06), 0 1px 2px 0 rgba(0,0,0,0.04)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.08), 0 2px 4px 0 rgba(0,0,0,0.04)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.1), 0 4px 8px 0 rgba(0,0,0,0.05)\",\n \"raised\": \"0 1px 2px 0 rgba(48,52,80,0.08), 0 2px 6px -2px rgba(48,52,80,0.08)\",\n \"floating\": \"0 2px 4px 0 rgba(48,52,80,0.06), 0 12px 24px -6px rgba(48,52,80,0.1), 0 24px 48px -12px rgba(48,52,80,0.1)\",\n \"overlay\": \"0 4px 8px 0 rgba(48,52,80,0.08), 0 24px 48px -12px rgba(48,52,80,0.14), 0 48px 96px -24px rgba(48,52,80,0.14)\"\n}) });\n\n/** The griffe (BRAND.md §6.1): the size of the 45° cut corner of a control, in dp. */\nexport const cut = /* @__PURE__ */ Object.freeze({\n \"size\": 10\n});\n\n/** The brand themes as ThemeProvider overrides (`overrides={brands.orazaka}`): the accent family per theme. */\nexport const brands = /* @__PURE__ */ Object.freeze({\n \"krizaka\": {\n \"dark\": {\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orazaka\": {\n \"dark\": {\n \"accent\": \"#f67e23\",\n \"accentHover\": \"#f79245\",\n \"accentSoft\": \"rgba(246,126,35,0.12)\",\n \"accentText\": \"#f78c3b\",\n \"accent2\": \"#f59e0b\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#f67e23\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#28170b\",\n \"brandGradientVia\": \"#17130c\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#b45309\",\n \"accentHover\": \"#964608\",\n \"accentSoft\": \"rgba(180,83,9,0.08)\",\n \"accentText\": \"#9b4808\",\n \"accent2\": \"#a45904\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#b45309\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#ffebd6\",\n \"brandGradientVia\": \"#fdf7ed\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orochia\": {\n \"dark\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(139,92,246,0.12)\",\n \"accentText\": \"#a78bfa\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#a78bfa\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#a78bfa\",\n \"brandGradientFrom\": \"#1a0e2a\",\n \"brandGradientVia\": \"#1c0d17\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(124,58,237,0.08)\",\n \"accentText\": \"#6d28d9\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#7c3aed\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#6d28d9\",\n \"brandGradientFrom\": \"#efe7fe\",\n \"brandGradientVia\": \"#fdedf5\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"yasakia\": {\n \"dark\": {\n \"accent\": \"#24dbc9\",\n \"accentHover\": \"#47e1d2\",\n \"accentSoft\": \"rgba(36,219,201,0.12)\",\n \"accentText\": \"#3ee0cf\",\n \"accent2\": \"#22c378\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#24dbc9\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0a241e\",\n \"brandGradientVia\": \"#0c1818\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#097169\",\n \"accentHover\": \"#085e57\",\n \"accentSoft\": \"rgba(9,113,105,0.08)\",\n \"accentText\": \"#096d64\",\n \"accent2\": \"#107546\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#097169\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e1faf1\",\n \"brandGradientVia\": \"#e9fbfa\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"yororis\": {\n \"dark\": {\n \"accent\": \"#98b587\",\n \"accentHover\": \"#adc69f\",\n \"accentSoft\": \"rgba(152,181,135,0.12)\",\n \"accentText\": \"#a7c497\",\n \"accent2\": \"#c3a579\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#98b587\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#1c1812\",\n \"brandGradientVia\": \"#11140f\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#456237\",\n \"accentHover\": \"#39532d\",\n \"accentSoft\": \"rgba(69,98,55,0.08)\",\n \"accentText\": \"#415b33\",\n \"accent2\": \"#745834\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#456237\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#f5efe5\",\n \"brandGradientVia\": \"#f1f6ee\",\n \"brandGradientTo\": \"#fafafa\"\n }\n }\n});\n/** The marks' emblem gradients: [offset, #rrggbb] stops, the same in both themes. */\nexport const marks = /* @__PURE__ */ Object.freeze({\n \"krizaka\": [\n [\n \"0%\",\n \"#196df5\"\n ],\n [\n \"100%\",\n \"#629cf8\"\n ]\n ],\n \"orazaka\": [\n [\n \"0%\",\n \"#b45309\"\n ],\n [\n \"100%\",\n \"#dc6509\"\n ]\n ],\n \"orochia\": [\n [\n \"0%\",\n \"#7c3aed\"\n ],\n [\n \"55%\",\n \"#d946ef\"\n ],\n [\n \"100%\",\n \"#f472b6\"\n ]\n ],\n \"yasakia\": [\n [\n \"0%\",\n \"#079d61\"\n ],\n [\n \"100%\",\n \"#089b96\"\n ]\n ],\n \"yororis\": [\n [\n \"0%\",\n \"#a4773d\"\n ],\n [\n \"100%\",\n \"#5d894d\"\n ]\n ]\n});\n","// The Krizaka map style, generated from the tokens (no hand-written colour): Protomaps' basemap layers\n// (@protomaps/basemaps) painted with a flavour drawn from `@krizaka/tokens` — the surfaces for the land, the accent\n// softened for the water, the text roles for the labels — in dark or light, the product's accent where a brand asks.\n// Platform-neutral: the web `Map` and the native `Map` both read it.\nimport { brands, themes } from \"@krizaka/tokens/native\";\nimport { type Flavor, layers, namedFlavor } from \"@protomaps/basemaps\";\n\nimport { MAP_ATTRIBUTION, mapAssets } from \"./assets\";\n\n/** A product of the family: its accent paints the map. */\nexport type MapBrand = keyof typeof brands;\n\n/** A colour mixed into another (`#rrggbb` only): `t` = 0 gives `a`, 1 gives `b`. */\nexport function mix(a: string, b: string, t: number): string {\n const p = (h: string) => [1, 3, 5].map((i) => parseInt(h.slice(i, i + 2), 16));\n const [x, y] = [p(a), p(b)];\n return `#${x.map((v, i) => Math.round(v + (y[i]! - v) * t).toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\n/** The colours of the map in a scheme (and a brand): what the style, the markers and the static map share. */\nexport function mapPalette(scheme: \"dark\" | \"light\", brand: MapBrand = \"krizaka\") {\n const t = { ...themes[scheme], ...(brands as Record<string, Partial<Record<\"dark\" | \"light\", Partial<typeof themes.dark>>>>)[brand]?.[scheme] };\n const dark = scheme === \"dark\";\n const land = dark ? t.surface1 : t.surface0;\n return {\n land,\n background: dark ? t.surface0 : t.surface2,\n water: mix(land, t.accent, dark ? 0.18 : 0.14),\n park: mix(land, t.success, dark ? 0.1 : 0.12),\n road: dark ? mix(land, t.textPrimary, 0.12) : \"#ffffff\",\n roadMajor: dark ? mix(land, t.textPrimary, 0.2) : mix(land, t.textPrimary, 0.06),\n casing: mix(land, t.textPrimary, dark ? 0.05 : 0.12),\n building: mix(land, t.textPrimary, dark ? 0.06 : 0.07),\n boundary: mix(land, t.textPrimary, 0.3),\n label: t.textSecondary,\n labelStrong: t.textPrimary,\n halo: land,\n accent: t.accent,\n onAccent: t.onAccent,\n };\n}\n\n/** The basemap flavour of a palette: every role of Protomaps' layers filled from the tokens. */\nexport function mapFlavor(scheme: \"dark\" | \"light\", brand?: MapBrand): Flavor {\n const c = mapPalette(scheme, brand);\n const base = namedFlavor(scheme);\n return {\n ...base,\n background: c.background,\n earth: c.land,\n park_a: c.park,\n park_b: c.park,\n wood_a: c.park,\n wood_b: c.park,\n scrub_a: c.park,\n scrub_b: c.park,\n glacier: c.land,\n sand: c.land,\n beach: c.land,\n zoo: c.park,\n hospital: c.land,\n industrial: c.land,\n school: c.land,\n military: c.land,\n aerodrome: c.land,\n pedestrian: c.land,\n runway: c.building,\n water: c.water,\n buildings: c.building,\n pier: c.building,\n boundaries: c.boundary,\n railway: c.casing,\n other: c.road,\n minor_service: c.road,\n minor_a: c.road,\n minor_b: c.road,\n link: c.road,\n major: c.roadMajor,\n highway: c.roadMajor,\n bridges_other: c.road,\n bridges_minor: c.road,\n bridges_link: c.road,\n bridges_major: c.roadMajor,\n bridges_highway: c.roadMajor,\n tunnel_other: c.road,\n tunnel_minor: c.road,\n tunnel_link: c.road,\n tunnel_major: c.roadMajor,\n tunnel_highway: c.roadMajor,\n minor_service_casing: c.casing,\n minor_casing: c.casing,\n link_casing: c.casing,\n major_casing_late: c.casing,\n major_casing_early: c.casing,\n highway_casing_late: c.casing,\n highway_casing_early: c.casing,\n bridges_other_casing: c.casing,\n bridges_minor_casing: c.casing,\n bridges_link_casing: c.casing,\n bridges_major_casing: c.casing,\n bridges_highway_casing: c.casing,\n tunnel_other_casing: c.casing,\n tunnel_minor_casing: c.casing,\n tunnel_link_casing: c.casing,\n tunnel_major_casing: c.casing,\n tunnel_highway_casing: c.casing,\n roads_label_minor: c.label,\n roads_label_minor_halo: c.halo,\n roads_label_major: c.label,\n roads_label_major_halo: c.halo,\n ocean_label: c.label,\n subplace_label: c.label,\n subplace_label_halo: c.halo,\n city_label: c.labelStrong,\n city_label_halo: c.halo,\n state_label: c.label,\n state_label_halo: c.halo,\n country_label: c.label,\n address_label: c.label,\n address_label_halo: c.halo,\n regular: \"Noto Sans Regular\",\n bold: \"Noto Sans Medium\",\n italic: \"Noto Sans Italic\",\n // No point-of-interest icons (no sprite to host): the app's own markers carry the places that matter.\n pois: undefined,\n landcover: undefined,\n };\n}\n\n/** A region of the basemap: its PMTiles file and the zoom up to which it has tiles. */\nexport type MapRegion = { url: string; maxzoom: number };\n\nexport type MapStyleOptions = {\n /** `dark` or `light`: the scheme of the page or the app. */\n scheme: \"dark\" | \"light\";\n /** The product whose accent the map carries (its markers, its water's tint). Default `krizaka`. */\n brand?: MapBrand;\n /** The language of the labels (`fr`, `en`): the place names in it where OpenStreetMap has them. Default `en`. */\n lang?: string;\n /** The low zooms of the whole world. Default: our world extract (zoom 0–6). */\n world?: MapRegion | null;\n /** The detailed region drawn from zoom 7. Default: Montréal–Québec (up to 14, overzoomed beyond). */\n region?: MapRegion | null;\n /** The glyphs' URL template. Default: our Noto Sans on the CDN. */\n glyphs?: string;\n};\n\n/** The zoom where the detailed region takes over from the world. */\nexport const REGION_FROM_ZOOM = 6.5;\n\n/**\n * The MapLibre style of a Krizaka map (a `StyleSpecification`): the world's low zooms, then the detailed region,\n * painted from the tokens. The `pmtiles://` sources need the PMTiles protocol (the web `Map` registers it; MapLibre\n * Native reads it as it is).\n */\nexport function mapStyle({ scheme, brand, lang = \"en\", world = { url: mapAssets().tiles.world, maxzoom: 6 }, region = { url: mapAssets().tiles.quebec, maxzoom: 14 }, glyphs = mapAssets().glyphs }: MapStyleOptions) {\n const flavor = mapFlavor(scheme, brand);\n const attribution = `<a href=\"${MAP_ATTRIBUTION.protomapsUrl}\">${MAP_ATTRIBUTION.protomaps}</a> · <a href=\"${MAP_ATTRIBUTION.osmUrl}\">${MAP_ATTRIBUTION.osm}</a>`;\n const sources: Record<string, unknown> = {};\n const all: { id: string; minzoom?: number; maxzoom?: number; [k: string]: unknown }[] = [];\n if (world) {\n sources.world = { type: \"vector\", url: `pmtiles://${world.url}`, attribution };\n for (const l of layers(\"world\", flavor, { lang }) as typeof all) {\n if (l.id === \"background\") all.push(l);\n else all.push({ ...l, id: `world-${l.id}`, maxzoom: region ? Math.min(l.maxzoom ?? 24, REGION_FROM_ZOOM) : l.maxzoom });\n }\n }\n if (region) {\n sources.region = { type: \"vector\", url: `pmtiles://${region.url}`, attribution };\n for (const l of layers(\"region\", flavor, { lang }) as typeof all) {\n if (l.id === \"background\") {\n if (!world) all.push(l);\n continue;\n }\n all.push({ ...l, id: `region-${l.id}`, minzoom: world ? Math.max(l.minzoom ?? 0, REGION_FROM_ZOOM) : l.minzoom });\n }\n }\n // No sprite is hosted: a layer that needs an icon (points of interest) is left out — the app's markers carry the places.\n const drawn = all.filter((l) => !(l.layout as Record<string, unknown> | undefined)?.[\"icon-image\"]);\n return { version: 8 as const, glyphs, sources, layers: drawn.map((l) => (l.maxzoom === undefined ? withoutKey(l, \"maxzoom\") : l)) };\n}\n\nconst withoutKey = <T extends Record<string, unknown>>(o: T, key: string) => Object.fromEntries(Object.entries(o).filter(([k]) => k !== key)) as T;\n"],"mappings":"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","names":["base"]}