{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "marker",
  "title": "Marker",
  "description": "shadcn/ui(new-york-v4) marker의 유니버설(웹+네이티브 한 벌 소스) 포팅. 포팅 판단(원본 대비 차이·이유): 마커다(default 텍스트 / separator 좌우 선 / border 하단 선) — 이미지·",
  "dependencies": [
    "@unikit-bridge/ui",
    "class-variance-authority"
  ],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/marker.tsx",
      "content": "// Marker — shadcn/ui（new-york-v4） marker.tsx 유니버설 포팅 （사이클 40, T-3d）.\n// 원본: shadcn-ref/ui/marker.tsx\n//\n// 포팅 판단（원본 대비 차이이유）:\n// - 원본 확인 결과 지도/위치 마커가 아니라 채팅 목록의 날짜안내 구분선\n//   마커다（default 텍스트 / separator 좌우 선 / border 하단 선） — 이미지\n//   브리지 Image 불필요, 원본 구조（텍스트 마커） 그대로 이식했다.\n// - div/span → 브리지 View/Text. asChild（radix Slot） 제거 — View 렌더 고정.\n// - separator 변형의 before:/after: 의사요소（좌우 선）는 네이티브에 없어\n//   실제 View（h-px flex-1 bg-border, aria-hidden） 두 개로 근사 렌더한다.\n//   원본 before:mr-1/after:ml-1 간격은 기존 gap-2가 대신한다.\n// - MarkerContent의 group-data-［variant=separator］/marker:* 셀렉터는\n//   MarkerContext（variant）로 재현 — separator면 flex-none + 가운데 정렬.\n// - ［&_svg:not（）］:size-*［a］:underline 등 셀렉터는 제거（글리프 크기\n//   링크 색은 소비자 Text에 명시 — 이중 지정 원칙）. wrap-break-word는\n//   웹 전용 → web: 접두.\n// - markerVariants는 원본과 동일하게 export（변이 토큰 유지）.\nimport {\n  createContext,\n  forwardRef,\n  useContext,\n  type ReactNode,\n} from \"react\";\nimport {\n  Text,\n  View,\n  type BridgeTextRef,\n  type BridgeViewRef,\n  type TextProps,\n  type ViewProps,\n} from \"@unikit-bridge/ui/primitives\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst markerVariants = cva(\n  \"relative flex flex-row min-h-4 w-full items-center gap-2\",\n  {\n    variants: {\n      variant: {\n        default: \"\",\n        // 좌우 선은 before/after 의사요소 대신 실제 View로 렌더（본문 참조）.\n        separator: \"\",\n        border: \"border-b border-border pb-2\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\n// MarkerContent가 variant를 읽기 위한 문맥（separator 근사의 판단 근거）.\nconst MarkerContext = createContext<\n  VariantProps<typeof markerVariants>[\"variant\"] | null\n>(null);\n\n// ---------------------------------------------------------------------------\n// Marker — 구분 마커 루트. separator 변형이면 좌우 선을 함께 렌더한다.\n// ---------------------------------------------------------------------------\nexport type MarkerProps = ViewProps &\n  VariantProps<typeof markerVariants> & {\n    children?: ReactNode;\n  };\n\nconst Marker = forwardRef<BridgeViewRef, MarkerProps>(\n  ({ className, variant = \"default\", children, ...props }, ref) => (\n    <MarkerContext.Provider value={variant}>\n      <View\n        ref={ref}\n        className={cn(markerVariants({ variant }), className)}\n        {...props}\n      >\n        {variant === \"separator\" && (\n          <View aria-hidden className=\"h-px min-w-0 flex-1 bg-border\" />\n        )}\n        {children}\n        {variant === \"separator\" && (\n          <View aria-hidden className=\"h-px min-w-0 flex-1 bg-border\" />\n        )}\n      </View>\n    </MarkerContext.Provider>\n  ),\n);\nMarker.displayName = \"Marker\";\n\n// ---------------------------------------------------------------------------\n// MarkerIcon — 마커 앞 글리프 칸（장식 — 스크린리더 은닉）.\n// ---------------------------------------------------------------------------\nexport type MarkerIconProps = ViewProps;\n\nconst MarkerIcon = forwardRef<BridgeViewRef, MarkerIconProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      aria-hidden\n      className={cn(\"size-4 shrink-0 items-center justify-center\", className)}\n      {...props}\n    />\n  ),\n);\nMarkerIcon.displayName = \"MarkerIcon\";\n\n// ---------------------------------------------------------------------------\n// MarkerContent — 마커 텍스트（날짜안내 문구）. separator면 가운데 고정.\n// ---------------------------------------------------------------------------\nexport type MarkerContentProps = TextProps & {\n  children?: ReactNode;\n};\n\nconst MarkerContent = forwardRef<BridgeTextRef, MarkerContentProps>(\n  ({ className, ...props }, ref) => {\n    const variant = useContext(MarkerContext);\n    return (\n      <Text\n        ref={ref}\n        className={cn(\n          \"min-w-0 text-sm text-muted-foreground web:wrap-break-word\",\n          variant === \"separator\" && \"flex-none text-center\",\n          className,\n        )}\n        {...props}\n      />\n    );\n  },\n);\nMarkerContent.displayName = \"MarkerContent\";\n\nexport { Marker, MarkerIcon, MarkerContent, markerVariants };\n",
      "type": "registry:ui",
      "target": "components/ui/marker.tsx"
    }
  ],
  "type": "registry:ui"
}
