# Path: draftjs_exporter/constants.py
# class BLOCK_TYPES:
#     UNSTYLED = "unstyled"
#     HEADER_ONE = "header-one"
#     HEADER_TWO = "header-two"
#     HEADER_THREE = "header-three"
#     HEADER_FOUR = "header-four"
#     HEADER_FIVE = "header-five"
#     HEADER_SIX = "header-six"
#     UNORDERED_LIST_ITEM = "unordered-list-item"
#     ORDERED_LIST_ITEM = "ordered-list-item"
#     BLOCKQUOTE = "blockquote"
#     PRE = "pre"
#     CODE = "code-block"
#     ATOMIC = "atomic"
#     # Special type to configure handling of missing components.
#     FALLBACK = "fallback"
# 
# ENTITY_TYPES = Enum(
#     "LINK",
#     "DOCUMENT",
#     "IMAGE",
#     "EMBED",
#     "HORIZONTAL_RULE",
#     # Special type to configure handling of missing components.
#     "FALLBACK",
# )
# 
# INLINE_STYLES = Enum(
#     "BOLD",
#     "CODE",
#     "ITALIC",
#     "UNDERLINE",
#     "STRIKETHROUGH",
#     "SUPERSCRIPT",
#     "SUBSCRIPT",
#     "MARK",
#     "QUOTATION",
#     "SMALL",
#     "SAMPLE",
#     "INSERT",
#     "DELETE",
#     "KEYBOARD",
#     # Special type to configure handling of missing components.
#     "FALLBACK",
# )
# 
# Path: draftjs_exporter/error.py
# class ConfigException(ExporterException):
#     pass
# 
# Path: draftjs_exporter/types.py
# HTML = str


from typing import Any, Dict, Optional
from draftjs_exporter.constants import BLOCK_TYPES, ENTITY_TYPES, INLINE_STYLES
from draftjs_exporter.error import ConfigException
from draftjs_exporter.types import ConfigMap, Props, RenderableType
        element: RenderableType,
        props: Optional[Props] = None,
        wrapper: RenderableType = None,
        wrapper_props: Optional[Props] = None,
    ) -> None:
        self.type = type_
        self.element = element
        self.props = props if props else {}
        self.wrapper = wrapper
        self.wrapper_props = wrapper_props

    def __str__(self) -> str:
        return f"<Options {self.type} {self.element} {self.props} {self.wrapper} {self.wrapper_props}>"

    def __repr__(self) -> str:
        return str(self)

    def __eq__(self, other: Any) -> bool:
        """
        Equality used in test code only, not to be relied on for the exporter.
        """
        return str(self) == str(other)

    def __ne__(self, other: Any) -> bool:
        return not self == other

    def __hash__(self) -> int:
        return hash(str(self))

    @staticmethod

# Path: draftjs_exporter/constants.py
# class BLOCK_TYPES:
#     UNSTYLED = "unstyled"
#     HEADER_ONE = "header-one"
#     HEADER_TWO = "header-two"
#     HEADER_THREE = "header-three"
#     HEADER_FOUR = "header-four"
#     HEADER_FIVE = "header-five"
#     HEADER_SIX = "header-six"
#     UNORDERED_LIST_ITEM = "unordered-list-item"
#     ORDERED_LIST_ITEM = "ordered-list-item"
#     BLOCKQUOTE = "blockquote"
#     PRE = "pre"
#     CODE = "code-block"
#     ATOMIC = "atomic"
#     # Special type to configure handling of missing components.
#     FALLBACK = "fallback"
# 
# ENTITY_TYPES = Enum(
#     "LINK",
#     "DOCUMENT",
#     "IMAGE",
#     "EMBED",
#     "HORIZONTAL_RULE",
#     # Special type to configure handling of missing components.
#     "FALLBACK",
# )
# 
# INLINE_STYLES = Enum(
#     "BOLD",
#     "CODE",
#     "ITALIC",
#     "UNDERLINE",
#     "STRIKETHROUGH",
#     "SUPERSCRIPT",
#     "SUBSCRIPT",
#     "MARK",
#     "QUOTATION",
#     "SMALL",
#     "SAMPLE",
#     "INSERT",
#     "DELETE",
#     "KEYBOARD",
#     # Special type to configure handling of missing components.
#     "FALLBACK",
# )
# 
# Path: draftjs_exporter/error.py
# class ConfigException(ExporterException):
#     pass
# 
# Path: draftjs_exporter/types.py
# HTML = str


# Path: draftjs_exporter/options.py
from typing import Any, Dict, Optional
from draftjs_exporter.constants import BLOCK_TYPES, ENTITY_TYPES, INLINE_STYLES
from draftjs_exporter.error import ConfigException
from draftjs_exporter.types import ConfigMap, Props, RenderableType

        element: RenderableType,
        props: Optional[Props] = None,
        wrapper: RenderableType = None,
        wrapper_props: Optional[Props] = None,
    ) -> None:
        self.type = type_
        self.element = element
        self.props = props if props else {}
        self.wrapper = wrapper
        self.wrapper_props = wrapper_props

    def __str__(self) -> str:
        return f"<Options {self.type} {self.element} {self.props} {self.wrapper} {self.wrapper_props}>"

    def __repr__(self) -> str:
        return str(self)

    def __eq__(self, other: Any) -> bool:
        """
        Equality used in test code only, not to be relied on for the exporter.
        """
        return str(self) == str(other)

    def __ne__(self, other: Any) -> bool:
        return not self == other

    def __hash__(self) -> int:
        return hash(str(self))

    @staticmethod

    def create(kind_map: ConfigMap, type_: str, fallback_key: str) -> "Options":