UNPKG

@retriever-ui/system

Version:
89 lines (88 loc) 3.06 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var css_1 = require("@emotion/css"); var react_1 = require("@emotion/react"); var theme_1 = require("@retriever-ui/theme"); var lodash_1 = __importDefault(require("lodash")); var react_2 = __importDefault(require("react")); var _1 = require("."); var getDomProps_1 = __importDefault(require("./utils/getDomProps")); var tags_1 = require("./utils/tags"); /** * > The retrieverFactory work to create retriever elements with styled props. * * exemple: * ```tsx * const ComponentDiv = retrieverFactory('div') * * const App = () => { * return ( * <ComponentDiv bg="primary.400">...something</ComponentDiv> * ) * } * ``` */ var retrieverFactory = function (element) { return react_2.default.forwardRef(function (props, ref) { // get all valid dom properties. var domProps = (0, getDomProps_1.default)(element, props).domProps; // get theme from provider to use with styled props. var theme = (0, react_1.useTheme)(); // If dont have theme will be pass a default theme if (lodash_1.default.isEmpty(theme)) { theme = theme_1.lightTheme; } var classe = (0, _1.styles)(__assign({ theme: theme }, props)); classe.name = "retriever-" + classe.name; // valid if have property `as`, this property will change the dom element selected my element argument. if (props === null || props === void 0 ? void 0 : props.as) { return react_2.default.createElement(props.as, __assign(__assign({ className: (0, css_1.css)(classe) }, domProps), { ref: ref })); } return react_2.default.createElement(element, __assign(__assign({ className: (0, css_1.css)(classe) }, domProps), { ref: ref })); }); }; /** * retriever object is a abstraction of retrieverFactory to use syntax friendly. * * This factory have a lot of properties to use, check the documentation to more details. * * This line has creating this object. * retriever = { * div: retrieverFactory('div'), * ... * } * * exemple: * ```tsx * const ComponentDiv = retriever.div * * const App = () => { * return ( * <> * <ComponentDiv bg="primary.400">something...</ComponentDiv> * // or * <retriever.div bg="secondary.400">...another way</retriever.div> * </> * ) * } * ``` */ var retriever = {}; tags_1.tags.forEach(function (tag) { return (retriever[tag] = retrieverFactory(tag)); }); exports.default = retriever;