{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "date-node",
  "title": "Date Element",
  "description": "A date field component with calendar picker.",
  "dependencies": [
    "@platejs/date"
  ],
  "registryDependencies": [
    "calendar",
    "https://platejs.org/r/suggestion.json"
  ],
  "files": [
    {
      "path": "src/registry/ui/date-node.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\n\nimport {\n  formatDateValue,\n  getDateDisplayLabel,\n  parseCanonicalDateValue,\n} from '@platejs/date';\nimport type { TDateElement } from 'platejs';\nimport type { PlateElementProps } from 'platejs/react';\n\nimport { PlateElement, useReadOnly } from 'platejs/react';\n\nimport { Calendar } from '@/components/ui/calendar';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/ui/popover';\nimport { cn } from '@/lib/utils';\nimport { inlineSuggestionVariants } from '@/registry/lib/suggestion';\n\nexport function DateElement(props: PlateElementProps<TDateElement>) {\n  const { editor, element } = props;\n  const readOnly = useReadOnly();\n\n  const trigger = (\n    <span\n      className={cn(\n        'w-fit cursor-pointer rounded-sm bg-muted px-1 text-muted-foreground',\n        inlineSuggestionVariants()\n      )}\n      contentEditable={false}\n      draggable\n    >\n      {element.date || element.rawDate ? (\n        getDateDisplayLabel(element)\n      ) : (\n        <span>Pick a date</span>\n      )}\n    </span>\n  );\n\n  return (\n    <PlateElement\n      {...props}\n      className=\"inline-block\"\n      attributes={{\n        ...props.attributes,\n        contentEditable: false,\n      }}\n    >\n      {readOnly ? (\n        trigger\n      ) : (\n        <Popover>\n          <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n          <PopoverContent className=\"w-auto p-0\">\n            <Calendar\n              selected={parseCanonicalDateValue(element.date ?? '')}\n              onSelect={(date) => {\n                if (!date) return;\n\n                editor.tf.setNodes(\n                  { date: formatDateValue(date), rawDate: undefined },\n                  { at: element }\n                );\n              }}\n              mode=\"single\"\n              initialFocus\n            />\n          </PopoverContent>\n        </Popover>\n      )}\n      {props.children}\n    </PlateElement>\n  );\n}\n",
      "type": "registry:ui"
    },
    {
      "path": "src/registry/ui/date-node-static.tsx",
      "content": "import * as React from 'react';\n\nimport { getDateDisplayLabel } from '@platejs/date';\nimport type { TDateElement } from 'platejs';\nimport type { SlateElementProps } from 'platejs/static';\n\nimport { SlateElement } from 'platejs/static';\nimport { cn } from '@/lib/utils';\nimport { inlineSuggestionVariants } from '@/registry/lib/suggestion';\n\nexport function DateElementStatic(props: SlateElementProps<TDateElement>) {\n  const { element } = props;\n\n  return (\n    <SlateElement as=\"span\" className=\"inline-block\" {...props}>\n      <span\n        className={cn(\n          'w-fit rounded-sm bg-muted px-1 text-muted-foreground',\n          inlineSuggestionVariants()\n        )}\n      >\n        {element.date || element.rawDate ? (\n          getDateDisplayLabel(element)\n        ) : (\n          <span>Pick a date</span>\n        )}\n      </span>\n      {props.children}\n    </SlateElement>\n  );\n}\n",
      "type": "registry:ui"
    }
  ],
  "meta": {
    "docs": [
      {
        "route": "/docs/date"
      },
      {
        "route": "https://pro.platejs.org/docs/components/date-node"
      }
    ],
    "examples": [
      "date-demo"
    ]
  },
  "type": "registry:ui"
}