UNPKG

@meonode/ui

Version:

A structured approach to component composition with built-in theming, prop separation, and dynamic children handling.

84 lines 7.45 kB
"use strict";/** * Custom React Type Checker (TypeScript Version) * Provides utilities for identifying and checking React component/element types. * Inspired by react-is package but implemented in TypeScript with type safety. */function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}import React from"react";/** * Symbol identifiers for React internal component types * These are used to identify different kinds of React elements and components */export var REACT_ELEMENT_TYPE=Symbol["for"]("react.transitional.element");export var REACT_PORTAL_TYPE=Symbol["for"]("react.portal");export var REACT_FRAGMENT_TYPE=Symbol["for"]("react.fragment");export var REACT_STRICT_MODE_TYPE=Symbol["for"]("react.strict_mode");export var REACT_PROFILER_TYPE=Symbol["for"]("react.profiler");export var REACT_PROVIDER_TYPE=Symbol["for"]("react.provider");export var REACT_CONSUMER_TYPE=Symbol["for"]("react.consumer");export var REACT_CONTEXT_TYPE=Symbol["for"]("react.context");export var REACT_FORWARD_REF_TYPE=Symbol["for"]("react.forward_ref");export var REACT_SUSPENSE_TYPE=Symbol["for"]("react.suspense");export var REACT_SUSPENSE_LIST_TYPE=Symbol["for"]("react.suspense_list");export var REACT_MEMO_TYPE=Symbol["for"]("react.memo");export var REACT_LAZY_TYPE=Symbol["for"]("react.lazy");export var REACT_VIEW_TRANSITION_TYPE=Symbol["for"]("react.view_transition");export var REACT_CLIENT_REFERENCE=Symbol["for"]("react.client.reference");/** * Union type of all possible React internal type symbols. * Used to strongly type return values from type checking functions. *//** * Interface describing the minimal shape of a React element-like object. * Used for type checking without coupling to React's internal element type. *//** * Determines the internal React type of an object. * Examines the object's $$typeof property and nested type properties * to identify what kind of React element or component it represents. * @param {unknown} object The object to check * @returns {boolean} - The matching React type symbol or undefined if not a React object */export function typeOf(a){if("object"===_typeof(a)&&null!==a){var b=a.$$typeof;switch(b){case REACT_ELEMENT_TYPE:{var c=a.type;switch(c){case REACT_FRAGMENT_TYPE:case REACT_PROFILER_TYPE:case REACT_STRICT_MODE_TYPE:case REACT_SUSPENSE_TYPE:case REACT_SUSPENSE_LIST_TYPE:case REACT_VIEW_TRANSITION_TYPE:return c;default:{var d=null===c||void 0===c?void 0:c.$$typeof;return d===REACT_CONTEXT_TYPE||d===REACT_FORWARD_REF_TYPE||d===REACT_LAZY_TYPE||d===REACT_MEMO_TYPE||d===REACT_CONSUMER_TYPE?d:b}}}case REACT_PORTAL_TYPE:return b}}}/** * Checks if an object is a React Context Consumer * @param {unknown} object Object to check * @returns {boolean} - True if object is a Context.Consumer */export var isContextConsumer=function isContextConsumer(a){return typeOf(a)===REACT_CONSUMER_TYPE};/** * Checks if an object is a React Context Provider * @param {unknown} object Object to check * @returns {boolean} - True if object is a Context.Provider */export var isContextProvider=function isContextProvider(a){return typeOf(a)===REACT_CONTEXT_TYPE};/** * Checks if an object is a valid React element * @param {unknown} object Object to check * @returns {boolean} - True if object is a React element */export var isElement=function isElement(a){return"object"===_typeof(a)&&null!==a&&a.$$typeof===REACT_ELEMENT_TYPE};/** * Checks if an object is a React forwardRef component * @param {unknown} object Object to check * @returns {boolean} - True if object is a forwardRef component */export var isForwardRef=function isForwardRef(a){return typeOf(a)===REACT_FORWARD_REF_TYPE};/** * Checks if an object is a React Fragment * @param {unknown} object Object to check * @returns {boolean} - True if object is a Fragment */export var isFragment=function isFragment(a){return typeOf(a)===REACT_FRAGMENT_TYPE};/** * Checks if an object is a React lazy component * @param {unknown} object Object to check * @returns {boolean} - True if object is a lazy component */export var isLazy=function isLazy(a){return typeOf(a)===REACT_LAZY_TYPE};/** * Checks if an object is a React memo component * @param {unknown} object Object to check * @returns {boolean} - True if object is a memo component */export var isMemo=function isMemo(a){return typeOf(a)===REACT_MEMO_TYPE};/** * Checks if an object is a React portal * @param {unknown} object Object to check * @returns {boolean} - True if object is a portal */export var isPortal=function isPortal(a){return typeOf(a)===REACT_PORTAL_TYPE};/** * Checks if an object is a React Profiler * @param {unknown} object Object to check * @returns {boolean} - True if object is a Profiler */export var isProfiler=function isProfiler(a){return typeOf(a)===REACT_PROFILER_TYPE};/** * Checks if an object is a React StrictMode component * @param {unknown} object Object to check * @returns {boolean} - True if object is StrictMode */export var isStrictMode=function isStrictMode(a){return typeOf(a)===REACT_STRICT_MODE_TYPE};/** * Checks if an object is a React Suspense component * @param {unknown} object Object to check * @returns {boolean} - True if object is Suspense */export var isSuspense=function isSuspense(a){return typeOf(a)===REACT_SUSPENSE_TYPE};/** * Checks if an object is a React SuspenseList component * @param {unknown} object Object to check * @returns {boolean} - True if `object` is SuspenseList */export var isSuspenseList=function isSuspenseList(a){return typeOf(a)===REACT_SUSPENSE_LIST_TYPE};/** * Set of known valid React special element types. * Used for quick validation of element types in isValidElementType(). * Includes Fragment, Profiler, StrictMode, Suspense and SuspenseList. */var knownValidSymbols=new Set([REACT_FRAGMENT_TYPE,REACT_PROFILER_TYPE,REACT_STRICT_MODE_TYPE,REACT_SUSPENSE_TYPE,REACT_SUSPENSE_LIST_TYPE,REACT_VIEW_TRANSITION_TYPE]);/** * Checks if a type is a valid React element type that can be rendered. * This includes strings (for DOM elements), functions (for components), * and various React-specific types like Fragment, Context, etc. * @param {any} type The type to validate * @returns {boolean} - True if the type can be rendered as a React element */export var isValidElementType=function isValidElementType(a){if("string"==typeof a||"number"==typeof a||"bigint"==typeof a||"function"==typeof a)return!0;if(knownValidSymbols.has(a))return!0;if("object"===_typeof(a)&&null!==a){var b=a.$$typeof;return b===REACT_LAZY_TYPE||b===REACT_MEMO_TYPE||b===REACT_CONTEXT_TYPE||b===REACT_CONSUMER_TYPE||b===REACT_FORWARD_REF_TYPE||b===REACT_CLIENT_REFERENCE||b===REACT_PROVIDER_TYPE}return!1};/** * Type guard that checks if a component is a React class component. * Examines the component's prototype for the isReactComponent marker property * that React adds to all class components. * @param {unknown} component Component to check * @returns {boolean} - True if component is a React class component */export var isReactClassComponent=function isReactClassComponent(a){if("function"!=typeof a)return!1;try{var b=Object.getPrototypeOf(a);return b===React.Component||b===React.PureComponent||b instanceof React.Component}catch(a){return!1}};