@broxus/tvm-connect
Version:
TypeScript SDK for connecting to Nekoton-compatible wallets using a unified interface.
540 lines (452 loc) • 16.1 kB
CSS
[class*='tvm-connect-'] {
--global-scroll-width: initial;
/* Globals */
--global-color: var(--tvm-connect-color);
--global-font-family: -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--global-emphasis-color: var(--tvm-connect-emphasis-color);
--global-muted-color: var(--tvm-connect-muted-color);
--global-link-color: var(--tvm-connect-link-color);
--global-link-hover-color: var(--tvm-connect-link-hover-color);
--global-border: var(--tvm-connect-border);
--global-border-style: solid;
--global-border-width: 1px;
--global-border-radius: var(--tvm-connect-border-radius);
--global-gutter: 20px;
--global-medium-gutter: var(--global-gutter);
--global-large-gutter: var(--global-gutter);
/* Base */
--base-body-color: var(--global-color);
--base-body-font-family: var(--global-font-family);
--base-link-color: var(--global-link-color);
--base-link-hover-color: var(--global-link-hover-color);
--base-link-text-decoration: none;
--base-link-hover-text-decoration: none;
--base-heading-color: var(--global-emphasis-color);
--base-heading-font-family: var(--global-font-family);
--base-heading-font-weight: 600;
--base-heading-text-transform: none;
/* Card */
--card-body-padding-horizontal: var(--global-gutter);
--card-body-padding-vertical: var(--card-body-padding-horizontal);
--card-small-body-padding-horizontal: var(--global-gutter);
--card-small-body-padding-vertical: var(--card-body-padding-horizontal);
/* Grid */
--grid-gutter-horizontal: var(--global-gutter);
--grid-gutter-vertical: var(--grid-gutter-horizontal);
--grid-gutter-horizontal-m: var(--global-medium-gutter);
--grid-gutter-vertical-m: var(--grid-gutter-horizontal-m);
--grid-gutter-horizontal-l: var(--global-large-gutter);
--grid-gutter-vertical-l: var(--grid-gutter-horizontal-l);
/* Description list */
--description-list-term-color: var(--global-emphasis-color);
/* Drawer */
--drawer-close-position: var(--tvm-connect-modal-padding-horizontal);
/* Modal */
--modal-width: var(--tvm-connect-modal-width);
--modal-close-padding: 0px;
--modal-close-position: calc(var(--tvm-connect-modal-padding-horizontal) - var(--modal-close-padding));
/* List */
--list-margin-top: var(--global-small-margin);
--list-large-margin-top: var(--global-margin);
/* Text */
--text-emphasis-color: var(--global-emphasis-color);
--text-meta-color: var(--global-muted-color);
--text-muted-color: var(--global-muted-color);
font-family: var(--base-body-font-family), sans-serif;
/* Component: Base */
a:not(.uk-button),
.uk-link:not(.uk-button) {
color: var(--base-link-color);
cursor: pointer;
text-decoration: var(--base-link-text-decoration);
}
a:not(.uk-button):hover,
.uk-link:not(.uk-button):hover {
color: var(--base-link-hover-color);
text-decoration: var(--base-link-hover-text-decoration);
}
a:not(.uk-button):active,
a:not(.uk-button):hover {
outline: none;
}
dt { font-weight: bold; }
dd { margin-left: 0; }
h1, .uk-h1,
h2, .uk-h2,
h3, .uk-h3,
h4, .uk-h4,
h5, .uk-h5,
h6, .uk-h6 {
color: var(--base-heading-color);
font-family: var(--base-heading-font-family), system-ui;
font-weight: var(--base-heading-font-weight);
margin: 0 0 var(--base-margin-vertical) 0;
text-transform: var(--base-heading-text-transform);
}
h1, .uk-h1 {
font-size: var(--base-h1-font-size);
line-height: var(--base-h1-line-height);
}
h2, .uk-h2 {
font-size: var(--base-h2-font-size);
line-height: var(--base-h2-line-height);
}
h3, .uk-h3 {
font-size: var(--base-h3-font-size);
line-height: var(--base-h3-line-height);
}
h4, .uk-h4 {
font-size: var(--base-h4-font-size);
line-height: var(--base-h4-line-height);
}
h5, .uk-h5 {
font-size: var(--base-h5-font-size);
line-height: var(--base-h5-line-height);
}
h6, .uk-h6 {
font-size: var(--base-h6-font-size);
line-height: var(--base-h6-line-height);
}
/* Component: Button */
.uk-button {
transition: background-color var(--transition-duration) var(--ease-in-out),
border-color var(--transition-duration) var(--ease-in-out),
color var(--transition-duration) var(--ease-in-out);
}
/* Component: Card */
.uk-card-default {
background: none;
border: var(--global-border-width) var(--global-border-style) var(--global-border);
border-radius: var(--global-border-radius);
}
/* Component: Icon */
button.uk-icon:not(:disabled) {
cursor: pointer;
}
.uk-icon::-moz-focus-inner {
border: 0;
padding: 0;
}
.uk-icon:not(.uk-preserve) [fill*='#']:not(.uk-preserve) {
fill: currentColor;
}
.uk-icon:not(.uk-preserve) [stroke*='#']:not(.uk-preserve) {
stroke: currentColor;
}
.uk-icon > * {
transform: translate(0, 0);
}
/* Component: Dropdown */
.uk-dropdown {
background: var(--tvm-connect-dropdown-background);
box-sizing: border-box;
color: var(--tvm-connect-dropdown-color);
min-width: var(--dropdown-min-width);
padding: var(--dropdown-padding);
position: absolute;
z-index: var(--dropdown-z-index);
}
.uk-dropdown-hidden {
display: none;
}
[class*='uk-dropdown-placement-bottom'] {
&.uk-slide-up-enter.uk-slide-up-enter-active,
&.uk-slide-up-appear.uk-slide-up-appear-active {
animation-name: uk-slide-up-in;
}
&.uk-slide-up-leave.uk-slide-up-leave-active {
animation-name: uk-slide-up-out;
}
}
[class*='uk-dropdown-placement-top'] {
&.uk-slide-up-enter.uk-slide-up-enter-active,
&.uk-slide-up-appear.uk-slide-up-appear-active {
animation-name: uk-slide-down-in;
}
&.uk-slide-up-leave.uk-slide-up-leave-active {
animation-name: uk-slide-down-out;
}
}
/* Design system overrides */
.uk-copy-wrapper {
align-items: center;
cursor: pointer;
display: inline-flex;
justify-content: center;
}
.uk-explorer-link {
align-items: center;
column-gap: 8px;
display: inline-flex;
line-height: normal;
}
.uk-explorer-link:hover,
.uk-explorer-link a:hover {
text-decoration: none;
}
.uk-explorer-link .uk-copy-wrapper,
.uk-explorer-link .uk-wallet-asset {
cursor: pointer;
}
.uk-explorer-link .uk-icon-external,
.uk-explorer-link .uk-copy-wrapper,
.uk-explorer-link .uk-wallet-asset {
line-height: 0;
svg {
height: var(--explorer-link-icon-size);
width: var(--explorer-link-icon-size);
}
}
.uk-wallet-account .uk-wallet-account-icon {
position: relative;
width: max-content;
}
.uk-wallet-account .uk-wallet-account-title {
color: var(--global-color);
}
.uk-wallet-account .uk-wallet-account-subtitle {
color: var(--global-muted-color);
font-size: var(--global-xsmall-font-size);
letter-spacing: 0.6px;
line-height: 16px;
white-space: nowrap;
}
.uk-wallet-account .uk-wallet-account-sub-icon {
border-radius: 50%;
bottom: -2px;
display: flex;
position: absolute;
right: -2px;
}
}
/*
========================================================================
Modal
========================================================================
*/
.tvm-connect-modal > *:not([class]) {
width: 100%;
}
.tvm-connect-modal .uk-modal-container {
background: var(--tvm-connect-modal-background);
border-radius: var(--tvm-connect-modal-border-radius);
box-shadow: var(--tvm-connect-modal-box-shadow);
color: var(--tvm-connect-modal-color);
padding: var(--tvm-connect-modal-padding-vertical) var(--tvm-connect-modal-padding-horizontal);
}
.tvm-connect-modal .uk-modal-header {
background: none;
padding: 0 var(--tvm-connect-modal-header-padding-horizontal) var(--tvm-connect-modal-header-padding-vertical);
}
.tvm-connect-modal .uk-modal-title {
color: var(--tvm-connect-modal-title-color);
font-size: var(--tvm-connect-modal-title-font-size);
font-weight: var(--tvm-connect-modal-title-font-weight);
line-height: var(--tvm-connect-modal-title-line-height);
text-align: center;
}
.tvm-connect-modal .uk-modal-body {
padding: 0 var(--tvm-connect-modal-body-padding-horizontal);
}
.tvm-connect-modal .uk-modal-body:last-child {
padding-bottom: 0;
}
.tvm-connect-modal .uk-modal-footer {
background: none;
padding: var(--tvm-connect-modal-footer-padding-vertical) var(--tvm-connect-modal-footer-padding-horizontal) 0;
}
/*
========================================================================
Drawer
========================================================================
*/
.tvm-connect-drawer .uk-drawer-content-wrapper {
--drawer-height: auto;
}
.tvm-connect-drawer .uk-drawer-content {
background: var(--tvm-connect-drawer-content-background);
border-radius: var(--tvm-connect-drawer-content-border-radius) var(--tvm-connect-drawer-content-border-radius) 0 0;
box-shadow: none;
color: var(--tvm-connect-drawer-content-color);
padding: var(--tvm-connect-drawer-content-padding-vertical) var(--tvm-connect-drawer-content-padding-horizontal);
}
.tvm-connect-drawer .uk-drawer-header {
padding: 0 var(--tvm-connect-drawer-header-padding-horizontal) var(--tvm-connect-drawer-header-padding-vertical);
}
.tvm-connect-drawer .uk-drawer-title {
color: var(--tvm-connect-drawer-title-color);
font-size: var(--tvm-connect-drawer-title-font-size);
font-weight: var(--tvm-connect-drawer-title-font-weight);
line-height: var(--tvm-connect-drawer-title-line-height);
text-align: center;
}
.tvm-connect-drawer .uk-drawer-body {
padding: 0 var(--tvm-connect-drawer-body-padding-horizontal);
}
.tvm-connect-drawer .uk-drawer-body:last-child {
padding-bottom: 0;
}
/* Modal & Drawer close button */
.tvm-connect-modal .uk-modal-close-default,
.tvm-connect-drawer .uk-drawer-close {
color: var(--tvm-connect-muted-color);
padding: var(--modal-close-padding);
}
.tvm-connect-modal .uk-modal-close-default:hover,
.tvm-connect-modal .uk-modal-close-default:focus,
.tvm-connect-drawer .uk-drawer-close:hover,
.tvm-connect-drawer .uk-drawer-close:focus {
color: var(--tvm-connect-color);
}
/*
========================================================================
Modal page
========================================================================
*/
.tvm-modal-page {
box-sizing: border-box;
overflow-y: clip ;
padding-right: var(--global-scroll-width, 15px) ;
}
.tvm-modal-page body {
overflow: hidden;
overflow: clip;
}
/*
========================================================================
Providers dispatcher
========================================================================
*/
.tvm-connect-providers-dispatcher {
backface-visibility: hidden;
display: flex;
flex-direction: column;
height: inherit;
overflow: hidden;
transition: height var(--transition-fast-duration) var(--ease-in);
width: inherit;
}
/* Modal & Drawer back button */
.tvm-connect-providers-dispatcher .tvm-connect-back-button {
color: var(--tvm-connect-muted-color);
left: var(--modal-close-position);
line-height: 0;
padding: var(--modal-close-padding);
position: absolute;
top: var(--modal-close-position);
}
.tvm-connect-providers-dispatcher .tvm-connect-back-button:hover,
.tvm-connect-providers-dispatcher .tvm-connect-back-button:focus {
color: var(--tvm-connect-color);
}
.tvm-connect-provider-content .tvm-connect-provider-content-title {
color: var(--tvm-connect-color);
font-weight: 600;
margin-bottom: var(--global-small-margin, 10px);
}
/*
========================================================================
Providers list
========================================================================
*/
.tvm-connect-provider-content .tvm-connect-providers-list {
margin: 0;
}
.tvm-connect-providers-list .tvm-connect-provider-button.uk-button {
align-content: center;
align-items: center;
background-color: var(--tvm-connect-provider-button-background);
border: var(--tvm-connect-provider-button-border-width) var(--tvm-connect-provider-button-border-style) var(--tvm-connect-provider-button-border);
border-radius: 8px;
box-sizing: border-box;
color: var(--tvm-connect-color);
display: grid;
gap: 16px;
grid-auto-rows: max-content;
grid-template-columns: 32px minmax(50%, 100%) auto;
line-height: normal;
min-height: 65px;
padding: 0 20px;
position: relative;
text-align: left;
width: 100%;
}
.tvm-connect-providers-list .tvm-connect-provider-button.uk-button:hover:not(:disabled),
.tvm-connect-providers-list .tvm-connect-provider-button.uk-button:focus:not(:disabled) {
background-color: var(--tvm-connect-provider-button-hover-background);
border-color: var(--tvm-connect-provider-button-hover-border);
color: var(--tvm-connect-provider-button-hover-color);
}
.tvm-connect-providers-list .tvm-connect-provider-title {
color: var(--tvm-connect-color);
font-size: 18px;
font-weight: 500;
}
.tvm-connect-providers-list .tvm-connect-provider-subtitle {
max-width: 100%;
opacity: 0.8;
}
.tvm-connect-providers-list .tvm-connect-provider-connected,
.tvm-connect-providers-list .tvm-connect-provider-recent {
background: var(--tvm-connect-modal-background);
border-radius: 3px;
display: inline-block;
font-size: 9px;
justify-self: flex-end;
padding: 1px 5px;
position: absolute;
right: 8px;
text-transform: uppercase;
top: 12px;
}
/*
========================================================================
QR Code
========================================================================
*/
.tvm-connect-qrcode-wrapper {
padding: 0 10%;
}
/*
========================================================================
Connector
========================================================================
*/
.tvm-connect-connector {
display: inline-flex;
max-width: max-content;
}
.tvm-connect-connector .tvm-connect-connector-icon {
background-color: var(--global-muted-background);
border-radius: 50%;
box-sizing: border-box;
height: 32px;
min-width: 32px;
width: 32px;
}
.tvm-connect-connector .tvm-connect-connector-suffix {
position: relative;
}
.tvm-connect-connector .tvm-connect-dropdown-trigger {
align-items: center;
cursor: pointer;
display: flex;
height: 100%;
padding: var(--tvm-connect-dropdown-trigger-vertical-padding) var(--tvm-connect-dropdown-trigger-horizontal-padding);
}
/* Dropdown */
.tvm-connect-dropdown {
background: var(--tvm-connect-dropdown-background);
border-radius: var(--tvm-connect-dropdown-border-radius);
box-shadow: var(--tvm-connect-dropdown-box-shadow);
color: var(--tvm-connect-dropdown-color);
min-width: fit-content ;
}
.tvm-connect-dropdown .uk-button.uk-button-link {
color: var(--tvm-connect-dropdown-link-color);
}
.tvm-connect-dropdown .uk-button.uk-button-link:hover,
.tvm-connect-dropdown .uk-button.uk-button-link:focus {
color: var(--tvm-connect-dropdown-link-hover-color);
text-decoration: none;
}