{"version":3,"sources":["../src/components/VenueContent/index.tsx"],"sourcesContent":["// @ts-nocheck\n/*\n * Content Renderer with defaults\n * Adapted from tiptap-react-render: https://github.com/troop-dev/tiptap-react-render\n */\nimport { LocalizedContent } from \"@venuecms/sdk\";\nimport { VenueImage } from \"../VenueImage\";\nimport { EmbedResize } from \"../EmbedResize\";\nimport Markdown from \"markdown-to-jsx\";\nimport React, { JSX, ReactNode } from \"react\";\n\ntype ElementClasses = {\n  text?: string;\n  p?: string;\n  ul?: string;\n  ol?: string;\n  li?: string;\n  code?: string;\n  heading?: string;\n  hardBreak?: string;\n  img?: string;\n  image?: string;\n  iframe?: string;\n  linkCard?: string;\n  h1?: string;\n  h2?: string;\n  h3?: string;\n  a?: string;\n};\n\nconst marks = {\n  bold: \"font-bold\",\n  italic: \"italic\",\n  underline: \"underline\",\n  strike: \"line-through\",\n  link: \"underline underline-offset-[3px] cursor-pointer\",\n} as const;\n\nconst getDefaultHandlers = (classes: ElementClasses = {}) => {\n  const elMarks = {\n    link: (props: any): ReactNode => {\n      const { class: attrClass, className: outerClassName, ...rest } = props;\n      const className =\n        [outerClassName, classes.a ?? marks.link, attrClass]\n          .filter(Boolean)\n          .join(\" \") || undefined;\n      return <a {...rest} className={className} />;\n    },\n  } as const;\n\n  const defaultHandlers: NodeHandlers = {\n    text: (props) => {\n      if (props.node.marks) {\n        const className = props.node.marks\n          .reduce((accum, mark) => {\n            if (elMarks[mark.type as keyof typeof elMarks]) {\n              // elMarks are handled separately\n              return accum;\n            }\n            return `${marks[mark.type as keyof typeof marks] ?? \"\"} ${accum}`;\n          }, \"\")\n          .trim();\n\n        let hasWrappers = false;\n        const elWrappers = props.node.marks.reduce((accum, mark) => {\n          if (mark.type in elMarks) {\n            hasWrappers = true;\n            const el = elMarks[mark.type as keyof typeof elMarks];\n\n            return el({ ...mark.attrs, className, children: accum });\n          }\n\n          return accum;\n        }, props.node.text);\n\n        if (hasWrappers) {\n          return elWrappers;\n        }\n\n        return <span className={`${className}`}>{props.node.text}</span>;\n      }\n\n      if (classes.text) {\n        <span className={classes.text}>{props.node.text}</span>;\n      }\n\n      return <>{props.node.text}</>;\n    },\n    paragraph: (props) => <p className={classes.p}>{props.children}</p>,\n    bulletList: (props) => <ul className={classes.ul}>{props.children}</ul>,\n    orderedList: (props) => <ol className={classes.ol}>{props.children}</ol>,\n    listItem: (props) => <li className={classes.li}>{props.children}</li>,\n    codeBlock: (props) => (\n      <pre>\n        <code className={classes.code}>{props.children}</code>\n      </pre>\n    ),\n    heading: (props) => {\n      switch (props.node.attrs?.level) {\n        case 1:\n          return <h1 className={classes.h1}>{props.children}</h1>;\n        case 2:\n          return <h2 className={classes.h2}>{props.children}</h2>;\n        case 3:\n          return <h3 className={classes.h3}>{props.children}</h3>;\n        default:\n          return <>{props.children}</>;\n      }\n    },\n    hardBreak: () => <br />,\n    image: (props) => {\n      const { src, alt } = props.node.attrs ?? {};\n\n      const image = {\n        url: src.split(/^\\/media\\//).join(\"\"),\n        metadata: {\n          altText: alt,\n        },\n      };\n\n      return <VenueImage className={classes.image} image={image} />;\n    },\n    img: (props) => {\n      const { src, alt } = props.node;\n      const image = {\n        url: src.split(/^\\/media\\//).join(\"\"),\n        metadata: {\n          altText: alt,\n        },\n      };\n      return <VenueImage className={classes.img} image={image} />;\n    },\n    youtube: (props) => {\n      //@ts-ignore\n      const { src, start } = props.node.attrs;\n      const key = src.split(\"v=\")[1];\n\n      return (\n        <iframe\n          src={`https://www.youtube.com/embed/${key}?modestbranding=1${start ? `&amp;start=${start}` : \"\"}`}\n          frameBorder=\"0\"\n          allowFullScreen={true}\n          width=\"100%\"\n          height=\"auto\"\n          style={{\n            aspectRatio: \"4 / 3\",\n            maxWidth: \"100%\",\n          }}\n        ></iframe>\n      );\n    },\n    iframe: (props) => {\n      const {\n        // @ts-ignore\n        src,\n        // @ts-ignore\n        style,\n        // @ts-ignore\n        frameborder,\n        // @ts-ignore\n        allowfullscreen,\n        // @ts-ignore\n        referrerpolicy,\n        // @ts-ignore\n        aspectRatio,\n        ...rest\n      } = props.node?.attrs ?? props; // TODO: why do we need to do this? we are getting different shapes at times and not sure why\n\n      const styles =\n        typeof style === \"string\"\n          ? style\n              ?.split(\";\")\n              .reduce((accum: Record<string, string>, style: string) => {\n                const [key, value] = style.split(\":\");\n                if (value !== undefined) {\n                  return { ...accum, [key]: value.trim() };\n                }\n                return accum;\n              }, {})\n          : style;\n\n      // Native iframely embeds carry aspectRatio (width / height). Prefer it:\n      // render a fluid, ratio-correct iframe with no per-provider guessing.\n      if (aspectRatio) {\n        return (\n          <iframe\n            src={src}\n            style={{\n              ...styles,\n              width: \"100%\",\n              aspectRatio: String(aspectRatio),\n              height: \"auto\",\n            }}\n            frameBorder={frameborder}\n            allowFullScreen={allowfullscreen}\n            referrerPolicy={referrerpolicy}\n            {...rest}\n          />\n        );\n      }\n\n      // TODO: We need iframely. A hack for now to check and iron out some common quirks\n      const isVideo = (() => {\n        return !!(src.match(/youtube.com/) || src.match(/vimeo.com/));\n      })();\n\n      const isBandcamp = (() => {\n        return !!src.match(/bandcamp.com/);\n      })();\n\n      const isVimeo = (() => {\n        return !!src.match(/vimeo.com/);\n      })();\n\n      return (\n        <iframe\n          src={src}\n          style={{\n            ...styles,\n            ...(isVideo\n              ? { maxWidth: \"100%\", aspectRatio: \"4 / 3\", height: \"auto\" }\n              : {}),\n            ...(isBandcamp && !styles?.height\n              ? { width: \"100%\", maxWidth: \"700px\", height: \"42px\" }\n              : {}),\n\n            ...(isVimeo && !styles?.height\n              ? {\n                  width: \"100%\",\n                  aspectRatio: (rest as any).width / (rest as any).height,\n                }\n              : {}),\n          }}\n          frameBorder={frameborder}\n          allowFullScreen={allowfullscreen}\n          referrerPolicy={referrerpolicy}\n          {...rest}\n        />\n      );\n    },\n    // Rich link-preview card for non-embeddable URLs (metadata only).\n    linkCard: (props) => {\n      const {\n        // @ts-ignore\n        href,\n        // @ts-ignore\n        title,\n        // @ts-ignore\n        description,\n        // @ts-ignore\n        site,\n        // @ts-ignore\n        image,\n      } = props.node?.attrs ?? props;\n\n      return (\n        <a\n          href={href}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className={\n            classes.linkCard ??\n            \"my-4 block overflow-hidden bg-card no-underline transition-opacity hover:opacity-80\"\n          }\n        >\n          {image ? (\n            <img\n              src={image}\n              alt={title ?? \"\"}\n              className=\"aspect-video w-full object-cover\"\n            />\n          ) : null}\n          <div className=\"p-4\">\n            {title ? (\n              <h3 className=\"mb-2 text-base font-semibold text-primary\">\n                {title}\n              </h3>\n            ) : null}\n            {site ? (\n              <span className=\"text-xs text-secondary\">{site}</span>\n            ) : null}\n            {description ? (\n              <p className=\"mt-2 text-sm text-secondary\">{description}</p>\n            ) : null}\n          </div>\n        </a>\n      );\n    },\n  } as const;\n  return defaultHandlers;\n};\n\nconst getMarkdownHandlers = (classes: ElementClasses = {}) => {\n  const handlers = getDefaultHandlers(classes);\n  // the markdown renderer uses a more standard format for overriding styles, so we map it here\n  return {\n    ...handlers,\n    p: handlers.paragraph,\n    ul: handlers.bulletList,\n    ol: handlers.orderedList,\n    li: handlers.listItem,\n    code: handlers.codeBlock,\n    h1: (props: any) =>\n      handlers.heading({ ...props, node: { attrs: { level: 1 } } }),\n    h2: (props: any) =>\n      handlers.heading({ ...props, node: { attrs: { level: 2 } } }),\n    h3: (props: any) =>\n      handlers.heading({ ...props, node: { attrs: { level: 3 } } }),\n    img: (props: any) =>\n      handlers.image({\n        ...props,\n        node: { attrs: { src: props.src, alt: props.alt } },\n      }),\n    hr: (props: any) => <hr {...props} />,\n    a: (props: any) => (\n      <a href={props.href} className={classes.a}>\n        {props.children}\n      </a>\n    ),\n    span: ({ children }: { children: ReactNode }) => <span>{children}</span>, // strip out custom colors and all that (since they are usually pasted in accidentally)\n  };\n};\n\nexport type ContentStyles = Partial<\n  Record<keyof ReturnType<typeof getDefaultHandlers>, string>\n>;\n\nconst ContentRender = (props: {\n  node: RenderNode;\n  handlers?: NodeHandlers;\n  classes?: ContentStyles;\n}): JSX.Element => {\n  const { node, handlers: handlerOverrides = {} } = props;\n  const handlers = {\n    ...getDefaultHandlers(props.classes),\n    ...handlerOverrides,\n  };\n\n  // recursively render child content\n  const children: JSX.Element[] = [];\n  node.content &&\n    node.content.forEach((child, ix) => {\n      children.push(\n        <ContentRender\n          node={child}\n          handlers={handlers}\n          key={`${child.type}- ${ix} `}\n        />,\n      );\n    });\n\n  // return empty if we are missing a handler for this type\n  if (!(node.type in handlers)) {\n    console.warn(`missing type`, node);\n    return <></>;\n  }\n  // render the handler for this type\n  const Handler = handlers[node.type];\n  return <Handler node={node}>{children}</Handler>;\n};\n\n\n\ninterface Attrs {\n  readonly [attr: string]: any;\n}\n\nexport interface RenderNode {\n  type: string;\n  attrs?: Attrs;\n  marks?: Attrs[];\n  content?: RenderNode[];\n  readonly [attr: string]: any;\n}\n\nexport interface NodeProps {\n  children?: React.ReactNode;\n  node: RenderNode;\n}\n\nexport type NodeHandler = (props: NodeProps) => JSX.Element;\n\nexport interface NodeHandlers {\n  readonly [attr: string]: NodeHandler;\n}\n\nexport const VenueContent = ({\n  content,\n  contentStyles,\n  className,\n  components,\n}: {\n  content: LocalizedContent;\n  contentStyles?: ContentStyles;\n  className?: string;\n  components?: NodeHandlers;\n}) => {\n  const { contentJSON } = content;\n\n  if (contentJSON) {\n    return (\n      <div className={className}>\n        <EmbedResize />\n        {(contentJSON.content as Array<RenderNode>).map((node, i) => (\n          <ContentRender\n            key={i}\n            classes={contentStyles}\n            node={node}\n            handlers={components}\n          />\n        ))}\n      </div>\n    );\n  }\n\n  if (content.content) {\n    return (\n      <>\n        <EmbedResize />\n        <Markdown\n          className={className}\n          options={{\n            overrides: {\n              ...getMarkdownHandlers(contentStyles),\n            },\n          }}\n        >\n        {\n          /* There are issues with <hr> tags in the parsing so we fix that with a regex */\n          // @ts-ignore\n          content.content.replaceAll(\n            /(?:\\n|\\r\\n)\\*\\*\\*(?:\\n|\\r\\n)/g,\n            \"\\n\\n***\\n\\n\",\n          )\n        }\n        </Markdown>\n      </>\n    );\n  }\n\n  return null;\n};\n"],"mappings":"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","names":["Markdown","Fragment","jsx","jsxs","marks","getDefaultHandlers","classes","elMarks","props","attrClass","outerClassName","rest","className","accum","mark","hasWrappers","elWrappers","el","src","alt","image","VenueImage","start","key","style","frameborder","allowfullscreen","referrerpolicy","aspectRatio","styles","value","isVideo","isBandcamp","isVimeo","href","title","description","site","getMarkdownHandlers","handlers","children","ContentRender","node","handlerOverrides","child","ix","Handler","VenueContent","content","contentStyles","components","contentJSON","EmbedResize","i"]}