UNPKG

@daimo/pay

Version:

Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.

666 lines (644 loc) 15.8 kB
import { motion } from 'framer-motion'; import { keyframes } from 'styled-components'; import defaultTheme from '../../../constants/defaultTheme.js'; import styled from '../../../styles/styled/index.js'; const ErrorMessage = styled(motion.div)` z-index: -1; pointer-events: auto; position: absolute; left: 50%; transform: translateX(-50%); width: var(--width); top: 64px; color: #fff; font-size: 14px; line-height: 20px; font-weight: 500; background: var(--ck-body-color-danger); border-radius: 20px; padding: 24px 46px 82px 24px; transition: width var(--duration) var(--ease); a { font-weight: 700; text-decoration: underline; } code { font-size: 0.9em; display: inline-block; font-family: monospace; margin: 1px; padding: 0 4px; border-radius: 8px; font-weight: bold; background: rgba(255, 255, 255, 0.1); } `; const FadeIn = keyframes` from { opacity: 0; } to { opacity: 1; } `; const FadeInScaleUp = keyframes` from { opacity: 0; transform: scale(0.85); } to { opacity: 1; transform: scale(1); } `; const FadeInScaleDown = keyframes` from { opacity: 0; transform: scale(1.1); } to { opacity: 1; transform: scale(1); } `; const FadeOut = keyframes` from { opacity: 1; } to { opacity: 0; } `; const FadeOutScaleUp = keyframes` from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(1.1); } `; const FadeOutScaleDown = keyframes` from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.85); } `; const PageContent = styled(motion.div)` max-width: 100%; width: 360px; padding-top: 48px; `; const TextWithHr = styled(motion.div)` user-select: none; position: relative; display: block; text-align: center; color: var(--ck-body-color-muted); font-size: 15px; font-weight: 400; line-height: 21px; span { z-index: 2; position: relative; display: inline-block; user-select: none; pointer-events: none; padding: 0 14px; background: var(--ck-body-background); transition: background-color 200ms ease; } &:before { z-index: 2; content: ""; position: absolute; top: 50%; left: 0; right: 0; height: 1px; transform: translateY(-1px); background: var(--ck-body-divider); box-shadow: var(--ck-body-divider-box-shadow); } `; const ModalHeading = styled(motion.div)` z-index: 3; pointer-events: none; user-select: none; position: absolute; top: 25px; left: 50%; display: flex; align-items: center; justify-content: center; height: 26px; transform: translateX(-50%); width: var(--width); text-align: center; font-size: 17px; line-height: 20px; font-weight: var(--ck-modal-heading-font-weight, 600); color: var(--ck-body-color); span { display: inline-block; } `; const ModalContentContainer = styled(motion.div)` position: relative; padding: 0; `; const ModalContent = styled(motion.div)` left: 0; right: 0; text-align: center; display: flex; flex-direction: column; gap: 12px; padding: 0 0 16px; @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { display: ${(props) => props.$preserveDisplay ? "flex" : "block"}; gap: ${(props) => props.$preserveDisplay ? "4px" : void 0}; } `; const ModalH1 = styled(motion.h1)` margin: 0; padding: 0; line-height: ${(props) => props.$small ? 20 : 22}px; font-size: ${(props) => props.$small ? 17 : 19}px; font-weight: var(--ck-modal-h1-font-weight, 600); color: ${(props) => { if (props.$error) return "var(--ck-body-color-danger)"; if (props.$valid) return "var(--ck-body-color-valid)"; return "var(--ck-body-color)"; }}; > svg { position: relative; top: -2px; display: inline-block; vertical-align: middle; margin-right: 6px; } @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { margin-bottom: 6px; font-size: 17px; } `; const ModalBody = styled.div` font-size: 16px; font-weight: 400; line-height: 21px; color: var(--ck-body-color-muted); strong { font-weight: 500; color: var(--ck-body-color); } `; styled.div` padding: 0 12px; font-size: 13px; font-weight: 400; line-height: 16px; color: var(--ck-body-color-muted); strong { font-weight: 500; color: var(--ck-body-color); } `; const Link = styled.a` color: var(--ck-body-color); text-decoration: none; &:hover { color: var(--ck-body-color-muted); } `; const BackgroundOverlay = styled(motion.div)` z-index: 1; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: var(--ck-overlay-background, rgba(71, 88, 107, 0.24)); backdrop-filter: ${(props) => props.$blur ? `blur(${props.$blur}px)` : "var(--ck-overlay-backdrop-filter, none)"}; opacity: 0; animation: ${(props) => props.$active ? FadeIn : FadeOut} 150ms ease-out both; `; const BoxIn = keyframes` from{ opacity: 0; transform: scale(0.97); } to{ opacity: 1; transform: scale(1); } `; const BoxOut = keyframes` from{ opacity: 1; transform: scale(1); } to{ opacity: 0; transform: scale(0.97); } `; const MobileBoxIn = keyframes` from { transform: translate3d(0, 100%, 0); } to { transform: translate3d(0, 0%, 0); } `; const MobileBoxOut = keyframes` from { opacity: 1; } to { opacity: 0; } `; const BoxContainer = styled(motion.div)` z-index: 2; position: relative; color: var(--ck-body-color); animation: 150ms ease both; animation-name: ${BoxOut}; &.active { animation-name: ${BoxIn}; } &:before { content: ""; position: absolute; top: 0; bottom: 0; left: 50%; width: var(--width); height: var(--height); transform: translateX(-50%); backface-visibility: hidden; transition: all 200ms ease; border-radius: var(--ck-border-radius, 20px); background: var(--ck-body-background); box-shadow: var(--ck-modal-box-shadow); } @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { animation-name: ${MobileBoxOut}; animation-duration: 130ms; animation-timing-function: ease; &.active { animation-name: ${MobileBoxIn}; animation-duration: 300ms; animation-delay: 32ms; animation-timing-function: cubic-bezier(0.15, 1.15, 0.6, 1); } &:before { width: 100%; transition: 0ms height cubic-bezier(0.15, 1.15, 0.6, 1); will-change: height; } } `; const ControllerContainer = styled(motion.div)` z-index: 3; position: absolute; top: 0; left: 50%; height: 64px; transform: translateX(-50%); backface-visibility: hidden; width: var(--width); transition: 0.2s ease width; pointer-events: auto; //border-bottom: 1px solid var(--ck-body-divider); `; const InnerContainer = styled(motion.div)` position: relative; overflow: hidden; height: var(--height); transition: 0.2s ease height; @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { transition: 0ms height cubic-bezier(0.15, 1.15, 0.6, 1); /* animation-delay: 34ms; */ } `; const PageContainer = styled(motion.div)` z-index: 2; position: relative; top: 0; left: 50%; margin-left: calc(var(--width) / -2); width: var(--width); /* left: 0; */ /* width: 100%; */ display: flex; justify-content: center; align-items: center; transform-origin: center center; animation: 200ms ease both; &.active { animation-name: ${FadeInScaleDown}; } &.active-scale-up { animation-name: ${FadeInScaleUp}; } &.exit-scale-down { z-index: 1; pointer-events: none; position: absolute; /* top: 0; */ /* left: 0; */ animation-name: ${FadeOutScaleDown}; } &.exit { z-index: 1; pointer-events: none; position: absolute; /* top: 0; */ /* left: 0; */ /* left: 50%; */ /* transform: translateX(-50%); */ animation-name: ${FadeOutScaleUp}; animation-delay: 16.6667ms; } @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { /* animation: 0ms ease both; */ /* animation-delay: 35ms; */ animation: 0ms cubic-bezier(0.15, 1.15, 0.6, 1) both; &.active { animation-name: ${FadeIn}; } &.active-scale-up { animation-name: ${FadeIn}; } &.exit-scale-down { z-index: 3; animation-name: ${FadeOut}; } &.exit { z-index: 3; animation-name: ${FadeOut}; animation-delay: 0ms; } } `; const PageContents = styled(motion.div)` margin: 0 auto; width: fit-content; padding: 29px 24px 24px; backface-visibility: hidden; `; const ModalContainer = styled.div` z-index: 2147483646; // z-index set one below max (2147483647) for if we wish to layer things ontop of the modal in a seperate Portal position: fixed; inset: 0; `; const CloseButton = styled(motion.button)` z-index: 3; cursor: pointer; position: absolute; top: 22px; right: 17px; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border-radius: 16px; padding: 0; margin: 0; color: var(--ck-body-action-color); background: var(--ck-body-background); transition: background-color 200ms ease, transform 100ms ease; /* will-change: transform; */ svg { display: block; } &:hover { background: var(--ck-body-background-secondary); } &:active { transform: scale(0.9); } `; styled(motion.button)` z-index: 3; position: absolute; inset: 0; width: 100%; // FireFox fix display: flex; align-items: center; justify-content: center; border-radius: 16px; padding: 0; margin: 0; color: var(--ck-body-action-color); background: var(--ck-body-background); transition: background-color 200ms ease, transform 100ms ease; /* will-change: transform; */ svg { display: block; position: relative; } &:enabled { cursor: pointer; &:hover { background: var(--ck-body-background-secondary); } &:active { transform: scale(0.9); } } `; const BackButton = styled(motion.button)` z-index: 3; position: absolute; inset: 0; width: 100%; // FireFox fix display: flex; align-items: center; justify-content: center; border-radius: 16px; padding: 0; margin: 0; color: var(--ck-body-action-color); background: var(--ck-body-background); transition: background-color 200ms ease, transform 100ms ease; /* will-change: transform; */ svg { display: block; position: relative; left: -1px; } &:enabled { cursor: pointer; &:hover { background: var(--ck-body-background-secondary); } &:active { transform: scale(0.9); } } `; const InfoButton = styled(motion.button)` z-index: 3; position: absolute; inset: 0; width: 100%; // FireFox fix transform: translateX(-1px); display: flex; align-items: center; justify-content: center; border-radius: 16px; padding: 0; margin: 0; color: var(--ck-body-action-color); background: var(--ck-body-background); transition: background-color 200ms ease, transform 100ms ease; /* will-change: transform; */ svg { display: block; position: relative; } &:enabled { cursor: pointer; &:hover { background: var(--ck-body-background-secondary); } &:active { transform: scale(0.9); } } `; const Container = styled(motion.div)` --ease: cubic-bezier(0.25, 0.1, 0.25, 1); --duration: 200ms; --transition: height var(--duration) var(--ease), width var(--duration) var(--ease); z-index: 3; display: block; pointer-events: none; position: absolute; left: 50%; top: 50%; width: 100%; transform: translate3d(-50%, -50%, 0); backface-visibility: hidden; @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { pointer-events: auto; left: 0; top: auto; bottom: -5px; transform: none; ${BoxContainer} { max-width: 448px; margin: 0 auto; &:before { width: 100%; border-radius: var(--ck-border-radius, 30px) var(--ck-border-radius, 30px) 0 0; } } ${PageContainer} { left: 0; right: 0; margin: 0 auto; width: auto; } ${PageContent} { margin: 0 auto; width: 100% !important; } ${ModalHeading} { top: 29px; } ${ModalContent} { gap: 12px; } ${ModalBody} { margin: 0 auto; max-width: 295px; } ${PageContents} { width: 100%; padding: 31px 24px; } ${ControllerContainer} { width: 100%; top: 4px; border-bottom: 0; } ${CloseButton} { right: 22px; } ${BackButton} { top: -1px; left: -3px; } ${InfoButton} { top: -1px; left: -3px; svg { width: 65%; height: auto; } } ${CloseButton}, ${BackButton}, ${InfoButton} { // Quick hack for bigger tappable area on mobile transform: scale(1.4) !important; background: transparent !important; svg { transform: scale(0.8) !important; } } } `; const Disclaimer = styled(motion.div)` display: flex; align-items: center; justify-content: center; margin: 16px -24px -24px -24px; padding: 15px 40px 18px; font-size: var(--ck-body-disclaimer-font-size, 13px); font-weight: var(--ck-body-disclaimer-font-weight, 400); text-align: center; line-height: 19px; color: var(--ck-body-disclaimer-color, var(--ck-body-color-muted, inherit)); & a { color: var(--ck-body-disclaimer-link-color, inherit); font-weight: var(--ck-body-disclaimer-font-weight, 400); text-decoration: none; transition: color 200ms ease; &:hover { color: var(--ck-body-disclaimer-link-hover-color, inherit); } } @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { margin: 24px -24px -26px -24px; padding: 20px 42px 22px 42px; } `; const DisclaimerBackground = styled(motion.div)` pointer-events: all; z-index: 9; position: absolute; bottom: 0; left: 50%; width: var(--width); backface-visibility: hidden; transform: translateX(-50%); transform-origin: bottom center; border-radius: var(--ck-border-radius, 30px); border-top-left-radius: 0; border-top-right-radius: 0; transition: width 200ms ease; background: var( --ck-body-disclaimer-background, var(--ck-body-background-secondary) ); box-shadow: var(--ck-body-disclaimer-box-shadow); ${Disclaimer} { margin: 0 !important; /* visibility: hidden; */ } @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { border-radius: 0; } `; styled(motion.div)` z-index: 2; position: absolute; top: 100%; white-space: nowrap; padding: 8px 16px; color: #fff; font-size: 13px; line-height: 1.5; background: #1a88f8; border-radius: calc(var(--ck-border-radius) * 0.75); transform: translateY(8px) translateX(-48px); box-shadow: var(--ck-modal-box-shadow); &:before { content: ""; position: absolute; box-shadow: var(--shadow); width: 18px; height: 18px; transform: translate(215%, -75%) rotate(45deg); background: inherit; border-radius: 3px 0 0 0; } @media only screen and (max-width: ${defaultTheme.mobileWidth}px) { transform: translateY(8px) translateX(-16px); &:before { transform: translate(40%, -75%) rotate(45deg); } } `; export { BackButton, BackgroundOverlay, BoxContainer, CloseButton, Container, ControllerContainer, Disclaimer, DisclaimerBackground, ErrorMessage, InfoButton, InnerContainer, Link, ModalBody, ModalContainer, ModalContent, ModalContentContainer, ModalH1, ModalHeading, PageContainer, PageContent, PageContents, TextWithHr }; //# sourceMappingURL=styles.js.map