@meonode/ui
Version:
A structured approach to component composition with built-in theming, prop separation, and dynamic children handling.
84 lines • 7.45 kB
JavaScript
;/**
* 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}};