@cytario/design 7.0.0 → 7.2.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/dist/index.css +1 -1
- package/dist/index.d.ts +53 -6
- package/dist/index.js +300 -190
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -150,6 +150,7 @@ import {
|
|
|
150
150
|
Plug,
|
|
151
151
|
Plus,
|
|
152
152
|
RotateCcw,
|
|
153
|
+
RotateCw,
|
|
153
154
|
Search,
|
|
154
155
|
SearchX,
|
|
155
156
|
Send,
|
|
@@ -242,6 +243,7 @@ var iconRegistry = {
|
|
|
242
243
|
Plug,
|
|
243
244
|
Plus,
|
|
244
245
|
RotateCcw,
|
|
246
|
+
RotateCw,
|
|
245
247
|
Search,
|
|
246
248
|
SearchX,
|
|
247
249
|
Send,
|
|
@@ -736,6 +738,7 @@ function IconButtonBase({
|
|
|
736
738
|
isLoading = false,
|
|
737
739
|
isDisabled,
|
|
738
740
|
className,
|
|
741
|
+
ref,
|
|
739
742
|
...props
|
|
740
743
|
}) {
|
|
741
744
|
const cx = twMerge4(
|
|
@@ -751,6 +754,7 @@ function IconButtonBase({
|
|
|
751
754
|
Component,
|
|
752
755
|
{
|
|
753
756
|
...props,
|
|
757
|
+
ref,
|
|
754
758
|
"aria-label": label,
|
|
755
759
|
isDisabled: isDisabled || isLoading,
|
|
756
760
|
className: cx,
|
|
@@ -1935,14 +1939,19 @@ import {
|
|
|
1935
1939
|
MenuItem as AriaMenuItem,
|
|
1936
1940
|
Popover as Popover2
|
|
1937
1941
|
} from "react-aria-components";
|
|
1942
|
+
import { twMerge as twMerge10 } from "tailwind-merge";
|
|
1943
|
+
|
|
1944
|
+
// src/components/Menu/menuStyles.ts
|
|
1945
|
+
var popoverStyles = `
|
|
1946
|
+
bg-background rounded-md shadow-lg
|
|
1947
|
+
border border-border
|
|
1948
|
+
py-1 min-w-48
|
|
1949
|
+
entering:animate-in entering:fade-in entering:zoom-in-95
|
|
1950
|
+
exiting:animate-out exiting:fade-out exiting:zoom-out-95
|
|
1951
|
+
`;
|
|
1952
|
+
|
|
1953
|
+
// src/components/Menu/Menu.tsx
|
|
1938
1954
|
import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1939
|
-
var popoverStyles = [
|
|
1940
|
-
"bg-background rounded-md",
|
|
1941
|
-
"shadow-lg border border-border",
|
|
1942
|
-
"py-1 min-w-48",
|
|
1943
|
-
"entering:animate-in entering:fade-in entering:zoom-in-95",
|
|
1944
|
-
"exiting:animate-out exiting:fade-out exiting:zoom-out-95"
|
|
1945
|
-
].join(" ");
|
|
1946
1955
|
function Menu({
|
|
1947
1956
|
items,
|
|
1948
1957
|
content,
|
|
@@ -1957,61 +1966,161 @@ function Menu({
|
|
|
1957
1966
|
const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
|
|
1958
1967
|
return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
|
|
1959
1968
|
children,
|
|
1960
|
-
/* @__PURE__ */ jsx24(
|
|
1961
|
-
|
|
1969
|
+
/* @__PURE__ */ jsx24(Popover2, { className: twMerge10(popoverStyles, className), children: items ? /* @__PURE__ */ jsx24(
|
|
1970
|
+
AriaMenu,
|
|
1962
1971
|
{
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1972
|
+
items,
|
|
1973
|
+
onAction: (key) => {
|
|
1974
|
+
const item = items.find((i) => i.id === key);
|
|
1975
|
+
item?.onAction?.();
|
|
1976
|
+
onAction?.(key);
|
|
1977
|
+
},
|
|
1978
|
+
...selectionProps,
|
|
1979
|
+
className: "outline-none",
|
|
1980
|
+
children: (item) => /* @__PURE__ */ jsxs18(
|
|
1981
|
+
AriaMenuItem,
|
|
1966
1982
|
{
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1983
|
+
id: item.id,
|
|
1984
|
+
href: item.href,
|
|
1985
|
+
target: item.target,
|
|
1986
|
+
isDisabled: item.isDisabled,
|
|
1987
|
+
className: [
|
|
1988
|
+
"flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
|
|
1989
|
+
"transition-colors",
|
|
1990
|
+
"focus:bg-muted",
|
|
1991
|
+
"hover:bg-muted",
|
|
1992
|
+
"disabled:opacity-50 disabled:pointer-events-none",
|
|
1993
|
+
item.isDanger ? "text-destructive" : "text-foreground"
|
|
1994
|
+
].filter(Boolean).join(" "),
|
|
1995
|
+
children: [
|
|
1996
|
+
item.icon && /* @__PURE__ */ jsx24(Icon, { icon: item.icon, size: "sm" }),
|
|
1997
|
+
/* @__PURE__ */ jsx24("span", { className: "flex-1", children: item.label }),
|
|
1998
|
+
item.endContent && /* @__PURE__ */ jsx24("span", { className: "ml-auto flex items-center", children: item.endContent })
|
|
1999
|
+
]
|
|
2000
|
+
}
|
|
2001
|
+
)
|
|
2002
|
+
}
|
|
2003
|
+
) : /* @__PURE__ */ jsx24(
|
|
2004
|
+
AriaMenu,
|
|
2005
|
+
{
|
|
2006
|
+
onAction: (key) => onAction?.(key),
|
|
2007
|
+
...selectionProps,
|
|
2008
|
+
className: "outline-none",
|
|
2009
|
+
children: content
|
|
2010
|
+
}
|
|
2011
|
+
) })
|
|
2012
|
+
] });
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
// src/components/Menu/useContextMenu.tsx
|
|
2016
|
+
import {
|
|
2017
|
+
useCallback as useCallback3,
|
|
2018
|
+
useEffect as useEffect3,
|
|
2019
|
+
useRef as useRef5,
|
|
2020
|
+
useState as useState7
|
|
2021
|
+
} from "react";
|
|
2022
|
+
import {
|
|
2023
|
+
Menu as AriaMenu2,
|
|
2024
|
+
MenuTrigger as MenuTrigger2,
|
|
2025
|
+
Popover as Popover3,
|
|
2026
|
+
Pressable
|
|
2027
|
+
} from "react-aria-components";
|
|
2028
|
+
import { twMerge as twMerge11 } from "tailwind-merge";
|
|
2029
|
+
import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2030
|
+
function useContextMenu({
|
|
2031
|
+
content,
|
|
2032
|
+
onAction,
|
|
2033
|
+
className
|
|
2034
|
+
}) {
|
|
2035
|
+
const [anchor, setAnchor] = useState7(null);
|
|
2036
|
+
const anchorRef = useRef5(null);
|
|
2037
|
+
const popoverRef = useRef5(null);
|
|
2038
|
+
const isOpen = anchor !== null;
|
|
2039
|
+
const close = useCallback3(() => setAnchor(null), []);
|
|
2040
|
+
const onContextMenu = useCallback3((event) => {
|
|
2041
|
+
event.preventDefault();
|
|
2042
|
+
setAnchor({ x: event.clientX, y: event.clientY });
|
|
2043
|
+
}, []);
|
|
2044
|
+
const onPress = useCallback3((event) => {
|
|
2045
|
+
const rect = event.target.getBoundingClientRect();
|
|
2046
|
+
setAnchor({ x: rect.left, y: rect.bottom });
|
|
2047
|
+
}, []);
|
|
2048
|
+
useEffect3(() => {
|
|
2049
|
+
if (!isOpen) return;
|
|
2050
|
+
const isInside = (target) => popoverRef.current?.contains(target) ?? false;
|
|
2051
|
+
const onPointerDown = (event) => {
|
|
2052
|
+
if (!isInside(event.target)) close();
|
|
2053
|
+
};
|
|
2054
|
+
const onOutsideContextMenu = (event) => {
|
|
2055
|
+
if (isInside(event.target)) return;
|
|
2056
|
+
event.preventDefault();
|
|
2057
|
+
close();
|
|
2058
|
+
};
|
|
2059
|
+
const onKeyDown = (event) => {
|
|
2060
|
+
if (event.key === "Escape") close();
|
|
2061
|
+
};
|
|
2062
|
+
document.addEventListener("pointerdown", onPointerDown, true);
|
|
2063
|
+
document.addEventListener("contextmenu", onOutsideContextMenu, true);
|
|
2064
|
+
document.addEventListener("keydown", onKeyDown, true);
|
|
2065
|
+
return () => {
|
|
2066
|
+
document.removeEventListener("pointerdown", onPointerDown, true);
|
|
2067
|
+
document.removeEventListener("contextmenu", onOutsideContextMenu, true);
|
|
2068
|
+
document.removeEventListener("keydown", onKeyDown, true);
|
|
2069
|
+
};
|
|
2070
|
+
}, [isOpen, close]);
|
|
2071
|
+
const menu = /* @__PURE__ */ jsxs19(
|
|
2072
|
+
MenuTrigger2,
|
|
2073
|
+
{
|
|
2074
|
+
isOpen,
|
|
2075
|
+
onOpenChange: (open) => {
|
|
2076
|
+
if (!open) close();
|
|
2077
|
+
},
|
|
2078
|
+
children: [
|
|
2079
|
+
/* @__PURE__ */ jsx25(Pressable, { children: /* @__PURE__ */ jsx25(
|
|
2080
|
+
"span",
|
|
2081
|
+
{
|
|
2082
|
+
ref: anchorRef,
|
|
2083
|
+
"aria-hidden": true,
|
|
2084
|
+
className: "pointer-events-none fixed h-0 w-0",
|
|
2085
|
+
style: { left: anchor?.x ?? 0, top: anchor?.y ?? 0 }
|
|
2086
|
+
}
|
|
2087
|
+
) }),
|
|
2088
|
+
/* @__PURE__ */ jsx25(
|
|
2089
|
+
Popover3,
|
|
2090
|
+
{
|
|
2091
|
+
isNonModal: true,
|
|
2092
|
+
placement: "bottom start",
|
|
2093
|
+
ref: popoverRef,
|
|
2094
|
+
className: twMerge11(popoverStyles, className),
|
|
2095
|
+
children: /* @__PURE__ */ jsx25(
|
|
2096
|
+
AriaMenu2,
|
|
1977
2097
|
{
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
"focus:bg-muted",
|
|
1986
|
-
"hover:bg-muted",
|
|
1987
|
-
"disabled:opacity-50 disabled:pointer-events-none",
|
|
1988
|
-
item.isDanger ? "text-destructive" : "text-foreground"
|
|
1989
|
-
].filter(Boolean).join(" "),
|
|
1990
|
-
children: [
|
|
1991
|
-
item.icon && /* @__PURE__ */ jsx24(Icon, { icon: item.icon, size: "sm" }),
|
|
1992
|
-
/* @__PURE__ */ jsx24("span", { className: "flex-1", children: item.label }),
|
|
1993
|
-
item.endContent && /* @__PURE__ */ jsx24("span", { className: "ml-auto flex items-center", children: item.endContent })
|
|
1994
|
-
]
|
|
2098
|
+
autoFocus: "first",
|
|
2099
|
+
onAction: (key) => {
|
|
2100
|
+
onAction?.(String(key));
|
|
2101
|
+
close();
|
|
2102
|
+
},
|
|
2103
|
+
className: "outline-none",
|
|
2104
|
+
children: content
|
|
1995
2105
|
}
|
|
1996
2106
|
)
|
|
1997
2107
|
}
|
|
1998
|
-
) : /* @__PURE__ */ jsx24(
|
|
1999
|
-
AriaMenu,
|
|
2000
|
-
{
|
|
2001
|
-
onAction: (key) => onAction?.(key),
|
|
2002
|
-
...selectionProps,
|
|
2003
|
-
className: "outline-none",
|
|
2004
|
-
children: content
|
|
2005
|
-
}
|
|
2006
2108
|
)
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2109
|
+
]
|
|
2110
|
+
}
|
|
2111
|
+
);
|
|
2112
|
+
return {
|
|
2113
|
+
targetProps: { onContextMenu },
|
|
2114
|
+
triggerProps: { onPress },
|
|
2115
|
+
menu,
|
|
2116
|
+
isOpen,
|
|
2117
|
+
close
|
|
2118
|
+
};
|
|
2010
2119
|
}
|
|
2011
2120
|
|
|
2012
2121
|
// src/components/Menu/MenuItem.tsx
|
|
2013
2122
|
import { MenuItem as AriaMenuItem2 } from "react-aria-components";
|
|
2014
|
-
import { jsx as
|
|
2123
|
+
import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2015
2124
|
function MenuItem({
|
|
2016
2125
|
id,
|
|
2017
2126
|
children,
|
|
@@ -2025,7 +2134,7 @@ function MenuItem({
|
|
|
2025
2134
|
textValue,
|
|
2026
2135
|
className
|
|
2027
2136
|
}) {
|
|
2028
|
-
return /* @__PURE__ */
|
|
2137
|
+
return /* @__PURE__ */ jsxs20(
|
|
2029
2138
|
AriaMenuItem2,
|
|
2030
2139
|
{
|
|
2031
2140
|
id,
|
|
@@ -2044,9 +2153,9 @@ function MenuItem({
|
|
|
2044
2153
|
className
|
|
2045
2154
|
].filter(Boolean).join(" "),
|
|
2046
2155
|
children: [
|
|
2047
|
-
icon && /* @__PURE__ */
|
|
2048
|
-
/* @__PURE__ */
|
|
2049
|
-
endContent && /* @__PURE__ */
|
|
2156
|
+
icon && /* @__PURE__ */ jsx26(Icon, { icon, size: "sm" }),
|
|
2157
|
+
/* @__PURE__ */ jsx26("span", { className: "flex-1", children }),
|
|
2158
|
+
endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: endContent })
|
|
2050
2159
|
]
|
|
2051
2160
|
}
|
|
2052
2161
|
);
|
|
@@ -2055,7 +2164,7 @@ function MenuItem({
|
|
|
2055
2164
|
// src/components/Menu/MenuCheckboxItem.tsx
|
|
2056
2165
|
import { MenuItem as AriaMenuItem3 } from "react-aria-components";
|
|
2057
2166
|
import { Check as Check4 } from "lucide-react";
|
|
2058
|
-
import { Fragment as Fragment7, jsx as
|
|
2167
|
+
import { Fragment as Fragment7, jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2059
2168
|
function MenuCheckboxItem({
|
|
2060
2169
|
id,
|
|
2061
2170
|
children,
|
|
@@ -2063,7 +2172,7 @@ function MenuCheckboxItem({
|
|
|
2063
2172
|
isDisabled,
|
|
2064
2173
|
className
|
|
2065
2174
|
}) {
|
|
2066
|
-
return /* @__PURE__ */
|
|
2175
|
+
return /* @__PURE__ */ jsx27(
|
|
2067
2176
|
AriaMenuItem3,
|
|
2068
2177
|
{
|
|
2069
2178
|
id,
|
|
@@ -2079,9 +2188,9 @@ function MenuCheckboxItem({
|
|
|
2079
2188
|
isSelected ? "font-medium" : "",
|
|
2080
2189
|
className
|
|
2081
2190
|
].filter(Boolean).join(" "),
|
|
2082
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
2083
|
-
/* @__PURE__ */
|
|
2084
|
-
/* @__PURE__ */
|
|
2191
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs21(Fragment7, { children: [
|
|
2192
|
+
/* @__PURE__ */ jsx27("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx27(Check4, { size: 14, className: "text-primary", "aria-hidden": "true" }) }),
|
|
2193
|
+
/* @__PURE__ */ jsx27("span", { className: "flex-1", children })
|
|
2085
2194
|
] })
|
|
2086
2195
|
}
|
|
2087
2196
|
);
|
|
@@ -2092,15 +2201,15 @@ import {
|
|
|
2092
2201
|
MenuSection as AriaMenuSection,
|
|
2093
2202
|
Header
|
|
2094
2203
|
} from "react-aria-components";
|
|
2095
|
-
import { jsx as
|
|
2204
|
+
import { jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2096
2205
|
function MenuSection({
|
|
2097
2206
|
header,
|
|
2098
2207
|
children,
|
|
2099
2208
|
"aria-label": ariaLabel,
|
|
2100
2209
|
className
|
|
2101
2210
|
}) {
|
|
2102
|
-
return /* @__PURE__ */
|
|
2103
|
-
header && /* @__PURE__ */
|
|
2211
|
+
return /* @__PURE__ */ jsxs22(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
|
|
2212
|
+
header && /* @__PURE__ */ jsx28(
|
|
2104
2213
|
Header,
|
|
2105
2214
|
{
|
|
2106
2215
|
className: [
|
|
@@ -2119,16 +2228,16 @@ function MenuSection({
|
|
|
2119
2228
|
|
|
2120
2229
|
// src/components/Menu/MenuHeader.tsx
|
|
2121
2230
|
import { Header as Header2 } from "react-aria-components";
|
|
2122
|
-
import { jsx as
|
|
2231
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
2123
2232
|
function MenuHeader({ children, className }) {
|
|
2124
|
-
return /* @__PURE__ */
|
|
2233
|
+
return /* @__PURE__ */ jsx29(Header2, { className, children });
|
|
2125
2234
|
}
|
|
2126
2235
|
|
|
2127
2236
|
// src/components/Menu/MenuSeparator.tsx
|
|
2128
2237
|
import { Separator } from "react-aria-components";
|
|
2129
|
-
import { jsx as
|
|
2238
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
2130
2239
|
function MenuSeparator({ className }) {
|
|
2131
|
-
return /* @__PURE__ */
|
|
2240
|
+
return /* @__PURE__ */ jsx30(
|
|
2132
2241
|
Separator,
|
|
2133
2242
|
{
|
|
2134
2243
|
className: [
|
|
@@ -2145,17 +2254,17 @@ import {
|
|
|
2145
2254
|
Popover as AriaPopover,
|
|
2146
2255
|
Button as AriaButton3
|
|
2147
2256
|
} from "react-aria-components";
|
|
2148
|
-
import { twMerge as
|
|
2149
|
-
import { jsx as
|
|
2150
|
-
function
|
|
2151
|
-
return /* @__PURE__ */
|
|
2257
|
+
import { twMerge as twMerge12 } from "tailwind-merge";
|
|
2258
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
2259
|
+
function Popover4({ children, isOpen, onOpenChange }) {
|
|
2260
|
+
return /* @__PURE__ */ jsx31(DialogTrigger, { isOpen, onOpenChange, children });
|
|
2152
2261
|
}
|
|
2153
2262
|
function PopoverTrigger({ children, className }) {
|
|
2154
2263
|
const cx = `
|
|
2155
2264
|
inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer
|
|
2156
2265
|
focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-sm
|
|
2157
2266
|
`;
|
|
2158
|
-
return /* @__PURE__ */
|
|
2267
|
+
return /* @__PURE__ */ jsx31(AriaButton3, { className: twMerge12(cx, className), children });
|
|
2159
2268
|
}
|
|
2160
2269
|
function PopoverContent({
|
|
2161
2270
|
placement = "bottom",
|
|
@@ -2176,13 +2285,13 @@ function PopoverContent({
|
|
|
2176
2285
|
entering:placement-left:slide-in-from-right-1
|
|
2177
2286
|
entering:placement-right:slide-in-from-left-1
|
|
2178
2287
|
`;
|
|
2179
|
-
return /* @__PURE__ */
|
|
2288
|
+
return /* @__PURE__ */ jsx31(
|
|
2180
2289
|
AriaPopover,
|
|
2181
2290
|
{
|
|
2182
2291
|
...rest,
|
|
2183
2292
|
placement,
|
|
2184
2293
|
offset: offsetPx,
|
|
2185
|
-
className:
|
|
2294
|
+
className: twMerge12(cx, className),
|
|
2186
2295
|
children
|
|
2187
2296
|
}
|
|
2188
2297
|
);
|
|
@@ -2190,14 +2299,14 @@ function PopoverContent({
|
|
|
2190
2299
|
|
|
2191
2300
|
// src/components/Tabs/Tabs.tsx
|
|
2192
2301
|
import { createContext as createContext2, useContext as useContext2 } from "react";
|
|
2193
|
-
import { twMerge as
|
|
2302
|
+
import { twMerge as twMerge13 } from "tailwind-merge";
|
|
2194
2303
|
import {
|
|
2195
2304
|
Tabs as AriaTabs,
|
|
2196
2305
|
TabList as AriaTabList,
|
|
2197
2306
|
Tab as AriaTab,
|
|
2198
2307
|
TabPanel as AriaTabPanel
|
|
2199
2308
|
} from "react-aria-components";
|
|
2200
|
-
import { jsx as
|
|
2309
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
2201
2310
|
var TabsContext = createContext2({
|
|
2202
2311
|
variant: "underline",
|
|
2203
2312
|
size: "md"
|
|
@@ -2215,12 +2324,12 @@ function Tabs({
|
|
|
2215
2324
|
children,
|
|
2216
2325
|
...props
|
|
2217
2326
|
}) {
|
|
2218
|
-
return /* @__PURE__ */
|
|
2327
|
+
return /* @__PURE__ */ jsx32(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx32(
|
|
2219
2328
|
AriaTabs,
|
|
2220
2329
|
{
|
|
2221
2330
|
...props,
|
|
2222
2331
|
orientation,
|
|
2223
|
-
className:
|
|
2332
|
+
className: twMerge13(
|
|
2224
2333
|
orientation === "vertical" ? "flex" : "",
|
|
2225
2334
|
className
|
|
2226
2335
|
),
|
|
@@ -2235,11 +2344,11 @@ function TabList({
|
|
|
2235
2344
|
const { variant } = useContext2(TabsContext);
|
|
2236
2345
|
const baseStyles = variant === "unstyled" ? "flex items-center" : variant === "underline" ? "flex items-center border-b border-border" : "inline-flex items-center bg-muted rounded-lg p-1 gap-1";
|
|
2237
2346
|
const verticalStyles = variant === "unstyled" ? "flex-col" : variant === "underline" ? "flex-col border-b-0 border-r border-border" : "flex-col";
|
|
2238
|
-
return /* @__PURE__ */
|
|
2347
|
+
return /* @__PURE__ */ jsx32(
|
|
2239
2348
|
AriaTabList,
|
|
2240
2349
|
{
|
|
2241
2350
|
...props,
|
|
2242
|
-
className: ({ orientation }) =>
|
|
2351
|
+
className: ({ orientation }) => twMerge13(
|
|
2243
2352
|
baseStyles,
|
|
2244
2353
|
orientation === "vertical" ? verticalStyles : "",
|
|
2245
2354
|
className
|
|
@@ -2249,20 +2358,20 @@ function TabList({
|
|
|
2249
2358
|
}
|
|
2250
2359
|
function Tab({ className, ...props }) {
|
|
2251
2360
|
const { variant, size } = useContext2(TabsContext);
|
|
2252
|
-
return /* @__PURE__ */
|
|
2361
|
+
return /* @__PURE__ */ jsx32(
|
|
2253
2362
|
AriaTab,
|
|
2254
2363
|
{
|
|
2255
2364
|
...props,
|
|
2256
2365
|
className: ({ isSelected, isDisabled, isHovered, isPressed }) => {
|
|
2257
2366
|
if (variant === "unstyled") {
|
|
2258
|
-
return
|
|
2367
|
+
return twMerge13(
|
|
2259
2368
|
"cursor-pointer outline-none",
|
|
2260
2369
|
"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
2261
2370
|
isDisabled ? "opacity-50 pointer-events-none" : "",
|
|
2262
2371
|
className
|
|
2263
2372
|
);
|
|
2264
2373
|
}
|
|
2265
|
-
return
|
|
2374
|
+
return twMerge13(
|
|
2266
2375
|
// Base
|
|
2267
2376
|
"cursor-pointer outline-none transition-colors",
|
|
2268
2377
|
"font-medium",
|
|
@@ -2306,11 +2415,11 @@ function getTabVariantStyles(variant, state) {
|
|
|
2306
2415
|
}
|
|
2307
2416
|
function TabPanel({ className, ...props }) {
|
|
2308
2417
|
const { variant } = useContext2(TabsContext);
|
|
2309
|
-
return /* @__PURE__ */
|
|
2418
|
+
return /* @__PURE__ */ jsx32(
|
|
2310
2419
|
AriaTabPanel,
|
|
2311
2420
|
{
|
|
2312
2421
|
...props,
|
|
2313
|
-
className:
|
|
2422
|
+
className: twMerge13(
|
|
2314
2423
|
variant === "unstyled" ? "outline-none" : "mt-4 outline-none",
|
|
2315
2424
|
className
|
|
2316
2425
|
)
|
|
@@ -2328,12 +2437,12 @@ import {
|
|
|
2328
2437
|
|
|
2329
2438
|
// src/components/SegmentedControl/SegmentedControl.tsx
|
|
2330
2439
|
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
2331
|
-
import { twMerge as
|
|
2440
|
+
import { twMerge as twMerge14 } from "tailwind-merge";
|
|
2332
2441
|
import {
|
|
2333
2442
|
ToggleButtonGroup as AriaToggleButtonGroup,
|
|
2334
2443
|
ToggleButton as AriaToggleButton3
|
|
2335
2444
|
} from "react-aria-components";
|
|
2336
|
-
import { jsx as
|
|
2445
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
2337
2446
|
var SegmentedControlContext = createContext3({
|
|
2338
2447
|
size: "md"
|
|
2339
2448
|
});
|
|
@@ -2353,7 +2462,7 @@ function SegmentedControl({
|
|
|
2353
2462
|
...props
|
|
2354
2463
|
}) {
|
|
2355
2464
|
const isNoneMode = selectionMode === "none";
|
|
2356
|
-
return /* @__PURE__ */
|
|
2465
|
+
return /* @__PURE__ */ jsx33(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx33(
|
|
2357
2466
|
AriaToggleButtonGroup,
|
|
2358
2467
|
{
|
|
2359
2468
|
...props,
|
|
@@ -2361,7 +2470,7 @@ function SegmentedControl({
|
|
|
2361
2470
|
selectedKeys: isNoneMode ? /* @__PURE__ */ new Set() : selectedKeys,
|
|
2362
2471
|
defaultSelectedKeys: isNoneMode ? void 0 : defaultSelectedKeys,
|
|
2363
2472
|
onSelectionChange: isNoneMode ? void 0 : onSelectionChange,
|
|
2364
|
-
className:
|
|
2473
|
+
className: twMerge14(
|
|
2365
2474
|
"inline-flex items-center rounded-lg border border-border bg-muted p-0.5 gap-0.5",
|
|
2366
2475
|
className
|
|
2367
2476
|
),
|
|
@@ -2374,11 +2483,11 @@ function SegmentedControlItem({
|
|
|
2374
2483
|
...props
|
|
2375
2484
|
}) {
|
|
2376
2485
|
const { size } = useContext3(SegmentedControlContext);
|
|
2377
|
-
return /* @__PURE__ */
|
|
2486
|
+
return /* @__PURE__ */ jsx33(
|
|
2378
2487
|
AriaToggleButton3,
|
|
2379
2488
|
{
|
|
2380
2489
|
...props,
|
|
2381
|
-
className: ({ isSelected, isHovered, isPressed, isDisabled }) =>
|
|
2490
|
+
className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge14(
|
|
2382
2491
|
// Base layout
|
|
2383
2492
|
"inline-flex items-center justify-center",
|
|
2384
2493
|
"rounded-md",
|
|
@@ -2399,8 +2508,8 @@ function SegmentedControlItem({
|
|
|
2399
2508
|
}
|
|
2400
2509
|
|
|
2401
2510
|
// src/components/Badge/Badge.tsx
|
|
2402
|
-
import { twMerge as
|
|
2403
|
-
import { jsx as
|
|
2511
|
+
import { twMerge as twMerge15 } from "tailwind-merge";
|
|
2512
|
+
import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2404
2513
|
var variantStyles4 = {
|
|
2405
2514
|
neutral: "bg-(--color-badge-neutral-bg) text-(--color-badge-neutral-text)",
|
|
2406
2515
|
purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text)",
|
|
@@ -2421,18 +2530,18 @@ function Badge({
|
|
|
2421
2530
|
icon,
|
|
2422
2531
|
className
|
|
2423
2532
|
}) {
|
|
2424
|
-
return /* @__PURE__ */
|
|
2533
|
+
return /* @__PURE__ */ jsxs23(
|
|
2425
2534
|
"span",
|
|
2426
2535
|
{
|
|
2427
|
-
className:
|
|
2536
|
+
className: twMerge15(
|
|
2428
2537
|
"inline-flex items-center gap-1 rounded-full",
|
|
2429
|
-
"text-xs font-medium leading-tight",
|
|
2538
|
+
"text-xs font-medium leading-tight tracking-wider tabular-nums",
|
|
2430
2539
|
variantStyles4[variant],
|
|
2431
2540
|
sizeStyles6[size],
|
|
2432
2541
|
className
|
|
2433
2542
|
),
|
|
2434
2543
|
children: [
|
|
2435
|
-
icon && /* @__PURE__ */
|
|
2544
|
+
icon && /* @__PURE__ */ jsx34(Icon, { icon, size: "xs" }),
|
|
2436
2545
|
children
|
|
2437
2546
|
]
|
|
2438
2547
|
}
|
|
@@ -2440,9 +2549,9 @@ function Badge({
|
|
|
2440
2549
|
}
|
|
2441
2550
|
|
|
2442
2551
|
// src/components/Card/Card.tsx
|
|
2443
|
-
import { useCallback as
|
|
2444
|
-
import { twMerge as
|
|
2445
|
-
import { Fragment as Fragment8, jsx as
|
|
2552
|
+
import { useCallback as useCallback4 } from "react";
|
|
2553
|
+
import { twMerge as twMerge16 } from "tailwind-merge";
|
|
2554
|
+
import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2446
2555
|
var paddingStyles = {
|
|
2447
2556
|
none: "p-0",
|
|
2448
2557
|
sm: "p-3",
|
|
@@ -2460,13 +2569,13 @@ function Card({
|
|
|
2460
2569
|
className
|
|
2461
2570
|
}) {
|
|
2462
2571
|
const isInteractive = interactive || !!href || !!onPress;
|
|
2463
|
-
const containerClass =
|
|
2572
|
+
const containerClass = twMerge16(
|
|
2464
2573
|
"bg-background border border-border rounded-lg overflow-hidden shadow-sm",
|
|
2465
2574
|
isInteractive && "transition-all hover:shadow-md hover:border-ring cursor-pointer",
|
|
2466
2575
|
(href || onPress) && "block focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
|
|
2467
2576
|
className
|
|
2468
2577
|
);
|
|
2469
|
-
const handleKeyDown =
|
|
2578
|
+
const handleKeyDown = useCallback4(
|
|
2470
2579
|
(e) => {
|
|
2471
2580
|
if (onPress && (e.key === "Enter" || e.key === " ")) {
|
|
2472
2581
|
e.preventDefault();
|
|
@@ -2475,22 +2584,22 @@ function Card({
|
|
|
2475
2584
|
},
|
|
2476
2585
|
[onPress]
|
|
2477
2586
|
);
|
|
2478
|
-
const content = /* @__PURE__ */
|
|
2479
|
-
header && /* @__PURE__ */
|
|
2587
|
+
const content = /* @__PURE__ */ jsxs24(Fragment8, { children: [
|
|
2588
|
+
header && /* @__PURE__ */ jsx35(
|
|
2480
2589
|
"div",
|
|
2481
2590
|
{
|
|
2482
|
-
className:
|
|
2591
|
+
className: twMerge16(
|
|
2483
2592
|
"border-b border-border",
|
|
2484
2593
|
paddingStyles[padding]
|
|
2485
2594
|
),
|
|
2486
2595
|
children: header
|
|
2487
2596
|
}
|
|
2488
2597
|
),
|
|
2489
|
-
/* @__PURE__ */
|
|
2490
|
-
footer && /* @__PURE__ */
|
|
2598
|
+
/* @__PURE__ */ jsx35("div", { className: paddingStyles[padding], children }),
|
|
2599
|
+
footer && /* @__PURE__ */ jsx35(
|
|
2491
2600
|
"div",
|
|
2492
2601
|
{
|
|
2493
|
-
className:
|
|
2602
|
+
className: twMerge16(
|
|
2494
2603
|
"border-t border-border",
|
|
2495
2604
|
paddingStyles[padding]
|
|
2496
2605
|
),
|
|
@@ -2499,10 +2608,10 @@ function Card({
|
|
|
2499
2608
|
)
|
|
2500
2609
|
] });
|
|
2501
2610
|
if (href) {
|
|
2502
|
-
return /* @__PURE__ */
|
|
2611
|
+
return /* @__PURE__ */ jsx35("a", { href, className: containerClass, children: content });
|
|
2503
2612
|
}
|
|
2504
2613
|
if (onPress) {
|
|
2505
|
-
return /* @__PURE__ */
|
|
2614
|
+
return /* @__PURE__ */ jsx35(
|
|
2506
2615
|
"div",
|
|
2507
2616
|
{
|
|
2508
2617
|
role: "button",
|
|
@@ -2514,13 +2623,13 @@ function Card({
|
|
|
2514
2623
|
}
|
|
2515
2624
|
);
|
|
2516
2625
|
}
|
|
2517
|
-
return /* @__PURE__ */
|
|
2626
|
+
return /* @__PURE__ */ jsx35("div", { className: containerClass, children: content });
|
|
2518
2627
|
}
|
|
2519
2628
|
|
|
2520
2629
|
// src/components/DeltaIndicator/DeltaIndicator.tsx
|
|
2521
2630
|
import { ArrowUp as ArrowUp2, ArrowDown as ArrowDown2, Minus as Minus2 } from "lucide-react";
|
|
2522
|
-
import { twMerge as
|
|
2523
|
-
import { jsx as
|
|
2631
|
+
import { twMerge as twMerge17 } from "tailwind-merge";
|
|
2632
|
+
import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2524
2633
|
function getDirection(current, previous) {
|
|
2525
2634
|
const diff = current - previous;
|
|
2526
2635
|
if (diff > 0) return "increase";
|
|
@@ -2573,16 +2682,16 @@ function DeltaIndicator({
|
|
|
2573
2682
|
className
|
|
2574
2683
|
}) {
|
|
2575
2684
|
if (unavailable) {
|
|
2576
|
-
return /* @__PURE__ */
|
|
2685
|
+
return /* @__PURE__ */ jsxs25(
|
|
2577
2686
|
"span",
|
|
2578
2687
|
{
|
|
2579
|
-
className:
|
|
2688
|
+
className: twMerge17(
|
|
2580
2689
|
"inline-flex items-center gap-1 font-medium",
|
|
2581
2690
|
"text-muted-foreground",
|
|
2582
2691
|
className
|
|
2583
2692
|
),
|
|
2584
2693
|
children: [
|
|
2585
|
-
label && /* @__PURE__ */
|
|
2694
|
+
label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
|
|
2586
2695
|
unavailableText
|
|
2587
2696
|
]
|
|
2588
2697
|
}
|
|
@@ -2612,10 +2721,10 @@ function DeltaIndicator({
|
|
|
2612
2721
|
}
|
|
2613
2722
|
}
|
|
2614
2723
|
const isPill = mode === "pill";
|
|
2615
|
-
return /* @__PURE__ */
|
|
2724
|
+
return /* @__PURE__ */ jsxs25(
|
|
2616
2725
|
"span",
|
|
2617
2726
|
{
|
|
2618
|
-
className:
|
|
2727
|
+
className: twMerge17(
|
|
2619
2728
|
"inline-flex items-center gap-1 font-medium",
|
|
2620
2729
|
colorStyles2,
|
|
2621
2730
|
isPill && [
|
|
@@ -2626,8 +2735,8 @@ function DeltaIndicator({
|
|
|
2626
2735
|
className
|
|
2627
2736
|
),
|
|
2628
2737
|
children: [
|
|
2629
|
-
label && /* @__PURE__ */
|
|
2630
|
-
/* @__PURE__ */
|
|
2738
|
+
label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
|
|
2739
|
+
/* @__PURE__ */ jsx36(IconComponent, { size: 14, "aria-hidden": true }),
|
|
2631
2740
|
valueText
|
|
2632
2741
|
]
|
|
2633
2742
|
}
|
|
@@ -2635,8 +2744,8 @@ function DeltaIndicator({
|
|
|
2635
2744
|
}
|
|
2636
2745
|
|
|
2637
2746
|
// src/components/ProgressBar/ProgressBar.tsx
|
|
2638
|
-
import { twMerge as
|
|
2639
|
-
import { jsx as
|
|
2747
|
+
import { twMerge as twMerge18 } from "tailwind-merge";
|
|
2748
|
+
import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2640
2749
|
var fillStyles = {
|
|
2641
2750
|
brand: "bg-(--color-progress-fill)",
|
|
2642
2751
|
success: "bg-(--color-progress-fill-success)",
|
|
@@ -2659,12 +2768,12 @@ function ProgressBar({
|
|
|
2659
2768
|
className
|
|
2660
2769
|
}) {
|
|
2661
2770
|
const clampedValue = Math.min(100, Math.max(0, value));
|
|
2662
|
-
return /* @__PURE__ */
|
|
2663
|
-
(label || description || showValue) && /* @__PURE__ */
|
|
2664
|
-
/* @__PURE__ */
|
|
2665
|
-
/* @__PURE__ */
|
|
2771
|
+
return /* @__PURE__ */ jsxs26("div", { className: twMerge18("w-full", className), children: [
|
|
2772
|
+
(label || description || showValue) && /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between mb-2", children: [
|
|
2773
|
+
/* @__PURE__ */ jsx37("span", { className: "text-sm font-medium text-foreground", children: label }),
|
|
2774
|
+
/* @__PURE__ */ jsx37("span", { className: "text-sm text-muted-foreground", children: description ?? (showValue ? `${clampedValue}%` : null) })
|
|
2666
2775
|
] }),
|
|
2667
|
-
/* @__PURE__ */
|
|
2776
|
+
/* @__PURE__ */ jsx37(
|
|
2668
2777
|
"div",
|
|
2669
2778
|
{
|
|
2670
2779
|
role: "progressbar",
|
|
@@ -2672,14 +2781,14 @@ function ProgressBar({
|
|
|
2672
2781
|
"aria-valuemin": 0,
|
|
2673
2782
|
"aria-valuemax": 100,
|
|
2674
2783
|
"aria-label": label ?? "Progress",
|
|
2675
|
-
className:
|
|
2784
|
+
className: twMerge18(
|
|
2676
2785
|
"w-full rounded-full bg-(--color-progress-track)",
|
|
2677
2786
|
sizeStyles7[size]
|
|
2678
2787
|
),
|
|
2679
|
-
children: /* @__PURE__ */
|
|
2788
|
+
children: /* @__PURE__ */ jsx37(
|
|
2680
2789
|
"div",
|
|
2681
2790
|
{
|
|
2682
|
-
className:
|
|
2791
|
+
className: twMerge18(
|
|
2683
2792
|
"h-full rounded-full transition-all duration-300",
|
|
2684
2793
|
fillStyles[variant]
|
|
2685
2794
|
),
|
|
@@ -2692,15 +2801,15 @@ function ProgressBar({
|
|
|
2692
2801
|
}
|
|
2693
2802
|
|
|
2694
2803
|
// src/components/Banner/Banner.tsx
|
|
2695
|
-
import { useState as
|
|
2804
|
+
import { useState as useState8 } from "react";
|
|
2696
2805
|
import {
|
|
2697
2806
|
Info as Info3,
|
|
2698
2807
|
AlertTriangle as AlertTriangle2,
|
|
2699
2808
|
AlertCircle as AlertCircle2,
|
|
2700
2809
|
CheckCircle2 as CheckCircle22
|
|
2701
2810
|
} from "lucide-react";
|
|
2702
|
-
import { twMerge as
|
|
2703
|
-
import { jsx as
|
|
2811
|
+
import { twMerge as twMerge19 } from "tailwind-merge";
|
|
2812
|
+
import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2704
2813
|
var variantConfig2 = {
|
|
2705
2814
|
info: {
|
|
2706
2815
|
icon: Info3,
|
|
@@ -2736,7 +2845,7 @@ function Banner({
|
|
|
2736
2845
|
onDismiss,
|
|
2737
2846
|
className
|
|
2738
2847
|
}) {
|
|
2739
|
-
const [dismissed, setDismissed] =
|
|
2848
|
+
const [dismissed, setDismissed] = useState8(false);
|
|
2740
2849
|
if (dismissed) return null;
|
|
2741
2850
|
const config = variantConfig2[variant];
|
|
2742
2851
|
const resolvedIcon = icon ?? config.icon;
|
|
@@ -2744,40 +2853,40 @@ function Banner({
|
|
|
2744
2853
|
setDismissed(true);
|
|
2745
2854
|
onDismiss?.();
|
|
2746
2855
|
};
|
|
2747
|
-
return /* @__PURE__ */
|
|
2856
|
+
return /* @__PURE__ */ jsxs27(
|
|
2748
2857
|
"div",
|
|
2749
2858
|
{
|
|
2750
2859
|
role: config.role,
|
|
2751
|
-
className:
|
|
2860
|
+
className: twMerge19(
|
|
2752
2861
|
"flex items-start gap-3 rounded-lg border px-4 py-3",
|
|
2753
2862
|
"text-sm",
|
|
2754
2863
|
config.containerClass,
|
|
2755
2864
|
className
|
|
2756
2865
|
),
|
|
2757
2866
|
children: [
|
|
2758
|
-
/* @__PURE__ */
|
|
2867
|
+
/* @__PURE__ */ jsx38(
|
|
2759
2868
|
Icon,
|
|
2760
2869
|
{
|
|
2761
2870
|
icon: resolvedIcon,
|
|
2762
2871
|
size: "md",
|
|
2763
|
-
className:
|
|
2872
|
+
className: twMerge19("mt-0.5", config.iconClass)
|
|
2764
2873
|
}
|
|
2765
2874
|
),
|
|
2766
|
-
/* @__PURE__ */
|
|
2767
|
-
title && /* @__PURE__ */
|
|
2875
|
+
/* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
|
|
2876
|
+
title && /* @__PURE__ */ jsxs27("span", { className: "font-medium", children: [
|
|
2768
2877
|
title,
|
|
2769
2878
|
" \u2014 "
|
|
2770
2879
|
] }),
|
|
2771
2880
|
children
|
|
2772
2881
|
] }),
|
|
2773
|
-
dismissible && /* @__PURE__ */
|
|
2882
|
+
dismissible && /* @__PURE__ */ jsx38(
|
|
2774
2883
|
"button",
|
|
2775
2884
|
{
|
|
2776
2885
|
type: "button",
|
|
2777
2886
|
onClick: handleDismiss,
|
|
2778
2887
|
className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
|
|
2779
2888
|
"aria-label": "Dismiss",
|
|
2780
|
-
children: /* @__PURE__ */
|
|
2889
|
+
children: /* @__PURE__ */ jsx38(Icon, { icon: "X", size: "sm" })
|
|
2781
2890
|
}
|
|
2782
2891
|
)
|
|
2783
2892
|
]
|
|
@@ -2786,8 +2895,8 @@ function Banner({
|
|
|
2786
2895
|
}
|
|
2787
2896
|
|
|
2788
2897
|
// src/components/MetricCard/MetricCard.tsx
|
|
2789
|
-
import { twMerge as
|
|
2790
|
-
import { Fragment as Fragment9, jsx as
|
|
2898
|
+
import { twMerge as twMerge20 } from "tailwind-merge";
|
|
2899
|
+
import { Fragment as Fragment9, jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2791
2900
|
var sizeConfig = {
|
|
2792
2901
|
sm: {
|
|
2793
2902
|
padding: "p-3",
|
|
@@ -2809,58 +2918,58 @@ function MetricCard({
|
|
|
2809
2918
|
className
|
|
2810
2919
|
}) {
|
|
2811
2920
|
const config = sizeConfig[size];
|
|
2812
|
-
const containerClass =
|
|
2921
|
+
const containerClass = twMerge20(
|
|
2813
2922
|
"bg-background border border-border rounded-lg shadow-sm",
|
|
2814
2923
|
config.padding,
|
|
2815
2924
|
href && "block transition-shadow hover:shadow-md hover:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
|
|
2816
2925
|
className
|
|
2817
2926
|
);
|
|
2818
|
-
const content = /* @__PURE__ */
|
|
2819
|
-
/* @__PURE__ */
|
|
2820
|
-
/* @__PURE__ */
|
|
2927
|
+
const content = /* @__PURE__ */ jsxs28(Fragment9, { children: [
|
|
2928
|
+
/* @__PURE__ */ jsx39("div", { className: twMerge20(config.labelClass, "text-muted-foreground"), children: label }),
|
|
2929
|
+
/* @__PURE__ */ jsx39(
|
|
2821
2930
|
"div",
|
|
2822
2931
|
{
|
|
2823
|
-
className:
|
|
2932
|
+
className: twMerge20(
|
|
2824
2933
|
config.valueClass,
|
|
2825
2934
|
"font-semibold text-foreground mt-1 tabular-nums"
|
|
2826
2935
|
),
|
|
2827
2936
|
children: value
|
|
2828
2937
|
}
|
|
2829
2938
|
),
|
|
2830
|
-
secondary && /* @__PURE__ */
|
|
2939
|
+
secondary && /* @__PURE__ */ jsx39("div", { className: "mt-1 text-sm", children: secondary })
|
|
2831
2940
|
] });
|
|
2832
2941
|
if (href) {
|
|
2833
|
-
return /* @__PURE__ */
|
|
2942
|
+
return /* @__PURE__ */ jsx39("a", { href, className: containerClass, children: content });
|
|
2834
2943
|
}
|
|
2835
|
-
return /* @__PURE__ */
|
|
2944
|
+
return /* @__PURE__ */ jsx39("div", { className: containerClass, children: content });
|
|
2836
2945
|
}
|
|
2837
2946
|
|
|
2838
2947
|
// src/components/SectionHeader/SectionHeader.tsx
|
|
2839
|
-
import { twMerge as
|
|
2840
|
-
import { jsx as
|
|
2948
|
+
import { twMerge as twMerge21 } from "tailwind-merge";
|
|
2949
|
+
import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2841
2950
|
function SectionHeader({
|
|
2842
2951
|
title,
|
|
2843
2952
|
children,
|
|
2844
2953
|
className
|
|
2845
2954
|
}) {
|
|
2846
|
-
return /* @__PURE__ */
|
|
2955
|
+
return /* @__PURE__ */ jsxs29(
|
|
2847
2956
|
"div",
|
|
2848
2957
|
{
|
|
2849
|
-
className:
|
|
2958
|
+
className: twMerge21(
|
|
2850
2959
|
"flex flex-wrap items-center gap-3 py-4",
|
|
2851
2960
|
className
|
|
2852
2961
|
),
|
|
2853
2962
|
children: [
|
|
2854
|
-
/* @__PURE__ */
|
|
2855
|
-
children && /* @__PURE__ */
|
|
2963
|
+
/* @__PURE__ */ jsx40(H2, { children: title }),
|
|
2964
|
+
children && /* @__PURE__ */ jsx40("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
|
|
2856
2965
|
]
|
|
2857
2966
|
}
|
|
2858
2967
|
);
|
|
2859
2968
|
}
|
|
2860
2969
|
|
|
2861
2970
|
// src/components/Pill/Pill.tsx
|
|
2862
|
-
import { twMerge as
|
|
2863
|
-
import { jsx as
|
|
2971
|
+
import { twMerge as twMerge22 } from "tailwind-merge";
|
|
2972
|
+
import { jsx as jsx41 } from "react/jsx-runtime";
|
|
2864
2973
|
var hashColors = {
|
|
2865
2974
|
purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text) border-(--color-badge-purple-text)/20",
|
|
2866
2975
|
teal: "bg-(--color-badge-teal-bg) text-(--color-badge-teal-text) border-(--color-badge-teal-text)/20",
|
|
@@ -2886,7 +2995,7 @@ function Pill({
|
|
|
2886
2995
|
className,
|
|
2887
2996
|
...rest
|
|
2888
2997
|
}) {
|
|
2889
|
-
const cx =
|
|
2998
|
+
const cx = twMerge22(
|
|
2890
2999
|
`
|
|
2891
3000
|
inline-flex items-center
|
|
2892
3001
|
rounded-full
|
|
@@ -2898,12 +3007,12 @@ function Pill({
|
|
|
2898
3007
|
colorStyles[color],
|
|
2899
3008
|
className
|
|
2900
3009
|
);
|
|
2901
|
-
return /* @__PURE__ */
|
|
3010
|
+
return /* @__PURE__ */ jsx41("span", { className: cx, ...rest, children });
|
|
2902
3011
|
}
|
|
2903
3012
|
|
|
2904
3013
|
// src/components/Pill/PathPill.tsx
|
|
2905
|
-
import { twMerge as
|
|
2906
|
-
import { jsx as
|
|
3014
|
+
import { twMerge as twMerge23 } from "tailwind-merge";
|
|
3015
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
2907
3016
|
function PathPill({
|
|
2908
3017
|
children,
|
|
2909
3018
|
visibleCount,
|
|
@@ -2915,17 +3024,17 @@ function PathPill({
|
|
|
2915
3024
|
const effectiveVisible = visibleCount ?? segments.length;
|
|
2916
3025
|
const dotCount = Math.max(0, segments.length - effectiveVisible);
|
|
2917
3026
|
const fullPath = segments.join(" / ");
|
|
2918
|
-
return /* @__PURE__ */
|
|
3027
|
+
return /* @__PURE__ */ jsx42(
|
|
2919
3028
|
"div",
|
|
2920
3029
|
{
|
|
2921
|
-
className:
|
|
3030
|
+
className: twMerge23("relative flex", className),
|
|
2922
3031
|
"aria-label": `Path: ${fullPath}`,
|
|
2923
3032
|
children: segments.map((segment, i) => {
|
|
2924
3033
|
const isCollapsed = i < dotCount;
|
|
2925
3034
|
const isLast = i === segments.length - 1;
|
|
2926
|
-
const cx =
|
|
3035
|
+
const cx = twMerge23(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
|
|
2927
3036
|
const color = colorFn ? colorFn(segment, i) : pillColorFromName(segment);
|
|
2928
|
-
return /* @__PURE__ */
|
|
3037
|
+
return /* @__PURE__ */ jsx42(
|
|
2929
3038
|
Pill,
|
|
2930
3039
|
{
|
|
2931
3040
|
className: cx,
|
|
@@ -2941,8 +3050,8 @@ function PathPill({
|
|
|
2941
3050
|
}
|
|
2942
3051
|
|
|
2943
3052
|
// src/components/FormWizard/FormWizard.tsx
|
|
2944
|
-
import { createContext as createContext4, useContext as useContext4, useCallback as
|
|
2945
|
-
import { jsx as
|
|
3053
|
+
import { createContext as createContext4, useContext as useContext4, useCallback as useCallback5, useMemo } from "react";
|
|
3054
|
+
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
2946
3055
|
var FormWizardContext = createContext4({
|
|
2947
3056
|
currentStep: 0,
|
|
2948
3057
|
totalSteps: 1,
|
|
@@ -2962,7 +3071,7 @@ function FormWizard({
|
|
|
2962
3071
|
}) {
|
|
2963
3072
|
const canGoBack = currentStep > 0;
|
|
2964
3073
|
const isLastStep = currentStep >= totalSteps - 1;
|
|
2965
|
-
const goBack =
|
|
3074
|
+
const goBack = useCallback5(() => {
|
|
2966
3075
|
if (currentStep > 0) {
|
|
2967
3076
|
onStepChange(currentStep - 1);
|
|
2968
3077
|
}
|
|
@@ -2977,13 +3086,13 @@ function FormWizard({
|
|
|
2977
3086
|
}),
|
|
2978
3087
|
[currentStep, totalSteps, canGoBack, goBack, isLastStep]
|
|
2979
3088
|
);
|
|
2980
|
-
return /* @__PURE__ */
|
|
3089
|
+
return /* @__PURE__ */ jsx43(FormWizardContext.Provider, { value, children });
|
|
2981
3090
|
}
|
|
2982
3091
|
|
|
2983
3092
|
// src/components/FormWizard/FormWizardProgress.tsx
|
|
2984
|
-
import { jsx as
|
|
3093
|
+
import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
2985
3094
|
function CheckIcon() {
|
|
2986
|
-
return /* @__PURE__ */
|
|
3095
|
+
return /* @__PURE__ */ jsx44(
|
|
2987
3096
|
"svg",
|
|
2988
3097
|
{
|
|
2989
3098
|
"aria-hidden": "true",
|
|
@@ -2994,24 +3103,24 @@ function CheckIcon() {
|
|
|
2994
3103
|
strokeWidth: "2",
|
|
2995
3104
|
strokeLinecap: "round",
|
|
2996
3105
|
strokeLinejoin: "round",
|
|
2997
|
-
children: /* @__PURE__ */
|
|
3106
|
+
children: /* @__PURE__ */ jsx44("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
|
|
2998
3107
|
}
|
|
2999
3108
|
);
|
|
3000
3109
|
}
|
|
3001
3110
|
function FormWizardProgress({ labels }) {
|
|
3002
3111
|
const { currentStep, totalSteps } = useFormWizard();
|
|
3003
|
-
return /* @__PURE__ */
|
|
3112
|
+
return /* @__PURE__ */ jsx44("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx44("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
|
|
3004
3113
|
const isCompleted = index < currentStep;
|
|
3005
3114
|
const isCurrent = index === currentStep;
|
|
3006
3115
|
const isFuture = index > currentStep;
|
|
3007
|
-
return /* @__PURE__ */
|
|
3116
|
+
return /* @__PURE__ */ jsxs30(
|
|
3008
3117
|
"li",
|
|
3009
3118
|
{
|
|
3010
3119
|
className: "flex flex-1 flex-col items-center",
|
|
3011
3120
|
"aria-current": isCurrent ? "step" : void 0,
|
|
3012
3121
|
children: [
|
|
3013
|
-
/* @__PURE__ */
|
|
3014
|
-
index > 0 ? /* @__PURE__ */
|
|
3122
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex w-full items-center", children: [
|
|
3123
|
+
index > 0 ? /* @__PURE__ */ jsx44(
|
|
3015
3124
|
"div",
|
|
3016
3125
|
{
|
|
3017
3126
|
"aria-hidden": "true",
|
|
@@ -3020,8 +3129,8 @@ function FormWizardProgress({ labels }) {
|
|
|
3020
3129
|
index <= currentStep ? "bg-primary" : "bg-border"
|
|
3021
3130
|
].join(" ")
|
|
3022
3131
|
}
|
|
3023
|
-
) : /* @__PURE__ */
|
|
3024
|
-
/* @__PURE__ */
|
|
3132
|
+
) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" }),
|
|
3133
|
+
/* @__PURE__ */ jsx44(
|
|
3025
3134
|
"div",
|
|
3026
3135
|
{
|
|
3027
3136
|
className: [
|
|
@@ -3033,10 +3142,10 @@ function FormWizardProgress({ labels }) {
|
|
|
3033
3142
|
isFuture ? "border-2 border-border bg-background text-muted-foreground" : ""
|
|
3034
3143
|
].join(" "),
|
|
3035
3144
|
"aria-hidden": "true",
|
|
3036
|
-
children: isCompleted ? /* @__PURE__ */
|
|
3145
|
+
children: isCompleted ? /* @__PURE__ */ jsx44(CheckIcon, {}) : index + 1
|
|
3037
3146
|
}
|
|
3038
3147
|
),
|
|
3039
|
-
index < totalSteps - 1 ? /* @__PURE__ */
|
|
3148
|
+
index < totalSteps - 1 ? /* @__PURE__ */ jsx44(
|
|
3040
3149
|
"div",
|
|
3041
3150
|
{
|
|
3042
3151
|
"aria-hidden": "true",
|
|
@@ -3045,9 +3154,9 @@ function FormWizardProgress({ labels }) {
|
|
|
3045
3154
|
index < currentStep ? "bg-primary" : "bg-border"
|
|
3046
3155
|
].join(" ")
|
|
3047
3156
|
}
|
|
3048
|
-
) : /* @__PURE__ */
|
|
3157
|
+
) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" })
|
|
3049
3158
|
] }),
|
|
3050
|
-
/* @__PURE__ */
|
|
3159
|
+
/* @__PURE__ */ jsx44(
|
|
3051
3160
|
"span",
|
|
3052
3161
|
{
|
|
3053
3162
|
className: [
|
|
@@ -3065,15 +3174,15 @@ function FormWizardProgress({ labels }) {
|
|
|
3065
3174
|
}
|
|
3066
3175
|
|
|
3067
3176
|
// src/components/FormWizard/FormWizardNav.tsx
|
|
3068
|
-
import { jsx as
|
|
3177
|
+
import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
3069
3178
|
function FormWizardNav({
|
|
3070
3179
|
onNext,
|
|
3071
3180
|
isSubmitting = false,
|
|
3072
3181
|
submitLabel = "Submit"
|
|
3073
3182
|
}) {
|
|
3074
3183
|
const { canGoBack, goBack, isLastStep } = useFormWizard();
|
|
3075
|
-
return /* @__PURE__ */
|
|
3076
|
-
canGoBack && /* @__PURE__ */
|
|
3184
|
+
return /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-end gap-3", children: [
|
|
3185
|
+
canGoBack && /* @__PURE__ */ jsx45(
|
|
3077
3186
|
Button,
|
|
3078
3187
|
{
|
|
3079
3188
|
variant: "secondary",
|
|
@@ -3083,7 +3192,7 @@ function FormWizardNav({
|
|
|
3083
3192
|
children: "Back"
|
|
3084
3193
|
}
|
|
3085
3194
|
),
|
|
3086
|
-
/* @__PURE__ */
|
|
3195
|
+
/* @__PURE__ */ jsx45(
|
|
3087
3196
|
Button,
|
|
3088
3197
|
{
|
|
3089
3198
|
variant: "primary",
|
|
@@ -3513,7 +3622,7 @@ export {
|
|
|
3513
3622
|
MetricCard,
|
|
3514
3623
|
PathPill,
|
|
3515
3624
|
Pill,
|
|
3516
|
-
|
|
3625
|
+
Popover4 as Popover,
|
|
3517
3626
|
PopoverContent,
|
|
3518
3627
|
PopoverTrigger,
|
|
3519
3628
|
ProgressBar,
|
|
@@ -3554,6 +3663,7 @@ export {
|
|
|
3554
3663
|
createToastBridge,
|
|
3555
3664
|
iconRegistry,
|
|
3556
3665
|
pillColorFromName,
|
|
3666
|
+
useContextMenu,
|
|
3557
3667
|
useFormWizard,
|
|
3558
3668
|
useToast
|
|
3559
3669
|
};
|