@krizaka/ui 3.7.1 → 3.9.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 (303) hide show
  1. package/README.md +14 -12
  2. package/dist/action-bar.js +2 -1
  3. package/dist/action-bar.js.map +1 -1
  4. package/dist/app-shell.d.ts +81 -3
  5. package/dist/app-shell.js +163 -35
  6. package/dist/app-shell.js.map +1 -1
  7. package/dist/audio-player.js +1 -1
  8. package/dist/badge.d.ts +36 -39
  9. package/dist/badge.js +11 -2
  10. package/dist/badge.js.map +1 -1
  11. package/dist/blocks.css +56 -4
  12. package/dist/button-BmCrLCq7.d.ts +114 -0
  13. package/dist/button.d.ts +48 -48
  14. package/dist/button.js +2 -1
  15. package/dist/card.d.ts +111 -111
  16. package/dist/card.js +10 -2
  17. package/dist/card.js.map +1 -1
  18. package/dist/chip.d.ts +24 -24
  19. package/dist/chip.js +10 -2
  20. package/dist/chip.js.map +1 -1
  21. package/dist/{chunk-UOMP6VOZ.js → chunk-276PTQMQ.js} +10 -4
  22. package/dist/chunk-276PTQMQ.js.map +1 -0
  23. package/dist/{chunk-Z6FUPB3Q.js → chunk-2NB27LM7.js} +11 -3
  24. package/dist/chunk-2NB27LM7.js.map +1 -0
  25. package/dist/chunk-2VNYHG4E.js +9 -0
  26. package/dist/chunk-2VNYHG4E.js.map +1 -0
  27. package/dist/{chunk-ND3L5VHT.js → chunk-5Z7FWCV2.js} +2 -2
  28. package/dist/{chunk-YH4LMWRU.js → chunk-7UCPGXKN.js} +11 -3
  29. package/dist/chunk-7UCPGXKN.js.map +1 -0
  30. package/dist/{chunk-AZPKXP3O.js → chunk-AFY35UCB.js} +6 -1
  31. package/dist/{chunk-AZPKXP3O.js.map → chunk-AFY35UCB.js.map} +1 -1
  32. package/dist/{chunk-LCZXS6AK.js → chunk-CKSHLSDH.js} +5 -5
  33. package/dist/chunk-CKSHLSDH.js.map +1 -0
  34. package/dist/chunk-D3T54RSL.js +11 -0
  35. package/dist/chunk-D3T54RSL.js.map +1 -0
  36. package/dist/{chunk-ZKVQGXLD.js → chunk-FKBHWS4N.js} +2 -2
  37. package/dist/{chunk-BRKMQ6JV.js → chunk-FZBWEDQI.js} +1 -23
  38. package/dist/chunk-FZBWEDQI.js.map +1 -0
  39. package/dist/{chunk-HCNOOPZE.js → chunk-KVDB4GXV.js} +2 -2
  40. package/dist/{chunk-RUPNPMP3.js → chunk-OWC2LZD2.js} +11 -3
  41. package/dist/chunk-OWC2LZD2.js.map +1 -0
  42. package/dist/{chunk-FDCMBWUU.js → chunk-REPTKUJ6.js} +4 -4
  43. package/dist/chunk-REPTKUJ6.js.map +1 -0
  44. package/dist/{chunk-JZPVUJIX.js → chunk-UB2BI3AW.js} +1 -1
  45. package/dist/{chunk-JZPVUJIX.js.map → chunk-UB2BI3AW.js.map} +1 -1
  46. package/dist/code-block.d.ts +32 -10
  47. package/dist/code-block.js +51 -43
  48. package/dist/code-block.js.map +1 -1
  49. package/dist/combobox.d.ts +3 -3
  50. package/dist/combobox.js +4 -3
  51. package/dist/command.js +3 -2
  52. package/dist/command.js.map +1 -1
  53. package/dist/component-page.js.map +1 -1
  54. package/dist/confirm-button.d.ts +1 -1
  55. package/dist/confirm-button.js +2 -1
  56. package/dist/confirm-button.js.map +1 -1
  57. package/dist/continue-prompt.js +11 -3
  58. package/dist/continue-prompt.js.map +1 -1
  59. package/dist/data-table.js +7 -6
  60. package/dist/data-table.js.map +1 -1
  61. package/dist/date-picker.js +1 -1
  62. package/dist/dialog.js +3 -2
  63. package/dist/dialog.js.map +1 -1
  64. package/dist/file-upload.d.ts +12 -1
  65. package/dist/file-upload.js +73 -89
  66. package/dist/file-upload.js.map +1 -1
  67. package/dist/filter-bar.js +3 -2
  68. package/dist/{geometry-CbOU4rtL.d.ts → geometry-B2E8oFhg.d.ts} +1 -1
  69. package/dist/image-cropper.js +1 -1
  70. package/dist/index.d.ts +7 -5
  71. package/dist/index.js +26 -24
  72. package/dist/index.js.map +1 -1
  73. package/dist/list.js +1 -1
  74. package/dist/map.js +1 -1
  75. package/dist/map.js.map +1 -1
  76. package/dist/markdown.d.ts +38 -0
  77. package/dist/markdown.js +150 -0
  78. package/dist/markdown.js.map +1 -0
  79. package/dist/mascot-quote.d.ts +1 -1
  80. package/dist/mascot-quote.js.map +1 -1
  81. package/dist/mascot-state.d.ts +1 -1
  82. package/dist/mascot-state.js +1 -1
  83. package/dist/mascots.d.ts +2 -2
  84. package/dist/mascots.js +1 -1
  85. package/dist/match-dialog.js +2 -1
  86. package/dist/match-dialog.js.map +1 -1
  87. package/dist/media-capture.js +1 -1
  88. package/dist/native/map.js +1 -1
  89. package/dist/native/map.js.map +1 -1
  90. package/dist/native/markdown.d.ts +24 -0
  91. package/dist/native/markdown.js +200 -0
  92. package/dist/native/markdown.js.map +1 -0
  93. package/dist/native.d.ts +10 -14
  94. package/dist/native.js +383 -119
  95. package/dist/native.js.map +1 -1
  96. package/dist/recipes.d.ts +143 -0
  97. package/dist/recipes.js +180 -0
  98. package/dist/recipes.js.map +1 -0
  99. package/dist/search-field.js +2 -2
  100. package/dist/status-page.d.ts +1 -1
  101. package/dist/status-page.js.map +1 -1
  102. package/dist/swipe-deck.js +1 -1
  103. package/dist/tag-input.js +4 -3
  104. package/dist/tag-input.js.map +1 -1
  105. package/dist/tag-selector.js +2 -1
  106. package/dist/tag-selector.js.map +1 -1
  107. package/dist/theme.d.ts +1 -1
  108. package/dist/theme.js +2 -1
  109. package/dist/theme.js.map +1 -1
  110. package/dist/tree-view.js +1 -1
  111. package/dist/vertical-video.js +2 -1
  112. package/dist/vertical-video.js.map +1 -1
  113. package/dist/video-player.js +1 -1
  114. package/dist/video-trimmer.js +1 -1
  115. package/dist/virtual.js +2 -2
  116. package/package.json +49 -18
  117. package/registry/achievement.json +1 -1
  118. package/registry/action-bar.json +1 -1
  119. package/registry/activity-feed.json +1 -1
  120. package/registry/alert.json +1 -1
  121. package/registry/app-shell.json +135 -12
  122. package/registry/argument-card.json +1 -1
  123. package/registry/audio-player.json +2 -2
  124. package/registry/auth-layout.json +1 -1
  125. package/registry/avatar.json +1 -1
  126. package/registry/badge.json +9 -3
  127. package/registry/button.json +7 -2
  128. package/registry/card-grid.json +1 -1
  129. package/registry/card.json +8 -3
  130. package/registry/catalogue-page.json +1 -1
  131. package/registry/changelog-page.json +1 -1
  132. package/registry/chat.json +1 -1
  133. package/registry/checkbox.json +1 -1
  134. package/registry/chip-link.json +1 -1
  135. package/registry/chip.json +9 -3
  136. package/registry/choice-grid.json +1 -1
  137. package/registry/code-block.json +65 -21
  138. package/registry/combobox.json +4 -3
  139. package/registry/command.json +1 -1
  140. package/registry/component-page.json +4 -4
  141. package/registry/confirm-button.json +1 -1
  142. package/registry/contact-page.json +1 -1
  143. package/registry/continue-prompt.json +1 -1
  144. package/registry/countdown.json +1 -1
  145. package/registry/cta-panel.json +1 -1
  146. package/registry/dashboard-layout.json +1 -1
  147. package/registry/data-table.json +2 -2
  148. package/registry/date-picker.json +3 -3
  149. package/registry/decision-list.json +1 -1
  150. package/registry/description-list.json +1 -1
  151. package/registry/detail-layout.json +1 -1
  152. package/registry/dialog.json +1 -1
  153. package/registry/docs-article-page.json +1 -1
  154. package/registry/docs-hub-page.json +1 -1
  155. package/registry/docs-layout.json +1 -1
  156. package/registry/dropdown-menu.json +1 -1
  157. package/registry/empty-state.json +1 -1
  158. package/registry/error-page.json +1 -1
  159. package/registry/examples/app-shell/console.d.ts +4 -0
  160. package/registry/examples/app-shell/console.js +93 -0
  161. package/registry/examples/app-shell/console.tsx +103 -0
  162. package/registry/examples/badge/native/dot.dark.png +0 -0
  163. package/registry/examples/badge/native/dot.light.png +0 -0
  164. package/registry/examples/badge/native/scrim.dark.png +0 -0
  165. package/registry/examples/badge/native/scrim.light.png +0 -0
  166. package/registry/examples/badge/native/tones.dark.png +0 -0
  167. package/registry/examples/badge/native/tones.light.png +0 -0
  168. package/registry/examples/card/native/default.dark.png +0 -0
  169. package/registry/examples/card/native/default.light.png +0 -0
  170. package/registry/examples/card/native/elevated.light.png +0 -0
  171. package/registry/examples/chip/native/multiple.dark.png +0 -0
  172. package/registry/examples/chip/native/multiple.light.png +0 -0
  173. package/registry/examples/chip/native/removable.dark.png +0 -0
  174. package/registry/examples/chip/native/removable.light.png +0 -0
  175. package/registry/examples/chip/native/single.dark.png +0 -0
  176. package/registry/examples/chip/native/single.light.png +0 -0
  177. package/registry/examples/chip/native/toggle.dark.png +0 -0
  178. package/registry/examples/chip/native/toggle.light.png +0 -0
  179. package/registry/examples/code-block/annotated.d.ts +4 -0
  180. package/registry/examples/code-block/annotated.js +31 -0
  181. package/registry/examples/code-block/annotated.tsx +26 -0
  182. package/registry/examples/component-page/button.tsx +1 -1
  183. package/registry/examples/form/native/amount.dark.png +0 -0
  184. package/registry/examples/form/native/amount.light.png +0 -0
  185. package/registry/examples/landing-page/krizaka.js +1 -1
  186. package/registry/examples/landing-page/krizaka.tsx +1 -1
  187. package/registry/examples/markdown/ai-stream.d.ts +4 -0
  188. package/registry/examples/markdown/ai-stream.js +31 -0
  189. package/registry/examples/markdown/ai-stream.tsx +32 -0
  190. package/registry/examples/markdown/basic.d.ts +4 -0
  191. package/registry/examples/markdown/basic.js +26 -0
  192. package/registry/examples/markdown/basic.tsx +22 -0
  193. package/registry/examples/markdown/native/ai-stream.d.ts +4 -0
  194. package/registry/examples/markdown/native/ai-stream.dark.png +0 -0
  195. package/registry/examples/markdown/native/ai-stream.js +17 -0
  196. package/registry/examples/markdown/native/ai-stream.light.png +0 -0
  197. package/registry/examples/markdown/native/ai-stream.tsx +17 -0
  198. package/registry/examples/markdown/native/basic.d.ts +4 -0
  199. package/registry/examples/markdown/native/basic.dark.png +0 -0
  200. package/registry/examples/markdown/native/basic.js +28 -0
  201. package/registry/examples/markdown/native/basic.light.png +0 -0
  202. package/registry/examples/markdown/native/basic.tsx +27 -0
  203. package/registry/examples/mascots/flock.tsx +1 -1
  204. package/registry/examples/profile-card/match.js +1 -1
  205. package/registry/examples/profile-card/match.tsx +1 -1
  206. package/registry/examples/recipes/tone-chip.d.ts +4 -0
  207. package/registry/examples/recipes/tone-chip.js +46 -0
  208. package/registry/examples/recipes/tone-chip.tsx +32 -0
  209. package/registry/examples/screen/native/profile.dark.png +0 -0
  210. package/registry/examples/screen/native/profile.light.png +0 -0
  211. package/registry/examples/status-page/building.js +1 -1
  212. package/registry/examples/status-page/building.tsx +1 -1
  213. package/registry/examples/tag-selector/native/interests.dark.png +0 -0
  214. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  215. package/registry/field.json +1 -1
  216. package/registry/file-upload.json +8 -3
  217. package/registry/filter-bar.json +1 -1
  218. package/registry/form.json +2 -2
  219. package/registry/gallery-page.json +1 -1
  220. package/registry/glow-card.json +1 -1
  221. package/registry/goal-gauge.json +1 -1
  222. package/registry/how-it-works-page.json +1 -1
  223. package/registry/image-cropper.json +2 -2
  224. package/registry/index.json +77 -17
  225. package/registry/iso.json +1 -1
  226. package/registry/kanban.json +1 -1
  227. package/registry/kbd.json +1 -1
  228. package/registry/landing-page.json +3 -3
  229. package/registry/landscape.json +1 -1
  230. package/registry/legal-page.json +1 -1
  231. package/registry/link-card.json +1 -1
  232. package/registry/list.json +2 -2
  233. package/registry/loader.json +4 -4
  234. package/registry/longform-page.json +1 -1
  235. package/registry/map.json +3 -3
  236. package/registry/markdown.json +266 -0
  237. package/registry/marketing-layout.json +1 -1
  238. package/registry/marquee.json +1 -1
  239. package/registry/mascot-quote.json +1 -1
  240. package/registry/mascot-state.json +1 -1
  241. package/registry/mascots.json +5 -5
  242. package/registry/match-dialog.json +1 -1
  243. package/registry/media-capture.json +2 -2
  244. package/registry/meter.json +1 -1
  245. package/registry/nav-bar.json +1 -1
  246. package/registry/number-ticker.json +1 -1
  247. package/registry/page-header.json +1 -1
  248. package/registry/page-hero.json +1 -1
  249. package/registry/page.json +1 -1
  250. package/registry/pagination.json +1 -1
  251. package/registry/photo-grid.json +1 -1
  252. package/registry/pointer-light.json +1 -1
  253. package/registry/popover.json +1 -1
  254. package/registry/pricing-page.json +1 -1
  255. package/registry/product-page.json +3 -3
  256. package/registry/profile-card.json +2 -2
  257. package/registry/progress.json +1 -1
  258. package/registry/promise-card.json +1 -1
  259. package/registry/radio-group.json +1 -1
  260. package/registry/recipes.json +99 -0
  261. package/registry/scroll-stage.json +1 -1
  262. package/registry/search-field.json +4 -3
  263. package/registry/section-backdrop.json +1 -1
  264. package/registry/separator.json +1 -1
  265. package/registry/settings-layout.json +1 -1
  266. package/registry/skeleton.json +1 -1
  267. package/registry/skip-link.json +1 -1
  268. package/registry/slider.json +1 -1
  269. package/registry/slot.json +1 -1
  270. package/registry/spinner.json +1 -1
  271. package/registry/split-view.json +1 -1
  272. package/registry/stage-banner.json +1 -1
  273. package/registry/stat.json +1 -1
  274. package/registry/status-page.json +7 -7
  275. package/registry/step-progress.json +1 -1
  276. package/registry/stepper.json +1 -1
  277. package/registry/swipe-deck.json +2 -2
  278. package/registry/switch.json +1 -1
  279. package/registry/tabs.json +1 -1
  280. package/registry/tag-input.json +2 -2
  281. package/registry/tag-selector.json +1 -1
  282. package/registry/terminal-replay.json +1 -1
  283. package/registry/theme.json +1 -1
  284. package/registry/toast.json +1 -1
  285. package/registry/toc.json +1 -1
  286. package/registry/tooltip.json +1 -1
  287. package/registry/tree-view.json +2 -2
  288. package/registry/verified-badge.json +1 -1
  289. package/registry/vertical-video.json +2 -2
  290. package/registry/video-player.json +2 -2
  291. package/registry/video-trimmer.json +2 -2
  292. package/registry/virtual.json +2 -2
  293. package/dist/button-BMAO7dKF.d.ts +0 -114
  294. package/dist/chunk-BRKMQ6JV.js.map +0 -1
  295. package/dist/chunk-FDCMBWUU.js.map +0 -1
  296. package/dist/chunk-LCZXS6AK.js.map +0 -1
  297. package/dist/chunk-RUPNPMP3.js.map +0 -1
  298. package/dist/chunk-UOMP6VOZ.js.map +0 -1
  299. package/dist/chunk-YH4LMWRU.js.map +0 -1
  300. package/dist/chunk-Z6FUPB3Q.js.map +0 -1
  301. /package/dist/{chunk-ND3L5VHT.js.map → chunk-5Z7FWCV2.js.map} +0 -0
  302. /package/dist/{chunk-ZKVQGXLD.js.map → chunk-FKBHWS4N.js.map} +0 -0
  303. /package/dist/{chunk-HCNOOPZE.js.map → chunk-KVDB4GXV.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/native/markdown.tsx","../../src/code-block/highlighter.ts","../../src/markdown/parse.ts"],"sourcesContent":["// React Native: the web `Markdown`'s AST (TanStack Markdown, via the same `parseSource`) drawn in Text and View. Raw HTML\n// is never rendered, executable URLs are dropped, `streaming` heals the unfinished end of a text that is arriving. Its own\n// entry (`@krizaka/ui/native/markdown`): the parser and the code grammars never load in an app that does not use it.\nimport { type Theme, Txt, useTheme } from \"@krizaka/ui/native\";\nimport * as React from \"react\";\nimport { Image, Linking, ScrollView, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { codeHighlighter } from \"../code-block/highlighter\";\nimport { type BlockNode, type InlineNode, parseSource, textOf } from \"../markdown/parse\";\n\nexport type MarkdownProps = {\n /** The Markdown source. */\n children: string;\n /** The text is still arriving (an AI answer): the unfinished end is closed, so no `**` or half a link shows. */\n streaming?: boolean;\n /** Called with the address of a link that is pressed. Default: opens `http(s)`, `mailto:` and `tel:` links with the system. */\n onLinkPress?: (href: string) => void;\n /** Styles merged on the container. */\n style?: StyleProp<ViewStyle>;\n};\n\ntype Context = { theme: Theme; mono: string | undefined; open: (href: string) => void };\n\nconst SYSTEM = /^(https?:|mailto:|tel:)/i;\n\nfunction Inlines({ nodes, ctx }: { nodes: readonly InlineNode[]; ctx: Context }) {\n return nodes.map((node, i) => <Inline key={i} node={node} ctx={ctx} />);\n}\n\nfunction Inline({ node, ctx }: { node: InlineNode; ctx: Context }): React.ReactNode {\n const { theme } = ctx;\n switch (node.type) {\n case \"text\":\n return node.value;\n case \"inlineCode\":\n return <Text style={{ fontFamily: ctx.mono, fontSize: 13.5, backgroundColor: theme.surface3 }}>{` ${node.value} `}</Text>;\n case \"strong\":\n return (\n <Text style={styles.strong}>\n <Inlines nodes={node.children} ctx={ctx} />\n </Text>\n );\n case \"emphasis\":\n return (\n <Text style={styles.em}>\n <Inlines nodes={node.children} ctx={ctx} />\n </Text>\n );\n case \"strike\":\n return (\n <Text style={styles.strike}>\n <Inlines nodes={node.children} ctx={ctx} />\n </Text>\n );\n case \"break\":\n return \"\\n\";\n case \"link\":\n return (\n <Text role=\"link\" onPress={() => ctx.open(node.href)} style={{ color: theme.accentText, textDecorationLine: \"underline\" }}>\n <Inlines nodes={node.children} ctx={ctx} />\n </Text>\n );\n // A picture inside a sentence cannot be drawn in a Text everywhere: its description stands in.\n case \"image\":\n return node.alt;\n case \"footnoteReference\":\n return <Text style={{ color: theme.accentText, fontSize: 11 }}>{` [${node.number}]`}</Text>;\n case \"inlineHtml\":\n return node.value;\n default:\n return null;\n }\n}\n\n/** Code, coloured by the web's grammars from the theme's text roles. */\nfunction Code({ node, ctx }: { node: Extract<BlockNode, { type: \"code\" }>; ctx: Context }) {\n const { theme } = ctx;\n const colour: Record<string, string> = {\n comment: theme.textSecondary,\n string: theme.successText,\n inserted: theme.successText,\n attr: theme.warningText,\n meta: theme.warningText,\n keyword: theme.accentText,\n tag: theme.accentText,\n selector: theme.accentText,\n command: theme.accentText,\n heading: theme.accentText,\n link: theme.accentText,\n type: theme.infoText,\n function: theme.infoText,\n number: theme.infoText,\n literal: theme.infoText,\n deleted: theme.dangerText,\n };\n const { tokens } = codeHighlighter.tokenize(node.value, { lang: node.lang ?? \"text\" });\n return (\n <View style={[styles.code, { backgroundColor: theme.surface1, borderColor: theme.borderDefault }]}>\n {node.title || node.file ? (\n <Txt variant=\"caption\" tone=\"secondary\" style={[styles.codeTitle, { backgroundColor: theme.surface2 }]}>\n {node.title ?? node.file}\n </Txt>\n ) : null}\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.codeBody}>\n <Text style={{ fontFamily: ctx.mono, fontSize: 12.5, lineHeight: 20, color: theme.textPrimary }}>\n {tokens.map((token, i) => (\n <Text key={i} style={token.className && colour[token.className] ? { color: colour[token.className] } : null}>\n {token.value}\n </Text>\n ))}\n </Text>\n </ScrollView>\n </View>\n );\n}\n\nfunction Blocks({ nodes, ctx }: { nodes: readonly BlockNode[]; ctx: Context }) {\n return nodes.map((node, i) => <Block key={i} node={node} ctx={ctx} />);\n}\n\nfunction Block({ node, ctx }: { node: BlockNode; ctx: Context }): React.ReactNode {\n const { theme } = ctx;\n switch (node.type) {\n case \"heading\":\n return node.depth === 1 ? (\n <Txt variant=\"display\">\n <Inlines nodes={node.children} ctx={ctx} />\n </Txt>\n ) : node.depth === 2 ? (\n <Txt variant=\"title\" style={styles.h2}>\n <Inlines nodes={node.children} ctx={ctx} />\n </Txt>\n ) : (\n <Txt variant=\"label\" role=\"heading\" style={styles.h3}>\n <Inlines nodes={node.children} ctx={ctx} />\n </Txt>\n );\n case \"paragraph\": {\n const pictures = node.children.filter((child) => child.type === \"image\");\n const onlyPictures = pictures.length > 0 && node.children.every((child) => child.type === \"image\" || (child.type === \"text\" && !child.value.trim()));\n if (onlyPictures) {\n return pictures.map((picture, i) => <Image key={i} source={{ uri: picture.src }} alt={picture.alt} accessibilityLabel={picture.alt} resizeMode=\"contain\" style={styles.image} />);\n }\n return (\n <Txt>\n <Inlines nodes={node.children} ctx={ctx} />\n </Txt>\n );\n }\n case \"code\":\n return <Code node={node} ctx={ctx} />;\n case \"list\":\n return (\n <View role=\"list\" style={styles.list}>\n {node.items.map((item, i) => (\n <View key={i} role=\"listitem\" style={styles.item}>\n <Txt tone=\"secondary\" style={styles.marker}>\n {item.checked !== undefined ? (item.checked ? \"☑\" : \"☐\") : node.ordered ? `${(node.start ?? 1) + i}.` : \"•\"}\n </Txt>\n <View style={styles.itemBody}>\n <Blocks nodes={item.children} ctx={ctx} />\n </View>\n </View>\n ))}\n </View>\n );\n case \"blockquote\":\n return (\n <View style={[styles.quote, { borderLeftColor: theme.accent }]}>\n <Blocks nodes={node.children} ctx={ctx} />\n </View>\n );\n case \"table\":\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View style={[styles.table, { borderColor: theme.borderSubtle }]}>\n {[node.header, ...node.rows].map((row, r) => (\n <View key={r} style={[styles.row, { borderBottomColor: theme.borderSubtle }, r === 0 ? { backgroundColor: theme.surface2 } : null]}>\n {row.map((cell, c) => (\n <Txt key={c} variant={r === 0 ? \"label\" : \"body\"} tone={r === 0 ? \"secondary\" : \"text\"} style={[styles.cell, { textAlign: node.align[c] ?? \"left\" }]}>\n <Inlines nodes={cell.children} ctx={ctx} />\n </Txt>\n ))}\n </View>\n ))}\n </View>\n </ScrollView>\n );\n case \"thematicBreak\":\n return <View style={[styles.rule, { backgroundColor: theme.borderDefault }]} />;\n case \"footnotes\":\n return (\n <View style={styles.list}>\n {node.items.map((item) => (\n <View key={item.id} style={styles.item}>\n <Txt variant=\"caption\" tone=\"secondary\" style={styles.marker}>{`${item.number}.`}</Txt>\n <View style={styles.itemBody}>\n <Blocks nodes={item.children} ctx={ctx} />\n </View>\n </View>\n ))}\n </View>\n );\n case \"html\":\n return <Txt>{node.value}</Txt>;\n default:\n return null;\n }\n}\n\n/** A Markdown text in Text and View: headings, paragraphs, lists (and tasks), quotes, tables, coloured code, links, pictures. */\nexport function Markdown({ children, streaming, onLinkPress, style }: MarkdownProps) {\n const { theme, fonts } = useTheme();\n const blocks = React.useMemo(() => parseSource(children, { streaming }), [children, streaming]);\n const open = React.useCallback(\n (href: string) => {\n if (onLinkPress) return onLinkPress(href);\n if (SYSTEM.test(href)) void Linking.openURL(href);\n },\n [onLinkPress],\n );\n const ctx: Context = { theme, mono: fonts.mono ?? \"Menlo\", open };\n return (\n <View aria-busy={streaming || undefined} style={[styles.root, style]}>\n <Blocks nodes={blocks} ctx={ctx} />\n </View>\n );\n}\n\nexport { textOf };\n\nconst styles = StyleSheet.create({\n root: { gap: 12 },\n strong: { fontWeight: \"700\" },\n em: { fontStyle: \"italic\" },\n strike: { textDecorationLine: \"line-through\" },\n h2: { marginTop: 8 },\n h3: { marginTop: 4 },\n image: { width: \"100%\", aspectRatio: 16 / 9, borderRadius: 12 },\n list: { gap: 6 },\n item: { flexDirection: \"row\", gap: 8 },\n marker: { minWidth: 20, textAlign: \"right\" },\n itemBody: { flex: 1, gap: 6 },\n quote: { gap: 8, paddingLeft: 12, borderLeftWidth: 3 },\n code: { overflow: \"hidden\", borderWidth: StyleSheet.hairlineWidth, borderRadius: 12 },\n codeTitle: { paddingHorizontal: 12, paddingVertical: 6 },\n codeBody: { padding: 12 },\n table: { borderWidth: StyleSheet.hairlineWidth, borderRadius: 8, overflow: \"hidden\" },\n row: { flexDirection: \"row\", borderBottomWidth: StyleSheet.hairlineWidth },\n cell: { width: 120, paddingHorizontal: 10, paddingVertical: 8 },\n rule: { height: StyleSheet.hairlineWidth },\n});\n","// The highlighter of every code sample: TanStack Highlight (a deterministic, synchronous tokenizer — the same markup on\n// the server and on the client) with the grammars a Krizaka page shows. Each grammar is registered by hand: nothing\n// else is bundled. An unknown language is plain text, never an error.\nimport { createHighlighter } from \"@tanstack/highlight/core\";\nimport { css } from \"@tanstack/highlight/languages/css\";\nimport { diff } from \"@tanstack/highlight/languages/diff\";\nimport { env } from \"@tanstack/highlight/languages/env\";\nimport { html } from \"@tanstack/highlight/languages/html\";\nimport { java } from \"@tanstack/highlight/languages/java\";\nimport { js } from \"@tanstack/highlight/languages/js\";\nimport { json } from \"@tanstack/highlight/languages/json\";\nimport { jsx } from \"@tanstack/highlight/languages/jsx\";\nimport { kotlin } from \"@tanstack/highlight/languages/kotlin\";\nimport { plaintext } from \"@tanstack/highlight/languages/plaintext\";\nimport { shell } from \"@tanstack/highlight/languages/shell\";\nimport { ts } from \"@tanstack/highlight/languages/ts\";\nimport { tsx } from \"@tanstack/highlight/languages/tsx\";\nimport { yaml } from \"@tanstack/highlight/languages/yaml\";\n\n/** The languages a sample can be written in, with the names they answer to (`bash`, `xml`, `yml`, `kt`, `properties`…). */\nexport const codeHighlighter = createHighlighter({\n languages: [css, diff, { ...env, aliases: [...(env.aliases ?? []), \"properties\"] }, html, java, js, json, jsx, kotlin, plaintext, shell, ts, tsx, yaml],\n fallbackLanguage: \"plaintext\",\n});\n","// The shared half of Markdown, web and React Native: the source becomes TanStack Markdown's serializable AST\n// (`@tanstack/markdown/parser`) — raw HTML is never enabled (it stays text), executable URLs are dropped (`javascript:`,\n// `data:`), and a text that is still arriving is healed so the half-written end reads like the finished one.\nimport type { BlockNode } from \"@tanstack/markdown\";\nimport { streamingMarkdownExtension } from \"@tanstack/markdown/extensions/streaming\";\nimport { parseMarkdown } from \"@tanstack/markdown/parser\";\n\nexport type { BlockNode, InlineNode, ListItemNode, TableNode } from \"@tanstack/markdown\";\n\nexport type ParseOptions = {\n /** The text is still arriving (an AI answer): the unfinished end is closed, so it never shows `**` or a half link. */\n streaming?: boolean;\n /** Gives every heading an `id` (`#section` links, a table of contents). */\n headingIds?: boolean;\n};\n\nconst FENCE = /^ {0,3}(```|~~~)/gm;\n\n/** A link or image cut at its end: `[label`, `[label]`, `[label](http…` become `label`, an image is dropped. Linear: one scan of the last `[`. */\nfunction healLink(text: string): string {\n const open = text.lastIndexOf(\"[\");\n if (open < 0) return text;\n const rest = text.slice(open + 1);\n if (rest.includes(\"\\n\")) return text;\n const image = open > 0 && text[open - 1] === \"!\";\n const close = rest.indexOf(\"]\");\n const after = close < 0 ? \"\" : rest.slice(close + 1);\n const cut = close < 0 || after === \"\" || (after.startsWith(\"(\") && !after.includes(\")\"));\n if (!cut) return text;\n const head = text.slice(0, image ? open - 1 : open);\n return image ? head : head + (close < 0 ? rest : rest.slice(0, close));\n}\n\n/**\n * Closes what a text cut in the middle leaves open: an emphasis (`**`, `~~`) or a code span, a link or image whose\n * address has not arrived. Inside an open code fence nothing is healed — it is shown as code as it comes.\n */\nexport function healStreaming(source: string): string {\n if (((source.match(FENCE) ?? []).length & 1) === 1) return source;\n let out = healLink(source);\n const cut = out.lastIndexOf(\"\\n\\n\");\n const block = cut < 0 ? out : out.slice(cut + 2);\n const open = (marker: string) => (block.split(marker).length - 1) % 2 === 1;\n // A marker just opened, with nothing after it yet, is dropped rather than shown as an empty emphasis.\n const close = (marker: string) => (out.endsWith(marker) ? out.slice(0, -marker.length) : `${out}${marker}`);\n if (open(\"`\")) return close(\"`\");\n for (const marker of [\"**\", \"~~\"]) if (open(marker)) out = close(marker);\n return out;\n}\n\n/** The blocks of a Markdown source. */\nexport function parseSource(source: string, { streaming = false, headingIds = false }: ParseOptions = {}): BlockNode[] {\n return parseMarkdown(streaming ? healStreaming(source) : source, { headingIds, ...(streaming && { extensions: [streamingMarkdownExtension()] }) }).children;\n}\n\n/** The text of inline nodes (a heading's label, an image's alt). */\nexport function textOf(nodes: readonly { type: string; value?: string; children?: readonly unknown[] }[]): string {\n return nodes\n .map((node) => (node.children ? textOf(node.children as typeof nodes) : (node.value ?? \"\")))\n .join(\"\");\n}\n"],"mappings":";AAGA,SAAqB,KAAK,gBAAgB;AAC1C,YAAY,WAAW;AACvB,SAAS,OAAO,SAAS,YAA4B,YAAY,MAAM,YAA4B;;;ACFnG,SAAS,yBAAyB;AAClC,SAAS,WAAW;AACpB,SAAS,YAAY;AACrB,SAAS,WAAW;AACpB,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,UAAU;AACnB,SAAS,YAAY;AACrB,SAAS,WAAW;AACpB,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AACtB,SAAS,UAAU;AACnB,SAAS,WAAW;AACpB,SAAS,YAAY;AAGd,IAAM,kBAAkB,kBAAkB;AAAA,EAC/C,WAAW,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,SAAS,CAAC,GAAI,IAAI,WAAW,CAAC,GAAI,YAAY,EAAE,GAAG,MAAM,MAAM,IAAI,MAAM,KAAK,QAAQ,WAAW,OAAO,IAAI,KAAK,IAAI;AAAA,EACtJ,kBAAkB;AACpB,CAAC;;;ACnBD,SAAS,kCAAkC;AAC3C,SAAS,qBAAqB;AAW9B,IAAM,QAAQ;AAGd,SAAS,SAAS,MAAsB;AACtC,QAAM,OAAO,KAAK,YAAY,GAAG;AACjC,MAAI,OAAO,EAAG,QAAO;AACrB,QAAM,OAAO,KAAK,MAAM,OAAO,CAAC;AAChC,MAAI,KAAK,SAAS,IAAI,EAAG,QAAO;AAChC,QAAM,QAAQ,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM;AAC7C,QAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,QAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK,MAAM,QAAQ,CAAC;AACnD,QAAM,MAAM,QAAQ,KAAK,UAAU,MAAO,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,SAAS,GAAG;AACtF,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,OAAO,KAAK,MAAM,GAAG,QAAQ,OAAO,IAAI,IAAI;AAClD,SAAO,QAAQ,OAAO,QAAQ,QAAQ,IAAI,OAAO,KAAK,MAAM,GAAG,KAAK;AACtE;AAMO,SAAS,cAAc,QAAwB;AACpD,QAAM,OAAO,MAAM,KAAK,KAAK,CAAC,GAAG,SAAS,OAAO,EAAG,QAAO;AAC3D,MAAI,MAAM,SAAS,MAAM;AACzB,QAAM,MAAM,IAAI,YAAY,MAAM;AAClC,QAAM,QAAQ,MAAM,IAAI,MAAM,IAAI,MAAM,MAAM,CAAC;AAC/C,QAAM,OAAO,CAAC,YAAoB,MAAM,MAAM,MAAM,EAAE,SAAS,KAAK,MAAM;AAE1E,QAAM,QAAQ,CAAC,WAAoB,IAAI,SAAS,MAAM,IAAI,IAAI,MAAM,GAAG,CAAC,OAAO,MAAM,IAAI,GAAG,GAAG,GAAG,MAAM;AACxG,MAAI,KAAK,GAAG,EAAG,QAAO,MAAM,GAAG;AAC/B,aAAW,UAAU,CAAC,MAAM,IAAI,EAAG,KAAI,KAAK,MAAM,EAAG,OAAM,MAAM,MAAM;AACvE,SAAO;AACT;AAGO,SAAS,YAAY,QAAgB,EAAE,YAAY,OAAO,aAAa,MAAM,IAAkB,CAAC,GAAgB;AACrH,SAAO,cAAc,YAAY,cAAc,MAAM,IAAI,QAAQ,EAAE,YAAY,GAAI,aAAa,EAAE,YAAY,CAAC,2BAA2B,CAAC,EAAE,EAAG,CAAC,EAAE;AACrJ;AAGO,SAAS,OAAO,OAA2F;AAChH,SAAO,MACJ,IAAI,CAAC,SAAU,KAAK,WAAW,OAAO,KAAK,QAAwB,IAAK,KAAK,SAAS,EAAI,EAC1F,KAAK,EAAE;AACZ;;;AFlCgC,gBAAAA,MAuE5B,YAvE4B;AAHhC,IAAM,SAAS;AAEf,SAAS,QAAQ,EAAE,OAAO,IAAI,GAAmD;AAC/E,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM,gBAAAA,KAAC,UAAe,MAAY,OAAf,CAAyB,CAAE;AACxE;AAEA,SAAS,OAAO,EAAE,MAAM,IAAI,GAAwD;AAClF,QAAM,EAAE,MAAM,IAAI;AAClB,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,KAAK;AAAA,IACd,KAAK;AACH,aAAO,gBAAAA,KAAC,QAAK,OAAO,EAAE,YAAY,IAAI,MAAM,UAAU,MAAM,iBAAiB,MAAM,SAAS,GAAI,cAAI,KAAK,KAAK,KAAI;AAAA,IACpH,KAAK;AACH,aACE,gBAAAA,KAAC,QAAK,OAAO,OAAO,QAClB,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C;AAAA,IAEJ,KAAK;AACH,aACE,gBAAAA,KAAC,QAAK,OAAO,OAAO,IAClB,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C;AAAA,IAEJ,KAAK;AACH,aACE,gBAAAA,KAAC,QAAK,OAAO,OAAO,QAClB,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aACE,gBAAAA,KAAC,QAAK,MAAK,QAAO,SAAS,MAAM,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO,EAAE,OAAO,MAAM,YAAY,oBAAoB,YAAY,GACtH,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C;AAAA;AAAA,IAGJ,KAAK;AACH,aAAO,KAAK;AAAA,IACd,KAAK;AACH,aAAO,gBAAAA,KAAC,QAAK,OAAO,EAAE,OAAO,MAAM,YAAY,UAAU,GAAG,GAAI,eAAK,KAAK,MAAM,KAAI;AAAA,IACtF,KAAK;AACH,aAAO,KAAK;AAAA,IACd;AACE,aAAO;AAAA,EACX;AACF;AAGA,SAAS,KAAK,EAAE,MAAM,IAAI,GAAiE;AACzF,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,SAAiC;AAAA,IACrC,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,UAAU,MAAM;AAAA,IAChB,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,KAAK,MAAM;AAAA,IACX,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM;AAAA,IACd,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,EACjB;AACA,QAAM,EAAE,OAAO,IAAI,gBAAgB,SAAS,KAAK,OAAO,EAAE,MAAM,KAAK,QAAQ,OAAO,CAAC;AACrF,SACE,qBAAC,QAAK,OAAO,CAAC,OAAO,MAAM,EAAE,iBAAiB,MAAM,UAAU,aAAa,MAAM,cAAc,CAAC,GAC7F;AAAA,SAAK,SAAS,KAAK,OAClB,gBAAAA,KAAC,OAAI,SAAQ,WAAU,MAAK,aAAY,OAAO,CAAC,OAAO,WAAW,EAAE,iBAAiB,MAAM,SAAS,CAAC,GAClG,eAAK,SAAS,KAAK,MACtB,IACE;AAAA,IACJ,gBAAAA,KAAC,cAAW,YAAU,MAAC,gCAAgC,OAAO,uBAAuB,OAAO,UAC1F,0BAAAA,KAAC,QAAK,OAAO,EAAE,YAAY,IAAI,MAAM,UAAU,MAAM,YAAY,IAAI,OAAO,MAAM,YAAY,GAC3F,iBAAO,IAAI,CAAC,OAAO,MAClB,gBAAAA,KAAC,QAAa,OAAO,MAAM,aAAa,OAAO,MAAM,SAAS,IAAI,EAAE,OAAO,OAAO,MAAM,SAAS,EAAE,IAAI,MACpG,gBAAM,SADE,CAEX,CACD,GACH,GACF;AAAA,KACF;AAEJ;AAEA,SAAS,OAAO,EAAE,OAAO,IAAI,GAAkD;AAC7E,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM,gBAAAA,KAAC,SAAc,MAAY,OAAf,CAAyB,CAAE;AACvE;AAEA,SAAS,MAAM,EAAE,MAAM,IAAI,GAAuD;AAChF,QAAM,EAAE,MAAM,IAAI;AAClB,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,KAAK,UAAU,IACpB,gBAAAA,KAAC,OAAI,SAAQ,WACX,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C,IACE,KAAK,UAAU,IACjB,gBAAAA,KAAC,OAAI,SAAQ,SAAQ,OAAO,OAAO,IACjC,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C,IAEA,gBAAAA,KAAC,OAAI,SAAQ,SAAQ,MAAK,WAAU,OAAO,OAAO,IAChD,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C;AAAA,IAEJ,KAAK,aAAa;AAChB,YAAM,WAAW,KAAK,SAAS,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;AACvE,YAAM,eAAe,SAAS,SAAS,KAAK,KAAK,SAAS,MAAM,CAAC,UAAU,MAAM,SAAS,WAAY,MAAM,SAAS,UAAU,CAAC,MAAM,MAAM,KAAK,CAAE;AACnJ,UAAI,cAAc;AAChB,eAAO,SAAS,IAAI,CAAC,SAAS,MAAM,gBAAAA,KAAC,SAAc,QAAQ,EAAE,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,KAAK,oBAAoB,QAAQ,KAAK,YAAW,WAAU,OAAO,OAAO,SAAvH,CAA8H,CAAE;AAAA,MAClL;AACA,aACE,gBAAAA,KAAC,OACC,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,GAC3C;AAAA,IAEJ;AAAA,IACA,KAAK;AACH,aAAO,gBAAAA,KAAC,QAAK,MAAY,KAAU;AAAA,IACrC,KAAK;AACH,aACE,gBAAAA,KAAC,QAAK,MAAK,QAAO,OAAO,OAAO,MAC7B,eAAK,MAAM,IAAI,CAAC,MAAM,MACrB,qBAAC,QAAa,MAAK,YAAW,OAAO,OAAO,MAC1C;AAAA,wBAAAA,KAAC,OAAI,MAAK,aAAY,OAAO,OAAO,QACjC,eAAK,YAAY,SAAa,KAAK,UAAU,WAAM,WAAO,KAAK,UAAU,IAAI,KAAK,SAAS,KAAK,CAAC,MAAM,UAC1G;AAAA,QACA,gBAAAA,KAAC,QAAK,OAAO,OAAO,UAClB,0BAAAA,KAAC,UAAO,OAAO,KAAK,UAAU,KAAU,GAC1C;AAAA,WANS,CAOX,CACD,GACH;AAAA,IAEJ,KAAK;AACH,aACE,gBAAAA,KAAC,QAAK,OAAO,CAAC,OAAO,OAAO,EAAE,iBAAiB,MAAM,OAAO,CAAC,GAC3D,0BAAAA,KAAC,UAAO,OAAO,KAAK,UAAU,KAAU,GAC1C;AAAA,IAEJ,KAAK;AACH,aACE,gBAAAA,KAAC,cAAW,YAAU,MAAC,gCAAgC,OACrD,0BAAAA,KAAC,QAAK,OAAO,CAAC,OAAO,OAAO,EAAE,aAAa,MAAM,aAAa,CAAC,GAC5D,WAAC,KAAK,QAAQ,GAAG,KAAK,IAAI,EAAE,IAAI,CAAC,KAAK,MACrC,gBAAAA,KAAC,QAAa,OAAO,CAAC,OAAO,KAAK,EAAE,mBAAmB,MAAM,aAAa,GAAG,MAAM,IAAI,EAAE,iBAAiB,MAAM,SAAS,IAAI,IAAI,GAC9H,cAAI,IAAI,CAAC,MAAM,MACd,gBAAAA,KAAC,OAAY,SAAS,MAAM,IAAI,UAAU,QAAQ,MAAM,MAAM,IAAI,cAAc,QAAQ,OAAO,CAAC,OAAO,MAAM,EAAE,WAAW,KAAK,MAAM,CAAC,KAAK,OAAO,CAAC,GACjJ,0BAAAA,KAAC,WAAQ,OAAO,KAAK,UAAU,KAAU,KADjC,CAEV,CACD,KALQ,CAMX,CACD,GACH,GACF;AAAA,IAEJ,KAAK;AACH,aAAO,gBAAAA,KAAC,QAAK,OAAO,CAAC,OAAO,MAAM,EAAE,iBAAiB,MAAM,cAAc,CAAC,GAAG;AAAA,IAC/E,KAAK;AACH,aACE,gBAAAA,KAAC,QAAK,OAAO,OAAO,MACjB,eAAK,MAAM,IAAI,CAAC,SACf,qBAAC,QAAmB,OAAO,OAAO,MAChC;AAAA,wBAAAA,KAAC,OAAI,SAAQ,WAAU,MAAK,aAAY,OAAO,OAAO,QAAS,aAAG,KAAK,MAAM,KAAI;AAAA,QACjF,gBAAAA,KAAC,QAAK,OAAO,OAAO,UAClB,0BAAAA,KAAC,UAAO,OAAO,KAAK,UAAU,KAAU,GAC1C;AAAA,WAJS,KAAK,EAKhB,CACD,GACH;AAAA,IAEJ,KAAK;AACH,aAAO,gBAAAA,KAAC,OAAK,eAAK,OAAM;AAAA,IAC1B;AACE,aAAO;AAAA,EACX;AACF;AAGO,SAAS,SAAS,EAAE,UAAU,WAAW,aAAa,MAAM,GAAkB;AACnF,QAAM,EAAE,OAAO,MAAM,IAAI,SAAS;AAClC,QAAM,SAAe,cAAQ,MAAM,YAAY,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,SAAS,CAAC;AAC9F,QAAM,OAAa;AAAA,IACjB,CAAC,SAAiB;AAChB,UAAI,YAAa,QAAO,YAAY,IAAI;AACxC,UAAI,OAAO,KAAK,IAAI,EAAG,MAAK,QAAQ,QAAQ,IAAI;AAAA,IAClD;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AACA,QAAM,MAAe,EAAE,OAAO,MAAM,MAAM,QAAQ,SAAS,KAAK;AAChE,SACE,gBAAAA,KAAC,QAAK,aAAW,aAAa,QAAW,OAAO,CAAC,OAAO,MAAM,KAAK,GACjE,0BAAAA,KAAC,UAAO,OAAO,QAAQ,KAAU,GACnC;AAEJ;AAIA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,MAAM,EAAE,KAAK,GAAG;AAAA,EAChB,QAAQ,EAAE,YAAY,MAAM;AAAA,EAC5B,IAAI,EAAE,WAAW,SAAS;AAAA,EAC1B,QAAQ,EAAE,oBAAoB,eAAe;AAAA,EAC7C,IAAI,EAAE,WAAW,EAAE;AAAA,EACnB,IAAI,EAAE,WAAW,EAAE;AAAA,EACnB,OAAO,EAAE,OAAO,QAAQ,aAAa,KAAK,GAAG,cAAc,GAAG;AAAA,EAC9D,MAAM,EAAE,KAAK,EAAE;AAAA,EACf,MAAM,EAAE,eAAe,OAAO,KAAK,EAAE;AAAA,EACrC,QAAQ,EAAE,UAAU,IAAI,WAAW,QAAQ;AAAA,EAC3C,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE;AAAA,EAC5B,OAAO,EAAE,KAAK,GAAG,aAAa,IAAI,iBAAiB,EAAE;AAAA,EACrD,MAAM,EAAE,UAAU,UAAU,aAAa,WAAW,eAAe,cAAc,GAAG;AAAA,EACpF,WAAW,EAAE,mBAAmB,IAAI,iBAAiB,EAAE;AAAA,EACvD,UAAU,EAAE,SAAS,GAAG;AAAA,EACxB,OAAO,EAAE,aAAa,WAAW,eAAe,cAAc,GAAG,UAAU,SAAS;AAAA,EACpF,KAAK,EAAE,eAAe,OAAO,mBAAmB,WAAW,cAAc;AAAA,EACzE,MAAM,EAAE,OAAO,KAAK,mBAAmB,IAAI,iBAAiB,EAAE;AAAA,EAC9D,MAAM,EAAE,QAAQ,WAAW,cAAc;AAC3C,CAAC;","names":["jsx"]}
package/dist/native.d.ts CHANGED
@@ -52,7 +52,7 @@ declare const addDays: (iso: string, days: number) => string;
52
52
  /** The ISO date `months` later (or earlier), the day kept inside the shorter months (`01-31` + 1 → `02-28`). */
53
53
  declare const addMonths: (iso: string, months: number) => string;
54
54
 
55
- type BrandId = "krizaka" | "orazaka" | "orochia" | "yazakia" | "yororis";
55
+ type BrandId = "krizaka" | "orazaka" | "orochia" | "yasakia" | "yororis";
56
56
 
57
57
  type Controlled = {
58
58
  /** Open (controlled). */
@@ -306,15 +306,9 @@ type CardOverlayProps = ViewProps & {
306
306
  };
307
307
  /** What sits on the media (badges, a caption), in a corner. */
308
308
  declare function CardOverlay({ corner, style, ...props }: CardOverlayProps): React$1.JSX.Element;
309
- declare const PADDING: {
310
- readonly none: 0;
311
- readonly sm: 12;
312
- readonly md: 16;
313
- readonly lg: 24;
314
- };
315
309
  type CardBodyProps = ViewProps & {
316
310
  /** none · sm · md (default) · lg. */
317
- padding?: keyof typeof PADDING;
311
+ padding?: "none" | "sm" | "md" | "lg";
318
312
  };
319
313
  declare function CardBody({ padding, style, ...props }: CardBodyProps): React$1.JSX.Element;
320
314
  /** The card's name: one line, a header for screen readers. */
@@ -1045,7 +1039,7 @@ type LoaderProps = {
1045
1039
  /** inline (default) · block (a region's centre) · overlay (over its parent, frosted) · page (the whole screen). */
1046
1040
  variant?: "inline" | "block" | "overlay" | "page";
1047
1041
  /**
1048
- * The product whose animated mark waits in place of the Krizaka glyph (`orochia`, `orazaka`, `yazakia`, `yororis`,
1042
+ * The product whose animated mark waits in place of the Krizaka glyph (`orochia`, `orazaka`, `yasakia`, `yororis`,
1049
1043
  * `krizaka`). Still when the system reduces motion; the ending stays the check or the cross.
1050
1044
  */
1051
1045
  product?: BrandId;
@@ -1059,7 +1053,7 @@ declare function Loader({ label, status, successLabel, errorLabel, value, eta, d
1059
1053
  * The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one
1060
1054
  * (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,
1061
1055
  * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), the lovebird that
1062
- * introduces (2026-10, with Yazakia: "l'inséparable présente") and the crane that listens (2026-10, with Yororis:
1056
+ * introduces (2026-10, with Yasakia: "l'inséparable présente") and the crane that listens (2026-10, with Yororis:
1063
1057
  * "la grue écoute"), redrawn on one 120 × 120 grid so that any bird can wear any mood.
1064
1058
  *
1065
1059
  * Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,
@@ -1449,7 +1443,7 @@ declare function PhotoGrid({ value, onValueChange, onAdd, slots, required, colum
1449
1443
 
1450
1444
  /** The mark of a Krizaka brand by id, for React Native — the counterpart of the web `ProductLogo`. */
1451
1445
  declare function ProductMark({ id, ...props }: NativeMarkProps & {
1452
- id: BrandId;
1446
+ id: BrandId | "yazakia";
1453
1447
  }): React__default.JSX.Element;
1454
1448
 
1455
1449
  interface ProfileStat {
@@ -2293,11 +2287,13 @@ type WheelProps = {
2293
2287
  declare function Wheel({ label, options, value: valueProp, defaultValue, onValueChange, disabled, style }: WheelProps): React$1.JSX.Element;
2294
2288
 
2295
2289
  /**
2296
- * The Yazakia mark for React Native — the geometry of the web mark (marks/yazakia-geometry.ts): two voices, two
2290
+ * The Yasakia mark for React Native — the geometry of the web mark (marks/yasakia-geometry.ts): two voices, two
2297
2291
  * speech bubbles that overlap; the orbit and the pair turn slowly around them, the lens where they overlap breathes;
2298
2292
  * still when the system reduces motion.
2299
2293
  */
2300
- declare function YazakiaMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
2294
+ declare function YasakiaMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
2295
+ /** @deprecated Yazakia was renamed Yasakia (2026-10): use `YasakiaMark`. Kept for one minor version. */
2296
+ declare const YazakiaMark: typeof YasakiaMark;
2301
2297
 
2302
2298
  /**
2303
2299
  * The Yororis mark for React Native — the geometry of the web mark (marks/yororis-geometry.ts), "the hold": two filled
@@ -2306,4 +2302,4 @@ declare function YazakiaMark({ size, animated, title, neutral }: NativeMarkProps
2306
2302
  */
2307
2303
  declare function YororisMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
2308
2304
 
2309
- export { ActionSheet, type ActionSheetAction, type ActionSheetProps, type ActivityEvent, ActivityFeed, type ActivityFeedLabels, type ActivityFeedProps, type ActivityTone, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, AvatarRoot, type AvatarSize, Badge, type BadgeProps, type BadgeTone, type BrandId, BrandedRefresh, type BrandedRefreshProps, type BrandedRefreshScrollProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarLabels, type CalendarProps, Card, CardBody, type CardBodyProps, CardDescription, CardFooter, CardImage, type CardImageProps, CardMedia, type CardMediaProps, CardOverlay, type CardOverlayProps, CardRoot, type CardRootProps, CardTitle, Checkbox, type CheckboxProps, Chip, type ChipGroupProps, type ChipProps, type ChipSize, Combobox, type ComboboxLabels, type ComboboxProps, ConversationItem, type ConversationItemProps, Countdown, type CountdownProps, type CountdownUnits, DateField, type DateFieldLabels, type DateFieldProps, type DatePart, DateWheel, type DateWheelProps, DayStrip, type DayStripProps, type DescriptionItem, DescriptionList, type DescriptionListProps, EmptyState, type EmptyStateProps, ErrorState, Fab, type FabProps, GoalGauge, type GoalGaugeProps, type GridPhoto, type HapticKind, Header, type HeaderProps, IconButton, type IconButtonProps, ImageViewer, type ImageViewerProps, type Insets, KrizakaMark, Loader, LoaderGlyph, type LoaderGlyphProps, type LoaderProps, LoadingState, Mascot, type MascotProps, MascotState, type MascotStateProps, MatchDialog, type MatchDialogProps, MessageBubble, type MessageBubbleLabels, type MessageBubbleProps, MessageComposer, type MessageComposerProps, type MessageStatus, Meter, type MeterPart, type MeterProps, type Mode, MonthPicker, type MonthPickerProps, type Motion, type NativeMarkProps, NumberTicker, type NumberTickerProps, Onboarding, type OnboardingProps, type OnboardingSlide, OrazakaMark, OrochiaMark, OtpInput, type OtpInputProps, Pagination, type PaginationLabels, type PaginationProps, PermissionPrompt, type PermissionPromptProps, type PermissionStatus, PersonCard, type PersonCardProps, Phoenix, type PhoenixProps, PhotoGrid, type PhotoGridLabels, type PhotoGridProps, ProductMark, ProfileCard, type ProfileCardProps, type ProfileStat, Progress, type ProgressProps, PullToRefresh, type PullToRefreshProps, RadioGroup, type RadioGroupProps, type RadioOption, type Radius, Screen, type ScreenProps, SearchField, type SearchFieldProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sheet, type SheetProps, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderValue, Spinner, type SpinnerProps, SplashHandoff, type SplashHandoffProps, type Step, StepProgress, type StepProgressProps, type StepStatus, Stepper, type StepperProps, SuccessState, type SwipeAction, SwipeDeck, type SwipeDeckLabels, type SwipeDeckProps, type SwipeDirection, SwipeableRow, type SwipeableRowProps, Switch, type SwitchProps, TabBar, type TabBarItem, type TabBarProps, type TabItem, Tabs, type TabsProps, type TagOption, TagSelector, type TagSelectorProps, TextField, type TextFieldProps, type Theme, type ThemeContextValue, type ThemeFonts, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, TimePicker, type TimePickerLabels, type TimePickerProps, type TimeValue, type ToastItem, type ToastOptions, type ToastTone, Toaster, type ToasterProps, Txt, type TxtProps, type TxtTone, type TxtVariant, TypingIndicator, type TypingIndicatorProps, VerifiedBadge, type VerifiedBadgeProps, type ViewerImage, WelcomeState, Wheel, WheelDivider, type WheelOption, WheelPicker, type WheelPickerProps, type WheelProps, YazakiaMark, YororisMark, addDays, addMonths, ageOn, alpha, calendarLabels, comboboxLabels, composeDate, dateFieldLabels, datePartsOrder, daysInMonth, formatTime, isRealDate, latestBirthDate, monthNames, prefetchNeighbours, splitDuration, textStyles, timeSlots, timeToMinutes, toast, todayIso, useCollapsingHeader, useCountdown, useDelayedWait, useReducedMotion, useTheme, uses12Hours };
2305
+ export { ActionSheet, type ActionSheetAction, type ActionSheetProps, type ActivityEvent, ActivityFeed, type ActivityFeedLabels, type ActivityFeedProps, type ActivityTone, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, AvatarRoot, type AvatarSize, Badge, type BadgeProps, type BadgeTone, type BrandId, BrandedRefresh, type BrandedRefreshProps, type BrandedRefreshScrollProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarLabels, type CalendarProps, Card, CardBody, type CardBodyProps, CardDescription, CardFooter, CardImage, type CardImageProps, CardMedia, type CardMediaProps, CardOverlay, type CardOverlayProps, CardRoot, type CardRootProps, CardTitle, Checkbox, type CheckboxProps, Chip, type ChipGroupProps, type ChipProps, type ChipSize, Combobox, type ComboboxLabels, type ComboboxProps, ConversationItem, type ConversationItemProps, Countdown, type CountdownProps, type CountdownUnits, DateField, type DateFieldLabels, type DateFieldProps, type DatePart, DateWheel, type DateWheelProps, DayStrip, type DayStripProps, type DescriptionItem, DescriptionList, type DescriptionListProps, EmptyState, type EmptyStateProps, ErrorState, Fab, type FabProps, GoalGauge, type GoalGaugeProps, type GridPhoto, type HapticKind, Header, type HeaderProps, IconButton, type IconButtonProps, ImageViewer, type ImageViewerProps, type Insets, KrizakaMark, Loader, LoaderGlyph, type LoaderGlyphProps, type LoaderProps, LoadingState, Mascot, type MascotProps, MascotState, type MascotStateProps, MatchDialog, type MatchDialogProps, MessageBubble, type MessageBubbleLabels, type MessageBubbleProps, MessageComposer, type MessageComposerProps, type MessageStatus, Meter, type MeterPart, type MeterProps, type Mode, MonthPicker, type MonthPickerProps, type Motion, type NativeMarkProps, NumberTicker, type NumberTickerProps, Onboarding, type OnboardingProps, type OnboardingSlide, OrazakaMark, OrochiaMark, OtpInput, type OtpInputProps, Pagination, type PaginationLabels, type PaginationProps, PermissionPrompt, type PermissionPromptProps, type PermissionStatus, PersonCard, type PersonCardProps, Phoenix, type PhoenixProps, PhotoGrid, type PhotoGridLabels, type PhotoGridProps, ProductMark, ProfileCard, type ProfileCardProps, type ProfileStat, Progress, type ProgressProps, PullToRefresh, type PullToRefreshProps, RadioGroup, type RadioGroupProps, type RadioOption, type Radius, Screen, type ScreenProps, SearchField, type SearchFieldProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sheet, type SheetProps, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderValue, Spinner, type SpinnerProps, SplashHandoff, type SplashHandoffProps, type Step, StepProgress, type StepProgressProps, type StepStatus, Stepper, type StepperProps, SuccessState, type SwipeAction, SwipeDeck, type SwipeDeckLabels, type SwipeDeckProps, type SwipeDirection, SwipeableRow, type SwipeableRowProps, Switch, type SwitchProps, TabBar, type TabBarItem, type TabBarProps, type TabItem, Tabs, type TabsProps, type TagOption, TagSelector, type TagSelectorProps, TextField, type TextFieldProps, type Theme, type ThemeContextValue, type ThemeFonts, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, TimePicker, type TimePickerLabels, type TimePickerProps, type TimeValue, type ToastItem, type ToastOptions, type ToastTone, Toaster, type ToasterProps, Txt, type TxtProps, type TxtTone, type TxtVariant, TypingIndicator, type TypingIndicatorProps, VerifiedBadge, type VerifiedBadgeProps, type ViewerImage, WelcomeState, Wheel, WheelDivider, type WheelOption, WheelPicker, type WheelPickerProps, type WheelProps, YasakiaMark, YazakiaMark, YororisMark, addDays, addMonths, ageOn, alpha, calendarLabels, comboboxLabels, composeDate, dateFieldLabels, datePartsOrder, daysInMonth, formatTime, isRealDate, latestBirthDate, monthNames, prefetchNeighbours, splitDuration, textStyles, timeSlots, timeToMinutes, toast, todayIso, useCollapsingHeader, useCountdown, useDelayedWait, useReducedMotion, useTheme, uses12Hours };