@razorpay/blade
Version:
The Design System that powers Razorpay
125 lines (121 loc) • 5.44 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import 'react';
import { labelOptionalIndicatorTextSize, labelTextSize, labelWidth, labelLeftMarginRight, labelMarginBottom } from './formTokens.js';
import '../VisuallyHidden/index.web.js';
import '../Typography/index.js';
import '../../utils/index.js';
import '../../utils/metaAttribute/index.js';
import '../Box/BaseBox/index.js';
import '../BladeProvider/index.js';
import '../../utils/makeSpace/index.js';
import '../../tokens/global/index.js';
import getIn from '../../utils/lodashButBetter/get.js';
import { jsx, jsxs } from 'react/jsx-runtime';
import useTheme from '../BladeProvider/useTheme.js';
import { useBreakpoint } from '../../utils/useBreakpoint/useBreakpoint.js';
import { getPlatformType } from '../../utils/getPlatformType/getPlatformType.js';
import { Text } from '../Typography/Text/Text.js';
import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden.web.js';
import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
import { makeSpace } from '../../utils/makeSpace/makeSpace.js';
import { size } from '../../tokens/global/size.js';
import { makeSize } from '../../utils/makeSize/makeSize.js';
import { metaAttribute } from '../../utils/metaAttribute/metaAttribute.web.js';
import { MetaConstants } from '../../utils/metaAttribute/metaConstants.js';
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var FormLabel = function FormLabel(_ref) {
var _ref$as = _ref.as,
as = _ref$as === void 0 ? 'span' : _ref$as,
_ref$position = _ref.position,
position = _ref$position === void 0 ? 'top' : _ref$position,
_ref$necessityIndicat = _ref.necessityIndicator,
necessityIndicator = _ref$necessityIndicat === void 0 ? 'none' : _ref$necessityIndicat,
accessibilityText = _ref.accessibilityText,
children = _ref.children,
id = _ref.id,
htmlFor = _ref.htmlFor,
_ref$size = _ref.size,
size$1 = _ref$size === void 0 ? 'medium' : _ref$size;
var _useTheme = useTheme(),
theme = _useTheme.theme;
var _useBreakpoint = useBreakpoint({
breakpoints: theme.breakpoints
}),
matchedDeviceType = _useBreakpoint.matchedDeviceType;
var isDesktop = matchedDeviceType === 'desktop';
var isReactNative = getPlatformType() === 'react-native';
var necessityLabel = null;
var isLabelLeftPositioned = position === 'left' && isDesktop;
if (necessityIndicator === 'optional') {
necessityLabel = /*#__PURE__*/jsx(Text, {
variant: "caption",
size: labelOptionalIndicatorTextSize[size$1],
color: "surface.text.gray.muted",
children: "(optional)"
});
}
if (necessityIndicator === 'required') {
necessityLabel = /*#__PURE__*/jsx(Text, {
variant: "body",
size: isLabelLeftPositioned ? 'medium' : 'small',
color: "feedback.text.negative.intense",
alignSelf: "flex-start",
children: "*"
});
}
var computedAccessibilityNode = /*#__PURE__*/jsxs(VisuallyHidden, {
children: [necessityIndicator !== 'none' && /*#__PURE__*/jsx(Text, {
children: necessityIndicator
}), /*#__PURE__*/jsx(Text, {
children: accessibilityText
})]
});
var textNode = /*#__PURE__*/jsxs(BaseBox, {
gap: necessityIndicator === 'optional' ? 'spacing.2' : 'spacing.0',
display: "flex",
flexDirection: "row",
alignItems: "center"
// flexWrap="wrap"
,
maxHeight: makeSpace(size[36]),
children: [/*#__PURE__*/jsx(Text, {
variant: "body",
size: labelTextSize[isLabelLeftPositioned ? 'left' : 'top'][size$1],
color: isLabelLeftPositioned ? 'surface.text.gray.subtle' : 'surface.text.gray.muted',
truncateAfterLines: 2,
weight: "semibold",
wordBreak: isLabelLeftPositioned ? 'break-word' : undefined,
children: children
}), computedAccessibilityNode, necessityLabel]
});
// What harm can it do?
if (isReactNative) {
return /*#__PURE__*/jsx(BaseBox, {
marginRight: "spacing.5",
marginBottom: "spacing.2",
children: textNode
});
}
var Component = as;
// only set 120px label when device is desktop
var width = isLabelLeftPositioned && isDesktop ? makeSize(labelWidth[size$1]) : 'auto';
return /*#__PURE__*/jsx(Component, _objectSpread(_objectSpread({
htmlFor: htmlFor,
style: {
width: width,
flexShrink: 0,
marginRight: isLabelLeftPositioned ? makeSpace(getIn(theme, labelLeftMarginRight[size$1])) : makeSpace(getIn(theme, 'spacing.0'))
},
id: id
}, metaAttribute({
name: MetaConstants.FormLabel
})), {}, {
children: /*#__PURE__*/jsx(BaseBox, {
marginBottom: isLabelLeftPositioned ? 'spacing.0' : labelMarginBottom[size$1],
children: textNode
})
}));
};
export { FormLabel };
//# sourceMappingURL=FormLabel.js.map