@krizaka/ui 3.21.0 → 3.23.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 (494) hide show
  1. package/README.md +5 -0
  2. package/dist/achievement.js +1 -1
  3. package/dist/action-bar.js +4 -4
  4. package/dist/app-header.d.ts +79 -0
  5. package/dist/app-header.js +32 -0
  6. package/dist/app-header.js.map +1 -0
  7. package/dist/app-shell.d.ts +20 -2
  8. package/dist/app-shell.js +35 -20
  9. package/dist/app-shell.js.map +1 -1
  10. package/dist/argument-card.d.ts +4 -1
  11. package/dist/argument-card.js +8 -5
  12. package/dist/argument-card.js.map +1 -1
  13. package/dist/audio-player.d.ts +3 -2
  14. package/dist/audio-player.js +14 -10
  15. package/dist/audio-player.js.map +1 -1
  16. package/dist/blocks.css +28 -0
  17. package/dist/button.js +2 -1
  18. package/dist/captcha.d.ts +81 -0
  19. package/dist/captcha.js +162 -0
  20. package/dist/captcha.js.map +1 -0
  21. package/dist/card-grid.d.ts +10 -1
  22. package/dist/card-grid.js +3 -2
  23. package/dist/card-grid.js.map +1 -1
  24. package/dist/card.js +3 -3
  25. package/dist/changelog-page.d.ts +57 -3
  26. package/dist/changelog-page.js +117 -1
  27. package/dist/changelog-page.js.map +1 -1
  28. package/dist/choice-grid.js +1 -1
  29. package/dist/{chunk-5MH64NIL.js → chunk-2L67YTNV.js} +2 -2
  30. package/dist/{chunk-3IN6TOPM.js → chunk-6ZYRUOTA.js} +6 -3
  31. package/dist/chunk-6ZYRUOTA.js.map +1 -0
  32. package/dist/chunk-APNIVNIX.js +54 -0
  33. package/dist/chunk-APNIVNIX.js.map +1 -0
  34. package/dist/{chunk-FKBHWS4N.js → chunk-CEJDH6SA.js} +2 -2
  35. package/dist/{chunk-OWC2LZD2.js → chunk-CHOJUCVE.js} +6 -3
  36. package/dist/chunk-CHOJUCVE.js.map +1 -0
  37. package/dist/{chunk-3BC4XQ6C.js → chunk-DZU6RMYD.js} +6 -3
  38. package/dist/chunk-DZU6RMYD.js.map +1 -0
  39. package/dist/chunk-F7FVPPBB.js +1080 -0
  40. package/dist/chunk-F7FVPPBB.js.map +1 -0
  41. package/dist/{chunk-5Z7FWCV2.js → chunk-HBZPJ3EP.js} +2 -2
  42. package/dist/{chunk-C2BRIFJG.js → chunk-HJFRHYCI.js} +2 -2
  43. package/dist/{chunk-ZNMFG62E.js → chunk-KH3JOEPY.js} +3 -2
  44. package/dist/chunk-KH3JOEPY.js.map +1 -0
  45. package/dist/{chunk-BTMFZ66D.js → chunk-KM6VAKIE.js} +2 -2
  46. package/dist/{chunk-DGQMDJXK.js → chunk-LZNZLCOE.js} +2 -2
  47. package/dist/chunk-MQPC3P4T.js +126 -0
  48. package/dist/chunk-MQPC3P4T.js.map +1 -0
  49. package/dist/{chunk-2FRWNSRO.js → chunk-NSLXEDIS.js} +3 -2
  50. package/dist/chunk-NSLXEDIS.js.map +1 -0
  51. package/dist/{chunk-3GODX3D6.js → chunk-QDXV544C.js} +2 -2
  52. package/dist/chunk-QDXV544C.js.map +1 -0
  53. package/dist/{chunk-4LOMIQVX.js → chunk-W675RFOA.js} +3 -2
  54. package/dist/chunk-W675RFOA.js.map +1 -0
  55. package/dist/{chunk-G3ETON2A.js → chunk-WU4VLSEA.js} +3 -2
  56. package/dist/chunk-WU4VLSEA.js.map +1 -0
  57. package/dist/{chunk-IZ7MV6HM.js → chunk-XVFQZ3ZG.js} +3 -2
  58. package/dist/chunk-XVFQZ3ZG.js.map +1 -0
  59. package/dist/{chunk-LIPK4UCS.js → chunk-YCIBJ6OQ.js} +140 -209
  60. package/dist/chunk-YCIBJ6OQ.js.map +1 -0
  61. package/dist/cn.js +1 -1
  62. package/dist/code-block.js +2 -2
  63. package/dist/code-block.js.map +1 -1
  64. package/dist/command.js +3 -3
  65. package/dist/comparison-table.d.ts +44 -0
  66. package/dist/comparison-table.js +84 -0
  67. package/dist/comparison-table.js.map +1 -0
  68. package/dist/confirm-button.js +2 -2
  69. package/dist/continue-prompt.js +3 -3
  70. package/dist/continue-prompt.js.map +1 -1
  71. package/dist/cta-panel.js +1 -1
  72. package/dist/data-table.js +19 -1066
  73. package/dist/data-table.js.map +1 -1
  74. package/dist/date-picker.js +4 -4
  75. package/dist/decision-list.js +1 -1
  76. package/dist/dialog.js +3 -2
  77. package/dist/dialog.js.map +1 -1
  78. package/dist/docs-nav.d.ts +36 -0
  79. package/dist/docs-nav.js +44 -0
  80. package/dist/docs-nav.js.map +1 -0
  81. package/dist/dropdown-menu.js +1 -1
  82. package/dist/error-page.js +1 -1
  83. package/dist/field.js +1 -1
  84. package/dist/filter-bar.js +2 -2
  85. package/dist/force-update-screen.js +2 -1
  86. package/dist/force-update-screen.js.map +1 -1
  87. package/dist/gallery-page.js +1 -1
  88. package/dist/genui.d.ts +221 -0
  89. package/dist/genui.js +533 -0
  90. package/dist/genui.js.map +1 -0
  91. package/dist/glow-card.js +1 -1
  92. package/dist/goal-gauge.js +1 -1
  93. package/dist/how-it-works-page.js +1 -1
  94. package/dist/image-cropper.js +3 -3
  95. package/dist/index.d.ts +17 -24
  96. package/dist/index.js +4 -4
  97. package/dist/landscape.js +1 -1
  98. package/dist/link-card.d.ts +9 -2
  99. package/dist/link-card.js +5 -44
  100. package/dist/link-card.js.map +1 -1
  101. package/dist/longform-page.js +1 -1
  102. package/dist/maintenance-screen.js +2 -1
  103. package/dist/maintenance-screen.js.map +1 -1
  104. package/dist/map.js +3 -3
  105. package/dist/map.js.map +1 -1
  106. package/dist/markdown.js +2 -1
  107. package/dist/markdown.js.map +1 -1
  108. package/dist/marketing-layout.js +1 -1
  109. package/dist/marketing-layout.js.map +1 -1
  110. package/dist/marquee.js +1 -1
  111. package/dist/mascot-quote.js +1 -1
  112. package/dist/match-dialog.js +2 -1
  113. package/dist/match-dialog.js.map +1 -1
  114. package/dist/media-grid.d.ts +26 -4
  115. package/dist/media-grid.js +122 -163
  116. package/dist/media-grid.js.map +1 -1
  117. package/dist/meta-row.d.ts +54 -0
  118. package/dist/meta-row.js +35 -0
  119. package/dist/meta-row.js.map +1 -0
  120. package/dist/native/map.js +3 -3
  121. package/dist/native/map.js.map +1 -1
  122. package/dist/native.d.ts +42 -16
  123. package/dist/native.js +591 -537
  124. package/dist/native.js.map +1 -1
  125. package/dist/nav-bar.js +3 -3
  126. package/dist/page-hero.js +5 -5
  127. package/dist/page.js +2 -2
  128. package/dist/popover.js +1 -1
  129. package/dist/pricing-page.js +1 -1
  130. package/dist/product-page.js +1 -1
  131. package/dist/profile-card.js +1 -1
  132. package/dist/promise-card.js +1 -1
  133. package/dist/radio-group.js +2 -2
  134. package/dist/rail-nav.d.ts +149 -0
  135. package/dist/rail-nav.js +177 -0
  136. package/dist/rail-nav.js.map +1 -0
  137. package/dist/scroll-stage.js +1 -1
  138. package/dist/settings-layout.d.ts +75 -62
  139. package/dist/settings-layout.js +39 -6
  140. package/dist/settings-layout.js.map +1 -1
  141. package/dist/showcase.js +1 -1
  142. package/dist/site-footer.d.ts +48 -67
  143. package/dist/site-footer.js +36 -12
  144. package/dist/site-footer.js.map +1 -1
  145. package/dist/skip-link.js +1 -1
  146. package/dist/slider.js +2 -2
  147. package/dist/stage-banner.js +1 -1
  148. package/dist/step-showcase.d.ts +62 -0
  149. package/dist/step-showcase.js +227 -0
  150. package/dist/step-showcase.js.map +1 -0
  151. package/dist/tabs.js +1 -1
  152. package/dist/tabs.js.map +1 -1
  153. package/dist/terminal-replay.js +1 -1
  154. package/dist/theme.js +2 -1
  155. package/dist/theme.js.map +1 -1
  156. package/dist/toast.js +1 -1
  157. package/dist/toc.js +1 -1
  158. package/dist/tooltip.js +1 -1
  159. package/dist/update-prompt.js +2 -1
  160. package/dist/update-prompt.js.map +1 -1
  161. package/dist/vertical-video.js +2 -2
  162. package/dist/video-player.js +3 -3
  163. package/dist/waveform.d.ts +93 -0
  164. package/dist/waveform.js +95 -0
  165. package/dist/waveform.js.map +1 -0
  166. package/package.json +138 -10
  167. package/registry/achievement.json +1 -1
  168. package/registry/action-bar.json +1 -1
  169. package/registry/activity-feed.json +1 -1
  170. package/registry/alert.json +1 -1
  171. package/registry/app-header.json +202 -0
  172. package/registry/app-shell.json +33 -9
  173. package/registry/argument-card.json +37 -5
  174. package/registry/audio-player.json +5 -3
  175. package/registry/auth-layout.json +1 -1
  176. package/registry/avatar.json +1 -1
  177. package/registry/badge.json +1 -1
  178. package/registry/button.json +3 -2
  179. package/registry/captcha.json +300 -0
  180. package/registry/card-grid.json +27 -3
  181. package/registry/card.json +1 -1
  182. package/registry/catalogue-page.json +1 -1
  183. package/registry/changelog-page.json +11 -7
  184. package/registry/chat.json +1 -1
  185. package/registry/checkbox.json +1 -1
  186. package/registry/chip-link.json +1 -1
  187. package/registry/chip.json +1 -1
  188. package/registry/choice-grid.json +1 -1
  189. package/registry/cn.json +1 -1
  190. package/registry/code-block.json +1 -1
  191. package/registry/combobox.json +1 -1
  192. package/registry/command.json +1 -1
  193. package/registry/comparison-table.json +207 -0
  194. package/registry/component-page.json +1 -1
  195. package/registry/confirm-button.json +1 -1
  196. package/registry/contact-page.json +1 -1
  197. package/registry/continue-prompt.json +1 -1
  198. package/registry/countdown.json +1 -1
  199. package/registry/cta-panel.json +1 -1
  200. package/registry/dashboard-layout.json +1 -1
  201. package/registry/data-table.json +1 -1
  202. package/registry/date-picker.json +1 -1
  203. package/registry/decision-list.json +1 -1
  204. package/registry/description-list.json +1 -1
  205. package/registry/detail-layout.json +1 -1
  206. package/registry/dialog.json +1 -1
  207. package/registry/docs-article-page.json +1 -1
  208. package/registry/docs-hub-page.json +1 -1
  209. package/registry/docs-layout.json +1 -1
  210. package/registry/docs-nav.json +177 -0
  211. package/registry/document-viewer.json +1 -1
  212. package/registry/dropdown-menu.json +1 -1
  213. package/registry/empty-state.json +1 -1
  214. package/registry/error-page.json +1 -1
  215. package/registry/examples/activity-feed/native/notifications.light.png +0 -0
  216. package/registry/examples/app-header/basic.d.ts +4 -0
  217. package/registry/examples/app-header/basic.js +23 -0
  218. package/registry/examples/app-header/basic.tsx +17 -0
  219. package/registry/examples/app-shell/desktop.d.ts +4 -0
  220. package/registry/examples/app-shell/desktop.js +41 -0
  221. package/registry/examples/app-shell/desktop.tsx +37 -0
  222. package/registry/examples/argument-card/hover-light.d.ts +4 -0
  223. package/registry/examples/argument-card/hover-light.js +17 -0
  224. package/registry/examples/argument-card/hover-light.tsx +19 -0
  225. package/registry/examples/argument-card/hover-quiet.d.ts +4 -0
  226. package/registry/examples/argument-card/hover-quiet.js +17 -0
  227. package/registry/examples/argument-card/hover-quiet.tsx +19 -0
  228. package/registry/examples/avatar/native/group.light.png +0 -0
  229. package/registry/examples/avatar/native/presence.light.png +0 -0
  230. package/registry/examples/avatar/native/sizes.light.png +0 -0
  231. package/registry/examples/badge/native/tones.light.png +0 -0
  232. package/registry/examples/button/native/ghost.light.png +0 -0
  233. package/registry/examples/captcha/disclosure.d.ts +4 -0
  234. package/registry/examples/captcha/disclosure.js +14 -0
  235. package/registry/examples/captcha/disclosure.tsx +11 -0
  236. package/registry/examples/captcha/form.d.ts +4 -0
  237. package/registry/examples/captcha/form.js +18 -0
  238. package/registry/examples/captcha/form.tsx +17 -0
  239. package/registry/examples/card/native/body.light.png +0 -0
  240. package/registry/examples/card/native/default.light.png +0 -0
  241. package/registry/examples/card/native/elevated.light.png +0 -0
  242. package/registry/examples/card/native/pressable.light.png +0 -0
  243. package/registry/examples/card-grid/hover-quiet.d.ts +4 -0
  244. package/registry/examples/card-grid/hover-quiet.js +18 -0
  245. package/registry/examples/card-grid/hover-quiet.tsx +20 -0
  246. package/registry/examples/changelog-page/releases.js +1 -1
  247. package/registry/examples/changelog-page/releases.tsx +1 -1
  248. package/registry/examples/chat/native/conversation.light.png +0 -0
  249. package/registry/examples/chat/native/inbox.light.png +0 -0
  250. package/registry/examples/chip/native/multiple.light.png +0 -0
  251. package/registry/examples/chip/native/removable.light.png +0 -0
  252. package/registry/examples/chip/native/single.light.png +0 -0
  253. package/registry/examples/chip/native/toggle.light.png +0 -0
  254. package/registry/examples/combobox/native/multiple.light.png +0 -0
  255. package/registry/examples/combobox/native/search.light.png +0 -0
  256. package/registry/examples/comparison-table/versus.d.ts +4 -0
  257. package/registry/examples/comparison-table/versus.js +28 -0
  258. package/registry/examples/comparison-table/versus.tsx +20 -0
  259. package/registry/examples/countdown/native/days.light.png +0 -0
  260. package/registry/examples/countdown/native/hours.light.png +0 -0
  261. package/registry/examples/countdown/native/sizes.light.png +0 -0
  262. package/registry/examples/countdown/native/urgent.light.png +0 -0
  263. package/registry/examples/countdown/native/with-label.light.png +0 -0
  264. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  265. package/registry/examples/date-picker/native/birth-date.light.png +0 -0
  266. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  267. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  268. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  269. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  270. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  271. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  272. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  273. package/registry/examples/description-list/native/job-details.light.png +0 -0
  274. package/registry/examples/dialog/native/sheet.dark.png +0 -0
  275. package/registry/examples/dialog/native/sheet.light.png +0 -0
  276. package/registry/examples/docs-nav/groups.d.ts +4 -0
  277. package/registry/examples/docs-nav/groups.js +21 -0
  278. package/registry/examples/docs-nav/groups.tsx +15 -0
  279. package/registry/examples/empty-state/native/default.light.png +0 -0
  280. package/registry/examples/field/native/default.light.png +0 -0
  281. package/registry/examples/field/native/select.light.png +0 -0
  282. package/registry/examples/force-update-screen/native/default.light.png +0 -0
  283. package/registry/examples/form/native/amount.light.png +0 -0
  284. package/registry/examples/form/native/audience.light.png +0 -0
  285. package/registry/examples/form/native/profile.light.png +0 -0
  286. package/registry/examples/form/native/settings.light.png +0 -0
  287. package/registry/examples/form/native/sign-up.light.png +0 -0
  288. package/registry/examples/form/native/upload.dark.png +0 -0
  289. package/registry/examples/form/native/upload.light.png +0 -0
  290. package/registry/examples/genui/streaming.d.ts +4 -0
  291. package/registry/examples/genui/streaming.js +18 -0
  292. package/registry/examples/genui/streaming.tsx +14 -0
  293. package/registry/examples/genui/table.d.ts +4 -0
  294. package/registry/examples/genui/table.js +19 -0
  295. package/registry/examples/genui/table.tsx +14 -0
  296. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  297. package/registry/examples/header/native/large-title.light.png +0 -0
  298. package/registry/examples/link-card/hover-light.d.ts +4 -0
  299. package/registry/examples/link-card/hover-light.js +18 -0
  300. package/registry/examples/link-card/hover-light.tsx +20 -0
  301. package/registry/examples/link-card/hover-quiet.d.ts +4 -0
  302. package/registry/examples/link-card/hover-quiet.js +18 -0
  303. package/registry/examples/link-card/hover-quiet.tsx +20 -0
  304. package/registry/examples/loader/native/job-wait.light.png +0 -0
  305. package/registry/examples/maintenance-screen/native/default.light.png +0 -0
  306. package/registry/examples/map/native/places.light.png +0 -0
  307. package/registry/examples/markdown/native/basic.light.png +0 -0
  308. package/registry/examples/mascot-state/native/default.light.png +0 -0
  309. package/registry/examples/media-picker/native/story.light.png +0 -0
  310. package/registry/examples/meta-row/native/video.d.ts +4 -0
  311. package/registry/examples/meta-row/native/video.dark.png +0 -0
  312. package/registry/examples/meta-row/native/video.js +11 -0
  313. package/registry/examples/meta-row/native/video.light.png +0 -0
  314. package/registry/examples/meta-row/native/video.tsx +5 -0
  315. package/registry/examples/meta-row/status.d.ts +4 -0
  316. package/registry/examples/meta-row/status.js +12 -0
  317. package/registry/examples/meta-row/status.tsx +7 -0
  318. package/registry/examples/meta-row/video.d.ts +4 -0
  319. package/registry/examples/meta-row/video.js +12 -0
  320. package/registry/examples/meta-row/video.tsx +7 -0
  321. package/registry/examples/meter/native/credits.light.png +0 -0
  322. package/registry/examples/meter/native/split-ring.light.png +0 -0
  323. package/registry/examples/number-ticker/native/balance.light.png +0 -0
  324. package/registry/examples/onboarding/native/first-launch.light.png +0 -0
  325. package/registry/examples/otp-input/native/verify.light.png +0 -0
  326. package/registry/examples/pagination/native/cursor.light.png +0 -0
  327. package/registry/examples/pagination/native/pages.light.png +0 -0
  328. package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
  329. package/registry/examples/permission-prompt/native/camera.light.png +0 -0
  330. package/registry/examples/profile-card/native/default.light.png +0 -0
  331. package/registry/examples/radio-group/native/buttons.light.png +0 -0
  332. package/registry/examples/radio-group/native/cards.light.png +0 -0
  333. package/registry/examples/radio-group/native/list.light.png +0 -0
  334. package/registry/examples/radio-group/native/segmented.light.png +0 -0
  335. package/registry/examples/rail-nav/expandable.d.ts +4 -0
  336. package/registry/examples/rail-nav/expandable.js +34 -0
  337. package/registry/examples/rail-nav/expandable.tsx +28 -0
  338. package/registry/examples/rail-nav/studio.d.ts +4 -0
  339. package/registry/examples/rail-nav/studio.js +43 -0
  340. package/registry/examples/rail-nav/studio.tsx +38 -0
  341. package/registry/examples/screen/native/app-shell.light.png +0 -0
  342. package/registry/examples/screen/native/auth.light.png +0 -0
  343. package/registry/examples/screen/native/map.light.png +0 -0
  344. package/registry/examples/screen/native/notifications.light.png +0 -0
  345. package/registry/examples/screen/native/profile.light.png +0 -0
  346. package/registry/examples/segmented/native/default.light.png +0 -0
  347. package/registry/examples/segmented/native/small.light.png +0 -0
  348. package/registry/examples/settings-layout/flat.d.ts +4 -0
  349. package/registry/examples/settings-layout/flat.js +26 -0
  350. package/registry/examples/settings-layout/flat.tsx +30 -0
  351. package/registry/examples/showcase/native/slides.light.png +0 -0
  352. package/registry/examples/site-footer/app.d.ts +4 -0
  353. package/registry/examples/site-footer/app.js +25 -0
  354. package/registry/examples/site-footer/app.tsx +22 -0
  355. package/registry/examples/site-footer/docs.d.ts +4 -0
  356. package/registry/examples/site-footer/docs.js +31 -0
  357. package/registry/examples/site-footer/docs.tsx +24 -0
  358. package/registry/examples/slider/native/default.light.png +0 -0
  359. package/registry/examples/slider/native/stepped.light.png +0 -0
  360. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  361. package/registry/examples/step-showcase/desktop.d.ts +4 -0
  362. package/registry/examples/step-showcase/desktop.js +24 -0
  363. package/registry/examples/step-showcase/desktop.tsx +19 -0
  364. package/registry/examples/step-showcase/phone.d.ts +4 -0
  365. package/registry/examples/step-showcase/phone.js +24 -0
  366. package/registry/examples/step-showcase/phone.tsx +19 -0
  367. package/registry/examples/stepper/native/run.light.png +0 -0
  368. package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
  369. package/registry/examples/switch/native/settings.light.png +0 -0
  370. package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
  371. package/registry/examples/tabs/native/sections.light.png +0 -0
  372. package/registry/examples/tabs/native/segmented.light.png +0 -0
  373. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  374. package/registry/examples/toast/native/tones.light.png +0 -0
  375. package/registry/examples/txt/native/tones.dark.png +0 -0
  376. package/registry/examples/txt/native/tones.light.png +0 -0
  377. package/registry/examples/update-prompt/native/default.light.png +0 -0
  378. package/registry/examples/waveform/card.d.ts +4 -0
  379. package/registry/examples/waveform/card.js +18 -0
  380. package/registry/examples/waveform/card.tsx +16 -0
  381. package/registry/examples/waveform/native/card.d.ts +4 -0
  382. package/registry/examples/waveform/native/card.dark.png +0 -0
  383. package/registry/examples/waveform/native/card.js +19 -0
  384. package/registry/examples/waveform/native/card.light.png +0 -0
  385. package/registry/examples/waveform/native/card.tsx +19 -0
  386. package/registry/examples/waveform/sizes.d.ts +4 -0
  387. package/registry/examples/waveform/sizes.js +16 -0
  388. package/registry/examples/waveform/sizes.tsx +14 -0
  389. package/registry/field.json +1 -1
  390. package/registry/file-upload.json +1 -1
  391. package/registry/filter-bar.json +1 -1
  392. package/registry/force-update-screen.json +1 -1
  393. package/registry/form.json +1 -1
  394. package/registry/gallery-page.json +1 -1
  395. package/registry/genui.json +409 -0
  396. package/registry/glow-card.json +1 -1
  397. package/registry/goal-gauge.json +1 -1
  398. package/registry/how-it-works-page.json +1 -1
  399. package/registry/image-cropper.json +1 -1
  400. package/registry/index.json +323 -14
  401. package/registry/iso.json +1 -1
  402. package/registry/kanban.json +1 -1
  403. package/registry/kbd.json +1 -1
  404. package/registry/landing-page.json +1 -1
  405. package/registry/landscape.json +1 -1
  406. package/registry/legal-page.json +1 -1
  407. package/registry/link-card.json +38 -6
  408. package/registry/list.json +1 -1
  409. package/registry/loader.json +1 -1
  410. package/registry/longform-page.json +1 -1
  411. package/registry/maintenance-screen.json +1 -1
  412. package/registry/map.json +2 -2
  413. package/registry/markdown.json +1 -1
  414. package/registry/marketing-layout.json +1 -1
  415. package/registry/marquee.json +1 -1
  416. package/registry/mascot-quote.json +1 -1
  417. package/registry/mascot-state.json +1 -1
  418. package/registry/mascots.json +1 -1
  419. package/registry/match-dialog.json +1 -1
  420. package/registry/media-capture.json +1 -1
  421. package/registry/media-grid.json +92 -6
  422. package/registry/meta-row.json +215 -0
  423. package/registry/meter.json +1 -1
  424. package/registry/nav-bar.json +13 -13
  425. package/registry/number-ticker.json +1 -1
  426. package/registry/page-header.json +1 -1
  427. package/registry/page-hero.json +1 -1
  428. package/registry/page.json +1 -1
  429. package/registry/pagination.json +1 -1
  430. package/registry/photo-grid.json +1 -1
  431. package/registry/pointer-light.json +1 -1
  432. package/registry/popover.json +1 -1
  433. package/registry/pricing-page.json +1 -1
  434. package/registry/product-page.json +1 -1
  435. package/registry/profile-card.json +1 -1
  436. package/registry/progress.json +1 -1
  437. package/registry/promise-card.json +1 -1
  438. package/registry/radio-group.json +1 -1
  439. package/registry/rail-nav.json +493 -0
  440. package/registry/recipes.json +1 -1
  441. package/registry/scroll-stage.json +1 -1
  442. package/registry/search-field.json +1 -1
  443. package/registry/section-backdrop.json +1 -1
  444. package/registry/separator.json +1 -1
  445. package/registry/settings-layout.json +104 -9
  446. package/registry/showcase.json +1 -1
  447. package/registry/site-footer.json +49 -17
  448. package/registry/sites.json +1 -1
  449. package/registry/skeleton.json +1 -1
  450. package/registry/skip-link.json +2 -2
  451. package/registry/slider.json +1 -1
  452. package/registry/slot.json +1 -1
  453. package/registry/spinner.json +1 -1
  454. package/registry/split-view.json +1 -1
  455. package/registry/stage-banner.json +1 -1
  456. package/registry/stat.json +1 -1
  457. package/registry/status-page.json +1 -1
  458. package/registry/step-progress.json +1 -1
  459. package/registry/step-showcase.json +296 -0
  460. package/registry/stepper.json +1 -1
  461. package/registry/swipe-deck.json +1 -1
  462. package/registry/switch.json +1 -1
  463. package/registry/tabs.json +2 -2
  464. package/registry/tag-input.json +1 -1
  465. package/registry/tag-selector.json +1 -1
  466. package/registry/terminal-replay.json +1 -1
  467. package/registry/theme.json +1 -1
  468. package/registry/toast.json +1 -1
  469. package/registry/toc.json +1 -1
  470. package/registry/tooltip.json +1 -1
  471. package/registry/tree-view.json +1 -1
  472. package/registry/update-prompt.json +1 -1
  473. package/registry/verified-badge.json +1 -1
  474. package/registry/vertical-video.json +1 -1
  475. package/registry/video-player.json +1 -1
  476. package/registry/video-trimmer.json +1 -1
  477. package/registry/virtual.json +1 -1
  478. package/registry/waveform.json +296 -0
  479. package/dist/chunk-2FRWNSRO.js.map +0 -1
  480. package/dist/chunk-3BC4XQ6C.js.map +0 -1
  481. package/dist/chunk-3GODX3D6.js.map +0 -1
  482. package/dist/chunk-3IN6TOPM.js.map +0 -1
  483. package/dist/chunk-4LOMIQVX.js.map +0 -1
  484. package/dist/chunk-G3ETON2A.js.map +0 -1
  485. package/dist/chunk-IZ7MV6HM.js.map +0 -1
  486. package/dist/chunk-LIPK4UCS.js.map +0 -1
  487. package/dist/chunk-OWC2LZD2.js.map +0 -1
  488. package/dist/chunk-ZNMFG62E.js.map +0 -1
  489. /package/dist/{chunk-5MH64NIL.js.map → chunk-2L67YTNV.js.map} +0 -0
  490. /package/dist/{chunk-FKBHWS4N.js.map → chunk-CEJDH6SA.js.map} +0 -0
  491. /package/dist/{chunk-5Z7FWCV2.js.map → chunk-HBZPJ3EP.js.map} +0 -0
  492. /package/dist/{chunk-C2BRIFJG.js.map → chunk-HJFRHYCI.js.map} +0 -0
  493. /package/dist/{chunk-BTMFZ66D.js.map → chunk-KM6VAKIE.js.map} +0 -0
  494. /package/dist/{chunk-DGQMDJXK.js.map → chunk-LZNZLCOE.js.map} +0 -0
