@krizaka/ui 3.35.0 → 3.37.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 (620) hide show
  1. package/dist/account-menu.js +1 -1
  2. package/dist/account-menu.js.map +1 -1
  3. package/dist/activity-feed.js +2 -2
  4. package/dist/activity-feed.js.map +1 -1
  5. package/dist/anatomy-plate.d.ts +26 -0
  6. package/dist/anatomy-plate.js +32 -0
  7. package/dist/anatomy-plate.js.map +1 -0
  8. package/dist/app-header.js +1 -1
  9. package/dist/app-header.js.map +1 -1
  10. package/dist/app-shell.js +6 -6
  11. package/dist/app-shell.js.map +1 -1
  12. package/dist/argument-card.js +1 -1
  13. package/dist/badge.d.ts +1 -1
  14. package/dist/badge.js +1 -1
  15. package/dist/badge.js.map +1 -1
  16. package/dist/bird-plate.d.ts +38 -0
  17. package/dist/bird-plate.js +39 -0
  18. package/dist/bird-plate.js.map +1 -0
  19. package/dist/blocks.css +243 -46
  20. package/dist/card.d.ts +6 -6
  21. package/dist/card.js +2 -2
  22. package/dist/card.js.map +1 -1
  23. package/dist/checkbox.js +1 -1
  24. package/dist/checkbox.js.map +1 -1
  25. package/dist/chip-row.js +1 -1
  26. package/dist/chip-row.js.map +1 -1
  27. package/dist/chip.js +1 -1
  28. package/dist/chip.js.map +1 -1
  29. package/dist/{chunk-QDXV544C.js → chunk-4QH6CP2Y.js} +2 -2
  30. package/dist/chunk-4QH6CP2Y.js.map +1 -0
  31. package/dist/{chunk-NJFCSVPT.js → chunk-6EAHUURY.js} +2 -2
  32. package/dist/chunk-6EAHUURY.js.map +1 -0
  33. package/dist/{chunk-REPTKUJ6.js → chunk-7NRSPHAF.js} +2 -2
  34. package/dist/chunk-7NRSPHAF.js.map +1 -0
  35. package/dist/{chunk-CKSHLSDH.js → chunk-AAP3U66V.js} +2 -2
  36. package/dist/{chunk-7UCPGXKN.js → chunk-C3NF7V5Y.js} +2 -2
  37. package/dist/{chunk-7UCPGXKN.js.map → chunk-C3NF7V5Y.js.map} +1 -1
  38. package/dist/chunk-JFJECOZ2.js +338 -0
  39. package/dist/chunk-JFJECOZ2.js.map +1 -0
  40. package/dist/{chunk-KIBICUZK.js → chunk-S5LP7KKW.js} +4 -4
  41. package/dist/{chunk-3S4GHSPZ.js → chunk-VPO27AFS.js} +5 -5
  42. package/dist/chunk-VPO27AFS.js.map +1 -0
  43. package/dist/{chunk-2PNLHZLT.js → chunk-WYQ277F2.js} +3 -3
  44. package/dist/chunk-WYQ277F2.js.map +1 -0
  45. package/dist/{chunk-7Z4KHPFC.js → chunk-YGIN2YIY.js} +2 -2
  46. package/dist/{chunk-7Z4KHPFC.js.map → chunk-YGIN2YIY.js.map} +1 -1
  47. package/dist/{chunk-LZNZLCOE.js → chunk-YKEIOYJ5.js} +20 -6
  48. package/dist/chunk-YKEIOYJ5.js.map +1 -0
  49. package/dist/{chunk-2DGLWTPS.js → chunk-YKOLME7R.js} +3 -3
  50. package/dist/{chunk-2DGLWTPS.js.map → chunk-YKOLME7R.js.map} +1 -1
  51. package/dist/code-block.js +4 -4
  52. package/dist/code-block.js.map +1 -1
  53. package/dist/combobox.js +2 -2
  54. package/dist/command.js +3 -3
  55. package/dist/command.js.map +1 -1
  56. package/dist/comparison-table.js +2 -2
  57. package/dist/comparison-table.js.map +1 -1
  58. package/dist/countdown.js +1 -1
  59. package/dist/countdown.js.map +1 -1
  60. package/dist/cover-hero.js +15 -6
  61. package/dist/cover-hero.js.map +1 -1
  62. package/dist/dashboard-layout.js +1 -1
  63. package/dist/dashboard-layout.js.map +1 -1
  64. package/dist/data-table.js +5 -5
  65. package/dist/date-picker.js +3 -3
  66. package/dist/date-picker.js.map +1 -1
  67. package/dist/description-list.js +1 -1
  68. package/dist/description-list.js.map +1 -1
  69. package/dist/detail-layout.js +1 -1
  70. package/dist/detail-layout.js.map +1 -1
  71. package/dist/dialog.js +1 -1
  72. package/dist/docs-nav.js +1 -1
  73. package/dist/docs-nav.js.map +1 -1
  74. package/dist/dropdown-menu.js +1 -1
  75. package/dist/dropdown-menu.js.map +1 -1
  76. package/dist/file-upload.js +3 -3
  77. package/dist/file-upload.js.map +1 -1
  78. package/dist/filter-bar.js +2 -2
  79. package/dist/footnote.d.ts +32 -0
  80. package/dist/footnote.js +29 -0
  81. package/dist/footnote.js.map +1 -0
  82. package/dist/genui.js +6 -6
  83. package/dist/geometry-DncHaYP8.d.ts +22 -0
  84. package/dist/language-switch.js +1 -1
  85. package/dist/list.js +1 -1
  86. package/dist/loader.js +2 -2
  87. package/dist/loader.js.map +1 -1
  88. package/dist/map.js +95 -83
  89. package/dist/map.js.map +1 -1
  90. package/dist/marketing-layout.js +1 -1
  91. package/dist/marketing-layout.js.map +1 -1
  92. package/dist/mascot-quote.d.ts +2 -21
  93. package/dist/mascot-quote.js +9 -338
  94. package/dist/mascot-quote.js.map +1 -1
  95. package/dist/match-dialog.js +1 -1
  96. package/dist/match-dialog.js.map +1 -1
  97. package/dist/media-grid.js +1 -1
  98. package/dist/meter.js +3 -3
  99. package/dist/meter.js.map +1 -1
  100. package/dist/motion.css +28 -41
  101. package/dist/native/map.js +94 -82
  102. package/dist/native/map.js.map +1 -1
  103. package/dist/native.d.ts +8 -1
  104. package/dist/native.js +57 -45
  105. package/dist/native.js.map +1 -1
  106. package/dist/nav-bar.js +12 -12
  107. package/dist/nav-bar.js.map +1 -1
  108. package/dist/page-hero.js +1 -1
  109. package/dist/page-index.d.ts +30 -0
  110. package/dist/page-index.js +23 -0
  111. package/dist/page-index.js.map +1 -0
  112. package/dist/page.d.ts +19 -7
  113. package/dist/page.js +1 -1
  114. package/dist/photo-grid.js +2 -2
  115. package/dist/photo-grid.js.map +1 -1
  116. package/dist/progress.js +3 -3
  117. package/dist/progress.js.map +1 -1
  118. package/dist/radio-group.js +1 -1
  119. package/dist/radio-group.js.map +1 -1
  120. package/dist/rail-nav.js +2 -2
  121. package/dist/rail-nav.js.map +1 -1
  122. package/dist/search-field.js +1 -1
  123. package/dist/service-card.js +3 -3
  124. package/dist/service-card.js.map +1 -1
  125. package/dist/settings-layout.js +1 -1
  126. package/dist/settings-layout.js.map +1 -1
  127. package/dist/site-footer.js +3 -3
  128. package/dist/site-footer.js.map +1 -1
  129. package/dist/skip-link.js +1 -1
  130. package/dist/slot-picker.js +1 -1
  131. package/dist/slot-picker.js.map +1 -1
  132. package/dist/specimen-tag.d.ts +52 -0
  133. package/dist/specimen-tag.js +33 -0
  134. package/dist/specimen-tag.js.map +1 -0
  135. package/dist/stat.js +1 -1
  136. package/dist/stat.js.map +1 -1
  137. package/dist/step-progress.js +1 -1
  138. package/dist/step-progress.js.map +1 -1
  139. package/dist/sticky-action.d.ts +1 -1
  140. package/dist/sticky-action.js +1 -1
  141. package/dist/sticky-action.js.map +1 -1
  142. package/dist/swipe-deck.js +1 -1
  143. package/dist/swipe-deck.js.map +1 -1
  144. package/dist/tabs.js +4 -4
  145. package/dist/tabs.js.map +1 -1
  146. package/dist/tag-input.js +2 -2
  147. package/dist/tag-selector.js +1 -1
  148. package/dist/toast.js +1 -1
  149. package/dist/toast.js.map +1 -1
  150. package/package.json +74 -4
  151. package/registry/account-menu.json +1 -1
  152. package/registry/achievement.json +1 -1
  153. package/registry/action-bar.json +1 -1
  154. package/registry/activity-feed.json +2 -2
  155. package/registry/alert.json +1 -1
  156. package/registry/anatomy-plate.json +168 -0
  157. package/registry/app-header.json +2 -2
  158. package/registry/app-shell.json +2 -2
  159. package/registry/argument-card.json +1 -1
  160. package/registry/audio-player.json +1 -1
  161. package/registry/auth-layout.json +1 -1
  162. package/registry/avatar.json +1 -1
  163. package/registry/badge.json +2 -2
  164. package/registry/bird-plate.json +221 -0
  165. package/registry/button.json +1 -1
  166. package/registry/captcha.json +1 -1
  167. package/registry/card-grid.json +1 -1
  168. package/registry/card.json +2 -2
  169. package/registry/catalogue-page.json +1 -1
  170. package/registry/changelog-page.json +1 -1
  171. package/registry/chat.json +3 -3
  172. package/registry/checkbox.json +2 -2
  173. package/registry/chip-link.json +1 -1
  174. package/registry/chip-row.json +2 -2
  175. package/registry/chip.json +2 -2
  176. package/registry/choice-grid.json +1 -1
  177. package/registry/code-block.json +1 -1
  178. package/registry/combobox.json +1 -1
  179. package/registry/command.json +2 -2
  180. package/registry/comparison-table.json +2 -2
  181. package/registry/component-page.json +1 -1
  182. package/registry/confirm-button.json +1 -1
  183. package/registry/contact-page.json +1 -1
  184. package/registry/continue-prompt.json +1 -1
  185. package/registry/countdown.json +2 -2
  186. package/registry/cover-hero.json +2 -2
  187. package/registry/cta-panel.json +1 -1
  188. package/registry/dashboard-layout.json +2 -2
  189. package/registry/data-table.json +1 -1
  190. package/registry/date-picker.json +4 -4
  191. package/registry/decision-list.json +1 -1
  192. package/registry/description-list.json +2 -2
  193. package/registry/detail-layout.json +2 -2
  194. package/registry/dialog.json +2 -2
  195. package/registry/docs-article-page.json +1 -1
  196. package/registry/docs-hub-page.json +1 -1
  197. package/registry/docs-layout.json +1 -1
  198. package/registry/docs-nav.json +2 -2
  199. package/registry/document-viewer.json +1 -1
  200. package/registry/dropdown-menu.json +2 -2
  201. package/registry/empty-state.json +1 -1
  202. package/registry/engine-flow.json +1 -1
  203. package/registry/error-page.json +1 -1
  204. package/registry/examples/action-sheet/native/video-actions.dark.png +0 -0
  205. package/registry/examples/action-sheet/native/video-actions.light.png +0 -0
  206. package/registry/examples/activity-feed/native/notifications.dark.png +0 -0
  207. package/registry/examples/activity-feed/native/notifications.light.png +0 -0
  208. package/registry/examples/anatomy-plate/button.d.ts +4 -0
  209. package/registry/examples/anatomy-plate/button.js +25 -0
  210. package/registry/examples/anatomy-plate/button.tsx +20 -0
  211. package/registry/examples/avatar/native/group.dark.png +0 -0
  212. package/registry/examples/avatar/native/group.light.png +0 -0
  213. package/registry/examples/avatar/native/presence.dark.png +0 -0
  214. package/registry/examples/avatar/native/presence.light.png +0 -0
  215. package/registry/examples/avatar/native/sizes.dark.png +0 -0
  216. package/registry/examples/avatar/native/sizes.light.png +0 -0
  217. package/registry/examples/badge/native/dot.dark.png +0 -0
  218. package/registry/examples/badge/native/dot.light.png +0 -0
  219. package/registry/examples/badge/native/scrim.dark.png +0 -0
  220. package/registry/examples/badge/native/scrim.light.png +0 -0
  221. package/registry/examples/badge/native/tones.dark.png +0 -0
  222. package/registry/examples/badge/native/tones.light.png +0 -0
  223. package/registry/examples/bird-plate/flock.d.ts +4 -0
  224. package/registry/examples/bird-plate/flock.js +24 -0
  225. package/registry/examples/bird-plate/flock.tsx +18 -0
  226. package/registry/examples/bird-plate/single.d.ts +4 -0
  227. package/registry/examples/bird-plate/single.js +19 -0
  228. package/registry/examples/bird-plate/single.tsx +13 -0
  229. package/registry/examples/button/native/danger.dark.png +0 -0
  230. package/registry/examples/button/native/danger.light.png +0 -0
  231. package/registry/examples/button/native/disabled.dark.png +0 -0
  232. package/registry/examples/button/native/disabled.light.png +0 -0
  233. package/registry/examples/button/native/ghost.dark.png +0 -0
  234. package/registry/examples/button/native/ghost.light.png +0 -0
  235. package/registry/examples/button/native/gradient.dark.png +0 -0
  236. package/registry/examples/button/native/gradient.light.png +0 -0
  237. package/registry/examples/button/native/icon-only.dark.png +0 -0
  238. package/registry/examples/button/native/icon-only.light.png +0 -0
  239. package/registry/examples/button/native/icon.dark.png +0 -0
  240. package/registry/examples/button/native/icon.light.png +0 -0
  241. package/registry/examples/button/native/loading.dark.png +0 -0
  242. package/registry/examples/button/native/loading.light.png +0 -0
  243. package/registry/examples/button/native/outline.dark.png +0 -0
  244. package/registry/examples/button/native/outline.light.png +0 -0
  245. package/registry/examples/button/native/primary.dark.png +0 -0
  246. package/registry/examples/button/native/primary.light.png +0 -0
  247. package/registry/examples/button/native/secondary.dark.png +0 -0
  248. package/registry/examples/button/native/secondary.light.png +0 -0
  249. package/registry/examples/button/native/sizes.dark.png +0 -0
  250. package/registry/examples/button/native/sizes.light.png +0 -0
  251. package/registry/examples/card/native/body.dark.png +0 -0
  252. package/registry/examples/card/native/body.light.png +0 -0
  253. package/registry/examples/card/native/default.dark.png +0 -0
  254. package/registry/examples/card/native/default.light.png +0 -0
  255. package/registry/examples/card/native/elevated.dark.png +0 -0
  256. package/registry/examples/card/native/elevated.light.png +0 -0
  257. package/registry/examples/card/native/pressable.dark.png +0 -0
  258. package/registry/examples/card/native/pressable.light.png +0 -0
  259. package/registry/examples/chat/native/assistant.dark.png +0 -0
  260. package/registry/examples/chat/native/assistant.light.png +0 -0
  261. package/registry/examples/chat/native/conversation.dark.png +0 -0
  262. package/registry/examples/chat/native/conversation.light.png +0 -0
  263. package/registry/examples/chat/native/inbox.dark.png +0 -0
  264. package/registry/examples/chat/native/inbox.light.png +0 -0
  265. package/registry/examples/checkbox/native/terms.dark.png +0 -0
  266. package/registry/examples/checkbox/native/terms.light.png +0 -0
  267. package/registry/examples/chip/native/multiple.dark.png +0 -0
  268. package/registry/examples/chip/native/multiple.light.png +0 -0
  269. package/registry/examples/chip/native/removable.dark.png +0 -0
  270. package/registry/examples/chip/native/removable.light.png +0 -0
  271. package/registry/examples/chip/native/single.dark.png +0 -0
  272. package/registry/examples/chip/native/single.light.png +0 -0
  273. package/registry/examples/chip/native/toggle.dark.png +0 -0
  274. package/registry/examples/chip/native/toggle.light.png +0 -0
  275. package/registry/examples/combobox/native/multiple.dark.png +0 -0
  276. package/registry/examples/combobox/native/multiple.light.png +0 -0
  277. package/registry/examples/combobox/native/search.dark.png +0 -0
  278. package/registry/examples/combobox/native/search.light.png +0 -0
  279. package/registry/examples/countdown/native/days.dark.png +0 -0
  280. package/registry/examples/countdown/native/days.light.png +0 -0
  281. package/registry/examples/countdown/native/hours.dark.png +0 -0
  282. package/registry/examples/countdown/native/hours.light.png +0 -0
  283. package/registry/examples/countdown/native/sizes.dark.png +0 -0
  284. package/registry/examples/countdown/native/sizes.light.png +0 -0
  285. package/registry/examples/countdown/native/urgent.dark.png +0 -0
  286. package/registry/examples/countdown/native/urgent.light.png +0 -0
  287. package/registry/examples/countdown/native/with-label.dark.png +0 -0
  288. package/registry/examples/countdown/native/with-label.light.png +0 -0
  289. package/registry/examples/date-picker/native/birth-date-wheel.dark.png +0 -0
  290. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  291. package/registry/examples/date-picker/native/birth-date.dark.png +0 -0
  292. package/registry/examples/date-picker/native/birth-date.light.png +0 -0
  293. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  294. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  295. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  296. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  297. package/registry/examples/date-picker/native/month-year.dark.png +0 -0
  298. package/registry/examples/date-picker/native/month-year.light.png +0 -0
  299. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  300. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  301. package/registry/examples/date-picker/native/time-wheel.dark.png +0 -0
  302. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  303. package/registry/examples/description-list/native/job-details.dark.png +0 -0
  304. package/registry/examples/description-list/native/job-details.light.png +0 -0
  305. package/registry/examples/dialog/native/sheet.dark.png +0 -0
  306. package/registry/examples/dialog/native/sheet.light.png +0 -0
  307. package/registry/examples/empty-state/native/default.dark.png +0 -0
  308. package/registry/examples/empty-state/native/default.light.png +0 -0
  309. package/registry/examples/fab/native/extended.dark.png +0 -0
  310. package/registry/examples/fab/native/extended.light.png +0 -0
  311. package/registry/examples/field/native/default.dark.png +0 -0
  312. package/registry/examples/field/native/default.light.png +0 -0
  313. package/registry/examples/field/native/select.dark.png +0 -0
  314. package/registry/examples/field/native/select.light.png +0 -0
  315. package/registry/examples/footnote/notes.d.ts +4 -0
  316. package/registry/examples/footnote/notes.js +24 -0
  317. package/registry/examples/footnote/notes.tsx +19 -0
  318. package/registry/examples/force-update-screen/native/default.dark.png +0 -0
  319. package/registry/examples/force-update-screen/native/default.light.png +0 -0
  320. package/registry/examples/form/native/amount.dark.png +0 -0
  321. package/registry/examples/form/native/amount.light.png +0 -0
  322. package/registry/examples/form/native/audience.dark.png +0 -0
  323. package/registry/examples/form/native/audience.light.png +0 -0
  324. package/registry/examples/form/native/profile.dark.png +0 -0
  325. package/registry/examples/form/native/profile.light.png +0 -0
  326. package/registry/examples/form/native/settings.dark.png +0 -0
  327. package/registry/examples/form/native/settings.light.png +0 -0
  328. package/registry/examples/form/native/sign-up.dark.png +0 -0
  329. package/registry/examples/form/native/sign-up.light.png +0 -0
  330. package/registry/examples/form/native/upload.dark.png +0 -0
  331. package/registry/examples/form/native/upload.light.png +0 -0
  332. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  333. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  334. package/registry/examples/header/native/large-title.dark.png +0 -0
  335. package/registry/examples/header/native/large-title.light.png +0 -0
  336. package/registry/examples/image-viewer/native/gallery.dark.png +0 -0
  337. package/registry/examples/image-viewer/native/gallery.light.png +0 -0
  338. package/registry/examples/list/native/default.dark.png +0 -0
  339. package/registry/examples/list/native/default.light.png +0 -0
  340. package/registry/examples/list/native/infinite.dark.png +0 -0
  341. package/registry/examples/list/native/infinite.light.png +0 -0
  342. package/registry/examples/list/native/states.dark.png +0 -0
  343. package/registry/examples/list/native/states.light.png +0 -0
  344. package/registry/examples/loader/native/block.dark.png +0 -0
  345. package/registry/examples/loader/native/block.light.png +0 -0
  346. package/registry/examples/loader/native/branded.dark.png +0 -0
  347. package/registry/examples/loader/native/branded.light.png +0 -0
  348. package/registry/examples/loader/native/job-wait.dark.png +0 -0
  349. package/registry/examples/loader/native/job-wait.light.png +0 -0
  350. package/registry/examples/maintenance-screen/native/default.dark.png +0 -0
  351. package/registry/examples/maintenance-screen/native/default.light.png +0 -0
  352. package/registry/examples/map/native/location-picker.dark.png +0 -0
  353. package/registry/examples/map/native/location-picker.light.png +0 -0
  354. package/registry/examples/map/native/places.dark.png +0 -0
  355. package/registry/examples/map/native/places.light.png +0 -0
  356. package/registry/examples/markdown/native/ai-stream.dark.png +0 -0
  357. package/registry/examples/markdown/native/ai-stream.light.png +0 -0
  358. package/registry/examples/markdown/native/basic.dark.png +0 -0
  359. package/registry/examples/markdown/native/basic.light.png +0 -0
  360. package/registry/examples/mascot-state/native/default.dark.png +0 -0
  361. package/registry/examples/mascot-state/native/default.light.png +0 -0
  362. package/registry/examples/mascots/native/crane.dark.png +0 -0
  363. package/registry/examples/mascots/native/crane.light.png +0 -0
  364. package/registry/examples/mascots/native/default.dark.png +0 -0
  365. package/registry/examples/mascots/native/default.light.png +0 -0
  366. package/registry/examples/mascots/native/lovebird.dark.png +0 -0
  367. package/registry/examples/mascots/native/lovebird.light.png +0 -0
  368. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  369. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  370. package/registry/examples/match-dialog/native/its-a-match.dark.png +0 -0
  371. package/registry/examples/match-dialog/native/its-a-match.light.png +0 -0
  372. package/registry/examples/media-capture/native/photo.dark.png +0 -0
  373. package/registry/examples/media-capture/native/photo.light.png +0 -0
  374. package/registry/examples/media-picker/native/story.dark.png +0 -0
  375. package/registry/examples/media-picker/native/story.light.png +0 -0
  376. package/registry/examples/meta-row/native/video.dark.png +0 -0
  377. package/registry/examples/meta-row/native/video.light.png +0 -0
  378. package/registry/examples/meter/native/credits.dark.png +0 -0
  379. package/registry/examples/meter/native/credits.light.png +0 -0
  380. package/registry/examples/meter/native/split-ring.dark.png +0 -0
  381. package/registry/examples/meter/native/split-ring.light.png +0 -0
  382. package/registry/examples/number-ticker/native/balance.dark.png +0 -0
  383. package/registry/examples/number-ticker/native/balance.light.png +0 -0
  384. package/registry/examples/onboarding/native/first-launch.dark.png +0 -0
  385. package/registry/examples/onboarding/native/first-launch.light.png +0 -0
  386. package/registry/examples/otp-input/native/invalid.dark.png +0 -0
  387. package/registry/examples/otp-input/native/invalid.light.png +0 -0
  388. package/registry/examples/otp-input/native/verify.dark.png +0 -0
  389. package/registry/examples/otp-input/native/verify.light.png +0 -0
  390. package/registry/examples/page-index/docs.d.ts +4 -0
  391. package/registry/examples/page-index/docs.js +33 -0
  392. package/registry/examples/page-index/docs.tsx +27 -0
  393. package/registry/examples/pagination/native/cursor.dark.png +0 -0
  394. package/registry/examples/pagination/native/cursor.light.png +0 -0
  395. package/registry/examples/pagination/native/pages.dark.png +0 -0
  396. package/registry/examples/pagination/native/pages.light.png +0 -0
  397. package/registry/examples/permission-prompt/native/blocked.dark.png +0 -0
  398. package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
  399. package/registry/examples/permission-prompt/native/camera.dark.png +0 -0
  400. package/registry/examples/permission-prompt/native/camera.light.png +0 -0
  401. package/registry/examples/photo-grid/native/profile-photos.dark.png +0 -0
  402. package/registry/examples/photo-grid/native/profile-photos.light.png +0 -0
  403. package/registry/examples/profile-card/native/default.dark.png +0 -0
  404. package/registry/examples/profile-card/native/default.light.png +0 -0
  405. package/registry/examples/progress/native/bar.dark.png +0 -0
  406. package/registry/examples/progress/native/bar.light.png +0 -0
  407. package/registry/examples/progress/native/indeterminate.dark.png +0 -0
  408. package/registry/examples/progress/native/indeterminate.light.png +0 -0
  409. package/registry/examples/progress/native/ring.dark.png +0 -0
  410. package/registry/examples/progress/native/ring.light.png +0 -0
  411. package/registry/examples/pull-to-refresh/native/branded.dark.png +0 -0
  412. package/registry/examples/pull-to-refresh/native/branded.light.png +0 -0
  413. package/registry/examples/pull-to-refresh/native/feed.dark.png +0 -0
  414. package/registry/examples/pull-to-refresh/native/feed.light.png +0 -0
  415. package/registry/examples/radio-group/native/buttons.dark.png +0 -0
  416. package/registry/examples/radio-group/native/buttons.light.png +0 -0
  417. package/registry/examples/radio-group/native/cards.dark.png +0 -0
  418. package/registry/examples/radio-group/native/cards.light.png +0 -0
  419. package/registry/examples/radio-group/native/list.dark.png +0 -0
  420. package/registry/examples/radio-group/native/list.light.png +0 -0
  421. package/registry/examples/radio-group/native/segmented.dark.png +0 -0
  422. package/registry/examples/radio-group/native/segmented.light.png +0 -0
  423. package/registry/examples/screen/native/app-shell.dark.png +0 -0
  424. package/registry/examples/screen/native/app-shell.light.png +0 -0
  425. package/registry/examples/screen/native/auth.dark.png +0 -0
  426. package/registry/examples/screen/native/auth.light.png +0 -0
  427. package/registry/examples/screen/native/chat.dark.png +0 -0
  428. package/registry/examples/screen/native/chat.light.png +0 -0
  429. package/registry/examples/screen/native/feed.dark.png +0 -0
  430. package/registry/examples/screen/native/feed.light.png +0 -0
  431. package/registry/examples/screen/native/map.dark.png +0 -0
  432. package/registry/examples/screen/native/map.light.png +0 -0
  433. package/registry/examples/screen/native/notifications.dark.png +0 -0
  434. package/registry/examples/screen/native/notifications.light.png +0 -0
  435. package/registry/examples/screen/native/profile.dark.png +0 -0
  436. package/registry/examples/screen/native/profile.light.png +0 -0
  437. package/registry/examples/screen/native/settings.dark.png +0 -0
  438. package/registry/examples/screen/native/settings.light.png +0 -0
  439. package/registry/examples/search-field/native/cancel.dark.png +0 -0
  440. package/registry/examples/search-field/native/cancel.light.png +0 -0
  441. package/registry/examples/search-field/native/default.dark.png +0 -0
  442. package/registry/examples/search-field/native/default.light.png +0 -0
  443. package/registry/examples/segmented/native/default.dark.png +0 -0
  444. package/registry/examples/segmented/native/default.light.png +0 -0
  445. package/registry/examples/segmented/native/small.dark.png +0 -0
  446. package/registry/examples/segmented/native/small.light.png +0 -0
  447. package/registry/examples/settings-layout/native/account.dark.png +0 -0
  448. package/registry/examples/settings-layout/native/account.light.png +0 -0
  449. package/registry/examples/showcase/native/slides.dark.png +0 -0
  450. package/registry/examples/showcase/native/slides.light.png +0 -0
  451. package/registry/examples/skeleton/native/shapes.dark.png +0 -0
  452. package/registry/examples/skeleton/native/shapes.light.png +0 -0
  453. package/registry/examples/slider/native/default.dark.png +0 -0
  454. package/registry/examples/slider/native/default.light.png +0 -0
  455. package/registry/examples/slider/native/range.dark.png +0 -0
  456. package/registry/examples/slider/native/range.light.png +0 -0
  457. package/registry/examples/slider/native/stepped.dark.png +0 -0
  458. package/registry/examples/slider/native/stepped.light.png +0 -0
  459. package/registry/examples/slider/native/vertical.dark.png +0 -0
  460. package/registry/examples/slider/native/vertical.light.png +0 -0
  461. package/registry/examples/specimen-tag/product.d.ts +4 -0
  462. package/registry/examples/specimen-tag/product.js +28 -0
  463. package/registry/examples/specimen-tag/product.tsx +25 -0
  464. package/registry/examples/specimen-tag/stamps.d.ts +4 -0
  465. package/registry/examples/specimen-tag/stamps.js +16 -0
  466. package/registry/examples/specimen-tag/stamps.tsx +13 -0
  467. package/registry/examples/specimen-tag/wire.d.ts +4 -0
  468. package/registry/examples/specimen-tag/wire.js +16 -0
  469. package/registry/examples/specimen-tag/wire.tsx +20 -0
  470. package/registry/examples/spinner/native/sizes.dark.png +0 -0
  471. package/registry/examples/spinner/native/sizes.light.png +0 -0
  472. package/registry/examples/splash-handoff/native/default.dark.png +0 -0
  473. package/registry/examples/splash-handoff/native/default.light.png +0 -0
  474. package/registry/examples/step-progress/native/sign-up.dark.png +0 -0
  475. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  476. package/registry/examples/stepper/native/run.dark.png +0 -0
  477. package/registry/examples/stepper/native/run.light.png +0 -0
  478. package/registry/examples/swipe-deck/native/discover.dark.png +0 -0
  479. package/registry/examples/swipe-deck/native/discover.light.png +0 -0
  480. package/registry/examples/swipeable-row/native/conversation.dark.png +0 -0
  481. package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
  482. package/registry/examples/switch/native/default.dark.png +0 -0
  483. package/registry/examples/switch/native/default.light.png +0 -0
  484. package/registry/examples/switch/native/settings.dark.png +0 -0
  485. package/registry/examples/switch/native/settings.light.png +0 -0
  486. package/registry/examples/tab-bar/native/main-sections.dark.png +0 -0
  487. package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
  488. package/registry/examples/tabs/native/sections.dark.png +0 -0
  489. package/registry/examples/tabs/native/sections.light.png +0 -0
  490. package/registry/examples/tabs/native/segmented.dark.png +0 -0
  491. package/registry/examples/tabs/native/segmented.light.png +0 -0
  492. package/registry/examples/tag-selector/native/interests.dark.png +0 -0
  493. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  494. package/registry/examples/toast/native/notification.dark.png +0 -0
  495. package/registry/examples/toast/native/notification.light.png +0 -0
  496. package/registry/examples/toast/native/snackbar.dark.png +0 -0
  497. package/registry/examples/toast/native/snackbar.light.png +0 -0
  498. package/registry/examples/toast/native/tones.dark.png +0 -0
  499. package/registry/examples/toast/native/tones.light.png +0 -0
  500. package/registry/examples/txt/native/tones.dark.png +0 -0
  501. package/registry/examples/txt/native/tones.light.png +0 -0
  502. package/registry/examples/txt/native/variants.dark.png +0 -0
  503. package/registry/examples/txt/native/variants.light.png +0 -0
  504. package/registry/examples/update-prompt/native/default.dark.png +0 -0
  505. package/registry/examples/update-prompt/native/default.light.png +0 -0
  506. package/registry/examples/verified-badge/native/verified.dark.png +0 -0
  507. package/registry/examples/verified-badge/native/verified.light.png +0 -0
  508. package/registry/examples/vertical-video/native/rail.dark.png +0 -0
  509. package/registry/examples/vertical-video/native/rail.light.png +0 -0
  510. package/registry/examples/video-player/native/default.dark.png +0 -0
  511. package/registry/examples/video-player/native/default.light.png +0 -0
  512. package/registry/examples/waveform/native/card.dark.png +0 -0
  513. package/registry/examples/waveform/native/card.light.png +0 -0
  514. package/registry/field.json +1 -1
  515. package/registry/file-upload.json +1 -1
  516. package/registry/filter-bar.json +1 -1
  517. package/registry/footnote.json +220 -0
  518. package/registry/force-update-screen.json +1 -1
  519. package/registry/form.json +3 -3
  520. package/registry/gallery-page.json +1 -1
  521. package/registry/genui.json +1 -1
  522. package/registry/glow-card.json +1 -1
  523. package/registry/goal-gauge.json +1 -1
  524. package/registry/how-it-works-page.json +1 -1
  525. package/registry/image-cropper.json +1 -1
  526. package/registry/index.json +160 -5
  527. package/registry/iso.json +1 -1
  528. package/registry/kanban.json +1 -1
  529. package/registry/kbd.json +1 -1
  530. package/registry/landing-page.json +1 -1
  531. package/registry/landscape.json +1 -1
  532. package/registry/language-switch.json +2 -2
  533. package/registry/legal-page.json +1 -1
  534. package/registry/link-card.json +1 -1
  535. package/registry/list.json +1 -1
  536. package/registry/loader.json +2 -2
  537. package/registry/longform-page.json +1 -1
  538. package/registry/maintenance-screen.json +1 -1
  539. package/registry/map.json +3 -3
  540. package/registry/markdown.json +1 -1
  541. package/registry/marketing-layout.json +1 -1
  542. package/registry/marquee.json +1 -1
  543. package/registry/mascot-quote.json +1 -1
  544. package/registry/mascot-state.json +1 -1
  545. package/registry/mascots.json +1 -1
  546. package/registry/match-dialog.json +1 -1
  547. package/registry/media-capture.json +1 -1
  548. package/registry/media-gallery.json +1 -1
  549. package/registry/media-grid.json +1 -1
  550. package/registry/meta-row.json +1 -1
  551. package/registry/meter.json +2 -2
  552. package/registry/nav-bar.json +3 -3
  553. package/registry/number-ticker.json +1 -1
  554. package/registry/opening-hours.json +1 -1
  555. package/registry/page-header.json +1 -1
  556. package/registry/page-hero.json +1 -1
  557. package/registry/page-index.json +168 -0
  558. package/registry/page.json +89 -5
  559. package/registry/pagination.json +1 -1
  560. package/registry/photo-grid.json +2 -2
  561. package/registry/pointer-light.json +1 -1
  562. package/registry/popover.json +1 -1
  563. package/registry/pricing-page.json +1 -1
  564. package/registry/product-page.json +1 -1
  565. package/registry/profile-card.json +1 -1
  566. package/registry/progress.json +2 -2
  567. package/registry/promise-card.json +1 -1
  568. package/registry/radio-group.json +2 -2
  569. package/registry/rail-nav.json +3 -3
  570. package/registry/recipes.json +1 -1
  571. package/registry/scroll-stage.json +1 -1
  572. package/registry/search-field.json +2 -2
  573. package/registry/section-backdrop.json +1 -1
  574. package/registry/separator.json +1 -1
  575. package/registry/service-card.json +2 -2
  576. package/registry/settings-layout.json +2 -2
  577. package/registry/showcase.json +1 -1
  578. package/registry/site-footer.json +3 -3
  579. package/registry/sites.json +1 -1
  580. package/registry/skeleton.json +1 -1
  581. package/registry/skip-link.json +2 -2
  582. package/registry/slider.json +1 -1
  583. package/registry/slot-picker.json +2 -2
  584. package/registry/slot.json +1 -1
  585. package/registry/specimen-tag.json +269 -0
  586. package/registry/spinner.json +1 -1
  587. package/registry/split-view.json +1 -1
  588. package/registry/stage-banner.json +1 -1
  589. package/registry/stat.json +2 -2
  590. package/registry/status-page.json +1 -1
  591. package/registry/step-progress.json +2 -2
  592. package/registry/step-showcase.json +1 -1
  593. package/registry/stepper.json +1 -1
  594. package/registry/sticky-action.json +2 -2
  595. package/registry/swipe-deck.json +2 -2
  596. package/registry/switch.json +1 -1
  597. package/registry/tabs.json +2 -2
  598. package/registry/tag-input.json +1 -1
  599. package/registry/tag-selector.json +1 -1
  600. package/registry/terminal-replay.json +1 -1
  601. package/registry/theme.json +1 -1
  602. package/registry/toast.json +2 -2
  603. package/registry/toc.json +1 -1
  604. package/registry/tooltip.json +1 -1
  605. package/registry/tree-view.json +1 -1
  606. package/registry/update-prompt.json +1 -1
  607. package/registry/verified-badge.json +1 -1
  608. package/registry/vertical-video.json +1 -1
  609. package/registry/video-player.json +1 -1
  610. package/registry/video-trimmer.json +1 -1
  611. package/registry/virtual.json +1 -1
  612. package/registry/waveform.json +1 -1
  613. package/dist/chunk-2PNLHZLT.js.map +0 -1
  614. package/dist/chunk-3S4GHSPZ.js.map +0 -1
  615. package/dist/chunk-LZNZLCOE.js.map +0 -1
  616. package/dist/chunk-NJFCSVPT.js.map +0 -1
  617. package/dist/chunk-QDXV544C.js.map +0 -1
  618. package/dist/chunk-REPTKUJ6.js.map +0 -1
  619. /package/dist/{chunk-CKSHLSDH.js.map → chunk-AAP3U66V.js.map} +0 -0
  620. /package/dist/{chunk-KIBICUZK.js.map → chunk-S5LP7KKW.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\n/** The length of a path of positions, in metres (the sum of its great-circle legs). */\nexport function pathLength(path: readonly LngLat[]): number {\n let total = 0;\n for (let i = 1; i < path.length; i++) total += distanceMeters(path[i - 1]!, path[i]!);\n return total;\n}\n\n/** The position at `fraction` (0–1, clamped) of the path's length, with the heading of the leg it is on (degrees clockwise from north). */\nexport function pointAlong(path: readonly LngLat[], fraction: number): { position: LngLat; heading: number } {\n const first = path[0] ?? [0, 0];\n if (path.length < 2) return { position: first, heading: 0 };\n const target = Math.max(0, Math.min(1, fraction)) * pathLength(path);\n let walked = 0;\n for (let i = 1; i < path.length; i++) {\n const a = path[i - 1]!;\n const b = path[i]!;\n const leg = distanceMeters(a, b);\n if (walked + leg >= target || i === path.length - 1) {\n const t = leg === 0 ? 0 : Math.max(0, Math.min(1, (target - walked) / leg));\n const heading = (Math.atan2(b[0] - a[0], b[1] - a[1]) * 180) / Math.PI;\n return { position: [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t], heading: (heading + 360) % 360 };\n }\n walked += leg;\n }\n return { position: first, heading: 0 };\n}\n\n/** The first `fraction` (0–1) of the path, as a GeoJSON line: what a route has drawn so far. */\nexport function sliceLine(path: readonly LngLat[], fraction: number): GeoJSON.Feature<GeoJSON.LineString> {\n const f = Math.max(0, Math.min(1, fraction));\n const total = pathLength(path);\n const coordinates: [number, number][] = [];\n if (path.length) coordinates.push([...path[0]!] as [number, number]);\n let walked = 0;\n for (let i = 1; i < path.length && f > 0; i++) {\n const a = path[i - 1]!;\n const b = path[i]!;\n const leg = distanceMeters(a, b);\n if (walked + leg <= f * total) coordinates.push([...b] as [number, number]);\n else {\n const t = leg === 0 ? 0 : (f * total - walked) / leg;\n coordinates.push([a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]);\n break;\n }\n walked += leg;\n }\n if (coordinates.length === 1) coordinates.push([...coordinates[0]!]);\n return { type: \"Feature\", properties: {}, geometry: { type: \"LineString\", coordinates } };\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\": \"#3e76a8\",\n \"accentHover\": \"#346793\",\n \"accentSoft\": \"rgba(62,118,168,0.12)\",\n \"accentText\": \"#8ebde1\",\n \"accent2\": \"#3e76a8\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#3e76a8\",\n \"brandGradientFrom\": \"#121a21\",\n \"brandGradientVia\": \"#0f1114\",\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\": \"#3e76a8\",\n \"infoText\": \"#8ebde1\",\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\": \"#2a5f8d\",\n \"accentHover\": \"#1f4d75\",\n \"accentSoft\": \"rgba(42,95,141,0.08)\",\n \"accentText\": \"#275782\",\n \"accent2\": \"#2a5f8d\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#2a5f8d\",\n \"brandGradientFrom\": \"#e7eef4\",\n \"brandGradientVia\": \"#f5f7fa\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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\": \"#3e76a8\",\n \"accentHover\": \"#346793\",\n \"accentSoft\": \"rgba(62,118,168,0.12)\",\n \"accentText\": \"#8ebde1\",\n \"accent2\": \"#3e76a8\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#3e76a8\",\n \"info\": \"#3e76a8\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#121a21\",\n \"brandGradientVia\": \"#0f1114\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#2a5f8d\",\n \"accentHover\": \"#1f4d75\",\n \"accentSoft\": \"rgba(42,95,141,0.08)\",\n \"accentText\": \"#275782\",\n \"accent2\": \"#2a5f8d\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#2a5f8d\",\n \"info\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#e7eef4\",\n \"brandGradientVia\": \"#f5f7fa\",\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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 \"#3e76a8\"\n ],\n [\n \"100%\",\n \"#8ebde1\"\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\n/** The length of a path of positions, in metres (the sum of its great-circle legs). */\nexport function pathLength(path: readonly LngLat[]): number {\n let total = 0;\n for (let i = 1; i < path.length; i++) total += distanceMeters(path[i - 1]!, path[i]!);\n return total;\n}\n\n/** The position at `fraction` (0–1, clamped) of the path's length, with the heading of the leg it is on (degrees clockwise from north). */\nexport function pointAlong(path: readonly LngLat[], fraction: number): { position: LngLat; heading: number } {\n const first = path[0] ?? [0, 0];\n if (path.length < 2) return { position: first, heading: 0 };\n const target = Math.max(0, Math.min(1, fraction)) * pathLength(path);\n let walked = 0;\n for (let i = 1; i < path.length; i++) {\n const a = path[i - 1]!;\n const b = path[i]!;\n const leg = distanceMeters(a, b);\n if (walked + leg >= target || i === path.length - 1) {\n const t = leg === 0 ? 0 : Math.max(0, Math.min(1, (target - walked) / leg));\n const heading = (Math.atan2(b[0] - a[0], b[1] - a[1]) * 180) / Math.PI;\n return { position: [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t], heading: (heading + 360) % 360 };\n }\n walked += leg;\n }\n return { position: first, heading: 0 };\n}\n\n/** The first `fraction` (0–1) of the path, as a GeoJSON line: what a route has drawn so far. */\nexport function sliceLine(path: readonly LngLat[], fraction: number): GeoJSON.Feature<GeoJSON.LineString> {\n const f = Math.max(0, Math.min(1, fraction));\n const total = pathLength(path);\n const coordinates: [number, number][] = [];\n if (path.length) coordinates.push([...path[0]!] as [number, number]);\n let walked = 0;\n for (let i = 1; i < path.length && f > 0; i++) {\n const a = path[i - 1]!;\n const b = path[i]!;\n const leg = distanceMeters(a, b);\n if (walked + leg <= f * total) coordinates.push([...b] as [number, number]);\n else {\n const t = leg === 0 ? 0 : (f * total - walked) / leg;\n coordinates.push([a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]);\n break;\n }\n walked += leg;\n }\n if (coordinates.length === 1) coordinates.push([...coordinates[0]!]);\n return { type: \"Feature\", properties: {}, geometry: { type: \"LineString\", coordinates } };\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\": \"#151b18\",\n \"surface1\": \"#191f1c\",\n \"surface2\": \"#1c221f\",\n \"surface3\": \"#262e2a\",\n \"media\": \"#1e2521\",\n \"borderSubtle\": \"rgba(231,240,230,0.07)\",\n \"borderDefault\": \"rgba(231,240,230,0.12)\",\n \"borderStrong\": \"rgba(231,240,230,0.2)\",\n \"textPrimary\": \"#ecf0ea\",\n \"textSecondary\": \"#bcc8c0\",\n \"textMuted\": \"#a7b4ab\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#3e76a8\",\n \"accentHover\": \"#346793\",\n \"accentSoft\": \"rgba(62,118,168,0.12)\",\n \"accentText\": \"#8ebde1\",\n \"accent2\": \"#3e76a8\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#3e76a8\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\",\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\": \"#3e76a8\",\n \"infoText\": \"#8ebde1\",\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 \"paperRuleMajor\": \"rgba(217,232,222,0.09)\",\n \"paperRuleMinor\": \"rgba(217,232,222,0.045)\",\n \"paperRuleMargin\": \"#e08071\",\n \"paperTag\": \"#2d3932\",\n \"paperTagEdge\": \"#586a5f\",\n \"paperTagInk\": \"#e9eee7\",\n \"surfaceSheen\": \"rgba(255,255,255,0)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(4,4,7,0.5)\",\n \"glassBg\": \"#191f1c\",\n \"glassBorder\": \"rgba(255,255,255,0.1)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"surface0\": \"#f4f6f3\",\n \"surface1\": \"#fbfcfb\",\n \"surface2\": \"#f0f3ef\",\n \"surface3\": \"#dfe3de\",\n \"media\": \"#e5e8e3\",\n \"borderSubtle\": \"rgba(31,59,91,0.1)\",\n \"borderDefault\": \"rgba(31,59,91,0.17)\",\n \"borderStrong\": \"rgba(31,59,91,0.28)\",\n \"textPrimary\": \"#1d3654\",\n \"textSecondary\": \"#405064\",\n \"textMuted\": \"#4f5b69\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#2a5f8d\",\n \"accentHover\": \"#1f4d75\",\n \"accentSoft\": \"rgba(42,95,141,0.08)\",\n \"accentText\": \"#275782\",\n \"accent2\": \"#2a5f8d\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#2a5f8d\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\",\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\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 \"paperRuleMajor\": \"rgba(69,109,161,0.24)\",\n \"paperRuleMinor\": \"rgba(69,109,161,0.1)\",\n \"paperRuleMargin\": \"#a53127\",\n \"paperTag\": \"#eadfc2\",\n \"paperTagEdge\": \"#b4a274\",\n \"paperTagInk\": \"#282620\",\n \"surfaceSheen\": \"rgba(255,255,255,0)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(48,52,80,0.08)\",\n \"glassBg\": \"#fbfcfb\",\n \"glassBorder\": \"rgba(0,0,0,0.08)\"\n}) });\n\n/** Corner radii, in dp. */\nexport const radius = /* @__PURE__ */ Object.freeze({\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 0,\n \"xl\": 0,\n \"2xl\": 0,\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\": \"Atkinson Hyperlegible Next\",\n \"text\": \"Atkinson Hyperlegible Next\",\n \"display\": \"Young Serif\",\n \"mono\": \"Courier Prime\"\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.45,0,0.2,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\": 80,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.72\n },\n \"displayXl\": {\n \"role\": \"display\",\n \"fontSize\": 56,\n \"lineHeight\": 64,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.56\n },\n \"displayLg\": {\n \"role\": \"display\",\n \"fontSize\": 44,\n \"lineHeight\": 48,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.44\n },\n \"displayMd\": {\n \"role\": \"display\",\n \"fontSize\": 34,\n \"lineHeight\": 40,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.34\n },\n \"displaySm\": {\n \"role\": \"display\",\n \"fontSize\": 26,\n \"lineHeight\": 32,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n },\n \"titleLg\": {\n \"role\": \"display\",\n \"fontSize\": 20,\n \"lineHeight\": 24,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\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\": 24,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.18\n },\n \"bodySm\": {\n \"role\": \"text\",\n \"fontSize\": 14,\n \"lineHeight\": 20,\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\": 16,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\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 0 0 rgba(5,10,8,0.6)\",\n \"md\": \"0 1px 0 0 rgba(5,10,8,0.6), 4px 5px 0 -2px rgba(7,13,10,0.55)\",\n \"lg\": \"0 1px 0 0 rgba(5,10,8,0.6), 6px 8px 0 -2px rgba(7,13,10,0.55)\",\n \"raised\": \"0 1px 0 0 rgba(5,10,8,0.6)\",\n \"floating\": \"0 1px 0 0 rgba(5,10,8,0.6), 4px 5px 0 -2px rgba(7,13,10,0.55)\",\n \"overlay\": \"0 1px 0 0 rgba(5,10,8,0.6), 8px 10px 0 -3px rgba(7,13,10,0.55)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 0 0 rgba(31,59,91,0.12)\",\n \"md\": \"0 1px 0 0 rgba(31,59,91,0.12), 4px 5px 0 -2px rgba(46,74,107,0.14)\",\n \"lg\": \"0 1px 0 0 rgba(31,59,91,0.12), 6px 8px 0 -2px rgba(46,74,107,0.14)\",\n \"raised\": \"0 1px 0 0 rgba(31,59,91,0.12)\",\n \"floating\": \"0 1px 0 0 rgba(31,59,91,0.12), 4px 5px 0 -2px rgba(46,74,107,0.14)\",\n \"overlay\": \"0 1px 0 0 rgba(31,59,91,0.12), 8px 10px 0 -3px rgba(46,74,107,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\": \"#3e76a8\",\n \"accentHover\": \"#346793\",\n \"accentSoft\": \"rgba(62,118,168,0.12)\",\n \"accentText\": \"#8ebde1\",\n \"accent2\": \"#3e76a8\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#3e76a8\",\n \"info\": \"#3e76a8\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\n },\n \"light\": {\n \"accent\": \"#2a5f8d\",\n \"accentHover\": \"#1f4d75\",\n \"accentSoft\": \"rgba(42,95,141,0.08)\",\n \"accentText\": \"#275782\",\n \"accent2\": \"#2a5f8d\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#2a5f8d\",\n \"info\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\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\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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\": \"#5e99c9\",\n \"infoText\": \"#8ebde1\",\n \"brandGradientFrom\": \"#151b18\",\n \"brandGradientVia\": \"#151b18\",\n \"brandGradientTo\": \"#151b18\"\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\": \"#2a5f8d\",\n \"infoText\": \"#275782\",\n \"brandGradientFrom\": \"#f4f6f3\",\n \"brandGradientVia\": \"#f4f6f3\",\n \"brandGradientTo\": \"#f4f6f3\"\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 \"#3e76a8\"\n ],\n [\n \"100%\",\n \"#8ebde1\"\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":";AAKA,SAAuB,KAAK,gBAAgB;AAC5C;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,OACL;AACP,YAAY,WAAW;AACvB,SAAS,UAAU,WAA2B,YAAY,MAAM,YAA4B;AAC5F,OAAO,OAAO,QAAQ,YAAY;;;ACblC,IAAM,MAAM;AAGL,IAAM,YAAY;AAAA,EACvB,OAAO,GAAG,GAAG;AAAA,EACb,QAAQ,GAAG,GAAG;AAChB;AAGO,IAAM,aAAa,GAAG,GAAG;AAGzB,IAAM,kBAAkB,EAAE,KAAK,mCAAgC,QAAQ,2CAA2C,WAAW,aAAa,cAAc,wBAAwB;AAEvL,IAAI,OAAsB;AAWnB,SAAS,YAAY;AAC1B,QAAM,KAAK,CAAC,MAAe,OAAO,EAAE,QAAQ,KAAK,IAAI,IAAI;AACzD,SAAO,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,KAAK,GAAG,QAAQ,GAAG,UAAU,MAAM,EAAE,GAAG,QAAQ,GAAG,UAAU,EAAE;AACvG;;;ACzBA,IAAM,IAAI;AACV,IAAM,MAAM,CAAC,MAAe,IAAI,KAAK,KAAM;AAGpC,SAAS,eAAe,GAAW,GAAmB;AAC3D,QAAM,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5B,QAAM,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5B,QAAM,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK;AACtG,SAAO,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC;AACpD;AAGO,SAAS,cAAc,QAAgB,QAAgB,QAAQ,IAAsC;AAC1G,QAAM,CAAC,KAAK,GAAG,IAAI;AACnB,QAAM,IAAI,SAAS;AACnB,QAAM,OAA2B,CAAC;AAClC,WAAS,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,UAAM,MAAO,IAAI,KAAK,KAAK,IAAK;AAChC,UAAM,OAAO,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;AAC1G,UAAM,OAAO,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC;AACtI,SAAK,KAAK,CAAE,OAAO,MAAO,KAAK,IAAK,OAAO,MAAO,KAAK,EAAE,CAAC;AAAA,EAC5D;AACA,SAAO,EAAE,MAAM,WAAW,YAAY,CAAC,GAAG,UAAU,EAAE,MAAM,WAAW,aAAa,CAAC,IAAI,EAAE,EAAE;AAC/F;AAUO,SAAS,eAAe,QAAgB,QAAwB;AACrE,MAAI,SAAS,IAAM,QAAO,IAAI,KAAK,aAAa,QAAQ,EAAE,OAAO,QAAQ,MAAM,SAAS,uBAAuB,EAAE,CAAC,EAAE,OAAO,KAAK,MAAM,SAAS,EAAE,IAAI,EAAE;AACvJ,SAAO,IAAI,KAAK,aAAa,QAAQ,EAAE,OAAO,QAAQ,MAAM,aAAa,uBAAuB,SAAS,MAAS,IAAI,EAAE,CAAC,EAAE,OAAO,SAAS,GAAI;AACjJ;;;ACxCO,IAAM,SAAyB,uBAAO,OAAO,EAAE,MAAsB,uBAAO,OAAO;AAAA,EACxF,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,UAAU;AAAA,EACV,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,UAAU;AAAA,EACV,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,eAAe;AAAA,EACf,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AACjB,CAAC,GAAG,OAAuB,uBAAO,OAAO;AAAA,EACvC,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,UAAU;AAAA,EACV,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,UAAU;AAAA,EACV,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,eAAe;AAAA,EACf,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AACjB,CAAC,EAAE,CAAC;AA8JG,IAAM,SAAyB,uBAAO,OAAO;AAAA,EAClD,WAAW;AAAA,IACT,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AACF,CAAC;;;ACjfD,SAAsB,QAAQ,mBAAmB;AAQ1C,SAAS,IAAI,GAAW,GAAW,GAAmB;AAC3D,QAAM,IAAI,CAAC,MAAc,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7E,QAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1B,SAAO,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,CAAC,IAAK,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AACpG;AAGO,SAAS,WAAW,QAA0B,QAAkB,WAAW;AAChF,QAAM,IAAI,EAAE,GAAG,OAAO,MAAM,GAAG,GAAI,OAA0F,KAAK,IAAI,MAAM,EAAE;AAC9I,QAAM,OAAO,WAAW;AACxB,QAAM,OAAO,OAAO,EAAE,WAAW,EAAE;AACnC,SAAO;AAAA,IACL;AAAA,IACA,YAAY,OAAO,EAAE,WAAW,EAAE;AAAA,IAClC,OAAO,IAAI,MAAM,EAAE,QAAQ,OAAO,OAAO,IAAI;AAAA,IAC7C,MAAM,IAAI,MAAM,EAAE,SAAS,OAAO,MAAM,IAAI;AAAA,IAC5C,MAAM,OAAO,IAAI,MAAM,EAAE,aAAa,IAAI,IAAI;AAAA,IAC9C,WAAW,OAAO,IAAI,MAAM,EAAE,aAAa,GAAG,IAAI,IAAI,MAAM,EAAE,aAAa,IAAI;AAAA,IAC/E,QAAQ,IAAI,MAAM,EAAE,aAAa,OAAO,OAAO,IAAI;AAAA,IACnD,UAAU,IAAI,MAAM,EAAE,aAAa,OAAO,OAAO,IAAI;AAAA,IACrD,UAAU,IAAI,MAAM,EAAE,aAAa,GAAG;AAAA,IACtC,OAAO,EAAE;AAAA,IACT,aAAa,EAAE;AAAA,IACf,MAAM;AAAA,IACN,QAAQ,EAAE;AAAA,IACV,UAAU,EAAE;AAAA,EACd;AACF;AAGO,SAAS,UAAU,QAA0B,OAA0B;AAC5E,QAAM,IAAI,WAAW,QAAQ,KAAK;AAClC,QAAMA,QAAO,YAAY,MAAM;AAC/B,SAAO;AAAA,IACL,GAAGA;AAAA,IACH,YAAY,EAAE;AAAA,IACd,OAAO,EAAE;AAAA,IACT,QAAQ,EAAE;AAAA,IACV,QAAQ,EAAE;AAAA,IACV,QAAQ,EAAE;AAAA,IACV,QAAQ,EAAE;AAAA,IACV,SAAS,EAAE;AAAA,IACX,SAAS,EAAE;AAAA,IACX,SAAS,EAAE;AAAA,IACX,MAAM,EAAE;AAAA,IACR,OAAO,EAAE;AAAA,IACT,KAAK,EAAE;AAAA,IACP,UAAU,EAAE;AAAA,IACZ,YAAY,EAAE;AAAA,IACd,QAAQ,EAAE;AAAA,IACV,UAAU,EAAE;AAAA,IACZ,WAAW,EAAE;AAAA,IACb,YAAY,EAAE;AAAA,IACd,QAAQ,EAAE;AAAA,IACV,OAAO,EAAE;AAAA,IACT,WAAW,EAAE;AAAA,IACb,MAAM,EAAE;AAAA,IACR,YAAY,EAAE;AAAA,IACd,SAAS,EAAE;AAAA,IACX,OAAO,EAAE;AAAA,IACT,eAAe,EAAE;AAAA,IACjB,SAAS,EAAE;AAAA,IACX,SAAS,EAAE;AAAA,IACX,MAAM,EAAE;AAAA,IACR,OAAO,EAAE;AAAA,IACT,SAAS,EAAE;AAAA,IACX,eAAe,EAAE;AAAA,IACjB,eAAe,EAAE;AAAA,IACjB,cAAc,EAAE;AAAA,IAChB,eAAe,EAAE;AAAA,IACjB,iBAAiB,EAAE;AAAA,IACnB,cAAc,EAAE;AAAA,IAChB,cAAc,EAAE;AAAA,IAChB,aAAa,EAAE;AAAA,IACf,cAAc,EAAE;AAAA,IAChB,gBAAgB,EAAE;AAAA,IAClB,sBAAsB,EAAE;AAAA,IACxB,cAAc,EAAE;AAAA,IAChB,aAAa,EAAE;AAAA,IACf,mBAAmB,EAAE;AAAA,IACrB,oBAAoB,EAAE;AAAA,IACtB,qBAAqB,EAAE;AAAA,IACvB,sBAAsB,EAAE;AAAA,IACxB,sBAAsB,EAAE;AAAA,IACxB,sBAAsB,EAAE;AAAA,IACxB,qBAAqB,EAAE;AAAA,IACvB,sBAAsB,EAAE;AAAA,IACxB,wBAAwB,EAAE;AAAA,IAC1B,qBAAqB,EAAE;AAAA,IACvB,qBAAqB,EAAE;AAAA,IACvB,oBAAoB,EAAE;AAAA,IACtB,qBAAqB,EAAE;AAAA,IACvB,uBAAuB,EAAE;AAAA,IACzB,mBAAmB,EAAE;AAAA,IACrB,wBAAwB,EAAE;AAAA,IAC1B,mBAAmB,EAAE;AAAA,IACrB,wBAAwB,EAAE;AAAA,IAC1B,aAAa,EAAE;AAAA,IACf,gBAAgB,EAAE;AAAA,IAClB,qBAAqB,EAAE;AAAA,IACvB,YAAY,EAAE;AAAA,IACd,iBAAiB,EAAE;AAAA,IACnB,aAAa,EAAE;AAAA,IACf,kBAAkB,EAAE;AAAA,IACpB,eAAe,EAAE;AAAA,IACjB,eAAe,EAAE;AAAA,IACjB,oBAAoB,EAAE;AAAA,IACtB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA;AAAA,IAER,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF;AAqBO,IAAM,mBAAmB;AAOzB,SAAS,SAAS,EAAE,QAAQ,OAAO,OAAO,MAAM,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,SAAS,EAAE,GAAG,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,SAAS,GAAG,GAAG,SAAS,UAAU,EAAE,OAAO,GAAoB;AACpN,QAAM,SAAS,UAAU,QAAQ,KAAK;AACtC,QAAM,cAAc,YAAY,gBAAgB,YAAY,KAAK,gBAAgB,SAAS,sBAAmB,gBAAgB,MAAM,KAAK,gBAAgB,GAAG;AAC3J,QAAM,UAAmC,CAAC;AAC1C,QAAM,MAAkF,CAAC;AACzF,MAAI,OAAO;AACT,YAAQ,QAAQ,EAAE,MAAM,UAAU,KAAK,aAAa,MAAM,GAAG,IAAI,YAAY;AAC7E,eAAW,KAAK,OAAO,SAAS,QAAQ,EAAE,KAAK,CAAC,GAAiB;AAC/D,UAAI,EAAE,OAAO,aAAc,KAAI,KAAK,CAAC;AAAA,UAChC,KAAI,KAAK,EAAE,GAAG,GAAG,IAAI,SAAS,EAAE,EAAE,IAAI,SAAS,SAAS,KAAK,IAAI,EAAE,WAAW,IAAI,gBAAgB,IAAI,EAAE,QAAQ,CAAC;AAAA,IACxH;AAAA,EACF;AACA,MAAI,QAAQ;AACV,YAAQ,SAAS,EAAE,MAAM,UAAU,KAAK,aAAa,OAAO,GAAG,IAAI,YAAY;AAC/E,eAAW,KAAK,OAAO,UAAU,QAAQ,EAAE,KAAK,CAAC,GAAiB;AAChE,UAAI,EAAE,OAAO,cAAc;AACzB,YAAI,CAAC,MAAO,KAAI,KAAK,CAAC;AACtB;AAAA,MACF;AACA,UAAI,KAAK,EAAE,GAAG,GAAG,IAAI,UAAU,EAAE,EAAE,IAAI,SAAS,QAAQ,KAAK,IAAI,EAAE,WAAW,GAAG,gBAAgB,IAAI,EAAE,QAAQ,CAAC;AAAA,IAClH;AAAA,EACF;AAEA,QAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAE,EAAE,SAAiD,YAAY,CAAC;AAClG,SAAO,EAAE,SAAS,GAAY,QAAQ,SAAS,QAAQ,MAAM,IAAI,CAAC,MAAO,EAAE,YAAY,SAAY,WAAW,GAAG,SAAS,IAAI,CAAE,EAAE;AACpI;AAEA,IAAM,aAAa,CAAoC,GAAM,QAAgB,OAAO,YAAY,OAAO,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,GAAG,CAAC;;;AJpGpI,SAwGJ,UAtFM,KAlBF;AA1DR,IAAM,aAAmB,oBAA0B,IAAI;AACvD,IAAM,gBAAgB,MAAM;AAC1B,QAAM,MAAY,iBAAW,UAAU;AACvC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,qBAAqB;AAC/C,SAAO;AACT;AA8BO,SAAS,IAAI,EAAE,OAAO,QAAQ,OAAO,IAAI,OAAO,MAAM,QAAQ,OAAO,cAAc,MAAM,WAAW,SAAS,UAAU,MAAM,GAAa;AAC/I,QAAM,EAAE,QAAQ,OAAO,QAAQ,OAAO,IAAI,SAAS;AACnD,QAAM,SAAS,OAAO,SAAS,SAAS;AACxC,QAAM,SAAe,aAAkB,IAAI;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAU,eAAiC,CAAC,CAAC;AACrE,QAAM,WAAiB;AAAA,IACrB,OAAO;AAAA,MACL,KAAK,CAAC,IAAY,SAAiB,UAAU,CAAC,MAAO,EAAE,EAAE,MAAM,OAAO,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAE;AAAA,MAC/F,QAAQ,CAAC,OACP,UAAU,CAAC,MAAM;AACf,cAAM,EAAE,CAAC,EAAE,GAAG,OAAO,GAAG,KAAK,IAAI;AACjC,eAAO;AAAA,MACT,CAAC;AAAA,IACL;AAAA,IACA,CAAC;AAAA,EACH;AACA,QAAM,YAAkB,cAAQ,MAAM,SAAS,EAAE,QAAQ,OAAO,MAAM,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC,GAAI,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC,QAAQ,OAAO,MAAM,QAAQ,KAAK,CAAC;AACrM,QAAM,UAAgB,cAAQ,MAAM,WAAW,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC;AAC9E,QAAM,SAAS,OAAO,OAAO,MAAM;AACnC,QAAM,MAAY,cAAQ,OAAO,EAAE,SAAS,QAAQ,QAAQ,SAAS,IAAI,CAAC,SAAS,QAAQ,QAAQ,CAAC;AACpG,SACE,oBAAC,WAAW,UAAX,EAAoB,OAAO,KAC1B,+BAAC,QAAK,OAAO,CAAC,OAAO,MAAM,EAAE,cAAc,OAAO,IAAI,aAAa,MAAM,eAAe,iBAAiB,MAAM,SAAS,GAAG,KAAK,GAC9H;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,WAAW;AAAA,QAClB,UAAU;AAAA,QACV,cAAY,OAAO,SAAS,GAAG,KAAK,KAAK,OAAO,KAAK,IAAI,CAAC,KAAK;AAAA,QAC/D,SAAS;AAAA,QACT,WAAW;AAAA,QACX,eAAe;AAAA,QACf,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,QACT,mBAAmB,CAAC,MAAM,YAAY,EAAE,QAAQ,EAAE,YAAY,QAA6B,MAAM,EAAE,YAAY,KAAK,CAAC;AAAA,QACrH,SAAS,CAAC,MAAM;AACd,gBAAM,SAAU,EAAE,YAA+C;AACjE,cAAI,OAAQ,WAAU,MAAM;AAAA,QAC9B;AAAA,QAEA;AAAA,8BAAC,UAAO,KAAK,QAAQ,QAAQ,CAAC,GAAG,MAAM,GAAuB,MAAY,UAAU,SAAS,IAAI,KAAK,QAAQ,SAAS,SAAY,QAAQ;AAAA,UAC1I;AAAA;AAAA;AAAA,IACH;AAAA,IACA,oBAAC,QAAK,OAAO,CAAC,OAAO,aAAa,EAAE,iBAAiB,MAAM,UAAU,cAAc,OAAO,GAAG,CAAC,GAC5F,+BAAC,QAAK,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,MAAM,cAAc,CAAC,GACjE;AAAA,sBAAgB;AAAA,MAAU;AAAA,MAAI,gBAAgB;AAAA,OACjD,GACF;AAAA,KACF,GACF;AAEJ;AAEA,SAAS,SAAS,OAAe;AAC/B,QAAM,EAAE,OAAO,IAAI,cAAc;AACjC,QAAM,KAAW,YAAM;AACvB,EAAM,gBAAU,MAAM;AACpB,WAAO,IAAI,IAAI,KAAK;AACpB,WAAO,MAAM,OAAO,OAAO,EAAE;AAAA,EAC/B,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC;AACtB,SAAO;AACT;AAgBO,SAAS,OAAO,EAAE,UAAU,OAAO,SAAS,UAAU,SAAS,GAAgB;AACpF,QAAM,EAAE,QAAQ,IAAI,cAAc;AAClC,QAAM,EAAE,OAAO,QAAQ,OAAO,IAAI,SAAS;AAC3C,QAAM,KAAK,SAAS,KAAK;AACzB,SACE,oBAAC,aAAU,IAAQ,QAAQ,CAAC,GAAG,QAAQ,GAAuB,QAAO,UAAS,UAC5E;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,UAAU,WAAW;AAAA,MAC3B,cAAY;AAAA,MACZ,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,SAAS,MAAM;AACb,eAAO,WAAW;AAClB,kBAAU;AAAA,MACZ;AAAA,MACA,OAAO,OAAO;AAAA,MAEb;AAAA,mBACC,oBAAC,QAAK,OAAO,CAAC,OAAO,aAAa,EAAE,iBAAiB,MAAM,UAAU,aAAa,MAAM,eAAe,cAAc,OAAO,GAAG,CAAC,GAC9H,8BAAC,OAAI,SAAQ,SAAS,iBAAM,GAC9B,IACE;AAAA,QACH,YAAY,oBAAC,QAAK,OAAO,CAAC,OAAO,KAAK,EAAE,iBAAiB,QAAQ,QAAQ,aAAa,QAAQ,UAAU,WAAW,CAAC,EAAE,OAAO,WAAW,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA;AAAA;AAAA,EAC1J,GACF;AAEJ;AAYO,SAAS,aAAa,EAAE,UAAU,OAAO,SAAS,GAAsB;AAC7E,QAAM,EAAE,SAAS,OAAO,IAAI,cAAc;AAC1C,QAAM,KAAK,SAAS,KAAK;AACzB,QAAM,CAAC,KAAK,IAAU,eAAS,MAAM,IAAI,SAAS,MAAM,CAAC,CAAC;AAC1D,EAAM,gBAAU,MAAM;AACpB,QAAI,OAAQ;AACZ,UAAM,OAAO,SAAS,KAAK,SAAS,OAAO,OAAO,EAAE,SAAS,GAAG,UAAU,KAAM,iBAAiB,KAAK,CAAC,CAAC;AACxG,SAAK,MAAM;AACX,WAAO,MAAM,KAAK,KAAK;AAAA,EACzB,GAAG,CAAC,OAAO,MAAM,CAAC;AAClB,SACE,iCACG;AAAA,eAAW,oBAAC,gBAAa,QAAQ,UAAU,QAAQ,UAAU,MAAK,QAAO,IAAK;AAAA,IAC/E,oBAAC,aAAU,IAAQ,QAAQ,CAAC,GAAG,QAAQ,GAAuB,QAAO,UACnE,+BAAC,QAAK,MAAK,OAAM,cAAY,OAAO,YAAU,MAAC,OAAO,OAAO,UAC3D;AAAA,0BAAC,SAAS,MAAT,EAAc,OAAO,CAAC,OAAO,UAAU,EAAE,iBAAiB,QAAQ,QAAQ,SAAS,MAAM,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,OAAO,MAAM,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,MACjP,oBAAC,QAAK,OAAO,CAAC,OAAO,MAAM,EAAE,iBAAiB,QAAQ,QAAQ,aAAa,QAAQ,KAAK,CAAC,GAAG;AAAA,OAC9F,GACF;AAAA,KACF;AAEJ;AAYO,SAAS,aAAa,EAAE,QAAQ,QAAQ,OAAO,SAAS,GAAsB;AACnF,QAAM,EAAE,QAAQ,IAAI,cAAc;AAClC,QAAM,KAAK,aAAmB,YAAM,EAAE,QAAQ,iBAAiB,EAAE,CAAC;AAClE,QAAM,OAAa,cAAQ,MAAM,cAAc,QAAQ,MAAM,GAAG,CAAC,QAAQ,MAAM,CAAC;AAChF,SACE,qBAAC,iBAAc,IAAQ,MACrB;AAAA,wBAAC,SAAM,MAAK,QAAO,IAAI,GAAG,EAAE,SAAS,OAAO,EAAE,cAAc,QAAQ,QAAQ,gBAAgB,SAAS,SAAS,MAAM,KAAK,GAAG;AAAA,IAC5H,oBAAC,SAAM,MAAK,QAAO,IAAI,GAAG,EAAE,SAAS,OAAO,EAAE,cAAc,QAAQ,QAAQ,cAAc,SAAS,SAAS,IAAI,GAAG,gBAAgB,SAAS,SAAS,MAAM,IAAI,GAAG;AAAA,KACpK;AAEJ;AAcO,SAAS,QAAQ,EAAE,QAAQ,cAAc,SAAS,GAAG,GAAiB;AAC3E,QAAM,EAAE,SAAS,OAAO,IAAI,cAAc;AAC1C,QAAM,KAAK,cAAoB,YAAM,EAAE,QAAQ,iBAAiB,EAAE,CAAC;AACnE,EAAM,gBAAU,MAAM;AACpB,eAAW,KAAK,OAAQ,QAAO,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK;AAC3D,WAAO,MAAM,OAAO,QAAQ,CAAC,MAAM,OAAO,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAAA,EACnE,GAAG,CAAC,QAAQ,QAAQ,EAAE,CAAC;AACvB,QAAM,OAAa;AAAA,IACjB,OAAO,EAAE,MAAM,qBAAqB,UAAU,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,WAAW,YAAY,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,MAAM,SAAS,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;AAAA,IAC5L,CAAC,MAAM;AAAA,EACT;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,SAAO;AAAA,MACP,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,SAAS,CAAC,MAAe;AACvB,cAAM,UAAW,EAAyD,aAAa,WAAW,CAAC;AACnG,cAAM,MAAM,SAAS,YAAY;AACjC,cAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG;AAC7C,YAAI,MAAO,gBAAe,KAAK;AAAA,MACjC;AAAA,MAEA;AAAA,4BAAC,SAAM,MAAK,UAAS,IAAI,GAAG,EAAE,WAAW,QAAQ,CAAC,OAAO,aAAa,GAAG,OAAO,EAAE,gBAAgB,QAAQ,QAAQ,iBAAiB,CAAC,QAAQ,CAAC,OAAO,aAAa,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,uBAAuB,GAAG,uBAAuB,QAAQ,KAAK,GAAG;AAAA,QAC1P,oBAAC,SAAM,MAAK,UAAS,IAAI,GAAG,EAAE,UAAU,QAAQ,CAAC,OAAO,aAAa,GAAG,QAAQ,EAAE,cAAc,CAAC,OAAO,yBAAyB,GAAG,aAAa,CAAC,kBAAkB,GAAG,aAAa,GAAG,GAAG,OAAO,EAAE,cAAc,QAAQ,SAAS,GAAG;AAAA,QACrO,oBAAC,SAAM,MAAK,UAAS,IAAI,GAAG,EAAE,WAAW,QAAQ,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,OAAO,EAAE,gBAAgB,QAAQ,QAAQ,iBAAiB,GAAG,uBAAuB,KAAK,uBAAuB,QAAQ,KAAK,GAAG;AAAA;AAAA;AAAA,EAClN;AAEJ;AAiBA,IAAM,eAAqC;AAAA,EACzC,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,KAAK;AAAA,EACL,UAAU,CAAC,MAAM,GAAG,CAAC;AACvB;AAsBO,SAAS,eAAe,EAAE,OAAO,OAAO,eAAe,QAAQ,OAAO,IAAI,QAAQ,MAAM,QAAQ,aAAa,MAAM,QAAQ,OAAO,OAAO,GAAG,IAAI,GAAwB;AAC7K,QAAM,SAAS,EAAE,GAAG,cAAc,GAAG,MAAM;AAC3C,QAAM,EAAE,OAAO,QAAQ,OAAO,IAAI,SAAS;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAU,eAAwB,UAAU;AACpE,QAAM,CAAC,QAAQ,SAAS,IAAU,eAAiB,KAAK;AACxD,QAAM,CAAC,QAAQ,SAAS,IAAU,eAAyD,MAAM;AACjG,QAAM,SAAS,YAAY;AACzB,cAAU,UAAU;AACpB,QAAI;AACF,UAAI,CAAE,MAAM,gBAAgB,mBAAmB,EAAI,QAAO,UAAU,QAAQ;AAC5E,YAAM,IAAI,MAAM,gBAAgB,mBAAmB;AACnD,UAAI,CAAC,EAAG,QAAO,UAAU,aAAa;AACtC,YAAM,OAAe,CAAC,EAAE,OAAO,WAAW,EAAE,OAAO,QAAQ;AAC3D,aAAO,SAAS;AAChB,gBAAU,IAAI;AACd,gBAAU,IAAI;AACd,oBAAc,IAAI;AAClB,gBAAU,MAAM;AAAA,IAClB,QAAQ;AACN,gBAAU,aAAa;AAAA,IACzB;AAAA,EACF;AACA,QAAM,UAAU,WAAW,aAAa,OAAO,WAAW,WAAW,WAAW,OAAO,SAAS,WAAW,gBAAgB,OAAO,cAAc;AAChJ,SACE,qBAAC,QAAK,MAAK,SAAQ,cAAY,OAAO,OAAO,CAAC,OAAO,QAAQ,KAAK,GAChE;AAAA,yBAAC,QAAK,OAAO,OAAO,aAClB;AAAA,2BAAC,OAAK,GAAG,KAAK,OAAc,QAAQ,QAAQ,MAAY,WAAW,CAAC,MAAM,cAAc,EAAE,MAAM,GAAG,OAAO,WAAW,cAClH;AAAA,eAAO,oBAAC,gBAAa,QAAQ,OAAO,QAAQ,MAAM,IAAK;AAAA,QACvD,SAAS,oBAAC,gBAAa,UAAU,QAAQ,OAAO,OAAO,KAAK,IAAK;AAAA,SACpE;AAAA,MACA,oBAAC,QAAK,eAAc,QAAO,OAAO,OAAO,KACvC,+BAAC,OAAI,OAAO,IAAI,QAAQ,IAAI,SAAQ,aAAY,eAAW,MACzD;AAAA,4BAAC,QAAK,GAAE,mFAAkF,MAAM,MAAM,QAAQ;AAAA,QAC9G,oBAAC,UAAO,IAAI,IAAI,IAAI,MAAM,GAAG,KAAK,MAAM,MAAM,UAAU;AAAA,SAC1D,GACF;AAAA,MACA,qBAAC,QAAK,OAAO,OAAO,KAAK,eAAc,YACpC;AAAA,iBACC,oBAAC,QAAK,OAAO,CAAC,OAAO,MAAM,EAAE,iBAAiB,MAAM,UAAU,aAAa,MAAM,eAAe,cAAc,OAAO,KAAK,CAAC,GACzH,8BAAC,OAAI,SAAQ,SAAQ,aAAU,UAC5B,iBAAO,SAAS,eAAe,eAAe,QAAQ,KAAK,GAAG,MAAM,CAAC,GACxE,GACF,IAEA,oBAAC,QAAK;AAAA,QAER,oBAAC,aAAU,MAAK,UAAS,cAAY,OAAO,QAAQ,UAAU,WAAW,YAAY,SAAS,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,MAAM,EAAE,iBAAiB,MAAM,UAAU,aAAa,MAAM,eAAe,cAAc,OAAO,KAAK,CAAC,GACtO,8BAAC,OAAI,SAAQ,SAAS,qBAAW,aAAa,OAAO,WAAW,OAAO,QAAO,GAChF;AAAA,SACF;AAAA,OACF;AAAA,IACC,WAAW,WAAW,aACrB,oBAAC,OAAI,SAAQ,WAAU,MAAK,UAAS,MAAK,SACvC,mBACH,IACE;AAAA,KACN;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,MAAM,EAAE,QAAQ,KAAK,UAAU,UAAU,aAAa,WAAW,eAAe,WAAW,UAAU;AAAA,EACrG,aAAa,EAAE,UAAU,YAAY,OAAO,GAAG,QAAQ,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,SAAS,IAAI;AAAA,EACjH,iBAAiB,EAAE,UAAU,GAAG;AAAA,EAChC,YAAY,EAAE,YAAY,UAAU,gBAAgB,UAAU,UAAU,IAAI,WAAW,GAAG;AAAA,EAC1F,aAAa,EAAE,UAAU,YAAY,QAAQ,IAAI,mBAAmB,GAAG,iBAAiB,GAAG,aAAa,WAAW,cAAc;AAAA,EACjI,KAAK,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,aAAa,IAAI;AAAA,EAChE,UAAU,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,UAAU,gBAAgB,SAAS;AAAA,EAClF,UAAU,EAAE,UAAU,YAAY,OAAO,IAAI,QAAQ,IAAI,cAAc,EAAE;AAAA,EACzE,MAAM,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,aAAa,EAAE;AAAA,EAC/D,QAAQ,EAAE,KAAK,GAAG,WAAW,UAAU;AAAA,EACvC,aAAa,EAAE,QAAQ,IAAI;AAAA,EAC3B,KAAK,EAAE,UAAU,YAAY,MAAM,OAAO,KAAK,OAAO,YAAY,KAAK,WAAW,IAAI;AAAA,EACtF,KAAK,EAAE,UAAU,YAAY,MAAM,IAAI,OAAO,IAAI,QAAQ,IAAI,eAAe,OAAO,gBAAgB,iBAAiB,YAAY,UAAU,KAAK,EAAE;AAAA,EAClJ,MAAM,EAAE,mBAAmB,IAAI,iBAAiB,GAAG,aAAa,WAAW,cAAc;AAAA,EACzF,MAAM,EAAE,WAAW,IAAI,mBAAmB,IAAI,gBAAgB,UAAU,aAAa,WAAW,cAAc;AAChH,CAAC;","names":["base"]}
package/dist/native.d.ts CHANGED
@@ -2276,9 +2276,16 @@ type Theme = {
2276
2276
  readonly edgeOnFill: string;
2277
2277
  /** …what you fill (a field, a track) is a well. */
2278
2278
  readonly edgeWell: string;
2279
- /** Frosted glass: what floats over the screen (a toast, a sheet). */
2279
+ /** What floats over the screen (a toast, a sheet): an opaque sheet since Cahier (ADR-004). */
2280
2280
  readonly glassBg: string;
2281
2281
  readonly glassBorder: string;
2282
+ /** The notebook (Cahier, ADR-004): the ruling, the red margin, the specimen tag. */
2283
+ readonly paperRuleMajor: string;
2284
+ readonly paperRuleMinor: string;
2285
+ readonly paperRuleMargin: string;
2286
+ readonly paperTag: string;
2287
+ readonly paperTagEdge: string;
2288
+ readonly paperTagInk: string;
2282
2289
  };
2283
2290
  /** Corner radii, in points. */
2284
2291
  type Radius = {
package/dist/native.js CHANGED
@@ -198,17 +198,17 @@ function useOpen({ open, defaultOpen = false, onOpenChange }) {
198
198
 
199
199
  // ../tokens/dist/native.js
200
200
  var themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({
201
- "surface0": "#0c0c0e",
202
- "surface1": "#161618",
203
- "surface2": "#1f1f23",
204
- "surface3": "#2a2a2d",
205
- "media": "#1b1b1d",
206
- "borderSubtle": "rgba(255,255,255,0.06)",
207
- "borderDefault": "rgba(255,255,255,0.1)",
208
- "borderStrong": "rgba(255,255,255,0.16)",
209
- "textPrimary": "#f5f5f5",
210
- "textSecondary": "#a0a0a7",
211
- "textMuted": "#92929b",
201
+ "surface0": "#151b18",
202
+ "surface1": "#191f1c",
203
+ "surface2": "#1c221f",
204
+ "surface3": "#262e2a",
205
+ "media": "#1e2521",
206
+ "borderSubtle": "rgba(231,240,230,0.07)",
207
+ "borderDefault": "rgba(231,240,230,0.12)",
208
+ "borderStrong": "rgba(231,240,230,0.2)",
209
+ "textPrimary": "#ecf0ea",
210
+ "textSecondary": "#bcc8c0",
211
+ "textMuted": "#a7b4ab",
212
212
  "textOnMedia": "#ffffff",
213
213
  "accent": "#3e76a8",
214
214
  "accentHover": "#346793",
@@ -217,9 +217,9 @@ var themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze
217
217
  "accent2": "#3e76a8",
218
218
  "onAccent": "#ffffff",
219
219
  "ring": "#3e76a8",
220
- "brandGradientFrom": "#121a21",
221
- "brandGradientVia": "#0f1114",
222
- "brandGradientTo": "#0c0c0e",
220
+ "brandGradientFrom": "#151b18",
221
+ "brandGradientVia": "#151b18",
222
+ "brandGradientTo": "#151b18",
223
223
  "success": "#10b77f",
224
224
  "successText": "#36d399",
225
225
  "successSoft": "rgba(16,183,127,0.14)",
@@ -234,25 +234,31 @@ var themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze
234
234
  "scrim": "rgba(0,0,0,0.6)",
235
235
  "scrimStrong": "rgba(0,0,0,0.8)",
236
236
  "overlay": "rgba(0,0,0,0.7)",
237
- "surfaceSheen": "rgba(255,255,255,0.045)",
237
+ "paperRuleMajor": "rgba(217,232,222,0.09)",
238
+ "paperRuleMinor": "rgba(217,232,222,0.045)",
239
+ "paperRuleMargin": "#e08071",
240
+ "paperTag": "#2d3932",
241
+ "paperTagEdge": "#586a5f",
242
+ "paperTagInk": "#e9eee7",
243
+ "surfaceSheen": "rgba(255,255,255,0)",
238
244
  "fillShade": "rgba(0,0,0,0.12)",
239
- "edgeLight": "rgba(255,255,255,0.07)",
245
+ "edgeLight": "rgba(255,255,255,0)",
240
246
  "edgeOnFill": "rgba(255,255,255,0.22)",
241
247
  "edgeWell": "rgba(4,4,7,0.5)",
242
- "glassBg": "rgba(29,29,32,0.88)",
248
+ "glassBg": "#191f1c",
243
249
  "glassBorder": "rgba(255,255,255,0.1)"
244
250
  }), light: /* @__PURE__ */ Object.freeze({
245
- "surface0": "#fafafa",
246
- "surface1": "#ffffff",
247
- "surface2": "#f1f1f3",
248
- "surface3": "#e4e4e7",
249
- "media": "#e9e9ec",
250
- "borderSubtle": "rgba(0,0,0,0.06)",
251
- "borderDefault": "rgba(0,0,0,0.1)",
252
- "borderStrong": "rgba(0,0,0,0.16)",
253
- "textPrimary": "#18181b",
254
- "textSecondary": "#56565d",
255
- "textMuted": "#64646d",
251
+ "surface0": "#f4f6f3",
252
+ "surface1": "#fbfcfb",
253
+ "surface2": "#f0f3ef",
254
+ "surface3": "#dfe3de",
255
+ "media": "#e5e8e3",
256
+ "borderSubtle": "rgba(31,59,91,0.1)",
257
+ "borderDefault": "rgba(31,59,91,0.17)",
258
+ "borderStrong": "rgba(31,59,91,0.28)",
259
+ "textPrimary": "#1d3654",
260
+ "textSecondary": "#405064",
261
+ "textMuted": "#4f5b69",
256
262
  "textOnMedia": "#ffffff",
257
263
  "accent": "#2a5f8d",
258
264
  "accentHover": "#1f4d75",
@@ -261,9 +267,9 @@ var themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze
261
267
  "accent2": "#2a5f8d",
262
268
  "onAccent": "#ffffff",
263
269
  "ring": "#2a5f8d",
264
- "brandGradientFrom": "#e7eef4",
265
- "brandGradientVia": "#f5f7fa",
266
- "brandGradientTo": "#fafafa",
270
+ "brandGradientFrom": "#f4f6f3",
271
+ "brandGradientVia": "#f4f6f3",
272
+ "brandGradientTo": "#f4f6f3",
267
273
  "success": "#10b77f",
268
274
  "successText": "#0a714e",
269
275
  "successSoft": "rgba(16,183,127,0.1)",
@@ -278,24 +284,30 @@ var themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze
278
284
  "scrim": "rgba(0,0,0,0.6)",
279
285
  "scrimStrong": "rgba(0,0,0,0.8)",
280
286
  "overlay": "rgba(0,0,0,0.7)",
281
- "surfaceSheen": "rgba(255,255,255,0.7)",
287
+ "paperRuleMajor": "rgba(69,109,161,0.24)",
288
+ "paperRuleMinor": "rgba(69,109,161,0.1)",
289
+ "paperRuleMargin": "#a53127",
290
+ "paperTag": "#eadfc2",
291
+ "paperTagEdge": "#b4a274",
292
+ "paperTagInk": "#282620",
293
+ "surfaceSheen": "rgba(255,255,255,0)",
282
294
  "fillShade": "rgba(0,0,0,0.12)",
283
- "edgeLight": "rgba(255,255,255,0.9)",
295
+ "edgeLight": "rgba(255,255,255,0)",
284
296
  "edgeOnFill": "rgba(255,255,255,0.22)",
285
297
  "edgeWell": "rgba(48,52,80,0.08)",
286
- "glassBg": "rgba(255,255,255,0.88)",
298
+ "glassBg": "#fbfcfb",
287
299
  "glassBorder": "rgba(0,0,0,0.08)"
288
300
  }) });
289
301
  var radius = /* @__PURE__ */ Object.freeze({
290
- "xs": 6,
291
- "sm": 8,
292
- "md": 12,
293
- "lg": 16,
294
- "xl": 20,
295
- "2xl": 28,
302
+ "xs": 2,
303
+ "sm": 2,
304
+ "md": 2,
305
+ "lg": 0,
306
+ "xl": 0,
307
+ "2xl": 0,
296
308
  "full": 9999
297
309
  });
298
- var 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 }) });
310
+ var motion = /* @__PURE__ */ Object.freeze({ ease: /* @__PURE__ */ Object.freeze([0.45, 0, 0.2, 1]), spring: /* @__PURE__ */ Object.freeze([0.34, 1.36, 0.64, 1]), duration: /* @__PURE__ */ Object.freeze({ "instant": 90, "fast": 150, "base": 200 }) });
299
311
  var marks = /* @__PURE__ */ Object.freeze({
300
312
  "krizaka": [
301
313
  [
@@ -833,7 +845,7 @@ function defineRecipe(config) {
833
845
 
834
846
  // src/badge/recipe.ts
835
847
  var badgeRecipe = defineRecipe({
836
- base: "inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-full font-semibold uppercase tracking-wider",
848
+ base: "inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-sm font-semibold ",
837
849
  variants: {
838
850
  tone: {
839
851
  neutral: "bg-surface-3 text-fg-secondary",
@@ -1203,13 +1215,13 @@ var cardRecipe = defineRecipe({
1203
1215
  title: "line-clamp-1 text-sm font-semibold text-fg transition-colors group-hover:text-fg-accent",
1204
1216
  description: "line-clamp-2 text-xs text-fg-secondary",
1205
1217
  stat: "min-w-0",
1206
- statLabel: "text-[10px] font-semibold uppercase tracking-wider text-fg-secondary",
1218
+ statLabel: "font-mono text-[11.5px] text-fg-secondary",
1207
1219
  statValue: "font-display text-xl font-black tabular-nums text-fg",
1208
1220
  footer: "relative mt-auto flex items-center gap-2 border-t border-border-subtle pt-3 text-xs text-fg-secondary"
1209
1221
  },
1210
1222
  variants: {
1211
1223
  radius: { md: { root: "rounded-md" }, lg: { root: "rounded-lg" }, xl: { root: "rounded-xl" } },
1212
- tone: { default: {}, elevated: { root: "bg-surface-2 shadow-md" }, glass: { root: "bg-surface-1/70 backdrop-blur-md" } },
1224
+ tone: { default: {}, elevated: { root: "bg-surface-2 shadow-md" }, glass: { root: "bg-glass border-glass-border" } },
1213
1225
  interactive: { true: { root: "duration-150 hover:border-border-strong hover:bg-surface-2" } },
1214
1226
  padding: { none: { body: "p-0" }, sm: { body: "p-3" }, md: { body: "p-4" }, lg: { body: "p-6" } }
1215
1227
  },
@@ -1544,7 +1556,7 @@ import { Pressable as Pressable6, ScrollView, StyleSheet as StyleSheet10, Text a
1544
1556
  var chipRecipe = defineRecipe({
1545
1557
  slots: {
1546
1558
  group: "flex flex-wrap items-center gap-2 data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch",
1547
- base: "inline-flex shrink-0 select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-full border font-semibold transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40 border-border-default bg-surface-1 text-fg-secondary hover:border-border-strong hover:text-fg data-[state=on]:border-accent data-[state=on]:bg-accent-soft data-[state=on]:text-fg",
1559
+ base: "inline-flex shrink-0 select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-sm border font-semibold transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40 border-border-default bg-surface-1 text-fg-secondary hover:border-border-strong hover:text-fg data-[state=on]:border-accent data-[state=on]:bg-accent-soft data-[state=on]:text-fg",
1548
1560
  remove: "-mr-1.5 inline-flex h-6 w-6 items-center justify-center rounded-full text-fg-secondary transition-colors hover:bg-surface-3 hover:text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring"
1549
1561
  },
1550
1562
  variants: {