@karakuri-ui/react 0.2.3 → 0.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.
- package/README.md +0 -1
- package/dist/components/ui/accordion.d.mts +40 -0
- package/dist/components/ui/accordion.d.ts +40 -0
- package/dist/components/ui/accordion.js +215 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/accordion.mjs +176 -0
- package/dist/components/ui/accordion.mjs.map +1 -0
- package/dist/components/ui/alert.d.mts +38 -0
- package/dist/components/ui/alert.d.ts +38 -0
- package/dist/components/ui/alert.js +217 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/alert.mjs +180 -0
- package/dist/components/ui/alert.mjs.map +1 -0
- package/dist/components/ui/avatar.d.mts +223 -0
- package/dist/components/ui/avatar.d.ts +223 -0
- package/dist/components/ui/avatar.js +245 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/avatar.mjs +204 -0
- package/dist/components/ui/avatar.mjs.map +1 -0
- package/dist/components/ui/badge.d.mts +31 -0
- package/dist/components/ui/badge.d.ts +31 -0
- package/dist/components/ui/badge.js +205 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/badge.mjs +170 -0
- package/dist/components/ui/badge.mjs.map +1 -0
- package/dist/components/ui/breadcrumb.d.mts +46 -0
- package/dist/components/ui/breadcrumb.d.ts +46 -0
- package/dist/components/ui/breadcrumb.js +201 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/breadcrumb.mjs +160 -0
- package/dist/components/ui/breadcrumb.mjs.map +1 -0
- package/dist/components/ui/button-group.d.mts +22 -0
- package/dist/components/ui/button-group.d.ts +22 -0
- package/dist/components/ui/button-group.js +107 -0
- package/dist/components/ui/button-group.js.map +1 -0
- package/dist/components/ui/button-group.mjs +72 -0
- package/dist/components/ui/button-group.mjs.map +1 -0
- package/dist/components/ui/button.d.mts +31 -0
- package/dist/components/ui/button.d.ts +31 -0
- package/dist/components/ui/button.js +176 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/button.mjs +141 -0
- package/dist/components/ui/button.mjs.map +1 -0
- package/dist/components/ui/card.d.mts +60 -0
- package/dist/components/ui/card.d.ts +60 -0
- package/dist/components/ui/card.js +361 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/card.mjs +319 -0
- package/dist/components/ui/card.mjs.map +1 -0
- package/dist/{chart.d.mts → components/ui/chart.d.mts} +2 -18
- package/dist/{chart.d.ts → components/ui/chart.d.ts} +2 -18
- package/dist/{chart.js → components/ui/chart.js} +30 -55
- package/dist/components/ui/chart.js.map +1 -0
- package/dist/{chart.mjs → components/ui/chart.mjs} +22 -46
- package/dist/components/ui/chart.mjs.map +1 -0
- package/dist/components/ui/checkbox.d.mts +24 -0
- package/dist/components/ui/checkbox.d.ts +24 -0
- package/dist/components/ui/checkbox.js +173 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/checkbox.mjs +138 -0
- package/dist/components/ui/checkbox.mjs.map +1 -0
- package/dist/components/ui/divider.d.mts +27 -0
- package/dist/components/ui/divider.d.ts +27 -0
- package/dist/components/ui/divider.js +147 -0
- package/dist/components/ui/divider.js.map +1 -0
- package/dist/components/ui/divider.mjs +112 -0
- package/dist/components/ui/divider.mjs.map +1 -0
- package/dist/components/ui/drawer.d.mts +36 -0
- package/dist/components/ui/drawer.d.ts +36 -0
- package/dist/components/ui/drawer.js +211 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/drawer.mjs +165 -0
- package/dist/components/ui/drawer.mjs.map +1 -0
- package/dist/components/ui/dropdown.d.mts +34 -0
- package/dist/components/ui/dropdown.d.ts +34 -0
- package/dist/components/ui/dropdown.js +295 -0
- package/dist/components/ui/dropdown.js.map +1 -0
- package/dist/components/ui/dropdown.mjs +248 -0
- package/dist/components/ui/dropdown.mjs.map +1 -0
- package/dist/components/ui/field.d.mts +26 -0
- package/dist/components/ui/field.d.ts +26 -0
- package/dist/components/ui/field.js +141 -0
- package/dist/components/ui/field.js.map +1 -0
- package/dist/components/ui/field.mjs +103 -0
- package/dist/components/ui/field.mjs.map +1 -0
- package/dist/components/ui/icon-button.d.mts +20 -0
- package/dist/components/ui/icon-button.d.ts +20 -0
- package/dist/components/ui/icon-button.js +147 -0
- package/dist/components/ui/icon-button.js.map +1 -0
- package/dist/components/ui/icon-button.mjs +112 -0
- package/dist/components/ui/icon-button.mjs.map +1 -0
- package/dist/components/ui/index.d.mts +55 -0
- package/dist/components/ui/index.d.ts +55 -0
- package/dist/components/ui/index.js +468 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/components/ui/index.mjs +242 -0
- package/dist/components/ui/index.mjs.map +1 -0
- package/dist/components/ui/input.d.mts +20 -0
- package/dist/components/ui/input.d.ts +20 -0
- package/dist/components/ui/input.js +250 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/input.mjs +215 -0
- package/dist/components/ui/input.mjs.map +1 -0
- package/dist/components/ui/metric-card.d.mts +38 -0
- package/dist/components/ui/metric-card.d.ts +38 -0
- package/dist/components/ui/metric-card.js +250 -0
- package/dist/components/ui/metric-card.js.map +1 -0
- package/dist/components/ui/metric-card.mjs +209 -0
- package/dist/components/ui/metric-card.mjs.map +1 -0
- package/dist/components/ui/modal.d.mts +47 -0
- package/dist/components/ui/modal.d.ts +47 -0
- package/dist/components/ui/modal.js +371 -0
- package/dist/components/ui/modal.js.map +1 -0
- package/dist/components/ui/modal.mjs +313 -0
- package/dist/components/ui/modal.mjs.map +1 -0
- package/dist/components/ui/navigation-menu.d.mts +120 -0
- package/dist/components/ui/navigation-menu.d.ts +120 -0
- package/dist/components/ui/navigation-menu.js +521 -0
- package/dist/components/ui/navigation-menu.js.map +1 -0
- package/dist/components/ui/navigation-menu.mjs +478 -0
- package/dist/components/ui/navigation-menu.mjs.map +1 -0
- package/dist/components/ui/pagination.d.mts +113 -0
- package/dist/components/ui/pagination.d.ts +113 -0
- package/dist/components/ui/pagination.js +484 -0
- package/dist/components/ui/pagination.js.map +1 -0
- package/dist/components/ui/pagination.mjs +438 -0
- package/dist/components/ui/pagination.mjs.map +1 -0
- package/dist/components/ui/popover.d.mts +29 -0
- package/dist/components/ui/popover.d.ts +29 -0
- package/dist/components/ui/popover.js +165 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/popover.mjs +124 -0
- package/dist/components/ui/popover.mjs.map +1 -0
- package/dist/components/ui/progress.d.mts +35 -0
- package/dist/components/ui/progress.d.ts +35 -0
- package/dist/components/ui/progress.js +194 -0
- package/dist/components/ui/progress.js.map +1 -0
- package/dist/components/ui/progress.mjs +159 -0
- package/dist/components/ui/progress.mjs.map +1 -0
- package/dist/components/ui/radio-group.d.mts +35 -0
- package/dist/components/ui/radio-group.d.ts +35 -0
- package/dist/components/ui/radio-group.js +174 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/radio-group.mjs +137 -0
- package/dist/components/ui/radio-group.mjs.map +1 -0
- package/dist/components/ui/segmented.d.mts +25 -0
- package/dist/components/ui/segmented.d.ts +25 -0
- package/dist/components/ui/segmented.js +238 -0
- package/dist/components/ui/segmented.js.map +1 -0
- package/dist/components/ui/segmented.mjs +201 -0
- package/dist/components/ui/segmented.mjs.map +1 -0
- package/dist/components/ui/select.d.mts +20 -0
- package/dist/components/ui/select.d.ts +20 -0
- package/dist/components/ui/select.js +308 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/select.mjs +267 -0
- package/dist/components/ui/select.mjs.map +1 -0
- package/dist/components/ui/skeleton.d.mts +26 -0
- package/dist/components/ui/skeleton.d.ts +26 -0
- package/dist/components/ui/skeleton.js +144 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/skeleton.mjs +109 -0
- package/dist/components/ui/skeleton.mjs.map +1 -0
- package/dist/components/ui/slider.d.mts +38 -0
- package/dist/components/ui/slider.d.ts +38 -0
- package/dist/components/ui/slider.js +180 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/slider.mjs +145 -0
- package/dist/components/ui/slider.mjs.map +1 -0
- package/dist/components/ui/spinner.d.mts +23 -0
- package/dist/components/ui/spinner.d.ts +23 -0
- package/dist/components/ui/spinner.js +471 -0
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/components/ui/spinner.mjs +436 -0
- package/dist/components/ui/spinner.mjs.map +1 -0
- package/dist/components/ui/switch.d.mts +22 -0
- package/dist/components/ui/switch.d.ts +22 -0
- package/dist/components/ui/switch.js +173 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/switch.mjs +138 -0
- package/dist/components/ui/switch.mjs.map +1 -0
- package/dist/components/ui/table.d.mts +60 -0
- package/dist/components/ui/table.d.ts +60 -0
- package/dist/components/ui/table.js +231 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/table.mjs +190 -0
- package/dist/components/ui/table.mjs.map +1 -0
- package/dist/components/ui/tabs.d.mts +31 -0
- package/dist/components/ui/tabs.d.ts +31 -0
- package/dist/components/ui/tabs.js +233 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/tabs.mjs +194 -0
- package/dist/components/ui/tabs.mjs.map +1 -0
- package/dist/components/ui/textarea.d.mts +19 -0
- package/dist/components/ui/textarea.d.ts +19 -0
- package/dist/components/ui/textarea.js +181 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/textarea.mjs +146 -0
- package/dist/components/ui/textarea.mjs.map +1 -0
- package/dist/components/ui/toast.d.mts +93 -0
- package/dist/components/ui/toast.d.ts +93 -0
- package/dist/components/ui/toast.js +429 -0
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toast.mjs +393 -0
- package/dist/components/ui/toast.mjs.map +1 -0
- package/dist/components/ui/toggle-group.d.mts +42 -0
- package/dist/components/ui/toggle-group.d.ts +42 -0
- package/dist/components/ui/toggle-group.js +183 -0
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle-group.mjs +146 -0
- package/dist/components/ui/toggle-group.mjs.map +1 -0
- package/dist/components/ui/toggle.d.mts +19 -0
- package/dist/components/ui/toggle.d.ts +19 -0
- package/dist/components/ui/toggle.js +194 -0
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/toggle.mjs +159 -0
- package/dist/components/ui/toggle.mjs.map +1 -0
- package/dist/components/ui/tooltip.d.mts +26 -0
- package/dist/components/ui/tooltip.d.ts +26 -0
- package/dist/components/ui/tooltip.js +128 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/components/ui/tooltip.mjs +88 -0
- package/dist/components/ui/tooltip.mjs.map +1 -0
- package/dist/lib/code-generator.d.mts +60 -0
- package/dist/lib/code-generator.d.ts +60 -0
- package/dist/lib/code-generator.js +224 -0
- package/dist/lib/code-generator.js.map +1 -0
- package/dist/lib/code-generator.mjs +159 -0
- package/dist/lib/code-generator.mjs.map +1 -0
- package/dist/lib/utils.d.mts +10 -0
- package/dist/lib/utils.d.ts +10 -0
- package/dist/lib/utils.js +33 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/utils.mjs +9 -0
- package/dist/lib/utils.mjs.map +1 -0
- package/package.json +11 -11
- package/dist/chart.js.map +0 -1
- package/dist/chart.mjs.map +0 -1
- package/dist/index.d.mts +0 -1636
- package/dist/index.d.ts +0 -1636
- package/dist/index.js +0 -7291
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -7048
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
4
|
+
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
6
|
+
import { cn } from "../../lib/utils";
|
|
7
|
+
const DefaultCloseIcon = ({ className }) => /* @__PURE__ */ React.createElement(
|
|
8
|
+
"svg",
|
|
9
|
+
{
|
|
10
|
+
className,
|
|
11
|
+
fill: "none",
|
|
12
|
+
viewBox: "0 0 24 24",
|
|
13
|
+
stroke: "currentColor",
|
|
14
|
+
strokeWidth: 2,
|
|
15
|
+
"aria-hidden": "true"
|
|
16
|
+
},
|
|
17
|
+
/* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" })
|
|
18
|
+
);
|
|
19
|
+
const ModalStyleContext = React.createContext({
|
|
20
|
+
scrollBehavior: "outside"
|
|
21
|
+
});
|
|
22
|
+
function Modal(props) {
|
|
23
|
+
return /* @__PURE__ */ React.createElement(DialogPrimitive.Root, { ...props });
|
|
24
|
+
}
|
|
25
|
+
const ModalTrigger = DialogPrimitive.Trigger;
|
|
26
|
+
const ModalPortal = DialogPrimitive.Portal;
|
|
27
|
+
const ModalClose = DialogPrimitive.Close;
|
|
28
|
+
const ModalOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
29
|
+
DialogPrimitive.Overlay,
|
|
30
|
+
{
|
|
31
|
+
ref,
|
|
32
|
+
className: cn(
|
|
33
|
+
"fixed inset-0 z-overlay bg-black/50",
|
|
34
|
+
"data-[state=open]:animate-modal-overlay-enter data-[state=closed]:animate-modal-overlay-exit",
|
|
35
|
+
className
|
|
36
|
+
),
|
|
37
|
+
...props
|
|
38
|
+
}
|
|
39
|
+
));
|
|
40
|
+
ModalOverlay.displayName = "ModalOverlay";
|
|
41
|
+
const modalContentVariants = cva("", {
|
|
42
|
+
variants: {
|
|
43
|
+
size: {
|
|
44
|
+
xs: "max-w-[360px]",
|
|
45
|
+
// 360px — simple confirmation
|
|
46
|
+
sm: "max-w-[480px]",
|
|
47
|
+
// 480px — standard (default)
|
|
48
|
+
md: "max-w-[600px]",
|
|
49
|
+
// 600px — standard form
|
|
50
|
+
lg: "max-w-[760px]",
|
|
51
|
+
// 760px — complex form
|
|
52
|
+
xl: "max-w-[960px]",
|
|
53
|
+
// 960px — table, dashboard
|
|
54
|
+
full: "max-w-none"
|
|
55
|
+
// full width (constrained by wrapper padding)
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
defaultVariants: {
|
|
59
|
+
size: "sm"
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const ModalContent = React.forwardRef(({ className, children, size = "sm", scrollBehavior = "outside", showCloseButton = true, closeIcon, ...props }, ref) => {
|
|
63
|
+
const isInside = scrollBehavior === "inside";
|
|
64
|
+
const isFull = size === "full";
|
|
65
|
+
const useInsideScroll = isInside || isFull;
|
|
66
|
+
const closeButton = showCloseButton && /* @__PURE__ */ React.createElement(DialogPrimitive.Close, { className: cn(
|
|
67
|
+
"absolute right-4 top-4 rounded-md p-1",
|
|
68
|
+
"text-text-muted hover:text-foreground",
|
|
69
|
+
"transition-colors duration-fast",
|
|
70
|
+
"focus-visible:focus-ring focus-visible:outline-none",
|
|
71
|
+
"disabled:pointer-events-none"
|
|
72
|
+
) }, closeIcon || /* @__PURE__ */ React.createElement(DefaultCloseIcon, { className: "icon-sm" }), /* @__PURE__ */ React.createElement("span", { className: "sr-only" }, "Close"));
|
|
73
|
+
if (!useInsideScroll) {
|
|
74
|
+
return /* @__PURE__ */ React.createElement(ModalPortal, null, /* @__PURE__ */ React.createElement(ModalOverlay, null), /* @__PURE__ */ React.createElement(ModalStyleContext.Provider, { value: { scrollBehavior: "outside" } }, /* @__PURE__ */ React.createElement(
|
|
75
|
+
DialogPrimitive.Content,
|
|
76
|
+
{
|
|
77
|
+
ref,
|
|
78
|
+
className: cn(
|
|
79
|
+
"fixed inset-0 z-modal overflow-y-auto",
|
|
80
|
+
"focus:outline-none",
|
|
81
|
+
"data-[state=open]:animate-modal-content-enter data-[state=closed]:animate-modal-content-exit"
|
|
82
|
+
),
|
|
83
|
+
...props
|
|
84
|
+
},
|
|
85
|
+
/* @__PURE__ */ React.createElement(DialogPrimitive.Close, { asChild: true }, /* @__PURE__ */ React.createElement("div", { className: "flex min-h-full items-center justify-center p-4" }, /* @__PURE__ */ React.createElement(
|
|
86
|
+
"div",
|
|
87
|
+
{
|
|
88
|
+
className: cn(
|
|
89
|
+
"relative w-full rounded-xl bg-background text-foreground shadow-xl overflow-hidden",
|
|
90
|
+
modalContentVariants({ size }),
|
|
91
|
+
className
|
|
92
|
+
),
|
|
93
|
+
onClick: (e) => e.stopPropagation()
|
|
94
|
+
},
|
|
95
|
+
children,
|
|
96
|
+
closeButton
|
|
97
|
+
)))
|
|
98
|
+
)));
|
|
99
|
+
}
|
|
100
|
+
return /* @__PURE__ */ React.createElement(ModalPortal, null, /* @__PURE__ */ React.createElement(ModalOverlay, null), /* @__PURE__ */ React.createElement(ModalStyleContext.Provider, { value: { scrollBehavior: "inside" } }, /* @__PURE__ */ React.createElement("div", { className: "fixed inset-0 z-modal flex items-center justify-center p-4" }, /* @__PURE__ */ React.createElement(
|
|
101
|
+
DialogPrimitive.Content,
|
|
102
|
+
{
|
|
103
|
+
ref,
|
|
104
|
+
className: cn(
|
|
105
|
+
"relative w-full rounded-xl bg-background text-foreground shadow-xl overflow-hidden",
|
|
106
|
+
"focus:outline-none",
|
|
107
|
+
"data-[state=open]:animate-modal-content-enter data-[state=closed]:animate-modal-content-exit",
|
|
108
|
+
modalContentVariants({ size }),
|
|
109
|
+
isInside && "flex flex-col max-h-[85vh]",
|
|
110
|
+
isFull && "flex flex-col h-full",
|
|
111
|
+
className
|
|
112
|
+
),
|
|
113
|
+
...props
|
|
114
|
+
},
|
|
115
|
+
children,
|
|
116
|
+
closeButton
|
|
117
|
+
))));
|
|
118
|
+
});
|
|
119
|
+
ModalContent.displayName = "ModalContent";
|
|
120
|
+
const ModalHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
121
|
+
"div",
|
|
122
|
+
{
|
|
123
|
+
ref,
|
|
124
|
+
className: cn("flex flex-col gap-1.5 p-6 pb-0", className),
|
|
125
|
+
...props
|
|
126
|
+
}
|
|
127
|
+
));
|
|
128
|
+
ModalHeader.displayName = "ModalHeader";
|
|
129
|
+
const ModalTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
130
|
+
DialogPrimitive.Title,
|
|
131
|
+
{
|
|
132
|
+
ref,
|
|
133
|
+
className: cn("text-lg font-semibold text-foreground", className),
|
|
134
|
+
...props
|
|
135
|
+
}
|
|
136
|
+
));
|
|
137
|
+
ModalTitle.displayName = "ModalTitle";
|
|
138
|
+
const ModalDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
139
|
+
DialogPrimitive.Description,
|
|
140
|
+
{
|
|
141
|
+
ref,
|
|
142
|
+
className: cn("text-md text-text-muted", className),
|
|
143
|
+
...props
|
|
144
|
+
}
|
|
145
|
+
));
|
|
146
|
+
ModalDescription.displayName = "ModalDescription";
|
|
147
|
+
const ModalBody = React.forwardRef(({ className, ...props }, ref) => {
|
|
148
|
+
const { scrollBehavior } = React.useContext(ModalStyleContext);
|
|
149
|
+
return /* @__PURE__ */ React.createElement(
|
|
150
|
+
"div",
|
|
151
|
+
{
|
|
152
|
+
ref,
|
|
153
|
+
className: cn(
|
|
154
|
+
"p-6",
|
|
155
|
+
scrollBehavior === "inside" && "flex-1 overflow-y-auto",
|
|
156
|
+
className
|
|
157
|
+
),
|
|
158
|
+
...props
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
});
|
|
162
|
+
ModalBody.displayName = "ModalBody";
|
|
163
|
+
const ModalFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
164
|
+
"div",
|
|
165
|
+
{
|
|
166
|
+
ref,
|
|
167
|
+
className: cn(
|
|
168
|
+
"flex items-center justify-end gap-3 p-6 pt-0",
|
|
169
|
+
className
|
|
170
|
+
),
|
|
171
|
+
...props
|
|
172
|
+
}
|
|
173
|
+
));
|
|
174
|
+
ModalFooter.displayName = "ModalFooter";
|
|
175
|
+
const AlertModal = AlertDialogPrimitive.Root;
|
|
176
|
+
const AlertModalTrigger = AlertDialogPrimitive.Trigger;
|
|
177
|
+
const AlertModalPortal = AlertDialogPrimitive.Portal;
|
|
178
|
+
const AlertModalOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
179
|
+
AlertDialogPrimitive.Overlay,
|
|
180
|
+
{
|
|
181
|
+
ref,
|
|
182
|
+
className: cn(
|
|
183
|
+
"fixed inset-0 z-overlay bg-black/50",
|
|
184
|
+
"data-[state=open]:animate-modal-overlay-enter data-[state=closed]:animate-modal-overlay-exit",
|
|
185
|
+
className
|
|
186
|
+
),
|
|
187
|
+
...props
|
|
188
|
+
}
|
|
189
|
+
));
|
|
190
|
+
AlertModalOverlay.displayName = "AlertModalOverlay";
|
|
191
|
+
const alertModalContentVariants = cva("", {
|
|
192
|
+
variants: {
|
|
193
|
+
size: {
|
|
194
|
+
xs: "max-w-[360px]",
|
|
195
|
+
// 360px
|
|
196
|
+
sm: "max-w-[480px]"
|
|
197
|
+
// 480px (default)
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
defaultVariants: {
|
|
201
|
+
size: "sm"
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
const AlertModalContent = React.forwardRef(({ className, children, size = "sm", ...props }, ref) => /* @__PURE__ */ React.createElement(AlertModalPortal, null, /* @__PURE__ */ React.createElement(AlertModalOverlay, null), /* @__PURE__ */ React.createElement("div", { className: "fixed inset-0 z-modal flex items-center justify-center p-4" }, /* @__PURE__ */ React.createElement(
|
|
205
|
+
AlertDialogPrimitive.Content,
|
|
206
|
+
{
|
|
207
|
+
ref,
|
|
208
|
+
className: cn(
|
|
209
|
+
"relative w-full rounded-xl bg-background text-foreground shadow-xl",
|
|
210
|
+
"focus:outline-none",
|
|
211
|
+
"data-[state=open]:animate-modal-content-enter data-[state=closed]:animate-modal-content-exit",
|
|
212
|
+
alertModalContentVariants({ size }),
|
|
213
|
+
className
|
|
214
|
+
),
|
|
215
|
+
...props
|
|
216
|
+
},
|
|
217
|
+
children
|
|
218
|
+
))));
|
|
219
|
+
AlertModalContent.displayName = "AlertModalContent";
|
|
220
|
+
const AlertModalHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
221
|
+
"div",
|
|
222
|
+
{
|
|
223
|
+
ref,
|
|
224
|
+
className: cn("flex flex-col gap-1.5 p-6 pb-0", className),
|
|
225
|
+
...props
|
|
226
|
+
}
|
|
227
|
+
));
|
|
228
|
+
AlertModalHeader.displayName = "AlertModalHeader";
|
|
229
|
+
const AlertModalTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
230
|
+
AlertDialogPrimitive.Title,
|
|
231
|
+
{
|
|
232
|
+
ref,
|
|
233
|
+
className: cn("text-lg font-semibold text-foreground", className),
|
|
234
|
+
...props
|
|
235
|
+
}
|
|
236
|
+
));
|
|
237
|
+
AlertModalTitle.displayName = "AlertModalTitle";
|
|
238
|
+
const AlertModalDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
239
|
+
AlertDialogPrimitive.Description,
|
|
240
|
+
{
|
|
241
|
+
ref,
|
|
242
|
+
className: cn("text-md text-text-muted", className),
|
|
243
|
+
...props
|
|
244
|
+
}
|
|
245
|
+
));
|
|
246
|
+
AlertModalDescription.displayName = "AlertModalDescription";
|
|
247
|
+
const AlertModalBody = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
248
|
+
"div",
|
|
249
|
+
{
|
|
250
|
+
ref,
|
|
251
|
+
className: cn("p-6", className),
|
|
252
|
+
...props
|
|
253
|
+
}
|
|
254
|
+
));
|
|
255
|
+
AlertModalBody.displayName = "AlertModalBody";
|
|
256
|
+
const AlertModalFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
257
|
+
"div",
|
|
258
|
+
{
|
|
259
|
+
ref,
|
|
260
|
+
className: cn(
|
|
261
|
+
"flex items-center justify-end gap-3 p-6 pt-0",
|
|
262
|
+
className
|
|
263
|
+
),
|
|
264
|
+
...props
|
|
265
|
+
}
|
|
266
|
+
));
|
|
267
|
+
AlertModalFooter.displayName = "AlertModalFooter";
|
|
268
|
+
const AlertModalAction = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
269
|
+
AlertDialogPrimitive.Action,
|
|
270
|
+
{
|
|
271
|
+
ref,
|
|
272
|
+
className,
|
|
273
|
+
...props
|
|
274
|
+
}
|
|
275
|
+
));
|
|
276
|
+
AlertModalAction.displayName = "AlertModalAction";
|
|
277
|
+
const AlertModalCancel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
|
|
278
|
+
AlertDialogPrimitive.Cancel,
|
|
279
|
+
{
|
|
280
|
+
ref,
|
|
281
|
+
className,
|
|
282
|
+
...props
|
|
283
|
+
}
|
|
284
|
+
));
|
|
285
|
+
AlertModalCancel.displayName = "AlertModalCancel";
|
|
286
|
+
export {
|
|
287
|
+
AlertModal,
|
|
288
|
+
AlertModalAction,
|
|
289
|
+
AlertModalBody,
|
|
290
|
+
AlertModalCancel,
|
|
291
|
+
AlertModalContent,
|
|
292
|
+
AlertModalDescription,
|
|
293
|
+
AlertModalFooter,
|
|
294
|
+
AlertModalHeader,
|
|
295
|
+
AlertModalOverlay,
|
|
296
|
+
AlertModalPortal,
|
|
297
|
+
AlertModalTitle,
|
|
298
|
+
AlertModalTrigger,
|
|
299
|
+
Modal,
|
|
300
|
+
ModalBody,
|
|
301
|
+
ModalClose,
|
|
302
|
+
ModalContent,
|
|
303
|
+
ModalDescription,
|
|
304
|
+
ModalFooter,
|
|
305
|
+
ModalHeader,
|
|
306
|
+
ModalOverlay,
|
|
307
|
+
ModalPortal,
|
|
308
|
+
ModalTitle,
|
|
309
|
+
ModalTrigger,
|
|
310
|
+
alertModalContentVariants,
|
|
311
|
+
modalContentVariants
|
|
312
|
+
};
|
|
313
|
+
//# sourceMappingURL=modal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ui/modal.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\n// ─── Default Close Icon (built-in, no external dependency) ──\nconst DefaultCloseIcon = ({ className }: { className?: string }) => (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\n// ─── Style Context ──────────────────────────────────────────\ntype ModalStyleContextValue = {\n scrollBehavior: 'inside' | 'outside'\n}\nconst ModalStyleContext = React.createContext<ModalStyleContextValue>({\n scrollBehavior: 'outside',\n})\n\n// ═══════════════════════════════════════════════════════════════\n// Modal (Dialog)\n// ═══════════════════════════════════════════════════════════════\n\n// ─── Modal (Root) — wrapper to keep our own component identity separate from DialogPrimitive.Root ──\nfunction Modal(props: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root {...props} />\n}\n\n// ─── ModalTrigger ───────────────────────────────────────────\nconst ModalTrigger = DialogPrimitive.Trigger\n\n// ─── ModalPortal ────────────────────────────────────────────\nconst ModalPortal = DialogPrimitive.Portal\n\n// ─── ModalClose ─────────────────────────────────────────────\nconst ModalClose = DialogPrimitive.Close\n\n// ─── ModalOverlay ───────────────────────────────────────────\nconst ModalOverlay = 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-overlay bg-black/50',\n 'data-[state=open]:animate-modal-overlay-enter data-[state=closed]:animate-modal-overlay-exit',\n className\n )}\n {...props}\n />\n))\nModalOverlay.displayName = 'ModalOverlay'\n\n// ─── ModalContent ───────────────────────────────────────────\nconst modalContentVariants = cva('', {\n variants: {\n size: {\n xs: 'max-w-[360px]', // 360px — simple confirmation\n sm: 'max-w-[480px]', // 480px — standard (default)\n md: 'max-w-[600px]', // 600px — standard form\n lg: 'max-w-[760px]', // 760px — complex form\n xl: 'max-w-[960px]', // 960px — table, dashboard\n full: 'max-w-none', // full width (constrained by wrapper padding)\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n})\n\nexport interface ModalContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof modalContentVariants> {\n /** Scroll behavior when content overflows */\n scrollBehavior?: 'inside' | 'outside'\n /** Show built-in close button */\n showCloseButton?: boolean\n /** Custom close icon (replaces default X) */\n closeIcon?: React.ReactNode\n}\n\nconst ModalContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(({ className, children, size = 'sm', scrollBehavior = 'outside', showCloseButton = true, closeIcon, ...props }, ref) => {\n const isInside = scrollBehavior === 'inside'\n const isFull = size === 'full'\n const useInsideScroll = isInside || isFull\n\n const closeButton = showCloseButton && (\n <DialogPrimitive.Close className={cn(\n 'absolute right-4 top-4 rounded-md p-1',\n 'text-text-muted hover:text-foreground',\n 'transition-colors duration-fast',\n 'focus-visible:focus-ring focus-visible:outline-none',\n 'disabled:pointer-events-none'\n )}>\n {closeIcon || <DefaultCloseIcon className=\"icon-sm\" />}\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )\n\n if (!useInsideScroll) {\n // Outside scroll: DialogPrimitive.Content becomes the full-screen scrollable container.\n // Radix's internal RemoveScroll detects its own root element as scrollable,\n // allowing wheel/touch scroll events to pass through correctly.\n return (\n <ModalPortal>\n <ModalOverlay />\n <ModalStyleContext.Provider value={{ scrollBehavior: 'outside' }}>\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed inset-0 z-modal overflow-y-auto',\n 'focus:outline-none',\n 'data-[state=open]:animate-modal-content-enter data-[state=closed]:animate-modal-content-exit',\n )}\n {...props}\n >\n {/* Backdrop click area: closes dialog when clicking outside the panel */}\n <DialogPrimitive.Close asChild>\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <div\n className={cn(\n 'relative w-full rounded-xl bg-background text-foreground shadow-xl overflow-hidden',\n modalContentVariants({ size }),\n className,\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n {closeButton}\n </div>\n </div>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </ModalStyleContext.Provider>\n </ModalPortal>\n )\n }\n\n // Inside scroll / full: DialogPrimitive.Content is the visual modal panel.\n return (\n <ModalPortal>\n <ModalOverlay />\n <ModalStyleContext.Provider value={{ scrollBehavior: 'inside' }}>\n <div className=\"fixed inset-0 z-modal flex items-center justify-center p-4\">\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'relative w-full rounded-xl bg-background text-foreground shadow-xl overflow-hidden',\n 'focus:outline-none',\n 'data-[state=open]:animate-modal-content-enter data-[state=closed]:animate-modal-content-exit',\n modalContentVariants({ size }),\n isInside && 'flex flex-col max-h-[85vh]',\n isFull && 'flex flex-col h-full',\n className,\n )}\n {...props}\n >\n {children}\n {closeButton}\n </DialogPrimitive.Content>\n </div>\n </ModalStyleContext.Provider>\n </ModalPortal>\n )\n})\nModalContent.displayName = 'ModalContent'\n\n// ─── ModalHeader ────────────────────────────────────────────\nconst ModalHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col gap-1.5 p-6 pb-0', className)}\n {...props}\n />\n))\nModalHeader.displayName = 'ModalHeader'\n\n// ─── ModalTitle ─────────────────────────────────────────────\nconst ModalTitle = 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('text-lg font-semibold text-foreground', className)}\n {...props}\n />\n))\nModalTitle.displayName = 'ModalTitle'\n\n// ─── ModalDescription ───────────────────────────────────────\nconst ModalDescription = 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-md text-text-muted', className)}\n {...props}\n />\n))\nModalDescription.displayName = 'ModalDescription'\n\n// ─── ModalBody ──────────────────────────────────────────────\nconst ModalBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { scrollBehavior } = React.useContext(ModalStyleContext)\n return (\n <div\n ref={ref}\n className={cn(\n 'p-6',\n scrollBehavior === 'inside' && 'flex-1 overflow-y-auto',\n className\n )}\n {...props}\n />\n )\n})\nModalBody.displayName = 'ModalBody'\n\n// ─── ModalFooter ────────────────────────────────────────────\nconst ModalFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-end gap-3 p-6 pt-0',\n className\n )}\n {...props}\n />\n))\nModalFooter.displayName = 'ModalFooter'\n\n// ═══════════════════════════════════════════════════════════════\n// AlertModal (AlertDialog)\n// ═══════════════════════════════════════════════════════════════\n\n// ─── AlertModal (Root) ──────────────────────────────────────\nconst AlertModal = AlertDialogPrimitive.Root\n\n// ─── AlertModalTrigger ──────────────────────────────────────\nconst AlertModalTrigger = AlertDialogPrimitive.Trigger\n\n// ─── AlertModalPortal ───────────────────────────────────────\nconst AlertModalPortal = AlertDialogPrimitive.Portal\n\n// ─── AlertModalOverlay ──────────────────────────────────────\nconst AlertModalOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-overlay bg-black/50',\n 'data-[state=open]:animate-modal-overlay-enter data-[state=closed]:animate-modal-overlay-exit',\n className\n )}\n {...props}\n />\n))\nAlertModalOverlay.displayName = 'AlertModalOverlay'\n\n// ─── AlertModalContent ──────────────────────────────────────\nconst alertModalContentVariants = cva('', {\n variants: {\n size: {\n xs: 'max-w-[360px]', // 360px\n sm: 'max-w-[480px]', // 480px (default)\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n})\n\nexport interface AlertModalContentProps\n extends React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>,\n VariantProps<typeof alertModalContentVariants> {}\n\nconst AlertModalContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n AlertModalContentProps\n>(({ className, children, size = 'sm', ...props }, ref) => (\n <AlertModalPortal>\n <AlertModalOverlay />\n <div className=\"fixed inset-0 z-modal flex items-center justify-center p-4\">\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n 'relative w-full rounded-xl bg-background text-foreground shadow-xl',\n 'focus:outline-none',\n 'data-[state=open]:animate-modal-content-enter data-[state=closed]:animate-modal-content-exit',\n alertModalContentVariants({ size }),\n className\n )}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Content>\n </div>\n </AlertModalPortal>\n))\nAlertModalContent.displayName = 'AlertModalContent'\n\n// ─── AlertModalHeader ───────────────────────────────────────\nconst AlertModalHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col gap-1.5 p-6 pb-0', className)}\n {...props}\n />\n))\nAlertModalHeader.displayName = 'AlertModalHeader'\n\n// ─── AlertModalTitle ────────────────────────────────────────\nconst AlertModalTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground', className)}\n {...props}\n />\n))\nAlertModalTitle.displayName = 'AlertModalTitle'\n\n// ─── AlertModalDescription ──────────────────────────────────\nconst AlertModalDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn('text-md text-text-muted', className)}\n {...props}\n />\n))\nAlertModalDescription.displayName = 'AlertModalDescription'\n\n// ─── AlertModalBody ─────────────────────────────────────────\nconst AlertModalBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('p-6', className)}\n {...props}\n />\n))\nAlertModalBody.displayName = 'AlertModalBody'\n\n// ─── AlertModalFooter ───────────────────────────────────────\nconst AlertModalFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-end gap-3 p-6 pt-0',\n className\n )}\n {...props}\n />\n))\nAlertModalFooter.displayName = 'AlertModalFooter'\n\n// ─── AlertModalAction ───────────────────────────────────────\nconst AlertModalAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={className}\n {...props}\n />\n))\nAlertModalAction.displayName = 'AlertModalAction'\n\n// ─── AlertModalCancel ───────────────────────────────────────\nconst AlertModalCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={className}\n {...props}\n />\n))\nAlertModalCancel.displayName = 'AlertModalCancel'\n\n// ─── Exports ────────────────────────────────────────────────\nexport {\n Modal,\n ModalTrigger,\n ModalPortal,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalBody,\n ModalFooter,\n ModalClose,\n modalContentVariants,\n AlertModal,\n AlertModalTrigger,\n AlertModalPortal,\n AlertModalOverlay,\n AlertModalContent,\n AlertModalHeader,\n AlertModalTitle,\n AlertModalDescription,\n AlertModalBody,\n AlertModalFooter,\n AlertModalAction,\n AlertModalCancel,\n alertModalContentVariants,\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
type NavigationMenuRadius = 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
declare const navigationMenuSizeMap: {
|
|
5
|
+
readonly sm: {
|
|
6
|
+
readonly trigger: "h-8 text-sm px-3 gap-2";
|
|
7
|
+
readonly link: "h-8 text-sm px-3 gap-2";
|
|
8
|
+
readonly icon: "icon-xs";
|
|
9
|
+
readonly collapsedSquare: "size-8";
|
|
10
|
+
readonly collapsedWidth: 56;
|
|
11
|
+
readonly dropdownLink: "px-3 py-1.5 text-sm gap-2";
|
|
12
|
+
readonly subLink: "h-8 text-sm pl-8 pr-3 gap-2";
|
|
13
|
+
readonly groupLabel: "text-2xs px-3 mb-1";
|
|
14
|
+
readonly groupMargin: "mt-4 first:mt-0";
|
|
15
|
+
};
|
|
16
|
+
readonly md: {
|
|
17
|
+
readonly trigger: "h-9 text-md px-3.5 gap-2";
|
|
18
|
+
readonly link: "h-9 text-md px-3.5 gap-2";
|
|
19
|
+
readonly icon: "icon-sm";
|
|
20
|
+
readonly collapsedSquare: "size-9";
|
|
21
|
+
readonly collapsedWidth: 60;
|
|
22
|
+
readonly dropdownLink: "px-3 py-1.5 text-md gap-2";
|
|
23
|
+
readonly subLink: "h-9 text-md pl-9 pr-3.5 gap-2";
|
|
24
|
+
readonly groupLabel: "text-xs px-3.5 mb-1";
|
|
25
|
+
readonly groupMargin: "mt-4 first:mt-0";
|
|
26
|
+
};
|
|
27
|
+
readonly default: {
|
|
28
|
+
readonly trigger: "h-10 text-md px-4 gap-2";
|
|
29
|
+
readonly link: "h-10 text-md px-4 gap-2";
|
|
30
|
+
readonly icon: "icon-sm";
|
|
31
|
+
readonly collapsedSquare: "size-10";
|
|
32
|
+
readonly collapsedWidth: 64;
|
|
33
|
+
readonly dropdownLink: "px-3 py-2 text-md gap-2";
|
|
34
|
+
readonly subLink: "h-10 text-md pl-10 pr-4 gap-2";
|
|
35
|
+
readonly groupLabel: "text-xs px-4 mb-1.5";
|
|
36
|
+
readonly groupMargin: "mt-5 first:mt-0";
|
|
37
|
+
};
|
|
38
|
+
readonly lg: {
|
|
39
|
+
readonly trigger: "h-12 text-base px-6 gap-2";
|
|
40
|
+
readonly link: "h-12 text-base px-6 gap-2";
|
|
41
|
+
readonly icon: "icon-sm";
|
|
42
|
+
readonly collapsedSquare: "size-12";
|
|
43
|
+
readonly collapsedWidth: 72;
|
|
44
|
+
readonly dropdownLink: "px-3 py-2.5 text-base gap-2";
|
|
45
|
+
readonly subLink: "h-12 text-base pl-12 pr-6 gap-2";
|
|
46
|
+
readonly groupLabel: "text-xs px-4 mb-2";
|
|
47
|
+
readonly groupMargin: "mt-6 first:mt-0";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
interface NavigationMenuProps extends React.HTMLAttributes<HTMLElement> {
|
|
51
|
+
/** Layout orientation */
|
|
52
|
+
orientation?: 'horizontal' | 'vertical';
|
|
53
|
+
/** Size of the menu items */
|
|
54
|
+
size?: 'sm' | 'md' | 'default' | 'lg';
|
|
55
|
+
/** Vertical only: show icons only (collapsed sidebar) */
|
|
56
|
+
collapsed?: boolean;
|
|
57
|
+
/** Vertical only: sidebar width (default: 256px / 16rem) */
|
|
58
|
+
width?: number | string;
|
|
59
|
+
/** Vertical only: collapsed sidebar width (default: 64px / 4rem) */
|
|
60
|
+
collapsedWidth?: number | string;
|
|
61
|
+
/** Border radius for dropdown content and items */
|
|
62
|
+
radius?: NavigationMenuRadius;
|
|
63
|
+
/** Font weight for menu items (default: normal, active items always use semibold) */
|
|
64
|
+
fontWeight?: 'normal' | 'semibold';
|
|
65
|
+
/** Horizontal only: delay before hover opens in ms */
|
|
66
|
+
delayDuration?: number;
|
|
67
|
+
/** Horizontal only: skip delay when moving between triggers */
|
|
68
|
+
skipDelayDuration?: number;
|
|
69
|
+
/** Controlled active menu item value */
|
|
70
|
+
value?: string;
|
|
71
|
+
/** Default active menu item value (uncontrolled) */
|
|
72
|
+
defaultValue?: string;
|
|
73
|
+
/** Callback when active item changes */
|
|
74
|
+
onValueChange?: (value: string) => void;
|
|
75
|
+
}
|
|
76
|
+
declare const NavigationMenu: React.ForwardRefExoticComponent<NavigationMenuProps & React.RefAttributes<HTMLElement>>;
|
|
77
|
+
interface NavigationMenuListProps extends React.HTMLAttributes<HTMLUListElement> {
|
|
78
|
+
}
|
|
79
|
+
declare const NavigationMenuList: React.ForwardRefExoticComponent<NavigationMenuListProps & React.RefAttributes<HTMLUListElement>>;
|
|
80
|
+
interface NavigationMenuItemProps extends React.HTMLAttributes<HTMLLIElement> {
|
|
81
|
+
/** Value identifier for Radix (horizontal mode) */
|
|
82
|
+
value?: string;
|
|
83
|
+
/** Vertical only: default open state for sub-menu */
|
|
84
|
+
defaultOpen?: boolean;
|
|
85
|
+
}
|
|
86
|
+
declare const NavigationMenuItem: React.ForwardRefExoticComponent<NavigationMenuItemProps & React.RefAttributes<HTMLLIElement>>;
|
|
87
|
+
interface NavigationMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
88
|
+
/** Icon displayed before the label */
|
|
89
|
+
icon?: React.ReactNode;
|
|
90
|
+
/** Custom chevron icon (default: built-in ChevronDown for horizontal, ChevronRight for vertical) */
|
|
91
|
+
chevronIcon?: React.ReactNode;
|
|
92
|
+
}
|
|
93
|
+
declare const NavigationMenuTrigger: React.ForwardRefExoticComponent<NavigationMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
94
|
+
interface NavigationMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
95
|
+
}
|
|
96
|
+
declare const NavigationMenuContent: React.ForwardRefExoticComponent<NavigationMenuContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
97
|
+
interface NavigationMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
98
|
+
/** Whether the link represents the current page */
|
|
99
|
+
active?: boolean;
|
|
100
|
+
/** Compose with custom link component (Radix Slot) */
|
|
101
|
+
asChild?: boolean;
|
|
102
|
+
/** Icon displayed before the label */
|
|
103
|
+
icon?: React.ReactNode;
|
|
104
|
+
}
|
|
105
|
+
declare const NavigationMenuLink: React.ForwardRefExoticComponent<NavigationMenuLinkProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
106
|
+
interface NavigationMenuGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
107
|
+
/** Group header label */
|
|
108
|
+
label?: string;
|
|
109
|
+
}
|
|
110
|
+
declare const NavigationMenuGroup: React.ForwardRefExoticComponent<NavigationMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
111
|
+
interface NavigationMenuIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
112
|
+
/** Active indicator dot color (default: dark/foreground, primary: brand color) */
|
|
113
|
+
color?: 'default' | 'primary';
|
|
114
|
+
}
|
|
115
|
+
declare const NavigationMenuIndicator: React.ForwardRefExoticComponent<NavigationMenuIndicatorProps & React.RefAttributes<HTMLDivElement>>;
|
|
116
|
+
interface NavigationMenuViewportProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
117
|
+
}
|
|
118
|
+
declare const NavigationMenuViewport: React.ForwardRefExoticComponent<NavigationMenuViewportProps & React.RefAttributes<HTMLDivElement>>;
|
|
119
|
+
|
|
120
|
+
export { NavigationMenu, NavigationMenuContent, type NavigationMenuContentProps, NavigationMenuGroup, type NavigationMenuGroupProps, NavigationMenuIndicator, type NavigationMenuIndicatorProps, NavigationMenuItem, type NavigationMenuItemProps, NavigationMenuLink, type NavigationMenuLinkProps, NavigationMenuList, type NavigationMenuListProps, type NavigationMenuProps, type NavigationMenuRadius, NavigationMenuTrigger, type NavigationMenuTriggerProps, NavigationMenuViewport, type NavigationMenuViewportProps, navigationMenuSizeMap };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
type NavigationMenuRadius = 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
declare const navigationMenuSizeMap: {
|
|
5
|
+
readonly sm: {
|
|
6
|
+
readonly trigger: "h-8 text-sm px-3 gap-2";
|
|
7
|
+
readonly link: "h-8 text-sm px-3 gap-2";
|
|
8
|
+
readonly icon: "icon-xs";
|
|
9
|
+
readonly collapsedSquare: "size-8";
|
|
10
|
+
readonly collapsedWidth: 56;
|
|
11
|
+
readonly dropdownLink: "px-3 py-1.5 text-sm gap-2";
|
|
12
|
+
readonly subLink: "h-8 text-sm pl-8 pr-3 gap-2";
|
|
13
|
+
readonly groupLabel: "text-2xs px-3 mb-1";
|
|
14
|
+
readonly groupMargin: "mt-4 first:mt-0";
|
|
15
|
+
};
|
|
16
|
+
readonly md: {
|
|
17
|
+
readonly trigger: "h-9 text-md px-3.5 gap-2";
|
|
18
|
+
readonly link: "h-9 text-md px-3.5 gap-2";
|
|
19
|
+
readonly icon: "icon-sm";
|
|
20
|
+
readonly collapsedSquare: "size-9";
|
|
21
|
+
readonly collapsedWidth: 60;
|
|
22
|
+
readonly dropdownLink: "px-3 py-1.5 text-md gap-2";
|
|
23
|
+
readonly subLink: "h-9 text-md pl-9 pr-3.5 gap-2";
|
|
24
|
+
readonly groupLabel: "text-xs px-3.5 mb-1";
|
|
25
|
+
readonly groupMargin: "mt-4 first:mt-0";
|
|
26
|
+
};
|
|
27
|
+
readonly default: {
|
|
28
|
+
readonly trigger: "h-10 text-md px-4 gap-2";
|
|
29
|
+
readonly link: "h-10 text-md px-4 gap-2";
|
|
30
|
+
readonly icon: "icon-sm";
|
|
31
|
+
readonly collapsedSquare: "size-10";
|
|
32
|
+
readonly collapsedWidth: 64;
|
|
33
|
+
readonly dropdownLink: "px-3 py-2 text-md gap-2";
|
|
34
|
+
readonly subLink: "h-10 text-md pl-10 pr-4 gap-2";
|
|
35
|
+
readonly groupLabel: "text-xs px-4 mb-1.5";
|
|
36
|
+
readonly groupMargin: "mt-5 first:mt-0";
|
|
37
|
+
};
|
|
38
|
+
readonly lg: {
|
|
39
|
+
readonly trigger: "h-12 text-base px-6 gap-2";
|
|
40
|
+
readonly link: "h-12 text-base px-6 gap-2";
|
|
41
|
+
readonly icon: "icon-sm";
|
|
42
|
+
readonly collapsedSquare: "size-12";
|
|
43
|
+
readonly collapsedWidth: 72;
|
|
44
|
+
readonly dropdownLink: "px-3 py-2.5 text-base gap-2";
|
|
45
|
+
readonly subLink: "h-12 text-base pl-12 pr-6 gap-2";
|
|
46
|
+
readonly groupLabel: "text-xs px-4 mb-2";
|
|
47
|
+
readonly groupMargin: "mt-6 first:mt-0";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
interface NavigationMenuProps extends React.HTMLAttributes<HTMLElement> {
|
|
51
|
+
/** Layout orientation */
|
|
52
|
+
orientation?: 'horizontal' | 'vertical';
|
|
53
|
+
/** Size of the menu items */
|
|
54
|
+
size?: 'sm' | 'md' | 'default' | 'lg';
|
|
55
|
+
/** Vertical only: show icons only (collapsed sidebar) */
|
|
56
|
+
collapsed?: boolean;
|
|
57
|
+
/** Vertical only: sidebar width (default: 256px / 16rem) */
|
|
58
|
+
width?: number | string;
|
|
59
|
+
/** Vertical only: collapsed sidebar width (default: 64px / 4rem) */
|
|
60
|
+
collapsedWidth?: number | string;
|
|
61
|
+
/** Border radius for dropdown content and items */
|
|
62
|
+
radius?: NavigationMenuRadius;
|
|
63
|
+
/** Font weight for menu items (default: normal, active items always use semibold) */
|
|
64
|
+
fontWeight?: 'normal' | 'semibold';
|
|
65
|
+
/** Horizontal only: delay before hover opens in ms */
|
|
66
|
+
delayDuration?: number;
|
|
67
|
+
/** Horizontal only: skip delay when moving between triggers */
|
|
68
|
+
skipDelayDuration?: number;
|
|
69
|
+
/** Controlled active menu item value */
|
|
70
|
+
value?: string;
|
|
71
|
+
/** Default active menu item value (uncontrolled) */
|
|
72
|
+
defaultValue?: string;
|
|
73
|
+
/** Callback when active item changes */
|
|
74
|
+
onValueChange?: (value: string) => void;
|
|
75
|
+
}
|
|
76
|
+
declare const NavigationMenu: React.ForwardRefExoticComponent<NavigationMenuProps & React.RefAttributes<HTMLElement>>;
|
|
77
|
+
interface NavigationMenuListProps extends React.HTMLAttributes<HTMLUListElement> {
|
|
78
|
+
}
|
|
79
|
+
declare const NavigationMenuList: React.ForwardRefExoticComponent<NavigationMenuListProps & React.RefAttributes<HTMLUListElement>>;
|
|
80
|
+
interface NavigationMenuItemProps extends React.HTMLAttributes<HTMLLIElement> {
|
|
81
|
+
/** Value identifier for Radix (horizontal mode) */
|
|
82
|
+
value?: string;
|
|
83
|
+
/** Vertical only: default open state for sub-menu */
|
|
84
|
+
defaultOpen?: boolean;
|
|
85
|
+
}
|
|
86
|
+
declare const NavigationMenuItem: React.ForwardRefExoticComponent<NavigationMenuItemProps & React.RefAttributes<HTMLLIElement>>;
|
|
87
|
+
interface NavigationMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
88
|
+
/** Icon displayed before the label */
|
|
89
|
+
icon?: React.ReactNode;
|
|
90
|
+
/** Custom chevron icon (default: built-in ChevronDown for horizontal, ChevronRight for vertical) */
|
|
91
|
+
chevronIcon?: React.ReactNode;
|
|
92
|
+
}
|
|
93
|
+
declare const NavigationMenuTrigger: React.ForwardRefExoticComponent<NavigationMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
94
|
+
interface NavigationMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
95
|
+
}
|
|
96
|
+
declare const NavigationMenuContent: React.ForwardRefExoticComponent<NavigationMenuContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
97
|
+
interface NavigationMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
98
|
+
/** Whether the link represents the current page */
|
|
99
|
+
active?: boolean;
|
|
100
|
+
/** Compose with custom link component (Radix Slot) */
|
|
101
|
+
asChild?: boolean;
|
|
102
|
+
/** Icon displayed before the label */
|
|
103
|
+
icon?: React.ReactNode;
|
|
104
|
+
}
|
|
105
|
+
declare const NavigationMenuLink: React.ForwardRefExoticComponent<NavigationMenuLinkProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
106
|
+
interface NavigationMenuGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
107
|
+
/** Group header label */
|
|
108
|
+
label?: string;
|
|
109
|
+
}
|
|
110
|
+
declare const NavigationMenuGroup: React.ForwardRefExoticComponent<NavigationMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
111
|
+
interface NavigationMenuIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
112
|
+
/** Active indicator dot color (default: dark/foreground, primary: brand color) */
|
|
113
|
+
color?: 'default' | 'primary';
|
|
114
|
+
}
|
|
115
|
+
declare const NavigationMenuIndicator: React.ForwardRefExoticComponent<NavigationMenuIndicatorProps & React.RefAttributes<HTMLDivElement>>;
|
|
116
|
+
interface NavigationMenuViewportProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
117
|
+
}
|
|
118
|
+
declare const NavigationMenuViewport: React.ForwardRefExoticComponent<NavigationMenuViewportProps & React.RefAttributes<HTMLDivElement>>;
|
|
119
|
+
|
|
120
|
+
export { NavigationMenu, NavigationMenuContent, type NavigationMenuContentProps, NavigationMenuGroup, type NavigationMenuGroupProps, NavigationMenuIndicator, type NavigationMenuIndicatorProps, NavigationMenuItem, type NavigationMenuItemProps, NavigationMenuLink, type NavigationMenuLinkProps, NavigationMenuList, type NavigationMenuListProps, type NavigationMenuProps, type NavigationMenuRadius, NavigationMenuTrigger, type NavigationMenuTriggerProps, NavigationMenuViewport, type NavigationMenuViewportProps, navigationMenuSizeMap };
|