@react-email/editor 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{root-BpooQKCu.cjs → root-DMPtBdQA.cjs} +11 -3
- package/dist/{root-DTTCkmjD.mjs → root-_Hz1yayd.mjs} +12 -4
- package/dist/root-_Hz1yayd.mjs.map +1 -0
- package/dist/ui/index.cjs +1 -1
- package/dist/ui/index.d.cts.map +1 -1
- package/dist/ui/index.d.mts.map +1 -1
- package/dist/ui/index.mjs +1 -1
- package/package.json +2 -2
- package/dist/root-DTTCkmjD.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"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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"}
|