@@ -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 \"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 \"yomizaka\": {\n \"dark\": {\n \"accent\": \"#8888f2\",\n \"accentHover\": \"#a2a2f6\",\n \"accentSoft\": \"rgba(136,136,242,0.12)\",\n \"accentText\": \"#9797f7\",\n \"accent2\": \"#8d9aec\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#8888f2\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#121321\",\n \"brandGradientVia\": \"#111019\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#3c38b2\",\n \"accentHover\": \"#322e9e\",\n \"accentSoft\": \"rgba(60,56,178,0.08)\",\n \"accentText\": \"#3a36ab\",\n \"accent2\": \"#2d3c9f\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#3c38b2\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#ebecfa\",\n \"brandGradientVia\": \"#f0f0fa\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"kachizaka\": {\n \"dark\": {\n \"accent\": \"#fbcf23\",\n \"accentHover\": \"#fddb53\",\n \"accentSoft\": \"rgba(251,207,35,0.12)\",\n \"accentText\": \"#fbd84b\",\n \"accent2\": \"#7695f9\",\n \"onAccent\": \"#0c0e17\",\n \"ring\": \"#fbcf23\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#101628\",\n \"brandGradientVia\": \"#0f111a\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#fac905\",\n \"accentHover\": \"#dcb104\",\n \"accentSoft\": \"rgba(250,193,5,0.14)\",\n \"accentText\": \"#1d3faf\",\n \"accent2\": \"#6285f8\",\n \"onAccent\": \"#0c0e17\",\n \"ring\": \"#1743d3\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e8edfc\",\n \"brandGradientVia\": \"#fcf8e8\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"akinaza\": {\n \"dark\": {\n \"accent\": \"#65c374\",\n \"accentHover\": \"#7fd28d\",\n \"accentSoft\": \"rgba(101,195,116,0.12)\",\n \"accentText\": \"#7dd48b\",\n \"accent2\": \"#dc946a\",\n \"onAccent\": \"#0a0f0c\",\n \"ring\": \"#65c374\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#111d15\",\n \"brandGradientVia\": \"#181410\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#21692f\",\n \"accentHover\": \"#195726\",\n \"accentSoft\": \"rgba(33,105,47,0.08)\",\n \"accentText\": \"#20652e\",\n \"accent2\": \"#954923\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#21692f\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e9f7eb\",\n \"brandGradientVia\": \"#faf1eb\",\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 \"yomizaka\": [\n [\n \"0%\",\n \"#5362c6\"\n ],\n [\n \"100%\",\n \"#6d5ec9\"\n ]\n ],\n \"kachizaka\": [\n [\n \"0%\",\n \"#355fe9\"\n ],\n [\n \"100%\",\n \"#a27807\"\n ]\n ],\n \"akinaza\": [\n [\n \"0%\",\n \"#2d8049\"\n ],\n [\n \"100%\",\n \"#bc632f\"\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\": \"#92929b\",\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\": \"#56565d\",\n \"textMuted\": \"#64646d\",\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 \"yomizaka\": {\n \"dark\": {\n \"accent\": \"#8888f2\",\n \"accentHover\": \"#a2a2f6\",\n \"accentSoft\": \"rgba(136,136,242,0.12)\",\n \"accentText\": \"#9797f7\",\n \"accent2\": \"#8d9aec\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#8888f2\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#121321\",\n \"brandGradientVia\": \"#111019\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#3c38b2\",\n \"accentHover\": \"#322e9e\",\n \"accentSoft\": \"rgba(60,56,178,0.08)\",\n \"accentText\": \"#3a36ab\",\n \"accent2\": \"#2d3c9f\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#3c38b2\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#ebecfa\",\n \"brandGradientVia\": \"#f0f0fa\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"kachizaka\": {\n \"dark\": {\n \"accent\": \"#fbcf23\",\n \"accentHover\": \"#fddb53\",\n \"accentSoft\": \"rgba(251,207,35,0.12)\",\n \"accentText\": \"#fbd84b\",\n \"accent2\": \"#7695f9\",\n \"onAccent\": \"#0c0e17\",\n \"ring\": \"#fbcf23\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#101628\",\n \"brandGradientVia\": \"#0f111a\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#fac905\",\n \"accentHover\": \"#dcb104\",\n \"accentSoft\": \"rgba(250,193,5,0.14)\",\n \"accentText\": \"#1d3faf\",\n \"accent2\": \"#6285f8\",\n \"onAccent\": \"#0c0e17\",\n \"ring\": \"#1743d3\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e8edfc\",\n \"brandGradientVia\": \"#fcf8e8\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"akinaza\": {\n \"dark\": {\n \"accent\": \"#65c374\",\n \"accentHover\": \"#7fd28d\",\n \"accentSoft\": \"rgba(101,195,116,0.12)\",\n \"accentText\": \"#7dd48b\",\n \"accent2\": \"#dc946a\",\n \"onAccent\": \"#0a0f0c\",\n \"ring\": \"#65c374\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#111d15\",\n \"brandGradientVia\": \"#181410\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#21692f\",\n \"accentHover\": \"#195726\",\n \"accentSoft\": \"rgba(33,105,47,0.08)\",\n \"accentText\": \"#20652e\",\n \"accent2\": \"#954923\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#21692f\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e9f7eb\",\n \"brandGradientVia\": \"#faf1eb\",\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 \"yomizaka\": [\n [\n \"0%\",\n \"#5362c6\"\n ],\n [\n \"100%\",\n \"#6d5ec9\"\n ]\n ],\n \"kachizaka\": [\n [\n \"0%\",\n \"#355fe9\"\n ],\n [\n \"100%\",\n \"#a27807\"\n ]\n ],\n \"akinaza\": [\n [\n \"0%\",\n \"#2d8049\"\n ],\n [\n \"100%\",\n \"#bc632f\"\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"]}
package/dist/native.d.ts CHANGED
@@ -180,9 +180,9 @@ interface NativeMarkProps {
180
180
  }
