@naculus/connect-native 0.9.0 → 0.10.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.
package/dist/ui/index.cjs CHANGED
@@ -301,6 +301,7 @@ var import_jsx_runtime3 = require("react/jsx-runtime");
301
301
  function AuthorizationConsentNative({
302
302
  authorization,
303
303
  assets = {},
304
+ trustedAssets,
304
305
  locale,
305
306
  now,
306
307
  requester,
@@ -312,7 +313,12 @@ function AuthorizationConsentNative({
312
313
  theme: themeProp
313
314
  }) {
314
315
  const theme = useNativePaymentTheme(themeProp);
315
- const description = "expiry" in authorization ? authorization : (0, import_connect_appkit_core.describeAuthorization)(authorization, { assets, locale, now });
316
+ const description = "expiry" in authorization ? authorization : (0, import_connect_appkit_core.describeAuthorization)(authorization, {
317
+ assets,
318
+ trustedAssets,
319
+ locale,
320
+ now
321
+ });
316
322
  const muted = { color: theme.mutedForeground };
317
323
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native3.View, { style: [styles2.root, { backgroundColor: theme.background }], children: [
318
324
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native3.ScrollView, { contentContainerStyle: styles2.content, children: [
@@ -384,6 +390,7 @@ function AuthorizationConsentNative({
384
390
  ],
385
391
  children: [
386
392
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native3.Text, { style: [styles2.assetLabel, { color: theme.foreground }], children: grant.assetLabel }),
393
+ grant.assetTrust === "unverified" && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Callout, { tone: "warning", glyph: "\u26A0", role: "alert", theme, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native3.Text, { style: styles2.strong, children: "Unverified token \u2014 not on the trusted list" }) }),
387
394
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native3.View, { style: styles2.limits, children: [
388
395
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native3.View, { style: styles2.limit, children: [
389
396
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native3.Text, { style: [styles.label, muted], children: "Per payment" }),
@@ -555,6 +562,7 @@ function StatusBadge({
555
562
  function AuthorizationListNative({
556
563
  entries: input,
557
564
  assets = {},
565
+ trustedAssets,
558
566
  onRevoke,
559
567
  revokingId,
560
568
  locale,
@@ -572,7 +580,11 @@ function AuthorizationListNative({
572
580
  setOnChain((current) => new Set(current).add(entry.keyId));
573
581
  });
574
582
  const renderItem = ({ item: entry }) => {
575
- const view = (0, import_connect_appkit_core2.describeAuthorization)(entry, { assets, locale });
583
+ const view = (0, import_connect_appkit_core2.describeAuthorization)(entry, {
584
+ assets,
585
+ trustedAssets,
586
+ locale
587
+ });
576
588
  const busy = revokingId === entry.keyId;
577
589
  const live = entry.status === "active" || entry.status === "pending";
578
590
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
@@ -602,6 +614,7 @@ function AuthorizationListNative({
602
614
  style: [styles3.grant, { backgroundColor: theme.muted }],
603
615
  children: [
604
616
  view.label && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_native4.Text, { style: [styles3.strong, { color: theme.foreground }], children: grant.assetLabel }),
617
+ grant.assetTrust === "unverified" && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Callout, { tone: "warning", glyph: "\u26A0", role: "alert", theme, children: "Unverified token \u2014 not on the trusted list" }),
605
618
  grant.recipients.map((recipient) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
606
619
  CopyableValue,
607
620
  {
@@ -617,7 +630,10 @@ function AuthorizationListNative({
617
630
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_react_native4.Text, { style: [styles3.small, { color: theme.foreground }], children: [
618
631
  "Spent",
619
632
  " ",
620
- (0, import_connect_appkit_core2.formatAuthorizationAmount)(spent, assets[grant.asset]).formatted
633
+ (0, import_connect_appkit_core2.formatAuthorizationAmount)(
634
+ spent,
635
+ grant.assetTrust === "unverified" ? void 0 : assets[grant.asset]
636
+ ).formatted
621
637
  ] }),
622
638
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_react_native4.Text, { style: [styles3.small, { color: theme.foreground }], children: [
623
639
  "Total ",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/index.ts","../../src/ui/AuthorizationConsentNative.tsx","../../src/ui/parts.tsx","../../src/ui/theme.tsx","../../src/ui/AuthorizationListNative.tsx","../../src/ui/PaymentReceiptNative.tsx"],"sourcesContent":["/**\n * React Native payment UI, published as `@naculus/connect-native/ui` so apps\n * that only need the wallet connectors do not load it.\n */\nexport {\n AuthorizationConsentNative,\n type AuthorizationConsentNativeProps,\n} from \"./AuthorizationConsentNative\";\nexport {\n AuthorizationListNative,\n type AuthorizationListNativeProps,\n} from \"./AuthorizationListNative\";\nexport {\n PaymentReceiptNative,\n type PaymentReceiptNativeProps,\n} from \"./PaymentReceiptNative\";\nexport {\n darkPaymentTheme,\n lightPaymentTheme,\n type NativePaymentTheme,\n NativePaymentThemeProvider,\n useNativePaymentTheme,\n} from \"./theme\";\n","import {\n type AuthorizationAssetMetadata,\n type AuthorizationDescription,\n describeAuthorization,\n type SpendExplanation,\n} from \"@naculus/connect-appkit-core\";\nimport type { Authorization, ListedAuthorization } from \"@naculus/connect-core\";\nimport { Image, ScrollView, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n styles as shared,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationConsentNativeProps {\n /** Who asks: shown as \"Allow {name} to pay?\". */\n requester: { name: string; icon?: string; origin?: string };\n /** A raw authorization, or a description already built by the caller. */\n authorization: Authorization | ListedAuthorization | AuthorizationDescription;\n assets?: Record<string, AuthorizationAssetMetadata>;\n /** `explainSpend` result for the payment that triggered this consent. */\n preview?: SpendExplanation;\n onApprove: () => void;\n onDecline: () => void;\n /** Disables Approve and shows \"Approving…\". */\n busy?: boolean;\n /** Copies a recipient address; the copy button shows only when set. */\n onCopy?: (text: string) => void;\n /** BCP 47 locale for the expiry; English when omitted. */\n locale?: string;\n /** Unix timestamp in seconds, for a stable relative expiry. */\n now?: number;\n theme?: NativePaymentTheme;\n}\n\n/** React Native counterpart of the web `AuthorizationConsent`. */\nexport function AuthorizationConsentNative({\n authorization,\n assets = {},\n locale,\n now,\n requester,\n preview,\n onApprove,\n onDecline,\n busy = false,\n onCopy,\n theme: themeProp,\n}: AuthorizationConsentNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const description =\n \"expiry\" in authorization\n ? authorization\n : describeAuthorization(authorization, { assets, locale, now });\n const muted = { color: theme.mutedForeground };\n\n return (\n <View style={[styles.root, { backgroundColor: theme.background }]}>\n <ScrollView contentContainerStyle={styles.content}>\n <View style={styles.requester}>\n {requester.icon ? (\n <Image\n accessibilityIgnoresInvertColors\n source={{ uri: requester.icon }}\n style={styles.avatar}\n />\n ) : (\n <View\n importantForAccessibility=\"no\"\n style={[styles.avatar, { backgroundColor: theme.muted }]}\n >\n <Text style={[styles.initial, { color: theme.foreground }]}>\n {requester.name.slice(0, 1).toUpperCase()}\n </Text>\n </View>\n )}\n <View style={styles.flexShrink}>\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Allow {requester.name} to pay?\n </Text>\n {requester.origin && (\n <Text style={[styles.small, muted]}>{requester.origin}</Text>\n )}\n </View>\n </View>\n\n {description.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n <Text style={styles.strong}>{warning}</Text>\n </Callout>\n ))}\n\n {preview && (\n <Callout\n tone={preview.allowed ? \"success\" : \"danger\"}\n glyph={preview.allowed ? \"✓\" : \"✕\"}\n theme={theme}\n >\n <Text style={styles.strong}>\n {preview.allowed ? \"Allowed\" : \"Blocked\"}.\n </Text>{\" \"}\n {preview.sentence}\n </Callout>\n )}\n\n {description.grants.map((grant) => (\n <View\n key={`${grant.asset}:${grant.recipients.map((r) => r.full).join(\",\")}:${grant.perPayment.formatted}:${grant.total.formatted}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <Text style={[styles.assetLabel, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n <View style={styles.limits}>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Per payment</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.perPayment.formatted}\n </Text>\n </View>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Total limit</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.total.formatted}\n </Text>\n </View>\n </View>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Recipients\n </Text>\n {grant.recipients.length ? (\n grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))\n ) : (\n <Text style={[styles.strong, { color: theme.dangerForeground }]}>\n No recipient restriction is displayed\n </Text>\n )}\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment count\n </Text>\n <Text style={[styles.small, muted]}>\n {grant.count === null ? \"No count limit\" : `Up to ${grant.count}`}\n </Text>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment methods\n </Text>\n <View style={styles.chips}>\n {grant.rails.map((rail) => (\n <View\n key={rail}\n style={[\n shared.chip,\n { backgroundColor: theme.muted, borderColor: theme.border },\n ]}\n >\n <Text style={[shared.chipText, { color: theme.foreground }]}>\n {rail}\n </Text>\n </View>\n ))}\n </View>\n </View>\n ))}\n\n <View style={[styles.expiry, { backgroundColor: theme.muted }]}>\n <Text style={[styles.strong, { color: theme.foreground }]}>\n Expires {description.expiry.relative}\n </Text>\n <Text style={[styles.small, muted]}>\n {description.expiry.absolute}\n </Text>\n </View>\n </ScrollView>\n\n {/* Outside the ScrollView so it stays on screen on short landscape phones. */}\n <View\n testID=\"payment-actions\"\n style={[\n styles.footer,\n { borderTopColor: theme.border, backgroundColor: theme.background },\n ]}\n >\n <ActionButton\n label=\"Decline\"\n variant=\"secondary\"\n onPress={onDecline}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Approving…\" : \"Approve\"}\n onPress={onApprove}\n disabled={busy}\n busy={busy}\n theme={theme}\n />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n content: { padding: 16, gap: 12 },\n requester: { flexDirection: \"row\", alignItems: \"center\", gap: 12 },\n avatar: {\n width: 44,\n height: 44,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n initial: { fontSize: 18, fontWeight: \"600\" },\n flexShrink: { flexShrink: 1 },\n small: { fontSize: 12 },\n strong: { fontWeight: \"700\" },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 6 },\n assetLabel: { fontSize: 14, fontWeight: \"600\" },\n limits: { flexDirection: \"row\", gap: 12, marginVertical: 6 },\n limit: { flex: 1 },\n amount: {\n fontSize: 22,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n },\n term: { fontSize: 14, fontWeight: \"500\", marginTop: 8 },\n chips: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 6 },\n expiry: { borderRadius: 10, padding: 12, gap: 2 },\n footer: {\n flexDirection: \"row\",\n gap: 12,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderTopWidth: 1,\n },\n});\n","import { type ReactNode, useState } from \"react\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport type { NativePaymentTheme } from \"./theme\";\n\nexport type Tone = \"success\" | \"danger\" | \"warning\" | \"neutral\";\n\n/** Fill, border and text color of a tone. */\nexport function toneColors(theme: NativePaymentTheme, tone: Tone) {\n if (tone === \"success\")\n return {\n backgroundColor: theme.successBackground,\n borderColor: theme.successBorder,\n color: theme.successForeground,\n };\n if (tone === \"danger\")\n return {\n backgroundColor: theme.dangerBackground,\n borderColor: theme.dangerBorder,\n color: theme.dangerForeground,\n };\n if (tone === \"warning\")\n return {\n backgroundColor: theme.warningBackground,\n borderColor: theme.warningBorder,\n color: theme.warningForeground,\n };\n return {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.foreground,\n };\n}\n\n/** Decorative glyph, hidden from screen readers. */\nexport function Glyph({\n children,\n color,\n}: {\n children: string;\n color: string;\n}) {\n return (\n <Text\n accessible={false}\n importantForAccessibility=\"no\"\n accessibilityElementsHidden\n style={[styles.glyph, { color }]}\n >\n {children}\n </Text>\n );\n}\n\nexport function ActionButton({\n label,\n onPress,\n theme,\n variant = \"primary\",\n disabled = false,\n busy = false,\n}: {\n label: string;\n onPress: () => void;\n theme: NativePaymentTheme;\n variant?: \"primary\" | \"secondary\";\n disabled?: boolean;\n busy?: boolean;\n}) {\n const primary = variant === \"primary\";\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled, busy }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n {\n backgroundColor: primary ? theme.primary : theme.background,\n borderColor: primary ? theme.primary : theme.border,\n opacity: disabled ? 0.55 : pressed ? 0.8 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.buttonLabel,\n { color: primary ? theme.primaryForeground : theme.foreground },\n ]}\n >\n {label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * An address or hash with an icon-only copy action. The app supplies\n * `onCopy` (Expo Clipboard, RN Clipboard, …); without it no button shows.\n */\nexport function CopyableValue({\n value,\n display,\n onCopy,\n theme,\n color = theme.foreground,\n}: {\n value: string;\n /** Shortened form from the view model; else truncated in the middle. */\n display?: string;\n onCopy?: (text: string) => void;\n theme: NativePaymentTheme;\n color?: string;\n}) {\n const [copied, setCopied] = useState(false);\n return (\n <View style={styles.copyRow}>\n <Text\n accessibilityLabel={value}\n numberOfLines={1}\n ellipsizeMode=\"middle\"\n style={[styles.mono, { color }]}\n >\n {display ?? value}\n </Text>\n {onCopy && (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={copied ? `Copied ${value}` : `Copy ${value}`}\n hitSlop={6}\n onPress={() => {\n onCopy(value);\n setCopied(true);\n }}\n style={({ pressed }) => [\n styles.iconButton,\n { borderColor: theme.border, opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Glyph color={theme.foreground}>{copied ? \"✓\" : \"⧉\"}</Glyph>\n </Pressable>\n )}\n </View>\n );\n}\n\n/** A colored callout: warnings, preview verdicts, notices. */\nexport function Callout({\n tone,\n glyph,\n theme,\n role,\n children,\n}: {\n tone: Tone;\n glyph: string;\n theme: NativePaymentTheme;\n role?: \"alert\";\n children: ReactNode;\n}) {\n const colors = toneColors(theme, tone);\n return (\n <View\n accessibilityRole={role}\n style={[\n styles.callout,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{glyph}</Glyph>\n <Text style={[styles.calloutText, { color: colors.color }]}>\n {children}\n </Text>\n </View>\n );\n}\n\nexport const styles = StyleSheet.create({\n glyph: { fontSize: 16, lineHeight: 20, fontWeight: \"700\" },\n button: {\n flex: 1,\n minHeight: 48,\n minWidth: 44,\n borderRadius: 10,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 16,\n },\n buttonLabel: { fontSize: 16, fontWeight: \"600\" },\n copyRow: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n mono: { flexShrink: 1, fontFamily: \"monospace\", fontSize: 13 },\n iconButton: {\n width: 32,\n height: 32,\n borderRadius: 8,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n callout: {\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n },\n calloutText: { flex: 1, fontSize: 14, lineHeight: 20 },\n label: { fontSize: 12, fontWeight: \"500\" },\n heading: { fontSize: 18, fontWeight: \"600\" },\n chip: {\n borderWidth: 1,\n borderRadius: 999,\n paddingHorizontal: 10,\n paddingVertical: 4,\n },\n chipText: { fontSize: 12 },\n});\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport { useColorScheme } from \"react-native\";\n\n/**\n * Colors for the payment components. The values come from the appkit tokens\n * (`packages/ui/src/styles/tokens.css`, converted from HSL to hex). Where a\n * token pair falls below 4.5:1 on a payment surface — muted text on the muted\n * fill, the light destructive red as text — the text color is the darker\n * (light) or lighter (dark) step of the same hue, so every text/background\n * pair the components use meets WCAG AA.\n */\nexport interface NativePaymentTheme {\n scheme: \"light\" | \"dark\";\n background: string;\n foreground: string;\n card: string;\n border: string;\n muted: string;\n mutedForeground: string;\n primary: string;\n primaryForeground: string;\n /** Verified receipts and allowed previews only. */\n successBackground: string;\n successBorder: string;\n successForeground: string;\n /** Mismatch / failed receipts, blocked previews, missing restrictions. */\n dangerBackground: string;\n dangerBorder: string;\n dangerForeground: string;\n /** Non-dismissible warnings. */\n warningBackground: string;\n warningBorder: string;\n warningForeground: string;\n}\n\nexport const lightPaymentTheme: NativePaymentTheme = {\n scheme: \"light\",\n background: \"#ffffff\", // --background 0 0% 100%\n foreground: \"#020817\", // --foreground 222.2 84% 4.9%\n card: \"#ffffff\", // --card\n border: \"#e2e8f0\", // --border 214.3 31.8% 91.4%\n muted: \"#f1f5f9\", // --muted 210 40% 96.1%\n mutedForeground: \"#475569\", // --muted-foreground hue, one step darker\n primary: \"#0f172a\", // --primary 222.2 47.4% 11.2%\n primaryForeground: \"#f8fafc\", // --primary-foreground 210 40% 98%\n successBackground: \"#ecfdf5\",\n successBorder: \"#047857\",\n successForeground: \"#064e3b\",\n dangerBackground: \"#fef2f2\",\n dangerBorder: \"#ef4444\", // --destructive 0 84.2% 60.2%\n dangerForeground: \"#991b1b\",\n warningBackground: \"#fffbeb\",\n warningBorder: \"#b45309\",\n warningForeground: \"#451a03\",\n};\n\nexport const darkPaymentTheme: NativePaymentTheme = {\n scheme: \"dark\",\n background: \"#020817\", // .dark --background\n foreground: \"#f8fafc\", // .dark --foreground\n card: \"#020817\", // .dark --card\n border: \"#1e293b\", // .dark --border 217.2 32.6% 17.5%\n muted: \"#1e293b\", // .dark --muted\n mutedForeground: \"#94a3b8\", // .dark --muted-foreground 215 20.2% 65.1%\n primary: \"#f8fafc\", // .dark --primary\n primaryForeground: \"#0f172a\", // .dark --primary-foreground\n successBackground: \"#022c22\",\n successBorder: \"#10b981\",\n successForeground: \"#d1fae5\",\n dangerBackground: \"#450a0a\",\n dangerBorder: \"#f87171\",\n dangerForeground: \"#fecaca\",\n warningBackground: \"#451a03\",\n warningBorder: \"#f59e0b\",\n warningForeground: \"#fef3c7\",\n};\n\nconst ThemeContext = createContext<NativePaymentTheme | undefined>(undefined);\n\nexport function NativePaymentThemeProvider({\n theme,\n children,\n}: {\n theme: NativePaymentTheme;\n children: ReactNode;\n}) {\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n}\n\n/** The `theme` prop, else the provider's theme, else the system scheme. */\nexport function useNativePaymentTheme(\n override?: NativePaymentTheme,\n): NativePaymentTheme {\n const provided = useContext(ThemeContext);\n const scheme = useColorScheme();\n return (\n override ??\n provided ??\n (scheme === \"dark\" ? darkPaymentTheme : lightPaymentTheme)\n );\n}\n","import {\n type AuthorizationAssetMetadata,\n describeAuthorization,\n formatAuthorizationAmount,\n} from \"@naculus/connect-appkit-core\";\nimport type {\n ListedAuthorization,\n ListedAuthorizationStatus,\n RevokeListedAuthorizationResult,\n} from \"@naculus/connect-core\";\nimport { useState } from \"react\";\nimport { FlatList, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n Glyph,\n styles as shared,\n toneColors,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationListNativeProps {\n entries: ListedAuthorization[] | { entries: ListedAuthorization[] };\n assets?: Record<string, AuthorizationAssetMetadata>;\n onRevoke: (\n entry: ListedAuthorization,\n ) =>\n | RevokeListedAuthorizationResult\n | Promise<RevokeListedAuthorizationResult>;\n /** keyId of the entry being revoked. */\n revokingId?: string;\n /** BCP 47 locale for expiry dates; English when omitted. */\n locale?: string;\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst ENFORCER_LABELS: Record<string, string> = {\n \"evm-session\": \"EVM session key\",\n \"solana-session\": \"Solana session key\",\n \"mpp-voucher\": \"MPP channel key\",\n};\n\nconst STATUS_GLYPHS: Record<ListedAuthorizationStatus, string> = {\n active: \"●\",\n pending: \"◐\",\n revoked: \"✕\",\n expired: \"○\",\n};\n\nfunction StatusBadge({\n status,\n theme,\n}: {\n status: ListedAuthorizationStatus;\n theme: NativePaymentTheme;\n}) {\n const colors =\n status === \"active\"\n ? {\n backgroundColor: theme.primary,\n borderColor: theme.primary,\n color: theme.primaryForeground,\n }\n : status === \"pending\"\n ? {\n backgroundColor: theme.background,\n borderColor: theme.foreground,\n color: theme.foreground,\n }\n : status === \"revoked\"\n ? toneColors(theme, \"danger\")\n : {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.mutedForeground,\n };\n return (\n <View\n accessibilityLabel={`Status: ${status}`}\n style={[\n shared.chip,\n styles.badge,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{STATUS_GLYPHS[status]}</Glyph>\n <Text style={[styles.badgeText, { color: colors.color }]}>{status}</Text>\n </View>\n );\n}\n\n/** React Native counterpart of the web `AuthorizationList`. */\nexport function AuthorizationListNative({\n entries: input,\n assets = {},\n onRevoke,\n revokingId,\n locale,\n onCopy,\n theme: themeProp,\n}: AuthorizationListNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const entries = Array.isArray(input) ? input : input.entries;\n const [confirming, setConfirming] = useState<string | null>(null);\n const [onChain, setOnChain] = useState<ReadonlySet<string>>(new Set());\n const muted = { color: theme.mutedForeground };\n\n const revoke = (entry: ListedAuthorization) =>\n void Promise.resolve(onRevoke(entry)).then((result) => {\n setConfirming(null);\n if (result.onChainRevocationRequired)\n setOnChain((current) => new Set(current).add(entry.keyId));\n });\n\n const renderItem = ({ item: entry }: { item: ListedAuthorization }) => {\n const view = describeAuthorization(entry, { assets, locale });\n const busy = revokingId === entry.keyId;\n const live = entry.status === \"active\" || entry.status === \"pending\";\n return (\n <View\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.cardHeader}>\n <View style={styles.flexShrink}>\n <Text style={[styles.title, { color: theme.foreground }]}>\n {view.label ?? view.grants.map((g) => g.assetLabel).join(\", \")}\n </Text>\n <Text style={[styles.small, muted]}>\n {ENFORCER_LABELS[entry.enforcer] ??\n entry.enforcer.replaceAll(\"-\", \" \")}\n </Text>\n </View>\n <StatusBadge status={entry.status} theme={theme} />\n </View>\n\n {view.grants.map((grant) => {\n const spent = entry.spent?.[grant.asset];\n const total = entry.grants.find(\n (g) => g.asset === grant.asset,\n )?.maxTotal;\n const percent =\n spent !== undefined && total && total > 0n\n ? Math.min(Number((spent * 100n) / total), 100)\n : 0;\n return (\n <View\n key={grant.asset}\n style={[styles.grant, { backgroundColor: theme.muted }]}\n >\n {view.label && (\n <Text style={[styles.strong, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n )}\n {grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))}\n {spent !== undefined && (\n <View>\n <View style={styles.spentRow}>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Spent{\" \"}\n {\n formatAuthorizationAmount(spent, assets[grant.asset])\n .formatted\n }\n </Text>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Total {grant.total.formatted}\n </Text>\n </View>\n <View\n accessibilityRole=\"progressbar\"\n accessibilityLabel={`${grant.assetLabel} spent`}\n accessibilityValue={{ min: 0, max: 100, now: percent }}\n style={[\n styles.track,\n { backgroundColor: theme.background },\n ]}\n >\n <View\n style={[\n styles.fill,\n {\n width: `${percent}%`,\n backgroundColor: theme.primary,\n },\n ]}\n />\n </View>\n </View>\n )}\n </View>\n );\n })}\n\n <Text style={[styles.small, muted]}>\n {entry.status === \"expired\"\n ? \"Expired\"\n : entry.status === \"revoked\"\n ? \"Revoked\"\n : `Expires ${view.expiry.relative}`}{\" \"}\n · {view.expiry.absolute}\n </Text>\n\n {view.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n {warning}\n </Callout>\n ))}\n\n {onChain.has(entry.keyId) && (\n <Callout tone=\"warning\" glyph=\"⛓\" theme={theme}>\n Local access is revoked. Complete the on-chain revocation to stop\n this authorization on chain.\n </Callout>\n )}\n\n {live && (\n <View style={[styles.actions, { borderTopColor: theme.border }]}>\n {confirming === entry.keyId ? (\n <>\n <ActionButton\n label=\"Cancel\"\n variant=\"secondary\"\n onPress={() => setConfirming(null)}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Revoking…\" : \"Confirm revoke\"}\n disabled={busy}\n busy={busy}\n onPress={() => revoke(entry)}\n theme={theme}\n />\n </>\n ) : (\n <ActionButton\n label=\"Revoke\"\n variant=\"secondary\"\n onPress={() => setConfirming(entry.keyId)}\n theme={theme}\n />\n )}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <FlatList\n data={entries}\n keyExtractor={(entry) => entry.keyId}\n renderItem={renderItem}\n extraData={[confirming, onChain, revokingId, theme]}\n contentContainerStyle={styles.list}\n style={{ backgroundColor: theme.background }}\n ListHeaderComponent={\n entries.length ? (\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Payment authorizations\n </Text>\n ) : undefined\n }\n ListEmptyComponent={\n <View style={[styles.empty, { borderColor: theme.border }]}>\n <Text\n accessibilityRole=\"header\"\n style={[styles.title, { color: theme.foreground }]}\n >\n No payment authorizations\n </Text>\n <Text style={[styles.body, muted]}>\n Approvals you create will appear here.\n </Text>\n </View>\n }\n />\n );\n}\n\nconst styles = StyleSheet.create({\n list: { padding: 16, gap: 12 },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 10 },\n cardHeader: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n gap: 8,\n },\n flexShrink: { flexShrink: 1 },\n title: { fontSize: 16, fontWeight: \"600\" },\n small: { fontSize: 12 },\n body: { fontSize: 14, textAlign: \"center\" },\n strong: { fontSize: 14, fontWeight: \"500\" },\n badge: { flexDirection: \"row\", alignItems: \"center\", gap: 4 },\n badgeText: { fontSize: 12, fontWeight: \"600\", textTransform: \"capitalize\" },\n grant: { borderRadius: 10, padding: 12, gap: 6 },\n spentRow: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n track: { height: 8, borderRadius: 4, overflow: \"hidden\", marginTop: 4 },\n fill: { height: \"100%\" },\n actions: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n gap: 8,\n borderTopWidth: 1,\n paddingTop: 12,\n },\n empty: {\n borderWidth: 1,\n borderStyle: \"dashed\",\n borderRadius: 12,\n padding: 32,\n alignItems: \"center\",\n gap: 4,\n },\n});\n","import {\n type AuthorizationAssetMetadata,\n formatAuthorizationAmount,\n type PaymentRecord,\n type PaymentVerificationStatus,\n} from \"@naculus/connect-appkit-core\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { CopyableValue, Glyph, type Tone, toneColors } from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface PaymentReceiptNativeProps {\n record: PaymentRecord;\n assets?: Record<string, AuthorizationAssetMetadata>;\n /**\n * Accepted for parity with the other payment components; the receipt has\n * no locale-dependent text yet (amounts use the core formatter).\n */\n locale?: string;\n /** Shows \"View on explorer\" when set and the record has a reference. */\n onOpenExplorer?: (record: PaymentRecord) => void;\n /** Copies the recipient or settlement reference. */\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst VERIFICATION: Record<\n PaymentVerificationStatus,\n { title: string; detail: string; glyph: string; tone: Tone }\n> = {\n unverified: {\n title: \"Unverified\",\n detail: \"Reported by the server, not yet checked.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n pending: {\n title: \"Checking\",\n detail: \"Checking on chain.\",\n glyph: \"…\",\n tone: \"neutral\",\n },\n verified: {\n title: \"Verified\",\n detail: \"Verified on chain.\",\n glyph: \"✓\",\n tone: \"success\",\n },\n mismatch: {\n title: \"Mismatch\",\n detail: \"The on-chain settlement does not match this payment.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n failed: {\n title: \"Verification failed\",\n detail: \"The settlement could not be verified.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n unavailable: {\n title: \"Verification unavailable\",\n detail: \"On-chain checking is unavailable. Retry later.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n};\n\n/** React Native counterpart of the web `PaymentReceipt`. */\nexport function PaymentReceiptNative({\n record,\n assets = {},\n onOpenExplorer,\n onCopy,\n theme: themeProp,\n}: PaymentReceiptNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const status = record.verification.status;\n const state = VERIFICATION[status];\n const colors = toneColors(theme, state.tone);\n const muted = { color: theme.mutedForeground };\n const amount =\n record.amount === null\n ? \"Amount not reported\"\n : /^\\d+$/.test(record.amount)\n ? formatAuthorizationAmount(\n BigInt(record.amount),\n record.asset ? assets[record.asset] : undefined,\n ).formatted\n : `${record.amount} base units`;\n\n return (\n <View\n testID={`verification-${status}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.header}>\n <Text style={[styles.eyebrow, muted]}>PAYMENT RECEIPT</Text>\n <Text\n accessibilityRole=\"header\"\n style={[styles.amount, { color: theme.foreground }]}\n >\n {amount}\n </Text>\n <Text style={[styles.small, muted]}>\n {record.asset\n ? (assets[record.asset]?.symbol ?? record.asset)\n : \"Asset not reported\"}\n </Text>\n </View>\n\n <View\n testID=\"verification-panel\"\n accessibilityLiveRegion=\"polite\"\n accessible\n accessibilityLabel={`${state.title}. ${state.detail}${record.verification.reason ? ` Reason: ${record.verification.reason}` : \"\"}`}\n style={[\n styles.panel,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{state.glyph}</Glyph>\n <View style={styles.flexShrink}>\n <Text style={[styles.badge, { color: colors.color }]}>\n {state.title}\n </Text>\n <Text style={[styles.body, { color: colors.color }]}>\n {state.detail}\n </Text>\n {record.verification.reason && (\n <Text\n numberOfLines={2}\n style={[styles.body, styles.strong, { color: colors.color }]}\n >\n Reason: {record.verification.reason}\n </Text>\n )}\n </View>\n </View>\n\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Recipient</Text>\n {record.payTo ? (\n <CopyableValue value={record.payTo} onCopy={onCopy} theme={theme} />\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n <View style={styles.row}>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Protocol</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n {record.protocol === \"mpp\" ? \"MPP\" : record.protocol}\n </Text>\n </View>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Time</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not recorded\n </Text>\n </View>\n </View>\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Settlement reference</Text>\n {record.reference ? (\n <>\n <CopyableValue\n value={record.reference}\n onCopy={onCopy}\n theme={theme}\n />\n {onOpenExplorer && (\n <Pressable\n accessibilityRole=\"link\"\n accessibilityLabel=\"View on explorer\"\n onPress={() => onOpenExplorer(record)}\n style={styles.link}\n >\n <Text style={[styles.linkText, { color: theme.foreground }]}>\n View on explorer ↗\n </Text>\n </Pressable>\n )}\n </>\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: { borderWidth: 1, borderRadius: 16, padding: 20, gap: 16 },\n header: { alignItems: \"center\", gap: 4 },\n eyebrow: { fontSize: 12, fontWeight: \"500\", letterSpacing: 0.6 },\n amount: {\n fontSize: 32,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n textAlign: \"center\",\n },\n small: { fontSize: 12 },\n body: { fontSize: 14, lineHeight: 20 },\n strong: { fontWeight: \"600\" },\n // Fixed height: badge, explanation and a two-line reason fit, so the card\n // does not jump as verification moves from pending to its final state.\n panel: {\n height: 128,\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n overflow: \"hidden\",\n },\n flexShrink: { flexShrink: 1 },\n badge: { fontSize: 13, fontWeight: \"700\", marginBottom: 2 },\n field: { gap: 4 },\n row: { flexDirection: \"row\", gap: 12 },\n cell: { flex: 1, gap: 4 },\n link: { minHeight: 44, minWidth: 44, justifyContent: \"center\" },\n linkText: {\n fontSize: 13,\n fontWeight: \"500\",\n textDecorationLine: \"underline\",\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iCAKO;AAEP,IAAAA,uBAA0D;;;ACP1D,mBAAyC;AACzC,0BAAkD;AAyC9C;AAnCG,SAAS,WAAW,OAA2B,MAAY;AAChE,MAAI,SAAS;AACX,WAAO;AAAA,MACL,iBAAiB,MAAM;AAAA,MACvB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf;AACF,MAAI,SAAS;AACX,WAAO;AAAA,MACL,iBAAiB,MAAM;AAAA,MACvB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf;AACF,MAAI,SAAS;AACX,WAAO;AAAA,MACL,iBAAiB,MAAM;AAAA,MACvB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf;AACF,SAAO;AAAA,IACL,iBAAiB,MAAM;AAAA,IACvB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,EACf;AACF;AAGO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AACF,GAGG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,YAAY;AAAA,MACZ,2BAA0B;AAAA,MAC1B,6BAA2B;AAAA,MAC3B,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,CAAC;AAAA,MAE9B;AAAA;AAAA,EACH;AAEJ;AAEO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AACT,GAOG;AACD,QAAM,UAAU,YAAY;AAC5B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,mBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,oBAAoB,EAAE,UAAU,KAAK;AAAA,MACrC;AAAA,MACA;AAAA,MACA,OAAO,CAAC,EAAE,QAAQ,MAAM;AAAA,QACtB,OAAO;AAAA,QACP;AAAA,UACE,iBAAiB,UAAU,MAAM,UAAU,MAAM;AAAA,UACjD,aAAa,UAAU,MAAM,UAAU,MAAM;AAAA,UAC7C,SAAS,WAAW,OAAO,UAAU,MAAM;AAAA,QAC7C;AAAA,MACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,OAAO;AAAA,YACP,EAAE,OAAO,UAAU,MAAM,oBAAoB,MAAM,WAAW;AAAA,UAChE;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAMO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,MAAM;AAChB,GAOG;AACD,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAS,KAAK;AAC1C,SACE,6CAAC,4BAAK,OAAO,OAAO,SAClB;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,oBAAoB;AAAA,QACpB,eAAe;AAAA,QACf,eAAc;AAAA,QACd,OAAO,CAAC,OAAO,MAAM,EAAE,MAAM,CAAC;AAAA,QAE7B,qBAAW;AAAA;AAAA,IACd;AAAA,IACC,UACC;AAAA,MAAC;AAAA;AAAA,QACC,mBAAkB;AAAA,QAClB,oBAAoB,SAAS,UAAU,KAAK,KAAK,QAAQ,KAAK;AAAA,QAC9D,SAAS;AAAA,QACT,SAAS,MAAM;AACb,iBAAO,KAAK;AACZ,oBAAU,IAAI;AAAA,QAChB;AAAA,QACA,OAAO,CAAC,EAAE,QAAQ,MAAM;AAAA,UACtB,OAAO;AAAA,UACP,EAAE,aAAa,MAAM,QAAQ,SAAS,UAAU,MAAM,EAAE;AAAA,QAC1D;AAAA,QAEA,sDAAC,SAAM,OAAO,MAAM,YAAa,mBAAS,WAAM,UAAI;AAAA;AAAA,IACtD;AAAA,KAEJ;AAEJ;AAGO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,SAAS,WAAW,OAAO,IAAI;AACrC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,mBAAmB;AAAA,MACnB,OAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,UACE,iBAAiB,OAAO;AAAA,UACxB,aAAa,OAAO;AAAA,QACtB;AAAA,MACF;AAAA,MAEA;AAAA,oDAAC,SAAM,OAAO,OAAO,OAAQ,iBAAM;AAAA,QACnC,4CAAC,4BAAK,OAAO,CAAC,OAAO,aAAa,EAAE,OAAO,OAAO,MAAM,CAAC,GACtD,UACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,IAAM,SAAS,+BAAW,OAAO;AAAA,EACtC,OAAO,EAAE,UAAU,IAAI,YAAY,IAAI,YAAY,MAAM;AAAA,EACzD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,EACrB;AAAA,EACA,aAAa,EAAE,UAAU,IAAI,YAAY,MAAM;AAAA,EAC/C,SAAS,EAAE,eAAe,OAAO,YAAY,UAAU,KAAK,EAAE;AAAA,EAC9D,MAAM,EAAE,YAAY,GAAG,YAAY,aAAa,UAAU,GAAG;AAAA,EAC7D,YAAY;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,SAAS;AAAA,IACP,eAAe;AAAA,IACf,KAAK;AAAA,IACL,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,aAAa,EAAE,MAAM,GAAG,UAAU,IAAI,YAAY,GAAG;AAAA,EACrD,OAAO,EAAE,UAAU,IAAI,YAAY,MAAM;AAAA,EACzC,SAAS,EAAE,UAAU,IAAI,YAAY,MAAM;AAAA,EAC3C,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,UAAU,EAAE,UAAU,GAAG;AAC3B,CAAC;;;AC7ND,IAAAC,gBAA0D;AAC1D,IAAAC,uBAA+B;AAsF3B,IAAAC,sBAAA;AApDG,IAAM,oBAAwC;AAAA,EACnD,QAAQ;AAAA,EACR,YAAY;AAAA;AAAA,EACZ,YAAY;AAAA;AAAA,EACZ,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA,EACR,OAAO;AAAA;AAAA,EACP,iBAAiB;AAAA;AAAA,EACjB,SAAS;AAAA;AAAA,EACT,mBAAmB;AAAA;AAAA,EACnB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,cAAc;AAAA;AAAA,EACd,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,mBAAmB;AACrB;AAEO,IAAM,mBAAuC;AAAA,EAClD,QAAQ;AAAA,EACR,YAAY;AAAA;AAAA,EACZ,YAAY;AAAA;AAAA,EACZ,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA,EACR,OAAO;AAAA;AAAA,EACP,iBAAiB;AAAA;AAAA,EACjB,SAAS;AAAA;AAAA,EACT,mBAAmB;AAAA;AAAA,EACnB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,mBAAmB;AACrB;AAEA,IAAM,mBAAe,6BAA8C,MAAS;AAErE,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AACF,GAGG;AACD,SACE,6CAAC,aAAa,UAAb,EAAsB,OAAO,OAAQ,UAAS;AAEnD;AAGO,SAAS,sBACd,UACoB;AACpB,QAAM,eAAW,0BAAW,YAAY;AACxC,QAAM,aAAS,qCAAe;AAC9B,SACE,YACA,aACC,WAAW,SAAS,mBAAmB;AAE5C;;;AFvCY,IAAAC,sBAAA;AAzBL,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,OAAO;AACT,GAAoC;AAClC,QAAM,QAAQ,sBAAsB,SAAS;AAC7C,QAAM,cACJ,YAAY,gBACR,oBACA,kDAAsB,eAAe,EAAE,QAAQ,QAAQ,IAAI,CAAC;AAClE,QAAM,QAAQ,EAAE,OAAO,MAAM,gBAAgB;AAE7C,SACE,8CAAC,6BAAK,OAAO,CAACC,QAAO,MAAM,EAAE,iBAAiB,MAAM,WAAW,CAAC,GAC9D;AAAA,kDAAC,mCAAW,uBAAuBA,QAAO,SACxC;AAAA,oDAAC,6BAAK,OAAOA,QAAO,WACjB;AAAA,kBAAU,OACT;AAAA,UAAC;AAAA;AAAA,YACC,kCAAgC;AAAA,YAChC,QAAQ,EAAE,KAAK,UAAU,KAAK;AAAA,YAC9B,OAAOA,QAAO;AAAA;AAAA,QAChB,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,2BAA0B;AAAA,YAC1B,OAAO,CAACA,QAAO,QAAQ,EAAE,iBAAiB,MAAM,MAAM,CAAC;AAAA,YAEvD,uDAAC,6BAAK,OAAO,CAACA,QAAO,SAAS,EAAE,OAAO,MAAM,WAAW,CAAC,GACtD,oBAAU,KAAK,MAAM,GAAG,CAAC,EAAE,YAAY,GAC1C;AAAA;AAAA,QACF;AAAA,QAEF,8CAAC,6BAAK,OAAOA,QAAO,YAClB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,mBAAkB;AAAA,cAClB,OAAO,CAAC,OAAO,SAAS,EAAE,OAAO,MAAM,WAAW,CAAC;AAAA,cACpD;AAAA;AAAA,gBACQ,UAAU;AAAA,gBAAK;AAAA;AAAA;AAAA,UACxB;AAAA,UACC,UAAU,UACT,6CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAAI,oBAAU,QAAO;AAAA,WAE1D;AAAA,SACF;AAAA,MAEC,YAAY,SAAS,IAAI,CAAC,YACzB;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,OAAM;AAAA,UACN,MAAK;AAAA,UACL;AAAA,UAEA,uDAAC,6BAAK,OAAOA,QAAO,QAAS,mBAAQ;AAAA;AAAA,QANhC;AAAA,MAOP,CACD;AAAA,MAEA,WACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,QAAQ,UAAU,YAAY;AAAA,UACpC,OAAO,QAAQ,UAAU,WAAM;AAAA,UAC/B;AAAA,UAEA;AAAA,0DAAC,6BAAK,OAAOA,QAAO,QACjB;AAAA,sBAAQ,UAAU,YAAY;AAAA,cAAU;AAAA,eAC3C;AAAA,YAAQ;AAAA,YACP,QAAQ;AAAA;AAAA;AAAA,MACX;AAAA,MAGD,YAAY,OAAO,IAAI,CAAC,UACvB;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO;AAAA,YACLA,QAAO;AAAA,YACP,EAAE,iBAAiB,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,UAC3D;AAAA,UAEA;AAAA,yDAAC,6BAAK,OAAO,CAACA,QAAO,YAAY,EAAE,OAAO,MAAM,WAAW,CAAC,GACzD,gBAAM,YACT;AAAA,YACA,8CAAC,6BAAK,OAAOA,QAAO,QAClB;AAAA,4DAAC,6BAAK,OAAOA,QAAO,OAClB;AAAA,6DAAC,6BAAK,OAAO,CAAC,OAAO,OAAO,KAAK,GAAG,yBAAW;AAAA,gBAC/C,6CAAC,6BAAK,OAAO,CAACA,QAAO,QAAQ,EAAE,OAAO,MAAM,WAAW,CAAC,GACrD,gBAAM,WAAW,WACpB;AAAA,iBACF;AAAA,cACA,8CAAC,6BAAK,OAAOA,QAAO,OAClB;AAAA,6DAAC,6BAAK,OAAO,CAAC,OAAO,OAAO,KAAK,GAAG,yBAAW;AAAA,gBAC/C,6CAAC,6BAAK,OAAO,CAACA,QAAO,QAAQ,EAAE,OAAO,MAAM,WAAW,CAAC,GACrD,gBAAM,MAAM,WACf;AAAA,iBACF;AAAA,eACF;AAAA,YAEA,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG,wBAEzD;AAAA,YACC,MAAM,WAAW,SAChB,MAAM,WAAW,IAAI,CAAC,cACpB;AAAA,cAAC;AAAA;AAAA,gBAEC,OAAO,UAAU;AAAA,gBACjB,SAAS,UAAU;AAAA,gBACnB;AAAA,gBACA;AAAA;AAAA,cAJK,UAAU;AAAA,YAKjB,CACD,IAED,6CAAC,6BAAK,OAAO,CAACA,QAAO,QAAQ,EAAE,OAAO,MAAM,iBAAiB,CAAC,GAAG,mDAEjE;AAAA,YAGF,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG,2BAEzD;AAAA,YACA,6CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAC9B,gBAAM,UAAU,OAAO,mBAAmB,SAAS,MAAM,KAAK,IACjE;AAAA,YAEA,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG,6BAEzD;AAAA,YACA,6CAAC,6BAAK,OAAOA,QAAO,OACjB,gBAAM,MAAM,IAAI,CAAC,SAChB;AAAA,cAAC;AAAA;AAAA,gBAEC,OAAO;AAAA,kBACL,OAAO;AAAA,kBACP,EAAE,iBAAiB,MAAM,OAAO,aAAa,MAAM,OAAO;AAAA,gBAC5D;AAAA,gBAEA,uDAAC,6BAAK,OAAO,CAAC,OAAO,UAAU,EAAE,OAAO,MAAM,WAAW,CAAC,GACvD,gBACH;AAAA;AAAA,cARK;AAAA,YASP,CACD,GACH;AAAA;AAAA;AAAA,QAnEK,GAAG,MAAM,KAAK,IAAI,MAAM,WAAW,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,MAAM,WAAW,SAAS,IAAI,MAAM,MAAM,SAAS;AAAA,MAoE7H,CACD;AAAA,MAED,8CAAC,6BAAK,OAAO,CAACA,QAAO,QAAQ,EAAE,iBAAiB,MAAM,MAAM,CAAC,GAC3D;AAAA,sDAAC,6BAAK,OAAO,CAACA,QAAO,QAAQ,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG;AAAA;AAAA,UAChD,YAAY,OAAO;AAAA,WAC9B;AAAA,QACA,6CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAC9B,sBAAY,OAAO,UACtB;AAAA,SACF;AAAA,OACF;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAO;AAAA,UACLA,QAAO;AAAA,UACP,EAAE,gBAAgB,MAAM,QAAQ,iBAAiB,MAAM,WAAW;AAAA,QACpE;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,SAAQ;AAAA,cACR,SAAS;AAAA,cACT;AAAA;AAAA,UACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,OAAO,oBAAe;AAAA,cAC7B,SAAS;AAAA,cACT,UAAU;AAAA,cACV;AAAA,cACA;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAMA,UAAS,gCAAW,OAAO;AAAA,EAC/B,MAAM,EAAE,MAAM,EAAE;AAAA,EAChB,SAAS,EAAE,SAAS,IAAI,KAAK,GAAG;AAAA,EAChC,WAAW,EAAE,eAAe,OAAO,YAAY,UAAU,KAAK,GAAG;AAAA,EACjE,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,SAAS,EAAE,UAAU,IAAI,YAAY,MAAM;AAAA,EAC3C,YAAY,EAAE,YAAY,EAAE;AAAA,EAC5B,OAAO,EAAE,UAAU,GAAG;AAAA,EACtB,QAAQ,EAAE,YAAY,MAAM;AAAA,EAC5B,MAAM,EAAE,aAAa,GAAG,cAAc,IAAI,SAAS,IAAI,KAAK,EAAE;AAAA,EAC9D,YAAY,EAAE,UAAU,IAAI,YAAY,MAAM;AAAA,EAC9C,QAAQ,EAAE,eAAe,OAAO,KAAK,IAAI,gBAAgB,EAAE;AAAA,EAC3D,OAAO,EAAE,MAAM,EAAE;AAAA,EACjB,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa,CAAC,cAAc;AAAA,EAC9B;AAAA,EACA,MAAM,EAAE,UAAU,IAAI,YAAY,OAAO,WAAW,EAAE;AAAA,EACtD,OAAO,EAAE,eAAe,OAAO,UAAU,QAAQ,KAAK,EAAE;AAAA,EACxD,QAAQ,EAAE,cAAc,IAAI,SAAS,IAAI,KAAK,EAAE;AAAA,EAChD,QAAQ;AAAA,IACN,eAAe;AAAA,IACf,KAAK;AAAA,IACL,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EAClB;AACF,CAAC;;;AGnQD,IAAAC,8BAIO;AAMP,IAAAC,gBAAyB;AACzB,IAAAC,uBAAiD;AAoE7C,IAAAC,sBAAA;AAzCJ,IAAM,kBAA0C;AAAA,EAC9C,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,eAAe;AACjB;AAEA,IAAM,gBAA2D;AAAA,EAC/D,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AACF,GAGG;AACD,QAAM,SACJ,WAAW,WACP;AAAA,IACE,iBAAiB,MAAM;AAAA,IACvB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,EACf,IACA,WAAW,YACT;AAAA,IACE,iBAAiB,MAAM;AAAA,IACvB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,EACf,IACA,WAAW,YACT,WAAW,OAAO,QAAQ,IAC1B;AAAA,IACE,iBAAiB,MAAM;AAAA,IACvB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,EACf;AACV,SACE;AAAA,IAAC;AAAA;AAAA,MACC,oBAAoB,WAAW,MAAM;AAAA,MACrC,OAAO;AAAA,QACL,OAAO;AAAA,QACPC,QAAO;AAAA,QACP;AAAA,UACE,iBAAiB,OAAO;AAAA,UACxB,aAAa,OAAO;AAAA,QACtB;AAAA,MACF;AAAA,MAEA;AAAA,qDAAC,SAAM,OAAO,OAAO,OAAQ,wBAAc,MAAM,GAAE;AAAA,QACnD,6CAAC,6BAAK,OAAO,CAACA,QAAO,WAAW,EAAE,OAAO,OAAO,MAAM,CAAC,GAAI,kBAAO;AAAA;AAAA;AAAA,EACpE;AAEJ;AAGO,SAAS,wBAAwB;AAAA,EACtC,SAAS;AAAA,EACT,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAAiC;AAC/B,QAAM,QAAQ,sBAAsB,SAAS;AAC7C,QAAM,UAAU,MAAM,QAAQ,KAAK,IAAI,QAAQ,MAAM;AACrD,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAwB,IAAI;AAChE,QAAM,CAAC,SAAS,UAAU,QAAI,wBAA8B,oBAAI,IAAI,CAAC;AACrE,QAAM,QAAQ,EAAE,OAAO,MAAM,gBAAgB;AAE7C,QAAM,SAAS,CAAC,UACd,KAAK,QAAQ,QAAQ,SAAS,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW;AACrD,kBAAc,IAAI;AAClB,QAAI,OAAO;AACT,iBAAW,CAAC,YAAY,IAAI,IAAI,OAAO,EAAE,IAAI,MAAM,KAAK,CAAC;AAAA,EAC7D,CAAC;AAEH,QAAM,aAAa,CAAC,EAAE,MAAM,MAAM,MAAqC;AACrE,UAAM,WAAO,mDAAsB,OAAO,EAAE,QAAQ,OAAO,CAAC;AAC5D,UAAM,OAAO,eAAe,MAAM;AAClC,UAAM,OAAO,MAAM,WAAW,YAAY,MAAM,WAAW;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACLA,QAAO;AAAA,UACP,EAAE,iBAAiB,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,QAC3D;AAAA,QAEA;AAAA,wDAAC,6BAAK,OAAOA,QAAO,YAClB;AAAA,0DAAC,6BAAK,OAAOA,QAAO,YAClB;AAAA,2DAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,EAAE,OAAO,MAAM,WAAW,CAAC,GACpD,eAAK,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,GAC/D;AAAA,cACA,6CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAC9B,0BAAgB,MAAM,QAAQ,KAC7B,MAAM,SAAS,WAAW,KAAK,GAAG,GACtC;AAAA,eACF;AAAA,YACA,6CAAC,eAAY,QAAQ,MAAM,QAAQ,OAAc;AAAA,aACnD;AAAA,UAEC,KAAK,OAAO,IAAI,CAAC,UAAU;AAC1B,kBAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK;AACvC,kBAAM,QAAQ,MAAM,OAAO;AAAA,cACzB,CAAC,MAAM,EAAE,UAAU,MAAM;AAAA,YAC3B,GAAG;AACH,kBAAM,UACJ,UAAU,UAAa,SAAS,QAAQ,KACpC,KAAK,IAAI,OAAQ,QAAQ,OAAQ,KAAK,GAAG,GAAG,IAC5C;AACN,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,OAAO,CAACA,QAAO,OAAO,EAAE,iBAAiB,MAAM,MAAM,CAAC;AAAA,gBAErD;AAAA,uBAAK,SACJ,6CAAC,6BAAK,OAAO,CAACA,QAAO,QAAQ,EAAE,OAAO,MAAM,WAAW,CAAC,GACrD,gBAAM,YACT;AAAA,kBAED,MAAM,WAAW,IAAI,CAAC,cACrB;AAAA,oBAAC;AAAA;AAAA,sBAEC,OAAO,UAAU;AAAA,sBACjB,SAAS,UAAU;AAAA,sBACnB;AAAA,sBACA;AAAA;AAAA,oBAJK,UAAU;AAAA,kBAKjB,CACD;AAAA,kBACA,UAAU,UACT,8CAAC,6BACC;AAAA,kEAAC,6BAAK,OAAOA,QAAO,UAClB;AAAA,oEAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG;AAAA;AAAA,wBAClD;AAAA,4BAEJ,uDAA0B,OAAO,OAAO,MAAM,KAAK,CAAC,EACjD;AAAA,yBAEP;AAAA,sBACA,8CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG;AAAA;AAAA,wBACjD,MAAM,MAAM;AAAA,yBACrB;AAAA,uBACF;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,mBAAkB;AAAA,wBAClB,oBAAoB,GAAG,MAAM,UAAU;AAAA,wBACvC,oBAAoB,EAAE,KAAK,GAAG,KAAK,KAAK,KAAK,QAAQ;AAAA,wBACrD,OAAO;AAAA,0BACLA,QAAO;AAAA,0BACP,EAAE,iBAAiB,MAAM,WAAW;AAAA,wBACtC;AAAA,wBAEA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO;AAAA,8BACLA,QAAO;AAAA,8BACP;AAAA,gCACE,OAAO,GAAG,OAAO;AAAA,gCACjB,iBAAiB,MAAM;AAAA,8BACzB;AAAA,4BACF;AAAA;AAAA,wBACF;AAAA;AAAA,oBACF;AAAA,qBACF;AAAA;AAAA;AAAA,cAlDG,MAAM;AAAA,YAoDb;AAAA,UAEJ,CAAC;AAAA,UAED,8CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAC9B;AAAA,kBAAM,WAAW,YACd,YACA,MAAM,WAAW,YACf,YACA,WAAW,KAAK,OAAO,QAAQ;AAAA,YAAI;AAAA,YAAI;AAAA,YAC1C,KAAK,OAAO;AAAA,aACjB;AAAA,UAEC,KAAK,SAAS,IAAI,CAAC,YAClB;AAAA,YAAC;AAAA;AAAA,cAEC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,MAAK;AAAA,cACL;AAAA,cAEC;AAAA;AAAA,YANI;AAAA,UAOP,CACD;AAAA,UAEA,QAAQ,IAAI,MAAM,KAAK,KACtB,6CAAC,WAAQ,MAAK,WAAU,OAAM,UAAI,OAAc,4GAGhD;AAAA,UAGD,QACC,6CAAC,6BAAK,OAAO,CAACA,QAAO,SAAS,EAAE,gBAAgB,MAAM,OAAO,CAAC,GAC3D,yBAAe,MAAM,QACpB,8EACE;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAS,MAAM,cAAc,IAAI;AAAA,gBACjC;AAAA;AAAA,YACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO,mBAAc;AAAA,gBAC5B,UAAU;AAAA,gBACV;AAAA,gBACA,SAAS,MAAM,OAAO,KAAK;AAAA,gBAC3B;AAAA;AAAA,YACF;AAAA,aACF,IAEA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,SAAQ;AAAA,cACR,SAAS,MAAM,cAAc,MAAM,KAAK;AAAA,cACxC;AAAA;AAAA,UACF,GAEJ;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,cAAc,CAAC,UAAU,MAAM;AAAA,MAC/B;AAAA,MACA,WAAW,CAAC,YAAY,SAAS,YAAY,KAAK;AAAA,MAClD,uBAAuBA,QAAO;AAAA,MAC9B,OAAO,EAAE,iBAAiB,MAAM,WAAW;AAAA,MAC3C,qBACE,QAAQ,SACN;AAAA,QAAC;AAAA;AAAA,UACC,mBAAkB;AAAA,UAClB,OAAO,CAAC,OAAO,SAAS,EAAE,OAAO,MAAM,WAAW,CAAC;AAAA,UACpD;AAAA;AAAA,MAED,IACE;AAAA,MAEN,oBACE,8CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,EAAE,aAAa,MAAM,OAAO,CAAC,GACvD;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,mBAAkB;AAAA,YAClB,OAAO,CAACA,QAAO,OAAO,EAAE,OAAO,MAAM,WAAW,CAAC;AAAA,YAClD;AAAA;AAAA,QAED;AAAA,QACA,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,KAAK,GAAG,oDAEnC;AAAA,SACF;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAMA,UAAS,gCAAW,OAAO;AAAA,EAC/B,MAAM,EAAE,SAAS,IAAI,KAAK,GAAG;AAAA,EAC7B,MAAM,EAAE,aAAa,GAAG,cAAc,IAAI,SAAS,IAAI,KAAK,GAAG;AAAA,EAC/D,YAAY;AAAA,IACV,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,YAAY,EAAE,YAAY,EAAE;AAAA,EAC5B,OAAO,EAAE,UAAU,IAAI,YAAY,MAAM;AAAA,EACzC,OAAO,EAAE,UAAU,GAAG;AAAA,EACtB,MAAM,EAAE,UAAU,IAAI,WAAW,SAAS;AAAA,EAC1C,QAAQ,EAAE,UAAU,IAAI,YAAY,MAAM;AAAA,EAC1C,OAAO,EAAE,eAAe,OAAO,YAAY,UAAU,KAAK,EAAE;AAAA,EAC5D,WAAW,EAAE,UAAU,IAAI,YAAY,OAAO,eAAe,aAAa;AAAA,EAC1E,OAAO,EAAE,cAAc,IAAI,SAAS,IAAI,KAAK,EAAE;AAAA,EAC/C,UAAU;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,KAAK;AAAA,EACP;AAAA,EACA,OAAO,EAAE,QAAQ,GAAG,cAAc,GAAG,UAAU,UAAU,WAAW,EAAE;AAAA,EACtE,MAAM,EAAE,QAAQ,OAAO;AAAA,EACvB,SAAS;AAAA,IACP,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AACF,CAAC;;;ACxVD,IAAAC,8BAKO;AACP,IAAAC,uBAAkD;AA4F5C,IAAAC,sBAAA;AAzEN,IAAM,eAGF;AAAA,EACF,YAAY;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAGO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAA8B;AAC5B,QAAM,QAAQ,sBAAsB,SAAS;AAC7C,QAAM,SAAS,OAAO,aAAa;AACnC,QAAM,QAAQ,aAAa,MAAM;AACjC,QAAM,SAAS,WAAW,OAAO,MAAM,IAAI;AAC3C,QAAM,QAAQ,EAAE,OAAO,MAAM,gBAAgB;AAC7C,QAAM,SACJ,OAAO,WAAW,OACd,wBACA,QAAQ,KAAK,OAAO,MAAM,QACxB;AAAA,IACE,OAAO,OAAO,MAAM;AAAA,IACpB,OAAO,QAAQ,OAAO,OAAO,KAAK,IAAI;AAAA,EACxC,EAAE,YACF,GAAG,OAAO,MAAM;AAExB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ,gBAAgB,MAAM;AAAA,MAC9B,OAAO;AAAA,QACLC,QAAO;AAAA,QACP,EAAE,iBAAiB,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,MAC3D;AAAA,MAEA;AAAA,sDAAC,6BAAK,OAAOA,QAAO,QAClB;AAAA,uDAAC,6BAAK,OAAO,CAACA,QAAO,SAAS,KAAK,GAAG,6BAAe;AAAA,UACrD;AAAA,YAAC;AAAA;AAAA,cACC,mBAAkB;AAAA,cAClB,OAAO,CAACA,QAAO,QAAQ,EAAE,OAAO,MAAM,WAAW,CAAC;AAAA,cAEjD;AAAA;AAAA,UACH;AAAA,UACA,6CAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAC9B,iBAAO,QACH,OAAO,OAAO,KAAK,GAAG,UAAU,OAAO,QACxC,sBACN;AAAA,WACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP,yBAAwB;AAAA,YACxB,YAAU;AAAA,YACV,oBAAoB,GAAG,MAAM,KAAK,KAAK,MAAM,MAAM,GAAG,OAAO,aAAa,SAAS,YAAY,OAAO,aAAa,MAAM,KAAK,EAAE;AAAA,YAChI,OAAO;AAAA,cACLA,QAAO;AAAA,cACP;AAAA,gBACE,iBAAiB,OAAO;AAAA,gBACxB,aAAa,OAAO;AAAA,cACtB;AAAA,YACF;AAAA,YAEA;AAAA,2DAAC,SAAM,OAAO,OAAO,OAAQ,gBAAM,OAAM;AAAA,cACzC,8CAAC,6BAAK,OAAOA,QAAO,YAClB;AAAA,6DAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,EAAE,OAAO,OAAO,MAAM,CAAC,GAChD,gBAAM,OACT;AAAA,gBACA,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,OAAO,MAAM,CAAC,GAC/C,gBAAM,QACT;AAAA,gBACC,OAAO,aAAa,UACnB;AAAA,kBAAC;AAAA;AAAA,oBACC,eAAe;AAAA,oBACf,OAAO,CAACA,QAAO,MAAMA,QAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,oBAC5D;AAAA;AAAA,sBACU,OAAO,aAAa;AAAA;AAAA;AAAA,gBAC/B;AAAA,iBAEJ;AAAA;AAAA;AAAA,QACF;AAAA,QAEA,8CAAC,6BAAK,OAAOA,QAAO,OAClB;AAAA,uDAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAAG,uBAAS;AAAA,UAC5C,OAAO,QACN,6CAAC,iBAAc,OAAO,OAAO,OAAO,QAAgB,OAAc,IAElE,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG,0BAEzD;AAAA,WAEJ;AAAA,QACA,8CAAC,6BAAK,OAAOA,QAAO,KAClB;AAAA,wDAAC,6BAAK,OAAOA,QAAO,MAClB;AAAA,yDAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAAG,sBAAQ;AAAA,YAC5C,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,MAAM,WAAW,CAAC,GACnD,iBAAO,aAAa,QAAQ,QAAQ,OAAO,UAC9C;AAAA,aACF;AAAA,UACA,8CAAC,6BAAK,OAAOA,QAAO,MAClB;AAAA,yDAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAAG,kBAAI;AAAA,YACxC,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG,0BAEzD;AAAA,aACF;AAAA,WACF;AAAA,QACA,8CAAC,6BAAK,OAAOA,QAAO,OAClB;AAAA,uDAAC,6BAAK,OAAO,CAACA,QAAO,OAAO,KAAK,GAAG,kCAAoB;AAAA,UACvD,OAAO,YACN,8EACE;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACd;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,YACC,kBACC;AAAA,cAAC;AAAA;AAAA,gBACC,mBAAkB;AAAA,gBAClB,oBAAmB;AAAA,gBACnB,SAAS,MAAM,eAAe,MAAM;AAAA,gBACpC,OAAOA,QAAO;AAAA,gBAEd,uDAAC,6BAAK,OAAO,CAACA,QAAO,UAAU,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG,qCAE7D;AAAA;AAAA,YACF;AAAA,aAEJ,IAEA,6CAAC,6BAAK,OAAO,CAACA,QAAO,MAAM,EAAE,OAAO,MAAM,WAAW,CAAC,GAAG,0BAEzD;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAMA,UAAS,gCAAW,OAAO;AAAA,EAC/B,MAAM,EAAE,aAAa,GAAG,cAAc,IAAI,SAAS,IAAI,KAAK,GAAG;AAAA,EAC/D,QAAQ,EAAE,YAAY,UAAU,KAAK,EAAE;AAAA,EACvC,SAAS,EAAE,UAAU,IAAI,YAAY,OAAO,eAAe,IAAI;AAAA,EAC/D,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa,CAAC,cAAc;AAAA,IAC5B,WAAW;AAAA,EACb;AAAA,EACA,OAAO,EAAE,UAAU,GAAG;AAAA,EACtB,MAAM,EAAE,UAAU,IAAI,YAAY,GAAG;AAAA,EACrC,QAAQ,EAAE,YAAY,MAAM;AAAA;AAAA;AAAA,EAG5B,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,KAAK;AAAA,IACL,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,YAAY,EAAE,YAAY,EAAE;AAAA,EAC5B,OAAO,EAAE,UAAU,IAAI,YAAY,OAAO,cAAc,EAAE;AAAA,EAC1D,OAAO,EAAE,KAAK,EAAE;AAAA,EAChB,KAAK,EAAE,eAAe,OAAO,KAAK,GAAG;AAAA,EACrC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE;AAAA,EACxB,MAAM,EAAE,WAAW,IAAI,UAAU,IAAI,gBAAgB,SAAS;AAAA,EAC9D,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,oBAAoB;AAAA,EACtB;AACF,CAAC;","names":["import_react_native","import_react","import_react_native","import_jsx_runtime","import_jsx_runtime","styles","import_connect_appkit_core","import_react","import_react_native","import_jsx_runtime","styles","import_connect_appkit_core","import_react_native","import_jsx_runtime","styles"]}
1
+ {"version":3,"sources":["../../src/ui/index.ts","../../src/ui/AuthorizationConsentNative.tsx","../../src/ui/parts.tsx","../../src/ui/theme.tsx","../../src/ui/AuthorizationListNative.tsx","../../src/ui/PaymentReceiptNative.tsx"],"sourcesContent":["/**\n * React Native payment UI, published as `@naculus/connect-native/ui` so apps\n * that only need the wallet connectors do not load it.\n */\nexport {\n AuthorizationConsentNative,\n type AuthorizationConsentNativeProps,\n} from \"./AuthorizationConsentNative\";\nexport {\n AuthorizationListNative,\n type AuthorizationListNativeProps,\n} from \"./AuthorizationListNative\";\nexport {\n PaymentReceiptNative,\n type PaymentReceiptNativeProps,\n} from \"./PaymentReceiptNative\";\nexport {\n darkPaymentTheme,\n lightPaymentTheme,\n type NativePaymentTheme,\n NativePaymentThemeProvider,\n useNativePaymentTheme,\n} from \"./theme\";\n","import {\n type AuthorizationAssetMetadata,\n type AuthorizationDescription,\n describeAuthorization,\n type SpendExplanation,\n} from \"@naculus/connect-appkit-core\";\nimport type { Authorization, ListedAuthorization } from \"@naculus/connect-core\";\nimport { Image, ScrollView, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n styles as shared,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationConsentNativeProps {\n /** Who asks: shown as \"Allow {name} to pay?\". */\n requester: { name: string; icon?: string; origin?: string };\n /** A raw authorization, or a description already built by the caller. */\n authorization: Authorization | ListedAuthorization | AuthorizationDescription;\n assets?: Record<string, AuthorizationAssetMetadata>;\n trustedAssets?: readonly string[];\n /** `explainSpend` result for the payment that triggered this consent. */\n preview?: SpendExplanation;\n onApprove: () => void;\n onDecline: () => void;\n /** Disables Approve and shows \"Approving…\". */\n busy?: boolean;\n /** Copies a recipient address; the copy button shows only when set. */\n onCopy?: (text: string) => void;\n /** BCP 47 locale for the expiry; English when omitted. */\n locale?: string;\n /** Unix timestamp in seconds, for a stable relative expiry. */\n now?: number;\n theme?: NativePaymentTheme;\n}\n\n/** React Native counterpart of the web `AuthorizationConsent`. */\nexport function AuthorizationConsentNative({\n authorization,\n assets = {},\n trustedAssets,\n locale,\n now,\n requester,\n preview,\n onApprove,\n onDecline,\n busy = false,\n onCopy,\n theme: themeProp,\n}: AuthorizationConsentNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const description =\n \"expiry\" in authorization\n ? authorization\n : describeAuthorization(authorization, {\n assets,\n trustedAssets,\n locale,\n now,\n });\n const muted = { color: theme.mutedForeground };\n\n return (\n <View style={[styles.root, { backgroundColor: theme.background }]}>\n <ScrollView contentContainerStyle={styles.content}>\n <View style={styles.requester}>\n {requester.icon ? (\n <Image\n accessibilityIgnoresInvertColors\n source={{ uri: requester.icon }}\n style={styles.avatar}\n />\n ) : (\n <View\n importantForAccessibility=\"no\"\n style={[styles.avatar, { backgroundColor: theme.muted }]}\n >\n <Text style={[styles.initial, { color: theme.foreground }]}>\n {requester.name.slice(0, 1).toUpperCase()}\n </Text>\n </View>\n )}\n <View style={styles.flexShrink}>\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Allow {requester.name} to pay?\n </Text>\n {requester.origin && (\n <Text style={[styles.small, muted]}>{requester.origin}</Text>\n )}\n </View>\n </View>\n\n {description.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n <Text style={styles.strong}>{warning}</Text>\n </Callout>\n ))}\n\n {preview && (\n <Callout\n tone={preview.allowed ? \"success\" : \"danger\"}\n glyph={preview.allowed ? \"✓\" : \"✕\"}\n theme={theme}\n >\n <Text style={styles.strong}>\n {preview.allowed ? \"Allowed\" : \"Blocked\"}.\n </Text>{\" \"}\n {preview.sentence}\n </Callout>\n )}\n\n {description.grants.map((grant) => (\n <View\n key={`${grant.asset}:${grant.recipients.map((r) => r.full).join(\",\")}:${grant.perPayment.formatted}:${grant.total.formatted}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <Text style={[styles.assetLabel, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n {grant.assetTrust === \"unverified\" && (\n <Callout tone=\"warning\" glyph=\"⚠\" role=\"alert\" theme={theme}>\n <Text style={styles.strong}>\n Unverified token — not on the trusted list\n </Text>\n </Callout>\n )}\n <View style={styles.limits}>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Per payment</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.perPayment.formatted}\n </Text>\n </View>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Total limit</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.total.formatted}\n </Text>\n </View>\n </View>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Recipients\n </Text>\n {grant.recipients.length ? (\n grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))\n ) : (\n <Text style={[styles.strong, { color: theme.dangerForeground }]}>\n No recipient restriction is displayed\n </Text>\n )}\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment count\n </Text>\n <Text style={[styles.small, muted]}>\n {grant.count === null ? \"No count limit\" : `Up to ${grant.count}`}\n </Text>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment methods\n </Text>\n <View style={styles.chips}>\n {grant.rails.map((rail) => (\n <View\n key={rail}\n style={[\n shared.chip,\n { backgroundColor: theme.muted, borderColor: theme.border },\n ]}\n >\n <Text style={[shared.chipText, { color: theme.foreground }]}>\n {rail}\n </Text>\n </View>\n ))}\n </View>\n </View>\n ))}\n\n <View style={[styles.expiry, { backgroundColor: theme.muted }]}>\n <Text style={[styles.strong, { color: theme.foreground }]}>\n Expires {description.expiry.relative}\n </Text>\n <Text style={[styles.small, muted]}>\n {description.expiry.absolute}\n </Text>\n </View>\n </ScrollView>\n\n {/* Outside the ScrollView so it stays on screen on short landscape phones. */}\n <View\n testID=\"payment-actions\"\n style={[\n styles.footer,\n { borderTopColor: theme.border, backgroundColor: theme.background },\n ]}\n >\n <ActionButton\n label=\"Decline\"\n variant=\"secondary\"\n onPress={onDecline}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Approving…\" : \"Approve\"}\n onPress={onApprove}\n disabled={busy}\n busy={busy}\n theme={theme}\n />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n content: { padding: 16, gap: 12 },\n requester: { flexDirection: \"row\", alignItems: \"center\", gap: 12 },\n avatar: {\n width: 44,\n height: 44,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n initial: { fontSize: 18, fontWeight: \"600\" },\n flexShrink: { flexShrink: 1 },\n small: { fontSize: 12 },\n strong: { fontWeight: \"700\" },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 6 },\n assetLabel: { fontSize: 14, fontWeight: \"600\" },\n limits: { flexDirection: \"row\", gap: 12, marginVertical: 6 },\n limit: { flex: 1 },\n amount: {\n fontSize: 22,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n },\n term: { fontSize: 14, fontWeight: \"500\", marginTop: 8 },\n chips: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 6 },\n expiry: { borderRadius: 10, padding: 12, gap: 2 },\n footer: {\n flexDirection: \"row\",\n gap: 12,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderTopWidth: 1,\n },\n});\n","import { type ReactNode, useState } from \"react\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport type { NativePaymentTheme } from \"./theme\";\n\nexport type Tone = \"success\" | \"danger\" | \"warning\" | \"neutral\";\n\n/** Fill, border and text color of a tone. */\nexport function toneColors(theme: NativePaymentTheme, tone: Tone) {\n if (tone === \"success\")\n return {\n backgroundColor: theme.successBackground,\n borderColor: theme.successBorder,\n color: theme.successForeground,\n };\n if (tone === \"danger\")\n return {\n backgroundColor: theme.dangerBackground,\n borderColor: theme.dangerBorder,\n color: theme.dangerForeground,\n };\n if (tone === \"warning\")\n return {\n backgroundColor: theme.warningBackground,\n borderColor: theme.warningBorder,\n color: theme.warningForeground,\n };\n return {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.foreground,\n };\n}\n\n/** Decorative glyph, hidden from screen readers. */\nexport function Glyph({\n children,\n color,\n}: {\n children: string;\n color: string;\n}) {\n return (\n <Text\n accessible={false}\n importantForAccessibility=\"no\"\n accessibilityElementsHidden\n style={[styles.glyph, { color }]}\n >\n {children}\n </Text>\n );\n}\n\nexport function ActionButton({\n label,\n onPress,\n theme,\n variant = \"primary\",\n disabled = false,\n busy = false,\n}: {\n label: string;\n onPress: () => void;\n theme: NativePaymentTheme;\n variant?: \"primary\" | \"secondary\";\n disabled?: boolean;\n busy?: boolean;\n}) {\n const primary = variant === \"primary\";\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled, busy }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n {\n backgroundColor: primary ? theme.primary : theme.background,\n borderColor: primary ? theme.primary : theme.border,\n opacity: disabled ? 0.55 : pressed ? 0.8 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.buttonLabel,\n { color: primary ? theme.primaryForeground : theme.foreground },\n ]}\n >\n {label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * An address or hash with an icon-only copy action. The app supplies\n * `onCopy` (Expo Clipboard, RN Clipboard, …); without it no button shows.\n */\nexport function CopyableValue({\n value,\n display,\n onCopy,\n theme,\n color = theme.foreground,\n}: {\n value: string;\n /** Shortened form from the view model; else truncated in the middle. */\n display?: string;\n onCopy?: (text: string) => void;\n theme: NativePaymentTheme;\n color?: string;\n}) {\n const [copied, setCopied] = useState(false);\n return (\n <View style={styles.copyRow}>\n <Text\n accessibilityLabel={value}\n numberOfLines={1}\n ellipsizeMode=\"middle\"\n style={[styles.mono, { color }]}\n >\n {display ?? value}\n </Text>\n {onCopy && (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={copied ? `Copied ${value}` : `Copy ${value}`}\n hitSlop={6}\n onPress={() => {\n onCopy(value);\n setCopied(true);\n }}\n style={({ pressed }) => [\n styles.iconButton,\n { borderColor: theme.border, opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Glyph color={theme.foreground}>{copied ? \"✓\" : \"⧉\"}</Glyph>\n </Pressable>\n )}\n </View>\n );\n}\n\n/** A colored callout: warnings, preview verdicts, notices. */\nexport function Callout({\n tone,\n glyph,\n theme,\n role,\n children,\n}: {\n tone: Tone;\n glyph: string;\n theme: NativePaymentTheme;\n role?: \"alert\";\n children: ReactNode;\n}) {\n const colors = toneColors(theme, tone);\n return (\n <View\n accessibilityRole={role}\n style={[\n styles.callout,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{glyph}</Glyph>\n <Text style={[styles.calloutText, { color: colors.color }]}>\n {children}\n </Text>\n </View>\n );\n}\n\nexport const styles = StyleSheet.create({\n glyph: { fontSize: 16, lineHeight: 20, fontWeight: \"700\" },\n button: {\n flex: 1,\n minHeight: 48,\n minWidth: 44,\n borderRadius: 10,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 16,\n },\n buttonLabel: { fontSize: 16, fontWeight: \"600\" },\n copyRow: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n mono: { flexShrink: 1, fontFamily: \"monospace\", fontSize: 13 },\n iconButton: {\n width: 32,\n height: 32,\n borderRadius: 8,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n callout: {\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n },\n calloutText: { flex: 1, fontSize: 14, lineHeight: 20 },\n label: { fontSize: 12, fontWeight: \"500\" },\n heading: { fontSize: 18, fontWeight: \"600\" },\n chip: {\n borderWidth: 1,\n borderRadius: 999,\n paddingHorizontal: 10,\n paddingVertical: 4,\n },\n chipText: { fontSize: 12 },\n});\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport { useColorScheme } from \"react-native\";\n\n/**\n * Colors for the payment components. The values come from the appkit tokens\n * (`packages/ui/src/styles/tokens.css`, converted from HSL to hex). Where a\n * token pair falls below 4.5:1 on a payment surface — muted text on the muted\n * fill, the light destructive red as text — the text color is the darker\n * (light) or lighter (dark) step of the same hue, so every text/background\n * pair the components use meets WCAG AA.\n */\nexport interface NativePaymentTheme {\n scheme: \"light\" | \"dark\";\n background: string;\n foreground: string;\n card: string;\n border: string;\n muted: string;\n mutedForeground: string;\n primary: string;\n primaryForeground: string;\n /** Verified receipts and allowed previews only. */\n successBackground: string;\n successBorder: string;\n successForeground: string;\n /** Mismatch / failed receipts, blocked previews, missing restrictions. */\n dangerBackground: string;\n dangerBorder: string;\n dangerForeground: string;\n /** Non-dismissible warnings. */\n warningBackground: string;\n warningBorder: string;\n warningForeground: string;\n}\n\nexport const lightPaymentTheme: NativePaymentTheme = {\n scheme: \"light\",\n background: \"#ffffff\", // --background 0 0% 100%\n foreground: \"#020817\", // --foreground 222.2 84% 4.9%\n card: \"#ffffff\", // --card\n border: \"#e2e8f0\", // --border 214.3 31.8% 91.4%\n muted: \"#f1f5f9\", // --muted 210 40% 96.1%\n mutedForeground: \"#475569\", // --muted-foreground hue, one step darker\n primary: \"#0f172a\", // --primary 222.2 47.4% 11.2%\n primaryForeground: \"#f8fafc\", // --primary-foreground 210 40% 98%\n successBackground: \"#ecfdf5\",\n successBorder: \"#047857\",\n successForeground: \"#064e3b\",\n dangerBackground: \"#fef2f2\",\n dangerBorder: \"#ef4444\", // --destructive 0 84.2% 60.2%\n dangerForeground: \"#991b1b\",\n warningBackground: \"#fffbeb\",\n warningBorder: \"#b45309\",\n warningForeground: \"#451a03\",\n};\n\nexport const darkPaymentTheme: NativePaymentTheme = {\n scheme: \"dark\",\n background: \"#020817\", // .dark --background\n foreground: \"#f8fafc\", // .dark --foreground\n card: \"#020817\", // .dark --card\n border: \"#1e293b\", // .dark --border 217.2 32.6% 17.5%\n muted: \"#1e293b\", // .dark --muted\n mutedForeground: \"#94a3b8\", // .dark --muted-foreground 215 20.2% 65.1%\n primary: \"#f8fafc\", // .dark --primary\n primaryForeground: \"#0f172a\", // .dark --primary-foreground\n successBackground: \"#022c22\",\n successBorder: \"#10b981\",\n successForeground: \"#d1fae5\",\n dangerBackground: \"#450a0a\",\n dangerBorder: \"#f87171\",\n dangerForeground: \"#fecaca\",\n warningBackground: \"#451a03\",\n warningBorder: \"#f59e0b\",\n warningForeground: \"#fef3c7\",\n};\n\nconst ThemeContext = createContext<NativePaymentTheme | undefined>(undefined);\n\nexport function NativePaymentThemeProvider({\n theme,\n children,\n}: {\n theme: NativePaymentTheme;\n children: ReactNode;\n}) {\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n}\n\n/** The `theme` prop, else the provider's theme, else the system scheme. */\nexport function useNativePaymentTheme(\n override?: NativePaymentTheme,\n): NativePaymentTheme {\n const provided = useContext(ThemeContext);\n const scheme = useColorScheme();\n return (\n override ??\n provided ??\n (scheme === \"dark\" ? darkPaymentTheme : lightPaymentTheme)\n );\n}\n","import {\n type AuthorizationAssetMetadata,\n describeAuthorization,\n formatAuthorizationAmount,\n} from \"@naculus/connect-appkit-core\";\nimport type {\n ListedAuthorization,\n ListedAuthorizationStatus,\n RevokeListedAuthorizationResult,\n} from \"@naculus/connect-core\";\nimport { useState } from \"react\";\nimport { FlatList, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n Glyph,\n styles as shared,\n toneColors,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationListNativeProps {\n entries: ListedAuthorization[] | { entries: ListedAuthorization[] };\n assets?: Record<string, AuthorizationAssetMetadata>;\n trustedAssets?: readonly string[];\n onRevoke: (\n entry: ListedAuthorization,\n ) =>\n | RevokeListedAuthorizationResult\n | Promise<RevokeListedAuthorizationResult>;\n /** keyId of the entry being revoked. */\n revokingId?: string;\n /** BCP 47 locale for expiry dates; English when omitted. */\n locale?: string;\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst ENFORCER_LABELS: Record<string, string> = {\n \"evm-session\": \"EVM session key\",\n \"solana-session\": \"Solana session key\",\n \"mpp-voucher\": \"MPP channel key\",\n};\n\nconst STATUS_GLYPHS: Record<ListedAuthorizationStatus, string> = {\n active: \"●\",\n pending: \"◐\",\n revoked: \"✕\",\n expired: \"○\",\n};\n\nfunction StatusBadge({\n status,\n theme,\n}: {\n status: ListedAuthorizationStatus;\n theme: NativePaymentTheme;\n}) {\n const colors =\n status === \"active\"\n ? {\n backgroundColor: theme.primary,\n borderColor: theme.primary,\n color: theme.primaryForeground,\n }\n : status === \"pending\"\n ? {\n backgroundColor: theme.background,\n borderColor: theme.foreground,\n color: theme.foreground,\n }\n : status === \"revoked\"\n ? toneColors(theme, \"danger\")\n : {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.mutedForeground,\n };\n return (\n <View\n accessibilityLabel={`Status: ${status}`}\n style={[\n shared.chip,\n styles.badge,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{STATUS_GLYPHS[status]}</Glyph>\n <Text style={[styles.badgeText, { color: colors.color }]}>{status}</Text>\n </View>\n );\n}\n\n/** React Native counterpart of the web `AuthorizationList`. */\nexport function AuthorizationListNative({\n entries: input,\n assets = {},\n trustedAssets,\n onRevoke,\n revokingId,\n locale,\n onCopy,\n theme: themeProp,\n}: AuthorizationListNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const entries = Array.isArray(input) ? input : input.entries;\n const [confirming, setConfirming] = useState<string | null>(null);\n const [onChain, setOnChain] = useState<ReadonlySet<string>>(new Set());\n const muted = { color: theme.mutedForeground };\n\n const revoke = (entry: ListedAuthorization) =>\n void Promise.resolve(onRevoke(entry)).then((result) => {\n setConfirming(null);\n if (result.onChainRevocationRequired)\n setOnChain((current) => new Set(current).add(entry.keyId));\n });\n\n const renderItem = ({ item: entry }: { item: ListedAuthorization }) => {\n const view = describeAuthorization(entry, {\n assets,\n trustedAssets,\n locale,\n });\n const busy = revokingId === entry.keyId;\n const live = entry.status === \"active\" || entry.status === \"pending\";\n return (\n <View\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.cardHeader}>\n <View style={styles.flexShrink}>\n <Text style={[styles.title, { color: theme.foreground }]}>\n {view.label ?? view.grants.map((g) => g.assetLabel).join(\", \")}\n </Text>\n <Text style={[styles.small, muted]}>\n {ENFORCER_LABELS[entry.enforcer] ??\n entry.enforcer.replaceAll(\"-\", \" \")}\n </Text>\n </View>\n <StatusBadge status={entry.status} theme={theme} />\n </View>\n\n {view.grants.map((grant) => {\n const spent = entry.spent?.[grant.asset];\n const total = entry.grants.find(\n (g) => g.asset === grant.asset,\n )?.maxTotal;\n const percent =\n spent !== undefined && total && total > 0n\n ? Math.min(Number((spent * 100n) / total), 100)\n : 0;\n return (\n <View\n key={grant.asset}\n style={[styles.grant, { backgroundColor: theme.muted }]}\n >\n {view.label && (\n <Text style={[styles.strong, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n )}\n {grant.assetTrust === \"unverified\" && (\n <Callout tone=\"warning\" glyph=\"⚠\" role=\"alert\" theme={theme}>\n Unverified token — not on the trusted list\n </Callout>\n )}\n {grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))}\n {spent !== undefined && (\n <View>\n <View style={styles.spentRow}>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Spent{\" \"}\n {\n formatAuthorizationAmount(\n spent,\n grant.assetTrust === \"unverified\"\n ? undefined\n : assets[grant.asset],\n ).formatted\n }\n </Text>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Total {grant.total.formatted}\n </Text>\n </View>\n <View\n accessibilityRole=\"progressbar\"\n accessibilityLabel={`${grant.assetLabel} spent`}\n accessibilityValue={{ min: 0, max: 100, now: percent }}\n style={[\n styles.track,\n { backgroundColor: theme.background },\n ]}\n >\n <View\n style={[\n styles.fill,\n {\n width: `${percent}%`,\n backgroundColor: theme.primary,\n },\n ]}\n />\n </View>\n </View>\n )}\n </View>\n );\n })}\n\n <Text style={[styles.small, muted]}>\n {entry.status === \"expired\"\n ? \"Expired\"\n : entry.status === \"revoked\"\n ? \"Revoked\"\n : `Expires ${view.expiry.relative}`}{\" \"}\n · {view.expiry.absolute}\n </Text>\n\n {view.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n {warning}\n </Callout>\n ))}\n\n {onChain.has(entry.keyId) && (\n <Callout tone=\"warning\" glyph=\"⛓\" theme={theme}>\n Local access is revoked. Complete the on-chain revocation to stop\n this authorization on chain.\n </Callout>\n )}\n\n {live && (\n <View style={[styles.actions, { borderTopColor: theme.border }]}>\n {confirming === entry.keyId ? (\n <>\n <ActionButton\n label=\"Cancel\"\n variant=\"secondary\"\n onPress={() => setConfirming(null)}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Revoking…\" : \"Confirm revoke\"}\n disabled={busy}\n busy={busy}\n onPress={() => revoke(entry)}\n theme={theme}\n />\n </>\n ) : (\n <ActionButton\n label=\"Revoke\"\n variant=\"secondary\"\n onPress={() => setConfirming(entry.keyId)}\n theme={theme}\n />\n )}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <FlatList\n data={entries}\n keyExtractor={(entry) => entry.keyId}\n renderItem={renderItem}\n extraData={[confirming, onChain, revokingId, theme]}\n contentContainerStyle={styles.list}\n style={{ backgroundColor: theme.background }}\n ListHeaderComponent={\n entries.length ? (\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Payment authorizations\n </Text>\n ) : undefined\n }\n ListEmptyComponent={\n <View style={[styles.empty, { borderColor: theme.border }]}>\n <Text\n accessibilityRole=\"header\"\n style={[styles.title, { color: theme.foreground }]}\n >\n No payment authorizations\n </Text>\n <Text style={[styles.body, muted]}>\n Approvals you create will appear here.\n </Text>\n </View>\n }\n />\n );\n}\n\nconst styles = StyleSheet.create({\n list: { padding: 16, gap: 12 },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 10 },\n cardHeader: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n gap: 8,\n },\n flexShrink: { flexShrink: 1 },\n title: { fontSize: 16, fontWeight: \"600\" },\n small: { fontSize: 12 },\n body: { fontSize: 14, textAlign: \"center\" },\n strong: { fontSize: 14, fontWeight: \"500\" },\n badge: { flexDirection: \"row\", alignItems: \"center\", gap: 4 },\n badgeText: { fontSize: 12, fontWeight: \"600\", textTransform: \"capitalize\" },\n grant: { borderRadius: 10, padding: 12, gap: 6 },\n spentRow: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n track: { height: 8, borderRadius: 4, overflow: \"hidden\", marginTop: 4 },\n fill: { height: \"100%\" },\n actions: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n gap: 8,\n borderTopWidth: 1,\n paddingTop: 12,\n },\n empty: {\n borderWidth: 1,\n borderStyle: \"dashed\",\n borderRadius: 12,\n padding: 32,\n alignItems: \"center\",\n gap: 4,\n },\n});\n","import {\n type AuthorizationAssetMetadata,\n formatAuthorizationAmount,\n type PaymentRecord,\n type PaymentVerificationStatus,\n} from \"@naculus/connect-appkit-core\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { CopyableValue, Glyph, type Tone, toneColors } from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface PaymentReceiptNativeProps {\n record: PaymentRecord;\n assets?: Record<string, AuthorizationAssetMetadata>;\n /**\n * Accepted for parity with the other payment components; the receipt has\n * no locale-dependent text yet (amounts use the core formatter).\n */\n locale?: string;\n /** Shows \"View on explorer\" when set and the record has a reference. */\n onOpenExplorer?: (record: PaymentRecord) => void;\n /** Copies the recipient or settlement reference. */\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst VERIFICATION: Record<\n PaymentVerificationStatus,\n { title: string; detail: string; glyph: string; tone: Tone }\n> = {\n unverified: {\n title: \"Unverified\",\n detail: \"Reported by the server, not yet checked.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n pending: {\n title: \"Checking\",\n detail: \"Checking on chain.\",\n glyph: \"…\",\n tone: \"neutral\",\n },\n verified: {\n title: \"Verified\",\n detail: \"Verified on chain.\",\n glyph: \"✓\",\n tone: \"success\",\n },\n mismatch: {\n title: \"Mismatch\",\n detail: \"The on-chain settlement does not match this payment.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n failed: {\n title: \"Verification failed\",\n detail: \"The settlement could not be verified.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n unavailable: {\n title: \"Verification unavailable\",\n detail: \"On-chain checking is unavailable. Retry later.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n};\n\n/** React Native counterpart of the web `PaymentReceipt`. */\nexport function PaymentReceiptNative({\n record,\n assets = {},\n onOpenExplorer,\n onCopy,\n theme: themeProp,\n}: PaymentReceiptNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const status = record.verification.status;\n const state = VERIFICATION[status];\n const colors = toneColors(theme, state.tone);\n const muted = { color: theme.mutedForeground };\n const amount =\n record.amount === null\n ? \"Amount not reported\"\n : /^\\d+$/.test(record.amount)\n ? formatAuthorizationAmount(\n BigInt(record.amount),\n record.asset ? assets[record.asset] : undefined,\n ).formatted\n : `${record.amount} base units`;\n\n return (\n <View\n testID={`verification-${status}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.header}>\n <Text style={[styles.eyebrow, muted]}>PAYMENT RECEIPT</Text>\n <Text\n accessibilityRole=\"header\"\n style={[styles.amount, { color: theme.foreground }]}\n >\n {amount}\n </Text>\n <Text style={[styles.small, muted]}>\n {record.asset\n ? (assets[record.asset]?.symbol ?? record.asset)\n : \"Asset not reported\"}\n </Text>\n </View>\n\n <View\n testID=\"verification-panel\"\n accessibilityLiveRegion=\"polite\"\n accessible\n accessibilityLabel={`${state.title}. ${state.detail}${record.verification.reason ? ` Reason: ${record.verification.reason}` : \"\"}`}\n style={[\n styles.panel,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{state.glyph}</Glyph>\n <View style={styles.flexShrink}>\n <Text style={[styles.badge, { color: colors.color }]}>\n {state.title}\n </Text>\n <Text style={[styles.body, { color: colors.color }]}>\n {state.detail}\n </Text>\n {record.verification.reason && (\n <Text\n numberOfLines={2}\n style={[styles.body, styles.strong, { color: colors.color }]}\n >\n Reason: {record.verification.reason}\n </Text>\n )}\n </View>\n </View>\n\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Recipient</Text>\n {record.payTo ? (\n <CopyableValue value={record.payTo} onCopy={onCopy} theme={theme} />\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n <View style={styles.row}>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Protocol</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n {record.protocol === \"mpp\" ? \"MPP\" : record.protocol}\n </Text>\n </View>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Time</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not recorded\n </Text>\n </View>\n </View>\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Settlement reference</Text>\n {record.reference ? (\n <>\n <CopyableValue\n value={record.reference}\n onCopy={onCopy}\n theme={theme}\n />\n {onOpenExplorer && (\n <Pressable\n accessibilityRole=\"link\"\n accessibilityLabel=\"View on explorer\"\n onPress={() => onOpenExplorer(record)}\n style={styles.link}\n >\n <Text style={[styles.linkText, { color: theme.foreground }]}>\n View on explorer ↗\n </Text>\n </Pressable>\n )}\n </>\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: { borderWidth: 1, borderRadius: 16, padding: 20, gap: 16 },\n header: { alignItems: \"center\", gap: 4 },\n eyebrow: { fontSize: 12, fontWeight: \"500\", letterSpacing: 0.6 },\n amount: {\n fontSize: 32,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n textAlign: \"center\",\n },\n small: { fontSize: 12 },\n body: { fontSize: 14, lineHeight: 20 },\n strong: { fontWeight: \"600\" },\n // Fixed height: badge, explanation and a two-line reason fit, so the card\n // does not jump as verification moves from pending to its final state.\n panel: {\n height: 128,\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n overflow: \"hidden\",\n },\n flexShrink: { flexShrink: 1 },\n badge: { fontSize: 13, fontWeight: \"700\", marginBottom: 2 },\n field: { gap: 4 },\n row: { flexDirection: \"row\", gap: 12 },\n cell: { flex: 1, gap: 4 },\n link: { minHeight: 44, minWidth: 44, justifyContent: \"center\" },\n linkText: {\n fontSize: 13,\n fontWeight: \"500\",\n textDecorationLine: \"underline\",\n },\n});\n"],"mappings":"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","names":["import_react_native","import_react","import_react_native","import_jsx_runtime","import_jsx_runtime","styles","import_connect_appkit_core","import_react","import_react_native","import_jsx_runtime","styles","import_connect_appkit_core","import_react_native","import_jsx_runtime","styles"]}
@@ -53,6 +53,7 @@ interface AuthorizationConsentNativeProps {
53
53
  /** A raw authorization, or a description already built by the caller. */
54
54
  authorization: Authorization | ListedAuthorization | AuthorizationDescription;
55
55
  assets?: Record<string, AuthorizationAssetMetadata>;
56
+ trustedAssets?: readonly string[];
56
57
  /** `explainSpend` result for the payment that triggered this consent. */
57
58
  preview?: SpendExplanation;
58
59
  onApprove: () => void;
@@ -68,13 +69,14 @@ interface AuthorizationConsentNativeProps {
68
69
  theme?: NativePaymentTheme;
69
70
  }
70
71
  /** React Native counterpart of the web `AuthorizationConsent`. */
71
- declare function AuthorizationConsentNative({ authorization, assets, locale, now, requester, preview, onApprove, onDecline, busy, onCopy, theme: themeProp, }: AuthorizationConsentNativeProps): react.JSX.Element;
72
+ declare function AuthorizationConsentNative({ authorization, assets, trustedAssets, locale, now, requester, preview, onApprove, onDecline, busy, onCopy, theme: themeProp, }: AuthorizationConsentNativeProps): react.JSX.Element;
72
73
 
73
74
  interface AuthorizationListNativeProps {
74
75
  entries: ListedAuthorization[] | {
75
76
  entries: ListedAuthorization[];
76
77
  };
77
78
  assets?: Record<string, AuthorizationAssetMetadata>;
79
+ trustedAssets?: readonly string[];
78
80
  onRevoke: (entry: ListedAuthorization) => RevokeListedAuthorizationResult | Promise<RevokeListedAuthorizationResult>;
79
81
  /** keyId of the entry being revoked. */
80
82
  revokingId?: string;
@@ -84,7 +86,7 @@ interface AuthorizationListNativeProps {
84
86
  theme?: NativePaymentTheme;
85
87
  }
86
88
  /** React Native counterpart of the web `AuthorizationList`. */
87
- declare function AuthorizationListNative({ entries: input, assets, onRevoke, revokingId, locale, onCopy, theme: themeProp, }: AuthorizationListNativeProps): react.JSX.Element;
89
+ declare function AuthorizationListNative({ entries: input, assets, trustedAssets, onRevoke, revokingId, locale, onCopy, theme: themeProp, }: AuthorizationListNativeProps): react.JSX.Element;
88
90
 
89
91
  interface PaymentReceiptNativeProps {
90
92
  record: PaymentRecord;
@@ -53,6 +53,7 @@ interface AuthorizationConsentNativeProps {
53
53
  /** A raw authorization, or a description already built by the caller. */
54
54
  authorization: Authorization | ListedAuthorization | AuthorizationDescription;
55
55
  assets?: Record<string, AuthorizationAssetMetadata>;
56
+ trustedAssets?: readonly string[];
56
57
  /** `explainSpend` result for the payment that triggered this consent. */
57
58
  preview?: SpendExplanation;
58
59
  onApprove: () => void;
@@ -68,13 +69,14 @@ interface AuthorizationConsentNativeProps {
68
69
  theme?: NativePaymentTheme;
69
70
  }
70
71
  /** React Native counterpart of the web `AuthorizationConsent`. */
71
- declare function AuthorizationConsentNative({ authorization, assets, locale, now, requester, preview, onApprove, onDecline, busy, onCopy, theme: themeProp, }: AuthorizationConsentNativeProps): react.JSX.Element;
72
+ declare function AuthorizationConsentNative({ authorization, assets, trustedAssets, locale, now, requester, preview, onApprove, onDecline, busy, onCopy, theme: themeProp, }: AuthorizationConsentNativeProps): react.JSX.Element;
72
73
 
73
74
  interface AuthorizationListNativeProps {
74
75
  entries: ListedAuthorization[] | {
75
76
  entries: ListedAuthorization[];
76
77
  };
77
78
  assets?: Record<string, AuthorizationAssetMetadata>;
79
+ trustedAssets?: readonly string[];
78
80
  onRevoke: (entry: ListedAuthorization) => RevokeListedAuthorizationResult | Promise<RevokeListedAuthorizationResult>;
79
81
  /** keyId of the entry being revoked. */
80
82
  revokingId?: string;
@@ -84,7 +86,7 @@ interface AuthorizationListNativeProps {
84
86
  theme?: NativePaymentTheme;
85
87
  }
86
88
  /** React Native counterpart of the web `AuthorizationList`. */
87
- declare function AuthorizationListNative({ entries: input, assets, onRevoke, revokingId, locale, onCopy, theme: themeProp, }: AuthorizationListNativeProps): react.JSX.Element;
89
+ declare function AuthorizationListNative({ entries: input, assets, trustedAssets, onRevoke, revokingId, locale, onCopy, theme: themeProp, }: AuthorizationListNativeProps): react.JSX.Element;
88
90
 
89
91
  interface PaymentReceiptNativeProps {
90
92
  record: PaymentRecord;
package/dist/ui/index.js CHANGED
@@ -271,6 +271,7 @@ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
271
271
  function AuthorizationConsentNative({
272
272
  authorization,
273
273
  assets = {},
274
+ trustedAssets,
274
275
  locale,
275
276
  now,
276
277
  requester,
@@ -282,7 +283,12 @@ function AuthorizationConsentNative({
282
283
  theme: themeProp
283
284
  }) {
284
285
  const theme = useNativePaymentTheme(themeProp);
285
- const description = "expiry" in authorization ? authorization : describeAuthorization(authorization, { assets, locale, now });
286
+ const description = "expiry" in authorization ? authorization : describeAuthorization(authorization, {
287
+ assets,
288
+ trustedAssets,
289
+ locale,
290
+ now
291
+ });
286
292
  const muted = { color: theme.mutedForeground };
287
293
  return /* @__PURE__ */ jsxs2(View2, { style: [styles2.root, { backgroundColor: theme.background }], children: [
288
294
  /* @__PURE__ */ jsxs2(ScrollView, { contentContainerStyle: styles2.content, children: [
@@ -354,6 +360,7 @@ function AuthorizationConsentNative({
354
360
  ],
355
361
  children: [
356
362
  /* @__PURE__ */ jsx3(Text2, { style: [styles2.assetLabel, { color: theme.foreground }], children: grant.assetLabel }),
363
+ grant.assetTrust === "unverified" && /* @__PURE__ */ jsx3(Callout, { tone: "warning", glyph: "\u26A0", role: "alert", theme, children: /* @__PURE__ */ jsx3(Text2, { style: styles2.strong, children: "Unverified token \u2014 not on the trusted list" }) }),
357
364
  /* @__PURE__ */ jsxs2(View2, { style: styles2.limits, children: [
358
365
  /* @__PURE__ */ jsxs2(View2, { style: styles2.limit, children: [
359
366
  /* @__PURE__ */ jsx3(Text2, { style: [styles.label, muted], children: "Per payment" }),
@@ -528,6 +535,7 @@ function StatusBadge({
528
535
  function AuthorizationListNative({
529
536
  entries: input,
530
537
  assets = {},
538
+ trustedAssets,
531
539
  onRevoke,
532
540
  revokingId,
533
541
  locale,
@@ -545,7 +553,11 @@ function AuthorizationListNative({
545
553
  setOnChain((current) => new Set(current).add(entry.keyId));
546
554
  });
547
555
  const renderItem = ({ item: entry }) => {
548
- const view = describeAuthorization2(entry, { assets, locale });
556
+ const view = describeAuthorization2(entry, {
557
+ assets,
558
+ trustedAssets,
559
+ locale
560
+ });
549
561
  const busy = revokingId === entry.keyId;
550
562
  const live = entry.status === "active" || entry.status === "pending";
551
563
  return /* @__PURE__ */ jsxs3(
@@ -575,6 +587,7 @@ function AuthorizationListNative({
575
587
  style: [styles3.grant, { backgroundColor: theme.muted }],
576
588
  children: [
577
589
  view.label && /* @__PURE__ */ jsx4(Text3, { style: [styles3.strong, { color: theme.foreground }], children: grant.assetLabel }),
590
+ grant.assetTrust === "unverified" && /* @__PURE__ */ jsx4(Callout, { tone: "warning", glyph: "\u26A0", role: "alert", theme, children: "Unverified token \u2014 not on the trusted list" }),
578
591
  grant.recipients.map((recipient) => /* @__PURE__ */ jsx4(
579
592
  CopyableValue,
580
593
  {
@@ -590,7 +603,10 @@ function AuthorizationListNative({
590
603
  /* @__PURE__ */ jsxs3(Text3, { style: [styles3.small, { color: theme.foreground }], children: [
591
604
  "Spent",
592
605
  " ",
593
- formatAuthorizationAmount(spent, assets[grant.asset]).formatted
606
+ formatAuthorizationAmount(
607
+ spent,
608
+ grant.assetTrust === "unverified" ? void 0 : assets[grant.asset]
609
+ ).formatted
594
610
  ] }),
595
611
  /* @__PURE__ */ jsxs3(Text3, { style: [styles3.small, { color: theme.foreground }], children: [
596
612
  "Total ",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/AuthorizationConsentNative.tsx","../../src/ui/parts.tsx","../../src/ui/theme.tsx","../../src/ui/AuthorizationListNative.tsx","../../src/ui/PaymentReceiptNative.tsx"],"sourcesContent":["import {\n type AuthorizationAssetMetadata,\n type AuthorizationDescription,\n describeAuthorization,\n type SpendExplanation,\n} from \"@naculus/connect-appkit-core\";\nimport type { Authorization, ListedAuthorization } from \"@naculus/connect-core\";\nimport { Image, ScrollView, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n styles as shared,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationConsentNativeProps {\n /** Who asks: shown as \"Allow {name} to pay?\". */\n requester: { name: string; icon?: string; origin?: string };\n /** A raw authorization, or a description already built by the caller. */\n authorization: Authorization | ListedAuthorization | AuthorizationDescription;\n assets?: Record<string, AuthorizationAssetMetadata>;\n /** `explainSpend` result for the payment that triggered this consent. */\n preview?: SpendExplanation;\n onApprove: () => void;\n onDecline: () => void;\n /** Disables Approve and shows \"Approving…\". */\n busy?: boolean;\n /** Copies a recipient address; the copy button shows only when set. */\n onCopy?: (text: string) => void;\n /** BCP 47 locale for the expiry; English when omitted. */\n locale?: string;\n /** Unix timestamp in seconds, for a stable relative expiry. */\n now?: number;\n theme?: NativePaymentTheme;\n}\n\n/** React Native counterpart of the web `AuthorizationConsent`. */\nexport function AuthorizationConsentNative({\n authorization,\n assets = {},\n locale,\n now,\n requester,\n preview,\n onApprove,\n onDecline,\n busy = false,\n onCopy,\n theme: themeProp,\n}: AuthorizationConsentNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const description =\n \"expiry\" in authorization\n ? authorization\n : describeAuthorization(authorization, { assets, locale, now });\n const muted = { color: theme.mutedForeground };\n\n return (\n <View style={[styles.root, { backgroundColor: theme.background }]}>\n <ScrollView contentContainerStyle={styles.content}>\n <View style={styles.requester}>\n {requester.icon ? (\n <Image\n accessibilityIgnoresInvertColors\n source={{ uri: requester.icon }}\n style={styles.avatar}\n />\n ) : (\n <View\n importantForAccessibility=\"no\"\n style={[styles.avatar, { backgroundColor: theme.muted }]}\n >\n <Text style={[styles.initial, { color: theme.foreground }]}>\n {requester.name.slice(0, 1).toUpperCase()}\n </Text>\n </View>\n )}\n <View style={styles.flexShrink}>\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Allow {requester.name} to pay?\n </Text>\n {requester.origin && (\n <Text style={[styles.small, muted]}>{requester.origin}</Text>\n )}\n </View>\n </View>\n\n {description.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n <Text style={styles.strong}>{warning}</Text>\n </Callout>\n ))}\n\n {preview && (\n <Callout\n tone={preview.allowed ? \"success\" : \"danger\"}\n glyph={preview.allowed ? \"✓\" : \"✕\"}\n theme={theme}\n >\n <Text style={styles.strong}>\n {preview.allowed ? \"Allowed\" : \"Blocked\"}.\n </Text>{\" \"}\n {preview.sentence}\n </Callout>\n )}\n\n {description.grants.map((grant) => (\n <View\n key={`${grant.asset}:${grant.recipients.map((r) => r.full).join(\",\")}:${grant.perPayment.formatted}:${grant.total.formatted}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <Text style={[styles.assetLabel, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n <View style={styles.limits}>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Per payment</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.perPayment.formatted}\n </Text>\n </View>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Total limit</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.total.formatted}\n </Text>\n </View>\n </View>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Recipients\n </Text>\n {grant.recipients.length ? (\n grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))\n ) : (\n <Text style={[styles.strong, { color: theme.dangerForeground }]}>\n No recipient restriction is displayed\n </Text>\n )}\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment count\n </Text>\n <Text style={[styles.small, muted]}>\n {grant.count === null ? \"No count limit\" : `Up to ${grant.count}`}\n </Text>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment methods\n </Text>\n <View style={styles.chips}>\n {grant.rails.map((rail) => (\n <View\n key={rail}\n style={[\n shared.chip,\n { backgroundColor: theme.muted, borderColor: theme.border },\n ]}\n >\n <Text style={[shared.chipText, { color: theme.foreground }]}>\n {rail}\n </Text>\n </View>\n ))}\n </View>\n </View>\n ))}\n\n <View style={[styles.expiry, { backgroundColor: theme.muted }]}>\n <Text style={[styles.strong, { color: theme.foreground }]}>\n Expires {description.expiry.relative}\n </Text>\n <Text style={[styles.small, muted]}>\n {description.expiry.absolute}\n </Text>\n </View>\n </ScrollView>\n\n {/* Outside the ScrollView so it stays on screen on short landscape phones. */}\n <View\n testID=\"payment-actions\"\n style={[\n styles.footer,\n { borderTopColor: theme.border, backgroundColor: theme.background },\n ]}\n >\n <ActionButton\n label=\"Decline\"\n variant=\"secondary\"\n onPress={onDecline}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Approving…\" : \"Approve\"}\n onPress={onApprove}\n disabled={busy}\n busy={busy}\n theme={theme}\n />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n content: { padding: 16, gap: 12 },\n requester: { flexDirection: \"row\", alignItems: \"center\", gap: 12 },\n avatar: {\n width: 44,\n height: 44,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n initial: { fontSize: 18, fontWeight: \"600\" },\n flexShrink: { flexShrink: 1 },\n small: { fontSize: 12 },\n strong: { fontWeight: \"700\" },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 6 },\n assetLabel: { fontSize: 14, fontWeight: \"600\" },\n limits: { flexDirection: \"row\", gap: 12, marginVertical: 6 },\n limit: { flex: 1 },\n amount: {\n fontSize: 22,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n },\n term: { fontSize: 14, fontWeight: \"500\", marginTop: 8 },\n chips: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 6 },\n expiry: { borderRadius: 10, padding: 12, gap: 2 },\n footer: {\n flexDirection: \"row\",\n gap: 12,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderTopWidth: 1,\n },\n});\n","import { type ReactNode, useState } from \"react\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport type { NativePaymentTheme } from \"./theme\";\n\nexport type Tone = \"success\" | \"danger\" | \"warning\" | \"neutral\";\n\n/** Fill, border and text color of a tone. */\nexport function toneColors(theme: NativePaymentTheme, tone: Tone) {\n if (tone === \"success\")\n return {\n backgroundColor: theme.successBackground,\n borderColor: theme.successBorder,\n color: theme.successForeground,\n };\n if (tone === \"danger\")\n return {\n backgroundColor: theme.dangerBackground,\n borderColor: theme.dangerBorder,\n color: theme.dangerForeground,\n };\n if (tone === \"warning\")\n return {\n backgroundColor: theme.warningBackground,\n borderColor: theme.warningBorder,\n color: theme.warningForeground,\n };\n return {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.foreground,\n };\n}\n\n/** Decorative glyph, hidden from screen readers. */\nexport function Glyph({\n children,\n color,\n}: {\n children: string;\n color: string;\n}) {\n return (\n <Text\n accessible={false}\n importantForAccessibility=\"no\"\n accessibilityElementsHidden\n style={[styles.glyph, { color }]}\n >\n {children}\n </Text>\n );\n}\n\nexport function ActionButton({\n label,\n onPress,\n theme,\n variant = \"primary\",\n disabled = false,\n busy = false,\n}: {\n label: string;\n onPress: () => void;\n theme: NativePaymentTheme;\n variant?: \"primary\" | \"secondary\";\n disabled?: boolean;\n busy?: boolean;\n}) {\n const primary = variant === \"primary\";\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled, busy }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n {\n backgroundColor: primary ? theme.primary : theme.background,\n borderColor: primary ? theme.primary : theme.border,\n opacity: disabled ? 0.55 : pressed ? 0.8 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.buttonLabel,\n { color: primary ? theme.primaryForeground : theme.foreground },\n ]}\n >\n {label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * An address or hash with an icon-only copy action. The app supplies\n * `onCopy` (Expo Clipboard, RN Clipboard, …); without it no button shows.\n */\nexport function CopyableValue({\n value,\n display,\n onCopy,\n theme,\n color = theme.foreground,\n}: {\n value: string;\n /** Shortened form from the view model; else truncated in the middle. */\n display?: string;\n onCopy?: (text: string) => void;\n theme: NativePaymentTheme;\n color?: string;\n}) {\n const [copied, setCopied] = useState(false);\n return (\n <View style={styles.copyRow}>\n <Text\n accessibilityLabel={value}\n numberOfLines={1}\n ellipsizeMode=\"middle\"\n style={[styles.mono, { color }]}\n >\n {display ?? value}\n </Text>\n {onCopy && (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={copied ? `Copied ${value}` : `Copy ${value}`}\n hitSlop={6}\n onPress={() => {\n onCopy(value);\n setCopied(true);\n }}\n style={({ pressed }) => [\n styles.iconButton,\n { borderColor: theme.border, opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Glyph color={theme.foreground}>{copied ? \"✓\" : \"⧉\"}</Glyph>\n </Pressable>\n )}\n </View>\n );\n}\n\n/** A colored callout: warnings, preview verdicts, notices. */\nexport function Callout({\n tone,\n glyph,\n theme,\n role,\n children,\n}: {\n tone: Tone;\n glyph: string;\n theme: NativePaymentTheme;\n role?: \"alert\";\n children: ReactNode;\n}) {\n const colors = toneColors(theme, tone);\n return (\n <View\n accessibilityRole={role}\n style={[\n styles.callout,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{glyph}</Glyph>\n <Text style={[styles.calloutText, { color: colors.color }]}>\n {children}\n </Text>\n </View>\n );\n}\n\nexport const styles = StyleSheet.create({\n glyph: { fontSize: 16, lineHeight: 20, fontWeight: \"700\" },\n button: {\n flex: 1,\n minHeight: 48,\n minWidth: 44,\n borderRadius: 10,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 16,\n },\n buttonLabel: { fontSize: 16, fontWeight: \"600\" },\n copyRow: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n mono: { flexShrink: 1, fontFamily: \"monospace\", fontSize: 13 },\n iconButton: {\n width: 32,\n height: 32,\n borderRadius: 8,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n callout: {\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n },\n calloutText: { flex: 1, fontSize: 14, lineHeight: 20 },\n label: { fontSize: 12, fontWeight: \"500\" },\n heading: { fontSize: 18, fontWeight: \"600\" },\n chip: {\n borderWidth: 1,\n borderRadius: 999,\n paddingHorizontal: 10,\n paddingVertical: 4,\n },\n chipText: { fontSize: 12 },\n});\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport { useColorScheme } from \"react-native\";\n\n/**\n * Colors for the payment components. The values come from the appkit tokens\n * (`packages/ui/src/styles/tokens.css`, converted from HSL to hex). Where a\n * token pair falls below 4.5:1 on a payment surface — muted text on the muted\n * fill, the light destructive red as text — the text color is the darker\n * (light) or lighter (dark) step of the same hue, so every text/background\n * pair the components use meets WCAG AA.\n */\nexport interface NativePaymentTheme {\n scheme: \"light\" | \"dark\";\n background: string;\n foreground: string;\n card: string;\n border: string;\n muted: string;\n mutedForeground: string;\n primary: string;\n primaryForeground: string;\n /** Verified receipts and allowed previews only. */\n successBackground: string;\n successBorder: string;\n successForeground: string;\n /** Mismatch / failed receipts, blocked previews, missing restrictions. */\n dangerBackground: string;\n dangerBorder: string;\n dangerForeground: string;\n /** Non-dismissible warnings. */\n warningBackground: string;\n warningBorder: string;\n warningForeground: string;\n}\n\nexport const lightPaymentTheme: NativePaymentTheme = {\n scheme: \"light\",\n background: \"#ffffff\", // --background 0 0% 100%\n foreground: \"#020817\", // --foreground 222.2 84% 4.9%\n card: \"#ffffff\", // --card\n border: \"#e2e8f0\", // --border 214.3 31.8% 91.4%\n muted: \"#f1f5f9\", // --muted 210 40% 96.1%\n mutedForeground: \"#475569\", // --muted-foreground hue, one step darker\n primary: \"#0f172a\", // --primary 222.2 47.4% 11.2%\n primaryForeground: \"#f8fafc\", // --primary-foreground 210 40% 98%\n successBackground: \"#ecfdf5\",\n successBorder: \"#047857\",\n successForeground: \"#064e3b\",\n dangerBackground: \"#fef2f2\",\n dangerBorder: \"#ef4444\", // --destructive 0 84.2% 60.2%\n dangerForeground: \"#991b1b\",\n warningBackground: \"#fffbeb\",\n warningBorder: \"#b45309\",\n warningForeground: \"#451a03\",\n};\n\nexport const darkPaymentTheme: NativePaymentTheme = {\n scheme: \"dark\",\n background: \"#020817\", // .dark --background\n foreground: \"#f8fafc\", // .dark --foreground\n card: \"#020817\", // .dark --card\n border: \"#1e293b\", // .dark --border 217.2 32.6% 17.5%\n muted: \"#1e293b\", // .dark --muted\n mutedForeground: \"#94a3b8\", // .dark --muted-foreground 215 20.2% 65.1%\n primary: \"#f8fafc\", // .dark --primary\n primaryForeground: \"#0f172a\", // .dark --primary-foreground\n successBackground: \"#022c22\",\n successBorder: \"#10b981\",\n successForeground: \"#d1fae5\",\n dangerBackground: \"#450a0a\",\n dangerBorder: \"#f87171\",\n dangerForeground: \"#fecaca\",\n warningBackground: \"#451a03\",\n warningBorder: \"#f59e0b\",\n warningForeground: \"#fef3c7\",\n};\n\nconst ThemeContext = createContext<NativePaymentTheme | undefined>(undefined);\n\nexport function NativePaymentThemeProvider({\n theme,\n children,\n}: {\n theme: NativePaymentTheme;\n children: ReactNode;\n}) {\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n}\n\n/** The `theme` prop, else the provider's theme, else the system scheme. */\nexport function useNativePaymentTheme(\n override?: NativePaymentTheme,\n): NativePaymentTheme {\n const provided = useContext(ThemeContext);\n const scheme = useColorScheme();\n return (\n override ??\n provided ??\n (scheme === \"dark\" ? darkPaymentTheme : lightPaymentTheme)\n );\n}\n","import {\n type AuthorizationAssetMetadata,\n describeAuthorization,\n formatAuthorizationAmount,\n} from \"@naculus/connect-appkit-core\";\nimport type {\n ListedAuthorization,\n ListedAuthorizationStatus,\n RevokeListedAuthorizationResult,\n} from \"@naculus/connect-core\";\nimport { useState } from \"react\";\nimport { FlatList, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n Glyph,\n styles as shared,\n toneColors,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationListNativeProps {\n entries: ListedAuthorization[] | { entries: ListedAuthorization[] };\n assets?: Record<string, AuthorizationAssetMetadata>;\n onRevoke: (\n entry: ListedAuthorization,\n ) =>\n | RevokeListedAuthorizationResult\n | Promise<RevokeListedAuthorizationResult>;\n /** keyId of the entry being revoked. */\n revokingId?: string;\n /** BCP 47 locale for expiry dates; English when omitted. */\n locale?: string;\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst ENFORCER_LABELS: Record<string, string> = {\n \"evm-session\": \"EVM session key\",\n \"solana-session\": \"Solana session key\",\n \"mpp-voucher\": \"MPP channel key\",\n};\n\nconst STATUS_GLYPHS: Record<ListedAuthorizationStatus, string> = {\n active: \"●\",\n pending: \"◐\",\n revoked: \"✕\",\n expired: \"○\",\n};\n\nfunction StatusBadge({\n status,\n theme,\n}: {\n status: ListedAuthorizationStatus;\n theme: NativePaymentTheme;\n}) {\n const colors =\n status === \"active\"\n ? {\n backgroundColor: theme.primary,\n borderColor: theme.primary,\n color: theme.primaryForeground,\n }\n : status === \"pending\"\n ? {\n backgroundColor: theme.background,\n borderColor: theme.foreground,\n color: theme.foreground,\n }\n : status === \"revoked\"\n ? toneColors(theme, \"danger\")\n : {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.mutedForeground,\n };\n return (\n <View\n accessibilityLabel={`Status: ${status}`}\n style={[\n shared.chip,\n styles.badge,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{STATUS_GLYPHS[status]}</Glyph>\n <Text style={[styles.badgeText, { color: colors.color }]}>{status}</Text>\n </View>\n );\n}\n\n/** React Native counterpart of the web `AuthorizationList`. */\nexport function AuthorizationListNative({\n entries: input,\n assets = {},\n onRevoke,\n revokingId,\n locale,\n onCopy,\n theme: themeProp,\n}: AuthorizationListNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const entries = Array.isArray(input) ? input : input.entries;\n const [confirming, setConfirming] = useState<string | null>(null);\n const [onChain, setOnChain] = useState<ReadonlySet<string>>(new Set());\n const muted = { color: theme.mutedForeground };\n\n const revoke = (entry: ListedAuthorization) =>\n void Promise.resolve(onRevoke(entry)).then((result) => {\n setConfirming(null);\n if (result.onChainRevocationRequired)\n setOnChain((current) => new Set(current).add(entry.keyId));\n });\n\n const renderItem = ({ item: entry }: { item: ListedAuthorization }) => {\n const view = describeAuthorization(entry, { assets, locale });\n const busy = revokingId === entry.keyId;\n const live = entry.status === \"active\" || entry.status === \"pending\";\n return (\n <View\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.cardHeader}>\n <View style={styles.flexShrink}>\n <Text style={[styles.title, { color: theme.foreground }]}>\n {view.label ?? view.grants.map((g) => g.assetLabel).join(\", \")}\n </Text>\n <Text style={[styles.small, muted]}>\n {ENFORCER_LABELS[entry.enforcer] ??\n entry.enforcer.replaceAll(\"-\", \" \")}\n </Text>\n </View>\n <StatusBadge status={entry.status} theme={theme} />\n </View>\n\n {view.grants.map((grant) => {\n const spent = entry.spent?.[grant.asset];\n const total = entry.grants.find(\n (g) => g.asset === grant.asset,\n )?.maxTotal;\n const percent =\n spent !== undefined && total && total > 0n\n ? Math.min(Number((spent * 100n) / total), 100)\n : 0;\n return (\n <View\n key={grant.asset}\n style={[styles.grant, { backgroundColor: theme.muted }]}\n >\n {view.label && (\n <Text style={[styles.strong, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n )}\n {grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))}\n {spent !== undefined && (\n <View>\n <View style={styles.spentRow}>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Spent{\" \"}\n {\n formatAuthorizationAmount(spent, assets[grant.asset])\n .formatted\n }\n </Text>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Total {grant.total.formatted}\n </Text>\n </View>\n <View\n accessibilityRole=\"progressbar\"\n accessibilityLabel={`${grant.assetLabel} spent`}\n accessibilityValue={{ min: 0, max: 100, now: percent }}\n style={[\n styles.track,\n { backgroundColor: theme.background },\n ]}\n >\n <View\n style={[\n styles.fill,\n {\n width: `${percent}%`,\n backgroundColor: theme.primary,\n },\n ]}\n />\n </View>\n </View>\n )}\n </View>\n );\n })}\n\n <Text style={[styles.small, muted]}>\n {entry.status === \"expired\"\n ? \"Expired\"\n : entry.status === \"revoked\"\n ? \"Revoked\"\n : `Expires ${view.expiry.relative}`}{\" \"}\n · {view.expiry.absolute}\n </Text>\n\n {view.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n {warning}\n </Callout>\n ))}\n\n {onChain.has(entry.keyId) && (\n <Callout tone=\"warning\" glyph=\"⛓\" theme={theme}>\n Local access is revoked. Complete the on-chain revocation to stop\n this authorization on chain.\n </Callout>\n )}\n\n {live && (\n <View style={[styles.actions, { borderTopColor: theme.border }]}>\n {confirming === entry.keyId ? (\n <>\n <ActionButton\n label=\"Cancel\"\n variant=\"secondary\"\n onPress={() => setConfirming(null)}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Revoking…\" : \"Confirm revoke\"}\n disabled={busy}\n busy={busy}\n onPress={() => revoke(entry)}\n theme={theme}\n />\n </>\n ) : (\n <ActionButton\n label=\"Revoke\"\n variant=\"secondary\"\n onPress={() => setConfirming(entry.keyId)}\n theme={theme}\n />\n )}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <FlatList\n data={entries}\n keyExtractor={(entry) => entry.keyId}\n renderItem={renderItem}\n extraData={[confirming, onChain, revokingId, theme]}\n contentContainerStyle={styles.list}\n style={{ backgroundColor: theme.background }}\n ListHeaderComponent={\n entries.length ? (\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Payment authorizations\n </Text>\n ) : undefined\n }\n ListEmptyComponent={\n <View style={[styles.empty, { borderColor: theme.border }]}>\n <Text\n accessibilityRole=\"header\"\n style={[styles.title, { color: theme.foreground }]}\n >\n No payment authorizations\n </Text>\n <Text style={[styles.body, muted]}>\n Approvals you create will appear here.\n </Text>\n </View>\n }\n />\n );\n}\n\nconst styles = StyleSheet.create({\n list: { padding: 16, gap: 12 },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 10 },\n cardHeader: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n gap: 8,\n },\n flexShrink: { flexShrink: 1 },\n title: { fontSize: 16, fontWeight: \"600\" },\n small: { fontSize: 12 },\n body: { fontSize: 14, textAlign: \"center\" },\n strong: { fontSize: 14, fontWeight: \"500\" },\n badge: { flexDirection: \"row\", alignItems: \"center\", gap: 4 },\n badgeText: { fontSize: 12, fontWeight: \"600\", textTransform: \"capitalize\" },\n grant: { borderRadius: 10, padding: 12, gap: 6 },\n spentRow: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n track: { height: 8, borderRadius: 4, overflow: \"hidden\", marginTop: 4 },\n fill: { height: \"100%\" },\n actions: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n gap: 8,\n borderTopWidth: 1,\n paddingTop: 12,\n },\n empty: {\n borderWidth: 1,\n borderStyle: \"dashed\",\n borderRadius: 12,\n padding: 32,\n alignItems: \"center\",\n gap: 4,\n },\n});\n","import {\n type AuthorizationAssetMetadata,\n formatAuthorizationAmount,\n type PaymentRecord,\n type PaymentVerificationStatus,\n} from \"@naculus/connect-appkit-core\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { CopyableValue, Glyph, type Tone, toneColors } from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface PaymentReceiptNativeProps {\n record: PaymentRecord;\n assets?: Record<string, AuthorizationAssetMetadata>;\n /**\n * Accepted for parity with the other payment components; the receipt has\n * no locale-dependent text yet (amounts use the core formatter).\n */\n locale?: string;\n /** Shows \"View on explorer\" when set and the record has a reference. */\n onOpenExplorer?: (record: PaymentRecord) => void;\n /** Copies the recipient or settlement reference. */\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst VERIFICATION: Record<\n PaymentVerificationStatus,\n { title: string; detail: string; glyph: string; tone: Tone }\n> = {\n unverified: {\n title: \"Unverified\",\n detail: \"Reported by the server, not yet checked.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n pending: {\n title: \"Checking\",\n detail: \"Checking on chain.\",\n glyph: \"…\",\n tone: \"neutral\",\n },\n verified: {\n title: \"Verified\",\n detail: \"Verified on chain.\",\n glyph: \"✓\",\n tone: \"success\",\n },\n mismatch: {\n title: \"Mismatch\",\n detail: \"The on-chain settlement does not match this payment.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n failed: {\n title: \"Verification failed\",\n detail: \"The settlement could not be verified.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n unavailable: {\n title: \"Verification unavailable\",\n detail: \"On-chain checking is unavailable. Retry later.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n};\n\n/** React Native counterpart of the web `PaymentReceipt`. */\nexport function PaymentReceiptNative({\n record,\n assets = {},\n onOpenExplorer,\n onCopy,\n theme: themeProp,\n}: PaymentReceiptNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const status = record.verification.status;\n const state = VERIFICATION[status];\n const colors = toneColors(theme, state.tone);\n const muted = { color: theme.mutedForeground };\n const amount =\n record.amount === null\n ? \"Amount not reported\"\n : /^\\d+$/.test(record.amount)\n ? formatAuthorizationAmount(\n BigInt(record.amount),\n record.asset ? assets[record.asset] : undefined,\n ).formatted\n : `${record.amount} base units`;\n\n return (\n <View\n testID={`verification-${status}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.header}>\n <Text style={[styles.eyebrow, muted]}>PAYMENT RECEIPT</Text>\n <Text\n accessibilityRole=\"header\"\n style={[styles.amount, { color: theme.foreground }]}\n >\n {amount}\n </Text>\n <Text style={[styles.small, muted]}>\n {record.asset\n ? (assets[record.asset]?.symbol ?? record.asset)\n : \"Asset not reported\"}\n </Text>\n </View>\n\n <View\n testID=\"verification-panel\"\n accessibilityLiveRegion=\"polite\"\n accessible\n accessibilityLabel={`${state.title}. ${state.detail}${record.verification.reason ? ` Reason: ${record.verification.reason}` : \"\"}`}\n style={[\n styles.panel,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{state.glyph}</Glyph>\n <View style={styles.flexShrink}>\n <Text style={[styles.badge, { color: colors.color }]}>\n {state.title}\n </Text>\n <Text style={[styles.body, { color: colors.color }]}>\n {state.detail}\n </Text>\n {record.verification.reason && (\n <Text\n numberOfLines={2}\n style={[styles.body, styles.strong, { color: colors.color }]}\n >\n Reason: {record.verification.reason}\n </Text>\n )}\n </View>\n </View>\n\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Recipient</Text>\n {record.payTo ? (\n <CopyableValue value={record.payTo} onCopy={onCopy} theme={theme} />\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n <View style={styles.row}>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Protocol</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n {record.protocol === \"mpp\" ? \"MPP\" : record.protocol}\n </Text>\n </View>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Time</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not recorded\n </Text>\n </View>\n </View>\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Settlement reference</Text>\n {record.reference ? (\n <>\n <CopyableValue\n value={record.reference}\n onCopy={onCopy}\n theme={theme}\n />\n {onOpenExplorer && (\n <Pressable\n accessibilityRole=\"link\"\n accessibilityLabel=\"View on explorer\"\n onPress={() => onOpenExplorer(record)}\n style={styles.link}\n >\n <Text style={[styles.linkText, { color: theme.foreground }]}>\n View on explorer ↗\n </Text>\n </Pressable>\n )}\n </>\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: { borderWidth: 1, borderRadius: 16, padding: 20, gap: 16 },\n header: { alignItems: \"center\", gap: 4 },\n eyebrow: { fontSize: 12, fontWeight: \"500\", letterSpacing: 0.6 },\n amount: {\n fontSize: 32,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n textAlign: \"center\",\n },\n small: { fontSize: 12 },\n body: { fontSize: 14, lineHeight: 20 },\n strong: { fontWeight: \"600\" },\n // Fixed height: badge, explanation and a two-line reason fit, so the card\n // does not jump as verification moves from pending to its final state.\n panel: {\n height: 128,\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n overflow: \"hidden\",\n },\n flexShrink: { flexShrink: 1 },\n badge: { fontSize: 13, fontWeight: \"700\", marginBottom: 2 },\n field: { gap: 4 },\n row: { flexDirection: \"row\", gap: 12 },\n cell: { flex: 1, gap: 4 },\n link: { minHeight: 44, minWidth: 44, justifyContent: \"center\" },\n linkText: {\n fontSize: 13,\n fontWeight: \"500\",\n textDecorationLine: \"underline\",\n },\n});\n"],"mappings":"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","names":["StyleSheet","Text","View","jsx","jsx","jsxs","View","styles","Text","StyleSheet","describeAuthorization","useState","StyleSheet","Text","View","jsx","jsxs","View","styles","Text","useState","describeAuthorization","StyleSheet","formatAuthorizationAmount","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","formatAuthorizationAmount","View","styles","Text","Pressable","StyleSheet"]}
1
+ {"version":3,"sources":["../../src/ui/AuthorizationConsentNative.tsx","../../src/ui/parts.tsx","../../src/ui/theme.tsx","../../src/ui/AuthorizationListNative.tsx","../../src/ui/PaymentReceiptNative.tsx"],"sourcesContent":["import {\n type AuthorizationAssetMetadata,\n type AuthorizationDescription,\n describeAuthorization,\n type SpendExplanation,\n} from \"@naculus/connect-appkit-core\";\nimport type { Authorization, ListedAuthorization } from \"@naculus/connect-core\";\nimport { Image, ScrollView, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n styles as shared,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationConsentNativeProps {\n /** Who asks: shown as \"Allow {name} to pay?\". */\n requester: { name: string; icon?: string; origin?: string };\n /** A raw authorization, or a description already built by the caller. */\n authorization: Authorization | ListedAuthorization | AuthorizationDescription;\n assets?: Record<string, AuthorizationAssetMetadata>;\n trustedAssets?: readonly string[];\n /** `explainSpend` result for the payment that triggered this consent. */\n preview?: SpendExplanation;\n onApprove: () => void;\n onDecline: () => void;\n /** Disables Approve and shows \"Approving…\". */\n busy?: boolean;\n /** Copies a recipient address; the copy button shows only when set. */\n onCopy?: (text: string) => void;\n /** BCP 47 locale for the expiry; English when omitted. */\n locale?: string;\n /** Unix timestamp in seconds, for a stable relative expiry. */\n now?: number;\n theme?: NativePaymentTheme;\n}\n\n/** React Native counterpart of the web `AuthorizationConsent`. */\nexport function AuthorizationConsentNative({\n authorization,\n assets = {},\n trustedAssets,\n locale,\n now,\n requester,\n preview,\n onApprove,\n onDecline,\n busy = false,\n onCopy,\n theme: themeProp,\n}: AuthorizationConsentNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const description =\n \"expiry\" in authorization\n ? authorization\n : describeAuthorization(authorization, {\n assets,\n trustedAssets,\n locale,\n now,\n });\n const muted = { color: theme.mutedForeground };\n\n return (\n <View style={[styles.root, { backgroundColor: theme.background }]}>\n <ScrollView contentContainerStyle={styles.content}>\n <View style={styles.requester}>\n {requester.icon ? (\n <Image\n accessibilityIgnoresInvertColors\n source={{ uri: requester.icon }}\n style={styles.avatar}\n />\n ) : (\n <View\n importantForAccessibility=\"no\"\n style={[styles.avatar, { backgroundColor: theme.muted }]}\n >\n <Text style={[styles.initial, { color: theme.foreground }]}>\n {requester.name.slice(0, 1).toUpperCase()}\n </Text>\n </View>\n )}\n <View style={styles.flexShrink}>\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Allow {requester.name} to pay?\n </Text>\n {requester.origin && (\n <Text style={[styles.small, muted]}>{requester.origin}</Text>\n )}\n </View>\n </View>\n\n {description.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n <Text style={styles.strong}>{warning}</Text>\n </Callout>\n ))}\n\n {preview && (\n <Callout\n tone={preview.allowed ? \"success\" : \"danger\"}\n glyph={preview.allowed ? \"✓\" : \"✕\"}\n theme={theme}\n >\n <Text style={styles.strong}>\n {preview.allowed ? \"Allowed\" : \"Blocked\"}.\n </Text>{\" \"}\n {preview.sentence}\n </Callout>\n )}\n\n {description.grants.map((grant) => (\n <View\n key={`${grant.asset}:${grant.recipients.map((r) => r.full).join(\",\")}:${grant.perPayment.formatted}:${grant.total.formatted}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <Text style={[styles.assetLabel, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n {grant.assetTrust === \"unverified\" && (\n <Callout tone=\"warning\" glyph=\"⚠\" role=\"alert\" theme={theme}>\n <Text style={styles.strong}>\n Unverified token — not on the trusted list\n </Text>\n </Callout>\n )}\n <View style={styles.limits}>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Per payment</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.perPayment.formatted}\n </Text>\n </View>\n <View style={styles.limit}>\n <Text style={[shared.label, muted]}>Total limit</Text>\n <Text style={[styles.amount, { color: theme.foreground }]}>\n {grant.total.formatted}\n </Text>\n </View>\n </View>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Recipients\n </Text>\n {grant.recipients.length ? (\n grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))\n ) : (\n <Text style={[styles.strong, { color: theme.dangerForeground }]}>\n No recipient restriction is displayed\n </Text>\n )}\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment count\n </Text>\n <Text style={[styles.small, muted]}>\n {grant.count === null ? \"No count limit\" : `Up to ${grant.count}`}\n </Text>\n\n <Text style={[styles.term, { color: theme.foreground }]}>\n Payment methods\n </Text>\n <View style={styles.chips}>\n {grant.rails.map((rail) => (\n <View\n key={rail}\n style={[\n shared.chip,\n { backgroundColor: theme.muted, borderColor: theme.border },\n ]}\n >\n <Text style={[shared.chipText, { color: theme.foreground }]}>\n {rail}\n </Text>\n </View>\n ))}\n </View>\n </View>\n ))}\n\n <View style={[styles.expiry, { backgroundColor: theme.muted }]}>\n <Text style={[styles.strong, { color: theme.foreground }]}>\n Expires {description.expiry.relative}\n </Text>\n <Text style={[styles.small, muted]}>\n {description.expiry.absolute}\n </Text>\n </View>\n </ScrollView>\n\n {/* Outside the ScrollView so it stays on screen on short landscape phones. */}\n <View\n testID=\"payment-actions\"\n style={[\n styles.footer,\n { borderTopColor: theme.border, backgroundColor: theme.background },\n ]}\n >\n <ActionButton\n label=\"Decline\"\n variant=\"secondary\"\n onPress={onDecline}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Approving…\" : \"Approve\"}\n onPress={onApprove}\n disabled={busy}\n busy={busy}\n theme={theme}\n />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n content: { padding: 16, gap: 12 },\n requester: { flexDirection: \"row\", alignItems: \"center\", gap: 12 },\n avatar: {\n width: 44,\n height: 44,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n initial: { fontSize: 18, fontWeight: \"600\" },\n flexShrink: { flexShrink: 1 },\n small: { fontSize: 12 },\n strong: { fontWeight: \"700\" },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 6 },\n assetLabel: { fontSize: 14, fontWeight: \"600\" },\n limits: { flexDirection: \"row\", gap: 12, marginVertical: 6 },\n limit: { flex: 1 },\n amount: {\n fontSize: 22,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n },\n term: { fontSize: 14, fontWeight: \"500\", marginTop: 8 },\n chips: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 6 },\n expiry: { borderRadius: 10, padding: 12, gap: 2 },\n footer: {\n flexDirection: \"row\",\n gap: 12,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderTopWidth: 1,\n },\n});\n","import { type ReactNode, useState } from \"react\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport type { NativePaymentTheme } from \"./theme\";\n\nexport type Tone = \"success\" | \"danger\" | \"warning\" | \"neutral\";\n\n/** Fill, border and text color of a tone. */\nexport function toneColors(theme: NativePaymentTheme, tone: Tone) {\n if (tone === \"success\")\n return {\n backgroundColor: theme.successBackground,\n borderColor: theme.successBorder,\n color: theme.successForeground,\n };\n if (tone === \"danger\")\n return {\n backgroundColor: theme.dangerBackground,\n borderColor: theme.dangerBorder,\n color: theme.dangerForeground,\n };\n if (tone === \"warning\")\n return {\n backgroundColor: theme.warningBackground,\n borderColor: theme.warningBorder,\n color: theme.warningForeground,\n };\n return {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.foreground,\n };\n}\n\n/** Decorative glyph, hidden from screen readers. */\nexport function Glyph({\n children,\n color,\n}: {\n children: string;\n color: string;\n}) {\n return (\n <Text\n accessible={false}\n importantForAccessibility=\"no\"\n accessibilityElementsHidden\n style={[styles.glyph, { color }]}\n >\n {children}\n </Text>\n );\n}\n\nexport function ActionButton({\n label,\n onPress,\n theme,\n variant = \"primary\",\n disabled = false,\n busy = false,\n}: {\n label: string;\n onPress: () => void;\n theme: NativePaymentTheme;\n variant?: \"primary\" | \"secondary\";\n disabled?: boolean;\n busy?: boolean;\n}) {\n const primary = variant === \"primary\";\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled, busy }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n {\n backgroundColor: primary ? theme.primary : theme.background,\n borderColor: primary ? theme.primary : theme.border,\n opacity: disabled ? 0.55 : pressed ? 0.8 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.buttonLabel,\n { color: primary ? theme.primaryForeground : theme.foreground },\n ]}\n >\n {label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * An address or hash with an icon-only copy action. The app supplies\n * `onCopy` (Expo Clipboard, RN Clipboard, …); without it no button shows.\n */\nexport function CopyableValue({\n value,\n display,\n onCopy,\n theme,\n color = theme.foreground,\n}: {\n value: string;\n /** Shortened form from the view model; else truncated in the middle. */\n display?: string;\n onCopy?: (text: string) => void;\n theme: NativePaymentTheme;\n color?: string;\n}) {\n const [copied, setCopied] = useState(false);\n return (\n <View style={styles.copyRow}>\n <Text\n accessibilityLabel={value}\n numberOfLines={1}\n ellipsizeMode=\"middle\"\n style={[styles.mono, { color }]}\n >\n {display ?? value}\n </Text>\n {onCopy && (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={copied ? `Copied ${value}` : `Copy ${value}`}\n hitSlop={6}\n onPress={() => {\n onCopy(value);\n setCopied(true);\n }}\n style={({ pressed }) => [\n styles.iconButton,\n { borderColor: theme.border, opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Glyph color={theme.foreground}>{copied ? \"✓\" : \"⧉\"}</Glyph>\n </Pressable>\n )}\n </View>\n );\n}\n\n/** A colored callout: warnings, preview verdicts, notices. */\nexport function Callout({\n tone,\n glyph,\n theme,\n role,\n children,\n}: {\n tone: Tone;\n glyph: string;\n theme: NativePaymentTheme;\n role?: \"alert\";\n children: ReactNode;\n}) {\n const colors = toneColors(theme, tone);\n return (\n <View\n accessibilityRole={role}\n style={[\n styles.callout,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{glyph}</Glyph>\n <Text style={[styles.calloutText, { color: colors.color }]}>\n {children}\n </Text>\n </View>\n );\n}\n\nexport const styles = StyleSheet.create({\n glyph: { fontSize: 16, lineHeight: 20, fontWeight: \"700\" },\n button: {\n flex: 1,\n minHeight: 48,\n minWidth: 44,\n borderRadius: 10,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 16,\n },\n buttonLabel: { fontSize: 16, fontWeight: \"600\" },\n copyRow: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n mono: { flexShrink: 1, fontFamily: \"monospace\", fontSize: 13 },\n iconButton: {\n width: 32,\n height: 32,\n borderRadius: 8,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n callout: {\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n },\n calloutText: { flex: 1, fontSize: 14, lineHeight: 20 },\n label: { fontSize: 12, fontWeight: \"500\" },\n heading: { fontSize: 18, fontWeight: \"600\" },\n chip: {\n borderWidth: 1,\n borderRadius: 999,\n paddingHorizontal: 10,\n paddingVertical: 4,\n },\n chipText: { fontSize: 12 },\n});\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport { useColorScheme } from \"react-native\";\n\n/**\n * Colors for the payment components. The values come from the appkit tokens\n * (`packages/ui/src/styles/tokens.css`, converted from HSL to hex). Where a\n * token pair falls below 4.5:1 on a payment surface — muted text on the muted\n * fill, the light destructive red as text — the text color is the darker\n * (light) or lighter (dark) step of the same hue, so every text/background\n * pair the components use meets WCAG AA.\n */\nexport interface NativePaymentTheme {\n scheme: \"light\" | \"dark\";\n background: string;\n foreground: string;\n card: string;\n border: string;\n muted: string;\n mutedForeground: string;\n primary: string;\n primaryForeground: string;\n /** Verified receipts and allowed previews only. */\n successBackground: string;\n successBorder: string;\n successForeground: string;\n /** Mismatch / failed receipts, blocked previews, missing restrictions. */\n dangerBackground: string;\n dangerBorder: string;\n dangerForeground: string;\n /** Non-dismissible warnings. */\n warningBackground: string;\n warningBorder: string;\n warningForeground: string;\n}\n\nexport const lightPaymentTheme: NativePaymentTheme = {\n scheme: \"light\",\n background: \"#ffffff\", // --background 0 0% 100%\n foreground: \"#020817\", // --foreground 222.2 84% 4.9%\n card: \"#ffffff\", // --card\n border: \"#e2e8f0\", // --border 214.3 31.8% 91.4%\n muted: \"#f1f5f9\", // --muted 210 40% 96.1%\n mutedForeground: \"#475569\", // --muted-foreground hue, one step darker\n primary: \"#0f172a\", // --primary 222.2 47.4% 11.2%\n primaryForeground: \"#f8fafc\", // --primary-foreground 210 40% 98%\n successBackground: \"#ecfdf5\",\n successBorder: \"#047857\",\n successForeground: \"#064e3b\",\n dangerBackground: \"#fef2f2\",\n dangerBorder: \"#ef4444\", // --destructive 0 84.2% 60.2%\n dangerForeground: \"#991b1b\",\n warningBackground: \"#fffbeb\",\n warningBorder: \"#b45309\",\n warningForeground: \"#451a03\",\n};\n\nexport const darkPaymentTheme: NativePaymentTheme = {\n scheme: \"dark\",\n background: \"#020817\", // .dark --background\n foreground: \"#f8fafc\", // .dark --foreground\n card: \"#020817\", // .dark --card\n border: \"#1e293b\", // .dark --border 217.2 32.6% 17.5%\n muted: \"#1e293b\", // .dark --muted\n mutedForeground: \"#94a3b8\", // .dark --muted-foreground 215 20.2% 65.1%\n primary: \"#f8fafc\", // .dark --primary\n primaryForeground: \"#0f172a\", // .dark --primary-foreground\n successBackground: \"#022c22\",\n successBorder: \"#10b981\",\n successForeground: \"#d1fae5\",\n dangerBackground: \"#450a0a\",\n dangerBorder: \"#f87171\",\n dangerForeground: \"#fecaca\",\n warningBackground: \"#451a03\",\n warningBorder: \"#f59e0b\",\n warningForeground: \"#fef3c7\",\n};\n\nconst ThemeContext = createContext<NativePaymentTheme | undefined>(undefined);\n\nexport function NativePaymentThemeProvider({\n theme,\n children,\n}: {\n theme: NativePaymentTheme;\n children: ReactNode;\n}) {\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n}\n\n/** The `theme` prop, else the provider's theme, else the system scheme. */\nexport function useNativePaymentTheme(\n override?: NativePaymentTheme,\n): NativePaymentTheme {\n const provided = useContext(ThemeContext);\n const scheme = useColorScheme();\n return (\n override ??\n provided ??\n (scheme === \"dark\" ? darkPaymentTheme : lightPaymentTheme)\n );\n}\n","import {\n type AuthorizationAssetMetadata,\n describeAuthorization,\n formatAuthorizationAmount,\n} from \"@naculus/connect-appkit-core\";\nimport type {\n ListedAuthorization,\n ListedAuthorizationStatus,\n RevokeListedAuthorizationResult,\n} from \"@naculus/connect-core\";\nimport { useState } from \"react\";\nimport { FlatList, StyleSheet, Text, View } from \"react-native\";\nimport {\n ActionButton,\n Callout,\n CopyableValue,\n Glyph,\n styles as shared,\n toneColors,\n} from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface AuthorizationListNativeProps {\n entries: ListedAuthorization[] | { entries: ListedAuthorization[] };\n assets?: Record<string, AuthorizationAssetMetadata>;\n trustedAssets?: readonly string[];\n onRevoke: (\n entry: ListedAuthorization,\n ) =>\n | RevokeListedAuthorizationResult\n | Promise<RevokeListedAuthorizationResult>;\n /** keyId of the entry being revoked. */\n revokingId?: string;\n /** BCP 47 locale for expiry dates; English when omitted. */\n locale?: string;\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst ENFORCER_LABELS: Record<string, string> = {\n \"evm-session\": \"EVM session key\",\n \"solana-session\": \"Solana session key\",\n \"mpp-voucher\": \"MPP channel key\",\n};\n\nconst STATUS_GLYPHS: Record<ListedAuthorizationStatus, string> = {\n active: \"●\",\n pending: \"◐\",\n revoked: \"✕\",\n expired: \"○\",\n};\n\nfunction StatusBadge({\n status,\n theme,\n}: {\n status: ListedAuthorizationStatus;\n theme: NativePaymentTheme;\n}) {\n const colors =\n status === \"active\"\n ? {\n backgroundColor: theme.primary,\n borderColor: theme.primary,\n color: theme.primaryForeground,\n }\n : status === \"pending\"\n ? {\n backgroundColor: theme.background,\n borderColor: theme.foreground,\n color: theme.foreground,\n }\n : status === \"revoked\"\n ? toneColors(theme, \"danger\")\n : {\n backgroundColor: theme.muted,\n borderColor: theme.border,\n color: theme.mutedForeground,\n };\n return (\n <View\n accessibilityLabel={`Status: ${status}`}\n style={[\n shared.chip,\n styles.badge,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{STATUS_GLYPHS[status]}</Glyph>\n <Text style={[styles.badgeText, { color: colors.color }]}>{status}</Text>\n </View>\n );\n}\n\n/** React Native counterpart of the web `AuthorizationList`. */\nexport function AuthorizationListNative({\n entries: input,\n assets = {},\n trustedAssets,\n onRevoke,\n revokingId,\n locale,\n onCopy,\n theme: themeProp,\n}: AuthorizationListNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const entries = Array.isArray(input) ? input : input.entries;\n const [confirming, setConfirming] = useState<string | null>(null);\n const [onChain, setOnChain] = useState<ReadonlySet<string>>(new Set());\n const muted = { color: theme.mutedForeground };\n\n const revoke = (entry: ListedAuthorization) =>\n void Promise.resolve(onRevoke(entry)).then((result) => {\n setConfirming(null);\n if (result.onChainRevocationRequired)\n setOnChain((current) => new Set(current).add(entry.keyId));\n });\n\n const renderItem = ({ item: entry }: { item: ListedAuthorization }) => {\n const view = describeAuthorization(entry, {\n assets,\n trustedAssets,\n locale,\n });\n const busy = revokingId === entry.keyId;\n const live = entry.status === \"active\" || entry.status === \"pending\";\n return (\n <View\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.cardHeader}>\n <View style={styles.flexShrink}>\n <Text style={[styles.title, { color: theme.foreground }]}>\n {view.label ?? view.grants.map((g) => g.assetLabel).join(\", \")}\n </Text>\n <Text style={[styles.small, muted]}>\n {ENFORCER_LABELS[entry.enforcer] ??\n entry.enforcer.replaceAll(\"-\", \" \")}\n </Text>\n </View>\n <StatusBadge status={entry.status} theme={theme} />\n </View>\n\n {view.grants.map((grant) => {\n const spent = entry.spent?.[grant.asset];\n const total = entry.grants.find(\n (g) => g.asset === grant.asset,\n )?.maxTotal;\n const percent =\n spent !== undefined && total && total > 0n\n ? Math.min(Number((spent * 100n) / total), 100)\n : 0;\n return (\n <View\n key={grant.asset}\n style={[styles.grant, { backgroundColor: theme.muted }]}\n >\n {view.label && (\n <Text style={[styles.strong, { color: theme.foreground }]}>\n {grant.assetLabel}\n </Text>\n )}\n {grant.assetTrust === \"unverified\" && (\n <Callout tone=\"warning\" glyph=\"⚠\" role=\"alert\" theme={theme}>\n Unverified token — not on the trusted list\n </Callout>\n )}\n {grant.recipients.map((recipient) => (\n <CopyableValue\n key={recipient.full}\n value={recipient.full}\n display={recipient.shortened}\n onCopy={onCopy}\n theme={theme}\n />\n ))}\n {spent !== undefined && (\n <View>\n <View style={styles.spentRow}>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Spent{\" \"}\n {\n formatAuthorizationAmount(\n spent,\n grant.assetTrust === \"unverified\"\n ? undefined\n : assets[grant.asset],\n ).formatted\n }\n </Text>\n <Text style={[styles.small, { color: theme.foreground }]}>\n Total {grant.total.formatted}\n </Text>\n </View>\n <View\n accessibilityRole=\"progressbar\"\n accessibilityLabel={`${grant.assetLabel} spent`}\n accessibilityValue={{ min: 0, max: 100, now: percent }}\n style={[\n styles.track,\n { backgroundColor: theme.background },\n ]}\n >\n <View\n style={[\n styles.fill,\n {\n width: `${percent}%`,\n backgroundColor: theme.primary,\n },\n ]}\n />\n </View>\n </View>\n )}\n </View>\n );\n })}\n\n <Text style={[styles.small, muted]}>\n {entry.status === \"expired\"\n ? \"Expired\"\n : entry.status === \"revoked\"\n ? \"Revoked\"\n : `Expires ${view.expiry.relative}`}{\" \"}\n · {view.expiry.absolute}\n </Text>\n\n {view.warnings.map((warning) => (\n <Callout\n key={warning}\n tone=\"warning\"\n glyph=\"⚠\"\n role=\"alert\"\n theme={theme}\n >\n {warning}\n </Callout>\n ))}\n\n {onChain.has(entry.keyId) && (\n <Callout tone=\"warning\" glyph=\"⛓\" theme={theme}>\n Local access is revoked. Complete the on-chain revocation to stop\n this authorization on chain.\n </Callout>\n )}\n\n {live && (\n <View style={[styles.actions, { borderTopColor: theme.border }]}>\n {confirming === entry.keyId ? (\n <>\n <ActionButton\n label=\"Cancel\"\n variant=\"secondary\"\n onPress={() => setConfirming(null)}\n theme={theme}\n />\n <ActionButton\n label={busy ? \"Revoking…\" : \"Confirm revoke\"}\n disabled={busy}\n busy={busy}\n onPress={() => revoke(entry)}\n theme={theme}\n />\n </>\n ) : (\n <ActionButton\n label=\"Revoke\"\n variant=\"secondary\"\n onPress={() => setConfirming(entry.keyId)}\n theme={theme}\n />\n )}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <FlatList\n data={entries}\n keyExtractor={(entry) => entry.keyId}\n renderItem={renderItem}\n extraData={[confirming, onChain, revokingId, theme]}\n contentContainerStyle={styles.list}\n style={{ backgroundColor: theme.background }}\n ListHeaderComponent={\n entries.length ? (\n <Text\n accessibilityRole=\"header\"\n style={[shared.heading, { color: theme.foreground }]}\n >\n Payment authorizations\n </Text>\n ) : undefined\n }\n ListEmptyComponent={\n <View style={[styles.empty, { borderColor: theme.border }]}>\n <Text\n accessibilityRole=\"header\"\n style={[styles.title, { color: theme.foreground }]}\n >\n No payment authorizations\n </Text>\n <Text style={[styles.body, muted]}>\n Approvals you create will appear here.\n </Text>\n </View>\n }\n />\n );\n}\n\nconst styles = StyleSheet.create({\n list: { padding: 16, gap: 12 },\n card: { borderWidth: 1, borderRadius: 12, padding: 16, gap: 10 },\n cardHeader: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n gap: 8,\n },\n flexShrink: { flexShrink: 1 },\n title: { fontSize: 16, fontWeight: \"600\" },\n small: { fontSize: 12 },\n body: { fontSize: 14, textAlign: \"center\" },\n strong: { fontSize: 14, fontWeight: \"500\" },\n badge: { flexDirection: \"row\", alignItems: \"center\", gap: 4 },\n badgeText: { fontSize: 12, fontWeight: \"600\", textTransform: \"capitalize\" },\n grant: { borderRadius: 10, padding: 12, gap: 6 },\n spentRow: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n track: { height: 8, borderRadius: 4, overflow: \"hidden\", marginTop: 4 },\n fill: { height: \"100%\" },\n actions: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n gap: 8,\n borderTopWidth: 1,\n paddingTop: 12,\n },\n empty: {\n borderWidth: 1,\n borderStyle: \"dashed\",\n borderRadius: 12,\n padding: 32,\n alignItems: \"center\",\n gap: 4,\n },\n});\n","import {\n type AuthorizationAssetMetadata,\n formatAuthorizationAmount,\n type PaymentRecord,\n type PaymentVerificationStatus,\n} from \"@naculus/connect-appkit-core\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { CopyableValue, Glyph, type Tone, toneColors } from \"./parts\";\nimport { type NativePaymentTheme, useNativePaymentTheme } from \"./theme\";\n\nexport interface PaymentReceiptNativeProps {\n record: PaymentRecord;\n assets?: Record<string, AuthorizationAssetMetadata>;\n /**\n * Accepted for parity with the other payment components; the receipt has\n * no locale-dependent text yet (amounts use the core formatter).\n */\n locale?: string;\n /** Shows \"View on explorer\" when set and the record has a reference. */\n onOpenExplorer?: (record: PaymentRecord) => void;\n /** Copies the recipient or settlement reference. */\n onCopy?: (text: string) => void;\n theme?: NativePaymentTheme;\n}\n\nconst VERIFICATION: Record<\n PaymentVerificationStatus,\n { title: string; detail: string; glyph: string; tone: Tone }\n> = {\n unverified: {\n title: \"Unverified\",\n detail: \"Reported by the server, not yet checked.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n pending: {\n title: \"Checking\",\n detail: \"Checking on chain.\",\n glyph: \"…\",\n tone: \"neutral\",\n },\n verified: {\n title: \"Verified\",\n detail: \"Verified on chain.\",\n glyph: \"✓\",\n tone: \"success\",\n },\n mismatch: {\n title: \"Mismatch\",\n detail: \"The on-chain settlement does not match this payment.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n failed: {\n title: \"Verification failed\",\n detail: \"The settlement could not be verified.\",\n glyph: \"!\",\n tone: \"danger\",\n },\n unavailable: {\n title: \"Verification unavailable\",\n detail: \"On-chain checking is unavailable. Retry later.\",\n glyph: \"?\",\n tone: \"neutral\",\n },\n};\n\n/** React Native counterpart of the web `PaymentReceipt`. */\nexport function PaymentReceiptNative({\n record,\n assets = {},\n onOpenExplorer,\n onCopy,\n theme: themeProp,\n}: PaymentReceiptNativeProps) {\n const theme = useNativePaymentTheme(themeProp);\n const status = record.verification.status;\n const state = VERIFICATION[status];\n const colors = toneColors(theme, state.tone);\n const muted = { color: theme.mutedForeground };\n const amount =\n record.amount === null\n ? \"Amount not reported\"\n : /^\\d+$/.test(record.amount)\n ? formatAuthorizationAmount(\n BigInt(record.amount),\n record.asset ? assets[record.asset] : undefined,\n ).formatted\n : `${record.amount} base units`;\n\n return (\n <View\n testID={`verification-${status}`}\n style={[\n styles.card,\n { backgroundColor: theme.card, borderColor: theme.border },\n ]}\n >\n <View style={styles.header}>\n <Text style={[styles.eyebrow, muted]}>PAYMENT RECEIPT</Text>\n <Text\n accessibilityRole=\"header\"\n style={[styles.amount, { color: theme.foreground }]}\n >\n {amount}\n </Text>\n <Text style={[styles.small, muted]}>\n {record.asset\n ? (assets[record.asset]?.symbol ?? record.asset)\n : \"Asset not reported\"}\n </Text>\n </View>\n\n <View\n testID=\"verification-panel\"\n accessibilityLiveRegion=\"polite\"\n accessible\n accessibilityLabel={`${state.title}. ${state.detail}${record.verification.reason ? ` Reason: ${record.verification.reason}` : \"\"}`}\n style={[\n styles.panel,\n {\n backgroundColor: colors.backgroundColor,\n borderColor: colors.borderColor,\n },\n ]}\n >\n <Glyph color={colors.color}>{state.glyph}</Glyph>\n <View style={styles.flexShrink}>\n <Text style={[styles.badge, { color: colors.color }]}>\n {state.title}\n </Text>\n <Text style={[styles.body, { color: colors.color }]}>\n {state.detail}\n </Text>\n {record.verification.reason && (\n <Text\n numberOfLines={2}\n style={[styles.body, styles.strong, { color: colors.color }]}\n >\n Reason: {record.verification.reason}\n </Text>\n )}\n </View>\n </View>\n\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Recipient</Text>\n {record.payTo ? (\n <CopyableValue value={record.payTo} onCopy={onCopy} theme={theme} />\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n <View style={styles.row}>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Protocol</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n {record.protocol === \"mpp\" ? \"MPP\" : record.protocol}\n </Text>\n </View>\n <View style={styles.cell}>\n <Text style={[styles.small, muted]}>Time</Text>\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not recorded\n </Text>\n </View>\n </View>\n <View style={styles.field}>\n <Text style={[styles.small, muted]}>Settlement reference</Text>\n {record.reference ? (\n <>\n <CopyableValue\n value={record.reference}\n onCopy={onCopy}\n theme={theme}\n />\n {onOpenExplorer && (\n <Pressable\n accessibilityRole=\"link\"\n accessibilityLabel=\"View on explorer\"\n onPress={() => onOpenExplorer(record)}\n style={styles.link}\n >\n <Text style={[styles.linkText, { color: theme.foreground }]}>\n View on explorer ↗\n </Text>\n </Pressable>\n )}\n </>\n ) : (\n <Text style={[styles.body, { color: theme.foreground }]}>\n Not reported\n </Text>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: { borderWidth: 1, borderRadius: 16, padding: 20, gap: 16 },\n header: { alignItems: \"center\", gap: 4 },\n eyebrow: { fontSize: 12, fontWeight: \"500\", letterSpacing: 0.6 },\n amount: {\n fontSize: 32,\n fontWeight: \"600\",\n fontVariant: [\"tabular-nums\"],\n textAlign: \"center\",\n },\n small: { fontSize: 12 },\n body: { fontSize: 14, lineHeight: 20 },\n strong: { fontWeight: \"600\" },\n // Fixed height: badge, explanation and a two-line reason fit, so the card\n // does not jump as verification moves from pending to its final state.\n panel: {\n height: 128,\n flexDirection: \"row\",\n gap: 8,\n borderWidth: 1,\n borderRadius: 10,\n padding: 12,\n overflow: \"hidden\",\n },\n flexShrink: { flexShrink: 1 },\n badge: { fontSize: 13, fontWeight: \"700\", marginBottom: 2 },\n field: { gap: 4 },\n row: { flexDirection: \"row\", gap: 12 },\n cell: { flex: 1, gap: 4 },\n link: { minHeight: 44, minWidth: 44, justifyContent: \"center\" },\n linkText: {\n fontSize: 13,\n fontWeight: \"500\",\n textDecorationLine: \"underline\",\n },\n});\n"],"mappings":"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","names":["StyleSheet","Text","View","jsx","jsx","jsxs","View","styles","Text","StyleSheet","describeAuthorization","useState","StyleSheet","Text","View","jsx","jsxs","View","styles","Text","useState","describeAuthorization","StyleSheet","formatAuthorizationAmount","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","formatAuthorizationAmount","View","styles","Text","Pressable","StyleSheet"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naculus/connect-native",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -21,10 +21,10 @@
21
21
  "dist"
22
22
  ],
23
23
  "peerDependencies": {
24
- "@naculus/connect-appkit-core": "^0.9.0",
25
- "@naculus/connect-core": "^0.8.0",
26
- "@naculus/connect-appkit-react": "^0.9.0",
27
- "@naculus/wallet-engine": "^0.8.0",
24
+ "@naculus/connect-appkit-core": "^0.10.0",
25
+ "@naculus/connect-core": "^0.9.0",
26
+ "@naculus/connect-appkit-react": "^0.10.0",
27
+ "@naculus/wallet-engine": "^0.9.0",
28
28
  "react-native": "*",
29
29
  "@react-native-async-storage/async-storage": "*",
30
30
  "@walletconnect/react-native-compat": "*",
@@ -33,12 +33,12 @@
33
33
  "expo-secure-store": "*"
34
34
  },
35
35
  "devDependencies": {
36
- "@naculus/connect-core": "^0.8.0",
37
- "@naculus/wallet-engine": "^0.8.0",
36
+ "@naculus/connect-core": "^0.9.0",
37
+ "@naculus/wallet-engine": "^0.9.0",
38
38
  "tsup": "^8.5.1",
39
39
  "typescript": "^6.0.3",
40
- "@naculus/connect-appkit-react": "0.9.0",
41
- "@naculus/connect-appkit-core": "0.9.0"
40
+ "@naculus/connect-appkit-react": "0.10.0",
41
+ "@naculus/connect-appkit-core": "0.10.0"
42
42
  },
43
43
  "publishConfig": {
44
44
  "access": "public",