{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "callout-node",
  "description": "A callout component for highlighting important information with customizable icons and styles.",
  "dependencies": [
    "@platejs/callout"
  ],
  "registryDependencies": [
    "https://platejs.org/r/emoji-toolbar-button.json"
  ],
  "files": [
    {
      "path": "src/registry/ui/callout-node.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\n\nimport { useCalloutEmojiPicker } from '@platejs/callout/react';\nimport { useEmojiDropdownMenuState } from '@platejs/emoji/react';\nimport { PlateElement } from 'platejs/react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\nimport { EmojiPicker, EmojiPopover } from './emoji-toolbar-button';\n\nexport function CalloutElement({\n  attributes,\n  children,\n  className,\n  ...props\n}: React.ComponentProps<typeof PlateElement>) {\n  const { emojiPickerState, isOpen, setIsOpen } = useEmojiDropdownMenuState({\n    closeOnSelect: true,\n  });\n\n  const { emojiToolbarDropdownProps, props: calloutProps } =\n    useCalloutEmojiPicker({\n      isOpen,\n      setIsOpen,\n    });\n\n  return (\n    <PlateElement\n      className={cn('my-1 flex rounded-sm bg-muted p-4 pl-3', className)}\n      style={{\n        backgroundColor: props.element.backgroundColor as any,\n      }}\n      attributes={{\n        ...attributes,\n        'data-plate-open-context-menu': true,\n      }}\n      {...props}\n    >\n      <div className=\"flex w-full gap-2 rounded-md\">\n        <EmojiPopover\n          {...emojiToolbarDropdownProps}\n          control={\n            <Button\n              variant=\"ghost\"\n              className=\"size-6 select-none p-1 text-[18px] hover:bg-muted-foreground/15\"\n              style={{\n                fontFamily:\n                  '\"Apple Color Emoji\", \"Segoe UI Emoji\", NotoColorEmoji, \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", EmojiSymbols',\n              }}\n              contentEditable={false}\n            >\n              {(props.element.icon as any) || '💡'}\n            </Button>\n          }\n        >\n          <EmojiPicker {...emojiPickerState} {...calloutProps} />\n        </EmojiPopover>\n        <div className=\"w-full\">{children}</div>\n      </div>\n    </PlateElement>\n  );\n}\n",
      "type": "registry:ui"
    },
    {
      "path": "src/registry/ui/callout-node-static.tsx",
      "content": "import * as React from 'react';\n\nimport type { SlateElementProps } from 'platejs/static';\n\nimport { SlateElement } from 'platejs/static';\n\nimport { cn } from '@/lib/utils';\n\nexport function CalloutElementStatic({\n  children,\n  className,\n  ...props\n}: SlateElementProps) {\n  return (\n    <SlateElement\n      className={cn('my-1 flex rounded-sm bg-muted p-4 pl-3', className)}\n      style={{\n        backgroundColor: props.element.backgroundColor as any,\n      }}\n      {...props}\n    >\n      <div className=\"flex w-full gap-2 rounded-md\">\n        <div\n          className=\"size-6 select-none text-[18px]\"\n          style={{\n            fontFamily:\n              '\"Apple Color Emoji\", \"Segoe UI Emoji\", NotoColorEmoji, \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", EmojiSymbols',\n          }}\n        >\n          <span data-plate-prevent-deserialization>\n            {(props.element.icon as any) || '💡'}\n          </span>\n        </div>\n        <div className=\"w-full\">{children}</div>\n      </div>\n    </SlateElement>\n  );\n}\n\n/**\n * DOCX-compatible callout component using table layout for side-by-side icon and content.\n */\nexport function CalloutElementDocx({ children, ...props }: SlateElementProps) {\n  const backgroundColor =\n    (props.element.backgroundColor as string) || '#f4f4f5';\n  const icon = (props.element.icon as string) || '💡';\n\n  return (\n    <SlateElement {...props}>\n      <table\n        style={{\n          width: '100%',\n          borderCollapse: 'collapse',\n          border: 'none',\n          backgroundColor,\n          borderRadius: '4px',\n          marginTop: '4pt',\n          marginBottom: '4pt',\n        }}\n      >\n        <tbody>\n          <tr>\n            <td\n              style={{\n                width: '30px',\n                verticalAlign: 'top',\n                padding: '8px 4px 8px 8px',\n                border: 'none',\n                fontSize: '18px',\n                fontFamily:\n                  '\"Apple Color Emoji\", \"Segoe UI Emoji\", NotoColorEmoji, \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", EmojiSymbols',\n              }}\n            >\n              <span data-plate-prevent-deserialization>{icon}</span>\n            </td>\n            <td\n              style={{\n                verticalAlign: 'top',\n                padding: '8px 8px 8px 4px',\n                border: 'none',\n              }}\n            >\n              {children}\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </SlateElement>\n  );\n}\n",
      "type": "registry:ui"
    }
  ],
  "meta": {
    "docs": [
      {
        "route": "/docs/callout"
      },
      {
        "route": "https://pro.platejs.org/docs/components/callout-node"
      }
    ],
    "examples": [
      "callout-demo"
    ]
  },
  "type": "registry:ui"
}