UNPKG

@yamada-ui/react

Version:

React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion

106 lines (104 loc) 4.39 kB
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs'); const require_ref = require('../../utils/ref.cjs'); const require_utils_index = require('../../utils/index.cjs'); const require_conditions = require('../css/conditions.cjs'); const require_styles = require('../css/styles.cjs'); let react = require("react"); react = require_rolldown_runtime.__toESM(react); let react_fast_compare = require("react-fast-compare"); react_fast_compare = require_rolldown_runtime.__toESM(react_fast_compare); //#region src/core/components/props.ts function isEvent(key) { return /^on[A-Z]/.test(key); } const cssProps = new Set([...require_conditions.conditionProperties, ...require_styles.styleProperties]); function createShouldForwardProp(forwardProps = []) { return function(prop) { if (forwardProps.includes(prop)) return true; if (prop.startsWith("--")) return false; return !cssProps.has(prop); }; } function mergeProps(...args) { return function({ mergeClassName = true, mergeCSS = true, mergeEvent = true, mergeRef = true, mergeStyle = true } = {}) { let result = {}; for (const props of args) { for (const key in result) { if (mergeRef && key === "ref") { result[key] = require_ref.mergeRefs(result[key], props[key]); continue; } if (mergeEvent && isEvent(key) && (0, require_utils_index.utils_exports.isFunction)(result[key]) && (0, require_utils_index.utils_exports.isFunction)(props[key])) { result[key] = (0, require_utils_index.utils_exports.handlerAll)(result[key], props[key]); continue; } if (mergeClassName && (key === "className" || key === "class")) { result[key] = (0, require_utils_index.utils_exports.cx)(result[key], props[key]); continue; } if (mergeStyle && key === "style") { result[key] = (0, require_utils_index.utils_exports.merge)(result[key] ?? {}, props[key] ?? {}); continue; } if (mergeCSS && key === "css") { if ((0, require_utils_index.utils_exports.isArray)(result[key])) result[key].push(props[key]); else { result[key] ??= []; result[key] = [result[key], props[key]]; } continue; } result[key] = !(0, require_utils_index.utils_exports.isUndefined)(props[key]) ? props[key] : result[key]; } for (const key in props) if ((0, require_utils_index.utils_exports.isUndefined)(result[key])) result[key] = props[key]; } return result; }; } function chainProps(...props) { return function(options = {}) { if (!props.length) return (a) => a; if (props.length === 1) return function(b) { const a = props[0] ?? {}; return (0, require_utils_index.utils_exports.isFunction)(a) ? a(b) : mergeProps(a, b)(options); }; return props.reduce(function(a, b) { return function(c = {}) { const d = (0, require_utils_index.utils_exports.isFunction)(a) ? a(c) : mergeProps(a, c)(options); return (0, require_utils_index.utils_exports.isFunction)(b) ? b(d) : mergeProps(b, d)(options); }; }); }; } function isEqualProps(a, b, omitKeys = []) { return (0, react_fast_compare.default)((0, require_utils_index.utils_exports.omitObject)(a, omitKeys), (0, require_utils_index.utils_exports.omitObject)(b, omitKeys)); } function useSplitProps(props, keys) { return (0, react.useMemo)(() => (0, require_utils_index.utils_exports.splitObject)(props, keys), [props, keys]); } function extractProps(props, keys) { let result = {}; Object.entries(props).forEach(([key, value]) => { if (!cssProps.has(key)) return; if (keys.includes(key)) result = (0, require_utils_index.utils_exports.merge)(result, { [key]: value }); else if ((0, require_utils_index.utils_exports.isObject)(value)) { value = extractProps(value, keys); if ((0, require_utils_index.utils_exports.isEmptyObject)(value)) return; result = (0, require_utils_index.utils_exports.merge)(result, { [key]: value }); } }); return result; } function useExtractProps(props, keys) { return (0, react.useMemo)(() => extractProps(props, keys), [props, keys]); } //#endregion exports.chainProps = chainProps; exports.createShouldForwardProp = createShouldForwardProp; exports.cssProps = cssProps; exports.extractProps = extractProps; exports.isEqualProps = isEqualProps; exports.mergeProps = mergeProps; exports.useExtractProps = useExtractProps; exports.useSplitProps = useSplitProps; //# sourceMappingURL=props.cjs.map