/* eslint-disable @eslint-react/dom/no-unknown-property */
import { dia } from '@joint/core';
import { jsx } from '../utils/joint-jsx/jsx-to-markup';
export const REACT_TYPE = 'ReactElement';
const elementMarkup = jsx();
/**
* A custom JointJS element that can render React components.
* @group Models
*/
export class ReactElement extends dia.Element<
dia.Element.Attributes & Attributes
> {
/**
* Sets the default attributes for the ReactElement.
* @returns The default attributes.
*/
defaults() {
return {
...super.defaults,
type: REACT_TYPE,
data: {},
attrs: {
root: {
magnetSelector: 'placeholder',
highlighterSelector: 'placeholder',
containerSelector: 'placeholder',
},
placeholder: {
width: 'calc(w)',
height: 'calc(h)',
fill: 'transparent',
},
},
} as unknown as dia.Element.Attributes & Attributes;
}
markup: string | dia.MarkupJSON = elementMarkup;
}
/**
* Creates a new ReactElement instance.
* @param options - The attributes for the ReactElement.
* @returns A new ReactElement instance.
* @group Models
*/
export function createElement(
options?: Attributes & dia.Element.Attributes
) {
return new ReactElement(options);
}