@naculus/connect-native 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naculus/connect-native",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -10,14 +10,20 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js",
12
12
  "require": "./dist/index.cjs"
13
+ },
14
+ "./ui": {
15
+ "types": "./dist/ui/index.d.ts",
16
+ "import": "./dist/ui/index.js",
17
+ "require": "./dist/ui/index.cjs"
13
18
  }
14
19
  },
15
20
  "files": [
16
21
  "dist"
17
22
  ],
18
23
  "peerDependencies": {
24
+ "@naculus/connect-appkit-core": "^0.9.0",
19
25
  "@naculus/connect-core": "^0.8.0",
20
- "@naculus/connect-appkit-react": "^0.8.0",
26
+ "@naculus/connect-appkit-react": "^0.9.0",
21
27
  "@naculus/wallet-engine": "^0.8.0",
22
28
  "react-native": "*",
23
29
  "@react-native-async-storage/async-storage": "*",
@@ -31,7 +37,8 @@
31
37
  "@naculus/wallet-engine": "^0.8.0",
32
38
  "tsup": "^8.5.1",
33
39
  "typescript": "^6.0.3",
34
- "@naculus/connect-appkit-react": "0.8.0"
40
+ "@naculus/connect-appkit-react": "0.9.0",
41
+ "@naculus/connect-appkit-core": "0.9.0"
35
42
  },
36
43
  "publishConfig": {
37
44
  "access": "public",