{"version":3,"file":"RichTextEditorControl.mjs","sources":["../../src/RichTextEditorControl/RichTextEditorControl.tsx"],"sourcesContent":["import {\n  BoxProps,\n  CompoundStylesApiProps,\n  ElementProps,\n  factory,\n  Factory,\n  UnstyledButton,\n  useProps,\n} from '@empoleon/core';\nimport { RichTextEditorLabels } from '../labels';\nimport { useRichTextEditorContext } from '../RichTextEditor.context';\nimport classes from '../RichTextEditor.module.css';\nimport { Component, JSX, splitProps } from 'solid-js';\nimport { Dynamic } from 'solid-js/web';\n\nexport type RichTextEditorControlStylesNames = 'control';\n\nexport interface RichTextEditorControlProps\n  extends BoxProps,\n    CompoundStylesApiProps<RichTextEditorControlFactory>,\n    ElementProps<'button'> {\n  /** Determines whether the control should have active state, false by default */\n  active?: boolean;\n\n  /** Determines whether the control can be interacted with, set `false` to make the control to act as a label */\n  interactive?: boolean;\n}\n\nexport type RichTextEditorControlFactory = Factory<{\n  props: RichTextEditorControlProps;\n  ref: HTMLButtonElement;\n  stylesNames: RichTextEditorControlStylesNames;\n  compound: true;\n}>;\n\nconst defaultProps: Partial<RichTextEditorControlProps> = {\n  interactive: true,\n};\n\nexport const RichTextEditorControl = factory<RichTextEditorControlFactory>(_props => {\n  const props = useProps('RichTextEditorControl', defaultProps, _props);\n  const [local, others] = splitProps(props, [\n    'classNames',\n    'className',\n    'style',\n    'styles',\n    'vars',\n    'interactive',\n    'active',\n    'onMouseDown',\n    'disabled',\n    'ref'\n  ]);\n\n  const ctx = useRichTextEditorContext();\n\n  return (\n    <UnstyledButton\n      {...others}\n      {...ctx.getStyles('control', { className: local.className, style: local.style, classNames: local.classNames, styles: local.styles })}\n      disabled={local.disabled}\n      data-rich-text-editor-control\n      tabIndex={local.interactive ? 0 : -1}\n      data-interactive={local.interactive || undefined}\n      data-disabled={local.disabled || undefined}\n      data-active={local.active || undefined}\n      aria-pressed={(local.active && local.interactive) || undefined}\n      aria-hidden={!local.interactive || undefined}\n      ref={local.ref}\n      unstyled={ctx.unstyled}\n      variant={ctx.variant || 'default'}\n      onMouseDown={(event) => {\n        event.preventDefault();\n        typeof local.onMouseDown === \"function\" && local.onMouseDown?.(event);\n      }}\n    />\n  );\n});\n\nRichTextEditorControl.classes = classes;\nRichTextEditorControl.displayName = '@empoleon/tiptap/RichTextEditorControl';\n\nexport interface RichTextEditorControlBaseProps extends RichTextEditorControlProps {\n  icon?: Component<{ style: JSX.CSSProperties }>;\n}\n\nexport const RichTextEditorControlBase = (props: RichTextEditorControlBaseProps) => {\n  const [local, others] = splitProps(props, ['className', 'icon']);\n  const ctx = useRichTextEditorContext();\n\n  return (\n    <RichTextEditorControl {...others}>\n      <Dynamic component={local.icon} {...ctx.getStyles('controlIcon')} />\n    </RichTextEditorControl>\n  );\n};\n\nRichTextEditorControlBase.displayName = '@empoleon/tiptap/RichTextEditorControlBase';\n\nexport interface CreateControlProps {\n  label: keyof RichTextEditorLabels;\n  icon: Component<{ style: JSX.CSSProperties }>;\n  isActive?: { name: string; attributes?: Record<string, any> | string };\n  isDisabled?: (editor: any) => boolean;\n  operation: { name: string; attributes?: Record<string, any> | string };\n}\n\nimport { createMemo } from 'solid-js';\n\nexport function createControl(config: CreateControlProps) {\n  const Control = (props: RichTextEditorControlBaseProps) => {\n    const context = useRichTextEditorContext();\n    const _label = () => context.labels[config.label] as string;\n\n    const active = createMemo(() =>\n      config.isActive?.name ? context.editor?.isActive(config.isActive.name, config.isActive.attributes) : false\n    );\n\n    const disabled = createMemo(() =>\n      config.isDisabled?.(context.editor) || false\n    );\n\n    const handleClick = () => {\n      (context.editor as any)?.chain().focus()[config.operation.name](config.operation.attributes).run();\n    };\n\n    return (\n      <RichTextEditorControlBase\n        {...props}\n        aria-label={_label()}\n        title={_label()}\n        active={active()}\n        onClick={handleClick}\n        icon={props.icon || config.icon}\n        disabled={disabled()}\n      />\n    );\n  };\n\n  // SolidJS doesn't have displayName, but you can add it as a property if needed\n  Control.displayName = `@empoleon/tiptap/${config.label}`;\n\n  return Control;\n}\n"],"names":["defaultProps","interactive","RichTextEditorControl","factory","_props","props","useProps","local","others","splitProps","ctx","useRichTextEditorContext","_$createComponent","UnstyledButton","_$mergeProps","getStyles","className","style","classNames","styles","disabled","tabIndex","data-interactive","data-disabled","data-active","active","aria-pressed","aria-hidden","ref","r$","_ref$","unstyled","variant","onMouseDown","event","preventDefault","classes","displayName","RichTextEditorControlBase","children","Dynamic","component","icon","createControl","config","Control","context","_label","labels","label","createMemo","isActive","name","editor","attributes","isDisabled","handleClick","chain","focus","operation","run","aria-label","title","onClick"],"mappings":"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"}