{"version":3,"sources":["../../../src/primitives/message/MessageAttachments.tsx"],"sourcesContent":["\"use client\";\n\nimport { ComponentType, type FC, memo, useMemo } from \"react\";\nimport { useMessage, useMessageRuntime } from \"../../context\";\nimport { useMessageAttachment } from \"../../context/react/AttachmentContext\";\nimport { AttachmentRuntimeProvider } from \"../../context/providers/AttachmentRuntimeProvider\";\nimport { CompleteAttachment } from \"../../types\";\n\nexport namespace MessagePrimitiveAttachments {\n  export type Props = {\n    components:\n      | {\n          Image?: ComponentType | undefined;\n          Document?: ComponentType | undefined;\n          File?: ComponentType | undefined;\n          Attachment?: ComponentType | undefined;\n        }\n      | undefined;\n  };\n}\n\nconst getComponent = (\n  components: MessagePrimitiveAttachments.Props[\"components\"],\n  attachment: CompleteAttachment,\n) => {\n  const type = attachment.type;\n  switch (type) {\n    case \"image\":\n      return components?.Image ?? components?.Attachment;\n    case \"document\":\n      return components?.Document ?? components?.Attachment;\n    case \"file\":\n      return components?.File ?? components?.Attachment;\n    default:\n      const _exhaustiveCheck: never = type;\n      throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);\n  }\n};\n\nconst AttachmentComponent: FC<{\n  components: MessagePrimitiveAttachments.Props[\"components\"];\n}> = ({ components }) => {\n  const Component = useMessageAttachment((a) => getComponent(components, a));\n\n  if (!Component) return null;\n  return <Component />;\n};\n\nconst MessageAttachmentImpl: FC<\n  MessagePrimitiveAttachments.Props & { attachmentIndex: number }\n> = ({ components, attachmentIndex }) => {\n  const messageRuntime = useMessageRuntime();\n  const runtime = useMemo(\n    () => messageRuntime.getAttachmentByIndex(attachmentIndex),\n    [messageRuntime, attachmentIndex],\n  );\n\n  return (\n    <AttachmentRuntimeProvider runtime={runtime}>\n      <AttachmentComponent components={components} />\n    </AttachmentRuntimeProvider>\n  );\n};\n\nconst MessageAttachment = memo(\n  MessageAttachmentImpl,\n  (prev, next) =>\n    prev.attachmentIndex === next.attachmentIndex &&\n    prev.components?.Image === next.components?.Image &&\n    prev.components?.Document === next.components?.Document &&\n    prev.components?.File === next.components?.File &&\n    prev.components?.Attachment === next.components?.Attachment,\n);\n\nexport const MessagePrimitiveAttachments: FC<\n  MessagePrimitiveAttachments.Props\n> = ({ components }) => {\n  const attachmentsCount = useMessage((message) => {\n    if (message.role !== \"user\") return 0;\n    return message.attachments.length;\n  });\n\n  return Array.from({ length: attachmentsCount }, (_, index) => (\n    <MessageAttachment\n      key={index}\n      attachmentIndex={index}\n      components={components}\n    />\n  ));\n};\n\nMessagePrimitiveAttachments.displayName = \"MessagePrimitive.Attachments\";\n"],"mappings":";;;AAEA,SAAiC,MAAM,eAAe;AACtD,SAAS,YAAY,yBAAyB;AAC9C,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAwCjC;AAxBT,IAAM,eAAe,CACnB,YACA,eACG;AACH,QAAM,OAAO,WAAW;AACxB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,YAAY,SAAS,YAAY;AAAA,IAC1C,KAAK;AACH,aAAO,YAAY,YAAY,YAAY;AAAA,IAC7C,KAAK;AACH,aAAO,YAAY,QAAQ,YAAY;AAAA,IACzC;AACE,YAAM,mBAA0B;AAChC,YAAM,IAAI,MAAM,4BAA4B,gBAAgB,EAAE;AAAA,EAClE;AACF;AAEA,IAAM,sBAED,CAAC,EAAE,WAAW,MAAM;AACvB,QAAM,YAAY,qBAAqB,CAAC,MAAM,aAAa,YAAY,CAAC,CAAC;AAEzE,MAAI,CAAC,UAAW,QAAO;AACvB,SAAO,oBAAC,aAAU;AACpB;AAEA,IAAM,wBAEF,CAAC,EAAE,YAAY,gBAAgB,MAAM;AACvC,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,UAAU;AAAA,IACd,MAAM,eAAe,qBAAqB,eAAe;AAAA,IACzD,CAAC,gBAAgB,eAAe;AAAA,EAClC;AAEA,SACE,oBAAC,6BAA0B,SACzB,8BAAC,uBAAoB,YAAwB,GAC/C;AAEJ;AAEA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA,CAAC,MAAM,SACL,KAAK,oBAAoB,KAAK,mBAC9B,KAAK,YAAY,UAAU,KAAK,YAAY,SAC5C,KAAK,YAAY,aAAa,KAAK,YAAY,YAC/C,KAAK,YAAY,SAAS,KAAK,YAAY,QAC3C,KAAK,YAAY,eAAe,KAAK,YAAY;AACrD;AAEO,IAAM,8BAET,CAAC,EAAE,WAAW,MAAM;AACtB,QAAM,mBAAmB,WAAW,CAAC,YAAY;AAC/C,QAAI,QAAQ,SAAS,OAAQ,QAAO;AACpC,WAAO,QAAQ,YAAY;AAAA,EAC7B,CAAC;AAED,SAAO,MAAM,KAAK,EAAE,QAAQ,iBAAiB,GAAG,CAAC,GAAG,UAClD;AAAA,IAAC;AAAA;AAAA,MAEC,iBAAiB;AAAA,MACjB;AAAA;AAAA,IAFK;AAAA,EAGP,CACD;AACH;AAEA,4BAA4B,cAAc;","names":[]}