@blockstack/ui
Version:
Blockstack UI components built using React and styled-components with styled-system.
1,572 lines (1,398 loc) • 149 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@styled-system/should-forward-prop'), require('styled-components'), require('@styled-system/css'), require('styled-system'), require('use-events'), require('prism-react-renderer'), require('@reach/auto-id'), require('color'), require('@styled-system/theme-get'), require('prop-types'), require('use-onclickoutside'), require('@popperjs/core'), require('react-dom'), require('@reach/alert'), require('@reach/rect'), require('react-transition-group/Transition'), require('flushable')) :
typeof define === 'function' && define.amd ? define(['exports', 'react', '@styled-system/should-forward-prop', 'styled-components', '@styled-system/css', 'styled-system', 'use-events', 'prism-react-renderer', '@reach/auto-id', 'color', '@styled-system/theme-get', 'prop-types', 'use-onclickoutside', '@popperjs/core', 'react-dom', '@reach/alert', '@reach/rect', 'react-transition-group/Transition', 'flushable'], factory) :
(global = global || self, factory(global['@blockstack/ui'] = {}, global.React, global.shouldForwardProp, global.styled, global.css, global.styledSystem, global.useEvents, global.Highlight, global.autoId, global.Color, global.themeGet, global.propTypes, global.useOnClickOutside, global.core, global.reactDom, global.ReachAlert, global.rect, global.CSSTransition, global.flushable));
}(this, (function (exports, React, shouldForwardProp, styled, css, styledSystem, useEvents, Highlight, autoId, Color, themeGet, propTypes, useOnClickOutside, core, reactDom, ReachAlert, rect, CSSTransition, flushable) { 'use strict';
var React__default = 'default' in React ? React['default'] : React;
var styled__default = 'default' in styled ? styled['default'] : styled;
css = css && Object.prototype.hasOwnProperty.call(css, 'default') ? css['default'] : css;
Highlight = Highlight && Object.prototype.hasOwnProperty.call(Highlight, 'default') ? Highlight['default'] : Highlight;
Color = Color && Object.prototype.hasOwnProperty.call(Color, 'default') ? Color['default'] : Color;
useOnClickOutside = useOnClickOutside && Object.prototype.hasOwnProperty.call(useOnClickOutside, 'default') ? useOnClickOutside['default'] : useOnClickOutside;
ReachAlert = ReachAlert && Object.prototype.hasOwnProperty.call(ReachAlert, 'default') ? ReachAlert['default'] : ReachAlert;
CSSTransition = CSSTransition && Object.prototype.hasOwnProperty.call(CSSTransition, 'default') ? CSSTransition['default'] : CSSTransition;
flushable = flushable && Object.prototype.hasOwnProperty.call(flushable, 'default') ? flushable['default'] : flushable;
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _taggedTemplateLiteralLoose(strings, raw) {
if (!raw) {
raw = strings.slice(0);
}
strings.raw = raw;
return strings;
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
var it;
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
if (it) o = it;
var i = 0;
return function () {
if (i >= o.length) return {
done: true
};
return {
done: false,
value: o[i++]
};
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
it = o[Symbol.iterator]();
return it.next.bind(it);
}
var config = {
roundedTop: {
properties: ['borderTopLeftRadius', 'borderTopRightRadius'],
scale: 'radii'
},
roundedBottom: {
properties: ['borderBottomLeftRadius', 'borderBottomRightRadius'],
scale: 'radii'
},
roundedLeft: {
properties: ['borderTopLeftRadius', 'borderBottomLeftRadius'],
scale: 'radii'
},
roundedRight: {
properties: ['borderTopRightRadius', 'borderBottomRightRadius'],
scale: 'radii'
},
roundedTopRight: {
property: 'borderTopRightRadius',
scale: 'radii'
},
roundedTopLeft: {
property: 'borderTopLeftRadius',
scale: 'radii'
},
roundedBottomRight: {
property: 'borderBottomRightRadius',
scale: 'radii'
},
roundedBottomLeft: {
property: 'borderBottomLeftRadius',
scale: 'radii'
},
rounded: {
property: 'borderRadius',
scale: 'radii'
},
d: {
property: 'display'
},
w: {
property: 'width',
scale: 'sizes'
},
minW: {
property: 'minWidth',
scale: 'sizes'
},
maxW: {
property: 'maxWidth',
scale: 'sizes'
},
h: {
property: 'height',
scale: 'sizes'
},
minH: {
property: 'minHeight',
scale: 'sizes'
},
maxH: {
property: 'maxHeight',
scale: 'sizes'
},
bgImg: {
property: 'backgroundImage'
},
bgSize: {
property: 'backgroundSize'
},
bgPos: {
property: 'backgroundPosition'
},
bgRepeat: {
property: 'backgroundRepeat'
},
pos: {
property: 'position'
},
flexDir: {
property: 'flexDirection'
},
shadow: {
property: 'boxShadow',
scale: 'shadows'
},
textDecoration: true,
overflowX: true,
overflowY: true,
textTransform: true,
animation: true,
appearance: true,
transform: true,
transformOrigin: true,
visibility: true,
whiteSpace: true,
userSelect: true,
pointerEvents: true,
wordBreak: true,
overflowWrap: true,
textOverflow: true,
boxSizing: true,
cursor: true,
resize: true,
transition: true,
listStyleType: true,
listStylePosition: true,
listStyleImage: true,
fill: {
property: 'fill',
scale: 'colors'
},
stroke: {
property: 'stroke',
scale: 'colors'
},
objectFit: true,
objectPosition: true,
backgroundAttachment: true,
outline: true
};
config.bgAttachment = config.backgroundAttachment;
config.textDecor = config.textDecoration;
config.listStylePos = config.listStylePosition;
config.listStyleImg = config.listStyleImage;
var extraConfig = /*#__PURE__*/styledSystem.system(config);
var transformAlias = function transformAlias(prop, propValue) {
var configKeys = Object.keys(config);
var result = {};
if (configKeys.includes(prop)) {
var _config$prop = config[prop],
properties = _config$prop.properties,
property = _config$prop.property;
if (properties) {
properties.forEach(function (_cssProp) {
return result[_cssProp] = propValue;
});
}
if (property) {
result[property] = propValue;
}
if (config[prop] === true) {
result[prop] = propValue;
}
} else {
result[prop] = propValue;
}
return result;
};
var transformAliasProps = function transformAliasProps(props) {
var result = {};
for (var prop in props) {
if (typeof props[prop] === 'object' && !Array.isArray(props[prop])) {
var _objectSpread2$1;
result = _objectSpread2({}, result, (_objectSpread2$1 = {}, _objectSpread2$1[prop] = transformAliasProps(props[prop]), _objectSpread2$1));
} else {
result = _objectSpread2({}, result, {}, transformAlias(prop, props[prop]));
}
}
return result;
};
var extraProps = /*#__PURE__*/Object.keys(config);
function _templateObject() {
var data = _taggedTemplateLiteralLoose(["\n ", ";\n ", ";\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var systemProps = /*#__PURE__*/styledSystem.compose(styledSystem.layout, styledSystem.color, styledSystem.space, styledSystem.background, styledSystem.border, styledSystem.grid, styledSystem.position, styledSystem.shadow, styledSystem.typography, styledSystem.flexbox, styledSystem.textStyle, styledSystem.buttonStyle, styledSystem.colorStyle);
var _shouldForwardProp = /*#__PURE__*/shouldForwardProp.createShouldForwardProp( /*#__PURE__*/[].concat(shouldForwardProp.props, extraProps));
var StyledBox = /*#__PURE__*/styled__default('div').withConfig({
shouldForwardProp: function shouldForwardProp(prop) {
return _shouldForwardProp(prop);
}
})( /*#__PURE__*/_templateObject(), systemProps, extraConfig);
var hover = '&:hover';
var active = '&:active, &[data-active=true]';
var focus = '&:focus';
var visited = '&:visited';
var even = '&:nth-of-type(even)';
var odd = '&:nth-of-type(odd)';
var disabled = '&:disabled, &:disabled:focus, &:disabled:hover, &[aria-disabled=true], &[aria-disabled=true]:focus, &[aria-disabled=true]:hover';
var checked = '&[aria-checked=true]';
var mixed = '&[aria-checked=mixed]';
var selected = '&[aria-selected=true]';
var invalid = '&[aria-invalid=true]';
var pressed = '&[aria-pressed=true]';
var readOnly = '&[aria-readonly=true], &[readonly]';
var first = '&:first-of-type';
var last = '&:last-of-type';
var expanded = '&[aria-expanded=true]';
var grabbed = '&[aria-grabbed=true]';
var notFirst = '&:not(:first-of-type)';
var notLast = '&:not(:last-of-type)';
var groupHover = '[role=group]:hover &';
var BoxWithPseudoStyles = /*#__PURE__*/styled__default(StyledBox)(function (_ref) {
var _css;
var _after = _ref._after,
_focus = _ref._focus,
_selected = _ref._selected,
_focusWithin = _ref._focusWithin,
_hover = _ref._hover,
_invalid = _ref._invalid,
_active = _ref._active,
_disabled = _ref._disabled,
_grabbed = _ref._grabbed,
_pressed = _ref._pressed,
_expanded = _ref._expanded,
_visited = _ref._visited,
_before = _ref._before,
_readOnly = _ref._readOnly,
_first = _ref._first,
_notFirst = _ref._notFirst,
_notLast = _ref._notLast,
_last = _ref._last,
_placeholder = _ref._placeholder,
_checked = _ref._checked,
_groupHover = _ref._groupHover,
_mixed = _ref._mixed,
_odd = _ref._odd,
_even = _ref._even;
return css((_css = {}, _css[hover] = transformAliasProps(_hover), _css[focus] = transformAliasProps(_focus), _css[active] = transformAliasProps(_active), _css[visited] = transformAliasProps(_visited), _css[disabled] = transformAliasProps(_disabled), _css[selected] = transformAliasProps(_selected), _css[invalid] = transformAliasProps(_invalid), _css[expanded] = transformAliasProps(_expanded), _css[grabbed] = transformAliasProps(_grabbed), _css[readOnly] = transformAliasProps(_readOnly), _css[first] = transformAliasProps(_first), _css[notFirst] = transformAliasProps(_notFirst), _css[notLast] = transformAliasProps(_notLast), _css[last] = transformAliasProps(_last), _css[odd] = transformAliasProps(_odd), _css[even] = transformAliasProps(_even), _css[mixed] = transformAliasProps(_mixed), _css[checked] = transformAliasProps(_checked), _css[pressed] = transformAliasProps(_pressed), _css[groupHover] = transformAliasProps(_groupHover), _css['&:before'] = transformAliasProps(_before), _css['&:after'] = transformAliasProps(_after), _css['&:focus-within'] = transformAliasProps(_focusWithin), _css['&::placeholder'] = transformAliasProps(_placeholder), _css));
});
var Box = /*#__PURE__*/React.forwardRef(function (props, ref) {
return React__default.createElement(BoxWithPseudoStyles, Object.assign({
ref: ref
}, props));
});
Box.displayName = 'Box';
var ButtonGroup = function ButtonGroup(_ref) {
var size = _ref.size,
variantColor = _ref.variantColor,
variant = _ref.variant,
isAttached = _ref.isAttached,
_ref$spacing = _ref.spacing,
spacing = _ref$spacing === void 0 ? 2 : _ref$spacing,
children = _ref.children,
rest = _objectWithoutPropertiesLoose(_ref, ["size", "variantColor", "variant", "isAttached", "spacing", "children"]);
var clones = React.Children.map(children, function (child, index) {
var isFirst = index === 0;
var isLast = index === React.Children.count(children) - 1;
if (!React__default.isValidElement(child)) {
return null;
}
return React.cloneElement(child, _objectSpread2({
size: size || child.props.size,
variantColor: child.props.variantColor || variantColor,
variant: child.props.variant || variant,
_focus: {
boxShadow: 'outline',
zIndex: 1
}
}, !isLast && !isAttached && {
mr: spacing
}, {}, isFirst && isAttached && {
roundedRight: 0
}, {}, isLast && isAttached && {
roundedLeft: 0
}, {}, !isFirst && !isLast && isAttached && {
rounded: 0
}));
});
return React__default.createElement(Box, Object.assign({
display: "inline-block"
}, rest), clones);
};
ButtonGroup.displayName = 'ButtonGroup';
var colors = {
transparent: 'transparent',
current: 'currentColor',
black: '#000000',
white: '#ffffff',
blue: /*#__PURE__*/Object.assign('#3700ff', {
100: '#F2F2FF',
200: '#E3E5FF',
300: '#C5CCFF',
400: '#AAB3FF',
900: '#5548ff',
hover: '#3100DC'
}),
ink: /*#__PURE__*/Object.assign('#0f1117', {
50: '#f4f4f5',
100: '#F9F9FC',
150: '#F4F4F5',
200: '#E7E7E8',
250: '#C8C8CC',
300: '#C8C8CC',
400: '#A7A7AD',
600: '#677282',
900: '#222933'
}),
darken: {
50: 'rgba(15, 17, 23, 0.05)',
100: 'rgba(15, 17, 23, 0.1)',
150: 'rgba(15, 17, 23, 0.15)'
},
red: '#de0014',
green: '#00a73e',
orange: '#f7aa00',
cyan: '#00d4ff',
feedback: {}
};
colors.feedback = {
error: colors.red,
success: colors.green,
warning: colors.orange,
info: colors.cyan
};
var containers = {
'screen-sm': '640px',
'screen-md': '768px',
'screen-lg': '1024px',
'screen-xl': '1280px'
};
var baseSizes = {
'0': '0px',
px: '1px',
'1': '4px',
'2': '8px',
'3': '12px',
'4': '16px',
'5': '20px',
'6': '24px',
'8': '32px',
'10': '40px',
'12': '48px',
'16': '64px',
'20': '80px',
'24': '96px',
'32': '128px',
'40': '160px',
'48': '192px',
'56': '224px',
'64': '256px'
};
var namedSpacingUnits = {
none: baseSizes[0],
'extra-tight': baseSizes[1],
tight: baseSizes[2],
'base-tight': baseSizes[3],
base: baseSizes[4],
'base-loose': baseSizes[5],
loose: baseSizes[6],
'extra-loose': baseSizes[8]
};
var space = function space(spacing) {
return spacing;
};
var sizes = /*#__PURE__*/_objectSpread2({}, baseSizes, {
containers: containers
}, namedSpacingUnits);
var typography = {
letterSpacings: {
tighter: '-0.02em',
tight: '-0.01em',
normal: '0',
wide: '0.025em',
wider: '0.05em',
widest: '0.1em'
},
lineHeights: {
normal: 'normal',
none: '1',
shorter: '1.333',
"short": '1.4',
base: '1.5',
tall: '1.625',
taller: '2'
},
fontWeights: {
hairline: 100,
thin: 200,
light: 300,
normal: 400,
medium: 500,
semibold: 600,
bold: 700,
extrabold: 800,
black: 900
},
fonts: {
heading: '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',
body: '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',
mono: 'SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace'
},
fontSizes: [12, 14, 16, 20, 24, 28, 32, 36, 48, 64, 96, 128]
};
var displayLarge = {
fontWeight: typography.fontWeights.semibold,
fontSize: typography.fontSizes[4],
lineHeight: typography.lineHeights.shorter,
letterSpacing: '-0.02em'
};
var displaySmall = {
fontWeight: typography.fontWeights.medium,
fontSize: typography.fontSizes[3],
lineHeight: typography.lineHeights["short"],
letterSpacing: '-0.02em'
};
var bodyLarge = {
fontWeight: typography.fontWeights.normal,
fontSize: typography.fontSizes[2],
lineHeight: typography.lineHeights.base,
letterSpacing: '-0.01em'
};
var bodyLargeMedium = /*#__PURE__*/_objectSpread2({}, bodyLarge, {
fontWeight: typography.fontWeights.medium
});
var bodySmall = {
fontWeight: typography.fontWeights.normal,
fontSize: typography.fontSizes[1],
lineHeight: typography.lineHeights["short"],
letterSpacing: '-0.01em'
};
var bodySmallMedium = /*#__PURE__*/_objectSpread2({}, bodySmall, {
fontWeight: typography.fontWeights.medium
});
var caption = {
fontSize: typography.fontSizes[0],
lineHeight: typography.lineHeights.shorter,
letterSpacing: '0.00em'
};
var captionMedium = /*#__PURE__*/_objectSpread2({}, bodySmall, {
fontWeight: typography.fontWeights.medium
});
var textStyles = {
display: {
large: displayLarge,
small: displaySmall
},
body: {
large: /*#__PURE__*/_objectSpread2({}, bodyLarge, {
medium: bodyLargeMedium
}),
small: /*#__PURE__*/_objectSpread2({}, bodySmall, {
medium: bodySmallMedium
})
},
caption: /*#__PURE__*/_objectSpread2({}, caption, {
medium: captionMedium
})
};
var typography$1 = /*#__PURE__*/_objectSpread2({}, typography, {
textStyles: textStyles
});
var space$1 = sizes;
var shadows = {
low: '0px 1px 2px rgba(0, 0, 0, 0.04)',
mid: '0px 1px 2px rgba(27, 39, 51, 0.04), 0px 4px 8px rgba(27, 39, 51, 0.04)',
high: '0px 8px 16px rgba(27, 39, 51, 0.08)',
inner: 'inset 0 2px 4px 0 rgba(0,0,0,0.06)',
none: 'none',
focus: '0 0 0 3px rgba(170, 179, 255, 0.75)',
'button.secondary': '0px 1px 2px rgba(0, 0, 0, 0.08), 0px 1px 4px rgba(0, 0, 0, 0.08)'
};
var breakpoints = ['30em', '48em', '62em', '80em'];
breakpoints.sm = breakpoints[0];
breakpoints.md = breakpoints[1];
breakpoints.lg = breakpoints[2];
breakpoints.xl = breakpoints[3];
var zIndices = {
hide: -1,
auto: 'auto',
'0': 0,
'10': 10,
'20': 20,
'30': 30,
'40': 40,
'50': 50,
'60': 60,
'70': 70,
'80': 80
};
var radii = {
none: '0',
sm: '0.125rem',
md: '0.25rem',
lg: '0.5rem',
full: '9999px'
};
var opacity = {
'0': '0',
'20%': '0.2',
'40%': '0.4',
'60%': '0.6',
'80%': '0.8',
'100%': '1'
};
var borders = {
none: 0,
'1px': '1px solid',
'2px': '2px solid',
'4px': '4px solid'
};
var theme = /*#__PURE__*/_objectSpread2({
breakpoints: breakpoints,
zIndices: zIndices,
radii: radii,
opacity: opacity,
borders: borders,
colors: colors
}, typography$1, {
sizes: sizes,
shadows: shadows,
space: space$1
});
var transition = 'all 0.2s cubic-bezier(0.23, 1, 0.32, 1)';
var baseProps = {
display: 'inline-flex',
appearance: 'none',
alignItems: 'center',
justifyContent: 'center',
transition: 'all 250ms',
userSelect: 'none',
position: 'relative',
whiteSpace: 'nowrap',
verticalAlign: 'middle',
lineHeight: 'shorter',
outline: 'none',
border: '1px solid',
borderColor: 'transparent'
};
var sizes$1 = {
lg: {
minHeight: 12,
minWidth: 9 * 14,
fontSize: '14px !important',
px: 5
},
md: {
minHeight: 10,
minWidth: 10,
fontSize: '14px !important',
px: 4
},
sm: {
minHeight: 6,
minWidth: 10,
fontSize: '11px !important',
px: 3
}
};
var unstyledStyle = {
userSelect: 'inherit',
bg: 'none',
border: 0,
color: 'inherit',
display: 'inline',
font: 'inherit',
lineHeight: 'inherit',
m: 0,
p: 0,
textAlign: 'inherit'
};
var linkVariantProps = function linkVariantProps() {
return {
p: 0,
height: 'unset',
lineHeight: 'normal',
color: 'blue',
minWidth: 'unset',
_hover: {
color: 'blue.hover',
textDecoration: 'underline'
},
_active: {
textDecoration: 'underline'
},
_focus: {
textDecoration: 'underline'
},
_disabled: {
color: '#A7A7AD'
}
};
};
var solidVariantProps = function solidVariantProps(_ref) {
var mode = _ref.mode,
customStyles = _ref.customStyles;
var style = {
primary: {
bg: 'blue',
color: 'white',
_hover: {
cursor: 'pointer'
},
_focus: {
borderColor: 'blue.300',
boxShadow: shadows.focus
},
_disabled: {
bg: 'blue.200',
cursor: 'not-allowed'
}
},
secondary: {
bg: 'blue.100',
color: 'blue',
border: '1px solid',
borderColor: 'blue.300',
boxShadow: null,
_hover: {
cursor: 'pointer',
bg: 'blue.200'
},
_focus: {
borderColor: 'blue.300',
boxShadow: shadows.focus
},
_disabled: {
bg: 'blue.200',
cursor: 'not-allowed',
color: 'white',
border: 'none'
}
},
tertiary: {
bg: 'white',
color: 'blue',
boxShadow: shadows['button.secondary'],
_hover: {
cursor: 'pointer',
bg: 'white',
boxShadow: shadows['button.secondary']
},
_focus: {
borderColor: 'blue.300',
boxShadow: shadows.focus
},
_disabled: {
bg: 'white',
pointerEvents: 'none',
cursor: 'not-allowed',
color: 'blue.300'
}
}
};
if (customStyles) {
return customStyles[mode];
}
return style[mode];
};
var sizeProps = function sizeProps(_ref2) {
var size = _ref2.size;
return sizes$1[size];
};
var variantProps = function variantProps(props) {
switch (props.variant) {
case 'solid':
return solidVariantProps(props);
case 'link':
return linkVariantProps();
case 'unstyled':
return unstyledStyle;
default:
return {};
}
};
var useButtonStyle = function useButtonStyle(props) {
return _objectSpread2({}, baseProps, {}, variantProps(props), {}, sizeProps(props));
};
function _templateObject$1() {
var data = _taggedTemplateLiteralLoose(["\n border: 0px;\n clip: rect(0px, 0px, 0px, 0px);\n height: 1px;\n width: 1px;\n margin: -1px;\n padding: 0px;\n overflow: hidden;\n white-space: nowrap;\n position: absolute;\n"]);
_templateObject$1 = function _templateObject() {
return data;
};
return data;
}
var VisuallyHidden = /*#__PURE__*/styled__default(Box)( /*#__PURE__*/_templateObject$1());
function _templateObject$2() {
var data = _taggedTemplateLiteralLoose(["\n animation: ", " ", " linear infinite;\n"]);
_templateObject$2 = function _templateObject() {
return data;
};
return data;
}
var spin = /*#__PURE__*/styled.keyframes(["0%{transform:rotate(0deg);}100%{transform:rotate(360deg);}"]);
var StyledBox$1 = /*#__PURE__*/styled__default(Box)( /*#__PURE__*/_templateObject$2(), spin, function (props) {
return props.speed;
});
var getSize = function getSize(size) {
switch (size) {
case 'xs':
return '0.75rem';
case 'sm':
return '1rem';
case 'md':
return '1.5rem';
case 'lg':
return '2rem';
case 'xl':
return '3rem';
default:
return size;
}
};
var Spinner = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
var _ref$size = _ref.size,
size = _ref$size === void 0 ? 'md' : _ref$size,
_ref$label = _ref.label,
label = _ref$label === void 0 ? 'Loading...' : _ref$label,
_ref$thickness = _ref.thickness,
thickness = _ref$thickness === void 0 ? '2px' : _ref$thickness,
_ref$speed = _ref.speed,
speed = _ref$speed === void 0 ? '0.85s' : _ref$speed,
color = _ref.color,
_ref$emptyColor = _ref.emptyColor,
emptyColor = _ref$emptyColor === void 0 ? 'transparent' : _ref$emptyColor,
props = _objectWithoutPropertiesLoose(_ref, ["size", "label", "thickness", "speed", "color", "emptyColor"]);
var _size = getSize(size);
return React__default.createElement(StyledBox$1, Object.assign({
ref: ref,
display: "inline-block",
borderWidth: thickness,
borderColor: "currentColor",
borderBottomColor: emptyColor,
borderLeftColor: emptyColor,
borderRadius: "100%",
speed: speed,
color: color,
size: _size
}, props), label && React__default.createElement(VisuallyHidden, null, label));
});
Spinner.displayName = 'Spinner';
var HoverChange = function HoverChange(_ref) {
var isHovered = _ref.isHovered,
isDisabled = _ref.isDisabled;
return React__default.createElement(Box, {
borderRadius: "6px",
position: "absolute",
width: "100%",
height: "100%",
left: 0,
top: 0,
bg: "darken.150",
opacity: !isDisabled && isHovered ? 1 : 0,
zIndex: 1,
transition: "all 250ms"
});
};
var Button = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
var isDisabled = _ref2.isDisabled,
isActive = _ref2.isActive,
children = _ref2.children,
Comp = _ref2.as,
_ref2$mode = _ref2.mode,
mode = _ref2$mode === void 0 ? 'primary' : _ref2$mode,
_ref2$variant = _ref2.variant,
variant = _ref2$variant === void 0 ? 'solid' : _ref2$variant,
type = _ref2.type,
_ref2$size = _ref2.size,
size = _ref2$size === void 0 ? 'md' : _ref2$size,
isLoading = _ref2.isLoading,
loadingText = _ref2.loadingText,
customStyles = _ref2.customStyles,
rest = _objectWithoutPropertiesLoose(_ref2, ["isDisabled", "isActive", "children", "as", "mode", "variant", "type", "size", "isLoading", "loadingText", "customStyles"]);
var styles = useButtonStyle({
variant: variant,
mode: mode,
size: size,
customStyles: customStyles
});
var _useHover = useEvents.useHover(),
hovered = _useHover[0],
bind = _useHover[1];
return React__default.createElement(Box, Object.assign({
disabled: isDisabled,
"aria-disabled": isDisabled,
ref: ref,
type: type,
borderRadius: "6px",
fontWeight: "medium",
position: "relative",
"data-active": isActive ? 'true' : undefined,
as: Comp || 'button'
}, rest, styles, bind), React__default.createElement(Box, {
as: "span",
display: "flex",
alignItems: "center",
justifyContent: "center",
position: "relative",
zIndex: 5
}, isLoading && React__default.createElement(Spinner, {
position: loadingText ? 'relative' : 'absolute',
mx: !loadingText ? 'auto' : 'unset',
color: "currentColor",
size: size === 'sm' ? 'xs' : 'sm'
}), isLoading ? React__default.createElement(Box, {
ml: "tight"
}, loadingText) || React__default.createElement(Box, {
ml: "tight",
as: "span",
opacity: 0
}, children) : children), mode === 'primary' ? React__default.createElement(HoverChange, {
isDisabled: isDisabled || false,
isHovered: hovered
}) : null);
});
Button.displayName = 'Button';
var Flex = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
var align = _ref.align,
justify = _ref.justify,
wrap = _ref.wrap,
direction = _ref.direction,
rest = _objectWithoutPropertiesLoose(_ref, ["align", "justify", "wrap", "direction"]);
return React__default.createElement(Box, Object.assign({
ref: ref,
display: "flex",
flexDirection: direction,
alignItems: align,
justifyContent: justify,
flexWrap: wrap
}, rest));
});
Flex.displayName = 'Flex';
var _window = undefined;
try {
_window = window;
} catch (e) {}
function getWindow(node) {
var _node$ownerDocument$d, _node$ownerDocument;
return (_node$ownerDocument$d = node === null || node === void 0 ? void 0 : (_node$ownerDocument = node.ownerDocument) === null || _node$ownerDocument === void 0 ? void 0 : _node$ownerDocument.defaultView) !== null && _node$ownerDocument$d !== void 0 ? _node$ownerDocument$d : _window;
}
function checkIsBrowser() {
var _window = getWindow();
return Boolean(typeof _window !== 'undefined' && _window.document && _window.document.createElement);
}
var isBrowser = /*#__PURE__*/checkIsBrowser();
function isFunction(value) {
return typeof value === 'function';
}
function createContext(options) {
if (options === void 0) {
options = {};
}
var _options = options,
_options$strict = _options.strict,
strict = _options$strict === void 0 ? true : _options$strict,
_options$errorMessage = _options.errorMessage,
errorMessage = _options$errorMessage === void 0 ? 'useContext must be inside a Provider with a value' : _options$errorMessage,
name = _options.name;
var Context = React__default.createContext(undefined);
Context.displayName = name;
function useContext() {
var context = React__default.useContext(Context);
if (!context && strict) throw new Error(errorMessage);
return context;
}
return [Context.Provider, useContext, Context];
}
function assignRef(ref, value) {
if (ref == null) return;
if (isFunction(ref)) {
ref(value);
return;
}
try {
ref.current = value;
} catch (error) {
throw new Error("Cannot assign value '" + value + "' to ref '" + ref + "'");
}
}
function mergeRefs() {
for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
refs[_key] = arguments[_key];
}
return function (value) {
refs.forEach(function (ref) {
return assignRef(ref, value);
});
};
}
var __DEV__ = "development" !== 'production';
function runIfFn(valueOrFn) {
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
return isFunction(valueOrFn) ? valueOrFn.apply(void 0, args) : valueOrFn;
}
function warn(options) {
if (options.condition && __DEV__) {
console.warn(options.message);
}
}
function callAllHandlers() {
for (var _len3 = arguments.length, fns = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
fns[_key3] = arguments[_key3];
}
return function (event) {
fns.some(function (fn) {
fn && fn(event);
return event && event.defaultPrevented;
});
};
}
function isString(value) {
return Object.prototype.toString.call(value) === '[object String]';
}
function omit(object, keys) {
var result = {};
for (var key in object) {
if (keys.includes(key)) continue;
result[key] = object[key];
}
return result;
}
function pick(object, keys) {
var result = {};
for (var _iterator = _createForOfIteratorHelperLoose(keys), _step; !(_step = _iterator()).done;) {
var key = _step.value;
if (key in object) {
result[key] = object[key];
}
}
return result;
}
var startPad = function startPad(n, z, s) {
if (z === void 0) {
z = 2;
}
if (s === void 0) {
s = '0';
}
return (n + '').length <= z ? ['', '-'][+(n < 0)] + (s.repeat(z) + Math.abs(n)).slice(-1 * z) : n + '';
};
function useControllableProp(propValue, stateValue) {
var _React$useRef = React.useRef(propValue !== undefined),
isControlled = _React$useRef.current;
var value = isControlled && typeof propValue !== 'undefined' ? propValue : stateValue;
return [isControlled, value];
}
var defaultPropsMap = {
value: 'value',
defaultValue: 'defaultValue',
onChange: 'onChange'
};
function useControllableState(props) {
var valueProp = props.value,
defaultValue = props.defaultValue,
onChange = props.onChange,
_props$shouldUpdate = props.shouldUpdate,
shouldUpdate = _props$shouldUpdate === void 0 ? function () {
return true;
} : _props$shouldUpdate,
_props$name = props.name,
name = _props$name === void 0 ? 'Component' : _props$name,
_props$propsMap = props.propsMap,
propsMap = _props$propsMap === void 0 ? defaultPropsMap : _props$propsMap;
var _React$useState = React.useState(defaultValue),
valueState = _React$useState[0],
setValue = _React$useState[1];
var _React$useRef2 = React.useRef(valueProp !== undefined),
isControlled = _React$useRef2.current;
React.useEffect(function () {
var nextIsControlled = valueProp !== undefined;
var nextMode = nextIsControlled ? 'a controlled' : 'an uncontrolled';
var mode = isControlled ? 'a controlled' : 'an uncontrolled';
warn({
condition: isControlled !== nextIsControlled,
message: "Warning: " + name + " is changing from " + mode + " to " + nextMode + " component. " + 'Components should not switch from controlled to uncontrolled (or vice versa). ' + ("Use the '" + propsMap['value'] + "' with an '" + propsMap['onChange'] + "' handler. ") + ("If you want an uncontrolled component, remove the " + propsMap['value'] + " prop and use '" + propsMap['defaultValue'] + "' instead. \"") + 'More info: https://fb.me/react-controlled-components'
});
}, [valueProp, isControlled, name]);
var _React$useRef3 = React.useRef(defaultValue),
_defaultValue = _React$useRef3.current;
React.useEffect(function () {
warn({
condition: _defaultValue !== defaultValue,
message: "Warning: A component is changing the default value of an uncontrolled " + name + " after being initialized. " + ("To suppress this warning opt to use a controlled " + name + ".")
});
}, [JSON.stringify(defaultValue)]);
var value = isControlled ? valueProp : valueState;
var updateValue = React.useCallback(function (next) {
var nextValue = runIfFn(next, value);
var shouldUpdateState = shouldUpdate(value, nextValue);
if (!shouldUpdateState) return;
if (!isControlled) {
setValue(next);
}
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue);
}, [onChange, shouldUpdate, isControlled, value]);
return [value, updateValue];
}
function usePrevious(value) {
var valueRef = React.useRef();
React.useEffect(function () {
valueRef.current = value;
}, [value]);
return valueRef.current;
}
function useDisclosure(props) {
if (props === void 0) {
props = {};
}
var _props = props,
onCloseProp = _props.onClose,
onOpenProp = _props.onOpen;
var _React$useState = React.useState(props.defaultIsOpen || false),
isOpenState = _React$useState[0],
setIsOpen = _React$useState[1];
var _useControllableProp = useControllableProp(props.isOpen, isOpenState),
isControlled = _useControllableProp[0],
isOpen = _useControllableProp[1];
var prevIsOpen = usePrevious(isOpen);
var onClose = React.useCallback(function () {
if (!isControlled) {
setIsOpen(false);
}
if (onCloseProp) {
onCloseProp();
}
}, [isControlled, onCloseProp]);
var onOpen = React.useCallback(function () {
if (!isControlled) {
setIsOpen(true);
}
if (onOpenProp) {
onOpenProp();
}
}, [isControlled, onOpenProp]);
var onToggle = React.useCallback(function () {
var action = isOpen ? onClose : onOpen;
action();
}, [isOpen, onOpen, onClose]);
return {
isOpen: Boolean(isOpen),
prevIsOpen: Boolean(prevIsOpen),
onOpen: onOpen,
onClose: onClose,
onToggle: onToggle,
isControlled: isControlled
};
}
function useLatestRef(value) {
var ref = React.useRef(value);
React.useEffect(function () {
ref.current = value;
}, [value]);
return ref;
}
function useEventListener(event, handler, doc, options) {
if (doc === void 0) {
doc = isBrowser ? document : null;
}
var savedHandler = useLatestRef(handler);
React.useEffect(function () {
if (!doc) return;
var listener = function listener(event) {
savedHandler.current(event);
};
doc.addEventListener(event, listener, options);
return function () {
doc.removeEventListener(event, listener, options);
};
}, [event, doc, options, savedHandler]);
return function () {
var _doc;
(_doc = doc) === null || _doc === void 0 ? void 0 : _doc.removeEventListener(event, savedHandler.current, options);
};
}
function useForceUpdate() {
var _React$useState = React.useState(0),
count = _React$useState[0],
setCount = _React$useState[1];
return React.useCallback(function () {
return setCount(count + 1);
}, [count]);
}
function generatePrefix(prefix, id) {
return prefix + "-" + id;
}
function useId(idProp, prefix) {
var uuid = autoId.useId();
var id = idProp !== null && idProp !== void 0 ? idProp : uuid;
return prefix ? generatePrefix(prefix, id) : id;
}
function useIds(idProp) {
var id = useId(idProp);
for (var _len = arguments.length, prefixes = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
prefixes[_key - 1] = arguments[_key];
}
return prefixes.map(function (prefix) {
return generatePrefix(prefix, id);
});
}
function assignRef$1(ref, value) {
if (ref == null) return;
if (typeof ref === 'function') {
ref(value);
} else {
try {
ref.current = value;
} catch (error) {
throw new Error("Cannot assign value \"" + value + "\" to ref \"" + ref + "\"");
}
}
}
function useMergeRefs() {
for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
refs[_key] = arguments[_key];
}
return React.useMemo(function () {
if (refs.every(function (ref) {
return ref == null;
})) {
return null;
}
return function (node) {
refs.forEach(function (ref) {
if (ref) assignRef$1(ref, node);
});
};
}, refs);
}
var useSafeLayoutEffect = isBrowser ? React.useLayoutEffect : React.useEffect;
var useTimeout = function useTimeout(_ref) {
var onTimeout = _ref.onTimeout,
duration = _ref.duration;
var _useState = React.useState(true),
activated = _useState[0],
setActivated = _useState[1];
var timeoutRef = React.useRef();
var stopTimeout = React.useCallback(function () {
window.clearTimeout(timeoutRef.current);
setActivated(false);
}, []);
React.useEffect(function () {
if (activated) {
timeoutRef.current = window.setTimeout(function () {
onTimeout();
}, duration);
return function () {
stopTimeout();
};
}
return;
}, [onTimeout, activated, duration, stopTimeout]);
var startTimeout = React.useCallback(function () {
setActivated(true);
}, []);
return {
stopTimeout: stopTimeout,
startTimeout: startTimeout
};
};
var get = function get(color, hue) {
return color + "." + hue;
};
var addOpacity = function addOpacity(color, opacity) {
return Color(color).fade(1 - opacity).rgb().string();
};
var addWhite = function addWhite(color, opacity) {
return Color(color).mix(Color('#fff'), opacity).hex();
};
var addBlack = function addBlack(color, opacity) {
return Color(color).mix(Color('#000'), opacity).hex();
};
var isDarkColor = function isDarkColor(color) {
return Color(color).isDark();
};
var generateAlphaColors = function generateAlphaColors(color) {
return {
900: addOpacity(color, 0.92),
800: addOpacity(color, 0.8),
700: addOpacity(color, 0.6),
600: addOpacity(color, 0.48),
500: addOpacity(color, 0.38),
400: addOpacity(color, 0.24),
300: addOpacity(color, 0.16),
200: addOpacity(color, 0.12),
100: addOpacity(color, 0.08),
50: addOpacity(color, 0.04)
};
};
var colorEmphasis = function colorEmphasis(color, emphasis) {
switch (emphasis) {
case 'high':
return color;
case 'medium':
return generateAlphaColors(color)[700];
case 'low':
return generateAlphaColors(color)[500];
case 'lowest':
return generateAlphaColors(color)[300];
default:
return undefined;
}
};
var generateStripe = function generateStripe(_ref) {
var _ref$size = _ref.size,
size = _ref$size === void 0 ? '1rem' : _ref$size,
_ref$color = _ref.color,
color = _ref$color === void 0 ? 'rgba(255, 255, 255, 0.15)' : _ref$color;
return styled.css(["background-image:linear-gradient( 45deg,", " 25%,transparent 25%,transparent 50%,", " 50%,", " 75%,transparent 75%,transparent );background-size:", " ", ";"], color, color, color, size, size);
};
var ThemeContext = /*#__PURE__*/React__default.createContext(theme);
var ThemeProvider = function ThemeProvider(_ref) {
var _ref$theme = _ref.theme,
theme$1 = _ref$theme === void 0 ? theme : _ref$theme,
children = _ref.children;
return React__default.createElement(styled.ThemeProvider, {
theme: theme$1
}, children);
};
var useTheme = function useTheme() {
var theme = React.useContext(ThemeContext);
if (theme === undefined) {
throw new Error('useTheme must be used within a ThemeProvider');
}
return theme;
};
var isBrowser$1 = typeof window !== 'undefined';
var isSupported = function isSupported(api) {
return isBrowser$1 && api in window;
};
function useMediaQuery(query) {
var _React$useState = React.useState(function () {
if (!isSupported('matchMedia')) return false;
return window.matchMedia(query).matches;
}),
matches = _React$useState[0],
setMatches = _React$useState[1];
useSafeLayoutEffect(function () {
if (!isSupported('matchMedia')) return;
var mediaQueryList = window.matchMedia(query);
var listener = function listener() {
return setMatches(mediaQueryList.matches);
};
mediaQueryList.addListener(listener);
listener();
return function () {
mediaQueryList.removeListener(listener);
};
}, [query]);
return [matches, setMatches];
}
(function (Color) {
Color["Accent"] = "accent";
Color["Bg"] = "bg";
Color["BgAlt"] = "bg-alt";
Color["BgLight"] = "bg-light";
Color["Invert"] = "invert";
Color["TextHover"] = "text-hover";
Color["TextTitle"] = "text-title";
Color["TextCaption"] = "text-caption";
Color["TextBody"] = "text-body";
Color["InputPlaceholder"] = "input-placeholder";
Color["Border"] = "border";
Color["FeedbackAlert"] = "feedback-alert";
Color["FeedbackError"] = "feedback-error";
Color["FeedbackSuccess"] = "feedback-success";
})(exports.Color || (exports.Color = {}));
var colorGet = function colorGet(path, fallback) {
return themeGet.themeGet('colors.' + path, fallback);
};
var colors$1 = function colors(props) {
var _light, _dark;
return {
light: (_light = {}, _light[exports.Color.Accent] = colorGet('blue')(props), _light[exports.Color.Bg] = 'white', _light[exports.Color.BgAlt] = colorGet('ink.50')(props), _light[exports.Color.BgLight] = 'white', _light[exports.Color.Invert] = colorGet('ink')(props), _light[exports.Color.TextHover] = colorGet('blue')(props), _light[exports.Color.TextTitle] = colorGet('ink')(props), _light[exports.Color.TextCaption] = colorGet('ink.600')(props), _light[exports.Color.TextBody] = colorGet('ink.900')(props), _light[exports.Color.InputPlaceholder] = colorGet('ink.400')(props), _light[exports.Color.Border] = 'rgb(229, 229, 236)', _light[exports.Color.FeedbackAlert] = colorGet('orange')(props), _light[exports.Color.FeedbackError] = colorGet('red')(props), _light[exports.Color.FeedbackSuccess] = colorGet('green')(props), _light),
dark: (_dark = {}, _dark[exports.Color.Accent] = colorGet('blue.400')(props), _dark[exports.Color.Bg] = colorGet('ink')(props), _dark[exports.Color.BgAlt] = 'rgba(255,255,255,0.05)', _dark[exports.Color.BgLight] = 'rgba(255,255,255,0.08)', _dark[exports.Color.Invert] = 'white', _dark[exports.Color.TextHover] = colorGet('blue.300')(props), _dark[exports.Color.TextTitle] = 'white', _dark[exports.Color.TextCaption] = '#a7a7ad', _dark[exports.Color.TextBody] = colorGet('ink.300')(props), _dark[exports.Color.InputPlaceholder] = 'rgba(255,255,255,0.3)', _dark[exports.Color.Border] = 'rgb(39, 41, 46)', _dark[exports.Color.FeedbackAlert] = colorGet('orange')(props), _dark[exports.Color.FeedbackError] = colorGet('red')(props), _dark[exports.Color.FeedbackSuccess] = colorGet('green')(props), _dark)
};
};
var colorModeStyles = function colorModeStyles(props) {
return colors$1(props)[props.colorMode];
};
var colorMap = function colorMap(props) {
return Object.keys(colors$1(props)[props.colorMode]);
};
var color = function color(name) {
return "var(--colors-" + name + ")";
};
var themeColor = function themeColor(name) {
return name;
};
var generateCssVariables = function generateCssVariables(mode) {
return function (_ref) {
var _ref$colorMode = _ref.colorMode,
colorMode = _ref$colorMode === void 0 ? mode : _ref$colorMode,
rest = _objectWithoutPropertiesLoose(_ref, ["colorMode"]);
return colorMap(_objectSpread2({
colorMode: colorMode
}, rest)).map(function (key) {
return "--colors-" + key + ": " + colorModeStyles(_objectSpread2({
colorMode: colorMode
}, rest))[key] + ";";
});
};
};
function _templateObject$3() {
var data = _taggedTemplateLiteralLoose(["\n :root{\n ", ";\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n ", ";\n }\n }\n\n @media (prefers-color-scheme: light) {\n :root {\n ", ";\n }\n }\n\n html, body, #__next {\n background: var(--colors-bg);\n border-color: var(--colors-border);\n }\n\n input:-webkit-autofill,\n input:-webkit-autofill:hover,\n input:-webkit-autofill:focus,\n textarea:-webkit-autofill,\n textarea:-webkit-autofill:hover,\n textarea:-webkit-autofill:focus,\n select:-webkit-autofill,\n select:-webkit-autofill:hover,\n select:-webkit-autofill:focus {\n -webkit-text-fill-color: var(--colors-text-body);\n font-size: 16px !important;\n transition: background-color 5000s ease-in-out 0s;\n }\n\n input:-ms-input-placeholder,\n textarea:-ms-input-placeholder {\n color: var(--colors-input-placeh