{"version":3,"file":"root-DTTCkmjD.mjs","names":["React","React","React","nativeTiptapExtensions","React","React","React","BubbleMenuRoot","React","BubbleMenuRoot","React","BubbleMenuRoot","BubbleMenu","BubbleMenuRoot"],"sources":["../src/ui/icons/align-center.tsx","../src/ui/icons/align-left.tsx","../src/ui/icons/align-right.tsx","../src/ui/icons/bold.tsx","../src/ui/icons/case-upper.tsx","../src/ui/icons/check.tsx","../src/ui/icons/chevron-down.tsx","../src/ui/icons/code.tsx","../src/ui/icons/columns-2.tsx","../src/ui/icons/columns-3.tsx","../src/ui/icons/columns-4.tsx","../src/ui/icons/external-link.tsx","../src/ui/icons/heading-1.tsx","../src/ui/icons/heading-2.tsx","../src/ui/icons/heading-3.tsx","../src/ui/icons/italic.tsx","../src/ui/icons/link.tsx","../src/ui/icons/list.tsx","../src/ui/icons/list-ordered.tsx","../src/ui/icons/mouse-pointer.tsx","../src/ui/icons/pencil.tsx","../src/ui/icons/rows-2.tsx","../src/ui/icons/split-square-vertical.tsx","../src/ui/icons/square-code.tsx","../src/ui/icons/strikethrough.tsx","../src/ui/icons/text.tsx","../src/ui/icons/text-quote.tsx","../src/ui/icons/underline.tsx","../src/ui/icons/unlink.tsx","../src/ui/bubble-menu/context.tsx","../src/ui/bubble-menu/item.tsx","../src/ui/bubble-menu/align-center.tsx","../src/ui/bubble-menu/align-left.tsx","../src/ui/bubble-menu/align-right.tsx","../src/ui/bubble-menu/create-mark-bubble-item.tsx","../src/ui/bubble-menu/bold.tsx","../src/ui/bubble-menu/button-edit-link.tsx","../src/ui/bubble-menu/utils.ts","../src/ui/bubble-menu/button-form.tsx","../src/ui/bubble-menu/button-toolbar.tsx","../src/ui/bubble-menu/button-unlink.tsx","../src/ui/editor-focus-scope.tsx","../src/ui/bubble-menu/code.tsx","../src/ui/bubble-menu/group.tsx","../src/ui/bubble-menu/italic.tsx","../src/ui/bubble-menu/link-selector.tsx","../src/ui/bubble-menu/node-selector.tsx","../src/ui/bubble-menu/strike.tsx","../src/ui/bubble-menu/triggers.ts","../src/ui/bubble-menu/underline.tsx","../src/ui/bubble-menu/uppercase.tsx","../src/ui/bubble-menu/root.tsx","../src/ui/bubble-menu/button-default.tsx","../src/ui/bubble-menu/image-edit-link.tsx","../src/ui/bubble-menu/image-form.tsx","../src/ui/bubble-menu/image-toolbar.tsx","../src/ui/bubble-menu/image-unlink.tsx","../src/ui/bubble-menu/image-default.tsx","../src/ui/bubble-menu/link-edit-link.tsx","../src/ui/bubble-menu/link-form.tsx","../src/ui/bubble-menu/link-open-link.tsx","../src/ui/bubble-menu/link-toolbar.tsx","../src/ui/bubble-menu/link-unlink.tsx","../src/ui/bubble-menu/link-default.tsx","../src/ui/bubble-menu/separator.tsx","../src/ui/bubble-menu/index.ts","../src/ui/slash-command/utils.ts","../src/ui/slash-command/command-list.tsx","../src/ui/slash-command/commands.tsx","../src/ui/slash-command/search.ts","../src/ui/slash-command/root.tsx"],"sourcesContent":["import type { IconProps } from './types';\n\nexport function AlignCenterIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M21 5H3\" />\n      <path d=\"M17 12H7\" />\n      <path d=\"M19 19H5\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function AlignLeftIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M21 5H3\" />\n      <path d=\"M15 12H3\" />\n      <path d=\"M17 19H3\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function AlignRightIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M21 5H3\" />\n      <path d=\"M21 12H9\" />\n      <path d=\"M21 19H7\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function BoldIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function CaseUpperIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M15 11h4.5a1 1 0 0 1 0 5h-4a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h3a1 1 0 0 1 0 5\" />\n      <path d=\"m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16\" />\n      <path d=\"M3.304 13h6.392\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function CheckIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M20 6 9 17l-5-5\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function ChevronDownIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"m6 9 6 6 6-6\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function CodeIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"m16 18 6-6-6-6\" />\n      <path d=\"m8 6-6 6 6 6\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function Columns2Icon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n      <path d=\"M12 3v18\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function Columns3Icon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n      <path d=\"M9 3v18\" />\n      <path d=\"M15 3v18\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function Columns4Icon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n      <path d=\"M7.5 3v18\" />\n      <path d=\"M12 3v18\" />\n      <path d=\"M16.5 3v18\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function ExternalLinkIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M15 3h6v6\" />\n      <path d=\"M10 14 21 3\" />\n      <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function Heading1Icon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M4 12h8\" />\n      <path d=\"M4 18V6\" />\n      <path d=\"M12 18V6\" />\n      <path d=\"m17 12 3-2v8\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function Heading2Icon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M4 12h8\" />\n      <path d=\"M4 18V6\" />\n      <path d=\"M12 18V6\" />\n      <path d=\"M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function Heading3Icon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M4 12h8\" />\n      <path d=\"M4 18V6\" />\n      <path d=\"M12 18V6\" />\n      <path d=\"M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2\" />\n      <path d=\"M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function ItalicIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\" />\n      <line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\" />\n      <line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function LinkIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n      <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function ListIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M3 5h.01\" />\n      <path d=\"M3 12h.01\" />\n      <path d=\"M3 19h.01\" />\n      <path d=\"M8 5h13\" />\n      <path d=\"M8 12h13\" />\n      <path d=\"M8 19h13\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function ListOrderedIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M11 5h10\" />\n      <path d=\"M11 12h10\" />\n      <path d=\"M11 19h10\" />\n      <path d=\"M4 4h1v5\" />\n      <path d=\"M4 9h2\" />\n      <path d=\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function MousePointerIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M12.586 12.586 19 19\" />\n      <path d=\"M3.688 3.037a.497.497 0 0 0-.651.651l6.5 15.999a.501.501 0 0 0 .947-.062l1.569-6.083a2 2 0 0 1 1.448-1.479l6.124-1.579a.5.5 0 0 0 .063-.947z\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function PencilIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n      <path d=\"m15 5 4 4\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function Rows2Icon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n      <path d=\"M3 12h18\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function SplitSquareVerticalIcon({\n  size,\n  width,\n  height,\n  ...props\n}: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M5 8V5c0-1 1-2 2-2h10c1 0 2 1 2 2v3\" />\n      <path d=\"M19 16v3c0 1-1 2-2 2H7c-1 0-2-1-2-2v-3\" />\n      <line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function SquareCodeIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"m10 9-3 3 3 3\" />\n      <path d=\"m14 15 3-3-3-3\" />\n      <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function StrikethroughIcon({\n  size,\n  width,\n  height,\n  ...props\n}: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M16 4H9a3 3 0 0 0-2.83 4\" />\n      <path d=\"M14 12a4 4 0 0 1 0 8H6\" />\n      <line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function TextIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M21 5H3\" />\n      <path d=\"M15 12H3\" />\n      <path d=\"M17 19H3\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function TextQuoteIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M17 5H3\" />\n      <path d=\"M21 12H8\" />\n      <path d=\"M21 19H8\" />\n      <path d=\"M3 12v7\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function UnderlineIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"M6 4v6a6 6 0 0 0 12 0V4\" />\n      <line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\" />\n    </svg>\n  );\n}\n","import type { IconProps } from './types';\n\nexport function UnlinkIcon({ size, width, height, ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size ?? width ?? 24}\n      height={size ?? height ?? 24}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      {...props}\n    >\n      <path d=\"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71\" />\n      <path d=\"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71\" />\n      <line x1=\"8\" x2=\"8\" y1=\"2\" y2=\"5\" />\n      <line x1=\"2\" x2=\"5\" y1=\"8\" y2=\"8\" />\n      <line x1=\"16\" x2=\"16\" y1=\"19\" y2=\"22\" />\n      <line x1=\"19\" x2=\"22\" y1=\"16\" y2=\"16\" />\n    </svg>\n  );\n}\n","import type { Editor } from '@tiptap/core';\nimport * as React from 'react';\n\nexport interface BubbleMenuContextValue {\n  editor: Editor;\n  isEditing: boolean;\n  setIsEditing: (value: boolean) => void;\n}\n\nexport const BubbleMenuContext =\n  React.createContext<BubbleMenuContextValue | null>(null);\n\nexport function useBubbleMenuContext(): BubbleMenuContextValue {\n  const context = React.useContext(BubbleMenuContext);\n  if (!context) {\n    throw new Error(\n      'BubbleMenu compound components must be used within <BubbleMenu>',\n    );\n  }\n  return context;\n}\n","import type * as React from 'react';\n\nexport interface BubbleMenuItemProps extends React.ComponentProps<'button'> {\n  /** Used for aria-label and data-item attribute */\n  name: string;\n  /** Whether this item is currently active */\n  isActive: boolean;\n  /** Called when clicked */\n  onCommand: () => void;\n}\n\nexport function BubbleMenuItem({\n  name,\n  isActive,\n  onCommand,\n  className,\n  children,\n  ...rest\n}: BubbleMenuItemProps) {\n  return (\n    <button\n      type=\"button\"\n      aria-label={name}\n      aria-pressed={isActive}\n      className={className}\n      data-re-bubble-menu-item=\"\"\n      data-item={name}\n      {...(isActive ? { 'data-active': '' } : {})}\n      onMouseDown={(e) => e.preventDefault()}\n      onClick={onCommand}\n      {...rest}\n    >\n      {children}\n    </button>\n  );\n}\n","import { useEditorState } from '@tiptap/react';\nimport { setTextAlignment } from '../../utils/set-text-alignment';\nimport { AlignCenterIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport type { PreWiredItemProps } from './create-mark-bubble-item';\nimport { BubbleMenuItem } from './item';\n\nexport function BubbleMenuAlignCenter({\n  className,\n  children,\n}: PreWiredItemProps) {\n  const { editor } = useBubbleMenuContext();\n\n  const isActive = useEditorState({\n    editor,\n    selector: ({ editor }) =>\n      editor?.isActive({ alignment: 'center' }) ?? false,\n  });\n\n  return (\n    <BubbleMenuItem\n      name=\"align-center\"\n      isActive={isActive}\n      onCommand={() => setTextAlignment(editor, 'center')}\n      className={className}\n    >\n      {children ?? <AlignCenterIcon />}\n    </BubbleMenuItem>\n  );\n}\n","import { useEditorState } from '@tiptap/react';\nimport { setTextAlignment } from '../../utils/set-text-alignment';\nimport { AlignLeftIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport type { PreWiredItemProps } from './create-mark-bubble-item';\nimport { BubbleMenuItem } from './item';\n\nexport function BubbleMenuAlignLeft({\n  className,\n  children,\n}: PreWiredItemProps) {\n  const { editor } = useBubbleMenuContext();\n\n  const isActive = useEditorState({\n    editor,\n    selector: ({ editor }) => editor?.isActive({ alignment: 'left' }) ?? false,\n  });\n\n  return (\n    <BubbleMenuItem\n      name=\"align-left\"\n      isActive={isActive}\n      onCommand={() => setTextAlignment(editor, 'left')}\n      className={className}\n    >\n      {children ?? <AlignLeftIcon />}\n    </BubbleMenuItem>\n  );\n}\n","import { useEditorState } from '@tiptap/react';\nimport { setTextAlignment } from '../../utils/set-text-alignment';\nimport { AlignRightIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport type { PreWiredItemProps } from './create-mark-bubble-item';\nimport { BubbleMenuItem } from './item';\n\nexport function BubbleMenuAlignRight({\n  className,\n  children,\n}: PreWiredItemProps) {\n  const { editor } = useBubbleMenuContext();\n\n  const isActive = useEditorState({\n    editor,\n    selector: ({ editor }) => editor?.isActive({ alignment: 'right' }) ?? false,\n  });\n\n  return (\n    <BubbleMenuItem\n      name=\"align-right\"\n      isActive={isActive}\n      onCommand={() => setTextAlignment(editor, 'right')}\n      className={className}\n    >\n      {children ?? <AlignRightIcon />}\n    </BubbleMenuItem>\n  );\n}\n","import { useEditorState } from '@tiptap/react';\nimport type * as React from 'react';\nimport { useBubbleMenuContext } from './context';\nimport { BubbleMenuItem } from './item';\n\nexport interface PreWiredItemProps {\n  className?: string;\n  /** Override the default icon */\n  children?: React.ReactNode;\n}\n\ninterface MarkBubbleItemConfig {\n  name: string;\n  activeName: string;\n  activeParams?: Record<string, unknown>;\n  command: string;\n  icon: React.ReactNode;\n}\n\nexport function createMarkBubbleItem(config: MarkBubbleItemConfig) {\n  function MarkBubbleItem({ className, children }: PreWiredItemProps) {\n    const { editor } = useBubbleMenuContext();\n\n    const isActive = useEditorState({\n      editor,\n      selector: ({ editor }) => {\n        if (config.activeParams) {\n          return (\n            editor?.isActive(config.activeName, config.activeParams) ?? false\n          );\n        }\n        return editor?.isActive(config.activeName) ?? false;\n      },\n    });\n\n    const handleCommand = () => {\n      const chain = editor.chain().focus();\n      const method = (chain as unknown as Record<string, () => typeof chain>)[\n        config.command\n      ];\n      if (method) {\n        method.call(chain).run();\n      }\n    };\n\n    return (\n      <BubbleMenuItem\n        name={config.name}\n        isActive={isActive}\n        onCommand={handleCommand}\n        className={className}\n      >\n        {children ?? config.icon}\n      </BubbleMenuItem>\n    );\n  }\n\n  MarkBubbleItem.displayName = `BubbleMenu${config.name.charAt(0).toUpperCase() + config.name.slice(1)}`;\n\n  return MarkBubbleItem;\n}\n","import { BoldIcon } from '../icons';\nimport { createMarkBubbleItem } from './create-mark-bubble-item';\n\nexport const BubbleMenuBold = createMarkBubbleItem({\n  name: 'bold',\n  activeName: 'bold',\n  command: 'toggleBold',\n  icon: <BoldIcon />,\n});\n","import type * as React from 'react';\nimport { PencilIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuButtonEditLinkProps\n  extends Omit<React.ComponentProps<'button'>, 'type'> {}\n\nexport function BubbleMenuButtonEditLink({\n  className,\n  children,\n  onClick,\n  onMouseDown,\n  ...rest\n}: BubbleMenuButtonEditLinkProps) {\n  const { setIsEditing } = useBubbleMenuContext();\n\n  return (\n    <button\n      {...rest}\n      type=\"button\"\n      aria-label=\"Edit link\"\n      data-re-btn-bm-item=\"\"\n      data-item=\"edit-link\"\n      className={className}\n      onMouseDown={(e) => {\n        e.preventDefault();\n        onMouseDown?.(e);\n      }}\n      onClick={(e) => {\n        onClick?.(e);\n        setIsEditing(true);\n      }}\n    >\n      {children ?? <PencilIcon />}\n    </button>\n  );\n}\n","import type { Editor } from '@tiptap/core';\n\nconst SAFE_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\n/**\n * Basic URL validation and auto-prefixing.\n * Rejects dangerous schemes (javascript:, data:, vbscript:, etc.).\n * Returns the valid URL string or null.\n */\nexport function getUrlFromString(str: string): string | null {\n  if (str === '#') {\n    return str;\n  }\n\n  try {\n    const url = new URL(str);\n    if (SAFE_PROTOCOLS.has(url.protocol)) {\n      return str;\n    }\n    return null;\n  } catch {\n    // not a valid URL as-is\n  }\n\n  try {\n    if (str.includes('.') && !str.includes(' ')) {\n      return new URL(`https://${str}`).toString();\n    }\n  } catch {\n    // still not valid\n  }\n\n  return null;\n}\n\nexport function setLinkHref(editor: Editor, href: string): void {\n  if (href.length === 0) {\n    editor.chain().unsetLink().run();\n    return;\n  }\n\n  const { from, to } = editor.state.selection;\n  if (from === to) {\n    editor\n      .chain()\n      .extendMarkRange('link')\n      .setLink({ href })\n      .setTextSelection({ from, to })\n      .run();\n    return;\n  }\n\n  editor.chain().setLink({ href }).run();\n}\n\nexport function focusEditor(editor: Editor): void {\n  setTimeout(() => {\n    editor.commands.focus();\n  }, 0);\n}\n","import * as React from 'react';\nimport { CheckIcon, UnlinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport { focusEditor, getUrlFromString } from './utils';\n\nexport interface BubbleMenuButtonFormProps {\n  className?: string;\n  validateUrl?: (value: string) => string | null;\n  onLinkApply?: (href: string) => void;\n  onLinkRemove?: () => void;\n}\n\nexport function BubbleMenuButtonForm({\n  className,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n}: BubbleMenuButtonFormProps) {\n  const { editor, isEditing, setIsEditing } = useBubbleMenuContext();\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const formRef = React.useRef<HTMLFormElement>(null);\n\n  const buttonHref = (editor.getAttributes('button').href as string) ?? '';\n  const displayHref = buttonHref === '#' ? '' : buttonHref;\n  const [inputValue, setInputValue] = React.useState(displayHref);\n\n  React.useEffect(() => {\n    if (!isEditing) {\n      return;\n    }\n    const currentHref = (editor.getAttributes('button').href as string) ?? '';\n    const display = currentHref === '#' ? '' : currentHref;\n    setInputValue(display);\n    const timeoutId = setTimeout(() => {\n      inputRef.current?.focus();\n    }, 0);\n    return () => clearTimeout(timeoutId);\n  }, [isEditing, editor]);\n\n  React.useEffect(() => {\n    if (!isEditing) {\n      return;\n    }\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setIsEditing(false);\n      }\n    };\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (formRef.current && !formRef.current.contains(event.target as Node)) {\n        const form = formRef.current;\n        const submitEvent = new Event('submit', {\n          bubbles: true,\n          cancelable: true,\n        });\n        form.dispatchEvent(submitEvent);\n        setIsEditing(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    window.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [isEditing, setIsEditing]);\n\n  if (!isEditing) {\n    return null;\n  }\n\n  function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n    e.preventDefault();\n\n    const value = inputValue.trim();\n\n    if (value === '') {\n      editor.commands.updateButton({ href: '#' });\n      setIsEditing(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    const validate = validateUrl ?? getUrlFromString;\n    const finalValue = validate(value);\n\n    if (!finalValue) {\n      editor.commands.updateButton({ href: '#' });\n      setIsEditing(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    editor.commands.updateButton({ href: finalValue });\n    setIsEditing(false);\n    focusEditor(editor);\n    onLinkApply?.(finalValue);\n  }\n\n  function handleUnlink(e: React.MouseEvent) {\n    e.stopPropagation();\n    editor.commands.updateButton({ href: '#' });\n    setIsEditing(false);\n    focusEditor(editor);\n    onLinkRemove?.();\n  }\n\n  return (\n    <form\n      ref={formRef}\n      data-re-btn-bm-form=\"\"\n      className={className}\n      onMouseDown={(e) => e.stopPropagation()}\n      onClick={(e) => e.stopPropagation()}\n      onKeyDown={(e) => e.stopPropagation()}\n      onSubmit={handleSubmit}\n    >\n      <input\n        ref={inputRef}\n        data-re-btn-bm-input=\"\"\n        value={inputValue}\n        onFocus={(e) => e.stopPropagation()}\n        onChange={(e) => setInputValue(e.target.value)}\n        placeholder=\"Paste a link\"\n        type=\"text\"\n      />\n\n      {displayHref ? (\n        <button\n          type=\"button\"\n          aria-label=\"Remove link\"\n          data-re-btn-bm-unlink=\"\"\n          onClick={handleUnlink}\n        >\n          <UnlinkIcon />\n        </button>\n      ) : (\n        <button\n          type=\"submit\"\n          aria-label=\"Apply link\"\n          data-re-btn-bm-apply=\"\"\n          onMouseDown={(e) => e.stopPropagation()}\n        >\n          <CheckIcon />\n        </button>\n      )}\n    </form>\n  );\n}\n","import type * as React from 'react';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuButtonToolbarProps\n  extends React.ComponentProps<'div'> {}\n\nexport function BubbleMenuButtonToolbar({\n  children,\n  ...rest\n}: BubbleMenuButtonToolbarProps) {\n  const { isEditing } = useBubbleMenuContext();\n\n  if (isEditing) {\n    return null;\n  }\n\n  return (\n    <div data-re-btn-bm-toolbar=\"\" {...rest}>\n      {children}\n    </div>\n  );\n}\n","import type * as React from 'react';\nimport { UnlinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport { focusEditor } from './utils';\n\nexport interface BubbleMenuButtonUnlinkProps\n  extends Omit<React.ComponentProps<'button'>, 'type'> {\n  onLinkRemove?: () => void;\n}\n\nexport function BubbleMenuButtonUnlink({\n  className,\n  children,\n  onClick,\n  onMouseDown,\n  onLinkRemove,\n  ...rest\n}: BubbleMenuButtonUnlinkProps) {\n  const { editor } = useBubbleMenuContext();\n\n  return (\n    <button\n      {...rest}\n      type=\"button\"\n      aria-label=\"Remove link\"\n      data-re-btn-bm-item=\"\"\n      data-item=\"unlink\"\n      className={className}\n      onMouseDown={(e) => {\n        e.preventDefault();\n        onMouseDown?.(e);\n      }}\n      onClick={(e) => {\n        onClick?.(e);\n        editor.commands.updateButton({ href: '#' });\n        focusEditor(editor);\n        onLinkRemove?.();\n      }}\n    >\n      {children ?? <UnlinkIcon />}\n    </button>\n  );\n}\n","import { Slot } from '@radix-ui/react-slot';\nimport { extensions as nativeTiptapExtensions } from '@tiptap/core';\nimport { useCurrentEditor } from '@tiptap/react';\nimport * as React from 'react';\nimport {\n  createFocusScopePlugin,\n  createFocusScopesStorage,\n  type FocusScopesStorage,\n  focusScopePluginKey,\n} from '../extensions/focus-scopes';\n\ntype FocusScopeContextValue = FocusScopesStorage;\n\nexport const FocusScopeContext =\n  React.createContext<FocusScopeContextValue | null>(null);\n\nconst noopFocusScope: FocusScopeContextValue = {\n  registerScope: () => {},\n  unregisterScope: () => {},\n};\n\nexport function useEditorFocusScope() {\n  const context = React.useContext(FocusScopeContext);\n  const { editor } = useCurrentEditor();\n  return context ?? editor?.extensionStorage?.focusScope ?? noopFocusScope;\n}\n\nexport interface EditorFocusScopeProviderProps {\n  children: React.ReactNode;\n  clearSelectionOnBlur?: boolean;\n}\n\n/**\n * @deprecated Focus scope tracking now lives in the FocusScopes extension,\n * included by default through StarterKit. This component is kept as a\n * compatibility wrapper for editors that do not use StarterKit.\n */\nexport function EditorFocusScopeProvider({\n  children,\n  clearSelectionOnBlur = true,\n}: EditorFocusScopeProviderProps) {\n  const { editor } = useCurrentEditor();\n  const [fallbackFocusScope, setFallbackFocusScope] =\n    React.useState<FocusScopeContextValue | null>(null);\n\n  React.useLayoutEffect(() => {\n    if (!editor) return;\n\n    const hasFocusScopePlugin = editor.state.plugins.some(\n      (plugin) => plugin.spec.key === focusScopePluginKey,\n    );\n    if (hasFocusScopePlugin) {\n      setFallbackFocusScope(editor.extensionStorage.focusScope ?? null);\n      return;\n    }\n\n    const defaultFocusPlugin = editor.state.plugins.find(\n      (plugin) =>\n        plugin.spec.key === nativeTiptapExtensions.focusEventsPluginKey,\n    );\n    if (defaultFocusPlugin) {\n      editor.unregisterPlugin(nativeTiptapExtensions.focusEventsPluginKey);\n    }\n\n    const storage =\n      editor.extensionStorage.focusScope ?? createFocusScopesStorage();\n    editor.extensionStorage.focusScope = storage;\n    editor.registerPlugin(\n      createFocusScopePlugin({\n        editor,\n        storage,\n        clearSelectionOnBlur,\n      }),\n    );\n    setFallbackFocusScope(storage);\n\n    return () => {\n      editor.unregisterPlugin(focusScopePluginKey);\n      if (!editor.isDestroyed && defaultFocusPlugin) {\n        editor.registerPlugin(defaultFocusPlugin);\n      }\n    };\n  }, [editor, clearSelectionOnBlur]);\n\n  const focusScope =\n    fallbackFocusScope ??\n    editor?.extensionStorage?.focusScope ??\n    noopFocusScope;\n\n  return (\n    <FocusScopeContext.Provider value={focusScope}>\n      {children}\n    </FocusScopeContext.Provider>\n  );\n}\n\nexport interface EditorFocusScopeProps {\n  children: React.ReactNode;\n}\n\nexport function EditorFocusScope({ children }: EditorFocusScopeProps) {\n  const context = React.useContext(FocusScopeContext);\n  const { editor } = useCurrentEditor();\n  const focusScope = context ?? editor?.extensionStorage?.focusScope ?? null;\n  const attachedElRef = React.useRef<HTMLElement | null>(null);\n\n  const setScopeRef = React.useCallback(\n    (element: HTMLElement | null) => {\n      if (!focusScope) return;\n\n      const prev = attachedElRef.current;\n      if (prev && prev !== element) {\n        focusScope.unregisterScope(prev);\n      }\n\n      attachedElRef.current = element;\n\n      if (element) {\n        focusScope.registerScope(element);\n      }\n    },\n    [focusScope],\n  );\n\n  if (!focusScope) {\n    return <>{children}</>;\n  }\n\n  return <Slot ref={setScopeRef}>{children}</Slot>;\n}\n","import { CodeIcon } from '../icons';\nimport { createMarkBubbleItem } from './create-mark-bubble-item';\n\nexport const BubbleMenuCode = createMarkBubbleItem({\n  name: 'code',\n  activeName: 'code',\n  command: 'toggleCode',\n  icon: <CodeIcon />,\n});\n","import type * as React from 'react';\n\nexport interface BubbleMenuItemGroupProps {\n  className?: string;\n  children: React.ReactNode;\n}\n\nexport function BubbleMenuItemGroup({\n  className,\n  children,\n}: BubbleMenuItemGroupProps) {\n  return (\n    <fieldset className={className} data-re-bubble-menu-group=\"\">\n      {children}\n    </fieldset>\n  );\n}\n","import { ItalicIcon } from '../icons';\nimport { createMarkBubbleItem } from './create-mark-bubble-item';\n\nexport const BubbleMenuItalic = createMarkBubbleItem({\n  name: 'italic',\n  activeName: 'italic',\n  command: 'toggleItalic',\n  icon: <ItalicIcon />,\n});\n","import type { Editor } from '@tiptap/core';\nimport { useEditorState } from '@tiptap/react';\nimport * as React from 'react';\nimport { editorEventBus } from '../../core/event-bus';\nimport { CheckIcon, LinkIcon, UnlinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport { focusEditor, getUrlFromString, setLinkHref } from './utils';\n\nexport interface BubbleMenuLinkSelectorProps {\n  className?: string;\n  /** Whether to show the link icon toggle button (default: true) */\n  showToggle?: boolean;\n  /** Custom URL validator. Return the valid URL string or null. */\n  validateUrl?: (value: string) => string | null;\n  /** Called after link is applied */\n  onLinkApply?: (href: string) => void;\n  /** Called after link is removed */\n  onLinkRemove?: () => void;\n  /** Plugin slot: extra actions rendered inside the link input form */\n  children?: React.ReactNode;\n  /** Controlled open state */\n  open?: boolean;\n  /** Called when open state changes */\n  onOpenChange?: (open: boolean) => void;\n}\n\nexport function BubbleMenuLinkSelector({\n  className,\n  showToggle = true,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n  children,\n  open: controlledOpen,\n  onOpenChange,\n}: BubbleMenuLinkSelectorProps) {\n  const { editor } = useBubbleMenuContext();\n  const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n\n  const isControlled = controlledOpen !== undefined;\n  const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n  const setIsOpen = React.useCallback(\n    (value: boolean) => {\n      if (!isControlled) {\n        setUncontrolledOpen(value);\n      }\n      onOpenChange?.(value);\n    },\n    [isControlled, onOpenChange],\n  );\n\n  const editorState = useEditorState({\n    editor,\n    selector: ({ editor }) => ({\n      isLinkActive: editor?.isActive('link') ?? false,\n      hasLink: Boolean(editor?.getAttributes('link').href),\n      currentHref: (editor?.getAttributes('link').href as string) || '',\n    }),\n  });\n\n  const setIsOpenRef = React.useRef(setIsOpen);\n  setIsOpenRef.current = setIsOpen;\n\n  React.useEffect(() => {\n    const subscription = editorEventBus.on('bubble-menu:add-link', () => {\n      setIsOpenRef.current(true);\n    });\n\n    return () => {\n      setIsOpenRef.current(false);\n      subscription.unsubscribe();\n    };\n  }, []);\n\n  if (!editorState) {\n    return null;\n  }\n\n  const handleOpenLink = () => {\n    setIsOpen(!isOpen);\n  };\n\n  return (\n    <div\n      data-re-link-selector=\"\"\n      {...(isOpen ? { 'data-open': '' } : {})}\n      {...(editorState.hasLink ? { 'data-has-link': '' } : {})}\n      className={className}\n    >\n      {showToggle && (\n        <button\n          type=\"button\"\n          aria-expanded={isOpen}\n          aria-haspopup=\"true\"\n          aria-label=\"Add link\"\n          aria-pressed={editorState.isLinkActive && editorState.hasLink}\n          data-re-link-selector-trigger=\"\"\n          onClick={handleOpenLink}\n        >\n          <LinkIcon />\n        </button>\n      )}\n      {isOpen && (\n        <LinkForm\n          editor={editor}\n          currentHref={editorState.currentHref}\n          validateUrl={validateUrl}\n          onLinkApply={onLinkApply}\n          onLinkRemove={onLinkRemove}\n          setIsOpen={setIsOpen}\n        >\n          {children}\n        </LinkForm>\n      )}\n    </div>\n  );\n}\n\ninterface LinkFormProps {\n  editor: Editor;\n  currentHref: string;\n  validateUrl?: (value: string) => string | null;\n  onLinkApply?: (href: string) => void;\n  onLinkRemove?: () => void;\n  setIsOpen: (state: boolean) => void;\n  children?: React.ReactNode;\n}\n\nfunction LinkForm({\n  editor,\n  currentHref,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n  setIsOpen,\n  children,\n}: LinkFormProps) {\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const formRef = React.useRef<HTMLFormElement>(null);\n  const displayHref = currentHref === '#' ? '' : currentHref;\n  const [inputValue, setInputValue] = React.useState(displayHref);\n\n  React.useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      inputRef.current?.focus();\n    }, 0);\n    return () => clearTimeout(timeoutId);\n  }, []);\n\n  React.useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        if (editor.getAttributes('link').href === '#') {\n          editor.chain().unsetLink().run();\n        }\n        setIsOpen(false);\n      }\n    };\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (formRef.current && !formRef.current.contains(event.target as Node)) {\n        const form = formRef.current;\n        const submitEvent = new Event('submit', {\n          bubbles: true,\n          cancelable: true,\n        });\n        form.dispatchEvent(submitEvent);\n        setIsOpen(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    window.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [editor, setIsOpen]);\n\n  function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n    e.preventDefault();\n\n    const value = inputValue.trim();\n\n    if (value === '') {\n      setLinkHref(editor, '');\n      setIsOpen(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    const validate = validateUrl ?? getUrlFromString;\n    const finalValue = validate(value);\n\n    if (!finalValue) {\n      setLinkHref(editor, '');\n      setIsOpen(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    setLinkHref(editor, finalValue);\n    setIsOpen(false);\n    focusEditor(editor);\n    onLinkApply?.(finalValue);\n  }\n\n  function handleUnlink(e: React.MouseEvent) {\n    e.stopPropagation();\n    setLinkHref(editor, '');\n    setIsOpen(false);\n    focusEditor(editor);\n    onLinkRemove?.();\n  }\n\n  return (\n    <form\n      ref={formRef}\n      data-re-link-selector-form=\"\"\n      onMouseDown={(e) => e.stopPropagation()}\n      onClick={(e) => e.stopPropagation()}\n      onKeyDown={(e) => e.stopPropagation()}\n      onSubmit={handleSubmit}\n    >\n      <input\n        ref={inputRef}\n        data-re-link-selector-input=\"\"\n        value={inputValue}\n        onFocus={(e) => e.stopPropagation()}\n        onChange={(e) => setInputValue(e.target.value)}\n        placeholder=\"Paste a link\"\n        type=\"text\"\n      />\n\n      {children}\n\n      {displayHref ? (\n        <button\n          type=\"button\"\n          aria-label=\"Remove link\"\n          data-re-link-selector-unlink=\"\"\n          onClick={handleUnlink}\n        >\n          <UnlinkIcon />\n        </button>\n      ) : (\n        <button\n          type=\"submit\"\n          aria-label=\"Apply link\"\n          data-re-link-selector-apply=\"\"\n          onMouseDown={(e) => e.stopPropagation()}\n        >\n          <CheckIcon />\n        </button>\n      )}\n    </form>\n  );\n}\n","import * as Popover from '@radix-ui/react-popover';\nimport { useEditorState } from '@tiptap/react';\nimport * as React from 'react';\nimport { EditorFocusScope } from '../editor-focus-scope';\nimport {\n  CheckIcon,\n  ChevronDownIcon,\n  CodeIcon,\n  Heading1Icon,\n  Heading2Icon,\n  Heading3Icon,\n  ListIcon,\n  ListOrderedIcon,\n  TextIcon,\n  TextQuoteIcon,\n} from '../icons';\nimport { useBubbleMenuContext } from './context';\n\nexport type NodeType =\n  | 'Text'\n  | 'Title'\n  | 'Subtitle'\n  | 'Heading'\n  | 'Bullet List'\n  | 'Numbered List'\n  | 'Quote'\n  | 'Code';\n\nexport interface NodeSelectorItem {\n  name: NodeType;\n  icon: React.ComponentType<React.SVGAttributes<SVGSVGElement>>;\n  command: () => void;\n  isActive: boolean;\n}\n\ninterface NodeSelectorContextValue {\n  items: NodeSelectorItem[];\n  activeItem: NodeSelectorItem | { name: 'Multiple' };\n  isOpen: boolean;\n  setIsOpen: (value: boolean) => void;\n}\n\nconst NodeSelectorContext =\n  React.createContext<NodeSelectorContextValue | null>(null);\n\nfunction useNodeSelectorContext(): NodeSelectorContextValue {\n  const context = React.useContext(NodeSelectorContext);\n  if (!context) {\n    throw new Error(\n      'NodeSelector compound components must be used within <NodeSelector.Root>',\n    );\n  }\n  return context;\n}\n\nexport interface NodeSelectorRootProps {\n  /** Block types to exclude */\n  omit?: string[];\n  /** Controlled open state */\n  open?: boolean;\n  /** Called when open state changes */\n  onOpenChange?: (open: boolean) => void;\n  className?: string;\n  children: React.ReactNode;\n}\n\nexport function NodeSelectorRoot({\n  omit = [],\n  open: controlledOpen,\n  onOpenChange,\n  className,\n  children,\n}: NodeSelectorRootProps) {\n  const { editor } = useBubbleMenuContext();\n  const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n\n  const isControlled = controlledOpen !== undefined;\n  const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n  const setIsOpen = React.useCallback(\n    (value: boolean) => {\n      if (!isControlled) {\n        setUncontrolledOpen(value);\n      }\n      onOpenChange?.(value);\n    },\n    [isControlled, onOpenChange],\n  );\n\n  const editorState = useEditorState({\n    editor,\n    selector: ({ editor }) => ({\n      isParagraphActive:\n        (editor?.isActive('paragraph') ?? false) &&\n        !editor?.isActive('bulletList') &&\n        !editor?.isActive('orderedList'),\n      isHeading1Active: editor?.isActive('heading', { level: 1 }) ?? false,\n      isHeading2Active: editor?.isActive('heading', { level: 2 }) ?? false,\n      isHeading3Active: editor?.isActive('heading', { level: 3 }) ?? false,\n      isBulletListActive: editor?.isActive('bulletList') ?? false,\n      isOrderedListActive: editor?.isActive('orderedList') ?? false,\n      isBlockquoteActive: editor?.isActive('blockquote') ?? false,\n      isCodeBlockActive: editor?.isActive('codeBlock') ?? false,\n    }),\n  });\n\n  const allItems: NodeSelectorItem[] = React.useMemo(\n    () => [\n      {\n        name: 'Text' as const,\n        icon: TextIcon,\n        command: () =>\n          editor\n            .chain()\n            .focus()\n            .clearNodes()\n            .toggleNode('paragraph', 'paragraph')\n            .run(),\n        isActive: editorState?.isParagraphActive ?? false,\n      },\n      {\n        name: 'Title' as const,\n        icon: Heading1Icon,\n        command: () =>\n          editor.chain().focus().clearNodes().toggleHeading({ level: 1 }).run(),\n        isActive: editorState?.isHeading1Active ?? false,\n      },\n      {\n        name: 'Subtitle' as const,\n        icon: Heading2Icon,\n        command: () =>\n          editor.chain().focus().clearNodes().toggleHeading({ level: 2 }).run(),\n        isActive: editorState?.isHeading2Active ?? false,\n      },\n      {\n        name: 'Heading' as const,\n        icon: Heading3Icon,\n        command: () =>\n          editor.chain().focus().clearNodes().toggleHeading({ level: 3 }).run(),\n        isActive: editorState?.isHeading3Active ?? false,\n      },\n      {\n        name: 'Bullet List' as const,\n        icon: ListIcon,\n        command: () =>\n          editor.chain().focus().clearNodes().toggleBulletList().run(),\n        isActive: editorState?.isBulletListActive ?? false,\n      },\n      {\n        name: 'Numbered List' as const,\n        icon: ListOrderedIcon,\n        command: () =>\n          editor.chain().focus().clearNodes().toggleOrderedList().run(),\n        isActive: editorState?.isOrderedListActive ?? false,\n      },\n      {\n        name: 'Quote' as const,\n        icon: TextQuoteIcon,\n        command: () =>\n          editor\n            .chain()\n            .focus()\n            .clearNodes()\n            .toggleNode('paragraph', 'paragraph')\n            .toggleBlockquote()\n            .run(),\n        isActive: editorState?.isBlockquoteActive ?? false,\n      },\n      {\n        name: 'Code' as const,\n        icon: CodeIcon,\n        command: () =>\n          editor.chain().focus().clearNodes().toggleCodeBlock().run(),\n        isActive: editorState?.isCodeBlockActive ?? false,\n      },\n    ],\n    [editor, editorState],\n  );\n\n  const items = React.useMemo(\n    () => allItems.filter((item) => !omit.includes(item.name)),\n    [allItems, omit],\n  );\n\n  const activeItem = React.useMemo(\n    () =>\n      items.find((item) => item.isActive) ?? {\n        name: 'Multiple' as const,\n      },\n    [items],\n  );\n\n  const contextValue = React.useMemo(\n    () => ({ items, activeItem, isOpen, setIsOpen }),\n    [items, activeItem, isOpen, setIsOpen],\n  );\n\n  if (!editorState || items.length === 0) {\n    return null;\n  }\n\n  return (\n    <NodeSelectorContext.Provider value={contextValue}>\n      <Popover.Root open={isOpen} onOpenChange={setIsOpen}>\n        <EditorFocusScope>\n          <div\n            data-re-node-selector=\"\"\n            {...(isOpen ? { 'data-open': '' } : {})}\n            className={className}\n          >\n            {children}\n          </div>\n        </EditorFocusScope>\n      </Popover.Root>\n    </NodeSelectorContext.Provider>\n  );\n}\n\nexport interface NodeSelectorTriggerProps {\n  className?: string;\n  children?: React.ReactNode;\n}\n\nexport function NodeSelectorTrigger({\n  className,\n  children,\n}: NodeSelectorTriggerProps) {\n  const { activeItem, isOpen, setIsOpen } = useNodeSelectorContext();\n\n  return (\n    <Popover.Trigger\n      data-re-node-selector-trigger=\"\"\n      className={className}\n      onClick={() => setIsOpen(!isOpen)}\n    >\n      {children ?? (\n        <>\n          <span>{activeItem.name}</span>\n          <ChevronDownIcon />\n        </>\n      )}\n    </Popover.Trigger>\n  );\n}\n\nexport interface NodeSelectorContentProps {\n  className?: string;\n  /** Popover alignment (default: \"start\") */\n  align?: 'start' | 'center' | 'end';\n  /** Render-prop for full control over item rendering.\n   *  Receives the filtered items and a `close` function to dismiss the popover. */\n  children?: (items: NodeSelectorItem[], close: () => void) => React.ReactNode;\n}\n\nexport function NodeSelectorContent({\n  className,\n  align = 'start',\n  children,\n}: NodeSelectorContentProps) {\n  const { items, setIsOpen } = useNodeSelectorContext();\n\n  return (\n    <Popover.Content\n      align={align}\n      data-re-node-selector-content=\"\"\n      className={className}\n    >\n      <EditorFocusScope>\n        <div>\n          {children\n            ? children(items, () => setIsOpen(false))\n            : items.map((item) => {\n                const Icon = item.icon;\n                return (\n                  <button\n                    key={item.name}\n                    type=\"button\"\n                    data-re-node-selector-item=\"\"\n                    {...(item.isActive ? { 'data-active': '' } : {})}\n                    onClick={() => {\n                      item.command();\n                      setIsOpen(false);\n                    }}\n                  >\n                    <Icon />\n                    <span>{item.name}</span>\n                    {item.isActive && <CheckIcon />}\n                  </button>\n                );\n              })}\n        </div>\n      </EditorFocusScope>\n    </Popover.Content>\n  );\n}\n\nexport interface BubbleMenuNodeSelectorProps {\n  /** Block types to exclude */\n  omit?: string[];\n  className?: string;\n  /** Override the trigger content (default: active item name + chevron icon) */\n  triggerContent?: React.ReactNode;\n  /** Controlled open state */\n  open?: boolean;\n  /** Called when open state changes */\n  onOpenChange?: (open: boolean) => void;\n}\n\nexport function BubbleMenuNodeSelector({\n  omit = [],\n  className,\n  triggerContent,\n  open,\n  onOpenChange,\n}: BubbleMenuNodeSelectorProps) {\n  return (\n    <NodeSelectorRoot\n      omit={omit}\n      open={open}\n      onOpenChange={onOpenChange}\n      className={className}\n    >\n      <NodeSelectorTrigger>{triggerContent}</NodeSelectorTrigger>\n      <NodeSelectorContent />\n    </NodeSelectorRoot>\n  );\n}\n","import { StrikethroughIcon } from '../icons';\nimport { createMarkBubbleItem } from './create-mark-bubble-item';\n\nexport const BubbleMenuStrike = createMarkBubbleItem({\n  name: 'strike',\n  activeName: 'strike',\n  command: 'toggleStrike',\n  icon: <StrikethroughIcon />,\n});\n","import type { Editor } from '@tiptap/core';\nimport { type EditorState, NodeSelection } from '@tiptap/pm/state';\nimport type { EditorView } from '@tiptap/pm/view';\n\nexport interface TriggerParams {\n  editor: Editor;\n  view: EditorView;\n  state: EditorState;\n  from: number;\n  to: number;\n}\n\nexport type TriggerFn = (params: TriggerParams) => boolean;\n\nexport const bubbleMenuTriggers = {\n  textSelection(\n    hideWhenActiveNodes: string[] = [],\n    hideWhenActiveMarks: string[] = [],\n  ): TriggerFn {\n    return ({ editor, state }) => {\n      if (\n        state.selection instanceof NodeSelection &&\n        hideWhenActiveNodes.includes(state.selection.node.type.name)\n      ) {\n        return false;\n      }\n      for (const node of hideWhenActiveNodes) {\n        if (editor.isActive(node)) {\n          return false;\n        }\n        const { $from } = state.selection;\n        for (let d = $from.depth; d > 0; d--) {\n          if ($from.node(d).type.name === node) {\n            return false;\n          }\n        }\n      }\n      for (const mark of hideWhenActiveMarks) {\n        if (editor.isActive(mark)) {\n          return false;\n        }\n      }\n      return editor.view.state.selection.content().size > 0;\n    };\n  },\n\n  node(name: string): TriggerFn {\n    return ({ editor }) => editor.isActive(name);\n  },\n\n  nodeWithoutSelection(name: string): TriggerFn {\n    return ({ editor }) =>\n      editor.isActive(name) && editor.view.state.selection.content().size === 0;\n  },\n};\n","import { UnderlineIcon } from '../icons';\nimport { createMarkBubbleItem } from './create-mark-bubble-item';\n\nexport const BubbleMenuUnderline = createMarkBubbleItem({\n  name: 'underline',\n  activeName: 'underline',\n  command: 'toggleUnderline',\n  icon: <UnderlineIcon />,\n});\n","import { CaseUpperIcon } from '../icons';\nimport { createMarkBubbleItem } from './create-mark-bubble-item';\n\nexport const BubbleMenuUppercase = createMarkBubbleItem({\n  name: 'uppercase',\n  activeName: 'uppercase',\n  command: 'toggleUppercase',\n  icon: <CaseUpperIcon />,\n});\n","import { PluginKey } from '@tiptap/pm/state';\nimport { useCurrentEditor } from '@tiptap/react';\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport * as React from 'react';\nimport { EditorFocusScope } from '../editor-focus-scope';\nimport { BubbleMenuAlignCenter } from './align-center';\nimport { BubbleMenuAlignLeft } from './align-left';\nimport { BubbleMenuAlignRight } from './align-right';\nimport { BubbleMenuBold } from './bold';\nimport { BubbleMenuCode } from './code';\nimport { BubbleMenuContext } from './context';\nimport { BubbleMenuItemGroup } from './group';\nimport { BubbleMenuItalic } from './italic';\nimport { BubbleMenuLinkSelector } from './link-selector';\nimport { BubbleMenuNodeSelector } from './node-selector';\nimport { BubbleMenuStrike } from './strike';\nimport { bubbleMenuTriggers, type TriggerFn } from './triggers';\nimport { BubbleMenuUnderline } from './underline';\nimport { BubbleMenuUppercase } from './uppercase';\n\nconst defaultPluginKey = new PluginKey('bubbleMenu');\n\nexport interface BubbleMenuRootProps\n  extends React.ComponentPropsWithoutRef<'div'> {\n  trigger?: TriggerFn;\n  pluginKey?: PluginKey;\n  hideWhenActiveNodes?: string[];\n  hideWhenActiveMarks?: string[];\n  placement?: 'top' | 'bottom';\n  offset?: number;\n  onHide?: () => void;\n}\n\nfunction Root({\n  trigger,\n  pluginKey = defaultPluginKey,\n  hideWhenActiveNodes = [],\n  hideWhenActiveMarks = [],\n  placement = 'bottom',\n  offset = 8,\n  onHide,\n  className,\n  children,\n  ...rest\n}: BubbleMenuRootProps) {\n  const { editor } = useCurrentEditor();\n  const [isEditing, setIsEditing] = React.useState(false);\n\n  const resolvedTrigger =\n    trigger ??\n    bubbleMenuTriggers.textSelection(hideWhenActiveNodes, hideWhenActiveMarks);\n\n  if (!editor) {\n    return null;\n  }\n\n  return (\n    <EditorFocusScope>\n      <BubbleMenu\n        editor={editor}\n        pluginKey={pluginKey}\n        data-re-bubble-menu=\"\"\n        shouldShow={resolvedTrigger}\n        options={{\n          placement,\n          offset,\n          onHide: () => {\n            setIsEditing(false);\n            onHide?.();\n          },\n        }}\n        className={className}\n        {...rest}\n      >\n        <BubbleMenuContext.Provider value={{ editor, isEditing, setIsEditing }}>\n          {children}\n        </BubbleMenuContext.Provider>\n      </BubbleMenu>\n    </EditorFocusScope>\n  );\n}\n\nconst textPluginKey = new PluginKey('textBubbleMenu');\n\ninterface BubbleMenuDefaultProps\n  extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n  hideWhenActiveNodes?: string[];\n  hideWhenActiveMarks?: string[];\n  placement?: 'top' | 'bottom';\n  offset?: number;\n  onHide?: () => void;\n}\n\nfunction Default({\n  hideWhenActiveNodes,\n  hideWhenActiveMarks,\n  placement,\n  offset,\n  onHide,\n  className,\n  ...rest\n}: BubbleMenuDefaultProps) {\n  const [isNodeSelectorOpen, setIsNodeSelectorOpen] = React.useState(false);\n  const [isLinkSelectorOpen, setIsLinkSelectorOpen] = React.useState(false);\n\n  const handleNodeSelectorOpenChange = React.useCallback((open: boolean) => {\n    setIsNodeSelectorOpen(open);\n    if (open) {\n      setIsLinkSelectorOpen(false);\n    }\n  }, []);\n\n  const handleLinkSelectorOpenChange = React.useCallback((open: boolean) => {\n    setIsLinkSelectorOpen(open);\n    if (open) {\n      setIsNodeSelectorOpen(false);\n    }\n  }, []);\n\n  const handleHide = React.useCallback(() => {\n    setIsNodeSelectorOpen(false);\n    setIsLinkSelectorOpen(false);\n    onHide?.();\n  }, [onHide]);\n\n  return (\n    <Root\n      pluginKey={textPluginKey}\n      hideWhenActiveNodes={hideWhenActiveNodes}\n      hideWhenActiveMarks={hideWhenActiveMarks}\n      placement={placement}\n      offset={offset}\n      onHide={handleHide}\n      className={className}\n      {...rest}\n    >\n      <BubbleMenuNodeSelector\n        open={isNodeSelectorOpen}\n        onOpenChange={handleNodeSelectorOpenChange}\n      />\n      <BubbleMenuLinkSelector\n        open={isLinkSelectorOpen}\n        onOpenChange={handleLinkSelectorOpenChange}\n      />\n      <BubbleMenuItemGroup>\n        <BubbleMenuBold />\n        <BubbleMenuItalic />\n        <BubbleMenuUnderline />\n        <BubbleMenuStrike />\n        <BubbleMenuCode />\n        <BubbleMenuUppercase />\n      </BubbleMenuItemGroup>\n      <BubbleMenuItemGroup>\n        <BubbleMenuAlignLeft />\n        <BubbleMenuAlignCenter />\n        <BubbleMenuAlignRight />\n      </BubbleMenuItemGroup>\n    </Root>\n  );\n}\n\nfunction RootWithDefault({ children, ...rest }: BubbleMenuRootProps) {\n  if (children) {\n    return <Root {...rest}>{children}</Root>;\n  }\n\n  return <Default {...rest} />;\n}\n\nexport { RootWithDefault as BubbleMenuRoot };\n","import { PluginKey } from '@tiptap/pm/state';\nimport { useEditorState } from '@tiptap/react';\nimport type * as React from 'react';\nimport { BubbleMenuButtonEditLink } from './button-edit-link';\nimport { BubbleMenuButtonForm } from './button-form';\nimport { BubbleMenuButtonToolbar } from './button-toolbar';\nimport { BubbleMenuButtonUnlink } from './button-unlink';\nimport { useBubbleMenuContext } from './context';\nimport { BubbleMenuRoot } from './root';\nimport { bubbleMenuTriggers } from './triggers';\n\nconst buttonPluginKey = new PluginKey('buttonBubbleMenu');\n\nexport interface BubbleMenuButtonDefaultProps\n  extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n  placement?: 'top' | 'bottom';\n  offset?: number;\n  onHide?: () => void;\n  validateUrl?: (value: string) => string | null;\n  onLinkApply?: (href: string) => void;\n  onLinkRemove?: () => void;\n}\n\nfunction BubbleMenuButtonDefaultInner({\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n}: Pick<\n  BubbleMenuButtonDefaultProps,\n  'validateUrl' | 'onLinkApply' | 'onLinkRemove'\n>) {\n  const { editor } = useBubbleMenuContext();\n  const buttonHref = useEditorState({\n    editor,\n    selector: ({ editor: e }) =>\n      (e?.getAttributes('button').href as string) ?? '',\n  });\n  const hasLink = (buttonHref ?? '') !== '' && buttonHref !== '#';\n\n  return (\n    <>\n      <BubbleMenuButtonToolbar>\n        <BubbleMenuButtonEditLink />\n        {hasLink && <BubbleMenuButtonUnlink onLinkRemove={onLinkRemove} />}\n      </BubbleMenuButtonToolbar>\n      <BubbleMenuButtonForm\n        validateUrl={validateUrl}\n        onLinkApply={onLinkApply}\n        onLinkRemove={onLinkRemove}\n      />\n    </>\n  );\n}\n\nexport function BubbleMenuButtonDefault({\n  placement = 'top',\n  offset,\n  onHide,\n  className,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n  ...rest\n}: BubbleMenuButtonDefaultProps) {\n  return (\n    <BubbleMenuRoot\n      trigger={bubbleMenuTriggers.node('button')}\n      pluginKey={buttonPluginKey}\n      placement={placement}\n      offset={offset}\n      onHide={onHide}\n      className={className}\n      {...rest}\n    >\n      <BubbleMenuButtonDefaultInner\n        validateUrl={validateUrl}\n        onLinkApply={onLinkApply}\n        onLinkRemove={onLinkRemove}\n      />\n    </BubbleMenuRoot>\n  );\n}\n","import type * as React from 'react';\nimport { PencilIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuImageEditLinkProps\n  extends Omit<React.ComponentProps<'button'>, 'type'> {}\n\nexport function BubbleMenuImageEditLink({\n  className,\n  children,\n  onClick,\n  onMouseDown,\n  ...rest\n}: BubbleMenuImageEditLinkProps) {\n  const { setIsEditing } = useBubbleMenuContext();\n\n  return (\n    <button\n      {...rest}\n      type=\"button\"\n      aria-label=\"Edit link\"\n      data-re-img-bm-item=\"\"\n      data-item=\"edit-link\"\n      className={className}\n      onMouseDown={(e) => {\n        e.preventDefault();\n        onMouseDown?.(e);\n      }}\n      onClick={(e) => {\n        onClick?.(e);\n        setIsEditing(true);\n      }}\n    >\n      {children ?? <PencilIcon />}\n    </button>\n  );\n}\n","import { useEditorState } from '@tiptap/react';\nimport * as React from 'react';\nimport { CheckIcon, UnlinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport { focusEditor, getUrlFromString } from './utils';\n\nexport interface BubbleMenuImageFormProps {\n  className?: string;\n  validateUrl?: (value: string) => string | null;\n  onLinkApply?: (href: string) => void;\n  onLinkRemove?: () => void;\n}\n\nexport function BubbleMenuImageForm({\n  className,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n}: BubbleMenuImageFormProps) {\n  const { editor, isEditing, setIsEditing } = useBubbleMenuContext();\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const formRef = React.useRef<HTMLFormElement>(null);\n\n  const imageHref = useEditorState({\n    editor,\n    selector: ({ editor: e }) =>\n      (e?.getAttributes('image').href as string | null) ?? '',\n  });\n\n  const [inputValue, setInputValue] = React.useState(imageHref ?? '');\n\n  React.useEffect(() => {\n    if (!isEditing) {\n      return;\n    }\n    setInputValue(imageHref ?? '');\n    const timeoutId = setTimeout(() => {\n      inputRef.current?.focus();\n    }, 0);\n    return () => clearTimeout(timeoutId);\n  }, [isEditing, imageHref]);\n\n  React.useEffect(() => {\n    if (!isEditing) {\n      return;\n    }\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setIsEditing(false);\n      }\n    };\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (formRef.current && !formRef.current.contains(event.target as Node)) {\n        const form = formRef.current;\n        const submitEvent = new Event('submit', {\n          bubbles: true,\n          cancelable: true,\n        });\n        form.dispatchEvent(submitEvent);\n        setIsEditing(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    window.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [isEditing, setIsEditing]);\n\n  if (!isEditing) {\n    return null;\n  }\n\n  function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n    e.preventDefault();\n\n    const value = inputValue.trim();\n\n    if (value === '') {\n      editor.chain().focus().updateAttributes('image', { href: null }).run();\n      setIsEditing(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    const validate = validateUrl ?? getUrlFromString;\n    const finalValue = validate(value);\n\n    if (!finalValue) {\n      editor.chain().focus().updateAttributes('image', { href: null }).run();\n      setIsEditing(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    editor\n      .chain()\n      .focus()\n      .updateAttributes('image', { href: finalValue })\n      .run();\n    setIsEditing(false);\n    focusEditor(editor);\n    onLinkApply?.(finalValue);\n  }\n\n  function handleUnlink(e: React.MouseEvent) {\n    e.stopPropagation();\n    editor.chain().focus().updateAttributes('image', { href: null }).run();\n    setIsEditing(false);\n    focusEditor(editor);\n    onLinkRemove?.();\n  }\n\n  const hasLink = (imageHref ?? '') !== '';\n\n  return (\n    <form\n      ref={formRef}\n      data-re-img-bm-form=\"\"\n      className={className}\n      onMouseDown={(e) => e.stopPropagation()}\n      onClick={(e) => e.stopPropagation()}\n      onKeyDown={(e) => e.stopPropagation()}\n      onSubmit={handleSubmit}\n    >\n      <input\n        ref={inputRef}\n        data-re-img-bm-input=\"\"\n        value={inputValue}\n        onFocus={(e) => e.stopPropagation()}\n        onChange={(e) => setInputValue(e.target.value)}\n        placeholder=\"Paste a link\"\n        type=\"text\"\n      />\n\n      {hasLink ? (\n        <button\n          type=\"button\"\n          aria-label=\"Remove link\"\n          data-re-img-bm-unlink=\"\"\n          onClick={handleUnlink}\n        >\n          <UnlinkIcon />\n        </button>\n      ) : (\n        <button\n          type=\"submit\"\n          aria-label=\"Apply link\"\n          data-re-img-bm-apply=\"\"\n          onMouseDown={(e) => e.stopPropagation()}\n        >\n          <CheckIcon />\n        </button>\n      )}\n    </form>\n  );\n}\n","import type * as React from 'react';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuImageToolbarProps\n  extends React.ComponentProps<'div'> {}\n\nexport function BubbleMenuImageToolbar({\n  children,\n  ...rest\n}: BubbleMenuImageToolbarProps) {\n  const { isEditing } = useBubbleMenuContext();\n\n  if (isEditing) {\n    return null;\n  }\n\n  return (\n    <div data-re-img-bm-toolbar=\"\" {...rest}>\n      {children}\n    </div>\n  );\n}\n","import type * as React from 'react';\nimport { UnlinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport { focusEditor } from './utils';\n\nexport interface BubbleMenuImageUnlinkProps\n  extends Omit<React.ComponentProps<'button'>, 'type'> {\n  onLinkRemove?: () => void;\n}\n\nexport function BubbleMenuImageUnlink({\n  className,\n  children,\n  onClick,\n  onMouseDown,\n  onLinkRemove,\n  ...rest\n}: BubbleMenuImageUnlinkProps) {\n  const { editor } = useBubbleMenuContext();\n\n  return (\n    <button\n      {...rest}\n      type=\"button\"\n      aria-label=\"Remove link\"\n      data-re-img-bm-item=\"\"\n      data-item=\"unlink\"\n      className={className}\n      onMouseDown={(e) => {\n        e.preventDefault();\n        onMouseDown?.(e);\n      }}\n      onClick={(e) => {\n        onClick?.(e);\n        editor.chain().focus().updateAttributes('image', { href: null }).run();\n        focusEditor(editor);\n        onLinkRemove?.();\n      }}\n    >\n      {children ?? <UnlinkIcon />}\n    </button>\n  );\n}\n","import { PluginKey } from '@tiptap/pm/state';\nimport { useEditorState } from '@tiptap/react';\nimport type * as React from 'react';\nimport { useBubbleMenuContext } from './context';\nimport { BubbleMenuImageEditLink } from './image-edit-link';\nimport { BubbleMenuImageForm } from './image-form';\nimport { BubbleMenuImageToolbar } from './image-toolbar';\nimport { BubbleMenuImageUnlink } from './image-unlink';\nimport { BubbleMenuRoot } from './root';\nimport { bubbleMenuTriggers } from './triggers';\n\nconst imagePluginKey = new PluginKey('imageBubbleMenu');\n\ntype ExcludableItem = 'edit-link' | 'unlink';\n\nexport interface BubbleMenuImageDefaultProps\n  extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n  excludeItems?: ExcludableItem[];\n  placement?: 'top' | 'bottom';\n  offset?: number;\n  onHide?: () => void;\n  validateUrl?: (value: string) => string | null;\n  onLinkApply?: (href: string) => void;\n  onLinkRemove?: () => void;\n}\n\nfunction BubbleMenuImageDefaultInner({\n  excludeItems,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n}: Pick<\n  BubbleMenuImageDefaultProps,\n  'excludeItems' | 'validateUrl' | 'onLinkApply' | 'onLinkRemove'\n> & { excludeItems: ExcludableItem[] }) {\n  const { editor } = useBubbleMenuContext();\n  const imageHref = useEditorState({\n    editor,\n    selector: ({ editor: e }) =>\n      (e?.getAttributes('image').href as string | null) ?? '',\n  });\n\n  const has = (item: ExcludableItem) => !excludeItems.includes(item);\n  const hasLink = (imageHref ?? '') !== '';\n  const showEditLink = has('edit-link');\n  const showUnlink = has('unlink') && hasLink;\n  const hasToolbarItems = showEditLink || showUnlink;\n\n  return (\n    <>\n      {hasToolbarItems && (\n        <BubbleMenuImageToolbar>\n          {showEditLink && <BubbleMenuImageEditLink />}\n          {showUnlink && <BubbleMenuImageUnlink onLinkRemove={onLinkRemove} />}\n        </BubbleMenuImageToolbar>\n      )}\n      {showEditLink && (\n        <BubbleMenuImageForm\n          validateUrl={validateUrl}\n          onLinkApply={onLinkApply}\n          onLinkRemove={onLinkRemove}\n        />\n      )}\n    </>\n  );\n}\n\nexport function BubbleMenuImageDefault({\n  excludeItems = [],\n  placement = 'top',\n  offset,\n  onHide,\n  className,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n  ...rest\n}: BubbleMenuImageDefaultProps) {\n  return (\n    <BubbleMenuRoot\n      trigger={bubbleMenuTriggers.node('image')}\n      pluginKey={imagePluginKey}\n      placement={placement}\n      offset={offset}\n      onHide={onHide}\n      className={className}\n      {...rest}\n    >\n      <BubbleMenuImageDefaultInner\n        excludeItems={excludeItems}\n        validateUrl={validateUrl}\n        onLinkApply={onLinkApply}\n        onLinkRemove={onLinkRemove}\n      />\n    </BubbleMenuRoot>\n  );\n}\n","import type * as React from 'react';\nimport { PencilIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuLinkEditLinkProps\n  extends Omit<React.ComponentProps<'button'>, 'type'> {}\n\nexport function BubbleMenuLinkEditLink({\n  className,\n  children,\n  onClick,\n  onMouseDown,\n  ...rest\n}: BubbleMenuLinkEditLinkProps) {\n  const { setIsEditing } = useBubbleMenuContext();\n\n  return (\n    <button\n      type=\"button\"\n      aria-label=\"Edit link\"\n      data-re-link-bm-item=\"\"\n      data-item=\"edit-link\"\n      className={className}\n      onMouseDown={(e) => {\n        e.preventDefault();\n        onMouseDown?.(e);\n      }}\n      onClick={(e) => {\n        onClick?.(e);\n        setIsEditing(true);\n      }}\n      {...rest}\n    >\n      {children ?? <PencilIcon />}\n    </button>\n  );\n}\n","import { useEditorState } from '@tiptap/react';\nimport * as React from 'react';\nimport { CheckIcon, UnlinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\nimport { focusEditor, getUrlFromString, setLinkHref } from './utils';\n\nexport interface BubbleMenuLinkFormProps {\n  className?: string;\n  validateUrl?: (value: string) => string | null;\n  onLinkApply?: (href: string) => void;\n  onLinkRemove?: () => void;\n  children?: React.ReactNode;\n}\n\nexport function BubbleMenuLinkForm({\n  className,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n  children,\n}: BubbleMenuLinkFormProps) {\n  const { editor, isEditing, setIsEditing } = useBubbleMenuContext();\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const formRef = React.useRef<HTMLFormElement>(null);\n\n  const linkHref = useEditorState({\n    editor,\n    selector: ({ editor: e }) =>\n      (e?.getAttributes('link').href as string) ?? '',\n  });\n\n  const displayHref = (linkHref ?? '') === '#' ? '' : (linkHref ?? '');\n  const [inputValue, setInputValue] = React.useState(displayHref);\n\n  React.useEffect(() => {\n    if (!isEditing) {\n      return;\n    }\n    setInputValue(displayHref);\n    const timeoutId = setTimeout(() => {\n      inputRef.current?.focus();\n    }, 0);\n    return () => clearTimeout(timeoutId);\n  }, [isEditing, displayHref]);\n\n  React.useEffect(() => {\n    if (!isEditing) {\n      return;\n    }\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setIsEditing(false);\n      }\n    };\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (formRef.current && !formRef.current.contains(event.target as Node)) {\n        const form = formRef.current;\n        const submitEvent = new Event('submit', {\n          bubbles: true,\n          cancelable: true,\n        });\n        form.dispatchEvent(submitEvent);\n        setIsEditing(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    window.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [isEditing, setIsEditing]);\n\n  if (!isEditing) {\n    return null;\n  }\n\n  function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n    e.preventDefault();\n\n    const value = inputValue.trim();\n\n    if (value === '') {\n      setLinkHref(editor, '');\n      setIsEditing(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    const validate = validateUrl ?? getUrlFromString;\n    const finalValue = validate(value);\n\n    if (!finalValue) {\n      setLinkHref(editor, '');\n      setIsEditing(false);\n      focusEditor(editor);\n      onLinkRemove?.();\n      return;\n    }\n\n    setLinkHref(editor, finalValue);\n    setIsEditing(false);\n    focusEditor(editor);\n    onLinkApply?.(finalValue);\n  }\n\n  function handleUnlink(e: React.MouseEvent) {\n    e.stopPropagation();\n    setLinkHref(editor, '');\n    setIsEditing(false);\n    focusEditor(editor);\n    onLinkRemove?.();\n  }\n\n  return (\n    <form\n      ref={formRef}\n      data-re-link-bm-form=\"\"\n      className={className}\n      onMouseDown={(e) => e.stopPropagation()}\n      onClick={(e) => e.stopPropagation()}\n      onKeyDown={(e) => e.stopPropagation()}\n      onSubmit={handleSubmit}\n    >\n      <input\n        ref={inputRef}\n        data-re-link-bm-input=\"\"\n        value={inputValue}\n        onFocus={(e) => e.stopPropagation()}\n        onChange={(e) => setInputValue(e.target.value)}\n        placeholder=\"Paste a link\"\n        type=\"text\"\n      />\n\n      {children}\n\n      {displayHref ? (\n        <button\n          type=\"button\"\n          aria-label=\"Remove link\"\n          data-re-link-bm-unlink=\"\"\n          onClick={handleUnlink}\n        >\n          <UnlinkIcon />\n        </button>\n      ) : (\n        <button\n          type=\"submit\"\n          aria-label=\"Apply link\"\n          data-re-link-bm-apply=\"\"\n          onMouseDown={(e) => e.stopPropagation()}\n        >\n          <CheckIcon />\n        </button>\n      )}\n    </form>\n  );\n}\n","import { useEditorState } from '@tiptap/react';\nimport type * as React from 'react';\nimport { ExternalLinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuLinkOpenLinkProps\n  extends Omit<React.ComponentProps<'a'>, 'href' | 'target' | 'rel'> {}\n\nexport function BubbleMenuLinkOpenLink({\n  className,\n  children,\n  ...rest\n}: BubbleMenuLinkOpenLinkProps) {\n  const { editor } = useBubbleMenuContext();\n\n  const linkHref = useEditorState({\n    editor,\n    selector: ({ editor: e }) =>\n      (e?.getAttributes('link').href as string) ?? '',\n  });\n\n  return (\n    <a\n      {...rest}\n      href={linkHref ?? ''}\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      aria-label=\"Open link\"\n      data-re-link-bm-item=\"\"\n      data-item=\"open-link\"\n      className={className}\n    >\n      {children ?? <ExternalLinkIcon />}\n    </a>\n  );\n}\n","import type * as React from 'react';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuLinkToolbarProps\n  extends React.ComponentProps<'div'> {}\n\nexport function BubbleMenuLinkToolbar({\n  children,\n  ...rest\n}: BubbleMenuLinkToolbarProps) {\n  const { isEditing } = useBubbleMenuContext();\n\n  if (isEditing) {\n    return null;\n  }\n\n  return (\n    <div data-re-link-bm-toolbar=\"\" {...rest}>\n      {children}\n    </div>\n  );\n}\n","import type * as React from 'react';\nimport { UnlinkIcon } from '../icons';\nimport { useBubbleMenuContext } from './context';\n\nexport interface BubbleMenuLinkUnlinkProps\n  extends Omit<React.ComponentProps<'button'>, 'type'> {}\n\nexport function BubbleMenuLinkUnlink({\n  className,\n  children,\n  onClick,\n  onMouseDown,\n  ...rest\n}: BubbleMenuLinkUnlinkProps) {\n  const { editor } = useBubbleMenuContext();\n\n  return (\n    <button\n      type=\"button\"\n      aria-label=\"Remove link\"\n      data-re-link-bm-item=\"\"\n      data-item=\"unlink\"\n      className={className}\n      onMouseDown={(e) => {\n        e.preventDefault();\n        onMouseDown?.(e);\n      }}\n      onClick={(e) => {\n        onClick?.(e);\n        editor.chain().focus().unsetLink().run();\n      }}\n      {...rest}\n    >\n      {children ?? <UnlinkIcon />}\n    </button>\n  );\n}\n","import { PluginKey } from '@tiptap/pm/state';\nimport type * as React from 'react';\nimport { BubbleMenuLinkEditLink } from './link-edit-link';\nimport { BubbleMenuLinkForm } from './link-form';\nimport { BubbleMenuLinkOpenLink } from './link-open-link';\nimport { BubbleMenuLinkToolbar } from './link-toolbar';\nimport { BubbleMenuLinkUnlink } from './link-unlink';\nimport { BubbleMenuRoot } from './root';\nimport { bubbleMenuTriggers } from './triggers';\n\nconst linkPluginKey = new PluginKey('linkBubbleMenu');\n\ntype ExcludableItem = 'edit-link' | 'open-link' | 'unlink';\n\nexport interface BubbleMenuLinkDefaultProps\n  extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n  excludeItems?: ExcludableItem[];\n  placement?: 'top' | 'bottom';\n  offset?: number;\n  onHide?: () => void;\n  validateUrl?: (value: string) => string | null;\n  onLinkApply?: (href: string) => void;\n  onLinkRemove?: () => void;\n}\n\nexport function BubbleMenuLinkDefault({\n  excludeItems = [],\n  placement = 'top',\n  offset,\n  onHide,\n  className,\n  validateUrl,\n  onLinkApply,\n  onLinkRemove,\n  ...rest\n}: BubbleMenuLinkDefaultProps) {\n  const has = (item: ExcludableItem) => !excludeItems.includes(item);\n\n  const hasToolbarItems = has('edit-link') || has('open-link') || has('unlink');\n\n  return (\n    <BubbleMenuRoot\n      trigger={bubbleMenuTriggers.nodeWithoutSelection('link')}\n      pluginKey={linkPluginKey}\n      placement={placement}\n      offset={offset}\n      onHide={onHide}\n      className={className}\n      {...rest}\n    >\n      {hasToolbarItems && (\n        <BubbleMenuLinkToolbar>\n          {has('edit-link') && <BubbleMenuLinkEditLink />}\n          {has('open-link') && <BubbleMenuLinkOpenLink />}\n          {has('unlink') && <BubbleMenuLinkUnlink />}\n        </BubbleMenuLinkToolbar>\n      )}\n      <BubbleMenuLinkForm\n        validateUrl={validateUrl}\n        onLinkApply={onLinkApply}\n        onLinkRemove={onLinkRemove}\n      />\n    </BubbleMenuRoot>\n  );\n}\n","export interface BubbleMenuSeparatorProps {\n  className?: string;\n}\n\nexport function BubbleMenuSeparator({ className }: BubbleMenuSeparatorProps) {\n  return <hr className={className} data-re-bubble-menu-separator=\"\" />;\n}\n","import { BubbleMenuAlignCenter } from './align-center';\nimport { BubbleMenuAlignLeft } from './align-left';\nimport { BubbleMenuAlignRight } from './align-right';\nimport { BubbleMenuBold } from './bold';\nimport { BubbleMenuButtonDefault } from './button-default';\nimport { BubbleMenuButtonEditLink } from './button-edit-link';\nimport { BubbleMenuButtonForm } from './button-form';\nimport { BubbleMenuButtonToolbar } from './button-toolbar';\nimport { BubbleMenuButtonUnlink } from './button-unlink';\nimport { BubbleMenuCode } from './code';\nimport { BubbleMenuItemGroup } from './group';\nimport { BubbleMenuImageDefault } from './image-default';\nimport { BubbleMenuImageEditLink } from './image-edit-link';\nimport { BubbleMenuImageForm } from './image-form';\nimport { BubbleMenuImageToolbar } from './image-toolbar';\nimport { BubbleMenuImageUnlink } from './image-unlink';\nimport { BubbleMenuItalic } from './italic';\nimport { BubbleMenuItem } from './item';\nimport { BubbleMenuLinkDefault } from './link-default';\nimport { BubbleMenuLinkEditLink } from './link-edit-link';\nimport { BubbleMenuLinkForm } from './link-form';\nimport { BubbleMenuLinkOpenLink } from './link-open-link';\nimport { BubbleMenuLinkSelector } from './link-selector';\nimport { BubbleMenuLinkToolbar } from './link-toolbar';\nimport { BubbleMenuLinkUnlink } from './link-unlink';\nimport {\n  BubbleMenuNodeSelector,\n  NodeSelectorContent,\n  NodeSelectorRoot,\n  NodeSelectorTrigger,\n} from './node-selector';\nimport { BubbleMenuRoot } from './root';\nimport { BubbleMenuSeparator } from './separator';\nimport { BubbleMenuStrike } from './strike';\nimport { BubbleMenuUnderline } from './underline';\nimport { BubbleMenuUppercase } from './uppercase';\n\n// Named exports\nexport { BubbleMenuAlignCenter } from './align-center';\nexport { BubbleMenuAlignLeft } from './align-left';\nexport { BubbleMenuAlignRight } from './align-right';\nexport { BubbleMenuBold } from './bold';\nexport type { BubbleMenuButtonDefaultProps } from './button-default';\nexport { BubbleMenuButtonDefault } from './button-default';\nexport type { BubbleMenuButtonEditLinkProps } from './button-edit-link';\nexport { BubbleMenuButtonEditLink } from './button-edit-link';\nexport type { BubbleMenuButtonFormProps } from './button-form';\nexport { BubbleMenuButtonForm } from './button-form';\nexport type { BubbleMenuButtonToolbarProps } from './button-toolbar';\nexport { BubbleMenuButtonToolbar } from './button-toolbar';\nexport type { BubbleMenuButtonUnlinkProps } from './button-unlink';\nexport { BubbleMenuButtonUnlink } from './button-unlink';\nexport { BubbleMenuCode } from './code';\nexport type { BubbleMenuContextValue } from './context';\nexport { useBubbleMenuContext } from './context';\nexport type { PreWiredItemProps } from './create-mark-bubble-item';\nexport type { BubbleMenuItemGroupProps } from './group';\nexport { BubbleMenuItemGroup } from './group';\nexport type { BubbleMenuImageDefaultProps } from './image-default';\nexport { BubbleMenuImageDefault } from './image-default';\nexport type { BubbleMenuImageEditLinkProps } from './image-edit-link';\nexport { BubbleMenuImageEditLink } from './image-edit-link';\nexport type { BubbleMenuImageFormProps } from './image-form';\nexport { BubbleMenuImageForm } from './image-form';\nexport type { BubbleMenuImageToolbarProps } from './image-toolbar';\nexport { BubbleMenuImageToolbar } from './image-toolbar';\nexport type { BubbleMenuImageUnlinkProps } from './image-unlink';\nexport { BubbleMenuImageUnlink } from './image-unlink';\nexport { BubbleMenuItalic } from './italic';\nexport type { BubbleMenuItemProps } from './item';\nexport { BubbleMenuItem } from './item';\nexport type { BubbleMenuLinkDefaultProps } from './link-default';\nexport { BubbleMenuLinkDefault } from './link-default';\nexport type { BubbleMenuLinkEditLinkProps } from './link-edit-link';\nexport { BubbleMenuLinkEditLink } from './link-edit-link';\nexport type { BubbleMenuLinkFormProps } from './link-form';\nexport { BubbleMenuLinkForm } from './link-form';\nexport type { BubbleMenuLinkOpenLinkProps } from './link-open-link';\nexport { BubbleMenuLinkOpenLink } from './link-open-link';\nexport type { BubbleMenuLinkSelectorProps } from './link-selector';\nexport { BubbleMenuLinkSelector } from './link-selector';\nexport type { BubbleMenuLinkToolbarProps } from './link-toolbar';\nexport { BubbleMenuLinkToolbar } from './link-toolbar';\nexport type { BubbleMenuLinkUnlinkProps } from './link-unlink';\nexport { BubbleMenuLinkUnlink } from './link-unlink';\nexport type {\n  BubbleMenuNodeSelectorProps,\n  NodeSelectorContentProps,\n  NodeSelectorItem,\n  NodeSelectorRootProps,\n  NodeSelectorTriggerProps,\n  NodeType,\n} from './node-selector';\nexport {\n  BubbleMenuNodeSelector,\n  NodeSelectorContent,\n  NodeSelectorRoot,\n  NodeSelectorTrigger,\n} from './node-selector';\nexport type { BubbleMenuRootProps } from './root';\nexport { BubbleMenuRoot } from './root';\nexport type { BubbleMenuSeparatorProps } from './separator';\nexport { BubbleMenuSeparator } from './separator';\nexport { BubbleMenuStrike } from './strike';\nexport type { TriggerFn, TriggerParams } from './triggers';\nexport { bubbleMenuTriggers } from './triggers';\nexport { BubbleMenuUnderline } from './underline';\nexport { BubbleMenuUppercase } from './uppercase';\n\nexport const BubbleMenu = Object.assign(BubbleMenuRoot, {\n  Root: BubbleMenuRoot,\n  ItemGroup: BubbleMenuItemGroup,\n  Separator: BubbleMenuSeparator,\n  Item: BubbleMenuItem,\n  Bold: BubbleMenuBold,\n  Italic: BubbleMenuItalic,\n  Underline: BubbleMenuUnderline,\n  Strike: BubbleMenuStrike,\n  Code: BubbleMenuCode,\n  Uppercase: BubbleMenuUppercase,\n  AlignLeft: BubbleMenuAlignLeft,\n  AlignCenter: BubbleMenuAlignCenter,\n  AlignRight: BubbleMenuAlignRight,\n  NodeSelector: Object.assign(BubbleMenuNodeSelector, {\n    Root: NodeSelectorRoot,\n    Trigger: NodeSelectorTrigger,\n    Content: NodeSelectorContent,\n  }),\n  LinkSelector: BubbleMenuLinkSelector,\n  ButtonToolbar: BubbleMenuButtonToolbar,\n  ButtonEditLink: BubbleMenuButtonEditLink,\n  ButtonUnlink: BubbleMenuButtonUnlink,\n  ButtonForm: BubbleMenuButtonForm,\n  ButtonDefault: BubbleMenuButtonDefault,\n  LinkToolbar: BubbleMenuLinkToolbar,\n  LinkEditLink: BubbleMenuLinkEditLink,\n  LinkUnlink: BubbleMenuLinkUnlink,\n  LinkOpenLink: BubbleMenuLinkOpenLink,\n  LinkForm: BubbleMenuLinkForm,\n  LinkDefault: BubbleMenuLinkDefault,\n  ImageToolbar: BubbleMenuImageToolbar,\n  ImageEditLink: BubbleMenuImageEditLink,\n  ImageUnlink: BubbleMenuImageUnlink,\n  ImageForm: BubbleMenuImageForm,\n  ImageDefault: BubbleMenuImageDefault,\n} as const);\n","import type { Editor } from '@tiptap/core';\nimport { getColumnsDepth, MAX_COLUMNS_DEPTH } from '../../extensions/columns';\n\nexport function isInsideNode(editor: Editor, type: string): boolean {\n  const { $from } = editor.state.selection;\n  for (let d = $from.depth; d > 0; d--) {\n    if ($from.node(d).type.name === type) return true;\n  }\n  return false;\n}\n\nexport function isAtMaxColumnsDepth(editor: Editor): boolean {\n  const { from } = editor.state.selection;\n  return getColumnsDepth(editor.state.doc, from) >= MAX_COLUMNS_DEPTH;\n}\n\nexport function updateScrollView(\n  container: HTMLElement,\n  item: HTMLElement,\n): void {\n  const containerRect = container.getBoundingClientRect();\n  const itemRect = item.getBoundingClientRect();\n\n  if (itemRect.top < containerRect.top) {\n    container.scrollTop -= containerRect.top - itemRect.top;\n  } else if (itemRect.bottom > containerRect.bottom) {\n    container.scrollTop += itemRect.bottom - containerRect.bottom;\n  }\n}\n","import { useLayoutEffect, useRef } from 'react';\nimport type { SlashCommandItem, SlashCommandRenderProps } from './types';\nimport { updateScrollView } from './utils';\n\nconst CATEGORY_ORDER = ['Text', 'Media', 'Layout', 'Utility'];\n\nfunction groupByCategory(\n  items: SlashCommandItem[],\n): { category: string; items: SlashCommandItem[] }[] {\n  const seen = new Map<string, SlashCommandItem[]>();\n\n  for (const item of items) {\n    const existing = seen.get(item.category);\n    if (existing) {\n      existing.push(item);\n    } else {\n      seen.set(item.category, [item]);\n    }\n  }\n\n  const ordered: { category: string; items: SlashCommandItem[] }[] = [];\n  for (const cat of CATEGORY_ORDER) {\n    const group = seen.get(cat);\n    if (group) {\n      ordered.push({ category: cat, items: group });\n      seen.delete(cat);\n    }\n  }\n  for (const [category, group] of seen) {\n    ordered.push({ category, items: group });\n  }\n\n  return ordered;\n}\n\ninterface CommandItemProps {\n  item: SlashCommandItem;\n  selected: boolean;\n  onSelect: () => void;\n}\n\nfunction CommandItem({ item, selected, onSelect }: CommandItemProps) {\n  return (\n    <button\n      data-re-slash-command-item=\"\"\n      data-selected={selected || undefined}\n      onClick={onSelect}\n      type=\"button\"\n    >\n      {item.icon}\n      <span>{item.title}</span>\n    </button>\n  );\n}\n\nexport function CommandList({\n  items,\n  query,\n  selectedIndex,\n  onSelect,\n}: SlashCommandRenderProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  useLayoutEffect(() => {\n    const container = containerRef.current;\n    if (!container) return;\n    const selected = container.querySelector<HTMLElement>('[data-selected]');\n    if (selected) {\n      updateScrollView(container, selected);\n    }\n  }, [selectedIndex]);\n\n  if (items.length === 0) {\n    return (\n      <div data-re-slash-command=\"\">\n        <div data-re-slash-command-empty=\"\">No results</div>\n      </div>\n    );\n  }\n\n  const isFiltering = query.trim().length > 0;\n\n  if (isFiltering) {\n    return (\n      <div data-re-slash-command=\"\">\n        <div data-re-slash-command-scroll=\"\" ref={containerRef}>\n          {items.map((item, index) => (\n            <CommandItem\n              item={item}\n              key={item.title}\n              onSelect={() => onSelect(index)}\n              selected={index === selectedIndex}\n            />\n          ))}\n        </div>\n      </div>\n    );\n  }\n\n  const groups = groupByCategory(items);\n  let flatIndex = 0;\n\n  return (\n    <div data-re-slash-command=\"\">\n      <div data-re-slash-command-scroll=\"\" ref={containerRef}>\n        {groups.map((group) => (\n          <div key={group.category}>\n            <div data-re-slash-command-category=\"\">{group.category}</div>\n            {group.items.map((item) => {\n              const currentIndex = flatIndex++;\n              return (\n                <CommandItem\n                  item={item}\n                  key={item.title}\n                  onSelect={() => onSelect(currentIndex)}\n                  selected={currentIndex === selectedIndex}\n                />\n              );\n            })}\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n}\n","import {\n  Columns2Icon,\n  Columns3Icon,\n  Columns4Icon,\n  Heading1Icon,\n  Heading2Icon,\n  Heading3Icon,\n  ListIcon,\n  ListOrderedIcon,\n  MousePointerIcon,\n  Rows2Icon,\n  SplitSquareVerticalIcon,\n  SquareCodeIcon,\n  TextIcon,\n  TextQuoteIcon,\n} from '../icons';\nimport type { SlashCommandItem } from './types';\n\nexport const TEXT: SlashCommandItem = {\n  title: 'Text',\n  description: 'Plain text block',\n  icon: <TextIcon size={20} />,\n  category: 'Text',\n  searchTerms: ['p', 'paragraph'],\n  command: ({ editor, range }) => {\n    editor\n      .chain()\n      .focus()\n      .deleteRange(range)\n      .toggleNode('paragraph', 'paragraph')\n      .run();\n  },\n};\n\nexport const H1: SlashCommandItem = {\n  title: 'Title',\n  description: 'Large heading',\n  icon: <Heading1Icon size={20} />,\n  category: 'Text',\n  searchTerms: ['title', 'big', 'large', 'h1'],\n  command: ({ editor, range }) => {\n    editor\n      .chain()\n      .focus()\n      .deleteRange(range)\n      .setNode('heading', { level: 1 })\n      .run();\n  },\n};\n\nexport const H2: SlashCommandItem = {\n  title: 'Subtitle',\n  description: 'Medium heading',\n  icon: <Heading2Icon size={20} />,\n  category: 'Text',\n  searchTerms: ['subtitle', 'medium', 'h2'],\n  command: ({ editor, range }) => {\n    editor\n      .chain()\n      .focus()\n      .deleteRange(range)\n      .setNode('heading', { level: 2 })\n      .run();\n  },\n};\n\nexport const H3: SlashCommandItem = {\n  title: 'Heading',\n  description: 'Small heading',\n  icon: <Heading3Icon size={20} />,\n  category: 'Text',\n  searchTerms: ['subtitle', 'small', 'h3'],\n  command: ({ editor, range }) => {\n    editor\n      .chain()\n      .focus()\n      .deleteRange(range)\n      .setNode('heading', { level: 3 })\n      .run();\n  },\n};\n\nexport const BULLET_LIST: SlashCommandItem = {\n  title: 'Bullet list',\n  description: 'Unordered list',\n  icon: <ListIcon size={20} />,\n  category: 'Text',\n  searchTerms: ['unordered', 'point'],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).toggleBulletList().run();\n  },\n};\n\nexport const NUMBERED_LIST: SlashCommandItem = {\n  title: 'Numbered list',\n  description: 'Ordered list',\n  icon: <ListOrderedIcon size={20} />,\n  category: 'Text',\n  searchTerms: ['ordered'],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).toggleOrderedList().run();\n  },\n};\n\nexport const QUOTE: SlashCommandItem = {\n  title: 'Quote',\n  description: 'Block quote',\n  icon: <TextQuoteIcon size={20} />,\n  category: 'Text',\n  searchTerms: ['blockquote'],\n  command: ({ editor, range }) => {\n    editor\n      .chain()\n      .focus()\n      .deleteRange(range)\n      .toggleNode('paragraph', 'paragraph')\n      .toggleBlockquote()\n      .run();\n  },\n};\n\nexport const CODE: SlashCommandItem = {\n  title: 'Code block',\n  description: 'Code snippet',\n  icon: <SquareCodeIcon size={20} />,\n  category: 'Text',\n  searchTerms: ['codeblock'],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).toggleCodeBlock().run();\n  },\n};\n\nexport const BUTTON: SlashCommandItem = {\n  title: 'Button',\n  description: 'Clickable button',\n  icon: <MousePointerIcon size={20} />,\n  category: 'Layout',\n  searchTerms: ['button'],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).setButton().run();\n  },\n};\n\nexport const DIVIDER: SlashCommandItem = {\n  title: 'Divider',\n  description: 'Horizontal separator',\n  icon: <SplitSquareVerticalIcon size={20} />,\n  category: 'Layout',\n  searchTerms: ['hr', 'divider', 'separator'],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).setHorizontalRule().run();\n  },\n};\n\nexport const SECTION: SlashCommandItem = {\n  title: 'Section',\n  description: 'Content section',\n  icon: <Rows2Icon size={20} />,\n  category: 'Layout',\n  searchTerms: ['section', 'row', 'container'],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).insertSection().run();\n  },\n};\n\nexport const TWO_COLUMNS: SlashCommandItem = {\n  title: '2 columns',\n  description: 'Two column layout',\n  icon: <Columns2Icon size={20} />,\n  category: 'Layout',\n  searchTerms: [\n    'columns',\n    'column',\n    'layout',\n    'grid',\n    'split',\n    'side-by-side',\n    'multi-column',\n    'row',\n    'two',\n    '2',\n  ],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).insertColumns(2).run();\n  },\n};\n\nexport const THREE_COLUMNS: SlashCommandItem = {\n  title: '3 columns',\n  description: 'Three column layout',\n  icon: <Columns3Icon size={20} />,\n  category: 'Layout',\n  searchTerms: [\n    'columns',\n    'column',\n    'layout',\n    'grid',\n    'split',\n    'multi-column',\n    'row',\n    'three',\n    '3',\n  ],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).insertColumns(3).run();\n  },\n};\n\nexport const FOUR_COLUMNS: SlashCommandItem = {\n  title: '4 columns',\n  description: 'Four column layout',\n  icon: <Columns4Icon size={20} />,\n  category: 'Layout',\n  searchTerms: [\n    'columns',\n    'column',\n    'layout',\n    'grid',\n    'split',\n    'multi-column',\n    'row',\n    'four',\n    '4',\n  ],\n  command: ({ editor, range }) => {\n    editor.chain().focus().deleteRange(range).insertColumns(4).run();\n  },\n};\n\nexport const defaultSlashCommands: SlashCommandItem[] = [\n  TEXT,\n  H1,\n  H2,\n  H3,\n  BULLET_LIST,\n  NUMBERED_LIST,\n  QUOTE,\n  CODE,\n  BUTTON,\n  DIVIDER,\n  SECTION,\n  TWO_COLUMNS,\n  THREE_COLUMNS,\n  FOUR_COLUMNS,\n];\n","import type { SearchableItem } from './types';\n\nexport function scoreItem(item: SearchableItem, query: string): number {\n  if (!query) return 100;\n\n  const q = query.toLowerCase();\n  const title = item.title.toLowerCase();\n  const description = item.description.toLowerCase();\n  const terms = item.searchTerms?.map((t) => t.toLowerCase()) ?? [];\n\n  if (title === q) return 100;\n  if (title.startsWith(q)) return 90;\n\n  const titleWords = title.split(/\\s+/);\n  if (titleWords.some((w) => w.startsWith(q))) return 80;\n\n  if (terms.some((t) => t === q)) return 70;\n  if (terms.some((t) => t.startsWith(q))) return 60;\n\n  if (title.includes(q)) return 40;\n  if (terms.some((t) => t.includes(q))) return 30;\n  if (description.includes(q)) return 20;\n\n  return 0;\n}\n\nexport function filterAndRankItems<T extends SearchableItem>(\n  items: T[],\n  query: string,\n): T[] {\n  const trimmed = query.trim();\n  if (!trimmed) return items;\n\n  const scored = items\n    .map((item) => ({ item, score: scoreItem(item, trimmed) }))\n    .filter(({ score }) => score > 0);\n\n  scored.sort((a, b) => b.score - a.score);\n\n  return scored.map(({ item }) => item);\n}\n","import {\n  autoUpdate,\n  flip,\n  offset,\n  shift,\n  useFloating,\n} from '@floating-ui/react-dom';\nimport type { Editor } from '@tiptap/core';\nimport { PluginKey } from '@tiptap/pm/state';\nimport { useCurrentEditor } from '@tiptap/react';\nimport Suggestion from '@tiptap/suggestion';\nimport {\n  type ReactNode,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { EditorFocusScope } from '../editor-focus-scope';\nimport { CommandList } from './command-list';\nimport { defaultSlashCommands } from './commands';\nimport { filterAndRankItems } from './search';\nimport type { SlashCommandItem, SlashCommandRootProps } from './types';\nimport { isAtMaxColumnsDepth } from './utils';\n\nconst pluginKey = new PluginKey('slash-command');\n\ninterface SuggestionState {\n  active: boolean;\n  query: string;\n  items: SlashCommandItem[];\n  clientRect: (() => DOMRect | null) | null;\n}\n\nconst INITIAL_STATE: SuggestionState = {\n  active: false,\n  query: '',\n  items: [],\n  clientRect: null,\n};\n\nfunction defaultFilterItems(\n  items: SlashCommandItem[],\n  query: string,\n  editor: Editor,\n): SlashCommandItem[] {\n  const filtered = isAtMaxColumnsDepth(editor)\n    ? items.filter(\n        (item) => item.category !== 'Layout' || !item.title.includes('column'),\n      )\n    : items;\n\n  return filterAndRankItems(filtered, query);\n}\n\nexport function SlashCommandRoot({\n  items: itemsProp,\n  filterItems: filterItemsProp,\n  char = '/',\n  allow: allowProp,\n  children,\n}: SlashCommandRootProps) {\n  const { editor } = useCurrentEditor();\n  const [state, setState] = useState<SuggestionState>(INITIAL_STATE);\n  const [selectedIndex, setSelectedIndex] = useState(0);\n\n  const itemsRef = useRef(itemsProp ?? defaultSlashCommands);\n  const filterRef = useRef(filterItemsProp ?? defaultFilterItems);\n  const allowRef = useRef(\n    allowProp ??\n      (({ editor: e }: { editor: Editor }) => !e.isActive('codeBlock')),\n  );\n\n  itemsRef.current = itemsProp ?? defaultSlashCommands;\n  filterRef.current = filterItemsProp ?? defaultFilterItems;\n  allowRef.current =\n    allowProp ??\n    (({ editor: e }: { editor: Editor }) => !e.isActive('codeBlock'));\n\n  const commandRef = useRef<((item: SlashCommandItem) => void) | null>(null);\n  const suggestionItemsRef = useRef<SlashCommandItem[]>([]);\n  const selectedIndexRef = useRef(0);\n\n  suggestionItemsRef.current = state.items;\n  selectedIndexRef.current = selectedIndex;\n\n  const { refs, floatingStyles } = useFloating({\n    open: state.active,\n    placement: 'bottom-start',\n    middleware: [offset(8), flip(), shift({ padding: 8 })],\n    whileElementsMounted: autoUpdate,\n  });\n\n  useEffect(() => {\n    if (!state.clientRect) return;\n    const clientRect = state.clientRect;\n    refs.setReference({\n      getBoundingClientRect: () => clientRect()!,\n    });\n  }, [state.clientRect, refs]);\n\n  useEffect(() => {\n    setSelectedIndex(0);\n  }, [state.items]);\n\n  const onSelect = useCallback((index: number) => {\n    const item = suggestionItemsRef.current[index];\n    if (item && commandRef.current) {\n      commandRef.current(item);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (!editor) return;\n\n    const plugin = Suggestion<SlashCommandItem, SlashCommandItem>({\n      pluginKey,\n      editor,\n      char,\n      allow: ({ editor: e }) => allowRef.current({ editor: e }),\n      command: ({ editor: e, range, props }) => {\n        props.command({ editor: e, range });\n      },\n      items: ({ query, editor: e }) =>\n        filterRef.current(itemsRef.current, query, e),\n      render: () => ({\n        onStart: (props) => {\n          commandRef.current = props.command;\n          setState({\n            active: true,\n            query: props.query,\n            items: props.items,\n            clientRect: props.clientRect ?? null,\n          });\n        },\n        onUpdate: (props) => {\n          commandRef.current = props.command;\n          setState({\n            active: true,\n            query: props.query,\n            items: props.items,\n            clientRect: props.clientRect ?? null,\n          });\n        },\n        onKeyDown: ({ event }) => {\n          if (event.key === 'Escape') {\n            setState(INITIAL_STATE);\n            return true;\n          }\n\n          const items = suggestionItemsRef.current;\n          if (items.length === 0) return false;\n\n          if (event.key === 'ArrowUp') {\n            setSelectedIndex((i) => (i + items.length - 1) % items.length);\n            return true;\n          }\n          if (event.key === 'ArrowDown') {\n            setSelectedIndex((i) => (i + 1) % items.length);\n            return true;\n          }\n          if (event.key === 'Enter') {\n            const item = items[selectedIndexRef.current];\n            if (item && commandRef.current) {\n              commandRef.current(item);\n            }\n            return true;\n          }\n          return false;\n        },\n        onExit: () => {\n          setState(INITIAL_STATE);\n          requestAnimationFrame(() => {\n            commandRef.current = null;\n          });\n        },\n      }),\n    });\n\n    editor.registerPlugin(plugin, (newPlugin, plugins) => [\n      newPlugin,\n      ...plugins,\n    ]);\n    return () => {\n      editor.unregisterPlugin(pluginKey);\n    };\n  }, [editor, char]);\n\n  if (!editor || !state.active) return null;\n\n  const renderProps = {\n    items: state.items,\n    query: state.query,\n    selectedIndex,\n    onSelect,\n  };\n\n  let content: ReactNode;\n  if (children) {\n    content = children(renderProps);\n  } else {\n    content = <CommandList {...renderProps} />;\n  }\n\n  return createPortal(\n    <EditorFocusScope>\n      <div ref={refs.setFloating} style={floatingStyles}>\n        {content}\n      </div>\n    </EditorFocusScope>,\n    document.body,\n  );\n}\n"],"mappings":"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"}