@7onic-ui/react 0.3.8 → 0.3.10
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/README.md +2 -2
- package/dist/chart.js +1 -1
- package/dist/chart.js.map +1 -1
- package/dist/chart.mjs +4 -10
- package/dist/chart.mjs.map +1 -1
- package/dist/chunk-234NAXGV.mjs +252 -0
- package/dist/chunk-234NAXGV.mjs.map +1 -0
- package/dist/chunk-53MIUPSY.mjs +13 -0
- package/dist/chunk-53MIUPSY.mjs.map +1 -0
- package/dist/chunk-BN5BEA3V.mjs +195 -0
- package/dist/chunk-BN5BEA3V.mjs.map +1 -0
- package/dist/chunk-COW3B62M.mjs +214 -0
- package/dist/chunk-COW3B62M.mjs.map +1 -0
- package/dist/chunk-CTH6SN5Y.mjs +114 -0
- package/dist/chunk-CTH6SN5Y.mjs.map +1 -0
- package/dist/chunk-D3NTQNDW.mjs +440 -0
- package/dist/chunk-D3NTQNDW.mjs.map +1 -0
- package/dist/chunk-DDRYEJBJ.mjs +164 -0
- package/dist/chunk-DDRYEJBJ.mjs.map +1 -0
- package/dist/chunk-DJAEXCRU.mjs +190 -0
- package/dist/chunk-DJAEXCRU.mjs.map +1 -0
- package/dist/chunk-DRVHHEAY.mjs +145 -0
- package/dist/chunk-DRVHHEAY.mjs.map +1 -0
- package/dist/chunk-DTLNWOTR.mjs +482 -0
- package/dist/chunk-DTLNWOTR.mjs.map +1 -0
- package/dist/chunk-DYYQOHQR.mjs +214 -0
- package/dist/chunk-DYYQOHQR.mjs.map +1 -0
- package/dist/chunk-FHUAH6AJ.mjs +93 -0
- package/dist/chunk-FHUAH6AJ.mjs.map +1 -0
- package/dist/chunk-GD4YE5AE.mjs +209 -0
- package/dist/chunk-GD4YE5AE.mjs.map +1 -0
- package/dist/chunk-GRCJ35DX.mjs +144 -0
- package/dist/chunk-GRCJ35DX.mjs.map +1 -0
- package/dist/chunk-HHX4GABH.mjs +129 -0
- package/dist/chunk-HHX4GABH.mjs.map +1 -0
- package/dist/chunk-IPCIC2BI.mjs +148 -0
- package/dist/chunk-IPCIC2BI.mjs.map +1 -0
- package/dist/chunk-IY3R2VGB.mjs +272 -0
- package/dist/chunk-IY3R2VGB.mjs.map +1 -0
- package/dist/chunk-JCJEVXER.mjs +170 -0
- package/dist/chunk-JCJEVXER.mjs.map +1 -0
- package/dist/chunk-KBPYAMGS.mjs +157 -0
- package/dist/chunk-KBPYAMGS.mjs.map +1 -0
- package/dist/chunk-LJJ6K4IU.mjs +318 -0
- package/dist/chunk-LJJ6K4IU.mjs.map +1 -0
- package/dist/chunk-MRUVGHGP.mjs +375 -0
- package/dist/chunk-MRUVGHGP.mjs.map +1 -0
- package/dist/chunk-N4K2BDGM.mjs +153 -0
- package/dist/chunk-N4K2BDGM.mjs.map +1 -0
- package/dist/chunk-NWFMJWGX.mjs +165 -0
- package/dist/chunk-NWFMJWGX.mjs.map +1 -0
- package/dist/chunk-PTAPPOKU.mjs +117 -0
- package/dist/chunk-PTAPPOKU.mjs.map +1 -0
- package/dist/chunk-PVTBM7V7.mjs +316 -0
- package/dist/chunk-PVTBM7V7.mjs.map +1 -0
- package/dist/chunk-Q5WVLK2L.mjs +77 -0
- package/dist/chunk-Q5WVLK2L.mjs.map +1 -0
- package/dist/chunk-RKSB2N5L.mjs +206 -0
- package/dist/chunk-RKSB2N5L.mjs.map +1 -0
- package/dist/chunk-S4DGVKBK.mjs +151 -0
- package/dist/chunk-S4DGVKBK.mjs.map +1 -0
- package/dist/chunk-S4T4PU7F.mjs +114 -0
- package/dist/chunk-S4T4PU7F.mjs.map +1 -0
- package/dist/chunk-SZPZOGPC.mjs +394 -0
- package/dist/chunk-SZPZOGPC.mjs.map +1 -0
- package/dist/chunk-T546XBQG.mjs +443 -0
- package/dist/chunk-T546XBQG.mjs.map +1 -0
- package/dist/chunk-UWTT5AE6.mjs +145 -0
- package/dist/chunk-UWTT5AE6.mjs.map +1 -0
- package/dist/chunk-V5UFWYFI.mjs +255 -0
- package/dist/chunk-V5UFWYFI.mjs.map +1 -0
- package/dist/chunk-VUPGBB5X.mjs +150 -0
- package/dist/chunk-VUPGBB5X.mjs.map +1 -0
- package/dist/chunk-W6YNEU53.mjs +175 -0
- package/dist/chunk-W6YNEU53.mjs.map +1 -0
- package/dist/chunk-WWSN5YME.mjs +222 -0
- package/dist/chunk-WWSN5YME.mjs.map +1 -0
- package/dist/chunk-XK52LYR4.mjs +182 -0
- package/dist/chunk-XK52LYR4.mjs.map +1 -0
- package/dist/chunk-YIAH6KHV.mjs +164 -0
- package/dist/chunk-YIAH6KHV.mjs.map +1 -0
- package/dist/chunk-Z6JWWCNL.mjs +108 -0
- package/dist/chunk-Z6JWWCNL.mjs.map +1 -0
- package/dist/chunk-ZDRUTJ4T.mjs +119 -0
- package/dist/chunk-ZDRUTJ4T.mjs.map +1 -0
- package/dist/components/accordion.mjs +19 -0
- package/dist/components/accordion.mjs.map +1 -0
- package/dist/components/alert.mjs +15 -0
- package/dist/components/alert.mjs.map +1 -0
- package/dist/components/avatar.mjs +23 -0
- package/dist/components/avatar.mjs.map +1 -0
- package/dist/components/badge.mjs +11 -0
- package/dist/components/badge.mjs.map +1 -0
- package/dist/components/breadcrumb.mjs +23 -0
- package/dist/components/breadcrumb.mjs.map +1 -0
- package/dist/components/button-group.mjs +11 -0
- package/dist/components/button-group.mjs.map +1 -0
- package/dist/components/button.mjs +12 -0
- package/dist/components/button.mjs.map +1 -0
- package/dist/components/card.mjs +25 -0
- package/dist/components/card.mjs.map +1 -0
- package/dist/components/chat-input.mjs +15 -0
- package/dist/components/chat-input.mjs.map +1 -0
- package/dist/components/chat-message.mjs +17 -0
- package/dist/components/chat-message.mjs.map +1 -0
- package/dist/components/checkbox.mjs +12 -0
- package/dist/components/checkbox.mjs.map +1 -0
- package/dist/components/divider.mjs +11 -0
- package/dist/components/divider.mjs.map +1 -0
- package/dist/components/drawer.mjs +33 -0
- package/dist/components/drawer.mjs.map +1 -0
- package/dist/components/dropdown.mjs +35 -0
- package/dist/components/dropdown.mjs.map +1 -0
- package/dist/components/field.mjs +17 -0
- package/dist/components/field.mjs.map +1 -0
- package/dist/components/icon-button.mjs +12 -0
- package/dist/components/icon-button.mjs.map +1 -0
- package/dist/components/input.mjs +12 -0
- package/dist/components/input.mjs.map +1 -0
- package/dist/components/metric-card.mjs +23 -0
- package/dist/components/metric-card.mjs.map +1 -0
- package/dist/components/modal.mjs +57 -0
- package/dist/components/modal.mjs.map +1 -0
- package/dist/components/navigation-menu.mjs +27 -0
- package/dist/components/navigation-menu.mjs.map +1 -0
- package/dist/components/pagination.mjs +33 -0
- package/dist/components/pagination.mjs.map +1 -0
- package/dist/components/popover.mjs +23 -0
- package/dist/components/popover.mjs.map +1 -0
- package/dist/components/progress.mjs +11 -0
- package/dist/components/progress.mjs.map +1 -0
- package/dist/components/quick-reply.mjs +15 -0
- package/dist/components/quick-reply.mjs.map +1 -0
- package/dist/components/radio-group.mjs +16 -0
- package/dist/components/radio-group.mjs.map +1 -0
- package/dist/components/segmented.mjs +15 -0
- package/dist/components/segmented.mjs.map +1 -0
- package/dist/components/select.mjs +23 -0
- package/dist/components/select.mjs.map +1 -0
- package/dist/components/skeleton.mjs +11 -0
- package/dist/components/skeleton.mjs.map +1 -0
- package/dist/components/slider.mjs +11 -0
- package/dist/components/slider.mjs.map +1 -0
- package/dist/components/spinner.mjs +11 -0
- package/dist/components/spinner.mjs.map +1 -0
- package/dist/components/switch.mjs +12 -0
- package/dist/components/switch.mjs.map +1 -0
- package/dist/components/table.mjs +23 -0
- package/dist/components/table.mjs.map +1 -0
- package/dist/components/tabs.mjs +19 -0
- package/dist/components/tabs.mjs.map +1 -0
- package/dist/components/textarea.mjs +12 -0
- package/dist/components/textarea.mjs.map +1 -0
- package/dist/components/toast.mjs +13 -0
- package/dist/components/toast.mjs.map +1 -0
- package/dist/components/toggle-group.mjs +15 -0
- package/dist/components/toggle-group.mjs.map +1 -0
- package/dist/components/toggle.mjs +11 -0
- package/dist/components/toggle.mjs.map +1 -0
- package/dist/components/tooltip.mjs +21 -0
- package/dist/components/tooltip.mjs.map +1 -0
- package/dist/components/typing-indicator.mjs +11 -0
- package/dist/components/typing-indicator.mjs.map +1 -0
- package/dist/index.js +22 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +296 -7521
- package/dist/index.mjs.map +1 -1
- package/llms.txt +29 -25
- package/package.json +4 -3
- package/dist/chart.d.mts +0 -147
- package/dist/index.d.mts +0 -1535
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "./chunk-53MIUPSY.mjs";
|
|
5
|
+
|
|
6
|
+
// src/components/ui/breadcrumb.tsx
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
9
|
+
var BreadcrumbContext = React.createContext({});
|
|
10
|
+
var useBreadcrumbContext = () => React.useContext(BreadcrumbContext);
|
|
11
|
+
function ChevronRightIcon({ className }) {
|
|
12
|
+
return /* @__PURE__ */ React.createElement(
|
|
13
|
+
"svg",
|
|
14
|
+
{
|
|
15
|
+
className,
|
|
16
|
+
fill: "none",
|
|
17
|
+
viewBox: "0 0 24 24",
|
|
18
|
+
stroke: "currentColor",
|
|
19
|
+
strokeWidth: 2
|
|
20
|
+
},
|
|
21
|
+
/* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" })
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
function EllipsisIcon({ className }) {
|
|
25
|
+
return /* @__PURE__ */ React.createElement(
|
|
26
|
+
"svg",
|
|
27
|
+
{
|
|
28
|
+
className,
|
|
29
|
+
fill: "currentColor",
|
|
30
|
+
viewBox: "0 0 24 24"
|
|
31
|
+
},
|
|
32
|
+
/* @__PURE__ */ React.createElement("circle", { cx: "6", cy: "12", r: "1.5" }),
|
|
33
|
+
/* @__PURE__ */ React.createElement("circle", { cx: "12", cy: "12", r: "1.5" }),
|
|
34
|
+
/* @__PURE__ */ React.createElement("circle", { cx: "18", cy: "12", r: "1.5" })
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
var breadcrumbSizeMap = {
|
|
38
|
+
sm: { text: "text-xs", icon: "icon-xs", gap: "gap-1.5" },
|
|
39
|
+
default: { text: "text-sm", icon: "icon-xs", gap: "gap-2" },
|
|
40
|
+
lg: { text: "text-md", icon: "icon-sm", gap: "gap-2" }
|
|
41
|
+
};
|
|
42
|
+
var Breadcrumb = React.forwardRef(
|
|
43
|
+
({ className, separator, size = "default", ...props }, ref) => /* @__PURE__ */ React.createElement(BreadcrumbContext.Provider, { value: { size, separator } }, /* @__PURE__ */ React.createElement(
|
|
44
|
+
"nav",
|
|
45
|
+
{
|
|
46
|
+
ref,
|
|
47
|
+
"aria-label": "breadcrumb",
|
|
48
|
+
className: cn("", className),
|
|
49
|
+
...props
|
|
50
|
+
}
|
|
51
|
+
))
|
|
52
|
+
);
|
|
53
|
+
Breadcrumb.displayName = "Breadcrumb";
|
|
54
|
+
var BreadcrumbList = React.forwardRef(
|
|
55
|
+
({ className, ...props }, ref) => {
|
|
56
|
+
const { size = "default" } = useBreadcrumbContext();
|
|
57
|
+
const sizeClass = breadcrumbSizeMap[size];
|
|
58
|
+
return /* @__PURE__ */ React.createElement(
|
|
59
|
+
"ol",
|
|
60
|
+
{
|
|
61
|
+
ref,
|
|
62
|
+
className: cn(
|
|
63
|
+
"flex flex-wrap items-center",
|
|
64
|
+
sizeClass.gap,
|
|
65
|
+
sizeClass.text,
|
|
66
|
+
"text-text-muted",
|
|
67
|
+
className
|
|
68
|
+
),
|
|
69
|
+
...props
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
BreadcrumbList.displayName = "BreadcrumbList";
|
|
75
|
+
var BreadcrumbItem = React.forwardRef(
|
|
76
|
+
({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
77
|
+
"li",
|
|
78
|
+
{
|
|
79
|
+
ref,
|
|
80
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
81
|
+
...props
|
|
82
|
+
}
|
|
83
|
+
)
|
|
84
|
+
);
|
|
85
|
+
BreadcrumbItem.displayName = "BreadcrumbItem";
|
|
86
|
+
var BreadcrumbLink = React.forwardRef(
|
|
87
|
+
({ asChild, className, ...props }, ref) => {
|
|
88
|
+
const Comp = asChild ? Slot : "a";
|
|
89
|
+
return /* @__PURE__ */ React.createElement(
|
|
90
|
+
Comp,
|
|
91
|
+
{
|
|
92
|
+
ref,
|
|
93
|
+
className: cn(
|
|
94
|
+
"transition-colors duration-fast hover:text-foreground",
|
|
95
|
+
className
|
|
96
|
+
),
|
|
97
|
+
...props
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
BreadcrumbLink.displayName = "BreadcrumbLink";
|
|
103
|
+
var BreadcrumbPage = React.forwardRef(
|
|
104
|
+
({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
105
|
+
"span",
|
|
106
|
+
{
|
|
107
|
+
ref,
|
|
108
|
+
role: "link",
|
|
109
|
+
"aria-disabled": "true",
|
|
110
|
+
"aria-current": "page",
|
|
111
|
+
className: cn("text-foreground", className),
|
|
112
|
+
...props
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
);
|
|
116
|
+
BreadcrumbPage.displayName = "BreadcrumbPage";
|
|
117
|
+
var BreadcrumbSeparator = React.forwardRef(
|
|
118
|
+
({ children, className, ...props }, ref) => {
|
|
119
|
+
const { separator, size = "default" } = useBreadcrumbContext();
|
|
120
|
+
const sizeClass = breadcrumbSizeMap[size];
|
|
121
|
+
return /* @__PURE__ */ React.createElement(
|
|
122
|
+
"li",
|
|
123
|
+
{
|
|
124
|
+
ref,
|
|
125
|
+
role: "presentation",
|
|
126
|
+
"aria-hidden": "true",
|
|
127
|
+
className: cn("flex items-center text-text-subtle", className),
|
|
128
|
+
...props
|
|
129
|
+
},
|
|
130
|
+
children ?? separator ?? /* @__PURE__ */ React.createElement(ChevronRightIcon, { className: sizeClass.icon })
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
|
|
135
|
+
var BreadcrumbEllipsis = React.forwardRef(
|
|
136
|
+
({ className, ...props }, ref) => {
|
|
137
|
+
const { size = "default" } = useBreadcrumbContext();
|
|
138
|
+
const sizeClass = breadcrumbSizeMap[size];
|
|
139
|
+
return /* @__PURE__ */ React.createElement(
|
|
140
|
+
"span",
|
|
141
|
+
{
|
|
142
|
+
ref,
|
|
143
|
+
role: "presentation",
|
|
144
|
+
"aria-hidden": "true",
|
|
145
|
+
className: cn("flex items-center justify-center", className),
|
|
146
|
+
...props
|
|
147
|
+
},
|
|
148
|
+
/* @__PURE__ */ React.createElement(EllipsisIcon, { className: sizeClass.icon }),
|
|
149
|
+
/* @__PURE__ */ React.createElement("span", { className: "sr-only" }, "More")
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
|
|
154
|
+
|
|
155
|
+
export {
|
|
156
|
+
breadcrumbSizeMap,
|
|
157
|
+
Breadcrumb,
|
|
158
|
+
BreadcrumbList,
|
|
159
|
+
BreadcrumbItem,
|
|
160
|
+
BreadcrumbLink,
|
|
161
|
+
BreadcrumbPage,
|
|
162
|
+
BreadcrumbSeparator,
|
|
163
|
+
BreadcrumbEllipsis
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=chunk-NWFMJWGX.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/breadcrumb.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cn } from '@/lib/utils'\n\n// ─── Context ──────────────────────────────────────────────\n\ntype BreadcrumbContextValue = {\n size?: 'sm' | 'default' | 'lg'\n separator?: React.ReactNode\n}\n\nconst BreadcrumbContext = React.createContext<BreadcrumbContextValue>({})\nconst useBreadcrumbContext = () => React.useContext(BreadcrumbContext)\n\n// ─── Default Separator Icon ───────────────────────────────\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\n// ─── Ellipsis Icon ────────────────────────────────────────\n\nfunction EllipsisIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"18\" cy=\"12\" r=\"1.5\" />\n </svg>\n )\n}\n\n// ─── Breadcrumb (Root) ────────────────────────────────────\n\nconst breadcrumbSizeMap = {\n sm: { text: 'text-xs', icon: 'icon-xs', gap: 'gap-1.5' },\n default: { text: 'text-sm', icon: 'icon-xs', gap: 'gap-2' },\n lg: { text: 'text-md', icon: 'icon-sm', gap: 'gap-2' },\n} as const\n\nexport interface BreadcrumbProps extends React.ComponentPropsWithoutRef<'nav'> {\n /** Separator element between items */\n separator?: React.ReactNode\n /** Size of the breadcrumb */\n size?: 'sm' | 'default' | 'lg'\n /** Max items before collapsing (undefined = no collapse) */\n maxItems?: number\n /** Items visible before the ellipsis when collapsed */\n itemsBeforeCollapse?: number\n /** Items visible after the ellipsis when collapsed */\n itemsAfterCollapse?: number\n}\n\nconst Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, separator, size = 'default', ...props }, ref) => (\n <BreadcrumbContext.Provider value={{ size, separator }}>\n <nav\n ref={ref}\n aria-label=\"breadcrumb\"\n className={cn('', className)}\n {...props}\n />\n </BreadcrumbContext.Provider>\n )\n)\nBreadcrumb.displayName = 'Breadcrumb'\n\n// ─── BreadcrumbList ───────────────────────────────────────\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<'ol'>>(\n ({ className, ...props }, ref) => {\n const { size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center',\n sizeClass.gap,\n sizeClass.text,\n 'text-text-muted',\n className\n )}\n {...props}\n />\n )\n }\n)\nBreadcrumbList.displayName = 'BreadcrumbList'\n\n// ─── BreadcrumbItem ───────────────────────────────────────\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n )\n)\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\n// ─── BreadcrumbLink ───────────────────────────────────────\n\nexport interface BreadcrumbLinkProps extends React.ComponentPropsWithoutRef<'a'> {\n /** Use Radix Slot to compose with custom link components */\n asChild?: boolean\n}\n\nconst BreadcrumbLink = React.forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n ({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n return (\n <Comp\n ref={ref}\n className={cn(\n 'transition-colors duration-fast hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n }\n)\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\n// ─── BreadcrumbPage ───────────────────────────────────────\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<'span'>>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-foreground', className)}\n {...props}\n />\n )\n)\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\n// ─── BreadcrumbSeparator ──────────────────────────────────\n\nconst BreadcrumbSeparator = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ children, className, ...props }, ref) => {\n const { separator, size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex items-center text-text-subtle', className)}\n {...props}\n >\n {children ?? separator ?? <ChevronRightIcon className={sizeClass.icon} />}\n </li>\n )\n }\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\n// ─── BreadcrumbEllipsis ───────────────────────────────────\n\nexport interface BreadcrumbEllipsisProps extends React.ComponentPropsWithoutRef<'span'> {}\n\nconst BreadcrumbEllipsis = React.forwardRef<HTMLSpanElement, BreadcrumbEllipsisProps>(\n ({ className, ...props }, ref) => {\n const { size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex items-center justify-center', className)}\n {...props}\n >\n <EllipsisIcon className={sizeClass.icon} />\n <span className=\"sr-only\">More</span>\n </span>\n )\n }\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis'\n\n// ─── Exports ──────────────────────────────────────────────\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n breadcrumbSizeMap,\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "./chunk-53MIUPSY.mjs";
|
|
5
|
+
|
|
6
|
+
// src/components/ui/divider.tsx
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
9
|
+
import { cva } from "class-variance-authority";
|
|
10
|
+
var dividerVariants = cva("shrink-0", {
|
|
11
|
+
variants: {
|
|
12
|
+
orientation: {
|
|
13
|
+
horizontal: "w-full",
|
|
14
|
+
vertical: "h-full self-stretch"
|
|
15
|
+
},
|
|
16
|
+
variant: {
|
|
17
|
+
solid: "border-solid",
|
|
18
|
+
dashed: "border-dashed",
|
|
19
|
+
dotted: "border-dotted"
|
|
20
|
+
},
|
|
21
|
+
color: {
|
|
22
|
+
default: "border-border/60",
|
|
23
|
+
muted: "border-border-subtle",
|
|
24
|
+
strong: "border-border-strong"
|
|
25
|
+
},
|
|
26
|
+
spacing: {
|
|
27
|
+
sm: "",
|
|
28
|
+
md: "",
|
|
29
|
+
default: "",
|
|
30
|
+
lg: ""
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
compoundVariants: [
|
|
34
|
+
// Horizontal spacing
|
|
35
|
+
{ orientation: "horizontal", spacing: "sm", className: "my-2" },
|
|
36
|
+
{ orientation: "horizontal", spacing: "md", className: "my-3" },
|
|
37
|
+
{ orientation: "horizontal", spacing: "default", className: "my-4" },
|
|
38
|
+
{ orientation: "horizontal", spacing: "lg", className: "my-8" },
|
|
39
|
+
// Vertical spacing
|
|
40
|
+
{ orientation: "vertical", spacing: "sm", className: "mx-2" },
|
|
41
|
+
{ orientation: "vertical", spacing: "md", className: "mx-3" },
|
|
42
|
+
{ orientation: "vertical", spacing: "default", className: "mx-4" },
|
|
43
|
+
{ orientation: "vertical", spacing: "lg", className: "mx-8" },
|
|
44
|
+
// Horizontal line style (border-top)
|
|
45
|
+
{ orientation: "horizontal", className: "border-t border-l-0" },
|
|
46
|
+
// Vertical line style (border-left)
|
|
47
|
+
{ orientation: "vertical", className: "border-l border-t-0" }
|
|
48
|
+
],
|
|
49
|
+
defaultVariants: {
|
|
50
|
+
orientation: "horizontal",
|
|
51
|
+
variant: "solid",
|
|
52
|
+
color: "default",
|
|
53
|
+
spacing: "default"
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
var Divider = React.forwardRef(({
|
|
57
|
+
className,
|
|
58
|
+
orientation = "horizontal",
|
|
59
|
+
variant = "solid",
|
|
60
|
+
color = "default",
|
|
61
|
+
spacing = "default",
|
|
62
|
+
label,
|
|
63
|
+
labelPosition = "center",
|
|
64
|
+
decorative = true,
|
|
65
|
+
...props
|
|
66
|
+
}, ref) => {
|
|
67
|
+
const lineClass = cn(
|
|
68
|
+
"flex-1",
|
|
69
|
+
variant === "dashed" ? "border-dashed" : variant === "dotted" ? "border-dotted" : "border-solid",
|
|
70
|
+
color === "muted" ? "border-border-subtle" : color === "strong" ? "border-border-strong" : "border-border/60",
|
|
71
|
+
"border-t"
|
|
72
|
+
);
|
|
73
|
+
const spacingClass = spacing === "sm" ? "my-2" : spacing === "md" ? "my-3" : spacing === "lg" ? "my-8" : "my-4";
|
|
74
|
+
if (label && orientation === "horizontal") {
|
|
75
|
+
return /* @__PURE__ */ React.createElement(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
role: decorative ? "none" : "separator",
|
|
79
|
+
"aria-orientation": "horizontal",
|
|
80
|
+
className: cn(
|
|
81
|
+
"flex items-center w-full",
|
|
82
|
+
spacingClass,
|
|
83
|
+
className
|
|
84
|
+
)
|
|
85
|
+
},
|
|
86
|
+
/* @__PURE__ */ React.createElement("div", { className: cn(
|
|
87
|
+
lineClass,
|
|
88
|
+
labelPosition === "left" ? "max-w-[10%]" : ""
|
|
89
|
+
) }),
|
|
90
|
+
/* @__PURE__ */ React.createElement("span", { className: "px-3 text-sm text-text-muted shrink-0 select-none" }, label),
|
|
91
|
+
/* @__PURE__ */ React.createElement("div", { className: cn(
|
|
92
|
+
lineClass,
|
|
93
|
+
labelPosition === "right" ? "max-w-[10%]" : ""
|
|
94
|
+
) })
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return /* @__PURE__ */ React.createElement(
|
|
98
|
+
SeparatorPrimitive.Root,
|
|
99
|
+
{
|
|
100
|
+
ref,
|
|
101
|
+
decorative,
|
|
102
|
+
orientation,
|
|
103
|
+
className: cn(
|
|
104
|
+
dividerVariants({ orientation, variant, color, spacing }),
|
|
105
|
+
className
|
|
106
|
+
),
|
|
107
|
+
...props
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
});
|
|
111
|
+
Divider.displayName = "Divider";
|
|
112
|
+
|
|
113
|
+
export {
|
|
114
|
+
dividerVariants,
|
|
115
|
+
Divider
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=chunk-PTAPPOKU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/divider.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SeparatorPrimitive from '@radix-ui/react-separator'\nimport { cva } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\n// ─── Divider ─────────────────────────────────────────────────\n\nconst dividerVariants = cva('shrink-0', {\n variants: {\n orientation: {\n horizontal: 'w-full',\n vertical: 'h-full self-stretch',\n },\n variant: {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n },\n color: {\n default: 'border-border/60',\n muted: 'border-border-subtle',\n strong: 'border-border-strong',\n },\n spacing: {\n sm: '',\n md: '',\n default: '',\n lg: '',\n },\n },\n compoundVariants: [\n // Horizontal spacing\n { orientation: 'horizontal', spacing: 'sm', className: 'my-2' },\n { orientation: 'horizontal', spacing: 'md', className: 'my-3' },\n { orientation: 'horizontal', spacing: 'default', className: 'my-4' },\n { orientation: 'horizontal', spacing: 'lg', className: 'my-8' },\n // Vertical spacing\n { orientation: 'vertical', spacing: 'sm', className: 'mx-2' },\n { orientation: 'vertical', spacing: 'md', className: 'mx-3' },\n { orientation: 'vertical', spacing: 'default', className: 'mx-4' },\n { orientation: 'vertical', spacing: 'lg', className: 'mx-8' },\n // Horizontal line style (border-top)\n { orientation: 'horizontal', className: 'border-t border-l-0' },\n // Vertical line style (border-left)\n { orientation: 'vertical', className: 'border-l border-t-0' },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n variant: 'solid',\n color: 'default',\n spacing: 'default',\n },\n})\n\nexport interface DividerProps\n extends Omit<React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>, 'children' | 'color' | 'orientation'> {\n /** Direction of the divider */\n orientation?: 'horizontal' | 'vertical'\n /** Line style */\n variant?: 'solid' | 'dashed' | 'dotted'\n /** Line color intensity */\n color?: 'default' | 'muted' | 'strong'\n /** Spacing around the divider */\n spacing?: 'sm' | 'md' | 'default' | 'lg'\n /** Content to display on the divider line (horizontal only) */\n label?: React.ReactNode\n /** Label position along the line */\n labelPosition?: 'left' | 'center' | 'right'\n}\n\nconst Divider = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n DividerProps\n>(({\n className,\n orientation = 'horizontal',\n variant = 'solid',\n color = 'default',\n spacing = 'default',\n label,\n labelPosition = 'center',\n decorative = true,\n ...props\n}, ref) => {\n // Line style class for label mode\n const lineClass = cn(\n 'flex-1',\n variant === 'dashed' ? 'border-dashed' : variant === 'dotted' ? 'border-dotted' : 'border-solid',\n color === 'muted' ? 'border-border-subtle' : color === 'strong' ? 'border-border-strong' : 'border-border/60',\n 'border-t'\n )\n\n // Spacing class for label wrapper\n const spacingClass =\n spacing === 'sm' ? 'my-2'\n : spacing === 'md' ? 'my-3'\n : spacing === 'lg' ? 'my-8'\n : 'my-4'\n\n // Horizontal with label: render as flex container with two lines\n if (label && orientation === 'horizontal') {\n return (\n <div\n role={decorative ? 'none' : 'separator'}\n aria-orientation=\"horizontal\"\n className={cn(\n 'flex items-center w-full',\n spacingClass,\n className\n )}\n >\n <div className={cn(\n lineClass,\n labelPosition === 'left' ? 'max-w-[10%]' : ''\n )} />\n <span className=\"px-3 text-sm text-text-muted shrink-0 select-none\">{label}</span>\n <div className={cn(\n lineClass,\n labelPosition === 'right' ? 'max-w-[10%]' : ''\n )} />\n </div>\n )\n }\n\n // Default: Radix Separator\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n dividerVariants({ orientation, variant, color, spacing }),\n className\n )}\n {...props}\n />\n )\n})\nDivider.displayName = 'Divider'\n\n// ─── Exports ─────────────────────────────────────────────────\n\nexport { Divider, dividerVariants }\n"],"mappings":";;;;;;AAEA,YAAY,WAAW;AACvB,YAAY,wBAAwB;AACpC,SAAS,WAAW;AAKpB,IAAM,kBAAkB,IAAI,YAAY;AAAA,EACtC,UAAU;AAAA,IACR,aAAa;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA;AAAA,IAEhB,EAAE,aAAa,cAAc,SAAS,MAAM,WAAW,OAAO;AAAA,IAC9D,EAAE,aAAa,cAAc,SAAS,MAAM,WAAW,OAAO;AAAA,IAC9D,EAAE,aAAa,cAAc,SAAS,WAAW,WAAW,OAAO;AAAA,IACnE,EAAE,aAAa,cAAc,SAAS,MAAM,WAAW,OAAO;AAAA;AAAA,IAE9D,EAAE,aAAa,YAAY,SAAS,MAAM,WAAW,OAAO;AAAA,IAC5D,EAAE,aAAa,YAAY,SAAS,MAAM,WAAW,OAAO;AAAA,IAC5D,EAAE,aAAa,YAAY,SAAS,WAAW,WAAW,OAAO;AAAA,IACjE,EAAE,aAAa,YAAY,SAAS,MAAM,WAAW,OAAO;AAAA;AAAA,IAE5D,EAAE,aAAa,cAAc,WAAW,sBAAsB;AAAA;AAAA,IAE9D,EAAE,aAAa,YAAY,WAAW,sBAAsB;AAAA,EAC9D;AAAA,EACA,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AACF,CAAC;AAkBD,IAAM,UAAgB,iBAGpB,CAAC;AAAA,EACD;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,GAAG;AACL,GAAG,QAAQ;AAET,QAAM,YAAY;AAAA,IAChB;AAAA,IACA,YAAY,WAAW,kBAAkB,YAAY,WAAW,kBAAkB;AAAA,IAClF,UAAU,UAAU,yBAAyB,UAAU,WAAW,yBAAyB;AAAA,IAC3F;AAAA,EACF;AAGA,QAAM,eACJ,YAAY,OAAO,SACjB,YAAY,OAAO,SACnB,YAAY,OAAO,SACnB;AAGJ,MAAI,SAAS,gBAAgB,cAAc;AACzC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,aAAa,SAAS;AAAA,QAC5B,oBAAiB;AAAA,QACjB,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA;AAAA,MAEA,oCAAC,SAAI,WAAW;AAAA,QACd;AAAA,QACA,kBAAkB,SAAS,gBAAgB;AAAA,MAC7C,GAAG;AAAA,MACH,oCAAC,UAAK,WAAU,uDAAqD,KAAM;AAAA,MAC3E,oCAAC,SAAI,WAAW;AAAA,QACd;AAAA,QACA,kBAAkB,UAAU,gBAAgB;AAAA,MAC9C,GAAG;AAAA,IACL;AAAA,EAEJ;AAGA,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,gBAAgB,EAAE,aAAa,SAAS,OAAO,QAAQ,CAAC;AAAA,QACxD;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;AACD,QAAQ,cAAc;","names":[]}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "./chunk-53MIUPSY.mjs";
|
|
5
|
+
|
|
6
|
+
// src/components/ui/card.tsx
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
9
|
+
import { cva } from "class-variance-authority";
|
|
10
|
+
var CardContext = React.createContext({
|
|
11
|
+
size: "default",
|
|
12
|
+
direction: "vertical"
|
|
13
|
+
});
|
|
14
|
+
function useCard() {
|
|
15
|
+
return React.useContext(CardContext);
|
|
16
|
+
}
|
|
17
|
+
var cardVariants = cva(
|
|
18
|
+
"flex overflow-hidden transition-all duration-normal",
|
|
19
|
+
{
|
|
20
|
+
variants: {
|
|
21
|
+
variant: {
|
|
22
|
+
default: "bg-background-paper border border-border-subtle shadow-sm",
|
|
23
|
+
outline: "bg-background-paper border border-border",
|
|
24
|
+
ghost: "bg-transparent"
|
|
25
|
+
},
|
|
26
|
+
size: {
|
|
27
|
+
sm: "",
|
|
28
|
+
default: "",
|
|
29
|
+
lg: ""
|
|
30
|
+
},
|
|
31
|
+
radius: {
|
|
32
|
+
sm: "rounded-sm",
|
|
33
|
+
// 2px
|
|
34
|
+
base: "rounded",
|
|
35
|
+
// 4px
|
|
36
|
+
md: "rounded-md",
|
|
37
|
+
// 6px
|
|
38
|
+
lg: "rounded-lg",
|
|
39
|
+
// 8px
|
|
40
|
+
xl: "rounded-xl",
|
|
41
|
+
// 12px
|
|
42
|
+
"2xl": "rounded-2xl"
|
|
43
|
+
// 16px
|
|
44
|
+
},
|
|
45
|
+
direction: {
|
|
46
|
+
vertical: "flex-col",
|
|
47
|
+
horizontal: "flex-row"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
defaultVariants: {
|
|
51
|
+
variant: "default",
|
|
52
|
+
size: "default",
|
|
53
|
+
radius: "xl",
|
|
54
|
+
direction: "vertical"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
var Card = React.forwardRef(
|
|
59
|
+
({
|
|
60
|
+
className,
|
|
61
|
+
variant = "default",
|
|
62
|
+
size = "default",
|
|
63
|
+
radius = "xl",
|
|
64
|
+
direction = "vertical",
|
|
65
|
+
interactive = false,
|
|
66
|
+
asChild = false,
|
|
67
|
+
children,
|
|
68
|
+
...props
|
|
69
|
+
}, ref) => {
|
|
70
|
+
const Comp = asChild ? Slot : "div";
|
|
71
|
+
let content = children;
|
|
72
|
+
if (direction === "horizontal") {
|
|
73
|
+
const childArray = React.Children.toArray(children);
|
|
74
|
+
const imageChildren = [];
|
|
75
|
+
const otherChildren = [];
|
|
76
|
+
childArray.forEach((child) => {
|
|
77
|
+
if (React.isValidElement(child) && child.type === CardImage) {
|
|
78
|
+
imageChildren.push(child);
|
|
79
|
+
} else {
|
|
80
|
+
otherChildren.push(child);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
content = /* @__PURE__ */ React.createElement(React.Fragment, null, imageChildren, /* @__PURE__ */ React.createElement("div", { className: "flex-1 flex flex-col min-w-0" }, otherChildren));
|
|
84
|
+
}
|
|
85
|
+
return /* @__PURE__ */ React.createElement(CardContext.Provider, { value: { size, direction } }, /* @__PURE__ */ React.createElement(
|
|
86
|
+
Comp,
|
|
87
|
+
{
|
|
88
|
+
ref,
|
|
89
|
+
className: cn(
|
|
90
|
+
cardVariants({ variant, size, radius, direction }),
|
|
91
|
+
interactive && "cursor-pointer hover:shadow-md hover:-translate-y-0.5",
|
|
92
|
+
className
|
|
93
|
+
),
|
|
94
|
+
...props
|
|
95
|
+
},
|
|
96
|
+
content
|
|
97
|
+
));
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
Card.displayName = "Card";
|
|
101
|
+
var sizePaddingXMap = {
|
|
102
|
+
sm: "px-4",
|
|
103
|
+
// 16px
|
|
104
|
+
default: "px-4 sm:px-6",
|
|
105
|
+
// 16px → 24px
|
|
106
|
+
lg: "px-6 sm:px-8"
|
|
107
|
+
// 24px → 32px
|
|
108
|
+
};
|
|
109
|
+
var sizePaddingYMap = {
|
|
110
|
+
sm: "py-3",
|
|
111
|
+
// 12px
|
|
112
|
+
default: "py-3 sm:py-4",
|
|
113
|
+
// 12px → 16px
|
|
114
|
+
lg: "py-4 sm:py-5"
|
|
115
|
+
// 16px → 20px
|
|
116
|
+
};
|
|
117
|
+
var sizePaddingTMap = {
|
|
118
|
+
sm: "pt-5",
|
|
119
|
+
// 20px
|
|
120
|
+
default: "pt-5 sm:pt-6",
|
|
121
|
+
// 20px → 24px
|
|
122
|
+
lg: "pt-6 sm:pt-8"
|
|
123
|
+
// 24px → 32px
|
|
124
|
+
};
|
|
125
|
+
var sizeInnerPbMap = {
|
|
126
|
+
sm: "pb-3",
|
|
127
|
+
// 12px
|
|
128
|
+
default: "pb-3 sm:pb-4",
|
|
129
|
+
// 12px → 16px
|
|
130
|
+
lg: "pb-3 sm:pb-4"
|
|
131
|
+
// 12px → 16px (default와 동일)
|
|
132
|
+
};
|
|
133
|
+
var sizeLastPbMap = {
|
|
134
|
+
sm: "last:pb-5",
|
|
135
|
+
// 20px
|
|
136
|
+
default: "last:pb-5 sm:last:pb-6",
|
|
137
|
+
// 20px → 24px
|
|
138
|
+
lg: "last:pb-6 sm:last:pb-8"
|
|
139
|
+
// 24px → 32px
|
|
140
|
+
};
|
|
141
|
+
var overlayOpacityMap = {
|
|
142
|
+
10: "from-black/10",
|
|
143
|
+
20: "from-black/20",
|
|
144
|
+
30: "from-black/30",
|
|
145
|
+
40: "from-black/40",
|
|
146
|
+
50: "from-black/50",
|
|
147
|
+
60: "from-black/60",
|
|
148
|
+
70: "from-black/70",
|
|
149
|
+
80: "from-black/80",
|
|
150
|
+
90: "from-black/90"
|
|
151
|
+
};
|
|
152
|
+
var CardImage = React.forwardRef(
|
|
153
|
+
({ className, overlay = false, overlayOpacity = 60, overlayClassName, alt = "", ...props }, ref) => {
|
|
154
|
+
const { direction } = useCard();
|
|
155
|
+
const isHorizontal = direction === "horizontal";
|
|
156
|
+
if (isHorizontal) {
|
|
157
|
+
const opacityClass = overlay ? overlayOpacityMap[overlayOpacity] || "from-black/60" : null;
|
|
158
|
+
return /* @__PURE__ */ React.createElement("div", { className: cn("relative shrink-0 w-48 overflow-hidden", className) }, /* @__PURE__ */ React.createElement(
|
|
159
|
+
"img",
|
|
160
|
+
{
|
|
161
|
+
ref,
|
|
162
|
+
alt,
|
|
163
|
+
className: "absolute inset-0 w-full h-full object-cover",
|
|
164
|
+
...props
|
|
165
|
+
}
|
|
166
|
+
), overlay && /* @__PURE__ */ React.createElement("div", { className: cn("absolute inset-0 bg-gradient-to-t to-transparent", overlayClassName || opacityClass) }));
|
|
167
|
+
}
|
|
168
|
+
if (overlay) {
|
|
169
|
+
const opacityClass = overlayOpacityMap[overlayOpacity] || "from-black/60";
|
|
170
|
+
return /* @__PURE__ */ React.createElement("div", { className: "relative w-full shrink-0 overflow-hidden" }, /* @__PURE__ */ React.createElement(
|
|
171
|
+
"img",
|
|
172
|
+
{
|
|
173
|
+
ref,
|
|
174
|
+
alt,
|
|
175
|
+
className: cn("w-full object-cover", className),
|
|
176
|
+
...props
|
|
177
|
+
}
|
|
178
|
+
), /* @__PURE__ */ React.createElement("div", { className: cn("absolute inset-0 bg-gradient-to-t to-transparent", overlayClassName || opacityClass) }));
|
|
179
|
+
}
|
|
180
|
+
return /* @__PURE__ */ React.createElement(
|
|
181
|
+
"img",
|
|
182
|
+
{
|
|
183
|
+
ref,
|
|
184
|
+
alt,
|
|
185
|
+
className: cn("w-full object-cover shrink-0", className),
|
|
186
|
+
...props
|
|
187
|
+
}
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
);
|
|
191
|
+
CardImage.displayName = "CardImage";
|
|
192
|
+
var CardHeader = React.forwardRef(
|
|
193
|
+
({ className, children, ...props }, ref) => {
|
|
194
|
+
const { size } = useCard();
|
|
195
|
+
const childArray = React.Children.toArray(children);
|
|
196
|
+
const actionChildren = [];
|
|
197
|
+
const otherChildren = [];
|
|
198
|
+
childArray.forEach((child) => {
|
|
199
|
+
if (React.isValidElement(child) && child.type === CardAction) {
|
|
200
|
+
actionChildren.push(child);
|
|
201
|
+
} else {
|
|
202
|
+
otherChildren.push(child);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
return /* @__PURE__ */ React.createElement(
|
|
206
|
+
"div",
|
|
207
|
+
{
|
|
208
|
+
ref,
|
|
209
|
+
className: cn(
|
|
210
|
+
"flex items-start gap-3",
|
|
211
|
+
sizePaddingXMap[size],
|
|
212
|
+
sizePaddingTMap[size],
|
|
213
|
+
sizeInnerPbMap[size],
|
|
214
|
+
sizeLastPbMap[size],
|
|
215
|
+
className
|
|
216
|
+
),
|
|
217
|
+
...props
|
|
218
|
+
},
|
|
219
|
+
/* @__PURE__ */ React.createElement("div", { className: "flex-1 min-w-0 space-y-3" }, otherChildren),
|
|
220
|
+
actionChildren
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
);
|
|
224
|
+
CardHeader.displayName = "CardHeader";
|
|
225
|
+
var CardTitle = React.forwardRef(
|
|
226
|
+
({ className, icon, children, ...props }, ref) => {
|
|
227
|
+
return /* @__PURE__ */ React.createElement(
|
|
228
|
+
"h3",
|
|
229
|
+
{
|
|
230
|
+
ref,
|
|
231
|
+
className: cn(
|
|
232
|
+
"text-base font-semibold text-foreground tracking-tight",
|
|
233
|
+
icon && "flex items-center gap-2",
|
|
234
|
+
className
|
|
235
|
+
),
|
|
236
|
+
...props
|
|
237
|
+
},
|
|
238
|
+
icon && /* @__PURE__ */ React.createElement("span", { className: "shrink-0 icon-sm [&>svg]:w-full [&>svg]:h-full", "aria-hidden": "true" }, icon),
|
|
239
|
+
children
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
);
|
|
243
|
+
CardTitle.displayName = "CardTitle";
|
|
244
|
+
var CardDescription = React.forwardRef(
|
|
245
|
+
({ className, ...props }, ref) => {
|
|
246
|
+
return /* @__PURE__ */ React.createElement(
|
|
247
|
+
"p",
|
|
248
|
+
{
|
|
249
|
+
ref,
|
|
250
|
+
className: cn("text-sm text-text-muted", className),
|
|
251
|
+
...props
|
|
252
|
+
}
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
);
|
|
256
|
+
CardDescription.displayName = "CardDescription";
|
|
257
|
+
var CardAction = React.forwardRef(
|
|
258
|
+
({ className, ...props }, ref) => {
|
|
259
|
+
return /* @__PURE__ */ React.createElement(
|
|
260
|
+
"div",
|
|
261
|
+
{
|
|
262
|
+
ref,
|
|
263
|
+
className: cn("shrink-0 ml-auto -mr-2 -mt-2", className),
|
|
264
|
+
...props
|
|
265
|
+
}
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
);
|
|
269
|
+
CardAction.displayName = "CardAction";
|
|
270
|
+
var CardContent = React.forwardRef(
|
|
271
|
+
({ className, ...props }, ref) => {
|
|
272
|
+
const { size } = useCard();
|
|
273
|
+
return /* @__PURE__ */ React.createElement(
|
|
274
|
+
"div",
|
|
275
|
+
{
|
|
276
|
+
ref,
|
|
277
|
+
className: cn(sizePaddingXMap[size], "pb-0", sizeLastPbMap[size], className),
|
|
278
|
+
...props
|
|
279
|
+
}
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
);
|
|
283
|
+
CardContent.displayName = "CardContent";
|
|
284
|
+
var CardFooter = React.forwardRef(
|
|
285
|
+
({ className, ...props }, ref) => {
|
|
286
|
+
const { size } = useCard();
|
|
287
|
+
return /* @__PURE__ */ React.createElement(
|
|
288
|
+
"div",
|
|
289
|
+
{
|
|
290
|
+
ref,
|
|
291
|
+
className: cn(
|
|
292
|
+
"flex items-center gap-2",
|
|
293
|
+
sizePaddingXMap[size],
|
|
294
|
+
sizePaddingYMap[size],
|
|
295
|
+
"mt-auto",
|
|
296
|
+
className
|
|
297
|
+
),
|
|
298
|
+
...props
|
|
299
|
+
}
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
);
|
|
303
|
+
CardFooter.displayName = "CardFooter";
|
|
304
|
+
|
|
305
|
+
export {
|
|
306
|
+
cardVariants,
|
|
307
|
+
Card,
|
|
308
|
+
CardImage,
|
|
309
|
+
CardHeader,
|
|
310
|
+
CardTitle,
|
|
311
|
+
CardDescription,
|
|
312
|
+
CardAction,
|
|
313
|
+
CardContent,
|
|
314
|
+
CardFooter
|
|
315
|
+
};
|
|
316
|
+
//# sourceMappingURL=chunk-PVTBM7V7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/card.tsx"],"sourcesContent":["'use client'\n/* eslint-disable @next/next/no-img-element */\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\n// ── Context for size propagation ──\ntype CardSize = 'sm' | 'default' | 'lg'\ntype CardDirection = 'vertical' | 'horizontal'\n\nconst CardContext = React.createContext<{ size: CardSize; direction: CardDirection }>({\n size: 'default',\n direction: 'vertical',\n})\n\nfunction useCard() {\n return React.useContext(CardContext)\n}\n\n// ── Card (Root) ──\nconst cardVariants = cva(\n 'flex overflow-hidden transition-all duration-normal',\n {\n variants: {\n variant: {\n default: 'bg-background-paper border border-border-subtle shadow-sm',\n outline: 'bg-background-paper border border-border',\n ghost: 'bg-transparent',\n },\n size: {\n sm: '',\n default: '',\n lg: '',\n },\n radius: {\n sm: 'rounded-sm', // 2px\n base: 'rounded', // 4px\n md: 'rounded-md', // 6px\n lg: 'rounded-lg', // 8px\n xl: 'rounded-xl', // 12px\n '2xl': 'rounded-2xl', // 16px\n },\n direction: {\n vertical: 'flex-col',\n horizontal: 'flex-row',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n radius: 'xl',\n direction: 'vertical',\n },\n }\n)\n\nexport type CardVariant = 'default' | 'outline' | 'ghost'\nexport type CardRadius = 'sm' | 'base' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Visual style */\n variant?: CardVariant\n /** Content padding scale */\n size?: CardSize\n /** Border radius */\n radius?: CardRadius\n /** Layout direction */\n direction?: CardDirection\n /** Enable hover effect for interactive cards */\n interactive?: boolean\n /** Render as child element (Slot pattern) */\n asChild?: boolean\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({\n className,\n variant = 'default',\n size = 'default',\n radius = 'xl',\n direction = 'vertical',\n interactive = false,\n asChild = false,\n children,\n ...props\n }, ref) => {\n const Comp = asChild ? Slot : 'div'\n\n // Horizontal: separate CardImage from rest, wrap rest in flex-col\n let content = children\n if (direction === 'horizontal') {\n const childArray = React.Children.toArray(children)\n const imageChildren: React.ReactNode[] = []\n const otherChildren: React.ReactNode[] = []\n\n childArray.forEach((child) => {\n if (React.isValidElement(child) && child.type === CardImage) {\n imageChildren.push(child)\n } else {\n otherChildren.push(child)\n }\n })\n\n content = (\n <>\n {imageChildren}\n <div className=\"flex-1 flex flex-col min-w-0\">\n {otherChildren}\n </div>\n </>\n )\n }\n\n return (\n <CardContext.Provider value={{ size, direction }}>\n <Comp\n ref={ref}\n className={cn(\n cardVariants({ variant, size, radius, direction }),\n interactive && 'cursor-pointer hover:shadow-md hover:-translate-y-0.5',\n className\n )}\n {...props}\n >\n {content}\n </Comp>\n </CardContext.Provider>\n )\n }\n)\nCard.displayName = 'Card'\n\n// ── Size-based padding map (responsive: mobile → desktop) ──\n\nconst sizePaddingXMap = {\n sm: 'px-4', // 16px\n default: 'px-4 sm:px-6', // 16px → 24px\n lg: 'px-6 sm:px-8', // 24px → 32px\n} as const\n\nconst sizePaddingYMap = {\n sm: 'py-3', // 12px\n default: 'py-3 sm:py-4', // 12px → 16px\n lg: 'py-4 sm:py-5', // 16px → 20px\n} as const\n\n// Top padding for CardHeader — optical balance (top >= sides)\nconst sizePaddingTMap = {\n sm: 'pt-5', // 20px\n default: 'pt-5 sm:pt-6', // 20px → 24px\n lg: 'pt-6 sm:pt-8', // 24px → 32px\n} as const\n\n// Inner bottom padding (between sections) — tighter than outer\nconst sizeInnerPbMap = {\n sm: 'pb-3', // 12px\n default: 'pb-3 sm:pb-4', // 12px → 16px\n lg: 'pb-3 sm:pb-4', // 12px → 16px (default와 동일)\n} as const\n\n// Last-child bottom padding for CardContent (when no footer) — match pt\nconst sizeLastPbMap = {\n sm: 'last:pb-5', // 20px\n default: 'last:pb-5 sm:last:pb-6', // 20px → 24px\n lg: 'last:pb-6 sm:last:pb-8', // 24px → 32px\n} as const\n\n// ── CardImage ──\n// Overlay opacity to Tailwind class mapping\nconst overlayOpacityMap: Record<number, string> = {\n 10: 'from-black/10',\n 20: 'from-black/20',\n 30: 'from-black/30',\n 40: 'from-black/40',\n 50: 'from-black/50',\n 60: 'from-black/60',\n 70: 'from-black/70',\n 80: 'from-black/80',\n 90: 'from-black/90',\n}\n\nexport interface CardImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Gradient overlay on image */\n overlay?: boolean\n /** Overlay opacity (10–90). Default: 60 */\n overlayOpacity?: number\n /** Custom class for overlay gradient (overrides overlayOpacity) */\n overlayClassName?: string\n}\n\nconst CardImage = React.forwardRef<HTMLImageElement, CardImageProps>(\n ({ className, overlay = false, overlayOpacity = 60, overlayClassName, alt = '', ...props }, ref) => {\n const { direction } = useCard()\n const isHorizontal = direction === 'horizontal'\n\n // Horizontal: use absolute positioning so the image fills the\n // wrapper height which is determined by the content side via\n // flexbox align-items:stretch (default).\n if (isHorizontal) {\n const opacityClass = overlay\n ? (overlayOpacityMap[overlayOpacity] || 'from-black/60')\n : null\n\n return (\n <div className={cn('relative shrink-0 w-48 overflow-hidden', className)}>\n <img\n ref={ref}\n alt={alt}\n className=\"absolute inset-0 w-full h-full object-cover\"\n {...props}\n />\n {overlay && (\n <div className={cn('absolute inset-0 bg-gradient-to-t to-transparent', overlayClassName || opacityClass)} />\n )}\n </div>\n )\n }\n\n // Vertical\n if (overlay) {\n const opacityClass = overlayOpacityMap[overlayOpacity] || 'from-black/60'\n\n return (\n <div className=\"relative w-full shrink-0 overflow-hidden\">\n <img\n ref={ref}\n alt={alt}\n className={cn('w-full object-cover', className)}\n {...props}\n />\n <div className={cn('absolute inset-0 bg-gradient-to-t to-transparent', overlayClassName || opacityClass)} />\n </div>\n )\n }\n\n return (\n <img\n ref={ref}\n alt={alt}\n className={cn('w-full object-cover shrink-0', className)}\n {...props}\n />\n )\n }\n)\nCardImage.displayName = 'CardImage'\n\n// ── CardHeader ──\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, children, ...props }, ref) => {\n const { size } = useCard()\n\n // Separate CardAction from other children for proper flex layout\n const childArray = React.Children.toArray(children)\n const actionChildren: React.ReactNode[] = []\n const otherChildren: React.ReactNode[] = []\n\n childArray.forEach((child) => {\n if (React.isValidElement(child) && child.type === CardAction) {\n actionChildren.push(child)\n } else {\n otherChildren.push(child)\n }\n })\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-start gap-3',\n sizePaddingXMap[size],\n sizePaddingTMap[size],\n sizeInnerPbMap[size],\n sizeLastPbMap[size],\n className\n )}\n {...props}\n >\n <div className=\"flex-1 min-w-0 space-y-3\">\n {otherChildren}\n </div>\n {actionChildren}\n </div>\n )\n }\n)\nCardHeader.displayName = 'CardHeader'\n\n// ── CardTitle ──\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /** Leading icon */\n icon?: React.ReactNode\n}\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, icon, children, ...props }, ref) => {\n return (\n <h3\n ref={ref}\n className={cn(\n 'text-base font-semibold text-foreground tracking-tight',\n icon && 'flex items-center gap-2',\n className\n )}\n {...props}\n >\n {icon && (\n <span className=\"shrink-0 icon-sm [&>svg]:w-full [&>svg]:h-full\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {children}\n </h3>\n )\n }\n)\nCardTitle.displayName = 'CardTitle'\n\n// ── CardDescription ──\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => {\n return (\n <p\n ref={ref}\n className={cn('text-sm text-text-muted', className)}\n {...props}\n />\n )\n }\n)\nCardDescription.displayName = 'CardDescription'\n\n// ── CardAction ──\nexport interface CardActionProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardAction = React.forwardRef<HTMLDivElement, CardActionProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('shrink-0 ml-auto -mr-2 -mt-2', className)}\n {...props}\n />\n )\n }\n)\nCardAction.displayName = 'CardAction'\n\n// ── CardContent ──\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => {\n const { size } = useCard()\n\n return (\n <div\n ref={ref}\n className={cn(sizePaddingXMap[size], 'pb-0', sizeLastPbMap[size], className)}\n {...props}\n />\n )\n }\n)\nCardContent.displayName = 'CardContent'\n\n// ── CardFooter ──\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => {\n const { size } = useCard()\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center gap-2',\n sizePaddingXMap[size],\n sizePaddingYMap[size],\n 'mt-auto',\n className\n )}\n {...props}\n />\n )\n }\n)\nCardFooter.displayName = 'CardFooter'\n\nexport {\n Card,\n CardImage,\n CardHeader,\n CardTitle,\n CardDescription,\n CardAction,\n CardContent,\n CardFooter,\n cardVariants,\n}\n"],"mappings":"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","names":[]}
|