{"version":3,"file":"index.cjs","names":["React"],"sources":["../../../src/components/Iterator/index.tsx"],"sourcesContent":["import { isPlainObject } from '@modern-kit/utils';\nimport React, { useCallback } from 'react';\n\nexport interface IteratorProps<T> {\n  items: T[] | readonly T[];\n  itemKey?: T extends Record<PropertyKey, any> ? keyof T : string;\n  renderItem: (item: T, index: number) => React.JSX.Element;\n}\n\n/**\n * @description 주어진 배열을 반복하면서, 각 아이템을 렌더링하는 컴포넌트입니다.\n *\n * `itemKey`로 문자열을 넘겨주면, 각 요소에서 해당 프로퍼티 key의 값을 각 요소의 `unique key`로 설정합니다.\n *\n * 문자열/숫자 배열의 경우 itemKey를 넘기지 않아도 자동으로 `${item}_${index}`형태로 지정됩니다.\n *\n * @template T - 반복할 아이템의 타입\n * @param {IteratorProps<T>} props - Iterator 컴포넌트 props\n * @param {T[] | readonly T[]} props.items - 반복할 아이템의 배열\n * @param {string} [props.itemKey] - 아이템의 고유 키\n * @param {(item: T, index: number) => React.JSX.Element} props.renderItem - 각 아이템을 렌더링할 함수\n *\n * @example\n * ```tsx\n * // 문자열 배열 사용 예시\n * <Iterator\n *   items={['가', '나', '다']}\n *   renderItem={(item) => <div>{item}</div>}\n * />\n *\n * @example\n * ```tsx\n * // 객체 배열 사용 예시\n * <Iterator\n *   items={[{ id: 1, name: '홍길동' }, { id: 2, name: '김철수' }]}\n *   itemKey=\"id\"\n *   renderItem={(item) => <div>{item.name}</div>}\n * />\n * ```\n */\nexport const Iterator = <T,>({\n  items,\n  itemKey,\n  renderItem,\n}: IteratorProps<T>) => {\n  const getKey = useCallback(\n    (item: T, index: number) => {\n      return isPlainObject(item)\n        ? item?.[itemKey as keyof T] || index\n        : `${item}_${index}`;\n    },\n    [itemKey]\n  );\n  return (\n    <>\n      {items.map((item, index) => (\n        <React.Fragment key={getKey(item, index)}>\n          {renderItem(item, index)}\n        </React.Fragment>\n      ))}\n    </>\n  );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAa,YAAgB,EAC3B,OACA,SACA,iBACsB;CACtB,MAAM,UAAA,GAAA,MAAA,cACH,MAAS,UAAkB;EAC1B,QAAA,GAAA,kBAAA,eAAqB,KAAK,GACtB,OAAO,YAAuB,QAC9B,GAAG,KAAK,GAAG;IAEjB,CAAC,QAAQ,CACV;CACD,OACE,iBAAA,GAAA,kBAAA,KAAA,kBAAA,UAAA,EAAA,UACG,MAAM,KAAK,MAAM,UAChB,iBAAA,GAAA,kBAAA,KAACA,MAAAA,QAAM,UAAP,EAAA,UACG,WAAW,MAAM,MAAM,EACT,EAFI,OAAO,MAAM,MAAM,CAEvB,CACjB,EACD,CAAA"}