Giter Club home page Giter Club logo

Comments (6)

mfix-stripe avatar mfix-stripe commented on May 17, 2024

@StarpTech can you share a snippet of what your Markdoc content looks like, as well as how you are registering the Image component (the file under your markdoc/ folder)?

It would be great if you could share a full reproduction of things like this 🙂

from markdoc.

StarpTech avatar StarpTech commented on May 17, 2024

FYI: It worked with a span as container element.

// markdoc/nodes/image.markdoc.ts

import { Image } from '../../src/components/blog/Image'
import { Tag } from '@markdoc/markdoc'

export const image = {
  render: Image,
  attributes: {
    src: { type: String },
    alt: { type: String }
  },
  transform(node: any, config: any) {
    const attributes = node.transformAttributes(config)
    const children = node.transformChildren(config)
    // @ts-ignore
    return new Tag(this.render, { ...attributes }, children)
  },
}
// src/components/blog/Image.tsx

export function Image({
  src,
  alt
}: {
  src: string
  alt: string
}) {
  return (
      <div
      >
        <NextImage
          src={src}
          alt={alt}
          width="100px"
          height="100px"
        />
      </div>
  )
}

Usage:

![altText](URL)

from markdoc.

mfix-stripe avatar mfix-stripe commented on May 17, 2024

This is expected, as ![altText](URL) in the Markdown spec creates an inline element, which according to the spec should be nested within a p tag. This is why when you render a span instead of a div, the error goes away.

If you want to use a block level image, I would suggest creating an image Tag, which would be used like:

{% image src="/" alt="Alt tag" /%}

Then you could render a div in your Image component.

from markdoc.

StarpTech avatar StarpTech commented on May 17, 2024

I have fixed it very similar but this destroys the benefit of using just markdown.

from markdoc.

Pagebakers avatar Pagebakers commented on May 17, 2024
import { Tag } from '@markdoc/markdoc'

export const paragraph = {
  transform: (node: any, config: any) => {
    const attributes = node.transformAttributes(config)
    const children = node.transformChildren(config)

    // hack to make rendering block tags work correctly. They shouldn't be wrapped in a p tag.
    if (children.length === 1 && children[0] instanceof Tag) {
      return children
    }

    return new Tag('p', attributes, children)
  },
}

I had to hack the paragraph node to make sure block Tags aren't rendered inside a p node.

from markdoc.

mfix-stripe avatar mfix-stripe commented on May 17, 2024

@Pagebakers our docs describe why some elements are wrapped in a p tag here: https://markdoc.dev/docs/syntax#tags

from markdoc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.