UNPKG

@codeworker.br/govbr-tw-react

Version:

Biblioteca de componentes React usando Tailwind CSS que implementa o Padrão Digital de Governo.

47 lines (46 loc) 2.69 kB
var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { Children, forwardRef, isValidElement } from "react"; import BASE_CLASSNAMES from "../../config/baseClassNames"; import { cn } from "../../libs/utils"; import formLabelHintVariants from "./hint-variants"; import formLabelLabelVariants from "./label-variants"; import formLabelVariants from "./variants"; function isSpanElement(node) { return isValidElement(node) && node.type === "span"; } const FormLabel = forwardRef((_a, ref) => { var { className, children, htmlFor, labelClassName, hintClassName } = _a, props = __rest(_a, ["className", "children", "htmlFor", "labelClassName", "hintClassName"]); const childArray = Children.toArray(children); const firstChild = childArray[0]; const lastChild = childArray[childArray.length - 1]; const hasLabel = isSpanElement(firstChild); const hasHint = childArray.length > (hasLabel ? 1 : 0) && isSpanElement(lastChild); const labelSlot = hasLabel ? firstChild : undefined; const hintSlot = hasHint ? lastChild : undefined; const controlStart = hasLabel ? 1 : 0; const controlEnd = hasHint ? childArray.length - 1 : childArray.length; const controlSlots = childArray.slice(controlStart, controlEnd); const firstControl = controlSlots[0]; const controlId = isValidElement(firstControl) ? firstControl.props.id : undefined; const resolvedHtmlFor = typeof htmlFor === "string" ? htmlFor : typeof controlId === "string" ? controlId : undefined; return (_jsxs("div", Object.assign({ ref: ref, className: cn(formLabelVariants(), className, BASE_CLASSNAMES.formLabel.root) }, props, { children: [labelSlot && (_jsx("label", { htmlFor: resolvedHtmlFor, className: cn(formLabelLabelVariants(), labelClassName, labelSlot.props.className, BASE_CLASSNAMES.formLabel.label), children: labelSlot.props.children })), controlSlots, hintSlot && (_jsx("span", { className: cn(formLabelHintVariants(), hintClassName, hintSlot.props.className, BASE_CLASSNAMES.formLabel.hint), children: hintSlot.props.children }))] }))); }); FormLabel.displayName = "FormLabel"; export default FormLabel;