{"version":3,"file":"Slot.utils.cjs","names":[],"sources":["../../../src/components/Slot/Slot.utils.ts"],"sourcesContent":["import * as React from 'react';\n\ntype AnyProps = Record<string, any>;\n\n/**\n * @description Slot 컴포넌트의 props와 자식 요소의 props를 병합하는 함수입니다.\n */\nexport function mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n  // 모든 자식의 props를 오버라이드 해야 합니다.\n  const overrideProps = { ...childProps };\n\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      // handler가 둘 다 존재하는 경우\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args: unknown[]) => {\n          childPropValue(...args);\n          slotPropValue(...args);\n        };\n      }\n      // handler가 slotProps에만 존재하는 경우\n      else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    }\n    // style 및 className 병합\n    else if (propName === 'style') {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === 'className') {\n      overrideProps[propName] = [slotPropValue, childPropValue]\n        .filter(Boolean)\n        .join(' ');\n    }\n  }\n\n  return { ...slotProps, ...overrideProps };\n}\n\ntype ElementWithRef = React.ReactElement<React.RefAttributes<HTMLElement>>;\n// React 19 이전 버전에서 `element.props.ref`에 접근하면 경고가 표시되고, `element.ref` 사용을 제안합니다.\n// React 19 부터는 `element.ref`에 액세스하면 그 반대가 됩니다.\n// https://github.com/facebook/react/pull/28348\n//\n// 경고가 표시되지 않는 방법을 사용하여 ref에 접근합니다.\nexport function getElementRef(element: React.ReactElement) {\n  // React <=18 in DEV\n  let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n  let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element as any).ref;\n  }\n\n  // React 19 in DEV\n  getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n  mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element as ElementWithRef).props.ref;\n  }\n\n  // Not DEV\n  return (element as ElementWithRef).props.ref || (element as any).ref;\n}\n"],"mappings":";;;;AAOA,SAAgB,WAAW,WAAqB,YAAsB;CAEpE,MAAM,gBAAgB,EAAE,GAAG,YAAY;CAEvC,KAAK,MAAM,YAAY,YAAY;EACjC,MAAM,gBAAgB,UAAU;EAChC,MAAM,iBAAiB,WAAW;EAGlC,IADkB,WAAW,KAAK,SACrB;OAEP,iBAAiB,gBACnB,cAAc,aAAa,GAAG,SAAoB;IAChD,eAAe,GAAG,KAAK;IACvB,cAAc,GAAG,KAAK;;QAIrB,IAAI,eACP,cAAc,YAAY;SAIzB,IAAI,aAAa,SACpB,cAAc,YAAY;GAAE,GAAG;GAAe,GAAG;GAAgB;OAC5D,IAAI,aAAa,aACtB,cAAc,YAAY,CAAC,eAAe,eAAe,CACtD,OAAO,QAAQ,CACf,KAAK,IAAI;;CAIhB,OAAO;EAAE,GAAG;EAAW,GAAG;EAAe;;AAS3C,SAAgB,cAAc,SAA6B;CAEzD,IAAI,SAAS,OAAO,yBAAyB,QAAQ,OAAO,MAAM,EAAE;CACpE,IAAI,UAAU,UAAU,oBAAoB,UAAU,OAAO;CAC7D,IAAI,SACF,OAAQ,QAAgB;CAI1B,SAAS,OAAO,yBAAyB,SAAS,MAAM,EAAE;CAC1D,UAAU,UAAU,oBAAoB,UAAU,OAAO;CACzD,IAAI,SACF,OAAQ,QAA2B,MAAM;CAI3C,OAAQ,QAA2B,MAAM,OAAQ,QAAgB"}