@vimeo/iris
Version:
Vimeo Design System
99 lines (96 loc) • 6.26 kB
JavaScript
import { b as __rest, c as __assign } from '../../../tslib.es6-7f0e734f.js';
import React__default, { cloneElement } from 'react';
import { HiddenMark, Faux, radii, ToggleIcon, nullStyle } from './Input.style.esm.js';
import { Label } from '../Shared.esm.js';
import { Wrapper } from '../Wrapper/Wrapper.esm.js';
import { Focus } from '../../../utils/css.esm.js';
import 'styled-components';
import 'polished';
import '../../../color/colors.esm.js';
import '../../../typography/Text/Text.esm.js';
import '../../../typography/Text/Text.style.esm.js';
import '../../../typography/typography.esm.js';
import '../../../tokens/core.esm.js';
import '../../../tokens/color/index.esm.js';
import '../../../tokens/color/background/background.esm.js';
import '../../../tokens/util/readToken.esm.js';
import '../../../tokens/util/clamp.esm.js';
import '../../../tokens/color/format/format.esm.js';
import '../../../tokens/color/format/primary.esm.js';
import '../../../tokens/color/format/secondary.esm.js';
import '../../../tokens/color/format/tertiary.esm.js';
import '../../../tokens/color/rainbow/rainbow.esm.js';
import '../../../tokens/color/rainbow/conic/index.esm.js';
import '../../../tokens/color/rainbow/conic/sm.esm.js';
import '../../../tokens/color/rainbow/conic/xl.esm.js';
import '../../../tokens/color/rainbow/linear/index.esm.js';
import '../../../tokens/color/rainbow/linear/sm.esm.js';
import '../../../tokens/color/rainbow/linear/xl.esm.js';
import '../../../tokens/color/livestream/livestream.esm.js';
import '../../../tokens/color/status/status.esm.js';
import '../../../tokens/color/status/caution.esm.js';
import '../../../tokens/color/status/negative.esm.js';
import '../../../tokens/color/status/positive.esm.js';
import '../../../tokens/color/stroke/stroke.esm.js';
import '../../../tokens/color/surface/surface.esm.js';
import '../../../tokens/color/text/text.esm.js';
import '../../../tokens/util/round.esm.js';
import '../../../tokens/color/upsell/upsell.esm.js';
import '../../../tokens/color/upsell/sm.esm.js';
import '../../../tokens/color/upsell/xl.esm.js';
import '../../../tokens/color/upsell/new.esm.js';
import '../../../tokens/edge/edge.esm.js';
import '../../../tokens/space/space.esm.js';
import '../../../tokens/typography/index.esm.js';
import '../../../tokens/typography/size/size.esm.js';
import '../../../typography/Text/EditableText.esm.js';
import '../../../utils/HOCs/withIris.esm.js';
import '../../../utils/hooks/useLayoutStyles.esm.js';
import '../../../utils/DOM/geometry.esm.js';
import '../../../typography/Paragraph/Paragraph.esm.js';
import '../../../typography/Paragraph/Paragraph.style.esm.js';
function Mark(_a) {
var _b = _a.autoComplete, autoComplete = _b === void 0 ? true : _b, checked = _a.checked, defaultChecked = _a.defaultChecked, children = _a.children, className = _a.className, defaultValue = _a.defaultValue, disabled = _a.disabled, forwardRef = _a.forwardRef, id = _a.id, messages = _a.messages, name = _a.name, onChange = _a.onChange, required = _a.required, status = _a.status, _c = _a.style, style = _c === void 0 ? nullStyle : _c, theme = _a.theme, type = _a.type, value = _a.value, props = __rest(_a, ["autoComplete", "checked", "defaultChecked", "children", "className", "defaultValue", "disabled", "forwardRef", "id", "messages", "name", "onChange", "required", "status", "style", "theme", "type", "value"]);
if (autoComplete === true)
autoComplete = 'on';
if (autoComplete === false)
autoComplete = 'off';
return (React__default.createElement(Wrapper, { className: className, messages: messages, onKeyUp: a11yKey, status: status, style: style, theme: theme },
React__default.createElement("div", { style: { position: 'relative' } },
React__default.createElement(HiddenMark, { autoComplete: autoComplete, defaultValue: defaultValue, checked: checked, defaultChecked: defaultChecked, disabled: disabled, id: id, name: name, onChange: onChange, ref: forwardRef, required: required, type: type, value: value }),
children && (React__default.createElement(CustomMark, __assign({ checked: checked, children: children, disabled: disabled, htmlFor: id }, props))),
!children && (React__default.createElement(DefaultMark, __assign({ disabled: disabled, id: id, status: status, type: type }, props))))));
}
function DefaultMark(_a) {
var disabled = _a.disabled, icon = _a.icon, id = _a.id, indeterminate = _a.indeterminate, label = _a.label, mirror = _a.mirror, _b = _a.size, size = _b === void 0 ? 'md' : _b, status = _a.status, theme = _a.theme, type = _a.type;
return (React__default.createElement(React__default.Fragment, null,
React__default.createElement(Label, { disabled: disabled, fauxMark: Faux, format: status, htmlFor: id, mirror: mirror, size: size, theme: theme, type: type }, label),
React__default.createElement(Faux, { disabled: disabled, indeterminate: indeterminate, mirror: mirror, size: size, theme: theme, type: type },
React__default.createElement(Focus, { parent: HiddenMark, radius: radii[type], theme: theme }),
React__default.createElement(ToggleIcon, null, icon))));
}
function CustomMark(_a) {
var children = _a.children, htmlFor = _a.htmlFor, checked = _a.checked, disabled = _a.disabled;
// When Iris button is used as radio, make sure the type is not "button"
if (children.type.displayName === 'Button') {
if (!children.props.element ||
children.props.element === 'button') {
console.warn('@vimeo/iris: Using <Button /> with type "button" is not supported as a <Radio /> child, <Button /> will be rendered as span');
}
}
var clonedElementProps = {
disabled: disabled,
checked: checked,
};
if (children.type.displayName === 'Button') {
clonedElementProps.element = 'span';
}
return (children && (React__default.createElement("label", { htmlFor: htmlFor, style: { cursor: disabled ? 'not-allowed' : 'pointer' } }, cloneElement(children, clonedElementProps))));
}
function a11yKey(_a) {
var key = _a.key, target = _a.target;
if (key === 'Enter' || key.includes('Arrow')) {
target.checked = !target.checked;
}
}
export { Mark };