@funkit/connect
Version:
Funkit Connect SDK elevates DeFi apps via web2 sign-ins and one-click checkouts.
381 lines (378 loc) • 13.6 kB
JavaScript
"use client";
// src/themes/baseTheme.ts
var systemFontStack = '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"';
var fontStacks = {
rounded: `SFRounded, ui-rounded, "SF Pro Rounded", ${systemFontStack}`,
system: systemFontStack,
fun: `SF Pro, ${systemFontStack}`
};
var radiusScales = {
large: {
actionButton: "12px",
actionButtonInner: "10px",
connectButton: "12px",
modal: "24px",
modalMobile: "28px",
modalActionButton: "24px",
modalActionButtonMobile: "28px",
summaryBox: "12px",
youPayYouReceive: "24px",
inputAmountSwitcher: "24px",
qrCode: "12px",
tooltip: "4px",
skeleton: "4px",
dropdown: "12px",
dropdownItem: "4px",
dropdownList: "12px",
modalTopbarIcon: "9999px",
withdrawalInput: "12px",
useConnected: "8px"
},
medium: {
actionButton: "10px",
actionButtonInner: "8px",
connectButton: "10px",
modal: "16px",
modalMobile: "18px",
modalActionButton: "16px",
modalActionButtonMobile: "18px",
summaryBox: "10px",
youPayYouReceive: "24px",
inputAmountSwitcher: "24px",
qrCode: "10px",
tooltip: "4px",
skeleton: "4px",
dropdown: "10px",
dropdownItem: "4px",
dropdownList: "10px",
modalTopbarIcon: "9999px",
withdrawalInput: "10px",
useConnected: "8px"
},
none: {
actionButton: "0px",
actionButtonInner: "0px",
connectButton: "0px",
modal: "0px",
modalMobile: "0px",
modalActionButton: "0px",
modalActionButtonMobile: "0px",
summaryBox: "0px",
youPayYouReceive: "0px",
inputAmountSwitcher: "0px",
qrCode: "0px",
tooltip: "0px",
skeleton: "0px",
dropdown: "0px",
dropdownItem: "0px",
dropdownList: "0px",
modalTopbarIcon: "0px",
withdrawalInput: "0px",
useConnected: "0px"
},
small: {
actionButton: "8px",
actionButtonInner: "6px",
connectButton: "8px",
modal: "8px",
modalMobile: "8px",
modalActionButton: "8px",
modalActionButtonMobile: "8px",
summaryBox: "8px",
youPayYouReceive: "24px",
inputAmountSwitcher: "24px",
qrCode: "8px",
tooltip: "4px",
skeleton: "4px",
dropdown: "8px",
dropdownItem: "4px",
dropdownList: "8px",
modalTopbarIcon: "9999px",
withdrawalInput: "8px",
useConnected: "8px"
}
};
var blurs = {
large: {
modalOverlay: "blur(20px)"
},
none: {
modalOverlay: "blur(0px)"
},
small: {
modalOverlay: "blur(8px)"
},
tiny: {
modalOverlay: "blur(4px)"
}
};
var DEFAULT_FONT_WEIGHTS = {
regular: "400",
medium: "500",
// 510 in figma, but chrome no longer supports 510 - lowered to 500
semibold: "600",
// 590 in figma, but chrome no longer supports 590 - raised to 600
bold: "700",
heavy: "800"
};
var DEFAULT_FONT_SIZES = {
"10": { fontSize: "10px", lineHeight: "15px" },
"12": { fontSize: "12px", lineHeight: "14px" },
"13": { fontSize: "13px", lineHeight: "18px" },
"14": { fontSize: "14px", lineHeight: "18px" },
"16": { fontSize: "16px", lineHeight: "20px" },
"18": { fontSize: "18px", lineHeight: "24px" },
"20": { fontSize: "20px", lineHeight: "20px" },
"21": { fontSize: "21px", lineHeight: "21px" },
"40": { fontSize: "40px", lineHeight: "48px" },
"57": { fontSize: "57px", lineHeight: "68px" }
};
var FONT_SIZINGS = {
regular: DEFAULT_FONT_SIZES,
small: {
"8": { fontSize: "8px", lineHeight: "16px" },
"10": { fontSize: "8px", lineHeight: "16px" },
"12": { fontSize: "10px", lineHeight: "16px" },
"13": { fontSize: "10px", lineHeight: "16px" },
"14": { fontSize: "12px", lineHeight: "16px" },
"16": { fontSize: "14px", lineHeight: "18px" },
"18": { fontSize: "14px", lineHeight: "20px" },
"20": { fontSize: "18px", lineHeight: "20px" },
"21": { fontSize: "19px", lineHeight: "19px" },
"23": { fontSize: "20px", lineHeight: "28px" },
"40": { fontSize: "34px", lineHeight: "40px" },
"57": { fontSize: "50px", lineHeight: "60px" }
}
};
var nestedModalZIndexes = {
coinbase: 2147483647,
walletConnect: 99999999999999,
privy: 999999
};
var DEFAULT_MODAL_Z_INDEX = Math.min(...Object.values(nestedModalZIndexes)) - 2;
var baseTheme = ({
borderRadius = "large",
fontStack = "fun",
fontSizing = "regular",
customFontFamily,
customFontWeights = DEFAULT_FONT_WEIGHTS,
customFontSizings = FONT_SIZINGS[fontSizing],
customBorderWidths,
customBorderRadiuses = radiusScales[borderRadius],
customDimensions,
customOpacities,
customSpacings,
customTextTransforms,
overlayBlur = "small",
modalZIndex = DEFAULT_MODAL_Z_INDEX
}) => ({
modalZIndex: String(modalZIndex),
blurs: {
modalOverlay: blurs[overlayBlur].modalOverlay
},
dimensions: {
connectExchangeIconSize: "48px",
cryptoCashToggleIconSize: "20px",
dollarValueSkeletonHeight: "60px",
dollarValueSkeletonWidth: "160px",
inputAmountQuickOptionButtonHeight: "36px",
inputAmountMinHeight: "76px",
modalBottomBarButtonHeight: "34px",
modalTopBarHeight: "56px",
modalTopbarIconSize: "16px",
modalTopbarIconWrapperSize: "32px",
paymentAmountSkeletonBlockHeight: "14px",
paymentAmountSkeletonBlockWidth: "93px",
paymentAmountSkeletonCircleSize: "15px",
paymentMethodItemIconSize: "20px",
selectAssetItemIconSize: "24px",
sourceListGap: "4px",
txBreakdownSkeletonWidth: "72px",
txSummaryLineSkeletonHeight: "14px",
txSummaryLineSkeletonWidth: "54px",
...customDimensions,
modalBottomBarCloseButtonHeight: customDimensions?.modalBottomBarCloseButtonHeight ?? customDimensions?.modalBottomBarButtonHeight ?? "34px"
},
fonts: typeof customFontFamily === "string" ? {
amountValue: customFontFamily,
body: customFontFamily,
buttonTextPrimary: customFontFamily,
buttonTextSecondary: customFontFamily,
buttonTextTertiary: customFontFamily,
dropdownGroupHeader: customFontFamily,
header: customFontFamily,
inputAmount: customFontFamily,
modalTopbarTitle: customFontFamily,
txStatusDescription: customFontFamily,
txStatusTitle: customFontFamily
} : {
amountValue: fontStacks[fontStack],
body: fontStacks[fontStack],
buttonTextPrimary: fontStacks[fontStack],
buttonTextSecondary: fontStacks[fontStack],
buttonTextTertiary: fontStacks[fontStack],
dropdownGroupHeader: fontStacks[fontStack],
header: fontStacks[fontStack],
inputAmount: fontStacks[fontStack],
modalTopbarTitle: fontStacks[fontStack],
txStatusDescription: fontStacks[fontStack],
txStatusTitle: fontStacks[fontStack],
...customFontFamily
},
fontWeight: {
...DEFAULT_FONT_WEIGHTS,
cryptoCashToggle: DEFAULT_FONT_WEIGHTS.medium,
dropdownGroupHeader: DEFAULT_FONT_WEIGHTS.medium,
inputAmount: DEFAULT_FONT_WEIGHTS.medium,
inputLabel: DEFAULT_FONT_WEIGHTS.medium,
inputValue: DEFAULT_FONT_WEIGHTS.medium,
modalTopbarTitle: DEFAULT_FONT_WEIGHTS.medium,
modalBottomBarButtonText: DEFAULT_FONT_WEIGHTS.medium,
paymentMethodItemSubtitle: DEFAULT_FONT_WEIGHTS.regular,
paymentMethodItemTitle: DEFAULT_FONT_WEIGHTS.medium,
selectAssetItemSubtitle: DEFAULT_FONT_WEIGHTS.regular,
selectAssetItemTitle: DEFAULT_FONT_WEIGHTS.medium,
sourceListSectionLabelFontWeight: DEFAULT_FONT_WEIGHTS.medium,
txBreakdown: DEFAULT_FONT_WEIGHTS.regular,
txStatusDescription: DEFAULT_FONT_WEIGHTS.regular,
txStatusTitle: DEFAULT_FONT_WEIGHTS.medium,
txSummaryLabel: DEFAULT_FONT_WEIGHTS.medium,
txSummaryValue: DEFAULT_FONT_WEIGHTS.medium,
formOfPaymentsListSectionLabelFontWeight: DEFAULT_FONT_WEIGHTS.medium,
withdrawalYouWillReceiveLabel: DEFAULT_FONT_WEIGHTS.regular,
withdrawalYouWillReceiveValueCrypto: DEFAULT_FONT_WEIGHTS.medium,
withdrawalYouWillReceiveValueUsd: DEFAULT_FONT_WEIGHTS.regular,
...customFontWeights
},
fontSize: {
...FONT_SIZINGS[fontSizing],
body: FONT_SIZINGS[fontSizing][14],
cryptoCashToggle: FONT_SIZINGS[fontSizing][12],
"header-14": { fontSize: "14px", lineHeight: "14px" },
"header-36": { fontSize: "36px", lineHeight: "36px" },
buttonTextPrimary: FONT_SIZINGS[fontSizing][12],
buttonTextSecondary: FONT_SIZINGS[fontSizing][10],
buttonTextTertiary: FONT_SIZINGS[fontSizing][12],
dollarValue: FONT_SIZINGS[fontSizing][40],
dropdownGroupHeader: FONT_SIZINGS[fontSizing][12],
inputAmount: FONT_SIZINGS[fontSizing][57],
inputLabel: customFontSizings[12] ?? FONT_SIZINGS[fontSizing][12],
inputValue: customFontSizings[13] ?? FONT_SIZINGS[fontSizing][13],
modalTopbarSubtitle: FONT_SIZINGS[fontSizing][10],
modalTopbarTitle: FONT_SIZINGS[fontSizing][13],
modalBottomBarButtonText: FONT_SIZINGS[fontSizing][12],
paymentMethodItemSubtitle: FONT_SIZINGS[fontSizing][12],
paymentMethodItemTitle: FONT_SIZINGS[fontSizing][12],
selectAssetItemSubtitle: FONT_SIZINGS[fontSizing][10],
selectAssetItemTitle: FONT_SIZINGS[fontSizing][13],
txBreakdown: FONT_SIZINGS[fontSizing][12],
txStatusDescription: FONT_SIZINGS[fontSizing][13],
txStatusTitle: FONT_SIZINGS[fontSizing][13],
txSummaryLabel: FONT_SIZINGS[fontSizing][12],
txSummaryValue: FONT_SIZINGS[fontSizing][12],
withdrawalYouWillReceive: customFontSizings[12] ?? FONT_SIZINGS[fontSizing][12],
youPayYouReceivePrimaryFontSize: FONT_SIZINGS[fontSizing][12],
youPayYouReceiveSecondaryFontSize: FONT_SIZINGS[fontSizing][10],
depositAddressFontSize: FONT_SIZINGS[fontSizing][10],
funFeatureListItemFontSize: FONT_SIZINGS[fontSizing][12],
dropdownItemFontSize: FONT_SIZINGS[fontSizing][12],
sourceListSectionLabelFontSize: FONT_SIZINGS[fontSizing][12],
formOfPaymentsListSectionLabelFontSize: FONT_SIZINGS[fontSizing][12],
quickOptionFontSize: FONT_SIZINGS[fontSizing][14],
useConnectedFontSize: FONT_SIZINGS[fontSizing][12],
paymentFeeSummaryTooltip: FONT_SIZINGS[fontSizing][10],
tooltipContent: FONT_SIZINGS[fontSizing][10],
...customFontSizings
},
radii: {
actionButton: radiusScales[borderRadius].actionButton,
actionButtonInner: radiusScales[borderRadius].actionButtonInner,
connectButton: radiusScales[borderRadius].connectButton,
menuButton: radiusScales[borderRadius].connectButton,
modal: radiusScales[borderRadius].modal,
modalMobile: radiusScales[borderRadius].modalMobile,
modalActionButton: radiusScales[borderRadius].modalActionButton,
modalActionButtonMobile: radiusScales[borderRadius].modalActionButtonMobile,
summaryBox: radiusScales[borderRadius].summaryBox,
youPayYouReceive: radiusScales[borderRadius].youPayYouReceive,
inputAmountSwitcher: radiusScales[borderRadius].inputAmountSwitcher,
qrCode: radiusScales[borderRadius].qrCode,
skeleton: radiusScales[borderRadius].skeleton,
tooltip: radiusScales[borderRadius].tooltip,
dropdown: radiusScales[borderRadius].dropdown,
dropdownItem: radiusScales[borderRadius].dropdownItem,
dropdownList: customBorderRadiuses?.dropdownList ?? customBorderRadiuses?.dropdown ?? radiusScales[borderRadius].dropdown,
modalTopbarIcon: radiusScales[borderRadius].modalTopbarIcon,
withdrawalInput: radiusScales[borderRadius].withdrawalInput,
useConnected: radiusScales[borderRadius].useConnected,
...customBorderRadiuses
},
borderWidths: {
activeOptionBorderWidth: "1px",
buttonTertiaryBorderWidth: "0px",
cryptoCashToggleContainerBorderWidth: "0px",
cryptoCashToggleActiveTabBorderWidth: "1px",
cryptoCashToggleInactiveTabBorderWidth: "1px",
txSummaryBoxBorderWidth: "1px",
...customBorderWidths
},
opacities: {
buttonPrimaryDisabled: "1",
...customOpacities
},
spacing: {
confirmationStepMarginTop: "6px",
confirmationStepVerticalGap: "18px",
cryptoCashToggleContainerPadding: "3px",
cryptoCashToggleMarginBottom: "16px",
cryptoCashToggleMarginTop: "24px",
cryptoCashToggleTabPaddingY: "6px",
dropdownItemIconGap: "4px",
dropdownItemPaddingX: "4px",
dropdownItemPaddingY: "6px",
dropdownCompactPaddingX: "6px",
dropdownCompactPaddingY: "6px",
dropdownPaddingX: "12px",
dropdownPaddingY: "12px",
modalBaseHorizontalPadding: "6px",
modalBottomBarButtonPaddingY: "0px",
modalBottomHorizontalPadding: "12px",
modalPaddingBottomUpper: "16px",
modalPaddingBottomLower: "16px",
modalTopBarVerticalTextSpacing: "0px",
selectAssetItemPaddingX: "12px",
selectAssetItemPaddingY: "8px",
selectAssetItemTextGap: "0px",
selectBrokerageItemPaddingX: "12px",
selectBrokerageItemPaddingY: "11px",
selectBrokerageListGap: "0px",
walletConnectorListGap: "10px",
txBreakdownMarginY: "18px",
txBreakdownPaddingX: "12px",
txSummaryBoxPaddingX: "12px",
txSummaryBoxPaddingY: "12px",
txSummaryLineItemPadding: "0px",
txSummaryDividerMarginX: "12px",
txSummaryDividerMarginY: "12px",
verticalSectionGap: "18px",
withdrawalModalPaddingTop: "12px",
youPayYouReceivePaddingLeft: "12px",
youPayYouReceivePaddingRight: "16px",
youPayYouReceivePaddingY: "8px",
inputPaddingX: "12px",
inputPaddingY: "12px",
dropdownActiveItemRegularSizePaddingY: "8px",
assetListDefaultGap: "4px",
dropdownGroupDividerMarginY: "8px",
...customSpacings
},
textTransforms: {
inputAmountQuickOptionButton: "none",
txStatusTitle: "none",
...customTextTransforms
}
});
export {
systemFontStack,
baseTheme
};