@mantine/tiptap
Version:
Rich text editor based on tiptap
86 lines (83 loc) • 2.71 kB
JavaScript
'use client';
import { jsx } from 'react/jsx-runtime';
import { forwardRef } from 'react';
import { factory, useProps, UnstyledButton } from '@mantine/core';
import { useRichTextEditorContext } from '../RichTextEditor.context.mjs';
import classes from '../RichTextEditor.module.css.mjs';
const defaultProps = {
interactive: true
};
const RichTextEditorControl = factory((_props, ref) => {
const props = useProps("RichTextEditorControl", defaultProps, _props);
const {
classNames,
className,
style,
styles,
vars,
interactive,
active,
onMouseDown,
disabled,
...others
} = props;
const ctx = useRichTextEditorContext();
return /* @__PURE__ */ jsx(
UnstyledButton,
{
...others,
...ctx.getStyles("control", { className, style, classNames, styles }),
disabled,
"data-rich-text-editor-control": true,
tabIndex: interactive ? 0 : -1,
"data-interactive": interactive || void 0,
"data-disabled": disabled || void 0,
"data-active": active || void 0,
"aria-pressed": active && interactive || void 0,
"aria-hidden": !interactive || void 0,
ref,
unstyled: ctx.unstyled,
variant: ctx.variant || "default",
onMouseDown: (event) => {
event.preventDefault();
onMouseDown?.(event);
}
}
);
});
RichTextEditorControl.classes = classes;
RichTextEditorControl.displayName = "@mantine/tiptap/RichTextEditorControl";
const RichTextEditorControlBase = forwardRef(({ className, icon: Icon, ...others }, ref) => {
const ctx = useRichTextEditorContext();
return /* @__PURE__ */ jsx(RichTextEditorControl, { ref, ...others, children: /* @__PURE__ */ jsx(Icon, { ...ctx.getStyles("controlIcon") }) });
});
RichTextEditorControlBase.displayName = "@mantine/tiptap/RichTextEditorControlBase";
function createControl({
label,
isActive,
operation,
icon,
isDisabled
}) {
const Control = forwardRef((props, ref) => {
const { editor, labels } = useRichTextEditorContext();
const _label = labels[label];
return /* @__PURE__ */ jsx(
RichTextEditorControlBase,
{
...props,
"aria-label": _label,
title: _label,
active: isActive?.name ? editor?.isActive(isActive.name, isActive.attributes) : false,
ref,
onClick: () => editor?.chain().focus()[operation.name](operation.attributes).run(),
icon: props.icon || icon,
disabled: isDisabled?.(editor) || false
}
);
});
Control.displayName = `@mantine/tiptap/${label}`;
return Control;
}
export { RichTextEditorControl, RichTextEditorControlBase, createControl };
//# sourceMappingURL=RichTextEditorControl.mjs.map