UNPKG

@crossed/primitive

Version:

A universal & performant styling library for React Native, Next.js & React

67 lines (66 loc) 2.65 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var InputGroup_exports = {}; __export(InputGroup_exports, { createInputGroup: () => createInputGroup }); module.exports = __toCommonJS(InputGroup_exports); var import_jsx_runtime = require("react/jsx-runtime"); var import_react = require("react"); var import_context = require("./context"); var import_core = require("@crossed/core"); const createInputGroup = (Styled) => (0, import_react.forwardRef)((props, ref) => { const [states, setStates] = (0, import_react.useState)({ isActive: false, isFocus: false, isHover: false }); const inputRef = (0, import_react.useRef)(null); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_context.InputProvider, { states, setStates: (style) => setStates((old) => ({ ...old, ...style })), inputRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Slot, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Styled, { ...props, ref }) }) } ); }); const Slot = ({ children, ...props }) => { const { setStates, states, inputRef } = (0, import_context.useInputContext)(); return (0, import_react.isValidElement)(children) && import_react.Children.count(children) === 1 ? (0, import_react.cloneElement)(children, { ...props, states, onPointerEnter: (0, import_core.composeEventHandlers)(props.onPointerEnter, () => { setStates({ isHover: true }); }), onPointerLeave: (0, import_core.composeEventHandlers)(props.onPointerLeave, () => { setStates({ isHover: false }); }), onPress: (0, import_core.composeEventHandlers)(() => { var _a; (_a = inputRef.current) == null ? void 0 : _a.focus(); }, props.onPress) }) : children; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { createInputGroup }); //# sourceMappingURL=InputGroup.js.map