{"version":3,"file":"IntlayerNode.mjs","names":[],"sources":["../../src/IntlayerNode.tsx"],"sourcesContent":["import type { NodeProps } from '@intlayer/core/interpreter';\nimport type { ResolvedEditor } from '@intlayer/types/module_augmentation';\nimport {\n  isValidElement,\n  type PropsWithChildren,\n  type ReactElement,\n  type ReactNode,\n} from 'react';\n\nexport type IntlayerNode<\n  T = NodeProps['children'],\n  AdditionalProps = Record<string, never>,\n> = ResolvedEditor<T, ReactNode> & {\n  value: T;\n} & AdditionalProps &\n  T;\n\ntype RenderIntlayerNodeProps<T> = PropsWithChildren<{\n  value: T;\n  children: ReactNode;\n  additionalProps?: { [key: string]: any };\n}>;\n\nexport const renderIntlayerNode = <\n  T, // Broadened to support arrays, numbers, objects, etc.\n>({\n  children,\n  value,\n  additionalProps,\n}: RenderIntlayerNodeProps<T>): IntlayerNode<T> => {\n  const element: ReactElement<any> = isValidElement(children) ? (\n    children\n  ) : (\n    <>{children}</>\n  );\n\n  return new Proxy(element as ReactElement, {\n    get(target, prop, receiver) {\n      if (prop === 'value') return value;\n      if (prop === Symbol.toPrimitive) return () => value ?? '';\n      if (prop === 'toString') return () => String(value ?? '');\n      if (prop === 'valueOf') return () => value;\n\n      // Additional Props take precedence\n      if (additionalProps && prop in additionalProps) {\n        return additionalProps[prop as keyof typeof additionalProps];\n      }\n\n      // Delegate native methods/properties to the underlying value\n      if (\n        value !== null &&\n        value !== undefined &&\n        typeof prop === 'string' &&\n        prop !== 'constructor' &&\n        !(prop in target) // Prevents overwriting React internals (type, props, key)\n      ) {\n        const valObj = Object(value); // Safely boxes primitives (e.g., 50 -> Number object)\n\n        if (prop in valObj) {\n          const valProp = valObj[prop];\n          return typeof valProp === 'function' ? valProp.bind(value) : valProp;\n        }\n      }\n\n      // Fallback to React Element\n      return Reflect.get(target, prop, receiver);\n    },\n  }) as unknown as IntlayerNode<T>;\n};\n"],"mappings":";;;;AAuBA,MAAa,sBAEX,EACA,UACA,OACA,sBACiD;CACjD,MAAM,UAA6B,eAAe,SAAS,GACzD,WAEA,kCAAG,UAAY;AAGjB,QAAO,IAAI,MAAM,SAAyB,EACxC,IAAI,QAAQ,MAAM,UAAU;AAC1B,MAAI,SAAS,QAAS,QAAO;AAC7B,MAAI,SAAS,OAAO,YAAa,cAAa,SAAS;AACvD,MAAI,SAAS,WAAY,cAAa,OAAO,SAAS,GAAG;AACzD,MAAI,SAAS,UAAW,cAAa;AAGrC,MAAI,mBAAmB,QAAQ,gBAC7B,QAAO,gBAAgB;AAIzB,MACE,UAAU,QACV,UAAU,UACV,OAAO,SAAS,YAChB,SAAS,iBACT,EAAE,QAAQ,SACV;GACA,MAAM,SAAS,OAAO,MAAM;AAE5B,OAAI,QAAQ,QAAQ;IAClB,MAAM,UAAU,OAAO;AACvB,WAAO,OAAO,YAAY,aAAa,QAAQ,KAAK,MAAM,GAAG;;;AAKjE,SAAO,QAAQ,IAAI,QAAQ,MAAM,SAAS;IAE7C,CAAC"}