{"version":3,"file":"RichTextEditorLinkControl.cjs","sources":["../../src/RichTextEditorControl/RichTextEditorLinkControl.tsx"],"sourcesContent":["import {\n  BoxProps,\n  Button,\n  CompoundStylesApiProps,\n  factory,\n  Factory,\n  Popover,\n  PopoverProps,\n  rem,\n  TextInput,\n  Tooltip,\n  UnstyledButton,\n  useProps,\n  useResolvedStylesApi,\n} from '@empoleon/core';\nimport { useDisclosure, useInputState, useWindowEvent } from '@empoleon/hooks';\nimport { IconExternalLink, IconLink } from '../icons/Icons';\nimport { useRichTextEditorContext } from '../RichTextEditor.context';\nimport { RichTextEditorControlBase, RichTextEditorControlBaseProps } from './RichTextEditorControl';\nimport classes from '../RichTextEditor.module.css';\nimport { createSignal, splitProps } from 'solid-js';\n\nexport type RichTextEditorLinkControlStylesNames =\n  | 'control'\n  | 'linkEditor'\n  | 'linkEditorDropdown'\n  | 'linkEditorSave'\n  | 'linkEditorInput'\n  | 'linkEditorExternalControl';\n\nexport interface RichTextEditorLinkControlProps\n  extends BoxProps,\n    Omit<RichTextEditorControlBaseProps, 'classNames' | 'styles' | 'vars'>,\n    CompoundStylesApiProps<RichTextEditorLinkControlFactory> {\n  /** Props passed down to Popover component */\n  popoverProps?: Partial<PopoverProps>;\n\n  /** Determines whether external link control tooltip should be disabled, `false` by default */\n  disableTooltips?: boolean;\n\n  /** Initial state for determining whether the link should be an external, `false` by default */\n  initialExternal?: boolean;\n}\n\nexport type RichTextEditorLinkControlFactory = Factory<{\n  props: RichTextEditorLinkControlProps;\n  ref: HTMLButtonElement;\n  stylesNames: RichTextEditorLinkControlStylesNames;\n  compound: true;\n}>;\n\nconst LinkIcon: RichTextEditorControlBaseProps['icon'] = (props) => <IconLink {...props} />;\n\nconst defaultProps: Partial<RichTextEditorLinkControlProps> = {};\n\nexport const RichTextEditorLinkControl = factory<RichTextEditorLinkControlFactory>(_props => {\n  const props = useProps('RichTextEditorLinkControl', defaultProps, _props);\n  const [local, others] = splitProps(props, [\n    'classNames',\n    'className',\n    'style',\n    'styles',\n    'vars',\n    'icon',\n    'popoverProps',\n    'disableTooltips',\n    'initialExternal',\n    'ref'\n  ]);\n\n  const ctx = useRichTextEditorContext();\n\n  const stylesApiProps = { classNames: local.classNames, styles: local.styles };\n\n  const [url, setUrl] = useInputState('');\n  const [external, setExternal] = createSignal(local.initialExternal);\n  const [opened, { open, close }] = useDisclosure(false);\n\n  const handleOpen = () => {\n    open();\n    const linkData = ctx.editor?.getAttributes('link');\n    setUrl(linkData?.href || '');\n    setExternal(linkData?.href ? linkData?.target === '_blank' : local.initialExternal);\n  };\n\n  const handleClose = () => {\n    close();\n    setUrl('');\n    setExternal(local.initialExternal);\n  };\n\n  const setLink = () => {\n    handleClose();\n    url() === ''\n      ? ctx.editor?.chain().focus().extendMarkRange('link').unsetLink().run()\n      : ctx.editor\n          ?.chain()\n          .focus()\n          .extendMarkRange('link')\n          .setLink({ href: url(), target: external() ? '_blank' : null })\n          .run();\n  };\n\n  const handleInputKeydown = (event: KeyboardEvent) => {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      setLink();\n    }\n  };\n\n  useWindowEvent('edit-link', handleOpen, false);\n\n  const { resolvedClassNames, resolvedStyles } =\n    useResolvedStylesApi<RichTextEditorLinkControlFactory>({ classNames: local.classNames, styles: local.styles, props });\n\n  return (\n    <Popover\n      trapFocus\n      shadow=\"md\"\n      withinPortal\n      opened={opened()}\n      onChange={(_opened) => !_opened && handleClose()}\n      offset={-44}\n      zIndex={10000}\n      {...local.popoverProps}\n    >\n      <Popover.Target>\n        <RichTextEditorControlBase\n          icon={local.icon || LinkIcon}\n          {...others}\n          aria-label={ctx.labels.linkControlLabel}\n          title={ctx.labels.linkControlLabel}\n          onClick={handleOpen}\n          active={ctx.editor?.isActive('link')}\n          ref={local.ref}\n          classNames={resolvedClassNames}\n          styles={resolvedStyles}\n          className={local.className}\n          style={local.style}\n          variant={ctx.variant}\n        />\n      </Popover.Target>\n\n      <Popover.Dropdown {...ctx.getStyles('linkEditorDropdown', stylesApiProps)}>\n        <div {...ctx.getStyles('linkEditor', stylesApiProps)}>\n          <TextInput\n            placeholder={ctx.labels.linkEditorInputPlaceholder}\n            aria-label={ctx.labels.linkEditorInputLabel}\n            type=\"url\"\n            value={url()}\n            onChange={setUrl}\n            classNames={{ input: ctx.getStyles('linkEditorInput', stylesApiProps).className }}\n            onKeyDown={handleInputKeydown}\n            rightSection={\n              <Tooltip\n                label={\n                  external() ? ctx.labels.linkEditorExternalLink : ctx.labels.linkEditorInternalLink\n                }\n                events={{ hover: true, focus: true, touch: true }}\n                withinPortal\n                withArrow\n                disabled={local.disableTooltips}\n                zIndex={10000}\n              >\n                {(props) => (\n                  <UnstyledButton\n                    onClick={() => setExternal((e) => !e)}\n                    data-active={external || undefined}\n                    {...ctx.getStyles('linkEditorExternalControl', stylesApiProps)}\n                    {...props}\n                  >\n                    <IconExternalLink style={{ width: rem(14), height: rem(14) }} />\n                  </UnstyledButton>\n                )}\n              </Tooltip>\n            }\n          />\n\n          <Button\n            variant=\"default\"\n            onClick={setLink}\n            {...ctx.getStyles('linkEditorSave', stylesApiProps)}\n          >\n            {ctx.labels.linkEditorSave}\n          </Button>\n        </div>\n      </Popover.Dropdown>\n    </Popover>\n  );\n});\n\nRichTextEditorLinkControl.classes = classes;\nRichTextEditorLinkControl.displayName = '@empoleon/tiptap/RichTextEditorLinkControl';\n"],"names":["LinkIcon","props","_$createComponent","IconLink","defaultProps","RichTextEditorLinkControl","factory","_props","useProps","local","others","splitProps","ctx","useRichTextEditorContext","stylesApiProps","classNames","styles","url","setUrl","useInputState","external","setExternal","createSignal","initialExternal","opened","open","close","useDisclosure","handleOpen","linkData","editor","getAttributes","href","target","handleClose","setLink","chain","focus","extendMarkRange","unsetLink","run","handleInputKeydown","event","key","preventDefault","useWindowEvent","resolvedClassNames","resolvedStyles","useResolvedStylesApi","Popover","_$mergeProps","trapFocus","shadow","withinPortal","onChange","_opened","offset","zIndex","popoverProps","children","Target","RichTextEditorControlBase","icon","aria-label","labels","linkControlLabel","title","onClick","active","isActive","ref","r$","_ref$","className","style","variant","Dropdown","getStyles","_el$","_tmpl$","_$spread","_$insert","TextInput","placeholder","linkEditorInputPlaceholder","linkEditorInputLabel","type","value","input","onKeyDown","rightSection","Tooltip","label","linkEditorExternalLink","linkEditorInternalLink","events","hover","touch","withArrow","disabled","disableTooltips","UnstyledButton","e","IconExternalLink","width","rem","height","Button","linkEditorSave","classes","displayName"],"mappings":"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"}