Sometimes you want editors to be able to create links within a RichText.
To enable the link rich-text feature, you just need to add the types.RichTextFeatures.Link to the allowedFeatures.
import { Link } from 'react-bricks/rsc'
  // ...
  <RichText
    propName="description"
    value={description}
    renderBlock={({ children }) => (
      <p className="text-lg text-gray-500">{children}</p>
    )}
    placeholder="Type a description"
    allowedFeatures={[
      types.RichTextFeatures.Bold,
      types.RichTextFeatures.Highlight,
      types.RichTextFeatures.Link, 
    ]}
    renderHighlight={({ children }) => (
      <span className="px-1 rounded bg-blue-200 text-blue-900">
        {children}
      </span>
    )}
  /> 
Underneath, React Bricks will use the Link component from the library.
The Link component has many advantages over a normal anchor tag (or even a link component from the chosen React framework).
/about-us`), it will render the local link (for example the Next.js link for a Next.js starter).https://...), it will render a normal <a> tag.target="_blank", but also the rel="noopener" automatically, for security reasons (see the "noopener" HTML reference).Since we are using Tailwind CSS for this tutorial, and Tailwind doesn't apply any default style to a link, we need to provide a custom render function to make the link visible.
In the renderLink function we'll use the <Link> component:
import { Link } from 'react-bricks/rsc'
  //...
  <RichText
    propName="description"
    value={description}
    renderBlock={({ children }) => (
      <p className="text-lg text-gray-500">{children}</p>
    )}
    placeholder="Type a description"
    allowedFeatures={[
      types.RichTextFeatures.Bold,
      types.RichTextFeatures.Highlight,
      types.RichTextFeatures.Link,
    ]}
    renderHighlight={({ children }) => (
      <span className="px-1 rounded bg-blue-200 text-blue-900">
        {children}
      </span>
    )}
    renderLink={({ children, href, target, rel }) => (
      <Link
        href={href}
        target={target}
        rel={rel}
        className="text-sky-500 hover:text-sky-600 transition-colors"
      >
        {children}
      </Link>
    )}
  /> 
You will use the Link component also when you you want to render a visually editable link outside of a RichText, for example a "button-like" brick, like in the code below.
import { Text, Link, types } from 'react-bricks/rsc'
interface ButtonProps {
  buttonText: types.TextValue
  buttonPath: string
}
const Button: types.Brick<ButtonProps> = ({
  buttonText,
  buttonPath,
}) => {
  return (
    <Link
      href={buttonPath}
      className="py-2 px-6 text-white text-center bg-sky-500"
    >
      <Text
        propName="buttonText"
        value={buttonText}
        placeholder="Action"
        renderBlock={({ children }) => <span>{children}</span>}
      />
    </Link>
  )
}
Button.schema = {
  name: 'button',
  label: 'Button',
  getDefaultProps: () => ({
    buttonText: 'Submit',
  }),
  sideEditProps: [
    {
      name: 'buttonPath',
      label: 'Path or URL',
      type: types.SideEditPropType.Text,
      validate: (value) =>
        value?.startsWith('/') ||
        value?.startsWith('https://') ||
        'Please, enter a valid URL',
    },
  ],
}
export default Button
      sideEditProp property. Don't consider that part of the code now: we'll discover sidebar controls soon, and then you could come back to fully understand the code.