@oatfi/ui 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +177 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +111 -8
- package/dist/index.esm.js +173 -4
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/theme/defaultTheme.ts","../src/theme/mergeBranding.ts","../src/theme/muiTheme.ts","../src/theme/ThemeProvider.tsx","../src/theme/useTheme.ts","../src/styles/inputs.ts","../src/styles/layout.ts","../src/styles/forms.ts","../src/components/TextInput.tsx","../src/components/EmailInput.tsx","../src/components/PhoneInput.tsx","../src/components/SSNInput.tsx","../src/components/TaxIdInput.tsx","../src/components/CurrencyInput.tsx","../src/components/DateInput.tsx","../src/components/DropDown.tsx","../src/components/SearchDropdown.tsx","../src/utils/formatFileSize.ts","../src/components/FileInput.tsx","../src/components/RadioInput.tsx","../src/components/CheckboxInput.tsx","../src/components/Stepper.tsx","../src/components/Tabs.tsx","../src/components/Loader.tsx","../src/components/Footnote.tsx","../src/components/DotsMenu.tsx","../src/components/AsteriskNote.tsx","../src/components/Badge.tsx","../src/components/UploadZone.tsx","../src/components/CollapsibleSource.tsx","../src/components/PlaidTile.tsx","../src/components/TermsDocument.tsx","../src/components/UnderwritingStatus.tsx","../src/components/paymentMethodStyles.ts","../src/components/PlaidMethodCard.tsx","../src/components/ManualMethodCard.tsx","../src/components/AchVerificationConsent.tsx","../src/preview/Preview.tsx"],"sourcesContent":["import type { Theme } from './types';\n\n/**\n * The default OatFi theme. Ported from the embeds' `theme/types.js`, using the\n * more complete shape (with `colors.default`) from `mf-remote-react`, extended\n * with `buttonPrimary` / `buttonSecondary` so partner button colors have a home.\n *\n * `buttonPrimary` / `buttonSecondary` default to `primary` / `secondary` here so\n * an unbranded theme renders identically to the original embeds.\n */\nexport const defaultTheme: Theme = {\n colors: {\n primary: '#111827',\n secondary: '#6B7280',\n accent: '#2563EB',\n background: '#FFFFFF',\n surface: '#F3F4F6',\n border: '#E5E7EB',\n success: '#10B981',\n default: '#6B7280',\n warning: '#F59E42',\n error: '#EF4444',\n buttonPrimary: '#111827',\n buttonSecondary: '#6B7280',\n },\n border: {\n radius: '8px',\n width: '1px',\n color: '#E5E7EB',\n },\n typography: {\n fontFamily: '\"Geist\", \"Geist Sans\", Arial, sans-serif',\n },\n};\n","import { defaultTheme } from './defaultTheme';\nimport type { Branding, Theme } from './types';\n\nconst toPx = (value: number): string => `${value}px`;\n\n/**\n * Map partner `Branding` onto the full internal `Theme`.\n *\n * Pure and total: any missing field falls back to `defaultTheme`. Note that\n * `colors.primary` / `colors.secondary` are NOT partner-configurable — they\n * stay at the theme defaults; only the button colors, border, and font can be\n * branded.\n */\nexport function mergeBranding(branding?: Branding): Theme {\n const b = branding ?? {};\n\n return {\n ...defaultTheme,\n colors: {\n ...defaultTheme.colors,\n buttonPrimary: b.primaryButtonColor ?? defaultTheme.colors.buttonPrimary,\n buttonSecondary: b.secondaryButtonColor ?? defaultTheme.colors.buttonSecondary,\n },\n border: {\n ...defaultTheme.border,\n radius: b.borderRadius != null ? toPx(b.borderRadius) : defaultTheme.border.radius,\n width: b.borderWidth != null ? toPx(b.borderWidth) : defaultTheme.border.width,\n },\n typography: {\n ...defaultTheme.typography,\n fontFamily: b.fontFamily ?? defaultTheme.typography.fontFamily,\n },\n };\n}\n","import { createTheme, type Theme as MuiTheme } from '@mui/material/styles';\nimport type { Theme } from './types';\n\n/**\n * Build a MUI theme from our internal `Theme` so MUI-based primitives read the\n * same tokens as styled-components ones. Ported from the embeds'\n * `MuiThemeProvider.js`, typed and driven by the merged theme.\n */\nexport function buildMuiTheme(theme: Theme): MuiTheme {\n const { colors, border, typography } = theme;\n\n return createTheme({\n palette: {\n primary: {\n main: colors.accent,\n contrastText: colors.background,\n },\n secondary: {\n main: colors.secondary,\n },\n error: {\n main: colors.error,\n },\n warning: {\n main: colors.warning,\n },\n success: {\n main: colors.success,\n },\n background: {\n default: colors.background,\n paper: colors.surface,\n },\n text: {\n primary: colors.primary,\n secondary: colors.secondary,\n },\n },\n typography: {\n fontFamily: typography.fontFamily,\n fontSize: 14,\n },\n shape: {\n borderRadius: parseInt(border.radius, 10),\n },\n components: {\n MuiFormControlLabel: {\n styleOverrides: {\n label: {\n fontSize: '12px',\n fontWeight: 400,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundColor: colors.background,\n border: `${border.width} solid ${border.color}`,\n },\n },\n defaultProps: {\n elevation: 0,\n },\n },\n MuiLink: {\n styleOverrides: {\n root: {\n cursor: 'pointer',\n fontSize: '16px',\n fontWeight: 600,\n fontFamily: typography.fontFamily,\n },\n },\n },\n MuiTextField: {\n styleOverrides: {\n root: {\n '& .MuiOutlinedInput-root': {\n '& fieldset': {\n borderColor: border.color,\n borderWidth: border.width,\n },\n '&:hover fieldset': {\n borderColor: colors.accent,\n },\n '&.Mui-focused fieldset': {\n borderColor: colors.accent,\n },\n '&.Mui-error fieldset': {\n borderColor: colors.error,\n },\n },\n '& .MuiInputLabel-root, & .MuiFormLabel-root, & .MuiInputLabel-formControl': {\n color: colors.secondary,\n fontSize: '14px',\n '&.Mui-focused': {\n color: colors.accent,\n },\n '&.Mui-error': {\n color: colors.error,\n },\n },\n '& .MuiInputBase-input': {\n fontSize: 14,\n color: colors.primary,\n '&::placeholder': {\n color: colors.secondary,\n opacity: 1,\n },\n },\n },\n },\n },\n MuiSelect: {\n styleOverrides: {\n select: {\n fontSize: 14,\n },\n },\n },\n MuiInputBase: {\n styleOverrides: {\n root: {\n fontSize: 14,\n '& input[type=\"date\"]::-webkit-calendar-picker-indicator': {\n display: 'none',\n },\n '& .Mui-error': {\n color: colors.error,\n },\n '& input[type=\"date\"]::-webkit-inner-spin-button': {\n display: 'none',\n },\n '& input[type=\"date\"]::-webkit-clear-button': {\n display: 'none',\n },\n },\n },\n },\n MuiFormControl: {\n styleOverrides: {\n root: {\n '& input::-webkit-datetime-edit': {\n color: colors.secondary,\n },\n '& .Mui-error': {\n input: {\n color: colors.error,\n },\n label: {\n color: colors.error,\n },\n },\n },\n },\n },\n },\n });\n}\n","import React, { useMemo } from 'react';\nimport { ThemeProvider as MuiThemeProviderBase } from '@mui/material/styles';\nimport { ThemeProvider as StyledThemeProvider, createGlobalStyle } from 'styled-components';\nimport { mergeBranding } from './mergeBranding';\nimport { buildMuiTheme } from './muiTheme';\nimport type { Branding } from './types';\n\nconst GlobalStyle = createGlobalStyle`\n * {\n font-family: ${({ theme }) => theme.typography.fontFamily};\n box-sizing: border-box;\n }\n`;\n\nexport interface ThemeProviderProps {\n /**\n * Partner branding overrides. Any omitted field falls back to `defaultTheme`.\n * Omit entirely to render with the default OatFi theme.\n */\n branding?: Branding;\n children?: React.ReactNode;\n}\n\n/**\n * Single theming entry point for @oatfi/ui consumers.\n *\n * Resolves `branding` into the full internal `Theme` and provides it through\n * BOTH styled-components and MUI, so a primitive built on either gets identical\n * tokens. Context cannot cross the embed loader's script boundary, so this is\n * mounted *inside* each consumer's React root.\n */\nexport function ThemeProvider({ branding, children }: ThemeProviderProps) {\n const theme = useMemo(() => mergeBranding(branding), [branding]);\n const muiTheme = useMemo(() => buildMuiTheme(theme), [theme]);\n\n return (\n <StyledThemeProvider theme={theme}>\n <GlobalStyle />\n <MuiThemeProviderBase theme={muiTheme}>{children}</MuiThemeProviderBase>\n </StyledThemeProvider>\n );\n}\n","import { useTheme as useStyledTheme } from 'styled-components';\nimport type { Theme } from './types';\n\n/**\n * Read the resolved @oatfi/ui theme. Typed re-export of styled-components'\n * `useTheme` (typing comes from the `DefaultTheme` augmentation in `styled.d.ts`).\n */\nexport const useTheme = (): Theme => useStyledTheme();\n","import styled from 'styled-components';\n\n/**\n * Input style bases, ported from\n * `onboarding-flow-general/src/components/globals/shared/InputStyles.js`.\n *\n * The dropdown chevron SVG fill was a hardcoded `#6B7280`; it now reads from\n * `theme.colors.default` (whose default value is `#6B7280`, so unbranded\n * appearance is unchanged) and is URL-encoded into the `data:` URI.\n */\n\nconst chevronDataUri = (color: string): string =>\n `data:image/svg+xml;utf8,<svg fill=\"${encodeURIComponent(\n color,\n )}\" height=\"20\" viewBox=\"0 0 20 20\" width=\"20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.293 7.293a1 1 0 011.414 0L10 8.586l1.293-1.293a1 1 0 111.414 1.414l-2 2a1 1 0 01-1.414 0l-2-2a1 1 0 010-1.414z\"/></svg>`;\n\nexport const InputWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 5px;\n width: 100%;\n\n span.icon {\n position: absolute;\n right: 1rem;\n top: 51%;\n display: flex;\n align-items: center;\n cursor: pointer;\n z-index: 1;\n }\n\n &.Werror span.icon {\n top: 42%;\n }\n`;\n\nexport const InputLabel = styled.label`\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n font-weight: 500;\n margin-bottom: 4px;\n`;\n\nexport const InputError = styled.span`\n color: ${({ theme }) => theme.colors.error};\n font-size: 12px;\n font-weight: 500;\n margin-top: -4px;\n padding-left: 5px;\n`;\n\nexport const BaseInput = styled.input`\n display: flex;\n padding: 9px;\n border: ${({ theme }) => theme.border.width} solid ${({ theme }) => theme.border.color};\n border-radius: ${({ theme }) => theme.border.radius};\n background: ${({ theme }) => theme.colors.background};\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n font-family: ${({ theme }) => theme.typography.fontFamily};\n outline: none;\n transition: border-color 0.2s;\n\n &[type='date'] {\n &::-webkit-calendar-picker-indicator {\n opacity: 0;\n pointer-events: none;\n }\n &::-moz-calendar-picker-indicator {\n opacity: 0;\n pointer-events: none;\n }\n &::-ms-input-placeholder {\n opacity: 0;\n pointer-events: none;\n }\n }\n\n &:focus {\n border-color: ${({ theme }) => theme.colors.accent};\n }\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.secondary};\n opacity: 1;\n }\n\n &.error {\n border-color: ${({ theme }) => theme.colors.error};\n color: ${({ theme }) => theme.colors.error};\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.error};\n opacity: 1;\n }\n }\n`;\n\nexport const SelectInput = styled(BaseInput)`\n appearance: none;\n background-image: url('${({ theme }) => chevronDataUri(theme.colors.default)}');\n background-repeat: no-repeat;\n background-position: right 12px center;\n background-size: 20px 20px;\n`;\n\nexport const DropdownContainer = styled.div`\n position: relative;\n width: 100%;\n`;\n\nexport const AutocompleteInput = styled(BaseInput)`\n cursor: pointer;\n background-image: url('${({ theme }) => chevronDataUri(theme.colors.default)}');\n background-repeat: no-repeat;\n background-position: right 12px center;\n background-size: 20px 20px;\n width: 100%;\n`;\n\nexport const DropdownList = styled.div<{ $isOpen?: boolean }>`\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n max-height: 200px;\n overflow-y: auto;\n background: ${({ theme }) => theme.colors.background};\n border: ${({ theme }) => theme.border.width} solid ${({ theme }) => theme.border.color};\n border-top: none;\n border-radius: 0 0 ${({ theme }) => theme.border.radius} ${({ theme }) => theme.border.radius};\n z-index: 1000;\n display: ${({ $isOpen }) => ($isOpen ? 'block' : 'none')};\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n`;\n\nexport const DropdownItem = styled.div<{ $isSelected?: boolean }>`\n padding: 8px 12px;\n cursor: pointer;\n background: ${({ $isSelected, theme }) => ($isSelected ? theme.colors.accent + '20' : 'transparent')};\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n border-bottom: 1px solid ${({ theme }) => theme.border.color};\n\n &:hover {\n background: ${({ theme }) => theme.colors.accent + '10'};\n }\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nexport const NoResults = styled.div`\n padding: 12px;\n text-align: center;\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 14px;\n`;\n","import styled from 'styled-components';\n\n/**\n * Layout, typography, and button style bases, ported from\n * `onboarding-flow-general/src/components/globals/shared/General.js`.\n *\n * The Button hover (`${theme.colors.primary}CC`) and `Body*` link colors\n * (`theme.colors.primary`) already read from the theme in the source — the\n * `#0e0e0e` / `#0000FF` literals the rollout plan flagged were from an older\n * revision and are not present here.\n */\n\nexport const H3 = styled.h3`\n font-size: 18px;\n font-weight: 500;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const H2 = styled.h2`\n font-size: 24px;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const H1 = styled.h1`\n font-size: 32px;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const Body100 = styled.p`\n font-size: 12px;\n font-weight: 400;\n text-align: justify;\n color: ${({ color, theme }) => (color === 'secondary' ? theme.colors.secondary : theme.colors.primary)};\n a {\n font-size: 12px;\n color: ${({ theme }) => theme.colors.primary};\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n }\n &.bold {\n font-weight: 600;\n }\n span {\n font-weight: 400;\n }\n`;\n\nexport const Body200 = styled.p`\n font-size: 14px;\n font-weight: 400;\n text-align: justify;\n color: ${({ color, theme }) => (color === 'secondary' ? theme.colors.secondary : theme.colors.primary)};\n a {\n font-size: 14px;\n color: ${({ theme }) => theme.colors.primary};\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n }\n &.bold {\n font-weight: 600;\n }\n span {\n font-weight: 400;\n }\n`;\n\nexport const Body400 = styled.p`\n font-size: 11px;\n font-weight: 400;\n text-align: justify;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const Container = styled.div`\n padding: 2rem;\n border-radius: ${({ theme }) => theme.border.radius};\n background-color: ${({ theme }) => theme.colors.background};\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n max-width: 1000px;\n margin: 0 auto;\n`;\n\nexport const Content = styled.div`\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 1rem;\n &.space-between {\n justify-content: space-between;\n }\n`;\n\nexport const Button = styled.button`\n align-items: center;\n background-color: ${({ theme }) => theme.colors.buttonPrimary};\n border: none;\n border-radius: ${({ theme }) => theme.border.radius};\n color: ${({ theme }) => theme.colors.background};\n cursor: pointer;\n display: flex;\n font-size: 14px;\n gap: 0.25rem;\n justify-content: center;\n margin-top: 1rem;\n padding: 0.75rem 1.5rem;\n transition: background-color 0.2s ease;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.35;\n }\n\n &:hover {\n background-color: ${({ theme }) => `${theme.colors.buttonPrimary}CC`};\n }\n\n &.secondary {\n background-color: ${({ theme }) => theme.colors.background};\n color: ${({ theme }) => theme.colors.buttonSecondary};\n border: 1px solid ${({ theme }) => theme.colors.buttonSecondary};\n &:hover {\n background-color: ${({ theme }) => `${theme.colors.buttonSecondary}10`};\n }\n }\n\n &.dashed {\n background-color: transparent;\n color: ${({ theme }) => theme.colors.secondary};\n border: 1px dashed ${({ theme }) => theme.colors.border};\n &:hover {\n background-color: ${({ theme }) => theme.colors.surface};\n border-color: ${({ theme }) => theme.colors.secondary};\n color: ${({ theme }) => theme.colors.primary};\n }\n }\n\n &.link {\n background-color: transparent;\n color: ${({ theme }) => theme.colors.accent};\n border: none;\n cursor: pointer;\n margin: 0;\n }\n &.link:hover {\n color: ${({ theme }) => theme.colors.accent};\n text-decoration: underline;\n }\n &.no-padding {\n padding: 0;\n }\n`;\n\nexport const FlexRowWrapper = styled.div`\n display: flex;\n flex-direction: row;\n .flex-row-item {\n flex: 1;\n }\n`;\n\nexport const FlexColumnWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 10px;\n`;\n\nexport const DetailsContainer = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 5px;\n justify-content: space-between;\n button {\n color: ${({ theme }) => theme.colors.primary};\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n }\n`;\n\nexport const DetailRow = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`;\n\nexport const DetailElement = styled.div`\n flex: 1;\n p {\n margin: 5px 0 0 0;\n }\n`;\n\nexport const TermsList = styled.ul`\n list-style-type: disc;\n padding-left: 20px;\n p {\n margin: 0;\n }\n`;\n\nexport const StatusTag = styled.div`\n padding: 4px 8px;\n border-radius: 4px;\n color: ${({ theme }) => theme.colors.background};\n display: flex;\n flex-direction: row;\n align-items: center;\n text-transform: capitalize;\n &.small {\n font-size: 10px;\n padding: 2px 4px;\n }\n &.success {\n background-color: ${({ theme }) => theme.colors.success};\n }\n &.error {\n background-color: ${({ theme }) => theme.colors.error};\n }\n &.warning {\n background-color: ${({ theme }) => theme.colors.warning};\n }\n`;\n","import styled from 'styled-components';\n\n/**\n * Form layout style bases, ported from\n * `onboarding-flow-general/src/components/globals/shared/FormStyles.js`.\n *\n * The source's `Body100` is intentionally NOT re-exported here — the richer\n * `Body100` from `layout.ts` (with `color` prop + link styling) is the single\n * canonical version.\n */\n\nexport const Form = styled.form`\n max-width: 1000px;\n margin: 0 auto;\n`;\n\nexport const FormTitle = styled.h2`\n font-size: 1.5rem;\n font-weight: 600;\n margin-bottom: 2rem;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const FormSubtitle = styled.h3`\n font-size: 14px;\n font-weight: 500;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const FormRow = styled.div`\n display: flex;\n gap: 1rem;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const FormColumn = styled.div`\n flex: 1;\n min-width: 200px;\n`;\n\nexport const FormCheckboxLabel = styled.label`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n color: ${({ theme }) => theme.colors.primary};\n font-size: 0.875rem;\n\n input[type='checkbox'] {\n margin: 0;\n }\n`;\n\nexport const FormActions = styled.div`\n margin-top: 2rem;\n display: flex;\n justify-content: flex-end;\n`;\n","import React from 'react';\nimport { TextField } from '@mui/material';\n\nexport interface TextInputProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n type?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n /** Native `name` on the underlying input (form semantics + by-name selectors). */\n name?: string;\n /** Rendered as `data-testid` on the input element for e2e selection. */\n testId?: string;\n /** For `type=\"number\"`: maximum numeric value. Otherwise: maximum input length. */\n max?: number;\n /** Strip numeric characters as the user types. */\n ignoreNumbers?: boolean;\n /** Strip non-numeric characters as the user types. */\n onlyNumbers?: boolean;\n}\n\n/**\n * Text field built on MUI `TextField`. Presentational: emits the raw string\n * value via `onChange`. Ported from `onboarding-flow-general` (MUI v7\n * `slotProps` replace the deprecated `inputProps`); `disabled` is new.\n */\nexport function TextInput({\n label,\n error,\n value,\n onChange,\n placeholder,\n type = 'text',\n required = false,\n disabled = false,\n className,\n name,\n testId,\n max,\n ignoreNumbers = false,\n onlyNumbers = false,\n}: TextInputProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n let newValue = e.target.value;\n\n if (ignoreNumbers) {\n newValue = newValue.replace(/[0-9]/g, '');\n }\n\n if (onlyNumbers) {\n newValue = newValue.replace(/[^0-9]/g, '');\n }\n\n if (type === 'number' && max !== undefined && newValue !== '') {\n const numericValue = parseFloat(newValue);\n if (!isNaN(numericValue) && numericValue > max) {\n return; // Don't update if value exceeds max\n }\n }\n\n onChange(newValue);\n };\n\n return (\n <TextField\n label={label}\n value={value}\n onChange={handleChange}\n placeholder={placeholder}\n type={type}\n required={required}\n disabled={disabled}\n className={className}\n name={name}\n error={!!error}\n helperText={error}\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n slotProps={{\n htmlInput: {\n ...(type === 'number' ? { max } : { maxLength: max }),\n 'data-testid': testId,\n },\n }}\n />\n );\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface EmailInputProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\n/** Email field — a `TextInput` pinned to `type=\"email\"`. */\nexport function EmailInput({ placeholder = 'Enter email address', ...props }: EmailInputProps) {\n return <TextInput {...props} type=\"email\" placeholder={placeholder} />;\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface PhoneInputProps {\n label?: string;\n error?: string;\n /** Raw digits (up to 10). Displayed masked as `(XXX) XXX-XXXX`. */\n value: string;\n onChange: (rawValue: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst formatPhoneNumber = (value: string): string => {\n if (!value) return '';\n const phoneNumber = value.replace(/\\D/g, '');\n if (phoneNumber.length <= 3) {\n return phoneNumber;\n } else if (phoneNumber.length <= 6) {\n return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(3)}`;\n }\n return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(3, 6)}-${phoneNumber.slice(6, 10)}`;\n};\n\n/** US phone field. Masks display as `(XXX) XXX-XXXX`; emits raw digits. */\nexport function PhoneInput({\n placeholder = '(XXX) XXX-XXXX',\n value,\n onChange,\n ...props\n}: PhoneInputProps) {\n const handleChange = (maskedValue: string) => {\n onChange(maskedValue.replace(/\\D/g, '').slice(0, 10));\n };\n\n return (\n <TextInput\n {...props}\n value={formatPhoneNumber(value)}\n onChange={handleChange}\n placeholder={placeholder}\n max={14}\n />\n );\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface SSNInputProps {\n label?: string;\n error?: string;\n /** Raw value; displayed masked as `XXX-XX-XXXX`. */\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst formatDisplayValue = (rawValue: string): string => {\n if (!rawValue) return '';\n const digits = rawValue.replace(/[^\\d]/g, '');\n if (digits.length <= 3) return digits;\n if (digits.length <= 5) return `${digits.slice(0, 3)}-${digits.slice(3)}`;\n return `${digits.slice(0, 3)}-${digits.slice(3, 5)}-${digits.slice(5, 9)}`;\n};\n\n/** SSN field. Masks display as `XXX-XX-XXXX`; emits the masked value. */\nexport function SSNInput({\n placeholder = 'XXX-XX-XXXX',\n value,\n onChange,\n ...props\n}: SSNInputProps) {\n return (\n <TextInput\n {...props}\n value={formatDisplayValue(value)}\n onChange={onChange}\n placeholder={placeholder}\n max={11}\n />\n );\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface TaxIdInputProps {\n label?: string;\n error?: string;\n /** Raw value; displayed masked as `XX-XXXXXXX` (EIN). */\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst formatDisplayValue = (rawValue: string): string => {\n if (!rawValue) return '';\n const digits = rawValue.replace(/[^\\d]/g, '');\n if (digits.length <= 2) return digits;\n if (digits.length <= 9) return `${digits.slice(0, 2)}-${digits.slice(2)}`;\n return `${digits.slice(0, 2)}-${digits.slice(2, 9)}`;\n};\n\n/** EIN / Tax ID field. Masks display as `XX-XXXXXXX`; emits the masked value. */\nexport function TaxIdInput({\n placeholder = 'XX-XXXXXXX',\n value,\n onChange,\n ...props\n}: TaxIdInputProps) {\n return (\n <TextInput\n {...props}\n value={formatDisplayValue(value)}\n onChange={onChange}\n placeholder={placeholder}\n max={10}\n />\n );\n}\n","import React, { useId } from 'react';\nimport styled from 'styled-components';\nimport { BaseInput, InputError, InputLabel, InputWrapper } from '../styles/inputs';\n\nexport interface CurrencyInputProps {\n label?: string;\n /** Raw numeric string (no `$`/commas); displayed with thousand separators. */\n value: string;\n onChange: (rawValue: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n error?: string;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst CurrencyInputWrapper = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst CurrencyPrefix = styled.span<{ $hasError?: boolean }>`\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: ${({ theme, $hasError }) => ($hasError ? theme.colors.error : theme.colors.primary)};\n font-size: 14px;\n font-family: ${({ theme }) => theme.typography.fontFamily};\n pointer-events: none;\n z-index: 1;\n`;\n\nconst StyledBaseInput = styled(BaseInput)`\n padding-left: calc(15px + 1ch);\n width: 100%;\n`;\n\nconst formatDisplayValue = (rawValue: string): string => {\n if (!rawValue || rawValue === '') return '';\n\n const numericValue = rawValue.toString().replace(/[^\\d.]/g, '');\n if (numericValue === '' || numericValue === '.') return '';\n\n const parts = numericValue.split('.');\n const integerPart = parts[0] || '';\n const decimalPart = parts[1] || '';\n\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n const formattedDecimal = decimalPart.slice(0, 2);\n\n if (formattedDecimal) {\n return `${formattedInteger}.${formattedDecimal}`;\n } else if (numericValue.includes('.')) {\n return `${formattedInteger}.`;\n }\n return `${formattedInteger}`;\n};\n\nconst extractRawValue = (formattedValue: string): string => {\n if (!formattedValue) return '';\n const raw = formattedValue.replace(/[^\\d.]/g, '');\n const parts = raw.split('.');\n if (parts.length > 2) {\n return parts[0] + '.' + parts.slice(1).join('');\n }\n return raw;\n};\n\n/**\n * Currency field with a `$` prefix and thousand separators. Built on the shared\n * `BaseInput` style; emits the raw numeric string via `onChange`.\n */\nexport function CurrencyInput({\n label,\n value,\n onChange,\n placeholder,\n required,\n disabled,\n error,\n className,\n name,\n testId,\n}: CurrencyInputProps) {\n const reactId = useId();\n const inputId = `${reactId}-input`;\n const errorId = `${reactId}-error`;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(extractRawValue(e.target.value));\n };\n\n return (\n <InputWrapper className={className}>\n {label && <InputLabel htmlFor={inputId}>{label}</InputLabel>}\n <CurrencyInputWrapper>\n <CurrencyPrefix $hasError={!!error}>$</CurrencyPrefix>\n <StyledBaseInput\n id={inputId}\n name={name}\n type=\"text\"\n value={formatDisplayValue(value || '')}\n onChange={handleChange}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n className={error ? 'error' : ''}\n aria-invalid={!!error}\n aria-describedby={error ? errorId : undefined}\n data-testid={testId}\n />\n </CurrencyInputWrapper>\n {error && <InputError id={errorId}>{error}</InputError>}\n </InputWrapper>\n );\n}\n","import React, { useRef } from 'react';\nimport { IconButton, InputAdornment, TextField } from '@mui/material';\nimport CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\n\nexport interface DateInputProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n /** ISO date string (`YYYY-MM-DD`) bounds. */\n min?: string;\n max?: string;\n}\n\n/**\n * Native date field (MUI `TextField type=\"date\"`) with a calendar-icon trigger.\n * Ported from `onboarding-flow-general`; the `react-feather` icon is replaced\n * by `@mui/icons-material` (a peer dep) and `inputProps`/`InputProps` by\n * MUI v7 `slotProps`.\n */\nexport function DateInput({\n label,\n error,\n value,\n onChange,\n required = false,\n disabled = false,\n className,\n name,\n testId,\n min,\n max,\n}: DateInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleIconClick = () => {\n const input = inputRef.current;\n if (!input) return;\n if (typeof input.showPicker === 'function') {\n input.showPicker();\n } else {\n input.focus();\n }\n };\n\n return (\n <TextField\n label={label}\n value={value}\n onChange={e => onChange(e.target.value)}\n type=\"date\"\n required={required}\n disabled={disabled}\n className={className}\n name={name}\n error={!!error}\n helperText={error}\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n inputRef={inputRef}\n slotProps={{\n inputLabel: { shrink: true },\n htmlInput: { min, max, 'data-testid': testId },\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={handleIconClick}\n edge=\"end\"\n aria-label=\"Open date picker\"\n size=\"small\"\n disabled={disabled}\n >\n <CalendarMonthIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n />\n );\n}\n","import React, { useId } from 'react';\nimport {\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n Select,\n type SelectChangeEvent,\n} from '@mui/material';\nimport type { Option } from './types';\n\nexport interface DropDownProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n options?: Option[];\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\n/** Single-select dropdown built on MUI `Select`. */\nexport function DropDown({\n label,\n error,\n value,\n onChange,\n options = [],\n required = false,\n disabled = false,\n className,\n name,\n testId,\n}: DropDownProps) {\n const reactId = useId();\n const labelId = `${reactId}-label`;\n const selectId = `${reactId}-select`;\n\n // SelectDisplayProps is typed as HTMLAttributes, which omits `data-*`; widen it.\n const selectDisplayProps: React.HTMLAttributes<HTMLDivElement> & { 'data-testid'?: string } = {\n 'data-testid': testId,\n };\n\n const handleChange = (event: SelectChangeEvent) => {\n onChange(event.target.value);\n };\n\n return (\n <FormControl\n fullWidth\n error={!!error}\n required={required}\n disabled={disabled}\n className={className}\n size=\"small\"\n >\n {label && (\n <InputLabel id={labelId} sx={{ fontSize: '14px' }}>\n {label}\n </InputLabel>\n )}\n <Select\n labelId={label ? labelId : undefined}\n id={selectId}\n name={name}\n value={value || ''}\n onChange={handleChange}\n label={label}\n variant=\"outlined\"\n SelectDisplayProps={selectDisplayProps}\n >\n {options.map((opt, index) => (\n <MenuItem key={opt.value + index} value={opt.value}>\n {opt.label}\n </MenuItem>\n ))}\n </Select>\n {error && <FormHelperText>{error}</FormHelperText>}\n </FormControl>\n );\n}\n","import React from 'react';\nimport { Autocomplete, TextField } from '@mui/material';\nimport type { Option } from './types';\n\nexport interface SearchDropdownProps {\n label?: string;\n error?: string;\n /** Selected `value`(s). A comma-joined string is also accepted in multiple mode. */\n value: string | string[];\n onChange: (value: string | string[]) => void;\n options: Option[];\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n multiple?: boolean;\n noResultsMessage?: string;\n name?: string;\n testId?: string;\n}\n\n/** Searchable single/multi select built on MUI `Autocomplete`. */\nexport function SearchDropdown({\n label,\n error,\n value,\n onChange,\n options,\n placeholder = 'Search...',\n required = false,\n disabled = false,\n className,\n multiple = false,\n noResultsMessage = 'No results found',\n name,\n testId,\n}: SearchDropdownProps) {\n const getSelectedOption = (): Option | Option[] | null => {\n if (!value) return multiple ? [] : null;\n if (multiple) {\n const selectedValues = Array.isArray(value) ? value : value.split(',').filter(v => v.trim());\n return options.filter(opt => selectedValues.includes(opt.value));\n }\n const stringValue = Array.isArray(value) ? value[0] : value;\n return options.find(opt => opt.value === stringValue) || null;\n };\n\n const handleChange = (_event: React.SyntheticEvent, newValue: Option | Option[] | null) => {\n if (multiple) {\n onChange(Array.isArray(newValue) ? newValue.map(opt => opt.value) : []);\n } else {\n onChange(newValue && !Array.isArray(newValue) ? newValue.value : '');\n }\n };\n\n return (\n <Autocomplete<Option, boolean, false, false>\n options={options}\n value={getSelectedOption()}\n onChange={handleChange}\n getOptionLabel={option => option.label}\n isOptionEqualToValue={(option, val) => option.value === val.value}\n data-testid={testId}\n renderInput={params => (\n <TextField\n {...params}\n label={label}\n placeholder={placeholder}\n required={required}\n error={!!error}\n helperText={error}\n className={className}\n variant=\"outlined\"\n name={name}\n />\n )}\n noOptionsText={noResultsMessage}\n size=\"small\"\n fullWidth\n multiple={multiple}\n disabled={disabled}\n clearOnBlur={false}\n selectOnFocus\n autoHighlight\n />\n );\n}\n","/**\n * Human-readable byte size, to two decimal places.\n *\n * Shared by `FileInput` and `UploadZone` so the two agree. Note the version that\n * lived in `onboarding-flow-general/src/utils/formatters.js` topped out at `MB`\n * and returned `undefined` as the unit for anything a gigabyte or larger; this\n * one carries `GB`.\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n","import React, { useId, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { InputError, InputLabel } from '../styles/inputs';\nimport { Body200 } from '../styles/layout';\nimport { formatFileSize } from '../utils/formatFileSize';\n\nexport interface FileInputProps {\n label?: string;\n error?: string;\n value?: File | null;\n /** Called with the chosen file (or null) and a validation error (or null). */\n onChange: (file: File | null, error: string | null) => void;\n placeholder?: string;\n /** Comma-separated extension list, e.g. `.png,.jpg,.pdf`. */\n accept?: string;\n /** Max size in bytes. */\n maxSize?: number;\n required?: boolean;\n className?: string;\n showRequirements?: boolean;\n name?: string;\n testId?: string;\n}\n\nconst FileInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`;\n\nconst FileInputWrapper = styled.div<{ $hasError?: boolean; $dragOver?: boolean }>`\n position: relative;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: border-color 0.2s;\n border-color: ${({ theme, $dragOver }) => ($dragOver ? theme.colors.accent : undefined)};\n background-color: ${({ theme, $dragOver }) => ($dragOver ? theme.colors.surface : undefined)};\n\n &:hover {\n border-color: ${({ theme, $hasError }) => ($hasError ? theme.colors.error : theme.colors.accent)};\n }\n\n &:focus-within {\n border-color: ${({ theme, $hasError }) => ($hasError ? theme.colors.error : theme.colors.accent)};\n }\n`;\n\nconst HiddenFileInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst UploadButton = styled.button`\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.primary};\n text-decoration: underline;\n cursor: pointer;\n font-size: 14px;\n padding: 0;\n display: flex;\n align-items: center;\n gap: 4px;\n\n &:hover {\n color: ${({ theme }) => theme.colors.accent};\n }\n`;\n\nconst FileName = styled.span`\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n flex: 1;\n`;\n\nconst UploadIcon = styled.span`\n color: ${({ theme }) => theme.colors.primary};\n display: flex;\n align-items: center;\n`;\n\nconst FileSize = styled.span`\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 12px;\n`;\n\nconst ClearButton = styled.button`\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.secondary};\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n\n &:hover {\n color: ${({ theme }) => theme.colors.error};\n background-color: ${({ theme }) => theme.colors.error}20;\n }\n`;\n\nconst FileRequirements = styled.div`\n margin-top: 8px;\n padding: 8px 12px;\n background: ${({ theme }) => theme.colors.background};\n border: 1px solid ${({ theme }) => theme.border.color};\n border-radius: ${({ theme }) => theme.border.radius};\n`;\n\n/**\n * File upload with click + drag-and-drop, extension/size validation, and a\n * requirements hint. Emits `(file, error)` — both nullable. Ported from\n * `onboarding-flow-general`; `react-feather` icons replaced by\n * `@mui/icons-material`, and the `dragOver`/`hasError` style props made transient.\n */\nexport function FileInput({\n label,\n error,\n value,\n onChange,\n placeholder = 'Upload document',\n accept = '.png,.jpg,.jpeg,.pdf',\n maxSize = 10 * 1024 * 1024,\n required = false,\n className,\n showRequirements = true,\n name,\n testId,\n}: FileInputProps) {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const reactId = useId();\n const inputId = `${reactId}-input`;\n const errorId = `${reactId}-error`;\n const requirementsId = `${reactId}-requirements`;\n const describedBy = [error ? errorId : null, showRequirements ? requirementsId : null]\n .filter(Boolean)\n .join(' ');\n\n const validateFile = (file: File): string | null => {\n const validTypes = accept.split(',').map(type => type.trim().toLowerCase());\n const fileExtension = '.' + (file.name.split('.').pop() ?? '').toLowerCase();\n\n if (!validTypes.includes(fileExtension)) {\n return `Invalid file type. Accepted types: ${accept}`;\n }\n if (file.size > maxSize) {\n return `File size too large. Maximum size: ${formatFileSize(maxSize)}`;\n }\n return null;\n };\n\n const handleFileSelect = (file: File) => {\n const validationError = validateFile(file);\n if (validationError) {\n onChange(null, validationError);\n return;\n }\n onChange(file, null);\n };\n\n const handleClick = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) handleFileSelect(file);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n const file = e.dataTransfer.files?.[0];\n if (file) handleFileSelect(file);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null, null);\n if (fileInputRef.current) fileInputRef.current.value = '';\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n };\n\n const acceptedTypesText = accept\n .split(',')\n .map(type => type.trim().toUpperCase().replace('.', ''))\n .join(', ');\n\n return (\n <FileInputContainer className={className}>\n {label && <InputLabel htmlFor={inputId}>{label}</InputLabel>}\n\n <FileInputWrapper\n $hasError={!!error}\n $dragOver={dragOver}\n role=\"button\"\n tabIndex={0}\n aria-label={label ? `${label}. ${placeholder}` : placeholder}\n aria-invalid={!!error}\n aria-describedby={describedBy || undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <UploadIcon>\n <CloudUploadIcon fontSize=\"small\" />\n </UploadIcon>\n <UploadButton as=\"span\">{placeholder}</UploadButton>\n\n {value && (\n <>\n <FileName>\n {value.name}\n <FileSize> ({formatFileSize(value.size)})</FileSize>\n </FileName>\n <ClearButton\n type=\"button\"\n onClick={handleClear}\n title=\"Clear file\"\n aria-label=\"Clear file\"\n >\n <CloseIcon fontSize=\"small\" />\n </ClearButton>\n </>\n )}\n\n <HiddenFileInput\n ref={fileInputRef}\n id={inputId}\n name={name}\n type=\"file\"\n accept={accept}\n onChange={handleFileChange}\n required={required}\n tabIndex={-1}\n data-testid={testId}\n />\n </FileInputWrapper>\n\n {error && <InputError id={errorId}>{error}</InputError>}\n\n {showRequirements && (\n <FileRequirements id={requirementsId}>\n <Body200>\n File types accepted are {acceptedTypesText}, with a max. size of{' '}\n {formatFileSize(maxSize)}\n </Body200>\n </FileRequirements>\n )}\n </FileInputContainer>\n );\n}\n","import styled from 'styled-components';\n\n/**\n * Themed radio button (a styled native `<input type=\"radio\">`). The fill grows\n * from the theme border color to `colors.primary` when checked.\n */\nexport const RadioInput = styled.input.attrs({ type: 'radio' })`\n appearance: none;\n width: 20px;\n height: 20px;\n border: 2px solid ${({ theme }) => theme.border.color};\n border-radius: 50%;\n margin: 0 0.5rem 0 0;\n flex-shrink: 0;\n cursor: pointer;\n position: relative;\n transition: all 0.2s;\n\n &:checked {\n border-color: ${({ theme }) => theme.colors.primary};\n border-width: 6px;\n }\n\n &:hover {\n border-color: ${({ theme }) => theme.colors.primary};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n","import styled from 'styled-components';\n\n/**\n * Themed checkbox (a styled native `<input type=\"checkbox\">`) with a CSS\n * checkmark. Fill uses `colors.primary` when checked.\n */\nexport const CheckboxInput = styled.input.attrs({ type: 'checkbox' })`\n appearance: none;\n width: 20px;\n height: 20px;\n border: 2px solid ${({ theme }) => theme.border.color};\n border-radius: 4px;\n margin: 0 0.5rem 0 0;\n flex-shrink: 0;\n cursor: pointer;\n position: relative;\n transition: all 0.2s;\n\n &:checked {\n border-color: ${({ theme }) => theme.colors.primary};\n background-color: ${({ theme }) => theme.colors.primary};\n }\n\n &:checked::after {\n content: '';\n position: absolute;\n left: 5px;\n top: 1px;\n width: 6px;\n height: 11px;\n border: solid white;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n &:hover {\n border-color: ${({ theme }) => theme.colors.primary};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface StepperStep {\n label: string;\n component?: React.ReactNode;\n}\n\nexport interface StepperProps {\n steps: StepperStep[];\n currentStep: number;\n className?: string;\n testId?: string;\n}\n\nconst StepperContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n`;\n\nconst StepsContainer = styled.div`\n display: flex;\n justify-content: space-between;\n position: relative;\n`;\n\nconst StepContent = styled.div``;\n\nconst Step = styled.div<{ $active?: boolean; $completed?: boolean }>`\n position: relative;\n z-index: 2;\n background: ${({ theme }) => theme.colors.background};\n padding: 0 1rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n transition: all 0.2s ease-in-out;\n padding-bottom: 1rem;\n flex: 1;\n border-bottom: 1px solid;\n border-color: ${({ theme, $active, $completed }) =>\n $active || $completed ? theme.colors.primary : theme.colors.border};\n`;\n\nconst StepNumber = styled.div<{ $active?: boolean; $completed?: boolean }>`\n width: 2rem;\n height: 2rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${({ theme, $active, $completed }) =>\n $completed ? theme.colors.primary : $active ? 'white' : theme.colors.surface};\n color: ${({ theme, $active, $completed }) =>\n $completed ? theme.colors.background : $active ? theme.colors.primary : theme.colors.secondary};\n font-weight: 500;\n transition: all 0.2s ease-in-out;\n border: 2px solid\n ${({ theme, $active, $completed }) =>\n $active || $completed ? theme.colors.primary : theme.colors.border};\n`;\n\nconst StepLabel = styled.span<{ $active?: boolean }>`\n color: ${({ theme, $active }) => ($active ? theme.colors.primary : theme.colors.secondary)};\n font-size: 0.875rem;\n font-weight: ${({ $active }) => ($active ? 500 : 400)};\n transition: all 0.2s ease-in-out;\n text-align: center;\n white-space: nowrap;\n`;\n\n/** Horizontal stepper with a number/label per step and the active step's content below. */\nexport function Stepper({ steps, currentStep, className, testId }: StepperProps) {\n return (\n <StepperContainer className={className} data-testid={testId}>\n <StepsContainer>\n {steps.map((step, index) => {\n const active = index === currentStep;\n const completed = index < currentStep;\n return (\n <Step\n key={'stepper-step-' + index}\n $active={active}\n $completed={completed}\n aria-current={active ? 'step' : undefined}\n >\n <StepNumber $active={active} $completed={completed}>\n {index + 1}\n </StepNumber>\n <StepLabel $active={active}>{step.label}</StepLabel>\n </Step>\n );\n })}\n </StepsContainer>\n <StepContent>{steps[currentStep]?.component}</StepContent>\n </StepperContainer>\n );\n}\n","import React, { useId, useState } from 'react';\nimport styled from 'styled-components';\n\nexport interface Tab {\n name: string;\n content?: React.ReactNode;\n}\n\nexport interface TabsProps {\n tabs?: Tab[];\n defaultActiveTab?: number;\n className?: string;\n onTabChange?: (index: number) => void;\n testId?: string;\n}\n\nconst TabsContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst TabList = styled.div`\n display: flex;\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n margin-bottom: 1rem;\n`;\n\nconst TabButton = styled.button<{ $active?: boolean }>`\n background: none;\n border: none;\n padding: 0.75rem 1.5rem;\n cursor: pointer;\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({ theme, $active }) => ($active ? theme.colors.primary : theme.colors.secondary)};\n border-bottom: 2px solid ${({ theme, $active }) => ($active ? theme.colors.primary : 'transparent')};\n transition: all 0.2s ease-in-out;\n position: relative;\n\n &:hover {\n color: ${({ theme }) => theme.colors.primary};\n background-color: ${({ theme }) => theme.colors.surface};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.accent};\n outline-offset: -2px;\n }\n`;\n\nconst TabContent = styled.div`\n padding: 1rem 0;\n min-height: 100px;\n`;\n\n/**\n * Tabbed panel managing its own active-tab state. Implements the ARIA tabs\n * pattern (`tablist`/`tab`/`tabpanel` with id linkage) for accessibility.\n */\nexport function Tabs({\n tabs = [],\n defaultActiveTab = 0,\n className,\n onTabChange,\n testId,\n}: TabsProps) {\n const [activeTab, setActiveTab] = useState(defaultActiveTab);\n const baseId = useId();\n\n const handleTabClick = (index: number) => {\n setActiveTab(index);\n onTabChange?.(index);\n };\n\n if (!tabs || tabs.length === 0) {\n return null;\n }\n\n const tabId = (i: number) => `${baseId}-tab-${i}`;\n const panelId = (i: number) => `${baseId}-panel-${i}`;\n\n return (\n <TabsContainer className={className} data-testid={testId}>\n <TabList role=\"tablist\">\n {tabs.map((tab, index) => {\n const active = index === activeTab;\n return (\n <TabButton\n key={`tab-${index}`}\n id={tabId(index)}\n role=\"tab\"\n type=\"button\"\n $active={active}\n aria-selected={active}\n aria-controls={panelId(index)}\n tabIndex={active ? 0 : -1}\n onClick={() => handleTabClick(index)}\n >\n {tab.name}\n </TabButton>\n );\n })}\n </TabList>\n\n <TabContent role=\"tabpanel\" id={panelId(activeTab)} aria-labelledby={tabId(activeTab)}>\n {tabs[activeTab]?.content}\n </TabContent>\n </TabsContainer>\n );\n}\n","import React from 'react';\nimport { Box, CircularProgress } from '@mui/material';\n\nexport interface LoaderProps {\n className?: string;\n /** Spinner diameter in px. */\n size?: number;\n /** Accessible label announced to screen readers. */\n label?: string;\n testId?: string;\n}\n\n/** Centered indeterminate spinner (MUI `CircularProgress`). */\nexport function Loader({ className, size, label = 'Loading', testId }: LoaderProps) {\n return (\n <Box\n className={className}\n data-testid={testId}\n sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}\n >\n <CircularProgress size={size} aria-label={label} />\n </Box>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface FootnoteLink {\n label: string;\n href: string;\n}\n\nexport interface FootnoteProps {\n /** Optional small heading rendered above the text/links line. */\n title?: string;\n /** Lead-in text rendered before the links (e.g. \"Questions?\"). */\n text?: string;\n /** Links rendered inline after the text, separated by a middot. Open in a new tab. */\n links?: FootnoteLink[];\n className?: string;\n testId?: string;\n}\n\nconst Root = styled.footer`\n margin-top: 2rem;\n padding-top: 0.75rem;\n border-top: ${({ theme }) => `${theme.border.width} solid ${theme.colors.border}`};\n text-align: center;\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: 0.8125rem;\n line-height: 1.4;\n color: ${({ theme }) => theme.colors.secondary};\n`;\n\nconst Title = styled.p`\n margin: 0 0 0.25rem;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nconst Anchor = styled.a`\n color: ${({ theme }) => theme.colors.accent};\n text-decoration: none;\n\n &:hover,\n &:focus-visible {\n text-decoration: underline;\n }\n`;\n\n/**\n * Minimal footnote section for the bottom of a flow: optional title, lead-in\n * text, and inline links that open in a new tab.\n */\nexport function Footnote({ title, text, links = [], className, testId }: FootnoteProps) {\n return (\n <Root className={className} data-testid={testId}>\n {title && <Title>{title}</Title>}\n <p style={{ margin: 0 }}>\n {text && <>{text} </>}\n {links.map((link, index) => (\n <React.Fragment key={link.href}>\n {index > 0 && <> · </>}\n <Anchor href={link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n {link.label}\n </Anchor>\n </React.Fragment>\n ))}\n </p>\n </Root>\n );\n}\n","import React, { useId, useState } from 'react';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\n\nexport interface DotsMenuOption {\n label: string;\n action: () => void;\n}\n\nexport interface DotsMenuProps {\n options: DotsMenuOption[];\n iconSize?: 'small' | 'medium' | 'large';\n /** Accessible label for the trigger button. */\n ariaLabel?: string;\n testId?: string;\n}\n\n/**\n * Overflow (\"kebab\") menu: an icon button opening a list of actions. IDs are\n * generated with `useId()` so multiple instances on a page stay unique\n * (the source hardcoded a single id).\n */\nexport function DotsMenu({\n options,\n iconSize = 'medium',\n ariaLabel = 'more',\n testId,\n}: DotsMenuProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const baseId = useId();\n const buttonId = `${baseId}-button`;\n const menuId = `${baseId}-menu`;\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleOptionClick = (action: () => void) => {\n action();\n handleClose();\n };\n\n return (\n <>\n <IconButton\n aria-label={ariaLabel}\n id={buttonId}\n data-testid={testId}\n aria-controls={open ? menuId : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={handleClick}\n size={iconSize}\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id={menuId}\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n slotProps={{\n list: { 'aria-labelledby': buttonId },\n paper: { style: { maxHeight: 200, width: '20ch' } },\n }}\n >\n {options.map((option, idx) => (\n <MenuItem key={option.label + idx} onClick={() => handleOptionClick(option.action)}>\n {option.label}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n}\n","import styled from 'styled-components';\n\n/**\n * Accent asterisk marker, for annotating a label whose explanation appears in an\n * `AsteriskNote` below it. Render with `aria-hidden` — the note carries the\n * meaning, the mark is decoration.\n */\nexport const AsteriskMark = styled.sup`\n color: ${({ theme }) => theme.colors.accent};\n font-weight: 600;\n margin-left: 1px;\n font-size: 0.95em;\n`;\n\n/**\n * Muted italic helper text paired with an `AsteriskMark`. Use the `.asterisk`\n * class on a leading span to render the marker upright and accented inside the\n * italic run:\n *\n * ```tsx\n * <AsteriskNote>\n * <span className=\"asterisk\" aria-hidden=\"true\">*</span>\n * Provide Financial Statements to be approved for a higher credit limit.\n * </AsteriskNote>\n * ```\n *\n * Named `AsteriskNote` rather than `Footnote` deliberately: this package already\n * exports a `Footnote`, which is an entirely different thing — a page-bottom\n * `<footer>` with a title and links. The two were separate components sharing one\n * name across repos, which is how they drifted.\n *\n * All colours come from theme tokens, so partner white-labelling recolours both.\n */\nexport const AsteriskNote = styled.p`\n font-size: 12px;\n color: ${({ theme }) => theme.colors.secondary};\n margin: 14px 4px 0;\n line-height: 1.5;\n font-style: italic;\n\n .asterisk {\n font-style: normal;\n color: ${({ theme }) => theme.colors.accent};\n font-weight: 600;\n margin-right: 2px;\n }\n`;\n","import styled from 'styled-components';\n\nimport type { Theme } from '../theme';\n\n/**\n * `info` — accent-tinted, for a suggestion (\"Recommended\")\n * `success` — outlined green, for a confirmed state (\"Verified\")\n * `neutral` — outlined grey, for a plain source label (\"Via Plaid\")\n * `filled` — solid accent, for the one selected item in a set (\"Default\")\n */\nexport type BadgeVariant = 'info' | 'success' | 'neutral' | 'filled';\n\nconst background = (theme: Theme, variant?: BadgeVariant) => {\n if (variant === 'filled') return theme.colors.accent;\n if (variant === 'success' || variant === 'neutral') return theme.colors.background;\n return `${theme.colors.accent}14`;\n};\n\nconst foreground = (theme: Theme, variant?: BadgeVariant) => {\n if (variant === 'filled') return theme.colors.background;\n if (variant === 'success') return theme.colors.success;\n if (variant === 'neutral') return theme.colors.secondary;\n return theme.colors.accent;\n};\n\nconst outline = (theme: Theme, variant?: BadgeVariant) => {\n if (variant === 'success') return `1px solid ${theme.colors.success}`;\n if (variant === 'neutral') return `1px solid ${theme.colors.border}`;\n if (variant === 'filled') return `1px solid ${theme.colors.accent}`;\n return 'none';\n};\n\n/**\n * Small uppercase status pill.\n *\n * Overlaps `StatusTag` in role — both label a state in a few words — but they are\n * not interchangeable: `StatusTag` is a solid filled tag with capitalised text,\n * this is an uppercase letter-spaced pill. Both are in shipped, QA-approved UI, so\n * consolidating them would change screens rather than clean up code.\n *\n * The four variants exist because onboarding grew two separate `Badge`\n * components — one on the verification sources page, one on payment methods —\n * with the same name, different looks, and colliding variant names (that one's\n * unstyled default was this one's `neutral`, and its `default` was `filled`).\n * Callers should always pass `$variant` explicitly rather than relying on the\n * fallback.\n */\nexport const Badge = styled.span<{ $variant?: BadgeVariant }>`\n font-size: 10px;\n padding: 2px 8px;\n border-radius: 4px;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n white-space: nowrap;\n background: ${({ theme, $variant }) => background(theme, $variant)};\n color: ${({ theme, $variant }) => foreground(theme, $variant)};\n border: ${({ theme, $variant }) => outline(theme, $variant)};\n`;\n","import CloseIcon from '@mui/icons-material/Close';\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\nimport DescriptionIcon from '@mui/icons-material/Description';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport React, { useRef, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { formatFileSize } from '../utils/formatFileSize';\n\n/** An already-uploaded file, as returned by the API rather than a local `File`. */\nexport interface UploadedFile {\n id: string;\n fileName: string;\n fileSize: number;\n}\n\nexport interface UploadZoneProps {\n /** Comma-separated extension list, e.g. `.pdf,.xlsx`. */\n accept?: string;\n /** Requirements line under the drop target, e.g. \"PDF up to 25MB each\". */\n hint?: string;\n files?: UploadedFile[];\n /** Called with the raw `FileList` from the picker or a drop. */\n onAdd: (files: FileList) => void;\n onRemove: (id: string) => void;\n /** Ids currently being deleted — each shows a spinner instead of a remove button. */\n removingIds?: Set<string>;\n disabled?: boolean;\n inputId?: string;\n testId?: string;\n}\n\nconst Zone = styled.div<{ $dragging?: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n width: 100%;\n min-height: 100px;\n border: 1px dashed ${({ theme }) => theme.colors.border};\n border-radius: ${({ theme }) => theme.border.radius};\n padding: 16px;\n text-align: center;\n background: ${({ theme }) => theme.colors.surface};\n cursor: pointer;\n transition:\n border-color 0.15s ease,\n background 0.15s ease;\n\n ${({ $dragging, theme }) =>\n $dragging &&\n `\n border-color: ${theme.colors.accent};\n background: ${theme.colors.accent}14;\n `}\n\n &:hover {\n border-color: ${({ theme }) => theme.colors.accent};\n background: ${({ theme }) => `${theme.colors.accent}14`};\n }\n\n &:focus-visible {\n outline: none;\n border-color: ${({ theme }) => theme.colors.accent};\n box-shadow: 0 0 0 3px ${({ theme }) => `${theme.colors.accent}26`};\n }\n`;\n\nconst ZoneIcon = styled(CloudUploadIcon)`\n color: ${({ theme }) => theme.colors.secondary};\n`;\n\nconst ZoneText = styled.p`\n font-size: 13px;\n margin: 0;\n color: ${({ theme }) => theme.colors.primary};\n\n span {\n color: ${({ theme }) => theme.colors.accent};\n }\n`;\n\nconst ZoneHint = styled.p`\n font-size: 11px;\n color: ${({ theme }) => theme.colors.secondary};\n margin: 0;\n`;\n\nconst HiddenInput = styled.input`\n display: none;\n`;\n\nconst FileList = styled.div`\n margin-top: 10px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n`;\n\nconst FileItem = styled.div`\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n background: ${({ theme }) => theme.colors.background};\n border: 1px solid ${({ theme }) => theme.colors.border};\n border-radius: 4px;\n font-size: 13px;\n\n .file-icon {\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 18px;\n flex-shrink: 0;\n }\n\n .file-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ${({ theme }) => theme.colors.primary};\n }\n\n .file-size {\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 12px;\n flex-shrink: 0;\n }\n`;\n\nconst RemoveButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n background: transparent;\n color: ${({ theme }) => theme.colors.secondary};\n border-radius: 4px;\n cursor: pointer;\n flex-shrink: 0;\n transition:\n background 0.15s ease,\n color 0.15s ease;\n\n &:hover {\n background: ${({ theme }) => theme.colors.surface};\n color: ${({ theme }) => theme.colors.error};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n svg {\n font-size: 16px;\n }\n`;\n\n/**\n * Multi-file drop target with a list of what has already been uploaded.\n *\n * Distinct from `FileInput`, which is a single-file form field that validates and\n * emits `(file, error)`. This one accepts many files, reports nothing about\n * validity, and renders server-side state — the caller owns validation, upload\n * and deletion. Keyboard accessible: the zone is a `role=\"button\"` that opens the\n * picker on Enter or Space.\n */\nexport function UploadZone({\n accept,\n hint,\n files = [],\n onAdd,\n onRemove,\n removingIds,\n disabled = false,\n inputId,\n testId,\n}: UploadZoneProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n\n const openPicker = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openPicker();\n }\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files?.length) onAdd(event.target.files);\n // Reset so re-picking the same file still fires a change.\n event.target.value = '';\n };\n\n const handleDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragging(false);\n if (disabled) return;\n if (event.dataTransfer.files?.length) onAdd(event.dataTransfer.files);\n };\n\n return (\n <>\n <Zone\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n $dragging={dragging}\n onClick={openPicker}\n onKeyDown={handleKeyDown}\n onDragOver={event => {\n event.preventDefault();\n if (!disabled) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n >\n <HiddenInput\n id={inputId}\n ref={inputRef}\n type=\"file\"\n multiple\n accept={accept}\n disabled={disabled}\n onChange={handleChange}\n data-testid={testId}\n />\n <ZoneIcon fontSize=\"medium\" aria-hidden=\"true\" />\n <ZoneText>\n Drop files or <span>browse</span>\n </ZoneText>\n <ZoneHint>{hint}</ZoneHint>\n </Zone>\n\n {files.length > 0 && (\n <FileList>\n {files.map(file => {\n const isRemoving = removingIds?.has(file.id);\n\n return (\n <FileItem key={file.id}>\n <DescriptionIcon className=\"file-icon\" aria-hidden=\"true\" />\n <span className=\"file-name\">{file.fileName}</span>\n <span className=\"file-size\">{formatFileSize(file.fileSize)}</span>\n {isRemoving ? (\n <CircularProgress size={16} color=\"secondary\" />\n ) : (\n <RemoveButton\n type=\"button\"\n aria-label={`Remove ${file.fileName}`}\n disabled={disabled}\n onClick={() => onRemove(file.id)}\n >\n <CloseIcon aria-hidden=\"true\" />\n </RemoveButton>\n )}\n </FileItem>\n );\n })}\n </FileList>\n )}\n </>\n );\n}\n","import ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport React, { useId } from 'react';\nimport styled from 'styled-components';\n\nimport { FormSubtitle } from '../styles/forms';\nimport { Body100 } from '../styles/layout';\nimport { AsteriskMark, AsteriskNote } from './AsteriskNote';\n\nexport interface CollapsibleSourceProps {\n title: string;\n /** One-line description under the title. */\n desc?: string;\n /**\n * Optional asterisk note. Its presence adds an `AsteriskMark` to the title and\n * renders the note under the description.\n */\n note?: string;\n open?: boolean;\n onToggle?: () => void;\n children?: React.ReactNode;\n testId?: string;\n}\n\nconst Wrapper = styled.div<{ $open?: boolean }>`\n background: ${({ theme }) => theme.colors.background};\n border: 1px solid ${({ theme, $open }) => ($open ? theme.colors.secondary : theme.colors.border)};\n border-radius: ${({ theme }) => theme.border.radius};\n overflow: hidden;\n transition: border-color 0.15s ease;\n\n ${({ $open }) => $open && 'grid-column: 1 / -1;'}\n`;\n\nconst Summary = styled.button`\n width: 100%;\n text-align: left;\n cursor: pointer;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n background: transparent;\n border: none;\n transition: background 0.15s ease;\n\n &:hover {\n background: ${({ theme }) => theme.colors.surface};\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px ${({ theme }) => `${theme.colors.accent}40`};\n }\n`;\n\nconst SummaryText = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst Chevron = styled(ExpandMoreIcon)<{ $open?: boolean }>`\n color: ${({ theme }) => theme.colors.secondary};\n transition: transform 0.2s ease;\n transform: rotate(${({ $open }) => ($open ? '180deg' : '0deg')});\n flex-shrink: 0;\n`;\n\nconst Content = styled.div`\n padding: 12px 16px 14px;\n`;\n\n// Tighter top margin than a standalone AsteriskNote: here the note sits directly\n// under the description rather than at the foot of a section.\nconst Note = styled(AsteriskNote)`\n margin: 4px 0 0;\n`;\n\n/**\n * One expandable verification/upload source: a header row that toggles, with the\n * content revealed below. Only the open source is expanded, so a caller managing\n * several passes `open` and `onToggle` per source.\n *\n * Purely presentational — it owns no open state and knows nothing about what it\n * contains.\n */\nexport function CollapsibleSource({\n title,\n desc,\n note,\n open = false,\n onToggle,\n children,\n testId,\n}: CollapsibleSourceProps) {\n const contentId = useId();\n\n return (\n <Wrapper $open={open}>\n <Summary\n type=\"button\"\n aria-expanded={open}\n aria-controls={contentId}\n onClick={onToggle}\n data-testid={testId}\n >\n <SummaryText>\n <FormSubtitle style={{ margin: 0 }}>\n {title}\n {note ? <AsteriskMark aria-hidden=\"true\">*</AsteriskMark> : null}\n </FormSubtitle>\n {desc ? (\n <Body100 color=\"secondary\" style={{ margin: '2px 0 0' }}>\n {desc}\n </Body100>\n ) : null}\n {note ? (\n <Note>\n <span className=\"asterisk\" aria-hidden=\"true\">\n *\n </span>\n {note}\n </Note>\n ) : null}\n </SummaryText>\n <Chevron $open={open} aria-hidden=\"true\" />\n </Summary>\n {open && <Content id={contentId}>{children}</Content>}\n </Wrapper>\n );\n}\n","import LinkIcon from '@mui/icons-material/Link';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport { alpha, useTheme } from '@mui/material/styles';\nimport React from 'react';\n\nimport { FormSubtitle } from '../styles/forms';\nimport { Body100 } from '../styles/layout';\nimport { Badge } from './Badge';\n\n/** The subset of a Plaid connection this tile renders. */\nexport interface PlaidConnection {\n institution?: { name?: string } | null;\n accounts?: { mask?: string; accountMask?: string }[] | null;\n}\n\nexport interface PlaidTileProps {\n /** Null or undefined renders the unconnected state. */\n plaidData?: PlaidConnection | null;\n onConnect?: () => void;\n isConnecting?: boolean;\n /** Rendered as `data-testid` on the connect/reconnect button. */\n testId?: string;\n}\n\nconst maskOf = (plaidData?: PlaidConnection | null): string | null => {\n const account = plaidData?.accounts?.[0];\n return account?.mask || account?.accountMask || null;\n};\n\n/**\n * Bank-connection tile for Plaid: shows the connected institution and masked\n * account, or a prompt to connect.\n *\n * Styled through the MUI palette rather than styled-components theme tokens,\n * because it needs `alpha()` on the success colour. Both are driven by the same\n * partner branding via `buildMuiTheme`, so white-labelling still applies.\n */\nexport function PlaidTile({ plaidData, onConnect, isConnecting = false, testId }: PlaidTileProps) {\n const { palette, shape } = useTheme();\n const connected = Boolean(plaidData);\n const institutionName = plaidData?.institution?.name || 'Your bank';\n const mask = maskOf(plaidData);\n\n const accentColor = connected ? palette.success.dark : palette.primary.main;\n\n return (\n <Box\n component=\"section\"\n aria-labelledby=\"plaid-tile-title\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '14px',\n flexWrap: 'wrap',\n padding: '16px 18px',\n marginBottom: '14px',\n borderRadius: `${shape.borderRadius}px`,\n border: `1px solid ${accentColor}`,\n backgroundColor: connected ? alpha(palette.success.main, 0.08) : palette.background.default,\n transition: 'border-color 0.15s ease, background 0.15s ease',\n }}\n >\n <Box sx={{ flex: 1, minWidth: 220 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '10px', marginBottom: '2px' }}>\n <FormSubtitle id=\"plaid-tile-title\" style={{ margin: 0, fontWeight: 600 }}>\n {connected ? 'Connected via Plaid' : 'Connect via Plaid'}\n </FormSubtitle>\n <Badge $variant={connected ? 'success' : 'info'}>\n {connected ? 'Verified' : 'Recommended'}\n </Badge>\n </Box>\n {connected ? (\n <Body100 style={{ margin: 0, color: palette.success.dark, fontWeight: 500 }}>\n {institutionName}\n {mask ? ` ····${mask}` : ''}\n </Body100>\n ) : (\n <Body100 color=\"secondary\" style={{ margin: 0 }}>\n Securely link your bank in seconds. Best signal for fastest decisions.\n </Body100>\n )}\n </Box>\n\n {connected ? (\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"inherit\"\n type=\"button\"\n onClick={onConnect}\n disabled={isConnecting}\n data-testid={testId}\n startIcon={<RefreshIcon fontSize=\"small\" />}\n sx={{ flexShrink: 0, textTransform: 'none' }}\n >\n {isConnecting ? 'Connecting…' : 'Reconnect'}\n </Button>\n ) : (\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n type=\"button\"\n onClick={onConnect}\n disabled={isConnecting}\n data-testid={testId}\n startIcon={<LinkIcon fontSize=\"small\" />}\n sx={{ flexShrink: 0, textTransform: 'none' }}\n >\n {isConnecting ? 'Connecting…' : 'Connect bank account'}\n </Button>\n )}\n </Box>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface TermsDocumentProps {\n /**\n * **Already-sanitized** HTML. This component renders it with\n * `dangerouslySetInnerHTML` and does no sanitizing of its own — the caller owns\n * that, because sanitizing here would make DOMPurify a dependency of every\n * consumer of this package.\n *\n * Callers fetch terms as HTML from the API, decode entities, run DOMPurify, and\n * pass the result. Never pass anything that has not been through that.\n */\n html: string;\n className?: string;\n testId?: string;\n}\n\nconst Root = styled.div`\n background-color: ${({ theme }) => theme.colors.surface};\n border: 1px solid ${({ theme }) => theme.colors.border};\n border-radius: ${({ theme }) => theme.border.radius};\n padding: 1.5rem;\n overflow-y: auto;\n max-height: 400px;\n margin-bottom: 1rem;\n font-size: 14px;\n line-height: 1.6;\n`;\n\n/**\n * Scrollable panel for a terms or disclosure document.\n *\n * Note the background: onboarding's original read `theme.colors.paper`, which is\n * not a token in this theme, so it silently resolved to nothing and the panel had\n * no background at all. This uses `surface`, which is what it was reaching for.\n */\nexport function TermsDocument({ html, className, testId }: TermsDocumentProps) {\n return (\n <Root\n className={className}\n data-testid={testId}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n\n/** Right-aligned hint under an action, e.g. why a button is disabled. */\nexport const HelperText = styled.span`\n display: block;\n font-size: 12.5px;\n color: ${({ theme }) => theme.colors.secondary};\n text-align: right;\n margin-top: 0.5rem;\n`;\n","import CheckRoundedIcon from '@mui/icons-material/CheckRounded';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport React from 'react';\n\nimport { Body200, H3 } from '../styles/layout';\nimport { Loader } from './Loader';\n\n/**\n * Underwriting outcomes as the API reports them.\n *\n * The declined set is deliberately wide: `CLOSED_NO_DECISION`, `DECLINED`,\n * `DENIED`, `ERROR`, `N/A` and `REJECTED` all mean \"no\" to a borrower and are\n * shown identically. Anything unrecognised — including `MANUAL_REVIEW`,\n * `NOT_EXECUTED` and `null` — falls through to the manual-review message rather\n * than showing nothing, because an unknown status must never read as approval.\n */\nexport type UnderwritingDecision =\n | 'PROCESSING'\n | 'APPROVED'\n | 'MANUAL_REVIEW'\n | 'NOT_EXECUTED'\n | 'CLOSED_NO_DECISION'\n | 'DECLINED'\n | 'DENIED'\n | 'ERROR'\n | 'N/A'\n | 'REJECTED';\n\nconst DECLINED = new Set<string>([\n 'CLOSED_NO_DECISION',\n 'DECLINED',\n 'DENIED',\n 'ERROR',\n 'N/A',\n 'REJECTED',\n]);\n\nexport interface UnderwritingStatusProps {\n status?: string | null;\n /**\n * Pre-formatted for display, e.g. `\"$50,000.00\"`. A string rather than a number\n * so currency formatting stays with the consumer — this package has no locale or\n * currency opinion. Omit to show approval without an amount.\n */\n creditLimit?: string | null;\n /** Rendered under the approved state, for follow-on actions. */\n children?: React.ReactNode;\n testId?: string;\n}\n\n/**\n * The borrower-facing result of underwriting: in progress, approved, declined, or\n * under manual review.\n *\n * Presentational only — it neither fetches nor polls. The caller owns the status\n * and re-renders this as it changes.\n */\nexport function UnderwritingStatus({\n status,\n creditLimit,\n children,\n testId,\n}: UnderwritingStatusProps) {\n if (status === 'PROCESSING') {\n return (\n <div data-testid={testId}>\n <H3>Your application is being reviewed</H3>\n <Stack width=\"100%\" alignItems=\"center\" gap=\"16px\">\n <Loader />\n <Body200>\n We are underwriting your business. This process can take a minute or two.\n </Body200>\n </Stack>\n </div>\n );\n }\n\n if (status === 'APPROVED') {\n return (\n <div data-testid={testId}>\n <H3>Congrats!</H3>\n <Body200>\n You have been approved.\n {creditLimit ? <> Your credit limit is: {creditLimit}</> : null}\n </Body200>\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <CheckRoundedIcon color=\"success\" sx={{ fontSize: '5rem' }} />\n </Box>\n {children}\n </div>\n );\n }\n\n if (status && DECLINED.has(status)) {\n return (\n <div data-testid={testId}>\n <H3>Sorry, we cannot approve your application</H3>\n <Body200>\n We are sorry to inform you that we cannot approve your application. Please try again\n later.\n </Body200>\n </div>\n );\n }\n\n return (\n <div data-testid={testId}>\n <H3>Your application is being reviewed</H3>\n <Body200>\n We are reviewing your application and will reach out within 2 business days.\n </Body200>\n </div>\n );\n}\n","import styled, { css } from 'styled-components';\n\n/**\n * Layout for a payment-method row: a radio, a body, and a header with a title and\n * a trailing action.\n *\n * `$default` marks the selected method (accent border and tint); `$readonly` marks\n * one the borrower cannot edit here, such as an account managed through Plaid;\n * `$edited` marks one carrying changes that have not been saved yet.\n */\nexport const MethodCard = styled.div<{\n $default?: boolean;\n $readonly?: boolean;\n $edited?: boolean;\n}>`\n display: flex;\n gap: 12px;\n align-items: flex-start;\n padding: 14px 16px;\n margin-bottom: 10px;\n border-radius: ${({ theme }) => theme.border.radius};\n border: 1px solid\n ${({ theme, $default }) => ($default ? theme.colors.accent : theme.colors.border)};\n background: ${({ theme, $default, $readonly }) =>\n $default\n ? `${theme.colors.accent}14`\n : $readonly\n ? theme.colors.surface\n : theme.colors.background};\n transition:\n border-color 0.15s ease,\n background 0.15s ease;\n\n /**\n * The unsaved-edit bar. It thickens the left border rather than adding one, so\n * the padding gives back the 2px it takes and the card's contents do not shift\n * when it appears mid-keystroke. Declared last so it wins over the shorthand\n * above, including on a $default card that already has an accent border.\n */\n ${({ theme, $edited }) =>\n $edited &&\n css`\n border-left: 3px solid ${theme.colors.accent};\n padding-left: 14px;\n `}\n`;\n\nexport const MethodBody = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\n/** `$tight` for a card with no form fields under the header. */\nexport const MethodHeader = styled.div<{ $tight?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: ${({ $tight }) => ($tight ? '6px' : '12px')};\n`;\n\nexport const MethodTitle = styled.span`\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n font-size: 14px;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\n/** Two-up field row that stacks on narrow screens. */\nexport const FieldsGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n\n @media (max-width: 540px) {\n grid-template-columns: 1fr;\n }\n`;\n\n/** Accent-tinted note with a leading icon slot. */\nexport const Banner = styled.div`\n display: flex;\n gap: 10px;\n align-items: flex-start;\n padding: 10px 14px;\n background: ${({ theme }) => `${theme.colors.accent}14`};\n border-left: 3px solid ${({ theme }) => theme.colors.accent};\n border-radius: ${({ theme }) => theme.border.radius};\n margin-bottom: 1.25rem;\n\n svg {\n color: ${({ theme }) => theme.colors.accent};\n flex-shrink: 0;\n margin-top: 1px;\n }\n\n p {\n font-size: 13px;\n color: ${({ theme }) => theme.colors.accent};\n margin: 0;\n line-height: 1.5;\n }\n`;\n\n/**\n * Footer row for a step's actions.\n *\n * `space-between` is for the two-part footer a stepped flow has — Back on the\n * left, status and the primary action on the right. A servicing screen that saves\n * in place has no Back, and space-between then drops its lone action on the left,\n * where it reads as the secondary half of a pair that isn't there. So a single\n * child is pushed to the right instead; two or more keep the split.\n */\nexport const FooterActions = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n margin-top: 1.25rem;\n flex-wrap: wrap;\n\n button {\n margin-top: 0;\n }\n\n > :only-child {\n margin-left: auto;\n }\n`;\n\nexport const FooterRight = styled.div`\n display: flex;\n align-items: center;\n gap: 14px;\n`;\n","import LockIcon from '@mui/icons-material/Lock';\nimport React from 'react';\n\nimport { Body200 } from '../styles/layout';\nimport { Badge } from './Badge';\nimport { MethodBody, MethodCard, MethodHeader, MethodTitle } from './paymentMethodStyles';\nimport { RadioInput } from './RadioInput';\n\nexport interface PlaidMethodCardProps {\n plaidData?: {\n institution?: { name?: string } | null;\n accounts?: { mask?: string; accountMask?: string }[] | null;\n } | null;\n isDefault?: boolean;\n onSelectDefault?: () => void;\n /** Distinguishes the radio group when several cards share a page. */\n name?: string;\n testId?: string;\n}\n\nconst maskOf = (plaidData?: PlaidMethodCardProps['plaidData']): string | null => {\n const account = plaidData?.accounts?.[0];\n return account?.mask || account?.accountMask || null;\n};\n\n/**\n * Read-only payment method sourced from Plaid. It cannot be edited or removed\n * here — disconnecting happens wherever the bank connection is managed — but it\n * can still be chosen as the default.\n *\n * Routing is deliberately absent: Plaid Link metadata exposes an account mask but\n * no routing number client-side.\n */\nexport function PlaidMethodCard({\n plaidData,\n isDefault = false,\n onSelectDefault,\n name = 'default-method',\n testId,\n}: PlaidMethodCardProps) {\n const institutionName = plaidData?.institution?.name || 'Your bank';\n const mask = maskOf(plaidData);\n\n return (\n <MethodCard as=\"label\" htmlFor=\"default-plaid\" $default={isDefault} $readonly>\n <RadioInput\n type=\"radio\"\n id=\"default-plaid\"\n name={name}\n checked={isDefault}\n onChange={onSelectDefault}\n data-testid={testId}\n />\n <MethodBody>\n <MethodHeader $tight>\n <MethodTitle>\n {institutionName}\n <Badge $variant=\"neutral\">Via Plaid</Badge>\n {isDefault && <Badge $variant=\"filled\">Default</Badge>}\n </MethodTitle>\n <LockIcon fontSize=\"small\" titleAccess=\"Managed via Plaid\" />\n </MethodHeader>\n <Body200 color=\"secondary\" style={{ margin: 0 }}>\n {mask ? `Account ····${mask}` : 'Connected account'}\n </Body200>\n </MethodBody>\n </MethodCard>\n );\n}\n","import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\nimport IconButton from '@mui/material/IconButton';\nimport React from 'react';\n\nimport { Body200 } from '../styles/layout';\nimport { Badge } from './Badge';\nimport {\n FieldsGrid,\n MethodBody,\n MethodCard,\n MethodHeader,\n MethodTitle,\n} from './paymentMethodStyles';\nimport { RadioInput } from './RadioInput';\nimport { TextInput } from './TextInput';\n\nexport interface ManualMethodValue {\n id: string;\n account: string;\n routing: string;\n}\n\n/**\n * Where the row stands against what is stored.\n *\n * `saved` — on file and unchanged. `edited` — on file, with changes not yet\n * written. A row the borrower has just added is neither: omit the prop.\n *\n * Only `edited` is marked. `saved` deliberately renders the same as a new row for\n * now — the card stays quiet until the borrower actually changes something — but\n * it remains a distinct value because the caller already tells the two apart, and\n * marking a stored row is a change of copy here rather than a change of API.\n *\n * The caller owns the comparison, because only it knows what was loaded.\n */\nexport type ManualMethodStatus = 'saved' | 'edited';\n\nexport interface ManualMethodCardProps {\n /** Zero-based; rendered as \"Account {index + 1}\". */\n index: number;\n value: ManualMethodValue;\n isDefault?: boolean;\n /**\n * Whether this account is already stored, and whether it has been changed\n * since. Omit for a row the borrower has just added. Only `edited` is marked.\n */\n status?: ManualMethodStatus;\n /** Disables removal when this is the last remaining method. */\n trashDisabled?: boolean;\n disabled?: boolean;\n accountError?: string;\n routingError?: string;\n onSelectDefault?: () => void;\n onChangeField: (field: 'account' | 'routing', next: string) => void;\n onBlurField: (field: 'account' | 'routing') => void;\n onRemove?: () => void;\n name?: string;\n}\n\n/**\n * Editable manual payment method — account and routing number.\n *\n * Validation is the caller's: pass `accountError`/`routingError` and use\n * `onBlurField` to decide when to surface them. Onboarding shows errors on blur\n * and never while typing, which is worth keeping.\n *\n * A stored account is an ordinary editable field here — nothing about the inputs\n * says the borrower is overwriting something real. `status` is what says it, and\n * it is worth passing wherever saved accounts are rendered.\n */\nexport function ManualMethodCard({\n index,\n value,\n isDefault = false,\n status,\n trashDisabled = false,\n disabled = false,\n accountError,\n routingError,\n onSelectDefault,\n onChangeField,\n onBlurField,\n onRemove,\n name = 'default-method',\n}: ManualMethodCardProps) {\n const radioId = `default-${value.id}`;\n\n return (\n <MethodCard $default={isDefault} $edited={status === 'edited'}>\n <RadioInput\n type=\"radio\"\n id={radioId}\n name={name}\n checked={isDefault}\n onChange={onSelectDefault}\n disabled={disabled}\n />\n <MethodBody>\n <MethodHeader>\n <MethodTitle>\n <Body200 as=\"label\" htmlFor={radioId} style={{ margin: 0, cursor: 'pointer' }}>\n Account {index + 1}\n </Body200>\n {isDefault && <Badge $variant=\"filled\">Default</Badge>}\n {status === 'edited' && <Badge $variant=\"info\">Unsaved</Badge>}\n </MethodTitle>\n <IconButton\n size=\"small\"\n type=\"button\"\n onClick={onRemove}\n disabled={disabled || trashDisabled}\n aria-label=\"Remove this account\"\n title={trashDisabled ? 'At least one account is required' : 'Remove this account'}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </MethodHeader>\n <FieldsGrid>\n <div onBlur={() => onBlurField('account')}>\n <TextInput\n label=\"Account number\"\n placeholder=\"Account number\"\n value={value.account}\n onChange={next => onChangeField('account', next)}\n error={accountError}\n disabled={disabled}\n onlyNumbers\n />\n </div>\n <div onBlur={() => onBlurField('routing')}>\n <TextInput\n label=\"Routing number\"\n placeholder=\"Routing number\"\n value={value.routing}\n onChange={next => onChangeField('routing', next)}\n error={routingError}\n disabled={disabled}\n onlyNumbers\n />\n </div>\n </FieldsGrid>\n </MethodBody>\n </MethodCard>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { Body100 } from '../styles/layout';\nimport { CheckboxInput } from './CheckboxInput';\n\nexport interface AchVerificationConsentProps {\n consentGiven?: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n /** Label for the action the consent is attached to. Defaults to \"Continue\". */\n actionLabel?: string;\n testId?: string;\n}\n\nconst ConsentRow = styled.label`\n display: flex;\n align-items: center;\n padding: 12px 14px;\n background: ${({ theme }) => theme.colors.surface};\n border-radius: ${({ theme }) => theme.border.radius};\n margin: 1.25rem 0;\n cursor: pointer;\n gap: 10px;\n`;\n\n/**\n * ACH verification consent and PATRIOT Act acknowledgement, required before\n * payment methods can be saved.\n *\n * `actionLabel` exists because the copy names the button the borrower is about to\n * press — \"By clicking Continue…\" is right in a stepped flow, but a servicing\n * screen that saves in place needs its own verb.\n */\nexport function AchVerificationConsent({\n consentGiven = false,\n onChange,\n disabled = false,\n actionLabel = 'Continue',\n testId,\n}: AchVerificationConsentProps) {\n return (\n <ConsentRow>\n <CheckboxInput\n type=\"checkbox\"\n checked={consentGiven}\n onChange={event => onChange(event.target.checked)}\n disabled={disabled}\n data-testid={testId}\n />\n <Body100 style={{ margin: 0 }}>\n By clicking {actionLabel}, I agree to the{' '}\n <a\n href=\"https://oatfi.com/payment-method-verification-consent\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n payment method verification\n </a>{' '}\n and acknowledge the{' '}\n <a\n href=\"https://oatfi.com/usa-patriot-act-disclosure-page\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n USA PATRIOT Act disclosure\n </a>\n .\n </Body100>\n </ConsentRow>\n );\n}\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { ThemeProvider } from '../theme';\nimport type { Branding } from '../theme';\nimport { Body100, Button, ButtonContainer, StatusTag } from '../styles/layout';\nimport { FormCheckboxLabel } from '../styles/forms';\nimport { CheckboxInput } from '../components/CheckboxInput';\nimport { DropDown } from '../components/DropDown';\nimport { Stepper } from '../components/Stepper';\nimport { TextInput } from '../components/TextInput';\n\nexport interface PreviewProps {\n /** Partner branding to render the sample with. Omit for the default theme. */\n branding?: Branding;\n className?: string;\n}\n\nconst PreviewCard = styled.div`\n display: flex;\n gap: 2rem;\n padding: 1.5rem;\n background: ${({ theme }) => theme.colors.background};\n border: ${({ theme }) => theme.border.width} solid ${({ theme }) => theme.border.color};\n border-radius: ${({ theme }) => theme.border.radius};\n`;\n\nconst MainColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n flex: 1;\n min-width: 0;\n`;\n\nconst HeaderRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1rem;\n`;\n\nconst SideColumn = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nfunction PreviewContent() {\n const [name, setName] = useState('Acme Corporation');\n const [plan, setPlan] = useState('growth');\n const [autopay, setAutopay] = useState(true);\n\n return (\n <PreviewCard data-testid=\"oatfi-ui-preview\">\n <MainColumn>\n <HeaderRow>\n <Body100 className=\"bold\">Partner</Body100>\n <StatusTag className=\"success small\">Active</StatusTag>\n </HeaderRow>\n\n <TextInput label=\"Business name\" value={name} onChange={setName} />\n <DropDown\n label=\"Plan\"\n value={plan}\n onChange={setPlan}\n options={[\n { value: 'starter', label: 'Starter' },\n { value: 'growth', label: 'Growth' },\n { value: 'scale', label: 'Scale' },\n ]}\n />\n <FormCheckboxLabel>\n <CheckboxInput checked={autopay} onChange={e => setAutopay(e.target.checked)} />\n Enable automatic payments\n </FormCheckboxLabel>\n\n <ButtonContainer>\n <Button className=\"secondary\">Cancel</Button>\n <Button>Save changes</Button>\n </ButtonContainer>\n </MainColumn>\n\n <SideColumn>\n <Stepper\n currentStep={1}\n steps={[{ label: 'Connect' }, { label: 'Verify' }, { label: 'Done' }]}\n />\n </SideColumn>\n </PreviewCard>\n );\n}\n\n/**\n * A self-contained branded snapshot of the OatFi UI kit — a header, a few\n * inputs, buttons, and a stepper. Wraps its own `ThemeProvider`, so a consumer\n * (e.g. the dashboard's Branding settings page) drops it in and passes partner\n * `branding` without setting up theming itself.\n */\nexport function Preview({ branding, className }: PreviewProps) {\n return (\n <ThemeProvider branding={branding}>\n <div className={className}>\n <PreviewContent />\n </div>\n </ThemeProvider>\n );\n}\n"],"names":["StyledThemeProvider","MuiThemeProviderBase","useStyledTheme","Content","formatDisplayValue","InputLabel","Root","IconButton","MenuItem","CircularProgress","maskOf","useTheme","Box","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/theme/defaultTheme.ts","../src/theme/mergeBranding.ts","../src/theme/muiTheme.ts","../src/theme/ThemeProvider.tsx","../src/theme/useTheme.ts","../src/styles/inputs.ts","../src/styles/layout.ts","../src/styles/forms.ts","../src/components/TextInput.tsx","../src/components/EmailInput.tsx","../src/components/PhoneInput.tsx","../src/components/SSNInput.tsx","../src/components/TaxIdInput.tsx","../src/components/CurrencyInput.tsx","../src/components/DateInput.tsx","../src/components/DropDown.tsx","../src/components/SearchDropdown.tsx","../src/utils/formatFileSize.ts","../src/components/FileInput.tsx","../src/components/RadioInput.tsx","../src/components/CheckboxInput.tsx","../src/components/Stepper.tsx","../src/components/Tabs.tsx","../src/components/Loader.tsx","../src/components/Footnote.tsx","../src/components/DotsMenu.tsx","../src/components/AsteriskNote.tsx","../src/components/Badge.tsx","../src/components/UploadZone.tsx","../src/components/CollapsibleSource.tsx","../src/components/PlaidTile.tsx","../src/components/TermsDocument.tsx","../src/components/UnderwritingStatus.tsx","../src/components/paymentMethodStyles.ts","../src/components/PlaidMethodCard.tsx","../src/components/ManualMethodCard.tsx","../src/components/AchVerificationConsent.tsx","../src/utils/environment.ts","../src/components/EnvironmentTag.tsx","../src/preview/Preview.tsx"],"sourcesContent":["import type { Theme } from './types';\n\n/**\n * The default OatFi theme. Ported from the embeds' `theme/types.js`, using the\n * more complete shape (with `colors.default`) from `mf-remote-react`, extended\n * with `buttonPrimary` / `buttonSecondary` so partner button colors have a home.\n *\n * `buttonPrimary` / `buttonSecondary` default to `primary` / `secondary` here so\n * an unbranded theme renders identically to the original embeds.\n */\nexport const defaultTheme: Theme = {\n colors: {\n primary: '#111827',\n secondary: '#6B7280',\n accent: '#2563EB',\n background: '#FFFFFF',\n surface: '#F3F4F6',\n border: '#E5E7EB',\n success: '#10B981',\n default: '#6B7280',\n warning: '#F59E42',\n error: '#EF4444',\n buttonPrimary: '#111827',\n buttonSecondary: '#6B7280',\n },\n border: {\n radius: '8px',\n width: '1px',\n color: '#E5E7EB',\n },\n typography: {\n fontFamily: '\"Geist\", \"Geist Sans\", Arial, sans-serif',\n },\n};\n","import { defaultTheme } from './defaultTheme';\nimport type { Branding, Theme } from './types';\n\nconst toPx = (value: number): string => `${value}px`;\n\n/**\n * Map partner `Branding` onto the full internal `Theme`.\n *\n * Pure and total: any missing field falls back to `defaultTheme`. Note that\n * `colors.primary` / `colors.secondary` are NOT partner-configurable — they\n * stay at the theme defaults; only the button colors, border, and font can be\n * branded.\n */\nexport function mergeBranding(branding?: Branding): Theme {\n const b = branding ?? {};\n\n return {\n ...defaultTheme,\n colors: {\n ...defaultTheme.colors,\n buttonPrimary: b.primaryButtonColor ?? defaultTheme.colors.buttonPrimary,\n buttonSecondary: b.secondaryButtonColor ?? defaultTheme.colors.buttonSecondary,\n },\n border: {\n ...defaultTheme.border,\n radius: b.borderRadius != null ? toPx(b.borderRadius) : defaultTheme.border.radius,\n width: b.borderWidth != null ? toPx(b.borderWidth) : defaultTheme.border.width,\n },\n typography: {\n ...defaultTheme.typography,\n fontFamily: b.fontFamily ?? defaultTheme.typography.fontFamily,\n },\n };\n}\n","import { createTheme, type Theme as MuiTheme } from '@mui/material/styles';\nimport type { Theme } from './types';\n\n/**\n * Build a MUI theme from our internal `Theme` so MUI-based primitives read the\n * same tokens as styled-components ones. Ported from the embeds'\n * `MuiThemeProvider.js`, typed and driven by the merged theme.\n */\nexport function buildMuiTheme(theme: Theme): MuiTheme {\n const { colors, border, typography } = theme;\n\n return createTheme({\n palette: {\n primary: {\n main: colors.accent,\n contrastText: colors.background,\n },\n secondary: {\n main: colors.secondary,\n },\n error: {\n main: colors.error,\n },\n warning: {\n main: colors.warning,\n },\n success: {\n main: colors.success,\n },\n background: {\n default: colors.background,\n paper: colors.surface,\n },\n text: {\n primary: colors.primary,\n secondary: colors.secondary,\n },\n },\n typography: {\n fontFamily: typography.fontFamily,\n fontSize: 14,\n },\n shape: {\n borderRadius: parseInt(border.radius, 10),\n },\n components: {\n MuiFormControlLabel: {\n styleOverrides: {\n label: {\n fontSize: '12px',\n fontWeight: 400,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundColor: colors.background,\n border: `${border.width} solid ${border.color}`,\n },\n },\n defaultProps: {\n elevation: 0,\n },\n },\n MuiLink: {\n styleOverrides: {\n root: {\n cursor: 'pointer',\n fontSize: '16px',\n fontWeight: 600,\n fontFamily: typography.fontFamily,\n },\n },\n },\n MuiTextField: {\n styleOverrides: {\n root: {\n '& .MuiOutlinedInput-root': {\n '& fieldset': {\n borderColor: border.color,\n borderWidth: border.width,\n },\n '&:hover fieldset': {\n borderColor: colors.accent,\n },\n '&.Mui-focused fieldset': {\n borderColor: colors.accent,\n },\n '&.Mui-error fieldset': {\n borderColor: colors.error,\n },\n },\n '& .MuiInputLabel-root, & .MuiFormLabel-root, & .MuiInputLabel-formControl': {\n color: colors.secondary,\n fontSize: '14px',\n '&.Mui-focused': {\n color: colors.accent,\n },\n '&.Mui-error': {\n color: colors.error,\n },\n },\n '& .MuiInputBase-input': {\n fontSize: 14,\n color: colors.primary,\n '&::placeholder': {\n color: colors.secondary,\n opacity: 1,\n },\n },\n },\n },\n },\n MuiSelect: {\n styleOverrides: {\n select: {\n fontSize: 14,\n },\n },\n },\n MuiInputBase: {\n styleOverrides: {\n root: {\n fontSize: 14,\n '& input[type=\"date\"]::-webkit-calendar-picker-indicator': {\n display: 'none',\n },\n '& .Mui-error': {\n color: colors.error,\n },\n '& input[type=\"date\"]::-webkit-inner-spin-button': {\n display: 'none',\n },\n '& input[type=\"date\"]::-webkit-clear-button': {\n display: 'none',\n },\n },\n },\n },\n MuiFormControl: {\n styleOverrides: {\n root: {\n '& input::-webkit-datetime-edit': {\n color: colors.secondary,\n },\n '& .Mui-error': {\n input: {\n color: colors.error,\n },\n label: {\n color: colors.error,\n },\n },\n },\n },\n },\n },\n });\n}\n","import React, { useMemo } from 'react';\nimport { ThemeProvider as MuiThemeProviderBase } from '@mui/material/styles';\nimport { ThemeProvider as StyledThemeProvider, createGlobalStyle } from 'styled-components';\nimport { mergeBranding } from './mergeBranding';\nimport { buildMuiTheme } from './muiTheme';\nimport type { Branding } from './types';\n\nconst GlobalStyle = createGlobalStyle`\n * {\n font-family: ${({ theme }) => theme.typography.fontFamily};\n box-sizing: border-box;\n }\n`;\n\nexport interface ThemeProviderProps {\n /**\n * Partner branding overrides. Any omitted field falls back to `defaultTheme`.\n * Omit entirely to render with the default OatFi theme.\n */\n branding?: Branding;\n children?: React.ReactNode;\n}\n\n/**\n * Single theming entry point for @oatfi/ui consumers.\n *\n * Resolves `branding` into the full internal `Theme` and provides it through\n * BOTH styled-components and MUI, so a primitive built on either gets identical\n * tokens. Context cannot cross the embed loader's script boundary, so this is\n * mounted *inside* each consumer's React root.\n */\nexport function ThemeProvider({ branding, children }: ThemeProviderProps) {\n const theme = useMemo(() => mergeBranding(branding), [branding]);\n const muiTheme = useMemo(() => buildMuiTheme(theme), [theme]);\n\n return (\n <StyledThemeProvider theme={theme}>\n <GlobalStyle />\n <MuiThemeProviderBase theme={muiTheme}>{children}</MuiThemeProviderBase>\n </StyledThemeProvider>\n );\n}\n","import { useTheme as useStyledTheme } from 'styled-components';\nimport type { Theme } from './types';\n\n/**\n * Read the resolved @oatfi/ui theme. Typed re-export of styled-components'\n * `useTheme` (typing comes from the `DefaultTheme` augmentation in `styled.d.ts`).\n */\nexport const useTheme = (): Theme => useStyledTheme();\n","import styled from 'styled-components';\n\n/**\n * Input style bases, ported from\n * `onboarding-flow-general/src/components/globals/shared/InputStyles.js`.\n *\n * The dropdown chevron SVG fill was a hardcoded `#6B7280`; it now reads from\n * `theme.colors.default` (whose default value is `#6B7280`, so unbranded\n * appearance is unchanged) and is URL-encoded into the `data:` URI.\n */\n\nconst chevronDataUri = (color: string): string =>\n `data:image/svg+xml;utf8,<svg fill=\"${encodeURIComponent(\n color,\n )}\" height=\"20\" viewBox=\"0 0 20 20\" width=\"20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.293 7.293a1 1 0 011.414 0L10 8.586l1.293-1.293a1 1 0 111.414 1.414l-2 2a1 1 0 01-1.414 0l-2-2a1 1 0 010-1.414z\"/></svg>`;\n\nexport const InputWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 5px;\n width: 100%;\n\n span.icon {\n position: absolute;\n right: 1rem;\n top: 51%;\n display: flex;\n align-items: center;\n cursor: pointer;\n z-index: 1;\n }\n\n &.Werror span.icon {\n top: 42%;\n }\n`;\n\nexport const InputLabel = styled.label`\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n font-weight: 500;\n margin-bottom: 4px;\n`;\n\nexport const InputError = styled.span`\n color: ${({ theme }) => theme.colors.error};\n font-size: 12px;\n font-weight: 500;\n margin-top: -4px;\n padding-left: 5px;\n`;\n\nexport const BaseInput = styled.input`\n display: flex;\n padding: 9px;\n border: ${({ theme }) => theme.border.width} solid ${({ theme }) => theme.border.color};\n border-radius: ${({ theme }) => theme.border.radius};\n background: ${({ theme }) => theme.colors.background};\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n font-family: ${({ theme }) => theme.typography.fontFamily};\n outline: none;\n transition: border-color 0.2s;\n\n &[type='date'] {\n &::-webkit-calendar-picker-indicator {\n opacity: 0;\n pointer-events: none;\n }\n &::-moz-calendar-picker-indicator {\n opacity: 0;\n pointer-events: none;\n }\n &::-ms-input-placeholder {\n opacity: 0;\n pointer-events: none;\n }\n }\n\n &:focus {\n border-color: ${({ theme }) => theme.colors.accent};\n }\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.secondary};\n opacity: 1;\n }\n\n &.error {\n border-color: ${({ theme }) => theme.colors.error};\n color: ${({ theme }) => theme.colors.error};\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.error};\n opacity: 1;\n }\n }\n`;\n\nexport const SelectInput = styled(BaseInput)`\n appearance: none;\n background-image: url('${({ theme }) => chevronDataUri(theme.colors.default)}');\n background-repeat: no-repeat;\n background-position: right 12px center;\n background-size: 20px 20px;\n`;\n\nexport const DropdownContainer = styled.div`\n position: relative;\n width: 100%;\n`;\n\nexport const AutocompleteInput = styled(BaseInput)`\n cursor: pointer;\n background-image: url('${({ theme }) => chevronDataUri(theme.colors.default)}');\n background-repeat: no-repeat;\n background-position: right 12px center;\n background-size: 20px 20px;\n width: 100%;\n`;\n\nexport const DropdownList = styled.div<{ $isOpen?: boolean }>`\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n max-height: 200px;\n overflow-y: auto;\n background: ${({ theme }) => theme.colors.background};\n border: ${({ theme }) => theme.border.width} solid ${({ theme }) => theme.border.color};\n border-top: none;\n border-radius: 0 0 ${({ theme }) => theme.border.radius} ${({ theme }) => theme.border.radius};\n z-index: 1000;\n display: ${({ $isOpen }) => ($isOpen ? 'block' : 'none')};\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n`;\n\nexport const DropdownItem = styled.div<{ $isSelected?: boolean }>`\n padding: 8px 12px;\n cursor: pointer;\n background: ${({ $isSelected, theme }) => ($isSelected ? theme.colors.accent + '20' : 'transparent')};\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n border-bottom: 1px solid ${({ theme }) => theme.border.color};\n\n &:hover {\n background: ${({ theme }) => theme.colors.accent + '10'};\n }\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nexport const NoResults = styled.div`\n padding: 12px;\n text-align: center;\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 14px;\n`;\n","import styled from 'styled-components';\n\n/**\n * Layout, typography, and button style bases, ported from\n * `onboarding-flow-general/src/components/globals/shared/General.js`.\n *\n * The Button hover (`${theme.colors.primary}CC`) and `Body*` link colors\n * (`theme.colors.primary`) already read from the theme in the source — the\n * `#0e0e0e` / `#0000FF` literals the rollout plan flagged were from an older\n * revision and are not present here.\n */\n\nexport const H3 = styled.h3`\n font-size: 18px;\n font-weight: 500;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const H2 = styled.h2`\n font-size: 24px;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const H1 = styled.h1`\n font-size: 32px;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const Body100 = styled.p`\n font-size: 12px;\n font-weight: 400;\n text-align: justify;\n color: ${({ color, theme }) => (color === 'secondary' ? theme.colors.secondary : theme.colors.primary)};\n a {\n font-size: 12px;\n color: ${({ theme }) => theme.colors.primary};\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n }\n &.bold {\n font-weight: 600;\n }\n span {\n font-weight: 400;\n }\n`;\n\nexport const Body200 = styled.p`\n font-size: 14px;\n font-weight: 400;\n text-align: justify;\n color: ${({ color, theme }) => (color === 'secondary' ? theme.colors.secondary : theme.colors.primary)};\n a {\n font-size: 14px;\n color: ${({ theme }) => theme.colors.primary};\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n }\n &.bold {\n font-weight: 600;\n }\n span {\n font-weight: 400;\n }\n`;\n\nexport const Body400 = styled.p`\n font-size: 11px;\n font-weight: 400;\n text-align: justify;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const Container = styled.div`\n padding: 2rem;\n border-radius: ${({ theme }) => theme.border.radius};\n background-color: ${({ theme }) => theme.colors.background};\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n max-width: 1000px;\n margin: 0 auto;\n`;\n\nexport const Content = styled.div`\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 1rem;\n &.space-between {\n justify-content: space-between;\n }\n`;\n\nexport const Button = styled.button`\n align-items: center;\n background-color: ${({ theme }) => theme.colors.buttonPrimary};\n border: none;\n border-radius: ${({ theme }) => theme.border.radius};\n color: ${({ theme }) => theme.colors.background};\n cursor: pointer;\n display: flex;\n font-size: 14px;\n gap: 0.25rem;\n justify-content: center;\n margin-top: 1rem;\n padding: 0.75rem 1.5rem;\n transition: background-color 0.2s ease;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.35;\n }\n\n &:hover {\n background-color: ${({ theme }) => `${theme.colors.buttonPrimary}CC`};\n }\n\n &.secondary {\n background-color: ${({ theme }) => theme.colors.background};\n color: ${({ theme }) => theme.colors.buttonSecondary};\n border: 1px solid ${({ theme }) => theme.colors.buttonSecondary};\n &:hover {\n background-color: ${({ theme }) => `${theme.colors.buttonSecondary}10`};\n }\n }\n\n &.dashed {\n background-color: transparent;\n color: ${({ theme }) => theme.colors.secondary};\n border: 1px dashed ${({ theme }) => theme.colors.border};\n &:hover {\n background-color: ${({ theme }) => theme.colors.surface};\n border-color: ${({ theme }) => theme.colors.secondary};\n color: ${({ theme }) => theme.colors.primary};\n }\n }\n\n &.link {\n background-color: transparent;\n color: ${({ theme }) => theme.colors.accent};\n border: none;\n cursor: pointer;\n margin: 0;\n }\n &.link:hover {\n color: ${({ theme }) => theme.colors.accent};\n text-decoration: underline;\n }\n &.no-padding {\n padding: 0;\n }\n`;\n\nexport const FlexRowWrapper = styled.div`\n display: flex;\n flex-direction: row;\n .flex-row-item {\n flex: 1;\n }\n`;\n\nexport const FlexColumnWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 10px;\n`;\n\nexport const DetailsContainer = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 5px;\n justify-content: space-between;\n button {\n color: ${({ theme }) => theme.colors.primary};\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n }\n`;\n\nexport const DetailRow = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`;\n\nexport const DetailElement = styled.div`\n flex: 1;\n p {\n margin: 5px 0 0 0;\n }\n`;\n\nexport const TermsList = styled.ul`\n list-style-type: disc;\n padding-left: 20px;\n p {\n margin: 0;\n }\n`;\n\nexport const StatusTag = styled.div`\n padding: 4px 8px;\n border-radius: 4px;\n color: ${({ theme }) => theme.colors.background};\n display: flex;\n flex-direction: row;\n align-items: center;\n text-transform: capitalize;\n &.small {\n font-size: 10px;\n padding: 2px 4px;\n }\n &.success {\n background-color: ${({ theme }) => theme.colors.success};\n }\n &.error {\n background-color: ${({ theme }) => theme.colors.error};\n }\n &.warning {\n background-color: ${({ theme }) => theme.colors.warning};\n }\n`;\n","import styled from 'styled-components';\n\n/**\n * Form layout style bases, ported from\n * `onboarding-flow-general/src/components/globals/shared/FormStyles.js`.\n *\n * The source's `Body100` is intentionally NOT re-exported here — the richer\n * `Body100` from `layout.ts` (with `color` prop + link styling) is the single\n * canonical version.\n */\n\nexport const Form = styled.form`\n max-width: 1000px;\n margin: 0 auto;\n`;\n\nexport const FormTitle = styled.h2`\n font-size: 1.5rem;\n font-weight: 600;\n margin-bottom: 2rem;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const FormSubtitle = styled.h3`\n font-size: 14px;\n font-weight: 500;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const FormRow = styled.div`\n display: flex;\n gap: 1rem;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const FormColumn = styled.div`\n flex: 1;\n min-width: 200px;\n`;\n\nexport const FormCheckboxLabel = styled.label`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n color: ${({ theme }) => theme.colors.primary};\n font-size: 0.875rem;\n\n input[type='checkbox'] {\n margin: 0;\n }\n`;\n\nexport const FormActions = styled.div`\n margin-top: 2rem;\n display: flex;\n justify-content: flex-end;\n`;\n","import React from 'react';\nimport { TextField } from '@mui/material';\n\nexport interface TextInputProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n type?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n /** Native `name` on the underlying input (form semantics + by-name selectors). */\n name?: string;\n /** Rendered as `data-testid` on the input element for e2e selection. */\n testId?: string;\n /** For `type=\"number\"`: maximum numeric value. Otherwise: maximum input length. */\n max?: number;\n /** Strip numeric characters as the user types. */\n ignoreNumbers?: boolean;\n /** Strip non-numeric characters as the user types. */\n onlyNumbers?: boolean;\n}\n\n/**\n * Text field built on MUI `TextField`. Presentational: emits the raw string\n * value via `onChange`. Ported from `onboarding-flow-general` (MUI v7\n * `slotProps` replace the deprecated `inputProps`); `disabled` is new.\n */\nexport function TextInput({\n label,\n error,\n value,\n onChange,\n placeholder,\n type = 'text',\n required = false,\n disabled = false,\n className,\n name,\n testId,\n max,\n ignoreNumbers = false,\n onlyNumbers = false,\n}: TextInputProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n let newValue = e.target.value;\n\n if (ignoreNumbers) {\n newValue = newValue.replace(/[0-9]/g, '');\n }\n\n if (onlyNumbers) {\n newValue = newValue.replace(/[^0-9]/g, '');\n }\n\n if (type === 'number' && max !== undefined && newValue !== '') {\n const numericValue = parseFloat(newValue);\n if (!isNaN(numericValue) && numericValue > max) {\n return; // Don't update if value exceeds max\n }\n }\n\n onChange(newValue);\n };\n\n return (\n <TextField\n label={label}\n value={value}\n onChange={handleChange}\n placeholder={placeholder}\n type={type}\n required={required}\n disabled={disabled}\n className={className}\n name={name}\n error={!!error}\n helperText={error}\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n slotProps={{\n htmlInput: {\n ...(type === 'number' ? { max } : { maxLength: max }),\n 'data-testid': testId,\n },\n }}\n />\n );\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface EmailInputProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\n/** Email field — a `TextInput` pinned to `type=\"email\"`. */\nexport function EmailInput({ placeholder = 'Enter email address', ...props }: EmailInputProps) {\n return <TextInput {...props} type=\"email\" placeholder={placeholder} />;\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface PhoneInputProps {\n label?: string;\n error?: string;\n /** Raw digits (up to 10). Displayed masked as `(XXX) XXX-XXXX`. */\n value: string;\n onChange: (rawValue: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst formatPhoneNumber = (value: string): string => {\n if (!value) return '';\n const phoneNumber = value.replace(/\\D/g, '');\n if (phoneNumber.length <= 3) {\n return phoneNumber;\n } else if (phoneNumber.length <= 6) {\n return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(3)}`;\n }\n return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(3, 6)}-${phoneNumber.slice(6, 10)}`;\n};\n\n/** US phone field. Masks display as `(XXX) XXX-XXXX`; emits raw digits. */\nexport function PhoneInput({\n placeholder = '(XXX) XXX-XXXX',\n value,\n onChange,\n ...props\n}: PhoneInputProps) {\n const handleChange = (maskedValue: string) => {\n onChange(maskedValue.replace(/\\D/g, '').slice(0, 10));\n };\n\n return (\n <TextInput\n {...props}\n value={formatPhoneNumber(value)}\n onChange={handleChange}\n placeholder={placeholder}\n max={14}\n />\n );\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface SSNInputProps {\n label?: string;\n error?: string;\n /** Raw value; displayed masked as `XXX-XX-XXXX`. */\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst formatDisplayValue = (rawValue: string): string => {\n if (!rawValue) return '';\n const digits = rawValue.replace(/[^\\d]/g, '');\n if (digits.length <= 3) return digits;\n if (digits.length <= 5) return `${digits.slice(0, 3)}-${digits.slice(3)}`;\n return `${digits.slice(0, 3)}-${digits.slice(3, 5)}-${digits.slice(5, 9)}`;\n};\n\n/** SSN field. Masks display as `XXX-XX-XXXX`; emits the masked value. */\nexport function SSNInput({\n placeholder = 'XXX-XX-XXXX',\n value,\n onChange,\n ...props\n}: SSNInputProps) {\n return (\n <TextInput\n {...props}\n value={formatDisplayValue(value)}\n onChange={onChange}\n placeholder={placeholder}\n max={11}\n />\n );\n}\n","import React from 'react';\nimport { TextInput } from './TextInput';\n\nexport interface TaxIdInputProps {\n label?: string;\n error?: string;\n /** Raw value; displayed masked as `XX-XXXXXXX` (EIN). */\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst formatDisplayValue = (rawValue: string): string => {\n if (!rawValue) return '';\n const digits = rawValue.replace(/[^\\d]/g, '');\n if (digits.length <= 2) return digits;\n if (digits.length <= 9) return `${digits.slice(0, 2)}-${digits.slice(2)}`;\n return `${digits.slice(0, 2)}-${digits.slice(2, 9)}`;\n};\n\n/** EIN / Tax ID field. Masks display as `XX-XXXXXXX`; emits the masked value. */\nexport function TaxIdInput({\n placeholder = 'XX-XXXXXXX',\n value,\n onChange,\n ...props\n}: TaxIdInputProps) {\n return (\n <TextInput\n {...props}\n value={formatDisplayValue(value)}\n onChange={onChange}\n placeholder={placeholder}\n max={10}\n />\n );\n}\n","import React, { useId } from 'react';\nimport styled from 'styled-components';\nimport { BaseInput, InputError, InputLabel, InputWrapper } from '../styles/inputs';\n\nexport interface CurrencyInputProps {\n label?: string;\n /** Raw numeric string (no `$`/commas); displayed with thousand separators. */\n value: string;\n onChange: (rawValue: string) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n error?: string;\n className?: string;\n name?: string;\n testId?: string;\n}\n\nconst CurrencyInputWrapper = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst CurrencyPrefix = styled.span<{ $hasError?: boolean }>`\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: ${({ theme, $hasError }) => ($hasError ? theme.colors.error : theme.colors.primary)};\n font-size: 14px;\n font-family: ${({ theme }) => theme.typography.fontFamily};\n pointer-events: none;\n z-index: 1;\n`;\n\nconst StyledBaseInput = styled(BaseInput)`\n padding-left: calc(15px + 1ch);\n width: 100%;\n`;\n\nconst formatDisplayValue = (rawValue: string): string => {\n if (!rawValue || rawValue === '') return '';\n\n const numericValue = rawValue.toString().replace(/[^\\d.]/g, '');\n if (numericValue === '' || numericValue === '.') return '';\n\n const parts = numericValue.split('.');\n const integerPart = parts[0] || '';\n const decimalPart = parts[1] || '';\n\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n const formattedDecimal = decimalPart.slice(0, 2);\n\n if (formattedDecimal) {\n return `${formattedInteger}.${formattedDecimal}`;\n } else if (numericValue.includes('.')) {\n return `${formattedInteger}.`;\n }\n return `${formattedInteger}`;\n};\n\nconst extractRawValue = (formattedValue: string): string => {\n if (!formattedValue) return '';\n const raw = formattedValue.replace(/[^\\d.]/g, '');\n const parts = raw.split('.');\n if (parts.length > 2) {\n return parts[0] + '.' + parts.slice(1).join('');\n }\n return raw;\n};\n\n/**\n * Currency field with a `$` prefix and thousand separators. Built on the shared\n * `BaseInput` style; emits the raw numeric string via `onChange`.\n */\nexport function CurrencyInput({\n label,\n value,\n onChange,\n placeholder,\n required,\n disabled,\n error,\n className,\n name,\n testId,\n}: CurrencyInputProps) {\n const reactId = useId();\n const inputId = `${reactId}-input`;\n const errorId = `${reactId}-error`;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(extractRawValue(e.target.value));\n };\n\n return (\n <InputWrapper className={className}>\n {label && <InputLabel htmlFor={inputId}>{label}</InputLabel>}\n <CurrencyInputWrapper>\n <CurrencyPrefix $hasError={!!error}>$</CurrencyPrefix>\n <StyledBaseInput\n id={inputId}\n name={name}\n type=\"text\"\n value={formatDisplayValue(value || '')}\n onChange={handleChange}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n className={error ? 'error' : ''}\n aria-invalid={!!error}\n aria-describedby={error ? errorId : undefined}\n data-testid={testId}\n />\n </CurrencyInputWrapper>\n {error && <InputError id={errorId}>{error}</InputError>}\n </InputWrapper>\n );\n}\n","import React, { useRef } from 'react';\nimport { IconButton, InputAdornment, TextField } from '@mui/material';\nimport CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\n\nexport interface DateInputProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n /** ISO date string (`YYYY-MM-DD`) bounds. */\n min?: string;\n max?: string;\n}\n\n/**\n * Native date field (MUI `TextField type=\"date\"`) with a calendar-icon trigger.\n * Ported from `onboarding-flow-general`; the `react-feather` icon is replaced\n * by `@mui/icons-material` (a peer dep) and `inputProps`/`InputProps` by\n * MUI v7 `slotProps`.\n */\nexport function DateInput({\n label,\n error,\n value,\n onChange,\n required = false,\n disabled = false,\n className,\n name,\n testId,\n min,\n max,\n}: DateInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleIconClick = () => {\n const input = inputRef.current;\n if (!input) return;\n if (typeof input.showPicker === 'function') {\n input.showPicker();\n } else {\n input.focus();\n }\n };\n\n return (\n <TextField\n label={label}\n value={value}\n onChange={e => onChange(e.target.value)}\n type=\"date\"\n required={required}\n disabled={disabled}\n className={className}\n name={name}\n error={!!error}\n helperText={error}\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n inputRef={inputRef}\n slotProps={{\n inputLabel: { shrink: true },\n htmlInput: { min, max, 'data-testid': testId },\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={handleIconClick}\n edge=\"end\"\n aria-label=\"Open date picker\"\n size=\"small\"\n disabled={disabled}\n >\n <CalendarMonthIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n />\n );\n}\n","import React, { useId } from 'react';\nimport {\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n Select,\n type SelectChangeEvent,\n} from '@mui/material';\nimport type { Option } from './types';\n\nexport interface DropDownProps {\n label?: string;\n error?: string;\n value: string;\n onChange: (value: string) => void;\n options?: Option[];\n required?: boolean;\n disabled?: boolean;\n className?: string;\n name?: string;\n testId?: string;\n}\n\n/** Single-select dropdown built on MUI `Select`. */\nexport function DropDown({\n label,\n error,\n value,\n onChange,\n options = [],\n required = false,\n disabled = false,\n className,\n name,\n testId,\n}: DropDownProps) {\n const reactId = useId();\n const labelId = `${reactId}-label`;\n const selectId = `${reactId}-select`;\n\n // SelectDisplayProps is typed as HTMLAttributes, which omits `data-*`; widen it.\n const selectDisplayProps: React.HTMLAttributes<HTMLDivElement> & { 'data-testid'?: string } = {\n 'data-testid': testId,\n };\n\n const handleChange = (event: SelectChangeEvent) => {\n onChange(event.target.value);\n };\n\n return (\n <FormControl\n fullWidth\n error={!!error}\n required={required}\n disabled={disabled}\n className={className}\n size=\"small\"\n >\n {label && (\n <InputLabel id={labelId} sx={{ fontSize: '14px' }}>\n {label}\n </InputLabel>\n )}\n <Select\n labelId={label ? labelId : undefined}\n id={selectId}\n name={name}\n value={value || ''}\n onChange={handleChange}\n label={label}\n variant=\"outlined\"\n SelectDisplayProps={selectDisplayProps}\n >\n {options.map((opt, index) => (\n <MenuItem key={opt.value + index} value={opt.value}>\n {opt.label}\n </MenuItem>\n ))}\n </Select>\n {error && <FormHelperText>{error}</FormHelperText>}\n </FormControl>\n );\n}\n","import React from 'react';\nimport { Autocomplete, TextField } from '@mui/material';\nimport type { Option } from './types';\n\nexport interface SearchDropdownProps {\n label?: string;\n error?: string;\n /** Selected `value`(s). A comma-joined string is also accepted in multiple mode. */\n value: string | string[];\n onChange: (value: string | string[]) => void;\n options: Option[];\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n multiple?: boolean;\n noResultsMessage?: string;\n name?: string;\n testId?: string;\n}\n\n/** Searchable single/multi select built on MUI `Autocomplete`. */\nexport function SearchDropdown({\n label,\n error,\n value,\n onChange,\n options,\n placeholder = 'Search...',\n required = false,\n disabled = false,\n className,\n multiple = false,\n noResultsMessage = 'No results found',\n name,\n testId,\n}: SearchDropdownProps) {\n const getSelectedOption = (): Option | Option[] | null => {\n if (!value) return multiple ? [] : null;\n if (multiple) {\n const selectedValues = Array.isArray(value) ? value : value.split(',').filter(v => v.trim());\n return options.filter(opt => selectedValues.includes(opt.value));\n }\n const stringValue = Array.isArray(value) ? value[0] : value;\n return options.find(opt => opt.value === stringValue) || null;\n };\n\n const handleChange = (_event: React.SyntheticEvent, newValue: Option | Option[] | null) => {\n if (multiple) {\n onChange(Array.isArray(newValue) ? newValue.map(opt => opt.value) : []);\n } else {\n onChange(newValue && !Array.isArray(newValue) ? newValue.value : '');\n }\n };\n\n return (\n <Autocomplete<Option, boolean, false, false>\n options={options}\n value={getSelectedOption()}\n onChange={handleChange}\n getOptionLabel={option => option.label}\n isOptionEqualToValue={(option, val) => option.value === val.value}\n data-testid={testId}\n renderInput={params => (\n <TextField\n {...params}\n label={label}\n placeholder={placeholder}\n required={required}\n error={!!error}\n helperText={error}\n className={className}\n variant=\"outlined\"\n name={name}\n />\n )}\n noOptionsText={noResultsMessage}\n size=\"small\"\n fullWidth\n multiple={multiple}\n disabled={disabled}\n clearOnBlur={false}\n selectOnFocus\n autoHighlight\n />\n );\n}\n","/**\n * Human-readable byte size, to two decimal places.\n *\n * Shared by `FileInput` and `UploadZone` so the two agree. Note the version that\n * lived in `onboarding-flow-general/src/utils/formatters.js` topped out at `MB`\n * and returned `undefined` as the unit for anything a gigabyte or larger; this\n * one carries `GB`.\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n","import React, { useId, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { InputError, InputLabel } from '../styles/inputs';\nimport { Body200 } from '../styles/layout';\nimport { formatFileSize } from '../utils/formatFileSize';\n\nexport interface FileInputProps {\n label?: string;\n error?: string;\n value?: File | null;\n /** Called with the chosen file (or null) and a validation error (or null). */\n onChange: (file: File | null, error: string | null) => void;\n placeholder?: string;\n /** Comma-separated extension list, e.g. `.png,.jpg,.pdf`. */\n accept?: string;\n /** Max size in bytes. */\n maxSize?: number;\n required?: boolean;\n className?: string;\n showRequirements?: boolean;\n name?: string;\n testId?: string;\n}\n\nconst FileInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`;\n\nconst FileInputWrapper = styled.div<{ $hasError?: boolean; $dragOver?: boolean }>`\n position: relative;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: border-color 0.2s;\n border-color: ${({ theme, $dragOver }) => ($dragOver ? theme.colors.accent : undefined)};\n background-color: ${({ theme, $dragOver }) => ($dragOver ? theme.colors.surface : undefined)};\n\n &:hover {\n border-color: ${({ theme, $hasError }) => ($hasError ? theme.colors.error : theme.colors.accent)};\n }\n\n &:focus-within {\n border-color: ${({ theme, $hasError }) => ($hasError ? theme.colors.error : theme.colors.accent)};\n }\n`;\n\nconst HiddenFileInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst UploadButton = styled.button`\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.primary};\n text-decoration: underline;\n cursor: pointer;\n font-size: 14px;\n padding: 0;\n display: flex;\n align-items: center;\n gap: 4px;\n\n &:hover {\n color: ${({ theme }) => theme.colors.accent};\n }\n`;\n\nconst FileName = styled.span`\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n flex: 1;\n`;\n\nconst UploadIcon = styled.span`\n color: ${({ theme }) => theme.colors.primary};\n display: flex;\n align-items: center;\n`;\n\nconst FileSize = styled.span`\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 12px;\n`;\n\nconst ClearButton = styled.button`\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.secondary};\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n\n &:hover {\n color: ${({ theme }) => theme.colors.error};\n background-color: ${({ theme }) => theme.colors.error}20;\n }\n`;\n\nconst FileRequirements = styled.div`\n margin-top: 8px;\n padding: 8px 12px;\n background: ${({ theme }) => theme.colors.background};\n border: 1px solid ${({ theme }) => theme.border.color};\n border-radius: ${({ theme }) => theme.border.radius};\n`;\n\n/**\n * File upload with click + drag-and-drop, extension/size validation, and a\n * requirements hint. Emits `(file, error)` — both nullable. Ported from\n * `onboarding-flow-general`; `react-feather` icons replaced by\n * `@mui/icons-material`, and the `dragOver`/`hasError` style props made transient.\n */\nexport function FileInput({\n label,\n error,\n value,\n onChange,\n placeholder = 'Upload document',\n accept = '.png,.jpg,.jpeg,.pdf',\n maxSize = 10 * 1024 * 1024,\n required = false,\n className,\n showRequirements = true,\n name,\n testId,\n}: FileInputProps) {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const reactId = useId();\n const inputId = `${reactId}-input`;\n const errorId = `${reactId}-error`;\n const requirementsId = `${reactId}-requirements`;\n const describedBy = [error ? errorId : null, showRequirements ? requirementsId : null]\n .filter(Boolean)\n .join(' ');\n\n const validateFile = (file: File): string | null => {\n const validTypes = accept.split(',').map(type => type.trim().toLowerCase());\n const fileExtension = '.' + (file.name.split('.').pop() ?? '').toLowerCase();\n\n if (!validTypes.includes(fileExtension)) {\n return `Invalid file type. Accepted types: ${accept}`;\n }\n if (file.size > maxSize) {\n return `File size too large. Maximum size: ${formatFileSize(maxSize)}`;\n }\n return null;\n };\n\n const handleFileSelect = (file: File) => {\n const validationError = validateFile(file);\n if (validationError) {\n onChange(null, validationError);\n return;\n }\n onChange(file, null);\n };\n\n const handleClick = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) handleFileSelect(file);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n const file = e.dataTransfer.files?.[0];\n if (file) handleFileSelect(file);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null, null);\n if (fileInputRef.current) fileInputRef.current.value = '';\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n };\n\n const acceptedTypesText = accept\n .split(',')\n .map(type => type.trim().toUpperCase().replace('.', ''))\n .join(', ');\n\n return (\n <FileInputContainer className={className}>\n {label && <InputLabel htmlFor={inputId}>{label}</InputLabel>}\n\n <FileInputWrapper\n $hasError={!!error}\n $dragOver={dragOver}\n role=\"button\"\n tabIndex={0}\n aria-label={label ? `${label}. ${placeholder}` : placeholder}\n aria-invalid={!!error}\n aria-describedby={describedBy || undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <UploadIcon>\n <CloudUploadIcon fontSize=\"small\" />\n </UploadIcon>\n <UploadButton as=\"span\">{placeholder}</UploadButton>\n\n {value && (\n <>\n <FileName>\n {value.name}\n <FileSize> ({formatFileSize(value.size)})</FileSize>\n </FileName>\n <ClearButton\n type=\"button\"\n onClick={handleClear}\n title=\"Clear file\"\n aria-label=\"Clear file\"\n >\n <CloseIcon fontSize=\"small\" />\n </ClearButton>\n </>\n )}\n\n <HiddenFileInput\n ref={fileInputRef}\n id={inputId}\n name={name}\n type=\"file\"\n accept={accept}\n onChange={handleFileChange}\n required={required}\n tabIndex={-1}\n data-testid={testId}\n />\n </FileInputWrapper>\n\n {error && <InputError id={errorId}>{error}</InputError>}\n\n {showRequirements && (\n <FileRequirements id={requirementsId}>\n <Body200>\n File types accepted are {acceptedTypesText}, with a max. size of{' '}\n {formatFileSize(maxSize)}\n </Body200>\n </FileRequirements>\n )}\n </FileInputContainer>\n );\n}\n","import styled from 'styled-components';\n\n/**\n * Themed radio button (a styled native `<input type=\"radio\">`). The fill grows\n * from the theme border color to `colors.primary` when checked.\n */\nexport const RadioInput = styled.input.attrs({ type: 'radio' })`\n appearance: none;\n width: 20px;\n height: 20px;\n border: 2px solid ${({ theme }) => theme.border.color};\n border-radius: 50%;\n margin: 0 0.5rem 0 0;\n flex-shrink: 0;\n cursor: pointer;\n position: relative;\n transition: all 0.2s;\n\n &:checked {\n border-color: ${({ theme }) => theme.colors.primary};\n border-width: 6px;\n }\n\n &:hover {\n border-color: ${({ theme }) => theme.colors.primary};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n","import styled from 'styled-components';\n\n/**\n * Themed checkbox (a styled native `<input type=\"checkbox\">`) with a CSS\n * checkmark. Fill uses `colors.primary` when checked.\n */\nexport const CheckboxInput = styled.input.attrs({ type: 'checkbox' })`\n appearance: none;\n width: 20px;\n height: 20px;\n border: 2px solid ${({ theme }) => theme.border.color};\n border-radius: 4px;\n margin: 0 0.5rem 0 0;\n flex-shrink: 0;\n cursor: pointer;\n position: relative;\n transition: all 0.2s;\n\n &:checked {\n border-color: ${({ theme }) => theme.colors.primary};\n background-color: ${({ theme }) => theme.colors.primary};\n }\n\n &:checked::after {\n content: '';\n position: absolute;\n left: 5px;\n top: 1px;\n width: 6px;\n height: 11px;\n border: solid white;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n &:hover {\n border-color: ${({ theme }) => theme.colors.primary};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface StepperStep {\n label: string;\n component?: React.ReactNode;\n}\n\nexport interface StepperProps {\n steps: StepperStep[];\n currentStep: number;\n className?: string;\n testId?: string;\n}\n\nconst StepperContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n`;\n\nconst StepsContainer = styled.div`\n display: flex;\n justify-content: space-between;\n position: relative;\n`;\n\nconst StepContent = styled.div``;\n\nconst Step = styled.div<{ $active?: boolean; $completed?: boolean }>`\n position: relative;\n z-index: 2;\n background: ${({ theme }) => theme.colors.background};\n padding: 0 1rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n transition: all 0.2s ease-in-out;\n padding-bottom: 1rem;\n flex: 1;\n border-bottom: 1px solid;\n border-color: ${({ theme, $active, $completed }) =>\n $active || $completed ? theme.colors.primary : theme.colors.border};\n`;\n\nconst StepNumber = styled.div<{ $active?: boolean; $completed?: boolean }>`\n width: 2rem;\n height: 2rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${({ theme, $active, $completed }) =>\n $completed ? theme.colors.primary : $active ? 'white' : theme.colors.surface};\n color: ${({ theme, $active, $completed }) =>\n $completed ? theme.colors.background : $active ? theme.colors.primary : theme.colors.secondary};\n font-weight: 500;\n transition: all 0.2s ease-in-out;\n border: 2px solid\n ${({ theme, $active, $completed }) =>\n $active || $completed ? theme.colors.primary : theme.colors.border};\n`;\n\nconst StepLabel = styled.span<{ $active?: boolean }>`\n color: ${({ theme, $active }) => ($active ? theme.colors.primary : theme.colors.secondary)};\n font-size: 0.875rem;\n font-weight: ${({ $active }) => ($active ? 500 : 400)};\n transition: all 0.2s ease-in-out;\n text-align: center;\n white-space: nowrap;\n`;\n\n/** Horizontal stepper with a number/label per step and the active step's content below. */\nexport function Stepper({ steps, currentStep, className, testId }: StepperProps) {\n return (\n <StepperContainer className={className} data-testid={testId}>\n <StepsContainer>\n {steps.map((step, index) => {\n const active = index === currentStep;\n const completed = index < currentStep;\n return (\n <Step\n key={'stepper-step-' + index}\n $active={active}\n $completed={completed}\n aria-current={active ? 'step' : undefined}\n >\n <StepNumber $active={active} $completed={completed}>\n {index + 1}\n </StepNumber>\n <StepLabel $active={active}>{step.label}</StepLabel>\n </Step>\n );\n })}\n </StepsContainer>\n <StepContent>{steps[currentStep]?.component}</StepContent>\n </StepperContainer>\n );\n}\n","import React, { useId, useState } from 'react';\nimport styled from 'styled-components';\n\nexport interface Tab {\n name: string;\n content?: React.ReactNode;\n}\n\nexport interface TabsProps {\n tabs?: Tab[];\n defaultActiveTab?: number;\n className?: string;\n onTabChange?: (index: number) => void;\n testId?: string;\n}\n\nconst TabsContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst TabList = styled.div`\n display: flex;\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n margin-bottom: 1rem;\n`;\n\nconst TabButton = styled.button<{ $active?: boolean }>`\n background: none;\n border: none;\n padding: 0.75rem 1.5rem;\n cursor: pointer;\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({ theme, $active }) => ($active ? theme.colors.primary : theme.colors.secondary)};\n border-bottom: 2px solid ${({ theme, $active }) => ($active ? theme.colors.primary : 'transparent')};\n transition: all 0.2s ease-in-out;\n position: relative;\n\n &:hover {\n color: ${({ theme }) => theme.colors.primary};\n background-color: ${({ theme }) => theme.colors.surface};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.accent};\n outline-offset: -2px;\n }\n`;\n\nconst TabContent = styled.div`\n padding: 1rem 0;\n min-height: 100px;\n`;\n\n/**\n * Tabbed panel managing its own active-tab state. Implements the ARIA tabs\n * pattern (`tablist`/`tab`/`tabpanel` with id linkage) for accessibility.\n */\nexport function Tabs({\n tabs = [],\n defaultActiveTab = 0,\n className,\n onTabChange,\n testId,\n}: TabsProps) {\n const [activeTab, setActiveTab] = useState(defaultActiveTab);\n const baseId = useId();\n\n const handleTabClick = (index: number) => {\n setActiveTab(index);\n onTabChange?.(index);\n };\n\n if (!tabs || tabs.length === 0) {\n return null;\n }\n\n const tabId = (i: number) => `${baseId}-tab-${i}`;\n const panelId = (i: number) => `${baseId}-panel-${i}`;\n\n return (\n <TabsContainer className={className} data-testid={testId}>\n <TabList role=\"tablist\">\n {tabs.map((tab, index) => {\n const active = index === activeTab;\n return (\n <TabButton\n key={`tab-${index}`}\n id={tabId(index)}\n role=\"tab\"\n type=\"button\"\n $active={active}\n aria-selected={active}\n aria-controls={panelId(index)}\n tabIndex={active ? 0 : -1}\n onClick={() => handleTabClick(index)}\n >\n {tab.name}\n </TabButton>\n );\n })}\n </TabList>\n\n <TabContent role=\"tabpanel\" id={panelId(activeTab)} aria-labelledby={tabId(activeTab)}>\n {tabs[activeTab]?.content}\n </TabContent>\n </TabsContainer>\n );\n}\n","import React from 'react';\nimport { Box, CircularProgress } from '@mui/material';\n\nexport interface LoaderProps {\n className?: string;\n /** Spinner diameter in px. */\n size?: number;\n /** Accessible label announced to screen readers. */\n label?: string;\n testId?: string;\n}\n\n/** Centered indeterminate spinner (MUI `CircularProgress`). */\nexport function Loader({ className, size, label = 'Loading', testId }: LoaderProps) {\n return (\n <Box\n className={className}\n data-testid={testId}\n sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}\n >\n <CircularProgress size={size} aria-label={label} />\n </Box>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface FootnoteLink {\n label: string;\n href: string;\n}\n\nexport interface FootnoteProps {\n /** Optional small heading rendered above the text/links line. */\n title?: string;\n /** Lead-in text rendered before the links (e.g. \"Questions?\"). */\n text?: string;\n /** Links rendered inline after the text, separated by a middot. Open in a new tab. */\n links?: FootnoteLink[];\n className?: string;\n testId?: string;\n}\n\nconst Root = styled.footer`\n margin-top: 2rem;\n padding-top: 0.75rem;\n border-top: ${({ theme }) => `${theme.border.width} solid ${theme.colors.border}`};\n text-align: center;\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: 0.8125rem;\n line-height: 1.4;\n color: ${({ theme }) => theme.colors.secondary};\n`;\n\nconst Title = styled.p`\n margin: 0 0 0.25rem;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nconst Anchor = styled.a`\n color: ${({ theme }) => theme.colors.accent};\n text-decoration: none;\n\n &:hover,\n &:focus-visible {\n text-decoration: underline;\n }\n`;\n\n/**\n * Minimal footnote section for the bottom of a flow: optional title, lead-in\n * text, and inline links that open in a new tab.\n */\nexport function Footnote({ title, text, links = [], className, testId }: FootnoteProps) {\n return (\n <Root className={className} data-testid={testId}>\n {title && <Title>{title}</Title>}\n <p style={{ margin: 0 }}>\n {text && <>{text} </>}\n {links.map((link, index) => (\n <React.Fragment key={link.href}>\n {index > 0 && <> · </>}\n <Anchor href={link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n {link.label}\n </Anchor>\n </React.Fragment>\n ))}\n </p>\n </Root>\n );\n}\n","import React, { useId, useState } from 'react';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\n\nexport interface DotsMenuOption {\n label: string;\n action: () => void;\n}\n\nexport interface DotsMenuProps {\n options: DotsMenuOption[];\n iconSize?: 'small' | 'medium' | 'large';\n /** Accessible label for the trigger button. */\n ariaLabel?: string;\n testId?: string;\n}\n\n/**\n * Overflow (\"kebab\") menu: an icon button opening a list of actions. IDs are\n * generated with `useId()` so multiple instances on a page stay unique\n * (the source hardcoded a single id).\n */\nexport function DotsMenu({\n options,\n iconSize = 'medium',\n ariaLabel = 'more',\n testId,\n}: DotsMenuProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const baseId = useId();\n const buttonId = `${baseId}-button`;\n const menuId = `${baseId}-menu`;\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleOptionClick = (action: () => void) => {\n action();\n handleClose();\n };\n\n return (\n <>\n <IconButton\n aria-label={ariaLabel}\n id={buttonId}\n data-testid={testId}\n aria-controls={open ? menuId : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={handleClick}\n size={iconSize}\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id={menuId}\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n slotProps={{\n list: { 'aria-labelledby': buttonId },\n paper: { style: { maxHeight: 200, width: '20ch' } },\n }}\n >\n {options.map((option, idx) => (\n <MenuItem key={option.label + idx} onClick={() => handleOptionClick(option.action)}>\n {option.label}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n}\n","import styled from 'styled-components';\n\n/**\n * Accent asterisk marker, for annotating a label whose explanation appears in an\n * `AsteriskNote` below it. Render with `aria-hidden` — the note carries the\n * meaning, the mark is decoration.\n */\nexport const AsteriskMark = styled.sup`\n color: ${({ theme }) => theme.colors.accent};\n font-weight: 600;\n margin-left: 1px;\n font-size: 0.95em;\n`;\n\n/**\n * Muted italic helper text paired with an `AsteriskMark`. Use the `.asterisk`\n * class on a leading span to render the marker upright and accented inside the\n * italic run:\n *\n * ```tsx\n * <AsteriskNote>\n * <span className=\"asterisk\" aria-hidden=\"true\">*</span>\n * Provide Financial Statements to be approved for a higher credit limit.\n * </AsteriskNote>\n * ```\n *\n * Named `AsteriskNote` rather than `Footnote` deliberately: this package already\n * exports a `Footnote`, which is an entirely different thing — a page-bottom\n * `<footer>` with a title and links. The two were separate components sharing one\n * name across repos, which is how they drifted.\n *\n * All colours come from theme tokens, so partner white-labelling recolours both.\n */\nexport const AsteriskNote = styled.p`\n font-size: 12px;\n color: ${({ theme }) => theme.colors.secondary};\n margin: 14px 4px 0;\n line-height: 1.5;\n font-style: italic;\n\n .asterisk {\n font-style: normal;\n color: ${({ theme }) => theme.colors.accent};\n font-weight: 600;\n margin-right: 2px;\n }\n`;\n","import styled from 'styled-components';\n\nimport type { Theme } from '../theme';\n\n/**\n * `info` — accent-tinted, for a suggestion (\"Recommended\")\n * `success` — outlined green, for a confirmed state (\"Verified\")\n * `neutral` — outlined grey, for a plain source label (\"Via Plaid\")\n * `filled` — solid accent, for the one selected item in a set (\"Default\")\n */\nexport type BadgeVariant = 'info' | 'success' | 'neutral' | 'filled';\n\nconst background = (theme: Theme, variant?: BadgeVariant) => {\n if (variant === 'filled') return theme.colors.accent;\n if (variant === 'success' || variant === 'neutral') return theme.colors.background;\n return `${theme.colors.accent}14`;\n};\n\nconst foreground = (theme: Theme, variant?: BadgeVariant) => {\n if (variant === 'filled') return theme.colors.background;\n if (variant === 'success') return theme.colors.success;\n if (variant === 'neutral') return theme.colors.secondary;\n return theme.colors.accent;\n};\n\nconst outline = (theme: Theme, variant?: BadgeVariant) => {\n if (variant === 'success') return `1px solid ${theme.colors.success}`;\n if (variant === 'neutral') return `1px solid ${theme.colors.border}`;\n if (variant === 'filled') return `1px solid ${theme.colors.accent}`;\n return 'none';\n};\n\n/**\n * Small uppercase status pill.\n *\n * Overlaps `StatusTag` in role — both label a state in a few words — but they are\n * not interchangeable: `StatusTag` is a solid filled tag with capitalised text,\n * this is an uppercase letter-spaced pill. Both are in shipped, QA-approved UI, so\n * consolidating them would change screens rather than clean up code.\n *\n * The four variants exist because onboarding grew two separate `Badge`\n * components — one on the verification sources page, one on payment methods —\n * with the same name, different looks, and colliding variant names (that one's\n * unstyled default was this one's `neutral`, and its `default` was `filled`).\n * Callers should always pass `$variant` explicitly rather than relying on the\n * fallback.\n */\nexport const Badge = styled.span<{ $variant?: BadgeVariant }>`\n font-size: 10px;\n padding: 2px 8px;\n border-radius: 4px;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n white-space: nowrap;\n background: ${({ theme, $variant }) => background(theme, $variant)};\n color: ${({ theme, $variant }) => foreground(theme, $variant)};\n border: ${({ theme, $variant }) => outline(theme, $variant)};\n`;\n","import CloseIcon from '@mui/icons-material/Close';\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\nimport DescriptionIcon from '@mui/icons-material/Description';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport React, { useRef, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { formatFileSize } from '../utils/formatFileSize';\n\n/** An already-uploaded file, as returned by the API rather than a local `File`. */\nexport interface UploadedFile {\n id: string;\n fileName: string;\n fileSize: number;\n}\n\nexport interface UploadZoneProps {\n /** Comma-separated extension list, e.g. `.pdf,.xlsx`. */\n accept?: string;\n /** Requirements line under the drop target, e.g. \"PDF up to 25MB each\". */\n hint?: string;\n files?: UploadedFile[];\n /** Called with the raw `FileList` from the picker or a drop. */\n onAdd: (files: FileList) => void;\n onRemove: (id: string) => void;\n /** Ids currently being deleted — each shows a spinner instead of a remove button. */\n removingIds?: Set<string>;\n disabled?: boolean;\n inputId?: string;\n testId?: string;\n}\n\nconst Zone = styled.div<{ $dragging?: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n width: 100%;\n min-height: 100px;\n border: 1px dashed ${({ theme }) => theme.colors.border};\n border-radius: ${({ theme }) => theme.border.radius};\n padding: 16px;\n text-align: center;\n background: ${({ theme }) => theme.colors.surface};\n cursor: pointer;\n transition:\n border-color 0.15s ease,\n background 0.15s ease;\n\n ${({ $dragging, theme }) =>\n $dragging &&\n `\n border-color: ${theme.colors.accent};\n background: ${theme.colors.accent}14;\n `}\n\n &:hover {\n border-color: ${({ theme }) => theme.colors.accent};\n background: ${({ theme }) => `${theme.colors.accent}14`};\n }\n\n &:focus-visible {\n outline: none;\n border-color: ${({ theme }) => theme.colors.accent};\n box-shadow: 0 0 0 3px ${({ theme }) => `${theme.colors.accent}26`};\n }\n`;\n\nconst ZoneIcon = styled(CloudUploadIcon)`\n color: ${({ theme }) => theme.colors.secondary};\n`;\n\nconst ZoneText = styled.p`\n font-size: 13px;\n margin: 0;\n color: ${({ theme }) => theme.colors.primary};\n\n span {\n color: ${({ theme }) => theme.colors.accent};\n }\n`;\n\nconst ZoneHint = styled.p`\n font-size: 11px;\n color: ${({ theme }) => theme.colors.secondary};\n margin: 0;\n`;\n\nconst HiddenInput = styled.input`\n display: none;\n`;\n\nconst FileList = styled.div`\n margin-top: 10px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n`;\n\nconst FileItem = styled.div`\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n background: ${({ theme }) => theme.colors.background};\n border: 1px solid ${({ theme }) => theme.colors.border};\n border-radius: 4px;\n font-size: 13px;\n\n .file-icon {\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 18px;\n flex-shrink: 0;\n }\n\n .file-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ${({ theme }) => theme.colors.primary};\n }\n\n .file-size {\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 12px;\n flex-shrink: 0;\n }\n`;\n\nconst RemoveButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n background: transparent;\n color: ${({ theme }) => theme.colors.secondary};\n border-radius: 4px;\n cursor: pointer;\n flex-shrink: 0;\n transition:\n background 0.15s ease,\n color 0.15s ease;\n\n &:hover {\n background: ${({ theme }) => theme.colors.surface};\n color: ${({ theme }) => theme.colors.error};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n svg {\n font-size: 16px;\n }\n`;\n\n/**\n * Multi-file drop target with a list of what has already been uploaded.\n *\n * Distinct from `FileInput`, which is a single-file form field that validates and\n * emits `(file, error)`. This one accepts many files, reports nothing about\n * validity, and renders server-side state — the caller owns validation, upload\n * and deletion. Keyboard accessible: the zone is a `role=\"button\"` that opens the\n * picker on Enter or Space.\n */\nexport function UploadZone({\n accept,\n hint,\n files = [],\n onAdd,\n onRemove,\n removingIds,\n disabled = false,\n inputId,\n testId,\n}: UploadZoneProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n\n const openPicker = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openPicker();\n }\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files?.length) onAdd(event.target.files);\n // Reset so re-picking the same file still fires a change.\n event.target.value = '';\n };\n\n const handleDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragging(false);\n if (disabled) return;\n if (event.dataTransfer.files?.length) onAdd(event.dataTransfer.files);\n };\n\n return (\n <>\n <Zone\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n $dragging={dragging}\n onClick={openPicker}\n onKeyDown={handleKeyDown}\n onDragOver={event => {\n event.preventDefault();\n if (!disabled) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n >\n <HiddenInput\n id={inputId}\n ref={inputRef}\n type=\"file\"\n multiple\n accept={accept}\n disabled={disabled}\n onChange={handleChange}\n data-testid={testId}\n />\n <ZoneIcon fontSize=\"medium\" aria-hidden=\"true\" />\n <ZoneText>\n Drop files or <span>browse</span>\n </ZoneText>\n <ZoneHint>{hint}</ZoneHint>\n </Zone>\n\n {files.length > 0 && (\n <FileList>\n {files.map(file => {\n const isRemoving = removingIds?.has(file.id);\n\n return (\n <FileItem key={file.id}>\n <DescriptionIcon className=\"file-icon\" aria-hidden=\"true\" />\n <span className=\"file-name\">{file.fileName}</span>\n <span className=\"file-size\">{formatFileSize(file.fileSize)}</span>\n {isRemoving ? (\n <CircularProgress size={16} color=\"secondary\" />\n ) : (\n <RemoveButton\n type=\"button\"\n aria-label={`Remove ${file.fileName}`}\n disabled={disabled}\n onClick={() => onRemove(file.id)}\n >\n <CloseIcon aria-hidden=\"true\" />\n </RemoveButton>\n )}\n </FileItem>\n );\n })}\n </FileList>\n )}\n </>\n );\n}\n","import ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport React, { useId } from 'react';\nimport styled from 'styled-components';\n\nimport { FormSubtitle } from '../styles/forms';\nimport { Body100 } from '../styles/layout';\nimport { AsteriskMark, AsteriskNote } from './AsteriskNote';\n\nexport interface CollapsibleSourceProps {\n title: string;\n /** One-line description under the title. */\n desc?: string;\n /**\n * Optional asterisk note. Its presence adds an `AsteriskMark` to the title and\n * renders the note under the description.\n */\n note?: string;\n open?: boolean;\n onToggle?: () => void;\n children?: React.ReactNode;\n testId?: string;\n}\n\nconst Wrapper = styled.div<{ $open?: boolean }>`\n background: ${({ theme }) => theme.colors.background};\n border: 1px solid ${({ theme, $open }) => ($open ? theme.colors.secondary : theme.colors.border)};\n border-radius: ${({ theme }) => theme.border.radius};\n overflow: hidden;\n transition: border-color 0.15s ease;\n\n ${({ $open }) => $open && 'grid-column: 1 / -1;'}\n`;\n\nconst Summary = styled.button`\n width: 100%;\n text-align: left;\n cursor: pointer;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n background: transparent;\n border: none;\n transition: background 0.15s ease;\n\n &:hover {\n background: ${({ theme }) => theme.colors.surface};\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px ${({ theme }) => `${theme.colors.accent}40`};\n }\n`;\n\nconst SummaryText = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst Chevron = styled(ExpandMoreIcon)<{ $open?: boolean }>`\n color: ${({ theme }) => theme.colors.secondary};\n transition: transform 0.2s ease;\n transform: rotate(${({ $open }) => ($open ? '180deg' : '0deg')});\n flex-shrink: 0;\n`;\n\nconst Content = styled.div`\n padding: 12px 16px 14px;\n`;\n\n// Tighter top margin than a standalone AsteriskNote: here the note sits directly\n// under the description rather than at the foot of a section.\nconst Note = styled(AsteriskNote)`\n margin: 4px 0 0;\n`;\n\n/**\n * One expandable verification/upload source: a header row that toggles, with the\n * content revealed below. Only the open source is expanded, so a caller managing\n * several passes `open` and `onToggle` per source.\n *\n * Purely presentational — it owns no open state and knows nothing about what it\n * contains.\n */\nexport function CollapsibleSource({\n title,\n desc,\n note,\n open = false,\n onToggle,\n children,\n testId,\n}: CollapsibleSourceProps) {\n const contentId = useId();\n\n return (\n <Wrapper $open={open}>\n <Summary\n type=\"button\"\n aria-expanded={open}\n aria-controls={contentId}\n onClick={onToggle}\n data-testid={testId}\n >\n <SummaryText>\n <FormSubtitle style={{ margin: 0 }}>\n {title}\n {note ? <AsteriskMark aria-hidden=\"true\">*</AsteriskMark> : null}\n </FormSubtitle>\n {desc ? (\n <Body100 color=\"secondary\" style={{ margin: '2px 0 0' }}>\n {desc}\n </Body100>\n ) : null}\n {note ? (\n <Note>\n <span className=\"asterisk\" aria-hidden=\"true\">\n *\n </span>\n {note}\n </Note>\n ) : null}\n </SummaryText>\n <Chevron $open={open} aria-hidden=\"true\" />\n </Summary>\n {open && <Content id={contentId}>{children}</Content>}\n </Wrapper>\n );\n}\n","import LinkIcon from '@mui/icons-material/Link';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport { alpha, useTheme } from '@mui/material/styles';\nimport React from 'react';\n\nimport { FormSubtitle } from '../styles/forms';\nimport { Body100 } from '../styles/layout';\nimport { Badge } from './Badge';\n\n/** The subset of a Plaid connection this tile renders. */\nexport interface PlaidConnection {\n institution?: { name?: string } | null;\n accounts?: { mask?: string; accountMask?: string }[] | null;\n}\n\nexport interface PlaidTileProps {\n /** Null or undefined renders the unconnected state. */\n plaidData?: PlaidConnection | null;\n onConnect?: () => void;\n isConnecting?: boolean;\n /** Rendered as `data-testid` on the connect/reconnect button. */\n testId?: string;\n}\n\nconst maskOf = (plaidData?: PlaidConnection | null): string | null => {\n const account = plaidData?.accounts?.[0];\n return account?.mask || account?.accountMask || null;\n};\n\n/**\n * Bank-connection tile for Plaid: shows the connected institution and masked\n * account, or a prompt to connect.\n *\n * Styled through the MUI palette rather than styled-components theme tokens,\n * because it needs `alpha()` on the success colour. Both are driven by the same\n * partner branding via `buildMuiTheme`, so white-labelling still applies.\n */\nexport function PlaidTile({ plaidData, onConnect, isConnecting = false, testId }: PlaidTileProps) {\n const { palette, shape } = useTheme();\n const connected = Boolean(plaidData);\n const institutionName = plaidData?.institution?.name || 'Your bank';\n const mask = maskOf(plaidData);\n\n const accentColor = connected ? palette.success.dark : palette.primary.main;\n\n return (\n <Box\n component=\"section\"\n aria-labelledby=\"plaid-tile-title\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '14px',\n flexWrap: 'wrap',\n padding: '16px 18px',\n marginBottom: '14px',\n borderRadius: `${shape.borderRadius}px`,\n border: `1px solid ${accentColor}`,\n backgroundColor: connected ? alpha(palette.success.main, 0.08) : palette.background.default,\n transition: 'border-color 0.15s ease, background 0.15s ease',\n }}\n >\n <Box sx={{ flex: 1, minWidth: 220 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '10px', marginBottom: '2px' }}>\n <FormSubtitle id=\"plaid-tile-title\" style={{ margin: 0, fontWeight: 600 }}>\n {connected ? 'Connected via Plaid' : 'Connect via Plaid'}\n </FormSubtitle>\n <Badge $variant={connected ? 'success' : 'info'}>\n {connected ? 'Verified' : 'Recommended'}\n </Badge>\n </Box>\n {connected ? (\n <Body100 style={{ margin: 0, color: palette.success.dark, fontWeight: 500 }}>\n {institutionName}\n {mask ? ` ····${mask}` : ''}\n </Body100>\n ) : (\n <Body100 color=\"secondary\" style={{ margin: 0 }}>\n Securely link your bank in seconds. Best signal for fastest decisions.\n </Body100>\n )}\n </Box>\n\n {connected ? (\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"inherit\"\n type=\"button\"\n onClick={onConnect}\n disabled={isConnecting}\n data-testid={testId}\n startIcon={<RefreshIcon fontSize=\"small\" />}\n sx={{ flexShrink: 0, textTransform: 'none' }}\n >\n {isConnecting ? 'Connecting…' : 'Reconnect'}\n </Button>\n ) : (\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n type=\"button\"\n onClick={onConnect}\n disabled={isConnecting}\n data-testid={testId}\n startIcon={<LinkIcon fontSize=\"small\" />}\n sx={{ flexShrink: 0, textTransform: 'none' }}\n >\n {isConnecting ? 'Connecting…' : 'Connect bank account'}\n </Button>\n )}\n </Box>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface TermsDocumentProps {\n /**\n * **Already-sanitized** HTML. This component renders it with\n * `dangerouslySetInnerHTML` and does no sanitizing of its own — the caller owns\n * that, because sanitizing here would make DOMPurify a dependency of every\n * consumer of this package.\n *\n * Callers fetch terms as HTML from the API, decode entities, run DOMPurify, and\n * pass the result. Never pass anything that has not been through that.\n */\n html: string;\n className?: string;\n testId?: string;\n}\n\nconst Root = styled.div`\n background-color: ${({ theme }) => theme.colors.surface};\n border: 1px solid ${({ theme }) => theme.colors.border};\n border-radius: ${({ theme }) => theme.border.radius};\n padding: 1.5rem;\n overflow-y: auto;\n max-height: 400px;\n margin-bottom: 1rem;\n font-size: 14px;\n line-height: 1.6;\n`;\n\n/**\n * Scrollable panel for a terms or disclosure document.\n *\n * Note the background: onboarding's original read `theme.colors.paper`, which is\n * not a token in this theme, so it silently resolved to nothing and the panel had\n * no background at all. This uses `surface`, which is what it was reaching for.\n */\nexport function TermsDocument({ html, className, testId }: TermsDocumentProps) {\n return (\n <Root\n className={className}\n data-testid={testId}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n\n/** Right-aligned hint under an action, e.g. why a button is disabled. */\nexport const HelperText = styled.span`\n display: block;\n font-size: 12.5px;\n color: ${({ theme }) => theme.colors.secondary};\n text-align: right;\n margin-top: 0.5rem;\n`;\n","import CheckRoundedIcon from '@mui/icons-material/CheckRounded';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport React from 'react';\n\nimport { Body200, H3 } from '../styles/layout';\nimport { Loader } from './Loader';\n\n/**\n * Underwriting outcomes as the API reports them.\n *\n * The declined set is deliberately wide: `CLOSED_NO_DECISION`, `DECLINED`,\n * `DENIED`, `ERROR`, `MANUAL_REVIEW_DECLINED`, `N/A` and `REJECTED` all mean \"no\"\n * to a borrower and are shown identically. Anything unrecognised — including\n * `MANUAL_REVIEW`, `NOT_EXECUTED` and `null` — falls through to the manual-review\n * message rather than showing nothing, because an unknown status must never read\n * as approval.\n */\nexport type UnderwritingDecision =\n | 'PROCESSING'\n | 'APPROVED'\n | 'MANUAL_REVIEW'\n | 'MANUAL_REVIEW_DECLINED'\n | 'NOT_EXECUTED'\n | 'CLOSED_NO_DECISION'\n | 'DECLINED'\n | 'DENIED'\n | 'ERROR'\n | 'N/A'\n | 'REJECTED';\n\n/** How a borrower-facing surface should present an underwriting status. */\nexport type UnderwritingOutcome = 'processing' | 'approved' | 'declined' | 'review';\n\nconst DECLINED = new Set<string>([\n 'CLOSED_NO_DECISION',\n 'DECLINED',\n 'DENIED',\n 'ERROR',\n 'MANUAL_REVIEW_DECLINED',\n 'N/A',\n 'REJECTED',\n]);\n\n/**\n * The grouping `UnderwritingStatus` renders by, exported so other surfaces (the\n * servicing status summary) cannot drift from it. Unknown statuses are `review`.\n */\nexport function classifyUnderwritingStatus(status?: string | null): UnderwritingOutcome {\n if (status === 'PROCESSING') return 'processing';\n if (status === 'APPROVED') return 'approved';\n if (status && DECLINED.has(status)) return 'declined';\n return 'review';\n}\n\nexport interface UnderwritingStatusProps {\n status?: string | null;\n /**\n * Pre-formatted for display, e.g. `\"$50,000.00\"`. A string rather than a number\n * so currency formatting stays with the consumer — this package has no locale or\n * currency opinion. Omit to show approval without an amount.\n */\n creditLimit?: string | null;\n /** Rendered under the approved state, for follow-on actions. */\n children?: React.ReactNode;\n testId?: string;\n}\n\n/**\n * The borrower-facing result of underwriting: in progress, approved, declined, or\n * under manual review.\n *\n * Presentational only — it neither fetches nor polls. The caller owns the status\n * and re-renders this as it changes.\n */\nexport function UnderwritingStatus({\n status,\n creditLimit,\n children,\n testId,\n}: UnderwritingStatusProps) {\n const outcome = classifyUnderwritingStatus(status);\n\n if (outcome === 'processing') {\n return (\n <div data-testid={testId}>\n <H3>Your application is being reviewed</H3>\n <Stack width=\"100%\" alignItems=\"center\" gap=\"16px\">\n <Loader />\n <Body200>\n We are underwriting your business. This process can take a minute or two.\n </Body200>\n </Stack>\n </div>\n );\n }\n\n if (outcome === 'approved') {\n return (\n <div data-testid={testId}>\n <H3>Congrats!</H3>\n <Body200>\n You have been approved.\n {creditLimit ? <> Your credit limit is: {creditLimit}</> : null}\n </Body200>\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <CheckRoundedIcon color=\"success\" sx={{ fontSize: '5rem' }} />\n </Box>\n {children}\n </div>\n );\n }\n\n if (outcome === 'declined') {\n return (\n <div data-testid={testId}>\n <H3>Sorry, we cannot approve your application</H3>\n <Body200>\n We are sorry to inform you that we cannot approve your application. Please try again\n later.\n </Body200>\n </div>\n );\n }\n\n return (\n <div data-testid={testId}>\n <H3>Your application is being reviewed</H3>\n <Body200>\n We are reviewing your application and will reach out within 2 business days.\n </Body200>\n </div>\n );\n}\n","import styled, { css } from 'styled-components';\n\n/**\n * Layout for a payment-method row: a radio, a body, and a header with a title and\n * a trailing action.\n *\n * `$default` marks the selected method (accent border and tint); `$readonly` marks\n * one the borrower cannot edit here, such as an account managed through Plaid;\n * `$edited` marks one carrying changes that have not been saved yet.\n */\nexport const MethodCard = styled.div<{\n $default?: boolean;\n $readonly?: boolean;\n $edited?: boolean;\n}>`\n display: flex;\n gap: 12px;\n align-items: flex-start;\n padding: 14px 16px;\n margin-bottom: 10px;\n border-radius: ${({ theme }) => theme.border.radius};\n border: 1px solid\n ${({ theme, $default }) => ($default ? theme.colors.accent : theme.colors.border)};\n background: ${({ theme, $default, $readonly }) =>\n $default\n ? `${theme.colors.accent}14`\n : $readonly\n ? theme.colors.surface\n : theme.colors.background};\n transition:\n border-color 0.15s ease,\n background 0.15s ease;\n\n /**\n * The unsaved-edit bar. It thickens the left border rather than adding one, so\n * the padding gives back the 2px it takes and the card's contents do not shift\n * when it appears mid-keystroke. Declared last so it wins over the shorthand\n * above, including on a $default card that already has an accent border.\n */\n ${({ theme, $edited }) =>\n $edited &&\n css`\n border-left: 3px solid ${theme.colors.accent};\n padding-left: 14px;\n `}\n`;\n\nexport const MethodBody = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\n/** `$tight` for a card with no form fields under the header. */\nexport const MethodHeader = styled.div<{ $tight?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: ${({ $tight }) => ($tight ? '6px' : '12px')};\n`;\n\nexport const MethodTitle = styled.span`\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n font-size: 14px;\n font-weight: 600;\n color: ${({ theme }) => theme.colors.primary};\n`;\n\n/** Two-up field row that stacks on narrow screens. */\nexport const FieldsGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n\n @media (max-width: 540px) {\n grid-template-columns: 1fr;\n }\n`;\n\n/** Accent-tinted note with a leading icon slot. */\nexport const Banner = styled.div`\n display: flex;\n gap: 10px;\n align-items: flex-start;\n padding: 10px 14px;\n background: ${({ theme }) => `${theme.colors.accent}14`};\n border-left: 3px solid ${({ theme }) => theme.colors.accent};\n border-radius: ${({ theme }) => theme.border.radius};\n margin-bottom: 1.25rem;\n\n svg {\n color: ${({ theme }) => theme.colors.accent};\n flex-shrink: 0;\n margin-top: 1px;\n }\n\n p {\n font-size: 13px;\n color: ${({ theme }) => theme.colors.accent};\n margin: 0;\n line-height: 1.5;\n }\n`;\n\n/**\n * Footer row for a step's actions.\n *\n * `space-between` is for the two-part footer a stepped flow has — Back on the\n * left, status and the primary action on the right. A servicing screen that saves\n * in place has no Back, and space-between then drops its lone action on the left,\n * where it reads as the secondary half of a pair that isn't there. So a single\n * child is pushed to the right instead; two or more keep the split.\n */\nexport const FooterActions = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n margin-top: 1.25rem;\n flex-wrap: wrap;\n\n button {\n margin-top: 0;\n }\n\n > :only-child {\n margin-left: auto;\n }\n`;\n\nexport const FooterRight = styled.div`\n display: flex;\n align-items: center;\n gap: 14px;\n`;\n","import LockIcon from '@mui/icons-material/Lock';\nimport React from 'react';\n\nimport { Body200 } from '../styles/layout';\nimport { Badge } from './Badge';\nimport { MethodBody, MethodCard, MethodHeader, MethodTitle } from './paymentMethodStyles';\nimport { RadioInput } from './RadioInput';\n\nexport interface PlaidMethodCardProps {\n plaidData?: {\n institution?: { name?: string } | null;\n accounts?: { mask?: string; accountMask?: string }[] | null;\n } | null;\n isDefault?: boolean;\n onSelectDefault?: () => void;\n /** Distinguishes the radio group when several cards share a page. */\n name?: string;\n testId?: string;\n}\n\nconst maskOf = (plaidData?: PlaidMethodCardProps['plaidData']): string | null => {\n const account = plaidData?.accounts?.[0];\n return account?.mask || account?.accountMask || null;\n};\n\n/**\n * Read-only payment method sourced from Plaid. It cannot be edited or removed\n * here — disconnecting happens wherever the bank connection is managed — but it\n * can still be chosen as the default.\n *\n * Routing is deliberately absent: Plaid Link metadata exposes an account mask but\n * no routing number client-side.\n */\nexport function PlaidMethodCard({\n plaidData,\n isDefault = false,\n onSelectDefault,\n name = 'default-method',\n testId,\n}: PlaidMethodCardProps) {\n const institutionName = plaidData?.institution?.name || 'Your bank';\n const mask = maskOf(plaidData);\n\n return (\n <MethodCard as=\"label\" htmlFor=\"default-plaid\" $default={isDefault} $readonly>\n <RadioInput\n type=\"radio\"\n id=\"default-plaid\"\n name={name}\n checked={isDefault}\n onChange={onSelectDefault}\n data-testid={testId}\n />\n <MethodBody>\n <MethodHeader $tight>\n <MethodTitle>\n {institutionName}\n <Badge $variant=\"neutral\">Via Plaid</Badge>\n {isDefault && <Badge $variant=\"filled\">Default</Badge>}\n </MethodTitle>\n <LockIcon fontSize=\"small\" titleAccess=\"Managed via Plaid\" />\n </MethodHeader>\n <Body200 color=\"secondary\" style={{ margin: 0 }}>\n {mask ? `Account ····${mask}` : 'Connected account'}\n </Body200>\n </MethodBody>\n </MethodCard>\n );\n}\n","import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\nimport IconButton from '@mui/material/IconButton';\nimport React from 'react';\n\nimport { Body200 } from '../styles/layout';\nimport { Badge } from './Badge';\nimport {\n FieldsGrid,\n MethodBody,\n MethodCard,\n MethodHeader,\n MethodTitle,\n} from './paymentMethodStyles';\nimport { RadioInput } from './RadioInput';\nimport { TextInput } from './TextInput';\n\nexport interface ManualMethodValue {\n id: string;\n account: string;\n routing: string;\n}\n\n/**\n * Where the row stands against what is stored.\n *\n * `saved` — on file and unchanged. `edited` — on file, with changes not yet\n * written. A row the borrower has just added is neither: omit the prop.\n *\n * Only `edited` is marked. `saved` deliberately renders the same as a new row for\n * now — the card stays quiet until the borrower actually changes something — but\n * it remains a distinct value because the caller already tells the two apart, and\n * marking a stored row is a change of copy here rather than a change of API.\n *\n * The caller owns the comparison, because only it knows what was loaded.\n */\nexport type ManualMethodStatus = 'saved' | 'edited';\n\nexport interface ManualMethodCardProps {\n /** Zero-based; rendered as \"Account {index + 1}\". */\n index: number;\n value: ManualMethodValue;\n isDefault?: boolean;\n /**\n * Whether this account is already stored, and whether it has been changed\n * since. Omit for a row the borrower has just added. Only `edited` is marked.\n */\n status?: ManualMethodStatus;\n /** Disables removal when this is the last remaining method. */\n trashDisabled?: boolean;\n disabled?: boolean;\n accountError?: string;\n routingError?: string;\n onSelectDefault?: () => void;\n onChangeField: (field: 'account' | 'routing', next: string) => void;\n onBlurField: (field: 'account' | 'routing') => void;\n onRemove?: () => void;\n name?: string;\n}\n\n/**\n * Editable manual payment method — account and routing number.\n *\n * Validation is the caller's: pass `accountError`/`routingError` and use\n * `onBlurField` to decide when to surface them. Onboarding shows errors on blur\n * and never while typing, which is worth keeping.\n *\n * A stored account is an ordinary editable field here — nothing about the inputs\n * says the borrower is overwriting something real. `status` is what says it, and\n * it is worth passing wherever saved accounts are rendered.\n */\nexport function ManualMethodCard({\n index,\n value,\n isDefault = false,\n status,\n trashDisabled = false,\n disabled = false,\n accountError,\n routingError,\n onSelectDefault,\n onChangeField,\n onBlurField,\n onRemove,\n name = 'default-method',\n}: ManualMethodCardProps) {\n const radioId = `default-${value.id}`;\n\n return (\n <MethodCard $default={isDefault} $edited={status === 'edited'}>\n <RadioInput\n type=\"radio\"\n id={radioId}\n name={name}\n checked={isDefault}\n onChange={onSelectDefault}\n disabled={disabled}\n />\n <MethodBody>\n <MethodHeader>\n <MethodTitle>\n <Body200 as=\"label\" htmlFor={radioId} style={{ margin: 0, cursor: 'pointer' }}>\n Account {index + 1}\n </Body200>\n {isDefault && <Badge $variant=\"filled\">Default</Badge>}\n {status === 'edited' && <Badge $variant=\"info\">Unsaved</Badge>}\n </MethodTitle>\n <IconButton\n size=\"small\"\n type=\"button\"\n onClick={onRemove}\n disabled={disabled || trashDisabled}\n aria-label=\"Remove this account\"\n title={trashDisabled ? 'At least one account is required' : 'Remove this account'}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </MethodHeader>\n <FieldsGrid>\n <div onBlur={() => onBlurField('account')}>\n <TextInput\n label=\"Account number\"\n placeholder=\"Account number\"\n value={value.account}\n onChange={next => onChangeField('account', next)}\n error={accountError}\n disabled={disabled}\n onlyNumbers\n />\n </div>\n <div onBlur={() => onBlurField('routing')}>\n <TextInput\n label=\"Routing number\"\n placeholder=\"Routing number\"\n value={value.routing}\n onChange={next => onChangeField('routing', next)}\n error={routingError}\n disabled={disabled}\n onlyNumbers\n />\n </div>\n </FieldsGrid>\n </MethodBody>\n </MethodCard>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { Body100 } from '../styles/layout';\nimport { CheckboxInput } from './CheckboxInput';\n\nexport interface AchVerificationConsentProps {\n consentGiven?: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n /** Label for the action the consent is attached to. Defaults to \"Continue\". */\n actionLabel?: string;\n testId?: string;\n}\n\nconst ConsentRow = styled.label`\n display: flex;\n align-items: center;\n padding: 12px 14px;\n background: ${({ theme }) => theme.colors.surface};\n border-radius: ${({ theme }) => theme.border.radius};\n margin: 1.25rem 0;\n cursor: pointer;\n gap: 10px;\n`;\n\n/**\n * ACH verification consent and PATRIOT Act acknowledgement, required before\n * payment methods can be saved.\n *\n * `actionLabel` exists because the copy names the button the borrower is about to\n * press — \"By clicking Continue…\" is right in a stepped flow, but a servicing\n * screen that saves in place needs its own verb.\n */\nexport function AchVerificationConsent({\n consentGiven = false,\n onChange,\n disabled = false,\n actionLabel = 'Continue',\n testId,\n}: AchVerificationConsentProps) {\n return (\n <ConsentRow>\n <CheckboxInput\n type=\"checkbox\"\n checked={consentGiven}\n onChange={event => onChange(event.target.checked)}\n disabled={disabled}\n data-testid={testId}\n />\n <Body100 style={{ margin: 0 }}>\n By clicking {actionLabel}, I agree to the{' '}\n <a\n href=\"https://oatfi.com/payment-method-verification-consent\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n payment method verification\n </a>{' '}\n and acknowledge the{' '}\n <a\n href=\"https://oatfi.com/usa-patriot-act-disclosure-page\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n USA PATRIOT Act disclosure\n </a>\n .\n </Body100>\n </ConsentRow>\n );\n}\n","/**\n * Environment chip logic for embedded components. Framework-free so the\n * React-18 bundle (`mf-remote-react`), which can't take this package, can copy\n * it verbatim.\n *\n * Ported from `oatfi-app-shell/src/lib/environment.ts`. The difference: a\n * dashboard has one environment, a component has two — the Vercel project the\n * bundle was built for (`bundleEnv`) and the API the host points it at\n * (`apiEnv`, the `environment` attribute). They render as one chip that splits\n * when they disagree.\n */\n\nexport type EnvironmentName = 'production' | 'staging' | 'qa' | 'development' | 'local';\n\nexport interface EnvironmentTagInfo {\n /** Short chip text, e.g. \"STG\". */\n readonly label: string;\n /** Full name, for the tooltip. */\n readonly name: string;\n /** Chip fill. */\n readonly fill: string;\n /** Text color on the fill. */\n readonly ink: string;\n}\n\nconst AMBER = '#F59E0B';\nconst CYAN = '#22D3EE';\nconst GREY = '#9CA3AF';\nconst GREEN = '#22C55E';\nconst WHITE = '#FFFFFF';\nconst INK = '#141312';\nconst RED = '#DC2626';\n\n/** Border of a split (mismatch) chip. */\nexport const ENVIRONMENT_MISMATCH_BORDER = RED;\n\n/**\n * Fixed diagnostic colors, deliberately outside the theme: the chip must look\n * the same under every partner's branding. Production only ever shows inside a\n * split chip — prod/prod renders nothing.\n */\nexport const ENVIRONMENT_TAGS: Readonly<Record<EnvironmentName, EnvironmentTagInfo>> =\n Object.freeze({\n production: Object.freeze({ label: 'PROD', name: 'Production', fill: WHITE, ink: INK }),\n staging: Object.freeze({ label: 'STG', name: 'Staging', fill: AMBER, ink: INK }),\n qa: Object.freeze({ label: 'QA', name: 'QA', fill: CYAN, ink: INK }),\n development: Object.freeze({ label: 'DEV', name: 'Development', fill: GREY, ink: INK }),\n local: Object.freeze({ label: 'LOCAL', name: 'Local', fill: GREEN, ink: INK }),\n });\n\n/** A bundle env that is set but not one we know — shown inside a warning chip. */\nexport const UNKNOWN_ENVIRONMENT_TAG: EnvironmentTagInfo = Object.freeze({\n label: '?',\n name: 'Unknown',\n fill: WHITE,\n ink: INK,\n});\n\n/** An API env that is set but not one we know — the component is calling the wrong API. */\nexport const INVALID_API_TAG: EnvironmentTagInfo = Object.freeze({\n label: '?',\n name: 'Unknown',\n fill: RED,\n ink: WHITE,\n});\n\n// A Map, not an object, so prototype keys like `constructor` never match.\nconst ALIASES = new Map<string, EnvironmentName>([\n ['production', 'production'],\n ['prod', 'production'],\n ['staging', 'staging'],\n ['stg', 'staging'],\n ['qa', 'qa'],\n ['development', 'development'],\n ['dev', 'development'],\n ['local', 'local'],\n]);\n\n/** Canonical environment name, or null when unset or not one we know — an\n * unrecognised value marks nothing rather than guessing. */\nexport const normalizeEnvironment = (value?: string | null): EnvironmentName | null => {\n const key = value?.trim().toLowerCase();\n return (key && ALIASES.get(key)) || null;\n};\n\nexport type ComponentEnvTag =\n /** Bundle and API agree (or the bundle env is unset). */\n | { kind: 'single'; tag: EnvironmentTagInfo }\n /** A local dev-server bundle on a non-prod API: informational, not a warning. */\n | { kind: 'local'; api: EnvironmentTagInfo }\n /** Bundle and API disagree, or the bundle env is unrecognised (`bundleEnv: null`): a warning. */\n | {\n kind: 'split';\n bundleEnv: EnvironmentName | null;\n bundle: EnvironmentTagInfo;\n api: EnvironmentTagInfo;\n }\n /** The API env is set but unrecognised, so the component calls the wrong API (or none). */\n | { kind: 'invalid-api'; apiEnv: string };\n\nexport interface ComponentEnv {\n /** The Vercel project the bundle was built for (`OATFI_ENV`), `local` under a dev server. */\n bundleEnv?: string | null;\n /** The host's `environment` attribute — which API the component calls. */\n apiEnv?: string | null;\n}\n\n/**\n * What the chip shows. Unset envs stay quiet; set-but-unrecognised ones are flagged:\n * - API env unset → nothing (it means production)\n * - API env unrecognised → `invalid-api`, an error (the host is calling the wrong API)\n * - bundle env unset → treated as a match on the API env\n * - bundle env unrecognised → a warning split against the API env\n * - local bundle → informational `LOCAL | API X` on a non-prod API, a single `LOCAL` on\n * the local API, and a warning against prod\n * - prod/prod → nothing\n */\nexport const resolveComponentEnvTag = ({\n bundleEnv,\n apiEnv,\n}: ComponentEnv): ComponentEnvTag | null => {\n const apiValue = apiEnv?.trim();\n if (!apiValue) return null;\n const api = normalizeEnvironment(apiValue);\n if (!api) return { kind: 'invalid-api', apiEnv: apiValue };\n\n const bundleValue = bundleEnv?.trim();\n const bundle = normalizeEnvironment(bundleValue);\n const apiTag = ENVIRONMENT_TAGS[api];\n\n if (bundleValue && !bundle) {\n return { kind: 'split', bundleEnv: null, bundle: UNKNOWN_ENVIRONMENT_TAG, api: apiTag };\n }\n if (bundle === 'local' && api !== 'local' && api !== 'production') {\n return { kind: 'local', api: apiTag };\n }\n if (bundle && bundle !== api) {\n return { kind: 'split', bundleEnv: bundle, bundle: ENVIRONMENT_TAGS[bundle], api: apiTag };\n }\n if (api === 'production') return null;\n return { kind: 'single', tag: apiTag };\n};\n\nexport interface ComponentBuildInfo extends ComponentEnv {\n /** Git ref the bundle was built from, e.g. `dev12` or `v1.4.0`. */\n ref?: string | null;\n /** Short commit SHA. */\n sha?: string | null;\n}\n\n/** Canonical name, `unknown` when unset, or `unrecognised:<raw>` so the bad value shows. */\nconst environmentDebug = (value?: string | null): string => {\n const env = normalizeEnvironment(value);\n if (env) return env;\n const raw = value?.trim();\n return raw ? `unrecognised:${raw}` : 'unknown';\n};\n\n/** One-line debug string for the console: `bundle=development api=staging ref=dev12 sha=abc1234`. */\nexport const describeComponentEnv = ({ bundleEnv, apiEnv, ref, sha }: ComponentBuildInfo): string =>\n [\n `bundle=${environmentDebug(bundleEnv)}`,\n `api=${environmentDebug(apiEnv)}`,\n `ref=${ref || 'unknown'}`,\n `sha=${sha || 'unknown'}`,\n ].join(' ');\n\n/** Full name, `Unknown` when unset, or the raw value quoted when unrecognised. */\nconst environmentTitle = (value?: string | null): string => {\n const env = normalizeEnvironment(value);\n if (env) return ENVIRONMENT_TAGS[env].name;\n const raw = value?.trim();\n return raw ? `Unrecognised \"${raw}\"` : 'Unknown';\n};\n\n/** Tooltip text: `Bundle: Development (dev12, abc1234) · API: Staging`. */\nexport const describeComponentEnvTitle = ({\n bundleEnv,\n apiEnv,\n ref,\n sha,\n}: ComponentBuildInfo): string => {\n const build = [ref, sha].filter(Boolean).join(', ');\n return `Bundle: ${environmentTitle(bundleEnv)}${build ? ` (${build})` : ''} · API: ${environmentTitle(apiEnv)}`;\n};\n","import type { CSSProperties, FC, ReactNode } from 'react';\n\nimport {\n ENVIRONMENT_MISMATCH_BORDER,\n ENVIRONMENT_TAGS,\n INVALID_API_TAG,\n describeComponentEnvTitle,\n resolveComponentEnvTag,\n type EnvironmentTagInfo,\n} from '../utils/environment';\n\nexport interface EnvironmentTagProps {\n /** The Vercel project the bundle was built for (`OATFI_ENV`), `local` under a dev server. */\n bundleEnv?: string;\n /** The host's `environment` attribute. */\n apiEnv?: string;\n /** Git ref the bundle was built from, for the tooltip. */\n buildRef?: string;\n /** Short commit SHA, for the tooltip. */\n buildSha?: string;\n size?: 'small' | 'medium';\n /** `data-testid` on the chip. Override when several embeds share a page. */\n testId?: string;\n}\n\nconst FONT_SIZE = { small: 9, medium: 11 } as const;\nconst PADDING_X = { small: 6, medium: 8 } as const;\n\n// Set explicitly: the chip renders inside partner pages and shadow roots, and is\n// deliberately not themed — it must read the same under every partner's branding.\nconst FONT_FAMILY =\n 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif';\n\nconst BORDER_WIDTH = 1.5;\n\nconst base = (size: 'small' | 'medium'): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'stretch',\n boxSizing: 'border-box',\n fontFamily: FONT_FAMILY,\n fontSize: FONT_SIZE[size],\n fontWeight: 800,\n letterSpacing: '0.1em',\n lineHeight: 1.4,\n whiteSpace: 'nowrap',\n borderRadius: 0,\n});\n\nconst half = (tag: EnvironmentTagInfo, label: string, size: 'small' | 'medium') => (\n <span style={{ padding: `2px ${PADDING_X[size]}px`, background: tag.fill, color: tag.ink }}>\n {label}\n </span>\n);\n\n/**\n * The environment chip for embedded components. Shows which API the component\n * calls and, when it differs, which Vercel project the bundle came from:\n * `DEV` on a match, `LOCAL | API DEV` for a local dev server, `BUNDLE DEV | API STG`\n * (red-bordered) on a mismatch, a red `API ?` for an unrecognised API env, and\n * nothing in production/production. See `resolveComponentEnvTag` for the rules.\n */\nexport const EnvironmentTag: FC<EnvironmentTagProps> = ({\n bundleEnv,\n apiEnv,\n buildRef,\n buildSha,\n size = 'small',\n testId = 'oatfi-env-tag',\n}) => {\n const result = resolveComponentEnvTag({ bundleEnv, apiEnv });\n if (!result) return null;\n\n const title = describeComponentEnvTitle({ bundleEnv, apiEnv, ref: buildRef, sha: buildSha });\n\n const chip = (border: string, children: ReactNode) => (\n <span\n role=\"note\"\n aria-label={`Environment: ${title}`}\n data-testid={testId}\n data-env-kind={result.kind}\n title={title}\n style={{ ...base(size), border: `${BORDER_WIDTH}px solid ${border}` }}\n >\n {children}\n </span>\n );\n\n switch (result.kind) {\n case 'single':\n return chip(result.tag.fill, half(result.tag, result.tag.label, size));\n case 'local':\n return chip(\n ENVIRONMENT_TAGS.local.fill,\n <>\n {half(ENVIRONMENT_TAGS.local, ENVIRONMENT_TAGS.local.label, size)}\n {half(result.api, `API ${result.api.label}`, size)}\n </>,\n );\n case 'invalid-api':\n return chip(\n INVALID_API_TAG.fill,\n half(INVALID_API_TAG, `API ${INVALID_API_TAG.label}`, size),\n );\n case 'split': {\n const bundleLabel = result.bundleEnv === 'local' ? 'LOCAL' : `BUNDLE ${result.bundle.label}`;\n return chip(\n ENVIRONMENT_MISMATCH_BORDER,\n <>\n {half(result.bundle, bundleLabel, size)}\n {half(result.api, `API ${result.api.label}`, size)}\n </>,\n );\n }\n }\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { ThemeProvider } from '../theme';\nimport type { Branding } from '../theme';\nimport { Body100, Button, ButtonContainer, StatusTag } from '../styles/layout';\nimport { FormCheckboxLabel } from '../styles/forms';\nimport { CheckboxInput } from '../components/CheckboxInput';\nimport { DropDown } from '../components/DropDown';\nimport { Stepper } from '../components/Stepper';\nimport { TextInput } from '../components/TextInput';\n\nexport interface PreviewProps {\n /** Partner branding to render the sample with. Omit for the default theme. */\n branding?: Branding;\n className?: string;\n}\n\nconst PreviewCard = styled.div`\n display: flex;\n gap: 2rem;\n padding: 1.5rem;\n background: ${({ theme }) => theme.colors.background};\n border: ${({ theme }) => theme.border.width} solid ${({ theme }) => theme.border.color};\n border-radius: ${({ theme }) => theme.border.radius};\n`;\n\nconst MainColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n flex: 1;\n min-width: 0;\n`;\n\nconst HeaderRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1rem;\n`;\n\nconst SideColumn = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nfunction PreviewContent() {\n const [name, setName] = useState('Acme Corporation');\n const [plan, setPlan] = useState('growth');\n const [autopay, setAutopay] = useState(true);\n\n return (\n <PreviewCard data-testid=\"oatfi-ui-preview\">\n <MainColumn>\n <HeaderRow>\n <Body100 className=\"bold\">Partner</Body100>\n <StatusTag className=\"success small\">Active</StatusTag>\n </HeaderRow>\n\n <TextInput label=\"Business name\" value={name} onChange={setName} />\n <DropDown\n label=\"Plan\"\n value={plan}\n onChange={setPlan}\n options={[\n { value: 'starter', label: 'Starter' },\n { value: 'growth', label: 'Growth' },\n { value: 'scale', label: 'Scale' },\n ]}\n />\n <FormCheckboxLabel>\n <CheckboxInput checked={autopay} onChange={e => setAutopay(e.target.checked)} />\n Enable automatic payments\n </FormCheckboxLabel>\n\n <ButtonContainer>\n <Button className=\"secondary\">Cancel</Button>\n <Button>Save changes</Button>\n </ButtonContainer>\n </MainColumn>\n\n <SideColumn>\n <Stepper\n currentStep={1}\n steps={[{ label: 'Connect' }, { label: 'Verify' }, { label: 'Done' }]}\n />\n </SideColumn>\n </PreviewCard>\n );\n}\n\n/**\n * A self-contained branded snapshot of the OatFi UI kit — a header, a few\n * inputs, buttons, and a stepper. Wraps its own `ThemeProvider`, so a consumer\n * (e.g. the dashboard's Branding settings page) drops it in and passes partner\n * `branding` without setting up theming itself.\n */\nexport function Preview({ branding, className }: PreviewProps) {\n return (\n <ThemeProvider branding={branding}>\n <div className={className}>\n <PreviewContent />\n </div>\n </ThemeProvider>\n );\n}\n"],"names":["StyledThemeProvider","MuiThemeProviderBase","useStyledTheme","Content","formatDisplayValue","InputLabel","Root","IconButton","MenuItem","CircularProgress","maskOf","useTheme","Box","Button"],"mappings":"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"}
|