UNPKG

@yamada-ui/react

Version:

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

1 lines 7.01 kB
{"version":3,"file":"props.cjs","names":["conditionProperties","styleProperties","result: Dict","mergeRefs"],"sources":["../../../../src/core/components/props.ts"],"sourcesContent":["import type { Dict, Merge } from \"../../utils\"\nimport { useMemo } from \"react\"\nimport isEqual from \"react-fast-compare\"\nimport {\n cx,\n handlerAll,\n isArray,\n isEmptyObject,\n isFunction,\n isObject,\n isUndefined,\n merge,\n mergeRefs,\n omitObject,\n splitObject,\n} from \"../../utils\"\nimport { conditionProperties, styleProperties } from \"../css\"\n\ntype MergeAll<Y extends Dict[]> = Y extends [infer M]\n ? M\n : Y extends [infer D, ...infer H]\n ? H extends any[]\n ? Merge<D, MergeAll<H>>\n : D\n : never\n\nfunction isEvent(key: string) {\n return /^on[A-Z]/.test(key)\n}\n\nexport const cssProps = new Set<string>([\n ...conditionProperties,\n ...styleProperties,\n])\n\nexport type ShouldForwardProp = (prop: string) => boolean\n\nexport function createShouldForwardProp(\n forwardProps: string[] = [],\n): ShouldForwardProp {\n return function (prop: string): boolean {\n if (forwardProps.includes(prop)) return true\n\n if (prop.startsWith(\"--\")) return false\n\n return !cssProps.has(prop)\n }\n}\n\ninterface MergePropsOptions {\n mergeClassName?: boolean\n mergeCSS?: boolean\n mergeEvent?: boolean\n mergeRef?: boolean\n mergeStyle?: boolean\n}\n\nexport function mergeProps<Y extends Dict[]>(...args: Y) {\n return function ({\n mergeClassName = true,\n mergeCSS = true,\n mergeEvent = true,\n mergeRef = true,\n mergeStyle = true,\n }: MergePropsOptions = {}): MergeAll<Y> {\n let result: Dict = {}\n\n for (const props of args) {\n for (const key in result) {\n if (mergeRef && key === \"ref\") {\n result[key] = mergeRefs(result[key], props[key])\n\n continue\n }\n\n if (\n mergeEvent &&\n isEvent(key) &&\n isFunction(result[key]) &&\n isFunction(props[key])\n ) {\n result[key] = handlerAll(result[key], props[key])\n\n continue\n }\n\n if (mergeClassName && (key === \"className\" || key === \"class\")) {\n result[key] = cx(result[key], props[key])\n\n continue\n }\n\n if (mergeStyle && key === \"style\") {\n result[key] = merge(result[key] ?? {}, props[key] ?? {})\n\n continue\n }\n\n if (mergeCSS && key === \"css\") {\n if (isArray(result[key])) {\n result[key].push(props[key])\n } else {\n result[key] ??= []\n\n result[key] = [result[key], props[key]]\n }\n\n continue\n }\n\n result[key] = !isUndefined(props[key]) ? props[key] : result[key]\n }\n\n for (const key in props) {\n if (isUndefined(result[key])) result[key] = props[key]\n }\n }\n\n return result as any\n }\n}\n\ntype CallbackProps<Y extends Dict = Dict> = (props: Y) => Y\n\ntype PropsOrCallback<Y extends Dict = Dict> = CallbackProps<Y> | Y\n\nexport function chainProps<Y extends Dict = Dict>(\n ...props: PropsOrCallback<Y>[]\n) {\n return function (options: MergePropsOptions = {}) {\n if (!props.length) return (a: Y) => a\n\n if (props.length === 1)\n return function (b: Y) {\n const a = props[0] ?? {}\n const c = isFunction(a) ? a(b) : mergeProps(a, b)(options)\n\n return c\n } as CallbackProps<Y>\n\n return props.reduce(function (a, b) {\n return function (c: Y = {} as Y) {\n const d = isFunction(a) ? a(c) : mergeProps(a, c)(options)\n const f = isFunction(b) ? b(d) : mergeProps(b, d)(options)\n\n return f\n }\n }) as CallbackProps<Y>\n }\n}\n\nexport function isEqualProps<\n Y extends Dict,\n M extends Dict,\n D extends keyof M | keyof Y,\n>(a: Y, b: M, omitKeys: D[] = []) {\n return isEqual(\n omitObject(a, omitKeys as (keyof Y)[]),\n omitObject(b, omitKeys as (keyof M)[]),\n )\n}\n\nexport function useSplitProps<Y extends Dict, M extends keyof Y>(\n props: Y,\n keys: M[] | readonly M[],\n) {\n return useMemo(() => splitObject<Y, M>(props, keys), [props, keys])\n}\n\nexport function extractProps(props: Dict, keys: readonly string[] | string[]) {\n let result: Dict = {}\n\n Object.entries(props).forEach(([key, value]) => {\n if (!cssProps.has(key)) return\n\n if (keys.includes(key)) {\n result = merge(result, { [key]: value })\n } else if (isObject(value)) {\n value = extractProps(value, keys)\n\n if (isEmptyObject(value)) return\n\n result = merge(result, { [key]: value })\n }\n })\n\n return result\n}\n\nexport function useExtractProps(\n props: Dict,\n keys: readonly string[] | string[],\n) {\n return useMemo(() => extractProps(props, keys), [props, keys])\n}\n"],"mappings":"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"}