@burdenoff/microfe-brainyrich 2026.1023.1 → 2026.1025.2
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/brainyrich/components/AggregationPanel.d.ts +2 -0
- package/dist/brainyrich/components/AggregationPanel.d.ts.map +1 -0
- package/dist/brainyrich/components/AggregationPanel.js +173 -0
- package/dist/brainyrich/components/AggregationPanel.js.map +1 -0
- package/dist/brainyrich/components/notify.js +1 -1
- package/dist/brainyrich/hooks/useAggregation.d.ts +341 -0
- package/dist/brainyrich/hooks/useAggregation.d.ts.map +1 -0
- package/dist/brainyrich/hooks/useAggregation.js +96 -0
- package/dist/brainyrich/hooks/useAggregation.js.map +1 -0
- package/dist/brainyrich/hooks/useBrainyRichApi.d.ts +62 -0
- package/dist/brainyrich/hooks/useBrainyRichApi.d.ts.map +1 -1
- package/dist/brainyrich/hooks/useBrainyRichApi.js +1 -1
- package/dist/brainyrich/hooks/useBrainyRichApi.js.map +1 -1
- package/dist/brainyrich/pages/AccountsPage.d.ts.map +1 -1
- package/dist/brainyrich/pages/AccountsPage.js +95 -85
- package/dist/brainyrich/pages/AccountsPage.js.map +1 -1
- package/dist/brainyrich/types/bra.d.ts +38 -0
- package/dist/brainyrich/types/bra.d.ts.map +1 -1
- package/dist/brainyrich/utils/plaidLink.d.ts +63 -0
- package/dist/brainyrich/utils/plaidLink.d.ts.map +1 -0
- package/dist/brainyrich/utils/plaidLink.js +41 -0
- package/dist/brainyrich/utils/plaidLink.js.map +1 -0
- package/package.json +1 -1
- package/dist/node_modules/sonner/dist/index.js +0 -163
- package/dist/node_modules/sonner/dist/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsPage.js","names":[],"sources":["../../../src/brainyrich/pages/AccountsPage.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n ResponsiveDialog,\n ResponsiveDialogClose,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport {\n ArrowDownRight,\n ArrowUpRight,\n Building2,\n CheckCircle2,\n ChevronRight,\n Landmark,\n Layers,\n MoreHorizontal,\n Pencil,\n Plus,\n Receipt,\n Wallet,\n Archive as ArchiveIcon,\n} from 'lucide-react';\nimport {\n useAccount,\n useAllAccounts,\n usePagedAccounts,\n usePagedTransactions,\n useCreateAccount,\n useUpdateAccount,\n useArchiveAccount,\n useRecordTransaction,\n} from '../hooks/useBrainyRichApi';\nimport type { BraAccount, BraAccountType, BraTransactionType } from '../types/bra';\nimport { ActorName, ConfirmDialog, HouseholdPicker, LoadMore } from '../components';\nimport {\n DonutChart,\n FadeIn,\n GlassCard,\n StatTile,\n type DonutDatum,\n type VizTone,\n} from '../components/viz';\nimport { DocumentsPanel } from '../components/reuse/DocumentsPanel';\nimport { TagField } from '../components/reuse/TagField';\nimport {\n SectionShell,\n EmptyState,\n LoadingState,\n ErrorState,\n formatMoney,\n formatCompact,\n formatDate,\n statusBadgeVariant,\n} from './_shared';\nimport { hapticSuccess, showToast } from '../utils/nativeControls';\nimport { useTrackBrainyRichPageView } from '../hooks/useBrainyRichAnalytics';\n\n// Schema enum option lists (SDL enum members — not fabricated data).\nconst ACCOUNT_TYPES: BraAccountType[] = [\n 'BANK',\n 'BROKERAGE',\n 'RETIREMENT',\n 'CASH',\n 'CRYPTO',\n 'REAL_ESTATE',\n 'ALTERNATIVE',\n 'LIABILITY',\n];\n\nconst TRANSACTION_TYPES: BraTransactionType[] = [\n 'BUY',\n 'SELL',\n 'DIVIDEND',\n 'INTEREST',\n 'DEPOSIT',\n 'WITHDRAWAL',\n 'FEE',\n 'TRANSFER',\n];\n\n/** Stable, semantic tone per account type so the allocation donut reads consistently. */\nconst TYPE_TONE: Record<BraAccountType, VizTone> = {\n BANK: 'teal',\n BROKERAGE: 'brand',\n RETIREMENT: 'blue',\n CASH: 'success',\n CRYPTO: 'warning',\n REAL_ESTATE: 'purple',\n ALTERNATIVE: 'indigo',\n LIABILITY: 'error',\n};\n\n/** Positive = inflow (deposit/dividend/interest/sell/transfer in). */\nfunction isInflow(type: BraTransactionType): boolean {\n return (\n type === 'DEPOSIT' ||\n type === 'DIVIDEND' ||\n type === 'INTEREST' ||\n type === 'SELL' ||\n type === 'TRANSFER'\n );\n}\n\nfunction parseNum(value: string): number | undefined {\n if (value.trim() === '') return undefined;\n const n = Number(value);\n return Number.isFinite(n) ? n : undefined;\n}\n\ninterface AccountFormState {\n name: string;\n type: BraAccountType;\n institution: string;\n currency: string;\n cashBalance: string;\n accountMask: string;\n householdId: string | null;\n}\n\nconst EMPTY_ACCOUNT_FORM: AccountFormState = {\n name: '',\n type: 'BANK',\n institution: '',\n currency: 'USD',\n cashBalance: '',\n accountMask: '',\n householdId: null,\n};\n\ninterface TransactionFormState {\n type: BraTransactionType;\n tradeDate: string;\n symbol: string;\n quantity: string;\n price: string;\n amount: string;\n fee: string;\n notes: string;\n}\n\nconst EMPTY_TX_FORM: TransactionFormState = {\n type: 'DEPOSIT',\n tradeDate: '',\n symbol: '',\n quantity: '',\n price: '',\n amount: '',\n fee: '',\n notes: '',\n};\n\nexport function AccountsPage() {\n useTrackBrainyRichPageView('brainyrich.accounts.viewed');\n\n // Full set drives the KPI aggregates (totals must cover every account).\n const allAccounts = useAllAccounts();\n const accounts = allAccounts.data;\n // Paged connection drives the interactive table + LoadMore.\n const paged = usePagedAccounts();\n\n const [selectedId, setSelectedId] = useState<string | undefined>(undefined);\n\n const [createOpen, setCreateOpen] = useState(false);\n const [createForm, setCreateForm] = useState<AccountFormState>(EMPTY_ACCOUNT_FORM);\n\n const [editAccount, setEditAccount] = useState<BraAccount | null>(null);\n const [editForm, setEditForm] = useState<AccountFormState>(EMPTY_ACCOUNT_FORM);\n\n const [archiveTarget, setArchiveTarget] = useState<BraAccount | null>(null);\n\n const [txOpen, setTxOpen] = useState(false);\n const [txAccountId, setTxAccountId] = useState<string | undefined>(undefined);\n const [txPendingAccountId, setTxPendingAccountId] = useState<string | undefined>(undefined);\n const [txForm, setTxForm] = useState<TransactionFormState>(EMPTY_TX_FORM);\n\n const createAccount = useCreateAccount();\n const updateAccount = useUpdateAccount();\n const archiveAccount = useArchiveAccount();\n const recordTransaction = useRecordTransaction();\n\n // The Sheet overlay uses z-[110] while the dialog content uses z-50. Opening\n // the transaction dialog in the same React batch that closes the Sheet leaves\n // the Sheet overlay in the DOM for its 300ms exit animation, which intercepts\n // pointer events and makes the dialog submit button unclickable. Wait for the\n // Sheet to fully close before opening the dialog.\n useEffect(() => {\n if (!txPendingAccountId) return;\n const timer = window.setTimeout(() => {\n setTxPendingAccountId(undefined);\n setTxOpen(true);\n }, 320);\n return () => window.clearTimeout(timer);\n }, [txPendingAccountId]);\n\n const totalCash = accounts.reduce((sum, a) => sum + (a.cashBalance ?? 0), 0);\n const activeCount = accounts.filter((a) => a.status === 'ACTIVE').length;\n const institutionCount = new Set(\n accounts.map((a) => a.institution).filter((i): i is string => Boolean(i))\n ).size;\n const displayCurrency = accounts[0]?.currency ?? 'USD';\n\n // Cash-by-account-type allocation — aggregated straight from the real accounts.\n const cashByType = useMemo<DonutDatum[]>(() => {\n const totals = new Map<BraAccountType, number>();\n for (const a of accounts) {\n const cash = a.cashBalance ?? 0;\n if (cash <= 0) continue;\n totals.set(a.type, (totals.get(a.type) ?? 0) + cash);\n }\n return [...totals.entries()]\n .map(([type, value]) => ({\n label: type.replace(/_/g, ' '),\n value,\n tone: TYPE_TONE[type],\n }))\n .sort((a, b) => b.value - a.value);\n }, [accounts]);\n\n function openCreate() {\n setCreateForm(EMPTY_ACCOUNT_FORM);\n setCreateOpen(true);\n }\n\n function submitCreate() {\n if (!createForm.name.trim()) return;\n createAccount.mutate(\n {\n name: createForm.name.trim(),\n type: createForm.type,\n institution: createForm.institution.trim() || null,\n currency: createForm.currency.trim() || 'USD',\n cashBalance: parseNum(createForm.cashBalance) ?? 0,\n accountMask: createForm.accountMask.trim() || null,\n householdId: createForm.householdId,\n },\n { onSuccess: () => setCreateOpen(false) }\n );\n }\n\n function openEdit(account: BraAccount) {\n setEditAccount(account);\n setEditForm({\n name: account.name,\n type: account.type,\n institution: account.institution ?? '',\n currency: account.currency,\n cashBalance: String(account.cashBalance ?? ''),\n accountMask: account.accountMask ?? '',\n householdId: account.householdId,\n });\n }\n\n function submitEdit() {\n if (!editAccount || !editForm.name.trim()) return;\n updateAccount.mutate(\n {\n id: editAccount.id,\n input: {\n name: editForm.name.trim(),\n type: editForm.type,\n institution: editForm.institution.trim() || null,\n currency: editForm.currency.trim() || 'USD',\n cashBalance: parseNum(editForm.cashBalance) ?? 0,\n accountMask: editForm.accountMask.trim() || null,\n householdId: editForm.householdId,\n },\n },\n { onSuccess: () => setEditAccount(null) }\n );\n }\n\n function submitArchive() {\n if (!archiveTarget) return;\n const id = archiveTarget.id;\n archiveAccount.mutate(id, {\n onSuccess: () => {\n hapticSuccess();\n void showToast('Account archived');\n setArchiveTarget(null);\n if (selectedId === id) setSelectedId(undefined);\n },\n });\n }\n\n function openRecordTx(accountId: string) {\n setTxForm(EMPTY_TX_FORM);\n setTxAccountId(accountId);\n // Close the Sheet and schedule the dialog to open after the Sheet's exit\n // animation finishes; see the useEffect above for the timing explanation.\n setSelectedId(undefined);\n setTxPendingAccountId(accountId);\n }\n\n function closeRecordTx() {\n setTxPendingAccountId(undefined);\n setTxOpen(false);\n const accountId = txAccountId;\n setTxAccountId(undefined);\n if (accountId) setSelectedId(accountId);\n }\n\n const txAmount = parseNum(txForm.amount);\n const txAmountValid = txAmount !== undefined && txAmount > 0;\n const txValid = Boolean(txAccountId && txForm.tradeDate) && txAmountValid;\n\n function submitTx() {\n if (!txAccountId || !txForm.tradeDate || !txAmountValid) return;\n const tradeIso = new Date(txForm.tradeDate);\n if (Number.isNaN(tradeIso.getTime())) return;\n recordTransaction.mutate(\n {\n accountId: txAccountId,\n type: txForm.type,\n tradeDate: tradeIso.toISOString(),\n symbol: txForm.symbol.trim() || null,\n quantity: parseNum(txForm.quantity),\n price: parseNum(txForm.price),\n amount: txAmount,\n fee: parseNum(txForm.fee),\n notes: txForm.notes.trim() || null,\n },\n { onSuccess: closeRecordTx }\n );\n }\n\n const moneyFmt = (v: number) => formatMoney(v, displayCurrency);\n\n return (\n <div data-tour=\"brainyrich-page-accounts\" className=\"contents\">\n <SectionShell\n title=\"Accounts\"\n description=\"Linked bank, brokerage and retirement accounts with recent activity.\"\n badges={[`${accounts.length} account${accounts.length === 1 ? '' : 's'}`]}\n actionLabel=\"New account\"\n onAction={openCreate}\n >\n {/* Hero — premium KPI tiles + live cash allocation donut */}\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"grid gap-4 sm:grid-cols-2 lg:col-span-2\">\n <FadeIn index={0}>\n <StatTile\n label=\"Total cash\"\n value={formatMoney(totalCash, displayCurrency)}\n glow\n icon={<Wallet className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n <FadeIn index={1}>\n <StatTile\n label=\"Total accounts\"\n value={String(accounts.length)}\n icon={<Landmark className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n <FadeIn index={2}>\n <StatTile\n label=\"Active\"\n value={`${activeCount}/${accounts.length}`}\n icon={<CheckCircle2 className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n <FadeIn index={3}>\n <StatTile\n label=\"Institutions\"\n value={String(institutionCount)}\n icon={<Building2 className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n </div>\n\n <FadeIn index={4}>\n <GlassCard className=\"h-full\" glow>\n <div className=\"mb-2 flex items-center gap-2\">\n <Layers className=\"size-4 text-text-secondary\" aria-hidden=\"true\" />\n <h2 className=\"text-sm font-semibold text-text-primary\">Cash by account type</h2>\n </div>\n {cashByType.length === 0 ? (\n <p className=\"py-8 text-center text-sm text-text-secondary\">\n No cash balances recorded yet.\n </p>\n ) : (\n <DonutChart\n data={cashByType}\n centerValue={formatCompact(totalCash, displayCurrency)}\n centerLabel=\"Total cash\"\n height={200}\n valueFormatter={moneyFmt}\n />\n )}\n </GlassCard>\n </FadeIn>\n </div>\n\n <FadeIn index={5} as=\"section\">\n <Card className=\"transition-shadow motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Landmark className=\"h-5 w-5\" aria-hidden=\"true\" />\n Linked accounts\n </CardTitle>\n <CardDescription>\n Select an account to view holdings and transactions.\n </CardDescription>\n </CardHeader>\n <CardContent>\n {paged.isLoading ? (\n <LoadingState />\n ) : paged.isError ? (\n <ErrorState onRetry={() => paged.refetch()} />\n ) : paged.items.length === 0 ? (\n <EmptyState\n icon={<Landmark className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No accounts yet\"\n description=\"Add your first bank, brokerage or retirement account to start tracking net worth.\"\n action={\n <Button size=\"sm\" onClick={openCreate}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n New account\n </Button>\n }\n />\n ) : (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Account</TableHead>\n <TableHead>Type</TableHead>\n <TableHead>Institution</TableHead>\n <TableHead className=\"text-right\">Cash balance</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"w-12 text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {paged.items.map((account) => (\n <TableRow\n key={account.id}\n className=\"group cursor-pointer transition-colors hover:bg-bg-elevated\"\n onClick={() => setSelectedId(account.id)}\n >\n <TableCell>\n <div className=\"flex items-center gap-3\">\n <div\n className=\"flex h-9 w-9 items-center justify-center rounded-lg border border-border-subtle bg-bg-sunken text-xs font-semibold text-text-secondary transition-colors group-hover:border-[var(--color-action-primary-border)] group-hover:text-text-primary\"\n aria-hidden=\"true\"\n >\n {(account.institution ?? account.name).slice(0, 2).toUpperCase()}\n </div>\n <div className=\"min-w-0\">\n <p className=\"flex items-center gap-1 truncate font-medium text-text-primary\">\n {account.name}\n <ChevronRight\n className=\"size-3.5 shrink-0 text-text-secondary opacity-0 transition-opacity group-hover:opacity-100\"\n aria-hidden=\"true\"\n />\n </p>\n <p className=\"truncate text-xs text-text-secondary\">\n {account.institution ?? 'Manual account'}\n {account.accountMask ? ` · ••${account.accountMask}` : ''}\n </p>\n </div>\n </div>\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">{account.type.replace(/_/g, ' ')}</Badge>\n </TableCell>\n <TableCell className=\"text-sm text-text-secondary\">\n {account.institution ?? '—'}\n </TableCell>\n <TableCell className=\"text-right font-semibold tabular-nums text-text-primary\">\n {formatMoney(account.cashBalance, account.currency)}\n </TableCell>\n <TableCell>\n <Badge variant={statusBadgeVariant(account.status)}>\n {account.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-right\" onClick={(e) => e.stopPropagation()}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={`Actions for ${account.name}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => openEdit(account)}>\n <Pencil className=\"size-4\" aria-hidden=\"true\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem\n className=\"text-status-error-text\"\n onClick={() => setArchiveTarget(account)}\n >\n <ArchiveIcon className=\"size-4\" aria-hidden=\"true\" />\n Archive\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <LoadMore\n hasMore={paged.hasMore}\n onClick={paged.loadMore}\n loading={paged.isFetchingNextPage}\n className=\"mt-4\"\n />\n </div>\n )}\n </CardContent>\n </Card>\n </FadeIn>\n\n {/* Create account dialog */}\n <ResponsiveDialog open={createOpen} onOpenChange={setCreateOpen}>\n <ResponsiveDialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New account</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Add a bank, brokerage or retirement account.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <AccountForm form={createForm} onChange={setCreateForm} />\n <ResponsiveDialogFooter>\n <ResponsiveDialogClose asChild>\n <Button variant=\"outline\">Cancel</Button>\n </ResponsiveDialogClose>\n <Button\n onClick={submitCreate}\n disabled={!createForm.name.trim() || createAccount.isPending}\n >\n {createAccount.isPending ? 'Creating…' : 'Create account'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Edit account dialog */}\n <ResponsiveDialog\n open={Boolean(editAccount)}\n onOpenChange={(open) => !open && setEditAccount(null)}\n >\n <ResponsiveDialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit account</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>Update account details.</ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <AccountForm form={editForm} onChange={setEditForm} />\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setEditAccount(null)}>\n Cancel\n </Button>\n <Button\n onClick={submitEdit}\n disabled={!editForm.name.trim() || updateAccount.isPending}\n >\n {updateAccount.isPending ? 'Saving…' : 'Save changes'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Archive confirm dialog */}\n <ConfirmDialog\n open={Boolean(archiveTarget)}\n onOpenChange={(open) => !open && setArchiveTarget(null)}\n title=\"Archive account?\"\n description={\n archiveTarget\n ? `“${archiveTarget.name}” will be archived and hidden from active lists. This does not delete its history.`\n : undefined\n }\n confirmLabel=\"Archive account\"\n pendingLabel=\"Archiving…\"\n destructive\n pending={archiveAccount.isPending}\n onConfirm={submitArchive}\n />\n\n {/* Account detail sheet */}\n <AccountDetailSheet\n accountId={selectedId}\n onClose={() => {\n setSelectedId(undefined);\n // If the user closed the sheet manually while a transaction dialog\n // was scheduled to open, cancel the scheduled dialog.\n setTxPendingAccountId(undefined);\n }}\n onRecordTransaction={openRecordTx}\n />\n\n {/* Record transaction dialog */}\n <ResponsiveDialog open={txOpen} onOpenChange={(open) => !open && closeRecordTx()}>\n <ResponsiveDialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Record transaction</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Log activity against the selected account.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"grid gap-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-type\">Type</Label>\n <Select\n value={txForm.type}\n onValueChange={(v) =>\n setTxForm((f) => ({ ...f, type: v as BraTransactionType }))\n }\n >\n <SelectTrigger id=\"tx-type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {TRANSACTION_TYPES.map((t) => (\n <SelectItem key={t} value={t}>\n {t.replace(/_/g, ' ')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-date\">Trade date</Label>\n <Input\n id=\"tx-date\"\n type=\"date\"\n value={txForm.tradeDate}\n onChange={(e) => setTxForm((f) => ({ ...f, tradeDate: e.target.value }))}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-symbol\">Symbol</Label>\n <Input\n id=\"tx-symbol\"\n value={txForm.symbol}\n onChange={(e) => setTxForm((f) => ({ ...f, symbol: e.target.value }))}\n placeholder=\"e.g. VOO\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-amount\">Amount</Label>\n <Input\n id=\"tx-amount\"\n type=\"number\"\n min=\"0\"\n step=\"any\"\n value={txForm.amount}\n onChange={(e) => setTxForm((f) => ({ ...f, amount: e.target.value }))}\n aria-invalid={txForm.amount.trim() !== '' && !txAmountValid}\n aria-describedby=\"tx-amount-hint\"\n />\n <p id=\"tx-amount-hint\" className=\"text-xs text-text-secondary\">\n {txForm.amount.trim() !== '' && !txAmountValid\n ? 'Enter an amount greater than 0.'\n : 'Positive amount; direction is set by the type.'}\n </p>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-qty\">Quantity</Label>\n <Input\n id=\"tx-qty\"\n type=\"number\"\n value={txForm.quantity}\n onChange={(e) => setTxForm((f) => ({ ...f, quantity: e.target.value }))}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-price\">Price</Label>\n <Input\n id=\"tx-price\"\n type=\"number\"\n value={txForm.price}\n onChange={(e) => setTxForm((f) => ({ ...f, price: e.target.value }))}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-fee\">Fee</Label>\n <Input\n id=\"tx-fee\"\n type=\"number\"\n value={txForm.fee}\n onChange={(e) => setTxForm((f) => ({ ...f, fee: e.target.value }))}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-notes\">Notes</Label>\n <Textarea\n id=\"tx-notes\"\n value={txForm.notes}\n onChange={(e) => setTxForm((f) => ({ ...f, notes: e.target.value }))}\n placeholder=\"Optional note\"\n />\n </div>\n </div>\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={closeRecordTx}>\n Cancel\n </Button>\n <Button onClick={submitTx} disabled={!txValid || recordTransaction.isPending}>\n {recordTransaction.isPending ? 'Saving…' : 'Record transaction'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </SectionShell>\n </div>\n );\n}\n\n// ============================================================================\n// Account form (shared by create + edit dialogs)\n// ============================================================================\n\nfunction AccountForm({\n form,\n onChange,\n}: {\n form: AccountFormState;\n onChange: (updater: (prev: AccountFormState) => AccountFormState) => void;\n}) {\n return (\n <div className=\"grid gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-name\">Name</Label>\n <Input\n id=\"acct-name\"\n value={form.name}\n onChange={(e) => onChange((f) => ({ ...f, name: e.target.value }))}\n placeholder=\"e.g. Everyday Checking\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-type\">Type</Label>\n <Select\n value={form.type}\n onValueChange={(v) => onChange((f) => ({ ...f, type: v as BraAccountType }))}\n >\n <SelectTrigger id=\"acct-type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ACCOUNT_TYPES.map((t) => (\n <SelectItem key={t} value={t}>\n {t.replace(/_/g, ' ')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-currency\">Currency</Label>\n <Input\n id=\"acct-currency\"\n value={form.currency}\n onChange={(e) => onChange((f) => ({ ...f, currency: e.target.value.toUpperCase() }))}\n placeholder=\"USD\"\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-institution\">Institution</Label>\n <Input\n id=\"acct-institution\"\n value={form.institution}\n onChange={(e) => onChange((f) => ({ ...f, institution: e.target.value }))}\n placeholder=\"e.g. Chase\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-balance\">Cash balance</Label>\n <Input\n id=\"acct-balance\"\n type=\"number\"\n value={form.cashBalance}\n onChange={(e) => onChange((f) => ({ ...f, cashBalance: e.target.value }))}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-mask\">Account mask</Label>\n <Input\n id=\"acct-mask\"\n value={form.accountMask}\n onChange={(e) => onChange((f) => ({ ...f, accountMask: e.target.value }))}\n placeholder=\"Last 4 digits\"\n />\n </div>\n </div>\n <HouseholdPicker\n value={form.householdId}\n onChange={(householdId) => onChange((f) => ({ ...f, householdId }))}\n />\n </div>\n );\n}\n\n// ============================================================================\n// Account detail sheet — holdings + recent transactions\n// ============================================================================\n\nfunction AccountDetailSheet({\n accountId,\n onClose,\n onRecordTransaction,\n}: {\n accountId: string | undefined;\n onClose: () => void;\n onRecordTransaction: (accountId: string) => void;\n}) {\n const { data: account, isLoading, isError, refetch } = useAccount(accountId);\n const txPaged = usePagedTransactions(accountId ? { accountId } : {}, {\n enabled: Boolean(accountId),\n });\n const transactions = accountId ? txPaged.items : [];\n\n // Holdings allocation by market value — real per-holding figures.\n const holdingsAlloc = useMemo<DonutDatum[]>(() => {\n if (!account) return [];\n return account.holdings\n .filter((h) => Number.isFinite(h.marketValue) && h.marketValue > 0)\n .map((h) => ({ label: h.symbol, value: h.marketValue }))\n .sort((a, b) => b.value - a.value);\n }, [account]);\n\n const holdingsTotal = holdingsAlloc.reduce((s, h) => s + h.value, 0);\n\n return (\n <Sheet open={Boolean(accountId)} onOpenChange={(open) => !open && onClose()}>\n <SheetContent className=\"flex w-full flex-col overflow-y-auto p-0 sm:max-w-xl\">\n <SheetHeader className=\"border-b border-border-subtle px-6 pb-4 pt-6\">\n <SheetTitle className=\"text-lg\">{account?.name ?? 'Account'}</SheetTitle>\n <SheetDescription>\n {account\n ? `${account.institution ?? 'Manual account'} · ${account.type.replace(/_/g, ' ')}`\n : 'Loading account details…'}\n </SheetDescription>\n </SheetHeader>\n\n {isLoading ? (\n <div className=\"p-6\">\n <LoadingState rows={3} />\n </div>\n ) : isError ? (\n <div className=\"p-6\">\n <ErrorState onRetry={() => refetch()} />\n </div>\n ) : !account ? (\n <div className=\"p-6\">\n <EmptyState\n title=\"Account not found\"\n description=\"This account is no longer available.\"\n />\n </div>\n ) : (\n <div className=\"space-y-6 p-6\">\n {/* Hero — cash balance with emerald glow + status + owner */}\n <GlassCard glow className=\"space-y-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">\n Cash balance\n </p>\n <p className=\"mt-1 text-3xl font-semibold tracking-tight text-text-primary\">\n {formatMoney(account.cashBalance, account.currency)}\n </p>\n </div>\n <Badge variant={statusBadgeVariant(account.status)}>{account.status}</Badge>\n </div>\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-2 border-t border-border-subtle pt-3 text-xs\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-text-secondary\">Owner</span>\n <ActorName id={account.ownerId} className=\"font-medium text-text-primary\" />\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-text-secondary\">Holdings value</span>\n <span className=\"font-medium text-text-primary\">\n {holdingsTotal > 0 ? formatMoney(holdingsTotal, account.currency) : '—'}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-text-secondary\">Positions</span>\n <span className=\"font-medium text-text-primary\">{account.holdings.length}</span>\n </div>\n </div>\n </GlassCard>\n\n {/* Allocation donut — market value split across positions */}\n {holdingsAlloc.length > 0 ? (\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <h3 className=\"mb-2 text-sm font-semibold text-text-primary\">\n Holdings allocation\n </h3>\n <DonutChart\n data={holdingsAlloc}\n centerValue={formatCompact(holdingsTotal, account.currency)}\n centerLabel=\"Market value\"\n height={180}\n valueFormatter={(v) => formatMoney(v, account.currency)}\n />\n </div>\n ) : null}\n\n {/* Tags — canonical UniversalTag surface */}\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <TagField entityType=\"brainyrich-account\" entityId={account.id} />\n </div>\n\n {/* Tabbed detail: Holdings / Transactions / Documents */}\n <Tabs defaultValue=\"holdings\" className=\"w-full\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"holdings\" className=\"flex-1\">\n Holdings\n </TabsTrigger>\n <TabsTrigger value=\"transactions\" className=\"flex-1\">\n Transactions\n </TabsTrigger>\n <TabsTrigger value=\"documents\" className=\"flex-1\">\n Documents\n </TabsTrigger>\n </TabsList>\n\n {/* Holdings */}\n <TabsContent value=\"holdings\" className=\"mt-4\">\n {account.holdings.length === 0 ? (\n <EmptyState\n icon={<Layers className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No holdings\"\n description=\"This account has no positions recorded yet.\"\n />\n ) : (\n <div className=\"overflow-x-auto rounded-lg border border-border-subtle\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Holding</TableHead>\n <TableHead className=\"text-right\">Qty</TableHead>\n <TableHead className=\"text-right\">Price</TableHead>\n <TableHead className=\"text-right\">Market value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {account.holdings.map((h) => (\n <TableRow key={h.id} className=\"transition-colors hover:bg-bg-elevated\">\n <TableCell>\n <p className=\"font-medium text-text-primary\">{h.symbol}</p>\n {h.name ? (\n <p className=\"truncate text-xs text-text-secondary\">{h.name}</p>\n ) : null}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-secondary\">\n {h.quantity}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-secondary\">\n {formatMoney(h.lastPrice, h.currency)}\n </TableCell>\n <TableCell className=\"text-right font-semibold tabular-nums text-text-primary\">\n {formatMoney(h.marketValue, h.currency)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </TabsContent>\n\n {/* Transactions */}\n <TabsContent value=\"transactions\" className=\"mt-4 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Recent activity</h3>\n <Button size=\"sm\" onClick={() => onRecordTransaction(account.id)}>\n <Receipt className=\"size-4\" aria-hidden=\"true\" />\n Record\n </Button>\n </div>\n {txPaged.isLoading ? (\n <LoadingState rows={2} />\n ) : txPaged.isError ? (\n <ErrorState onRetry={() => txPaged.refetch()} />\n ) : transactions.length === 0 ? (\n <EmptyState\n icon={<Receipt className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No transactions\"\n description=\"Record a transaction to see activity here.\"\n action={\n <Button size=\"sm\" onClick={() => onRecordTransaction(account.id)}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n Record transaction\n </Button>\n }\n />\n ) : (\n <div className=\"space-y-2\">\n {transactions.map((tx) => {\n const inflow = isInflow(tx.type);\n const Icon = inflow ? ArrowUpRight : ArrowDownRight;\n const tone = inflow ? 'text-status-success-text' : 'text-status-error-text';\n const iconBg = inflow ? 'bg-status-success-bg' : 'bg-status-error-bg';\n return (\n <div\n key={tx.id}\n className=\"flex items-center justify-between gap-3 rounded-lg border border-border-subtle bg-bg-surface p-3 transition-colors hover:bg-bg-elevated\"\n >\n <div className=\"flex min-w-0 items-center gap-3\">\n <span\n className={`flex size-8 shrink-0 items-center justify-center rounded-full ${iconBg} ${tone}`}\n aria-hidden=\"true\"\n >\n <Icon className=\"size-4\" />\n </span>\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-text-primary\">\n {tx.type.replace(/_/g, ' ')}\n </span>\n {tx.symbol ? (\n <Badge variant=\"outline\" className=\"shrink-0\">\n {tx.symbol}\n </Badge>\n ) : null}\n </div>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {formatDate(tx.tradeDate)}\n </p>\n </div>\n </div>\n <span className={`shrink-0 text-sm font-semibold tabular-nums ${tone}`}>\n {inflow ? '+' : '−'}\n {formatMoney(Math.abs(tx.amount), tx.currency)}\n </span>\n </div>\n );\n })}\n <LoadMore\n hasMore={txPaged.hasMore}\n onClick={txPaged.loadMore}\n loading={txPaged.isFetchingNextPage}\n />\n </div>\n )}\n </TabsContent>\n\n {/* Documents — statements, KYC, tax packs (wspace-files reuse) */}\n <TabsContent value=\"documents\" className=\"mt-4\">\n <DocumentsPanel entityType=\"brainyrich-account\" entityId={account.id} />\n </TabsContent>\n </Tabs>\n </div>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AccountsPage.js","names":[],"sources":["../../../src/brainyrich/pages/AccountsPage.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n ResponsiveDialog,\n ResponsiveDialogClose,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport {\n ArrowDownRight,\n ArrowUpRight,\n Building2,\n CheckCircle2,\n ChevronRight,\n Landmark,\n Layers,\n MoreHorizontal,\n Pencil,\n Plus,\n Receipt,\n Wallet,\n Archive as ArchiveIcon,\n} from 'lucide-react';\nimport {\n useAccount,\n useAllAccounts,\n usePagedAccounts,\n usePagedTransactions,\n useCreateAccount,\n useUpdateAccount,\n useArchiveAccount,\n useRecordTransaction,\n} from '../hooks/useBrainyRichApi';\nimport type { BraAccount, BraAccountType, BraTransactionType } from '../types/bra';\nimport { ActorName, ConfirmDialog, HouseholdPicker, LoadMore } from '../components';\nimport {\n DonutChart,\n FadeIn,\n GlassCard,\n StatTile,\n type DonutDatum,\n type VizTone,\n} from '../components/viz';\nimport { AggregationPanel } from '../components/AggregationPanel';\nimport { DocumentsPanel } from '../components/reuse/DocumentsPanel';\nimport { TagField } from '../components/reuse/TagField';\nimport {\n SectionShell,\n EmptyState,\n LoadingState,\n ErrorState,\n formatMoney,\n formatCompact,\n formatDate,\n statusBadgeVariant,\n} from './_shared';\nimport { hapticSuccess, showToast } from '../utils/nativeControls';\nimport { useTrackBrainyRichPageView } from '../hooks/useBrainyRichAnalytics';\n\n// Schema enum option lists (SDL enum members — not fabricated data).\nconst ACCOUNT_TYPES: BraAccountType[] = [\n 'BANK',\n 'BROKERAGE',\n 'RETIREMENT',\n 'CASH',\n 'CRYPTO',\n 'REAL_ESTATE',\n 'ALTERNATIVE',\n 'LIABILITY',\n];\n\nconst TRANSACTION_TYPES: BraTransactionType[] = [\n 'BUY',\n 'SELL',\n 'DIVIDEND',\n 'INTEREST',\n 'DEPOSIT',\n 'WITHDRAWAL',\n 'FEE',\n 'TRANSFER',\n];\n\n/** Stable, semantic tone per account type so the allocation donut reads consistently. */\nconst TYPE_TONE: Record<BraAccountType, VizTone> = {\n BANK: 'teal',\n BROKERAGE: 'brand',\n RETIREMENT: 'blue',\n CASH: 'success',\n CRYPTO: 'warning',\n REAL_ESTATE: 'purple',\n ALTERNATIVE: 'indigo',\n LIABILITY: 'error',\n};\n\n/** Positive = inflow (deposit/dividend/interest/sell/transfer in). */\nfunction isInflow(type: BraTransactionType): boolean {\n return (\n type === 'DEPOSIT' ||\n type === 'DIVIDEND' ||\n type === 'INTEREST' ||\n type === 'SELL' ||\n type === 'TRANSFER'\n );\n}\n\nfunction parseNum(value: string): number | undefined {\n if (value.trim() === '') return undefined;\n const n = Number(value);\n return Number.isFinite(n) ? n : undefined;\n}\n\ninterface AccountFormState {\n name: string;\n type: BraAccountType;\n institution: string;\n currency: string;\n cashBalance: string;\n accountMask: string;\n householdId: string | null;\n}\n\nconst EMPTY_ACCOUNT_FORM: AccountFormState = {\n name: '',\n type: 'BANK',\n institution: '',\n currency: 'USD',\n cashBalance: '',\n accountMask: '',\n householdId: null,\n};\n\ninterface TransactionFormState {\n type: BraTransactionType;\n tradeDate: string;\n symbol: string;\n quantity: string;\n price: string;\n amount: string;\n fee: string;\n notes: string;\n}\n\nconst EMPTY_TX_FORM: TransactionFormState = {\n type: 'DEPOSIT',\n tradeDate: '',\n symbol: '',\n quantity: '',\n price: '',\n amount: '',\n fee: '',\n notes: '',\n};\n\nexport function AccountsPage() {\n useTrackBrainyRichPageView('brainyrich.accounts.viewed');\n\n // Full set drives the KPI aggregates (totals must cover every account).\n const allAccounts = useAllAccounts();\n const accounts = allAccounts.data;\n // Paged connection drives the interactive table + LoadMore.\n const paged = usePagedAccounts();\n\n const [selectedId, setSelectedId] = useState<string | undefined>(undefined);\n\n const [createOpen, setCreateOpen] = useState(false);\n const [createForm, setCreateForm] = useState<AccountFormState>(EMPTY_ACCOUNT_FORM);\n\n const [editAccount, setEditAccount] = useState<BraAccount | null>(null);\n const [editForm, setEditForm] = useState<AccountFormState>(EMPTY_ACCOUNT_FORM);\n\n const [archiveTarget, setArchiveTarget] = useState<BraAccount | null>(null);\n\n const [txOpen, setTxOpen] = useState(false);\n const [txAccountId, setTxAccountId] = useState<string | undefined>(undefined);\n const [txPendingAccountId, setTxPendingAccountId] = useState<string | undefined>(undefined);\n const [txForm, setTxForm] = useState<TransactionFormState>(EMPTY_TX_FORM);\n\n const createAccount = useCreateAccount();\n const updateAccount = useUpdateAccount();\n const archiveAccount = useArchiveAccount();\n const recordTransaction = useRecordTransaction();\n\n // The Sheet overlay uses z-[110] while the dialog content uses z-50. Opening\n // the transaction dialog in the same React batch that closes the Sheet leaves\n // the Sheet overlay in the DOM for its 300ms exit animation, which intercepts\n // pointer events and makes the dialog submit button unclickable. Wait for the\n // Sheet to fully close before opening the dialog.\n useEffect(() => {\n if (!txPendingAccountId) return;\n const timer = window.setTimeout(() => {\n setTxPendingAccountId(undefined);\n setTxOpen(true);\n }, 320);\n return () => window.clearTimeout(timer);\n }, [txPendingAccountId]);\n\n const totalCash = accounts.reduce((sum, a) => sum + (a.cashBalance ?? 0), 0);\n const activeCount = accounts.filter((a) => a.status === 'ACTIVE').length;\n const institutionCount = new Set(\n accounts.map((a) => a.institution).filter((i): i is string => Boolean(i))\n ).size;\n const displayCurrency = accounts[0]?.currency ?? 'USD';\n\n // Cash-by-account-type allocation — aggregated straight from the real accounts.\n const cashByType = useMemo<DonutDatum[]>(() => {\n const totals = new Map<BraAccountType, number>();\n for (const a of accounts) {\n const cash = a.cashBalance ?? 0;\n if (cash <= 0) continue;\n totals.set(a.type, (totals.get(a.type) ?? 0) + cash);\n }\n return [...totals.entries()]\n .map(([type, value]) => ({\n label: type.replace(/_/g, ' '),\n value,\n tone: TYPE_TONE[type],\n }))\n .sort((a, b) => b.value - a.value);\n }, [accounts]);\n\n function openCreate() {\n setCreateForm(EMPTY_ACCOUNT_FORM);\n setCreateOpen(true);\n }\n\n function submitCreate() {\n if (!createForm.name.trim()) return;\n createAccount.mutate(\n {\n name: createForm.name.trim(),\n type: createForm.type,\n institution: createForm.institution.trim() || null,\n currency: createForm.currency.trim() || 'USD',\n cashBalance: parseNum(createForm.cashBalance) ?? 0,\n accountMask: createForm.accountMask.trim() || null,\n householdId: createForm.householdId,\n },\n { onSuccess: () => setCreateOpen(false) }\n );\n }\n\n function openEdit(account: BraAccount) {\n setEditAccount(account);\n setEditForm({\n name: account.name,\n type: account.type,\n institution: account.institution ?? '',\n currency: account.currency,\n cashBalance: String(account.cashBalance ?? ''),\n accountMask: account.accountMask ?? '',\n householdId: account.householdId,\n });\n }\n\n function submitEdit() {\n if (!editAccount || !editForm.name.trim()) return;\n updateAccount.mutate(\n {\n id: editAccount.id,\n input: {\n name: editForm.name.trim(),\n type: editForm.type,\n institution: editForm.institution.trim() || null,\n currency: editForm.currency.trim() || 'USD',\n cashBalance: parseNum(editForm.cashBalance) ?? 0,\n accountMask: editForm.accountMask.trim() || null,\n householdId: editForm.householdId,\n },\n },\n { onSuccess: () => setEditAccount(null) }\n );\n }\n\n function submitArchive() {\n if (!archiveTarget) return;\n const id = archiveTarget.id;\n archiveAccount.mutate(id, {\n onSuccess: () => {\n hapticSuccess();\n void showToast('Account archived');\n setArchiveTarget(null);\n if (selectedId === id) setSelectedId(undefined);\n },\n });\n }\n\n function openRecordTx(accountId: string) {\n setTxForm(EMPTY_TX_FORM);\n setTxAccountId(accountId);\n // Close the Sheet and schedule the dialog to open after the Sheet's exit\n // animation finishes; see the useEffect above for the timing explanation.\n setSelectedId(undefined);\n setTxPendingAccountId(accountId);\n }\n\n function closeRecordTx() {\n setTxPendingAccountId(undefined);\n setTxOpen(false);\n const accountId = txAccountId;\n setTxAccountId(undefined);\n if (accountId) setSelectedId(accountId);\n }\n\n const txAmount = parseNum(txForm.amount);\n const txAmountValid = txAmount !== undefined && txAmount > 0;\n const txValid = Boolean(txAccountId && txForm.tradeDate) && txAmountValid;\n\n function submitTx() {\n if (!txAccountId || !txForm.tradeDate || !txAmountValid) return;\n const tradeIso = new Date(txForm.tradeDate);\n if (Number.isNaN(tradeIso.getTime())) return;\n recordTransaction.mutate(\n {\n accountId: txAccountId,\n type: txForm.type,\n tradeDate: tradeIso.toISOString(),\n symbol: txForm.symbol.trim() || null,\n quantity: parseNum(txForm.quantity),\n price: parseNum(txForm.price),\n amount: txAmount,\n fee: parseNum(txForm.fee),\n notes: txForm.notes.trim() || null,\n },\n { onSuccess: closeRecordTx }\n );\n }\n\n const moneyFmt = (v: number) => formatMoney(v, displayCurrency);\n\n return (\n <div data-tour=\"brainyrich-page-accounts\" className=\"contents\">\n <SectionShell\n title=\"Accounts\"\n description=\"Linked bank, brokerage and retirement accounts with recent activity.\"\n badges={[`${accounts.length} account${accounts.length === 1 ? '' : 's'}`]}\n actionLabel=\"New account\"\n onAction={openCreate}\n >\n {/* Hero — premium KPI tiles + live cash allocation donut */}\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"grid gap-4 sm:grid-cols-2 lg:col-span-2\">\n <FadeIn index={0}>\n <StatTile\n label=\"Total cash\"\n value={formatMoney(totalCash, displayCurrency)}\n glow\n icon={<Wallet className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n <FadeIn index={1}>\n <StatTile\n label=\"Total accounts\"\n value={String(accounts.length)}\n icon={<Landmark className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n <FadeIn index={2}>\n <StatTile\n label=\"Active\"\n value={`${activeCount}/${accounts.length}`}\n icon={<CheckCircle2 className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n <FadeIn index={3}>\n <StatTile\n label=\"Institutions\"\n value={String(institutionCount)}\n icon={<Building2 className=\"size-4\" aria-hidden=\"true\" />}\n />\n </FadeIn>\n </div>\n\n <FadeIn index={4}>\n <GlassCard className=\"h-full\" glow>\n <div className=\"mb-2 flex items-center gap-2\">\n <Layers className=\"size-4 text-text-secondary\" aria-hidden=\"true\" />\n <h2 className=\"text-sm font-semibold text-text-primary\">Cash by account type</h2>\n </div>\n {cashByType.length === 0 ? (\n <p className=\"py-8 text-center text-sm text-text-secondary\">\n No cash balances recorded yet.\n </p>\n ) : (\n <DonutChart\n data={cashByType}\n centerValue={formatCompact(totalCash, displayCurrency)}\n centerLabel=\"Total cash\"\n height={200}\n valueFormatter={moneyFmt}\n />\n )}\n </GlassCard>\n </FadeIn>\n </div>\n\n <FadeIn index={5} as=\"section\">\n <Card className=\"transition-shadow motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Landmark className=\"h-5 w-5\" aria-hidden=\"true\" />\n Linked accounts\n </CardTitle>\n <CardDescription>\n Select an account to view holdings and transactions.\n </CardDescription>\n </CardHeader>\n <CardContent>\n {paged.isLoading ? (\n <LoadingState />\n ) : paged.isError ? (\n <ErrorState onRetry={() => paged.refetch()} />\n ) : paged.items.length === 0 ? (\n <EmptyState\n icon={<Landmark className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No accounts yet\"\n description=\"Add your first bank, brokerage or retirement account to start tracking net worth.\"\n action={\n <Button size=\"sm\" onClick={openCreate}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n New account\n </Button>\n }\n />\n ) : (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Account</TableHead>\n <TableHead>Type</TableHead>\n <TableHead>Institution</TableHead>\n <TableHead className=\"text-right\">Cash balance</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"w-12 text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {paged.items.map((account) => (\n <TableRow\n key={account.id}\n className=\"group cursor-pointer transition-colors hover:bg-bg-elevated\"\n onClick={() => setSelectedId(account.id)}\n >\n <TableCell>\n <div className=\"flex items-center gap-3\">\n <div\n className=\"flex h-9 w-9 items-center justify-center rounded-lg border border-border-subtle bg-bg-sunken text-xs font-semibold text-text-secondary transition-colors group-hover:border-[var(--color-action-primary-border)] group-hover:text-text-primary\"\n aria-hidden=\"true\"\n >\n {(account.institution ?? account.name).slice(0, 2).toUpperCase()}\n </div>\n <div className=\"min-w-0\">\n <p className=\"flex items-center gap-1 truncate font-medium text-text-primary\">\n {account.name}\n <ChevronRight\n className=\"size-3.5 shrink-0 text-text-secondary opacity-0 transition-opacity group-hover:opacity-100\"\n aria-hidden=\"true\"\n />\n </p>\n <p className=\"truncate text-xs text-text-secondary\">\n {account.institution ??\n (account.isManual ? 'Manual account' : 'Synced account')}\n {account.accountMask ? ` · ••${account.accountMask}` : ''}\n {account.isManual ? '' : ' · Synced automatically'}\n </p>\n </div>\n </div>\n </TableCell>\n <TableCell>\n <Badge variant=\"outline\">{account.type.replace(/_/g, ' ')}</Badge>\n </TableCell>\n <TableCell className=\"text-sm text-text-secondary\">\n {account.institution ?? '—'}\n </TableCell>\n <TableCell className=\"text-right font-semibold tabular-nums text-text-primary\">\n {formatMoney(account.cashBalance, account.currency)}\n </TableCell>\n <TableCell>\n <Badge variant={statusBadgeVariant(account.status)}>\n {account.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-right\" onClick={(e) => e.stopPropagation()}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={`Actions for ${account.name}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => openEdit(account)}>\n <Pencil className=\"size-4\" aria-hidden=\"true\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem\n className=\"text-status-error-text\"\n onClick={() => setArchiveTarget(account)}\n >\n <ArchiveIcon className=\"size-4\" aria-hidden=\"true\" />\n Archive\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <LoadMore\n hasMore={paged.hasMore}\n onClick={paged.loadMore}\n loading={paged.isFetchingNextPage}\n className=\"mt-4\"\n />\n </div>\n )}\n </CardContent>\n </Card>\n </FadeIn>\n\n <FadeIn index={6} as=\"section\">\n <AggregationPanel />\n </FadeIn>\n\n {/* Create account dialog */}\n <ResponsiveDialog open={createOpen} onOpenChange={setCreateOpen}>\n <ResponsiveDialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New account</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Add a bank, brokerage or retirement account.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <AccountForm form={createForm} onChange={setCreateForm} />\n <ResponsiveDialogFooter>\n <ResponsiveDialogClose asChild>\n <Button variant=\"outline\">Cancel</Button>\n </ResponsiveDialogClose>\n <Button\n onClick={submitCreate}\n disabled={!createForm.name.trim() || createAccount.isPending}\n >\n {createAccount.isPending ? 'Creating…' : 'Create account'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Edit account dialog */}\n <ResponsiveDialog\n open={Boolean(editAccount)}\n onOpenChange={(open) => !open && setEditAccount(null)}\n >\n <ResponsiveDialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit account</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>Update account details.</ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <AccountForm form={editForm} onChange={setEditForm} />\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setEditAccount(null)}>\n Cancel\n </Button>\n <Button\n onClick={submitEdit}\n disabled={!editForm.name.trim() || updateAccount.isPending}\n >\n {updateAccount.isPending ? 'Saving…' : 'Save changes'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Archive confirm dialog */}\n <ConfirmDialog\n open={Boolean(archiveTarget)}\n onOpenChange={(open) => !open && setArchiveTarget(null)}\n title=\"Archive account?\"\n description={\n archiveTarget\n ? `“${archiveTarget.name}” will be archived and hidden from active lists. This does not delete its history.`\n : undefined\n }\n confirmLabel=\"Archive account\"\n pendingLabel=\"Archiving…\"\n destructive\n pending={archiveAccount.isPending}\n onConfirm={submitArchive}\n />\n\n {/* Account detail sheet */}\n <AccountDetailSheet\n accountId={selectedId}\n onClose={() => {\n setSelectedId(undefined);\n // If the user closed the sheet manually while a transaction dialog\n // was scheduled to open, cancel the scheduled dialog.\n setTxPendingAccountId(undefined);\n }}\n onRecordTransaction={openRecordTx}\n />\n\n {/* Record transaction dialog */}\n <ResponsiveDialog open={txOpen} onOpenChange={(open) => !open && closeRecordTx()}>\n <ResponsiveDialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Record transaction</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Log activity against the selected account.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"grid gap-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-type\">Type</Label>\n <Select\n value={txForm.type}\n onValueChange={(v) =>\n setTxForm((f) => ({ ...f, type: v as BraTransactionType }))\n }\n >\n <SelectTrigger id=\"tx-type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {TRANSACTION_TYPES.map((t) => (\n <SelectItem key={t} value={t}>\n {t.replace(/_/g, ' ')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-date\">Trade date</Label>\n <Input\n id=\"tx-date\"\n type=\"date\"\n value={txForm.tradeDate}\n onChange={(e) => setTxForm((f) => ({ ...f, tradeDate: e.target.value }))}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-symbol\">Symbol</Label>\n <Input\n id=\"tx-symbol\"\n value={txForm.symbol}\n onChange={(e) => setTxForm((f) => ({ ...f, symbol: e.target.value }))}\n placeholder=\"e.g. VOO\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-amount\">Amount</Label>\n <Input\n id=\"tx-amount\"\n type=\"number\"\n min=\"0\"\n step=\"any\"\n value={txForm.amount}\n onChange={(e) => setTxForm((f) => ({ ...f, amount: e.target.value }))}\n aria-invalid={txForm.amount.trim() !== '' && !txAmountValid}\n aria-describedby=\"tx-amount-hint\"\n />\n <p id=\"tx-amount-hint\" className=\"text-xs text-text-secondary\">\n {txForm.amount.trim() !== '' && !txAmountValid\n ? 'Enter an amount greater than 0.'\n : 'Positive amount; direction is set by the type.'}\n </p>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-qty\">Quantity</Label>\n <Input\n id=\"tx-qty\"\n type=\"number\"\n value={txForm.quantity}\n onChange={(e) => setTxForm((f) => ({ ...f, quantity: e.target.value }))}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-price\">Price</Label>\n <Input\n id=\"tx-price\"\n type=\"number\"\n value={txForm.price}\n onChange={(e) => setTxForm((f) => ({ ...f, price: e.target.value }))}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-fee\">Fee</Label>\n <Input\n id=\"tx-fee\"\n type=\"number\"\n value={txForm.fee}\n onChange={(e) => setTxForm((f) => ({ ...f, fee: e.target.value }))}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tx-notes\">Notes</Label>\n <Textarea\n id=\"tx-notes\"\n value={txForm.notes}\n onChange={(e) => setTxForm((f) => ({ ...f, notes: e.target.value }))}\n placeholder=\"Optional note\"\n />\n </div>\n </div>\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={closeRecordTx}>\n Cancel\n </Button>\n <Button onClick={submitTx} disabled={!txValid || recordTransaction.isPending}>\n {recordTransaction.isPending ? 'Saving…' : 'Record transaction'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </SectionShell>\n </div>\n );\n}\n\n// ============================================================================\n// Account form (shared by create + edit dialogs)\n// ============================================================================\n\nfunction AccountForm({\n form,\n onChange,\n}: {\n form: AccountFormState;\n onChange: (updater: (prev: AccountFormState) => AccountFormState) => void;\n}) {\n return (\n <div className=\"grid gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-name\">Name</Label>\n <Input\n id=\"acct-name\"\n value={form.name}\n onChange={(e) => onChange((f) => ({ ...f, name: e.target.value }))}\n placeholder=\"e.g. Everyday Checking\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-type\">Type</Label>\n <Select\n value={form.type}\n onValueChange={(v) => onChange((f) => ({ ...f, type: v as BraAccountType }))}\n >\n <SelectTrigger id=\"acct-type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ACCOUNT_TYPES.map((t) => (\n <SelectItem key={t} value={t}>\n {t.replace(/_/g, ' ')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-currency\">Currency</Label>\n <Input\n id=\"acct-currency\"\n value={form.currency}\n onChange={(e) => onChange((f) => ({ ...f, currency: e.target.value.toUpperCase() }))}\n placeholder=\"USD\"\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-institution\">Institution</Label>\n <Input\n id=\"acct-institution\"\n value={form.institution}\n onChange={(e) => onChange((f) => ({ ...f, institution: e.target.value }))}\n placeholder=\"e.g. Chase\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-balance\">Cash balance</Label>\n <Input\n id=\"acct-balance\"\n type=\"number\"\n value={form.cashBalance}\n onChange={(e) => onChange((f) => ({ ...f, cashBalance: e.target.value }))}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"acct-mask\">Account mask</Label>\n <Input\n id=\"acct-mask\"\n value={form.accountMask}\n onChange={(e) => onChange((f) => ({ ...f, accountMask: e.target.value }))}\n placeholder=\"Last 4 digits\"\n />\n </div>\n </div>\n <HouseholdPicker\n value={form.householdId}\n onChange={(householdId) => onChange((f) => ({ ...f, householdId }))}\n />\n </div>\n );\n}\n\n// ============================================================================\n// Account detail sheet — holdings + recent transactions\n// ============================================================================\n\nfunction AccountDetailSheet({\n accountId,\n onClose,\n onRecordTransaction,\n}: {\n accountId: string | undefined;\n onClose: () => void;\n onRecordTransaction: (accountId: string) => void;\n}) {\n const { data: account, isLoading, isError, refetch } = useAccount(accountId);\n const txPaged = usePagedTransactions(accountId ? { accountId } : {}, {\n enabled: Boolean(accountId),\n });\n const transactions = accountId ? txPaged.items : [];\n\n // Holdings allocation by market value — real per-holding figures.\n const holdingsAlloc = useMemo<DonutDatum[]>(() => {\n if (!account) return [];\n return account.holdings\n .filter((h) => Number.isFinite(h.marketValue) && h.marketValue > 0)\n .map((h) => ({ label: h.symbol, value: h.marketValue }))\n .sort((a, b) => b.value - a.value);\n }, [account]);\n\n const holdingsTotal = holdingsAlloc.reduce((s, h) => s + h.value, 0);\n\n return (\n <Sheet open={Boolean(accountId)} onOpenChange={(open) => !open && onClose()}>\n <SheetContent className=\"flex w-full flex-col overflow-y-auto p-0 sm:max-w-xl\">\n <SheetHeader className=\"border-b border-border-subtle px-6 pb-4 pt-6\">\n <SheetTitle className=\"text-lg\">{account?.name ?? 'Account'}</SheetTitle>\n <SheetDescription>\n {account\n ? `${account.institution ?? 'Manual account'} · ${account.type.replace(/_/g, ' ')}`\n : 'Loading account details…'}\n </SheetDescription>\n </SheetHeader>\n\n {isLoading ? (\n <div className=\"p-6\">\n <LoadingState rows={3} />\n </div>\n ) : isError ? (\n <div className=\"p-6\">\n <ErrorState onRetry={() => refetch()} />\n </div>\n ) : !account ? (\n <div className=\"p-6\">\n <EmptyState\n title=\"Account not found\"\n description=\"This account is no longer available.\"\n />\n </div>\n ) : (\n <div className=\"space-y-6 p-6\">\n {/* Hero — cash balance with emerald glow + status + owner */}\n <GlassCard glow className=\"space-y-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">\n Cash balance\n </p>\n <p className=\"mt-1 text-3xl font-semibold tracking-tight text-text-primary\">\n {formatMoney(account.cashBalance, account.currency)}\n </p>\n </div>\n <Badge variant={statusBadgeVariant(account.status)}>{account.status}</Badge>\n </div>\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-2 border-t border-border-subtle pt-3 text-xs\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-text-secondary\">Owner</span>\n <ActorName id={account.ownerId} className=\"font-medium text-text-primary\" />\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-text-secondary\">Holdings value</span>\n <span className=\"font-medium text-text-primary\">\n {holdingsTotal > 0 ? formatMoney(holdingsTotal, account.currency) : '—'}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-text-secondary\">Positions</span>\n <span className=\"font-medium text-text-primary\">{account.holdings.length}</span>\n </div>\n </div>\n </GlassCard>\n\n {/* Allocation donut — market value split across positions */}\n {holdingsAlloc.length > 0 ? (\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <h3 className=\"mb-2 text-sm font-semibold text-text-primary\">\n Holdings allocation\n </h3>\n <DonutChart\n data={holdingsAlloc}\n centerValue={formatCompact(holdingsTotal, account.currency)}\n centerLabel=\"Market value\"\n height={180}\n valueFormatter={(v) => formatMoney(v, account.currency)}\n />\n </div>\n ) : null}\n\n {/* Tags — canonical UniversalTag surface */}\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <TagField entityType=\"brainyrich-account\" entityId={account.id} />\n </div>\n\n {/* Tabbed detail: Holdings / Transactions / Documents */}\n <Tabs defaultValue=\"holdings\" className=\"w-full\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"holdings\" className=\"flex-1\">\n Holdings\n </TabsTrigger>\n <TabsTrigger value=\"transactions\" className=\"flex-1\">\n Transactions\n </TabsTrigger>\n <TabsTrigger value=\"documents\" className=\"flex-1\">\n Documents\n </TabsTrigger>\n </TabsList>\n\n {/* Holdings */}\n <TabsContent value=\"holdings\" className=\"mt-4\">\n {account.holdings.length === 0 ? (\n <EmptyState\n icon={<Layers className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No holdings\"\n description=\"This account has no positions recorded yet.\"\n />\n ) : (\n <div className=\"overflow-x-auto rounded-lg border border-border-subtle\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Holding</TableHead>\n <TableHead className=\"text-right\">Qty</TableHead>\n <TableHead className=\"text-right\">Price</TableHead>\n <TableHead className=\"text-right\">Market value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {account.holdings.map((h) => (\n <TableRow key={h.id} className=\"transition-colors hover:bg-bg-elevated\">\n <TableCell>\n <p className=\"font-medium text-text-primary\">{h.symbol}</p>\n {h.name ? (\n <p className=\"truncate text-xs text-text-secondary\">{h.name}</p>\n ) : null}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-secondary\">\n {h.quantity}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-secondary\">\n {formatMoney(h.lastPrice, h.currency)}\n </TableCell>\n <TableCell className=\"text-right font-semibold tabular-nums text-text-primary\">\n {formatMoney(h.marketValue, h.currency)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </TabsContent>\n\n {/* Transactions */}\n <TabsContent value=\"transactions\" className=\"mt-4 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Recent activity</h3>\n <Button size=\"sm\" onClick={() => onRecordTransaction(account.id)}>\n <Receipt className=\"size-4\" aria-hidden=\"true\" />\n Record\n </Button>\n </div>\n {txPaged.isLoading ? (\n <LoadingState rows={2} />\n ) : txPaged.isError ? (\n <ErrorState onRetry={() => txPaged.refetch()} />\n ) : transactions.length === 0 ? (\n <EmptyState\n icon={<Receipt className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No transactions\"\n description=\"Record a transaction to see activity here.\"\n action={\n <Button size=\"sm\" onClick={() => onRecordTransaction(account.id)}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n Record transaction\n </Button>\n }\n />\n ) : (\n <div className=\"space-y-2\">\n {transactions.map((tx) => {\n const inflow = isInflow(tx.type);\n const Icon = inflow ? ArrowUpRight : ArrowDownRight;\n const tone = inflow ? 'text-status-success-text' : 'text-status-error-text';\n const iconBg = inflow ? 'bg-status-success-bg' : 'bg-status-error-bg';\n return (\n <div\n key={tx.id}\n className=\"flex items-center justify-between gap-3 rounded-lg border border-border-subtle bg-bg-surface p-3 transition-colors hover:bg-bg-elevated\"\n >\n <div className=\"flex min-w-0 items-center gap-3\">\n <span\n className={`flex size-8 shrink-0 items-center justify-center rounded-full ${iconBg} ${tone}`}\n aria-hidden=\"true\"\n >\n <Icon className=\"size-4\" />\n </span>\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-text-primary\">\n {tx.type.replace(/_/g, ' ')}\n </span>\n {tx.symbol ? (\n <Badge variant=\"outline\" className=\"shrink-0\">\n {tx.symbol}\n </Badge>\n ) : null}\n </div>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {formatDate(tx.tradeDate)}\n </p>\n </div>\n </div>\n <span className={`shrink-0 text-sm font-semibold tabular-nums ${tone}`}>\n {inflow ? '+' : '−'}\n {formatMoney(Math.abs(tx.amount), tx.currency)}\n </span>\n </div>\n );\n })}\n <LoadMore\n hasMore={txPaged.hasMore}\n onClick={txPaged.loadMore}\n loading={txPaged.isFetchingNextPage}\n />\n </div>\n )}\n </TabsContent>\n\n {/* Documents — statements, KYC, tax packs (wspace-files reuse) */}\n <TabsContent value=\"documents\" className=\"mt-4\">\n <DocumentsPanel entityType=\"brainyrich-account\" entityId={account.id} />\n </TabsContent>\n </Tabs>\n </div>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n"],"mappings":"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"}
|
|
@@ -617,4 +617,42 @@ export interface BraCreateRebalanceProposalInput {
|
|
|
617
617
|
rationale?: string | null;
|
|
618
618
|
trades?: BraJson;
|
|
619
619
|
}
|
|
620
|
+
export type BraAggregationProvider = 'PLAID';
|
|
621
|
+
export type BraAggregationLinkStatus = 'PENDING' | 'ACTIVE' | 'ERROR' | 'REVOKED';
|
|
622
|
+
/** Whether a provider is usable from this deployment (no credential material). */
|
|
623
|
+
export interface BraAggregationProviderStatus {
|
|
624
|
+
provider: BraAggregationProvider;
|
|
625
|
+
configured: boolean;
|
|
626
|
+
/** `sandbox` or `production`. */
|
|
627
|
+
environment: string;
|
|
628
|
+
/** ISO-3166 alpha-2 countries offered in the provider's institution picker. */
|
|
629
|
+
countryCodes: string[];
|
|
630
|
+
}
|
|
631
|
+
/** One linked-institution consent (a Plaid Item today). */
|
|
632
|
+
export interface BraAggregationLink {
|
|
633
|
+
id: string;
|
|
634
|
+
workspaceId: string;
|
|
635
|
+
ownerId: string;
|
|
636
|
+
provider: BraAggregationProvider;
|
|
637
|
+
status: BraAggregationLinkStatus;
|
|
638
|
+
institutionId: string | null;
|
|
639
|
+
institutionName: string | null;
|
|
640
|
+
lastSyncedAt: string | null;
|
|
641
|
+
lastSyncError: string | null;
|
|
642
|
+
createdAt: string;
|
|
643
|
+
updatedAt: string;
|
|
644
|
+
}
|
|
645
|
+
export interface BraPlaidLinkToken {
|
|
646
|
+
linkToken: string;
|
|
647
|
+
expiration: string;
|
|
648
|
+
requestId: string;
|
|
649
|
+
}
|
|
650
|
+
export interface BraAggregationSyncResult {
|
|
651
|
+
link: BraAggregationLink;
|
|
652
|
+
accountsSynced: number;
|
|
653
|
+
transactionsSynced: number;
|
|
654
|
+
addedTransactions: number;
|
|
655
|
+
modifiedTransactions: number;
|
|
656
|
+
removedTransactions: number;
|
|
657
|
+
}
|
|
620
658
|
//# sourceMappingURL=bra.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bra.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/types/bra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,kFAAkF;AAClF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,uEAAuE;AACvE,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC;AAM9B,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,WAAW,GACX,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,aAAa,GACb,aAAa,GACb,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhE,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,cAAc,GACd,MAAM,GACN,aAAa,GACb,WAAW,GACX,QAAQ,GACR,aAAa,CAAC;AAElB,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,WAAW,GACX,MAAM,GACN,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,GACf,QAAQ,CAAC;AAEb,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnF,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEhG,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,OAAO,GACP,oBAAoB,GACpB,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AAElF,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,CAAC;AAEhB,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GACzB,uBAAuB,GACvB,2BAA2B,GAC3B,WAAW,GACX,kBAAkB,GAClB,eAAe,GACf,kBAAkB,CAAC;AAEvB,6GAA6G;AAC7G,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,cAAc,CAAC;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,+FAA+F;AAC/F,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,yFAAyF;AACzF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,oBAAoB,CAAC;IACjC,aAAa,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAC1B,KAAK,GACL,MAAM,GACN,UAAU,GACV,UAAU,GACV,SAAS,GACT,YAAY,GACZ,KAAK,GACL,UAAU,CAAC;AAMf,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,YAAY,CAAC;AACtD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,uBAAuB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,iBAAiB,EAAE,2BAA2B,EAAE,CAAC;CAClD;AAMD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AACpE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,6BAA6B;IAC5C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAMD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,MAAM,CAAC;AACvD,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,GAAG,cAAc,GAAG,WAAW,CAAC;AACxF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,aAAa,GAAG,oBAAoB,CAAC;AAExF,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,yBAAyB,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,yBAAyB,CAAC;IAClC,MAAM,EAAE,yBAAyB,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,yBAAyB,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAMD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,EAAE,WAAW,CAAC;CACvB;AAGD,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAC1D,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AACpD,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;AAC9D,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAC1D,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAMlE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,aAAa,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAMD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"bra.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/types/bra.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plaid Link loader (BOFF-4234).
|
|
3
|
+
*
|
|
4
|
+
* Plaid requires Link to be loaded from its own CDN (it is not distributed as
|
|
5
|
+
* an npm bundle that may be self-hosted), so the script is injected once, on
|
|
6
|
+
* demand, the first time a user starts linking an institution. Nothing is
|
|
7
|
+
* loaded for users who never click "Link an institution".
|
|
8
|
+
*
|
|
9
|
+
* The flow this wraps:
|
|
10
|
+
* 1. the backend mints a short-lived `link_token` (`braCreatePlaidLinkToken`)
|
|
11
|
+
* 2. Plaid Link runs the bank's own consent + login screens in its iframe —
|
|
12
|
+
* bank credentials never touch BrainyRich
|
|
13
|
+
* 3. on success Plaid hands back a one-time `public_token`, which the
|
|
14
|
+
* backend exchanges server-side (`braExchangePlaidPublicToken`)
|
|
15
|
+
*/
|
|
16
|
+
export declare const PLAID_LINK_SCRIPT_URL = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
|
|
17
|
+
export interface PlaidLinkSuccessMetadata {
|
|
18
|
+
institution?: {
|
|
19
|
+
institution_id?: string | null;
|
|
20
|
+
name?: string | null;
|
|
21
|
+
} | null;
|
|
22
|
+
}
|
|
23
|
+
export interface PlaidLinkExitError {
|
|
24
|
+
error_code?: string;
|
|
25
|
+
error_message?: string;
|
|
26
|
+
display_message?: string | null;
|
|
27
|
+
}
|
|
28
|
+
interface PlaidLinkHandler {
|
|
29
|
+
open: () => void;
|
|
30
|
+
exit: (options?: {
|
|
31
|
+
force?: boolean;
|
|
32
|
+
}) => void;
|
|
33
|
+
destroy: () => void;
|
|
34
|
+
}
|
|
35
|
+
interface PlaidLinkCreateOptions {
|
|
36
|
+
token: string;
|
|
37
|
+
onSuccess: (publicToken: string, metadata: PlaidLinkSuccessMetadata) => void;
|
|
38
|
+
onExit?: (error: PlaidLinkExitError | null) => void;
|
|
39
|
+
}
|
|
40
|
+
interface PlaidGlobal {
|
|
41
|
+
create: (options: PlaidLinkCreateOptions) => PlaidLinkHandler;
|
|
42
|
+
}
|
|
43
|
+
/** Load Plaid Link once per page; concurrent callers share the same promise. */
|
|
44
|
+
export declare function loadPlaidLink(doc?: Document): Promise<PlaidGlobal>;
|
|
45
|
+
export type PlaidLinkOutcome = {
|
|
46
|
+
kind: 'success';
|
|
47
|
+
publicToken: string;
|
|
48
|
+
institutionId: string | null;
|
|
49
|
+
institutionName: string | null;
|
|
50
|
+
} | {
|
|
51
|
+
kind: 'exit';
|
|
52
|
+
message: string | null;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Open Plaid Link for `linkToken` and resolve once the user finishes or
|
|
56
|
+
* leaves. A user closing Link resolves with `kind: 'exit'` (not a rejection);
|
|
57
|
+
* only a failure to load Link itself rejects.
|
|
58
|
+
*/
|
|
59
|
+
export declare function openPlaidLink(linkToken: string, doc?: Document): Promise<PlaidLinkOutcome>;
|
|
60
|
+
/** Test seam: forget a cached loader between tests. */
|
|
61
|
+
export declare function resetPlaidLinkLoader(): void;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=plaidLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plaidLink.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/utils/plaidLink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,qBAAqB,4DAA4D,CAAC;AAE/F,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAC/E;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC7E,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;CACrD;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,gBAAgB,CAAC;CAC/D;AAMD,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,GAAE,QAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuB5E;AAED,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE7C;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,QAAmB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAED,uDAAuD;AACvD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region src/brainyrich/utils/plaidLink.ts
|
|
2
|
+
var e = "https://cdn.plaid.com/link/v2/stable/link-initialize.js", t = null;
|
|
3
|
+
function n(n = document) {
|
|
4
|
+
let r = n.defaultView;
|
|
5
|
+
return r?.Plaid ? Promise.resolve(r.Plaid) : t || (t = new Promise((t, r) => {
|
|
6
|
+
let i = n.createElement("script");
|
|
7
|
+
i.src = e, i.async = !0, i.onload = () => {
|
|
8
|
+
let e = n.defaultView?.Plaid;
|
|
9
|
+
e ? t(e) : r(/* @__PURE__ */ Error("Plaid Link loaded but did not initialise."));
|
|
10
|
+
}, i.onerror = () => r(/* @__PURE__ */ Error("Could not load Plaid Link. Check your connection and try again.")), n.head.appendChild(i);
|
|
11
|
+
}).catch((e) => {
|
|
12
|
+
throw t = null, e;
|
|
13
|
+
}), t);
|
|
14
|
+
}
|
|
15
|
+
async function r(e, t = document) {
|
|
16
|
+
let r = await n(t);
|
|
17
|
+
return new Promise((t) => {
|
|
18
|
+
let n = !1, i = r.create({
|
|
19
|
+
token: e,
|
|
20
|
+
onSuccess: (e, r) => {
|
|
21
|
+
n || (n = !0, i.destroy(), t({
|
|
22
|
+
kind: "success",
|
|
23
|
+
publicToken: e,
|
|
24
|
+
institutionId: r.institution?.institution_id ?? null,
|
|
25
|
+
institutionName: r.institution?.name ?? null
|
|
26
|
+
}));
|
|
27
|
+
},
|
|
28
|
+
onExit: (e) => {
|
|
29
|
+
n || (n = !0, i.destroy(), t({
|
|
30
|
+
kind: "exit",
|
|
31
|
+
message: e?.display_message ?? e?.error_message ?? null
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
i.open();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { r as openPlaidLink };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=plaidLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plaidLink.js","names":[],"sources":["../../../src/brainyrich/utils/plaidLink.ts"],"sourcesContent":["/**\n * Plaid Link loader (BOFF-4234).\n *\n * Plaid requires Link to be loaded from its own CDN (it is not distributed as\n * an npm bundle that may be self-hosted), so the script is injected once, on\n * demand, the first time a user starts linking an institution. Nothing is\n * loaded for users who never click \"Link an institution\".\n *\n * The flow this wraps:\n * 1. the backend mints a short-lived `link_token` (`braCreatePlaidLinkToken`)\n * 2. Plaid Link runs the bank's own consent + login screens in its iframe —\n * bank credentials never touch BrainyRich\n * 3. on success Plaid hands back a one-time `public_token`, which the\n * backend exchanges server-side (`braExchangePlaidPublicToken`)\n */\n\nexport const PLAID_LINK_SCRIPT_URL = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';\n\nexport interface PlaidLinkSuccessMetadata {\n institution?: { institution_id?: string | null; name?: string | null } | null;\n}\n\nexport interface PlaidLinkExitError {\n error_code?: string;\n error_message?: string;\n display_message?: string | null;\n}\n\ninterface PlaidLinkHandler {\n open: () => void;\n exit: (options?: { force?: boolean }) => void;\n destroy: () => void;\n}\n\ninterface PlaidLinkCreateOptions {\n token: string;\n onSuccess: (publicToken: string, metadata: PlaidLinkSuccessMetadata) => void;\n onExit?: (error: PlaidLinkExitError | null) => void;\n}\n\ninterface PlaidGlobal {\n create: (options: PlaidLinkCreateOptions) => PlaidLinkHandler;\n}\n\ntype WindowWithPlaid = Window & { Plaid?: PlaidGlobal };\n\nlet loader: Promise<PlaidGlobal> | null = null;\n\n/** Load Plaid Link once per page; concurrent callers share the same promise. */\nexport function loadPlaidLink(doc: Document = document): Promise<PlaidGlobal> {\n const win = doc.defaultView as WindowWithPlaid | null;\n if (win?.Plaid) return Promise.resolve(win.Plaid);\n if (loader) return loader;\n\n loader = new Promise<PlaidGlobal>((resolve, reject) => {\n const script = doc.createElement('script');\n script.src = PLAID_LINK_SCRIPT_URL;\n script.async = true;\n script.onload = () => {\n const plaid = (doc.defaultView as WindowWithPlaid | null)?.Plaid;\n if (plaid) resolve(plaid);\n else reject(new Error('Plaid Link loaded but did not initialise.'));\n };\n script.onerror = () =>\n reject(new Error('Could not load Plaid Link. Check your connection and try again.'));\n doc.head.appendChild(script);\n }).catch((err: unknown) => {\n // Allow a retry after a failed load (e.g. a transient network error).\n loader = null;\n throw err;\n });\n return loader;\n}\n\nexport type PlaidLinkOutcome =\n | {\n kind: 'success';\n publicToken: string;\n institutionId: string | null;\n institutionName: string | null;\n }\n | { kind: 'exit'; message: string | null };\n\n/**\n * Open Plaid Link for `linkToken` and resolve once the user finishes or\n * leaves. A user closing Link resolves with `kind: 'exit'` (not a rejection);\n * only a failure to load Link itself rejects.\n */\nexport async function openPlaidLink(\n linkToken: string,\n doc: Document = document\n): Promise<PlaidLinkOutcome> {\n const plaid = await loadPlaidLink(doc);\n return new Promise<PlaidLinkOutcome>((resolve) => {\n let settled = false;\n const handler = plaid.create({\n token: linkToken,\n onSuccess: (publicToken, metadata) => {\n if (settled) return;\n settled = true;\n handler.destroy();\n resolve({\n kind: 'success',\n publicToken,\n institutionId: metadata.institution?.institution_id ?? null,\n institutionName: metadata.institution?.name ?? null,\n });\n },\n onExit: (error) => {\n if (settled) return;\n settled = true;\n handler.destroy();\n resolve({ kind: 'exit', message: error?.display_message ?? error?.error_message ?? null });\n },\n });\n handler.open();\n });\n}\n\n/** Test seam: forget a cached loader between tests. */\nexport function resetPlaidLinkLoader(): void {\n loader = null;\n}\n"],"mappings":";AAgBA,IAAa,IAAwB,2DA8BjC,IAAsC;AAG1C,SAAgB,EAAc,IAAgB,UAAgC;CAC5E,IAAM,IAAM,EAAI;CAqBhB,OApBI,GAAK,QAAc,QAAQ,QAAQ,EAAI,KAAK,IAC5C,MAEJ,IAAS,IAAI,SAAsB,GAAS,MAAW;EACrD,IAAM,IAAS,EAAI,cAAc,QAAQ;EAUzC,AATA,EAAO,MAAM,GACb,EAAO,QAAQ,IACf,EAAO,eAAe;GACpB,IAAM,IAAS,EAAI,aAAwC;GAC3D,AAAI,IAAO,EAAQ,CAAK,IACnB,EAAO,gBAAI,MAAM,2CAA2C,CAAC;EACpE,GACA,EAAO,gBACL,EAAO,gBAAI,MAAM,iEAAiE,CAAC,GACrF,EAAI,KAAK,YAAY,CAAM;CAC7B,CAAC,EAAE,OAAO,MAAiB;EAGzB,MADA,IAAS,MACH;CACR,CAAC,GACM;AACT;AAgBA,eAAsB,EACpB,GACA,IAAgB,UACW;CAC3B,IAAM,IAAQ,MAAM,EAAc,CAAG;CACrC,OAAO,IAAI,SAA2B,MAAY;EAChD,IAAI,IAAU,IACR,IAAU,EAAM,OAAO;GAC3B,OAAO;GACP,YAAY,GAAa,MAAa;IAChC,MACJ,IAAU,IACV,EAAQ,QAAQ,GAChB,EAAQ;KACN,MAAM;KACN;KACA,eAAe,EAAS,aAAa,kBAAkB;KACvD,iBAAiB,EAAS,aAAa,QAAQ;IACjD,CAAC;GACH;GACA,SAAS,MAAU;IACb,MACJ,IAAU,IACV,EAAQ,QAAQ,GAChB,EAAQ;KAAE,MAAM;KAAQ,SAAS,GAAO,mBAAmB,GAAO,iBAAiB;IAAK,CAAC;GAC3F;EACF,CAAC;EACD,EAAQ,KAAK;CACf,CAAC;AACH"}
|