181
181
 
182
182
  /**
183
- * The Akinaza mark for React Native — the geometry of the web mark (marks/akinaza-geometry.ts), "the open shop": the
184
- * awning cut at its corner, its stripes, the shop front, two windows and the open door, a warm light. The orbit and its
185
- * one node, a coin, turn; the door's light breathes; still when the system reduces motion.
183
+ * The Akinaza mark for React Native — the geometry of the web mark (marks/akinaza-geometry.ts), "the cut log": a log
184
+ * end-on, its rings in light, cut at 45° with a copper face, a copper heart. The orbit and the coin turn, the heart
185
+ * breathes; still when the system reduces motion.
186
186
  */
187
187
  declare function AkinazaMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
188
188
 
@@ -1060,9 +1060,9 @@ declare function ImageViewer({ images, index, onIndexChange, closeLabel, positio
1060
1060
  declare function prefetchNeighbours(images: readonly ViewerImage[], index: number | null): void;
1061
1061
 
1062
1062
  /**
1063
- * The Kachizaka mark for React Native — the geometry of the web mark (marks/kachizaka-geometry.ts), "the sealed cup":
1064
- * a trophy cut at its rim, two handles, a stem and a base, the seal (a star in light) on the bowl. The orbit and its
1065
- * one node, the ball, turn; the seal breathes; still when the system reduces motion.
1063
+ * The Kachizaka mark for React Native — the geometry of the web mark (marks/kachizaka-geometry.ts), "the podium": three
1064
+ * steps, the winner in gold, the others in cobalt, under a gold diamond. The orbit and the ball turn, the diamond
1065
+ * breathes; still when the system reduces motion.
1066
1066
  */
1067
1067
  declare function KachizakaMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
1068
1068
 
@@ -1251,6 +1251,17 @@ type MatchDialogProps = {
1251
1251
  */
1252
1252
  declare function MatchDialog({ open, onOpenChange, title, description, people, primaryLabel, onPrimary, secondaryLabel }: MatchDialogProps): React$1.JSX.Element;
1253
1253
 
1254
+ type MetaRowProps = ViewProps & {
1255
+ /** The facts, in reading order, already translated. Empty ones (`null`, `false`, "") are skipped. */
1256
+ items: ReadonlyArray<React$1.ReactNode>;
1257
+ /** Status chips after the facts (a `Badge`): not dot-separated. */
1258
+ chips?: ReadonlyArray<React$1.ReactNode>;
1259
+ /** The accessible name of the row, when its subject is not obvious. */
1260
+ label?: string;
1261
+ };
1262
+ /** The web `MetaRow`: one quiet line of dot-separated facts, with optional status chips at its end. */
1263
+ declare function MetaRow({ items, chips, label, style, ...props }: MetaRowProps): React$1.JSX.Element;
1264
+
1254
1265
  type MeterPart = {
1255
1266
  /** Its name (“To the creator”) — passed translated. */
1256
1267
  label: string;
@@ -2400,6 +2411,23 @@ type VerifiedBadgeProps = {
2400
2411
  /** A seal that says the person or the account was verified (a selfie check, an ID) — the accent, named in words. */
2401
2412
  declare function VerifiedBadge({ label, showLabel, size, on }: VerifiedBadgeProps): React$1.JSX.Element;
2402
2413
 
2414
+ type WaveformProps = Omit<ViewProps, "children"> & {
2415
+ /** The peaks, between 0 and 1, as many as you like (resampled to `bars`). Without them: a flat line. */
2416
+ peaks?: readonly number[];
2417
+ /** How many bars. Default 32. */
2418
+ bars?: number;
2419
+ /** sm (24) · md (40, default) · lg (64): the height of the drawing, in points. */
2420
+ size?: "sm" | "md" | "lg";
2421
+ /** accent (default, the brand's colour) · neutral (a quiet line beside text). */
2422
+ tone?: "accent" | "neutral";
2423
+ /** Moves gently while `true` (a sound playing); still otherwise. */
2424
+ playing?: boolean;
2425
+ /** When given, it is an image named by this; otherwise decorative and hidden from the screen reader. */
2426
+ label?: string;
2427
+ };
2428
+ /** A decorative waveform: the bars of a sound, breathing gently while it plays, still otherwise. */
2429
+ declare function Waveform({ peaks, bars, size, tone, playing, label, style, ...props }: WaveformProps): React$1.JSX.Element;
2430
+
2403
2431
  /** A value of a wheel: what is stored, and its words (passed translated or formatted for the locale). */
2404
2432
  type WheelOption = {
2405
2433
  value: string;
@@ -2449,8 +2477,8 @@ type WheelProps = {
2449
2477
  declare function Wheel({ label, options, value: valueProp, defaultValue, onValueChange, disabled, style }: WheelProps): React$1.JSX.Element;
2450
2478
 
2451
2479
  /**
2452
- * The Yasakia mark for React Native — the geometry of the web mark (marks/yasakia-geometry.ts): two voices, two
2453
- * speech bubbles that overlap; the orbit and the pair turn slowly around them, the lens where they overlap breathes;
2480
+ * The Yasakia mark for React Native — the geometry of the web mark (marks/yasakia-geometry.ts), "one conversation":
2481
+ * one speech bubble with a tail on each side and the spark inside. The orbit and its node turn, the spark breathes;
2454
2482
  * still when the system reduces motion.
2455
2483
  */
2456
2484
  declare function YasakiaMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
@@ -2458,18 +2486,16 @@ declare function YasakiaMark({ size, animated, title, neutral }: NativeMarkProps
2458
2486
  declare const YazakiaMark: typeof YasakiaMark;
2459
2487
 
2460
2488
  /**
2461
- * The Yomizaka mark for React Native — the geometry of the web mark (marks/yomizaka-geometry.ts), "the reading": a page
2462
- * cut at its corner, three lines of text, and a lens resting on it. The orbit and its one node, a page, turn; the lens
2463
- * breathes; still when the system reduces motion. (The web's scanning line stays on the web: a third loop on the native
2464
- * driver for a 3-pixel line is not worth its cost.)
2489
+ * The Yomizaka mark for React Native — the geometry of the web mark (marks/yomizaka-geometry.ts), "the watch": the owl's
2490
+ * two lenses under one calm brow. The orbit and its node turn, the pupils breathe; still when the system reduces motion.
2465
2491
  */
2466
2492
  declare function YomizakaMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
2467
2493
 
2468
2494
  /**
2469
- * The Yororis mark for React Native — the geometry of the web mark (marks/yororis-geometry.ts), "the hold": two filled
2470
- * leaves cupping a warm core. The orbit and its one node, the moment, turn slowly; the core breathes; still when the
2471
- * system reduces motion.
2495
+ * The Yororis mark for React Native — the geometry of the web mark (marks/yororis-geometry.ts), "held": two sage arcs,
2496
+ * open hands, cup a warm sand core. The orbit and the moment turn, the core breathes; still when the system reduces
2497
+ * motion.
2472
2498
  */
2473
2499
  declare function YororisMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
2474
2500
 
2475
- export { ActionSheet, type ActionSheetAction, type ActionSheetProps, type ActivityEvent, ActivityFeed, type ActivityFeedLabels, type ActivityFeedProps, type ActivityTone, AkinazaMark, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, AvatarRoot, type AvatarSize, Badge, type BadgeProps, type BadgeTone, type BrandId, BrandedRefresh, type BrandedRefreshProps, type BrandedRefreshScrollProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarLabels, type CalendarProps, Card, CardBody, type CardBodyProps, CardDescription, CardFooter, CardImage, type CardImageProps, CardMedia, type CardMediaProps, CardOverlay, type CardOverlayProps, CardRoot, type CardRootProps, CardTitle, Checkbox, type CheckboxProps, Chip, type ChipGroupProps, type ChipProps, type ChipSize, Combobox, type ComboboxLabels, type ComboboxProps, ConversationItem, type ConversationItemProps, Countdown, type CountdownProps, type CountdownUnits, DateField, type DateFieldLabels, type DateFieldProps, type DatePart, DateWheel, type DateWheelProps, DayStrip, type DayStripProps, type DefaultAvatar, type DefaultAvatarBrand, type DescriptionItem, DescriptionList, type DescriptionListProps, EmptyState, type EmptyStateProps, ErrorState, Fab, type FabProps, ForceUpdateScreen, type ForceUpdateScreenProps, GoalGauge, type GoalGaugeProps, type GridPhoto, type HapticKind, Header, type HeaderProps, IconButton, type IconButtonProps, ImageViewer, type ImageViewerProps, type Insets, KachizakaMark, KrizakaMark, Loader, LoaderGlyph, type LoaderGlyphProps, type LoaderProps, LoadingState, MaintenanceScreen, type MaintenanceScreenProps, Mascot, type MascotProps, MascotState, type MascotStateProps, MatchDialog, type MatchDialogProps, MessageBubble, type MessageBubbleLabels, type MessageBubbleProps, MessageComposer, type MessageComposerProps, type MessageStatus, Meter, type MeterPart, type MeterProps, type Mode, MonthPicker, type MonthPickerProps, type Motion, type NativeMarkProps, NumberTicker, type NumberTickerProps, Onboarding, type OnboardingProps, type OnboardingSlide, OrazakaMark, OrochiaMark, OtpInput, type OtpInputProps, Pagination, type PaginationLabels, type PaginationProps, PermissionPrompt, type PermissionPromptProps, type PermissionStatus, PersonCard, type PersonCardProps, Phoenix, type PhoenixProps, PhotoGrid, type PhotoGridLabels, type PhotoGridProps, ProductMark, ProfileCard, type ProfileCardProps, type ProfileStat, Progress, type ProgressProps, PullToRefresh, type PullToRefreshProps, RadioGroup, type RadioGroupProps, type RadioOption, type Radius, Screen, type ScreenProps, SearchField, type SearchFieldProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sheet, type SheetProps, Showcase, type ShowcaseLabels, type ShowcaseProps, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderValue, Spinner, type SpinnerProps, SplashHandoff, type SplashHandoffProps, type Step, StepProgress, type StepProgressProps, type StepStatus, Stepper, type StepperProps, SuccessState, type SwipeAction, SwipeDeck, type SwipeDeckLabels, type SwipeDeckProps, type SwipeDirection, SwipeableRow, type SwipeableRowProps, Switch, type SwitchProps, TabBar, type TabBarItem, type TabBarProps, type TabItem, Tabs, type TabsProps, type TagOption, TagSelector, type TagSelectorProps, TextField, type TextFieldProps, type Theme, type ThemeContextValue, type ThemeFonts, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, TimePicker, type TimePickerLabels, type TimePickerProps, type TimeValue, type ToastItem, type ToastOptions, type ToastTone, Toaster, type ToasterProps, Txt, type TxtProps, type TxtTone, type TxtVariant, TypingIndicator, type TypingIndicatorProps, UpdatePrompt, type UpdatePromptProps, VerifiedBadge, type VerifiedBadgeProps, type ViewerImage, WelcomeState, Wheel, WheelDivider, type WheelOption, WheelPicker, type WheelPickerProps, type WheelProps, YasakiaMark, YazakiaMark, YomizakaMark, YororisMark, addDays, addMonths, ageOn, alpha, calendarLabels, comboboxLabels, composeDate, dateFieldLabels, datePartsOrder, daysInMonth, defaultAvatarUrl, formatTime, isRealDate, latestBirthDate, monthNames, prefetchNeighbours, showcaseLabels, splitDuration, textStyles, timeSlots, timeToMinutes, toast, todayIso, useCollapsingHeader, useCountdown, useDelayedWait, useReducedMotion, useTheme, uses12Hours };
2501
+ export { ActionSheet, type ActionSheetAction, type ActionSheetProps, type ActivityEvent, ActivityFeed, type ActivityFeedLabels, type ActivityFeedProps, type ActivityTone, AkinazaMark, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, AvatarRoot, type AvatarSize, Badge, type BadgeProps, type BadgeTone, type BrandId, BrandedRefresh, type BrandedRefreshProps, type BrandedRefreshScrollProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarLabels, type CalendarProps, Card, CardBody, type CardBodyProps, CardDescription, CardFooter, CardImage, type CardImageProps, CardMedia, type CardMediaProps, CardOverlay, type CardOverlayProps, CardRoot, type CardRootProps, CardTitle, Checkbox, type CheckboxProps, Chip, type ChipGroupProps, type ChipProps, type ChipSize, Combobox, type ComboboxLabels, type ComboboxProps, ConversationItem, type ConversationItemProps, Countdown, type CountdownProps, type CountdownUnits, DateField, type DateFieldLabels, type DateFieldProps, type DatePart, DateWheel, type DateWheelProps, DayStrip, type DayStripProps, type DefaultAvatar, type DefaultAvatarBrand, type DescriptionItem, DescriptionList, type DescriptionListProps, EmptyState, type EmptyStateProps, ErrorState, Fab, type FabProps, ForceUpdateScreen, type ForceUpdateScreenProps, GoalGauge, type GoalGaugeProps, type GridPhoto, type HapticKind, Header, type HeaderProps, IconButton, type IconButtonProps, ImageViewer, type ImageViewerProps, type Insets, KachizakaMark, KrizakaMark, Loader, LoaderGlyph, type LoaderGlyphProps, type LoaderProps, LoadingState, MaintenanceScreen, type MaintenanceScreenProps, Mascot, type MascotProps, MascotState, type MascotStateProps, MatchDialog, type MatchDialogProps, MessageBubble, type MessageBubbleLabels, type MessageBubbleProps, MessageComposer, type MessageComposerProps, type MessageStatus, MetaRow, type MetaRowProps, Meter, type MeterPart, type MeterProps, type Mode, MonthPicker, type MonthPickerProps, type Motion, type NativeMarkProps, NumberTicker, type NumberTickerProps, Onboarding, type OnboardingProps, type OnboardingSlide, OrazakaMark, OrochiaMark, OtpInput, type OtpInputProps, Pagination, type PaginationLabels, type PaginationProps, PermissionPrompt, type PermissionPromptProps, type PermissionStatus, PersonCard, type PersonCardProps, Phoenix, type PhoenixProps, PhotoGrid, type PhotoGridLabels, type PhotoGridProps, ProductMark, ProfileCard, type ProfileCardProps, type ProfileStat, Progress, type ProgressProps, PullToRefresh, type PullToRefreshProps, RadioGroup, type RadioGroupProps, type RadioOption, type Radius, Screen, type ScreenProps, SearchField, type SearchFieldProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sheet, type SheetProps, Showcase, type ShowcaseLabels, type ShowcaseProps, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderValue, Spinner, type SpinnerProps, SplashHandoff, type SplashHandoffProps, type Step, StepProgress, type StepProgressProps, type StepStatus, Stepper, type StepperProps, SuccessState, type SwipeAction, SwipeDeck, type SwipeDeckLabels, type SwipeDeckProps, type SwipeDirection, SwipeableRow, type SwipeableRowProps, Switch, type SwitchProps, TabBar, type TabBarItem, type TabBarProps, type TabItem, Tabs, type TabsProps, type TagOption, TagSelector, type TagSelectorProps, TextField, type TextFieldProps, type Theme, type ThemeContextValue, type ThemeFonts, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, TimePicker, type TimePickerLabels, type TimePickerProps, type TimeValue, type ToastItem, type ToastOptions, type ToastTone, Toaster, type ToasterProps, Txt, type TxtProps, type TxtTone, type TxtVariant, TypingIndicator, type TypingIndicatorProps, UpdatePrompt, type UpdatePromptProps, VerifiedBadge, type VerifiedBadgeProps, type ViewerImage, Waveform, type WaveformProps, WelcomeState, Wheel, WheelDivider, type WheelOption, WheelPicker, type WheelPickerProps, type WheelProps, YasakiaMark, YazakiaMark, YomizakaMark, YororisMark, addDays, addMonths, ageOn, alpha, calendarLabels, comboboxLabels, composeDate, dateFieldLabels, datePartsOrder, daysInMonth, defaultAvatarUrl, formatTime, isRealDate, latestBirthDate, monthNames, prefetchNeighbours, showcaseLabels, splitDuration, textStyles, timeSlots, timeToMinutes, toast, todayIso, useCollapsingHeader, useCountdown, useDelayedWait, useReducedMotion, useTheme, uses12Hours };