@axis-ds/mcp 1.2.2 → 1.3.0

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.
Files changed (35) hide show
  1. package/README.md +19 -1
  2. package/dist/index.js +3823 -2392
  3. package/dist/registry/agentic-a11y-labels.json +16 -0
  4. package/dist/registry/agentic-agent-avatar.json +19 -0
  5. package/dist/registry/agentic-approval-card.json +19 -0
  6. package/dist/registry/agentic-attachment-card.json +19 -0
  7. package/dist/registry/agentic-code-block.json +18 -0
  8. package/dist/registry/agentic-context-panel.json +18 -0
  9. package/dist/registry/agentic-diff-viewer.json +19 -0
  10. package/dist/registry/agentic-feedback-buttons.json +19 -0
  11. package/dist/registry/agentic-message-bubble.json +19 -0
  12. package/dist/registry/agentic-plan-card.json +19 -0
  13. package/dist/registry/agentic-recovery-banner.json +18 -0
  14. package/dist/registry/agentic-run-progress.json +19 -0
  15. package/dist/registry/agentic-source-panel.json +19 -0
  16. package/dist/registry/agentic-step-timeline.json +19 -0
  17. package/dist/registry/agentic-streaming-text.json +18 -0
  18. package/dist/registry/agentic-surface-renderer.json +18 -0
  19. package/dist/registry/agentic-thinking-indicator.json +18 -0
  20. package/dist/registry/agentic-token-usage-indicator.json +18 -0
  21. package/dist/registry/agentic-tool-call-card.json +19 -0
  22. package/dist/registry/badge.json +20 -0
  23. package/dist/registry/button.json +21 -0
  24. package/dist/registry/card.json +18 -0
  25. package/dist/registry/dialog.json +20 -0
  26. package/dist/registry/index.json +217 -0
  27. package/dist/registry/input.json +18 -0
  28. package/dist/registry/label.json +21 -0
  29. package/dist/registry/registry.json +218 -0
  30. package/dist/registry/select.json +20 -0
  31. package/dist/registry/separator.json +20 -0
  32. package/dist/registry/tabs.json +20 -0
  33. package/dist/registry/toast.json +21 -0
  34. package/dist/registry/utils.json +19 -0
  35. package/package.json +8 -5
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "badge",
4
+ "type": "registry:ui",
5
+ "title": "Badge",
6
+ "description": "AXIS 배지 컴포넌트 - 상태 표시용",
7
+ "dependencies": [
8
+ "class-variance-authority"
9
+ ],
10
+ "registryDependencies": [
11
+ "https://axis-design-system.pages.dev/r/utils.json"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "components/ui/badge.tsx",
16
+ "type": "registry:ui",
17
+ "content": "import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-[var(--axis-badge-default-bg)] text-[var(--axis-badge-default-text)]\",\n secondary:\n \"border-transparent bg-[var(--axis-surface-secondary)] text-[var(--axis-text-secondary)]\",\n destructive:\n \"border-transparent bg-[var(--axis-badge-error-bg)] text-[var(--axis-badge-error-text)]\",\n success:\n \"border-transparent bg-[var(--axis-badge-success-bg)] text-[var(--axis-badge-success-text)]\",\n warning:\n \"border-transparent bg-[var(--axis-badge-warning-bg)] text-[var(--axis-badge-warning-text)]\",\n error:\n \"border-transparent bg-[var(--axis-badge-error-bg)] text-[var(--axis-badge-error-text)]\",\n info:\n \"border-transparent bg-[var(--axis-badge-info-bg)] text-[var(--axis-badge-info-text)]\",\n outline: \"border-[var(--axis-border-default)] text-[var(--axis-text-primary)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\n/**\n * Badge 컴포넌트 Props\n * @property variant - 배지 스타일 변형 (default, secondary, destructive, success, warning, error, info, outline)\n */\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\n/** 상태나 카테고리를 나타내는 작은 라벨 컴포넌트 */\nconst Badge = React.forwardRef<HTMLDivElement, BadgeProps>(\n ({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n);\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants };\n"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "button",
4
+ "type": "registry:ui",
5
+ "title": "Button",
6
+ "description": "AXIS 버튼 컴포넌트 - 다양한 variant와 size 지원",
7
+ "dependencies": [
8
+ "@radix-ui/react-slot",
9
+ "class-variance-authority"
10
+ ],
11
+ "registryDependencies": [
12
+ "https://axis-design-system.pages.dev/r/utils.json"
13
+ ],
14
+ "files": [
15
+ {
16
+ "path": "components/ui/button.tsx",
17
+ "type": "registry:ui",
18
+ "content": "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"bg-[var(--axis-button-bg-default)] text-[var(--axis-button-text-default)] hover:bg-[var(--axis-button-bg-hover)] active:bg-[var(--axis-button-bg-active)] focus-visible:ring-[var(--axis-button-border-focus)]\",\n secondary:\n \"bg-[var(--axis-button-secondary-bg-default)] text-[var(--axis-button-secondary-text-default)] hover:bg-[var(--axis-button-secondary-bg-hover)] active:bg-[var(--axis-button-secondary-bg-active)]\",\n ghost:\n \"bg-[var(--axis-button-ghost-bg-default)] text-[var(--axis-button-ghost-text-default)] hover:bg-[var(--axis-button-ghost-bg-hover)] active:bg-[var(--axis-button-ghost-bg-active)]\",\n destructive:\n \"bg-[var(--axis-button-destructive-bg-default)] text-[var(--axis-button-destructive-text-default)] hover:bg-[var(--axis-button-destructive-bg-hover)] active:bg-[var(--axis-button-destructive-bg-active)]\",\n outline:\n \"border border-[var(--axis-border-default)] bg-transparent hover:bg-[var(--axis-surface-secondary)] text-[var(--axis-text-primary)]\",\n link: \"text-[var(--axis-text-brand)] underline-offset-4 hover:underline\",\n },\n size: {\n sm: \"h-8 px-3 text-xs\",\n default: \"h-10 px-4 py-2\",\n lg: \"h-12 px-6 text-base\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n/**\n * Button 컴포넌트 Props\n * @property variant - 버튼 스타일 변형 (default, secondary, ghost, destructive, outline, link)\n * @property size - 버튼 크기 (sm, default, lg, icon)\n */\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Slot 패턴을 사용하여 자식 요소를 버튼으로 렌더링 */\n asChild?: boolean;\n}\n\n/** 다양한 스타일 변형과 크기를 지원하는 버튼 컴포넌트 */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "card",
4
+ "type": "registry:ui",
5
+ "title": "Card",
6
+ "description": "AXIS 카드 컴포넌트 - Header, Content, Footer 포함",
7
+ "dependencies": [],
8
+ "registryDependencies": [
9
+ "https://axis-design-system.pages.dev/r/utils.json"
10
+ ],
11
+ "files": [
12
+ {
13
+ "path": "components/ui/card.tsx",
14
+ "type": "registry:ui",
15
+ "content": "import * as React from \"react\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\n/** Card 컴포넌트 Props */\nexport type CardProps = React.HTMLAttributes<HTMLDivElement>;\n\n/** 관련 콘텐츠를 그룹화하여 표시하는 카드 컨테이너 컴포넌트 */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-[var(--axis-card-bg-default)] border-[var(--axis-card-border-default)] shadow-[shadow:var(--axis-card-shadow)]\",\n className\n )}\n {...props}\n />\n )\n);\nCard.displayName = \"Card\";\n\n/** 카드의 헤더 영역 (제목, 설명 등을 포함) */\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\n/** 카드의 제목을 표시하는 컴포넌트 */\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight text-[var(--axis-text-primary)]\",\n className\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\n/** 카드의 부가 설명을 표시하는 컴포넌트 */\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-[var(--axis-text-secondary)]\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\n/** 카드의 본문 콘텐츠 영역 */\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\n/** 카드의 하단 영역 (액션 버튼 등을 배치) */\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n"
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "dialog",
4
+ "type": "registry:ui",
5
+ "title": "Dialog",
6
+ "description": "AXIS 다이얼로그 컴포넌트 - 모달 UI",
7
+ "dependencies": [
8
+ "@radix-ui/react-dialog"
9
+ ],
10
+ "registryDependencies": [
11
+ "https://axis-design-system.pages.dev/r/utils.json"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "components/ui/dialog.tsx",
16
+ "type": "registry:ui",
17
+ "content": "import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\n/** 다이얼로그의 루트 컴포넌트. 열림/닫힘 상태를 관리한다. */\nconst Dialog = DialogPrimitive.Root;\n\n/** 다이얼로그를 여는 트리거 버튼 컴포넌트 */\nconst DialogTrigger = DialogPrimitive.Trigger;\n\n/** 다이얼로그 콘텐츠를 포털로 렌더링하는 컴포넌트 */\nconst DialogPortal = DialogPrimitive.Portal;\n\n/** 다이얼로그를 닫는 버튼 컴포넌트 */\nconst DialogClose = DialogPrimitive.Close;\n\n/** 다이얼로그가 열릴 때 배경을 덮는 오버레이 컴포넌트. 페이드 인/아웃 애니메이션을 포함한다. */\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-[var(--axis-dialog-overlay-bg)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = \"DialogOverlay\";\n\n/** 다이얼로그의 본문 콘텐츠 컴포넌트. 화면 중앙에 위치하며, 오버레이와 함께 포털로 렌더링된다. */\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-[shadow:var(--axis-shadow-lg)] duration-200\",\n \"bg-[var(--axis-dialog-content-bg)] border-[var(--axis-dialog-content-border)]\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]\",\n \"sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = \"DialogContent\";\n\n/** 다이얼로그 상단 헤더 영역. 제목과 설명을 포함하는 레이아웃 컴포넌트이다. */\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\n/** 다이얼로그 하단 푸터 영역. 액션 버튼들을 배치하는 레이아웃 컴포넌트이다. */\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\n/** 다이얼로그의 제목 컴포넌트. 접근성을 위해 aria-labelledby로 연결된다. */\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight text-[var(--axis-text-primary)]\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\n/** 다이얼로그의 설명 텍스트 컴포넌트. 접근성을 위해 aria-describedby로 연결된다. */\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-[var(--axis-text-secondary)]\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,217 @@
1
+ {
2
+ "name": "axis",
3
+ "homepage": "https://axis-design-system.pages.dev",
4
+ "version": "1.5.1",
5
+ "items": [
6
+ {
7
+ "name": "utils",
8
+ "type": "registry:lib",
9
+ "title": "Utils",
10
+ "description": "AXIS cn 유틸 - clsx 와 tailwind-merge(그림자 임의값 그룹 확장)로 클래스 병합",
11
+ "sha256": "ec301bef82aeb157debea01c650303a6a555b903b021705c99d44fea503fb279"
12
+ },
13
+ {
14
+ "name": "button",
15
+ "type": "registry:ui",
16
+ "title": "Button",
17
+ "description": "AXIS 버튼 컴포넌트 - 다양한 variant와 size 지원",
18
+ "sha256": "14cb5f00cdbe68fba7e07a3436c5bf4cbf865c4de75d01b1c4ef978649778b25"
19
+ },
20
+ {
21
+ "name": "input",
22
+ "type": "registry:ui",
23
+ "title": "Input",
24
+ "description": "AXIS 입력 필드 컴포넌트",
25
+ "sha256": "99ca683f4c3821ab74ef40b9d95bf6d3b499841934cf731b3e69b360e58db9c0"
26
+ },
27
+ {
28
+ "name": "label",
29
+ "type": "registry:ui",
30
+ "title": "Label",
31
+ "description": "AXIS 라벨 컴포넌트 - 폼 필드 라벨링",
32
+ "sha256": "c3971ecff5b9d849110ecd2869979e2edbb8ceb7d47e61b93ea4765c3fd4e19a"
33
+ },
34
+ {
35
+ "name": "card",
36
+ "type": "registry:ui",
37
+ "title": "Card",
38
+ "description": "AXIS 카드 컴포넌트 - Header, Content, Footer 포함",
39
+ "sha256": "a12d3e5468b0247e564d09040bc4ba0cb818406244f11a6f0d781e54ab640be7"
40
+ },
41
+ {
42
+ "name": "badge",
43
+ "type": "registry:ui",
44
+ "title": "Badge",
45
+ "description": "AXIS 배지 컴포넌트 - 상태 표시용",
46
+ "sha256": "c2f0c61cc4500064e5be76c4e29852f6143fa1599c146984ca1c07a73bd15707"
47
+ },
48
+ {
49
+ "name": "separator",
50
+ "type": "registry:ui",
51
+ "title": "Separator",
52
+ "description": "AXIS 구분선 컴포넌트",
53
+ "sha256": "126f76734ca10e24dd26fd483115ac36da89349f8ab3a1323e8d135284f49db4"
54
+ },
55
+ {
56
+ "name": "dialog",
57
+ "type": "registry:ui",
58
+ "title": "Dialog",
59
+ "description": "AXIS 다이얼로그 컴포넌트 - 모달 UI",
60
+ "sha256": "75276f96133c560975559f776895bff594b4c3511b303f79ff3517a72d9e86ef"
61
+ },
62
+ {
63
+ "name": "select",
64
+ "type": "registry:ui",
65
+ "title": "Select",
66
+ "description": "AXIS 셀렉트 컴포넌트 - 드롭다운 선택",
67
+ "sha256": "52dc633bc401b11da0a68b08c45c475292a1250aadff89357a25bd985542ff72"
68
+ },
69
+ {
70
+ "name": "tabs",
71
+ "type": "registry:ui",
72
+ "title": "Tabs",
73
+ "description": "AXIS 탭 컴포넌트 - 탭 네비게이션",
74
+ "sha256": "a6da53609bc7ab995d5135a0f3de6e50e83576c9e6898ab0762f8e360e4b2cd5"
75
+ },
76
+ {
77
+ "name": "toast",
78
+ "type": "registry:ui",
79
+ "title": "Toast",
80
+ "description": "AXIS 토스트 컴포넌트 - 알림 메시지",
81
+ "sha256": "7be5ff031c88b39b955d8d574adb04a031ac01fdb606bd5ca6d38d730047201d"
82
+ },
83
+ {
84
+ "name": "agentic-a11y-labels",
85
+ "type": "registry:lib",
86
+ "title": "Agentic A11y Labels",
87
+ "description": "AXIS Agentic UI 접근성 레이블 상수 - 스크린 리더용 상태 · 심각도 · 역할 텍스트",
88
+ "sha256": "29cdd11dae04c5d8a7c98ee15575cf8892fa3dad4d6c5d684d282b87545ce0dd"
89
+ },
90
+ {
91
+ "name": "agentic-run-progress",
92
+ "type": "registry:ui",
93
+ "title": "Run Progress",
94
+ "description": "AI 에이전트 실행 진행률 표시 컴포넌트",
95
+ "sha256": "7e9440054119958145eff6b3f82c814453ec80f42c23a47f83dcdf0de418df24"
96
+ },
97
+ {
98
+ "name": "agentic-streaming-text",
99
+ "type": "registry:ui",
100
+ "title": "Streaming Text",
101
+ "description": "LLM 스트리밍 텍스트 출력 컴포넌트",
102
+ "sha256": "e39ef3ef19e7ce5d0a22ba4c9d168c7cd219ea0234b5df75bf74cfa70c6a4056"
103
+ },
104
+ {
105
+ "name": "agentic-approval-card",
106
+ "type": "registry:ui",
107
+ "title": "Approval Card",
108
+ "description": "사용자 승인 요청 카드 컴포넌트",
109
+ "sha256": "7da9521e6f7e684d8fa0ccb8156877aa251c9cbf4d7f4491a5fa346daeb8111a"
110
+ },
111
+ {
112
+ "name": "agentic-step-timeline",
113
+ "type": "registry:ui",
114
+ "title": "Step Timeline",
115
+ "description": "에이전트 실행 단계 타임라인 컴포넌트",
116
+ "sha256": "536df739e23e098f57a3e8f5093edf46a55fba2dfa2525622dd73fc81b83a9ce"
117
+ },
118
+ {
119
+ "name": "agentic-thinking-indicator",
120
+ "type": "registry:ui",
121
+ "title": "Thinking Indicator",
122
+ "description": "AI 사고 과정 표시 컴포넌트",
123
+ "sha256": "5e495686fb1dfdb1f3a9b669269a41a0031fbb47cd75380dce294dc6aecafbbc"
124
+ },
125
+ {
126
+ "name": "agentic-source-panel",
127
+ "type": "registry:ui",
128
+ "title": "Source Panel",
129
+ "description": "참조 소스 표시 패널 컴포넌트",
130
+ "sha256": "dd0554d8740725eabb13d9f7b456ddd3ffdc577dfe2e89218a06f6ff3f560ecf"
131
+ },
132
+ {
133
+ "name": "agentic-recovery-banner",
134
+ "type": "registry:ui",
135
+ "title": "Recovery Banner",
136
+ "description": "에러 복구 배너 컴포넌트",
137
+ "sha256": "b4f6fe103ee7eab0b4e6684192a40e58e55dcc86d6dec6b285cb5a6d72b57560"
138
+ },
139
+ {
140
+ "name": "agentic-agent-avatar",
141
+ "type": "registry:ui",
142
+ "title": "Agent Avatar",
143
+ "description": "AI 에이전트 아바타 컴포넌트",
144
+ "sha256": "f976f582e9ed76b9708750374874a93a153845524863abb53416301366a6df3c"
145
+ },
146
+ {
147
+ "name": "agentic-surface-renderer",
148
+ "type": "registry:ui",
149
+ "title": "Surface Renderer",
150
+ "description": "동적 UI Surface 렌더러 컴포넌트",
151
+ "sha256": "3dcc39db1ee4f0538725ff9a543e428880c1dba9d45e02dcecd951f92b9f998a"
152
+ },
153
+ {
154
+ "name": "agentic-tool-call-card",
155
+ "type": "registry:ui",
156
+ "title": "Tool Call Card",
157
+ "description": "도구 호출 결과 표시 카드 컴포넌트",
158
+ "sha256": "4e387dbf052d5cddb90693d0eb2d1fcba6395e77c05ef8dad794ccce190f70ac"
159
+ },
160
+ {
161
+ "name": "agentic-message-bubble",
162
+ "type": "registry:ui",
163
+ "title": "Message Bubble",
164
+ "description": "대화 메시지 버블 컴포넌트 (user/assistant/system)",
165
+ "sha256": "3bed0ec76f145b3aa01fe1efd2de9a35cfc4608429cc92968b639d8740081216"
166
+ },
167
+ {
168
+ "name": "agentic-feedback-buttons",
169
+ "type": "registry:ui",
170
+ "title": "Feedback Buttons",
171
+ "description": "좋아요/싫어요 피드백 버튼 컴포넌트",
172
+ "sha256": "736cfcb470ad4d32fc3b70d1697984dd02e2d75a34f98d023908fc6831792f78"
173
+ },
174
+ {
175
+ "name": "agentic-token-usage-indicator",
176
+ "type": "registry:ui",
177
+ "title": "Token Usage Indicator",
178
+ "description": "토큰 사용량 및 비용 표시 컴포넌트",
179
+ "sha256": "5c8c5ea1762f6cf0a2432745e296b7d3e5d244d4a33669858a9d1558be2274d5"
180
+ },
181
+ {
182
+ "name": "agentic-context-panel",
183
+ "type": "registry:ui",
184
+ "title": "Context Panel",
185
+ "description": "모델/설정 메타 정보 패널 컴포넌트",
186
+ "sha256": "a9a618b1d657aed7c59a1a7753d2e0cdb1446b6d53f2ff6fa03763a1146da538"
187
+ },
188
+ {
189
+ "name": "agentic-code-block",
190
+ "type": "registry:ui",
191
+ "title": "Code Block",
192
+ "description": "코드 표시 + 복사 버튼 컴포넌트",
193
+ "sha256": "12f888378fac091cc2568b454eb275f0ed8ddb69d3533a85cc70bc960bbb2d4b"
194
+ },
195
+ {
196
+ "name": "agentic-plan-card",
197
+ "type": "registry:ui",
198
+ "title": "Plan Card",
199
+ "description": "AI 실행 계획 표시/승인 카드 컴포넌트",
200
+ "sha256": "a702e9a023276fd63188eb38a86149f3e222f5224d938208fb0ae8fdb8e3a038"
201
+ },
202
+ {
203
+ "name": "agentic-attachment-card",
204
+ "type": "registry:ui",
205
+ "title": "Attachment Card",
206
+ "description": "파일/이미지 첨부 표시 카드 컴포넌트",
207
+ "sha256": "1b5df56505341ef6b9a0adab7c50eced05e402b9a06cfdd3628ec4fda08e8af9"
208
+ },
209
+ {
210
+ "name": "agentic-diff-viewer",
211
+ "type": "registry:ui",
212
+ "title": "Diff Viewer",
213
+ "description": "코드 변경사항 비교 표시 컴포넌트",
214
+ "sha256": "1c3d2b81011f6522b0d37e039c0b1ccf597c0eca0aa1a4749331142ae0625ca2"
215
+ }
216
+ ]
217
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "input",
4
+ "type": "registry:ui",
5
+ "title": "Input",
6
+ "description": "AXIS 입력 필드 컴포넌트",
7
+ "dependencies": [],
8
+ "registryDependencies": [
9
+ "https://axis-design-system.pages.dev/r/utils.json"
10
+ ],
11
+ "files": [
12
+ {
13
+ "path": "components/ui/input.tsx",
14
+ "type": "registry:ui",
15
+ "content": "import * as React from \"react\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\n/** Input 컴포넌트의 Props 인터페이스 */\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n /** 에러 상태 표시. true일 경우 테두리와 포커스 링이 에러 색상으로 변경된다. */\n error?: boolean;\n}\n\n/**\n * 텍스트 입력 필드 컴포넌트.\n * 다양한 HTML input 타입을 지원하며, 에러 상태와 비활성화 상태 스타일을 포함한다.\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, error, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border px-3 py-2 text-sm transition-colors\",\n \"bg-[var(--axis-input-bg-default)] text-[var(--axis-input-text-default)]\",\n \"border-[var(--axis-input-border-default)]\",\n \"placeholder:text-[var(--axis-input-text-placeholder)]\",\n \"hover:border-[var(--axis-input-border-hover)]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--axis-input-border-focus)] focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--axis-input-bg-disabled)]\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n error && \"border-[var(--axis-input-border-error)] focus-visible:ring-[var(--axis-input-border-error)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n"
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "label",
4
+ "type": "registry:ui",
5
+ "title": "Label",
6
+ "description": "AXIS 라벨 컴포넌트 - 폼 필드 라벨링",
7
+ "dependencies": [
8
+ "@radix-ui/react-label",
9
+ "class-variance-authority"
10
+ ],
11
+ "registryDependencies": [
12
+ "https://axis-design-system.pages.dev/r/utils.json"
13
+ ],
14
+ "files": [
15
+ {
16
+ "path": "components/ui/label.tsx",
17
+ "type": "registry:ui",
18
+ "content": "import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none text-[var(--axis-text-primary)] peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n);\n\n/** Label 컴포넌트의 Props 인터페이스. Radix Label 프리미티브의 속성을 확장한다. */\nexport interface LabelProps\n extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>,\n VariantProps<typeof labelVariants> {}\n\n/**\n * 폼 요소에 연결되는 레이블 컴포넌트.\n * 접근성을 위해 htmlFor 속성으로 폼 요소와 연결할 수 있으며, 연결된 요소가 비활성화되면 자동으로 시각적 피드백을 제공한다.\n */\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n\nexport { Label };\n"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,218 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry.json",
3
+ "name": "axis",
4
+ "homepage": "https://axis-design-system.pages.dev",
5
+ "version": "1.5.1",
6
+ "items": [
7
+ {
8
+ "name": "utils",
9
+ "type": "registry:lib",
10
+ "title": "Utils",
11
+ "description": "AXIS cn 유틸 - clsx 와 tailwind-merge(그림자 임의값 그룹 확장)로 클래스 병합",
12
+ "sha256": "ec301bef82aeb157debea01c650303a6a555b903b021705c99d44fea503fb279"
13
+ },
14
+ {
15
+ "name": "button",
16
+ "type": "registry:ui",
17
+ "title": "Button",
18
+ "description": "AXIS 버튼 컴포넌트 - 다양한 variant와 size 지원",
19
+ "sha256": "14cb5f00cdbe68fba7e07a3436c5bf4cbf865c4de75d01b1c4ef978649778b25"
20
+ },
21
+ {
22
+ "name": "input",
23
+ "type": "registry:ui",
24
+ "title": "Input",
25
+ "description": "AXIS 입력 필드 컴포넌트",
26
+ "sha256": "99ca683f4c3821ab74ef40b9d95bf6d3b499841934cf731b3e69b360e58db9c0"
27
+ },
28
+ {
29
+ "name": "label",
30
+ "type": "registry:ui",
31
+ "title": "Label",
32
+ "description": "AXIS 라벨 컴포넌트 - 폼 필드 라벨링",
33
+ "sha256": "c3971ecff5b9d849110ecd2869979e2edbb8ceb7d47e61b93ea4765c3fd4e19a"
34
+ },
35
+ {
36
+ "name": "card",
37
+ "type": "registry:ui",
38
+ "title": "Card",
39
+ "description": "AXIS 카드 컴포넌트 - Header, Content, Footer 포함",
40
+ "sha256": "a12d3e5468b0247e564d09040bc4ba0cb818406244f11a6f0d781e54ab640be7"
41
+ },
42
+ {
43
+ "name": "badge",
44
+ "type": "registry:ui",
45
+ "title": "Badge",
46
+ "description": "AXIS 배지 컴포넌트 - 상태 표시용",
47
+ "sha256": "c2f0c61cc4500064e5be76c4e29852f6143fa1599c146984ca1c07a73bd15707"
48
+ },
49
+ {
50
+ "name": "separator",
51
+ "type": "registry:ui",
52
+ "title": "Separator",
53
+ "description": "AXIS 구분선 컴포넌트",
54
+ "sha256": "126f76734ca10e24dd26fd483115ac36da89349f8ab3a1323e8d135284f49db4"
55
+ },
56
+ {
57
+ "name": "dialog",
58
+ "type": "registry:ui",
59
+ "title": "Dialog",
60
+ "description": "AXIS 다이얼로그 컴포넌트 - 모달 UI",
61
+ "sha256": "75276f96133c560975559f776895bff594b4c3511b303f79ff3517a72d9e86ef"
62
+ },
63
+ {
64
+ "name": "select",
65
+ "type": "registry:ui",
66
+ "title": "Select",
67
+ "description": "AXIS 셀렉트 컴포넌트 - 드롭다운 선택",
68
+ "sha256": "52dc633bc401b11da0a68b08c45c475292a1250aadff89357a25bd985542ff72"
69
+ },
70
+ {
71
+ "name": "tabs",
72
+ "type": "registry:ui",
73
+ "title": "Tabs",
74
+ "description": "AXIS 탭 컴포넌트 - 탭 네비게이션",
75
+ "sha256": "a6da53609bc7ab995d5135a0f3de6e50e83576c9e6898ab0762f8e360e4b2cd5"
76
+ },
77
+ {
78
+ "name": "toast",
79
+ "type": "registry:ui",
80
+ "title": "Toast",
81
+ "description": "AXIS 토스트 컴포넌트 - 알림 메시지",
82
+ "sha256": "7be5ff031c88b39b955d8d574adb04a031ac01fdb606bd5ca6d38d730047201d"
83
+ },
84
+ {
85
+ "name": "agentic-a11y-labels",
86
+ "type": "registry:lib",
87
+ "title": "Agentic A11y Labels",
88
+ "description": "AXIS Agentic UI 접근성 레이블 상수 - 스크린 리더용 상태 · 심각도 · 역할 텍스트",
89
+ "sha256": "29cdd11dae04c5d8a7c98ee15575cf8892fa3dad4d6c5d684d282b87545ce0dd"
90
+ },
91
+ {
92
+ "name": "agentic-run-progress",
93
+ "type": "registry:ui",
94
+ "title": "Run Progress",
95
+ "description": "AI 에이전트 실행 진행률 표시 컴포넌트",
96
+ "sha256": "7e9440054119958145eff6b3f82c814453ec80f42c23a47f83dcdf0de418df24"
97
+ },
98
+ {
99
+ "name": "agentic-streaming-text",
100
+ "type": "registry:ui",
101
+ "title": "Streaming Text",
102
+ "description": "LLM 스트리밍 텍스트 출력 컴포넌트",
103
+ "sha256": "e39ef3ef19e7ce5d0a22ba4c9d168c7cd219ea0234b5df75bf74cfa70c6a4056"
104
+ },
105
+ {
106
+ "name": "agentic-approval-card",
107
+ "type": "registry:ui",
108
+ "title": "Approval Card",
109
+ "description": "사용자 승인 요청 카드 컴포넌트",
110
+ "sha256": "7da9521e6f7e684d8fa0ccb8156877aa251c9cbf4d7f4491a5fa346daeb8111a"
111
+ },
112
+ {
113
+ "name": "agentic-step-timeline",
114
+ "type": "registry:ui",
115
+ "title": "Step Timeline",
116
+ "description": "에이전트 실행 단계 타임라인 컴포넌트",
117
+ "sha256": "536df739e23e098f57a3e8f5093edf46a55fba2dfa2525622dd73fc81b83a9ce"
118
+ },
119
+ {
120
+ "name": "agentic-thinking-indicator",
121
+ "type": "registry:ui",
122
+ "title": "Thinking Indicator",
123
+ "description": "AI 사고 과정 표시 컴포넌트",
124
+ "sha256": "5e495686fb1dfdb1f3a9b669269a41a0031fbb47cd75380dce294dc6aecafbbc"
125
+ },
126
+ {
127
+ "name": "agentic-source-panel",
128
+ "type": "registry:ui",
129
+ "title": "Source Panel",
130
+ "description": "참조 소스 표시 패널 컴포넌트",
131
+ "sha256": "dd0554d8740725eabb13d9f7b456ddd3ffdc577dfe2e89218a06f6ff3f560ecf"
132
+ },
133
+ {
134
+ "name": "agentic-recovery-banner",
135
+ "type": "registry:ui",
136
+ "title": "Recovery Banner",
137
+ "description": "에러 복구 배너 컴포넌트",
138
+ "sha256": "b4f6fe103ee7eab0b4e6684192a40e58e55dcc86d6dec6b285cb5a6d72b57560"
139
+ },
140
+ {
141
+ "name": "agentic-agent-avatar",
142
+ "type": "registry:ui",
143
+ "title": "Agent Avatar",
144
+ "description": "AI 에이전트 아바타 컴포넌트",
145
+ "sha256": "f976f582e9ed76b9708750374874a93a153845524863abb53416301366a6df3c"
146
+ },
147
+ {
148
+ "name": "agentic-surface-renderer",
149
+ "type": "registry:ui",
150
+ "title": "Surface Renderer",
151
+ "description": "동적 UI Surface 렌더러 컴포넌트",
152
+ "sha256": "3dcc39db1ee4f0538725ff9a543e428880c1dba9d45e02dcecd951f92b9f998a"
153
+ },
154
+ {
155
+ "name": "agentic-tool-call-card",
156
+ "type": "registry:ui",
157
+ "title": "Tool Call Card",
158
+ "description": "도구 호출 결과 표시 카드 컴포넌트",
159
+ "sha256": "4e387dbf052d5cddb90693d0eb2d1fcba6395e77c05ef8dad794ccce190f70ac"
160
+ },
161
+ {
162
+ "name": "agentic-message-bubble",
163
+ "type": "registry:ui",
164
+ "title": "Message Bubble",
165
+ "description": "대화 메시지 버블 컴포넌트 (user/assistant/system)",
166
+ "sha256": "3bed0ec76f145b3aa01fe1efd2de9a35cfc4608429cc92968b639d8740081216"
167
+ },
168
+ {
169
+ "name": "agentic-feedback-buttons",
170
+ "type": "registry:ui",
171
+ "title": "Feedback Buttons",
172
+ "description": "좋아요/싫어요 피드백 버튼 컴포넌트",
173
+ "sha256": "736cfcb470ad4d32fc3b70d1697984dd02e2d75a34f98d023908fc6831792f78"
174
+ },
175
+ {
176
+ "name": "agentic-token-usage-indicator",
177
+ "type": "registry:ui",
178
+ "title": "Token Usage Indicator",
179
+ "description": "토큰 사용량 및 비용 표시 컴포넌트",
180
+ "sha256": "5c8c5ea1762f6cf0a2432745e296b7d3e5d244d4a33669858a9d1558be2274d5"
181
+ },
182
+ {
183
+ "name": "agentic-context-panel",
184
+ "type": "registry:ui",
185
+ "title": "Context Panel",
186
+ "description": "모델/설정 메타 정보 패널 컴포넌트",
187
+ "sha256": "a9a618b1d657aed7c59a1a7753d2e0cdb1446b6d53f2ff6fa03763a1146da538"
188
+ },
189
+ {
190
+ "name": "agentic-code-block",
191
+ "type": "registry:ui",
192
+ "title": "Code Block",
193
+ "description": "코드 표시 + 복사 버튼 컴포넌트",
194
+ "sha256": "12f888378fac091cc2568b454eb275f0ed8ddb69d3533a85cc70bc960bbb2d4b"
195
+ },
196
+ {
197
+ "name": "agentic-plan-card",
198
+ "type": "registry:ui",
199
+ "title": "Plan Card",
200
+ "description": "AI 실행 계획 표시/승인 카드 컴포넌트",
201
+ "sha256": "a702e9a023276fd63188eb38a86149f3e222f5224d938208fb0ae8fdb8e3a038"
202
+ },
203
+ {
204
+ "name": "agentic-attachment-card",
205
+ "type": "registry:ui",
206
+ "title": "Attachment Card",
207
+ "description": "파일/이미지 첨부 표시 카드 컴포넌트",
208
+ "sha256": "1b5df56505341ef6b9a0adab7c50eced05e402b9a06cfdd3628ec4fda08e8af9"
209
+ },
210
+ {
211
+ "name": "agentic-diff-viewer",
212
+ "type": "registry:ui",
213
+ "title": "Diff Viewer",
214
+ "description": "코드 변경사항 비교 표시 컴포넌트",
215
+ "sha256": "1c3d2b81011f6522b0d37e039c0b1ccf597c0eca0aa1a4749331142ae0625ca2"
216
+ }
217
+ ]
218
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "select",
4
+ "type": "registry:ui",
5
+ "title": "Select",
6
+ "description": "AXIS 셀렉트 컴포넌트 - 드롭다운 선택",
7
+ "dependencies": [
8
+ "@radix-ui/react-select"
9
+ ],
10
+ "registryDependencies": [
11
+ "https://axis-design-system.pages.dev/r/utils.json"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "components/ui/select.tsx",
16
+ "type": "registry:ui",
17
+ "content": "import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\n/** 셀렉트의 루트 컴포넌트. 열림/닫힘 및 선택 상태를 관리한다. */\nconst Select = SelectPrimitive.Root;\n\n/** 셀렉트 옵션들을 논리적으로 그룹화하는 컴포넌트 */\nconst SelectGroup = SelectPrimitive.Group;\n\n/** 셀렉트 트리거 내에서 현재 선택된 값을 표시하는 컴포넌트 */\nconst SelectValue = SelectPrimitive.Value;\n\n/** 셀렉트 드롭다운을 여는 트리거 버튼 컴포넌트. 선택된 값과 하향 화살표 아이콘을 표시한다. */\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border px-3 py-2 text-sm\",\n \"bg-[var(--axis-input-bg-default)] border-[var(--axis-input-border-default)]\",\n \"placeholder:text-[var(--axis-input-text-placeholder)]\",\n \"hover:border-[var(--axis-input-border-hover)]\",\n \"focus:outline-none focus:ring-2 focus:ring-[var(--axis-input-border-focus)] focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <svg\n className=\"h-4 w-4 opacity-50\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\n/** 셀렉트 드롭다운의 본문 콘텐츠 컴포넌트. 포털을 통해 렌더링되며 진입/퇴장 애니메이션을 포함한다. */\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md\",\n \"bg-[var(--axis-surface-default)] border-[var(--axis-border-default)]\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = \"SelectContent\";\n\n/** 셀렉트 옵션 그룹의 레이블 컴포넌트. 비선택 텍스트로 그룹 제목을 표시한다. */\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"py-1.5 pl-8 pr-2 text-sm font-semibold text-[var(--axis-text-secondary)]\",\n className\n )}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n\n/** 셀렉트 드롭다운의 개별 선택 항목 컴포넌트. 선택 시 좌측에 체크 아이콘이 표시된다. */\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none\",\n \"text-[var(--axis-text-primary)]\",\n \"focus:bg-[var(--axis-surface-secondary)] focus:text-[var(--axis-text-primary)]\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\n/** 셀렉트 옵션 사이의 구분선 컴포넌트 */\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-[var(--axis-border-default)]\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = \"SelectSeparator\";\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n};\n"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "separator",
4
+ "type": "registry:ui",
5
+ "title": "Separator",
6
+ "description": "AXIS 구분선 컴포넌트",
7
+ "dependencies": [
8
+ "@radix-ui/react-separator"
9
+ ],
10
+ "registryDependencies": [
11
+ "https://axis-design-system.pages.dev/r/utils.json"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "components/ui/separator.tsx",
16
+ "type": "registry:ui",
17
+ "content": "import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"@/registry/axis/lib/utils\";\n\n/** Separator 컴포넌트의 Props 타입. Radix Separator 프리미티브의 속성을 확장한다. */\nexport type SeparatorProps = React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>;\n\n/**\n * 콘텐츠 사이의 시각적 구분선 컴포넌트.\n * 수평(horizontal) 및 수직(vertical) 방향을 지원하며, 기본적으로 장식용(decorative)으로 설정된다.\n */\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-[var(--axis-border-default)]\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = \"Separator\";\n\nexport { Separator };\n"
18
+ }
19
+ ]
20
+ }