@openzeppelin/ui-components 2.0.0 → 2.1.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.cjs +43 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +36 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +42 -6
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +43 -36
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -26,7 +26,7 @@ import { Toaster as Toaster$1, toast } from "sonner";
|
|
|
26
26
|
import { useTheme } from "next-themes";
|
|
27
27
|
|
|
28
28
|
//#region src/version.ts
|
|
29
|
-
const VERSION = "2.
|
|
29
|
+
const VERSION = "2.1.0";
|
|
30
30
|
|
|
31
31
|
//#endregion
|
|
32
32
|
//#region src/components/ui/accordion.tsx
|
|
@@ -114,7 +114,7 @@ const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
|
114
114
|
const TooltipContent = React$1.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Content, {
|
|
115
115
|
ref,
|
|
116
116
|
sideOffset,
|
|
117
|
-
className: cn("bg-
|
|
117
|
+
className: cn("bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs", className),
|
|
118
118
|
...props
|
|
119
119
|
}) }));
|
|
120
120
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
@@ -561,15 +561,15 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
|
|
|
561
561
|
weekdays: "flex",
|
|
562
562
|
weekday: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
|
|
563
563
|
week: "flex w-full mt-2",
|
|
564
|
-
day: cn("relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-
|
|
564
|
+
day: cn("relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-selected/15 [&:has([aria-selected].day-outside)]:bg-selected/10 [&:has([aria-selected].day-range-end)]:rounded-r-md", props.mode === "range" ? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md" : "[&:has([aria-selected])]:rounded-md"),
|
|
565
565
|
day_button: cn(buttonVariants({ variant: "ghost" }), "h-9 w-9 p-0 font-normal aria-selected:opacity-100 rounded-none hover:rounded-none"),
|
|
566
566
|
range_start: "day-range-start rounded-l-md",
|
|
567
567
|
range_end: "day-range-end rounded-r-md",
|
|
568
|
-
selected: "bg-
|
|
568
|
+
selected: "bg-selected text-selected-foreground hover:bg-selected hover:text-selected-foreground focus:bg-selected focus:text-selected-foreground",
|
|
569
569
|
today: "bg-accent text-accent-foreground",
|
|
570
|
-
outside: "day-outside text-muted-foreground opacity-50 aria-selected:bg-
|
|
570
|
+
outside: "day-outside text-muted-foreground opacity-50 aria-selected:bg-selected/10 aria-selected:text-muted-foreground aria-selected:opacity-30",
|
|
571
571
|
disabled: "text-muted-foreground opacity-50",
|
|
572
|
-
range_middle: "aria-selected:bg-
|
|
572
|
+
range_middle: "aria-selected:bg-selected/15 aria-selected:text-foreground",
|
|
573
573
|
hidden: "invisible",
|
|
574
574
|
...classNames
|
|
575
575
|
},
|
|
@@ -638,7 +638,7 @@ function CardFooter({ className, ...props }) {
|
|
|
638
638
|
function Checkbox({ className, ...props }) {
|
|
639
639
|
return /* @__PURE__ */ jsx(CheckboxPrimitive.Root, {
|
|
640
640
|
"data-slot": "checkbox",
|
|
641
|
-
className: cn("border-input data-[state=checked]:bg-
|
|
641
|
+
className: cn("border-input data-[state=checked]:bg-selected data-[state=checked]:text-selected-foreground data-[state=checked]:border-selected focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", className),
|
|
642
642
|
...props,
|
|
643
643
|
children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, {
|
|
644
644
|
"data-slot": "checkbox-indicator",
|
|
@@ -1232,7 +1232,7 @@ const Header = ({ title, onOpenSidebar, rightContent }) => {
|
|
|
1232
1232
|
type: "button",
|
|
1233
1233
|
"aria-label": "Open menu",
|
|
1234
1234
|
onClick: onOpenSidebar,
|
|
1235
|
-
className: "mr-2 sm:mr-3 inline-flex items-center justify-center rounded-md p-2 text-
|
|
1235
|
+
className: "mr-2 sm:mr-3 inline-flex items-center justify-center rounded-md p-2 text-foreground hover:bg-muted focus:outline-none focus:ring-2 focus:ring-primary xl:hidden",
|
|
1236
1236
|
children: /* @__PURE__ */ jsx(Menu, { className: "size-5" })
|
|
1237
1237
|
}),
|
|
1238
1238
|
title && /* @__PURE__ */ jsx("div", {
|
|
@@ -1479,7 +1479,7 @@ function NetworkSelector({ networks, getNetworkLabel, getNetworkIcon, getNetwork
|
|
|
1479
1479
|
className: "gap-2",
|
|
1480
1480
|
children: [
|
|
1481
1481
|
isMultiple ? /* @__PURE__ */ jsx("div", {
|
|
1482
|
-
className: "flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-
|
|
1482
|
+
className: cn("flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border transition-colors", isSelected(network) ? "border-selected bg-selected text-selected-foreground" : "border-input bg-background"),
|
|
1483
1483
|
children: isSelected(network) && /* @__PURE__ */ jsx(Check, { className: "h-3 w-3" })
|
|
1484
1484
|
}) : null,
|
|
1485
1485
|
getNetworkIcon?.(network),
|
|
@@ -1493,7 +1493,7 @@ function NetworkSelector({ networks, getNetworkLabel, getNetworkIcon, getNetwork
|
|
|
1493
1493
|
children: getNetworkType(network)
|
|
1494
1494
|
})]
|
|
1495
1495
|
}),
|
|
1496
|
-
!isMultiple && isSelected(network) && /* @__PURE__ */ jsx(Check, { className: "h-4 w-4 opacity-100" })
|
|
1496
|
+
!isMultiple && isSelected(network) && /* @__PURE__ */ jsx(Check, { className: "h-4 w-4 text-selected opacity-100" })
|
|
1497
1497
|
]
|
|
1498
1498
|
}, getNetworkId(network))) }),
|
|
1499
1499
|
index < Object.keys(groupedNetworks).length - 1 && /* @__PURE__ */ jsx(DropdownMenuSeparator, {})
|
|
@@ -1583,7 +1583,7 @@ RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
|
|
|
1583
1583
|
const RadioGroupItem = React$1.forwardRef(({ className, ...props }, ref) => {
|
|
1584
1584
|
return /* @__PURE__ */ jsx(RadioGroupPrimitive.Item, {
|
|
1585
1585
|
ref,
|
|
1586
|
-
className: cn("border-input bg-background text-
|
|
1586
|
+
className: cn("border-input bg-background text-selected h-4 w-4 rounded-full border shadow-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className),
|
|
1587
1587
|
...props,
|
|
1588
1588
|
children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, {
|
|
1589
1589
|
className: "flex items-center justify-center",
|
|
@@ -1675,7 +1675,7 @@ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
|
1675
1675
|
* Can render as a button or anchor element depending on whether href is provided.
|
|
1676
1676
|
*/
|
|
1677
1677
|
function SidebarButton({ icon, children, onClick, size = "default", badge, disabled = false, isSelected = false, href, target, rel, className }) {
|
|
1678
|
-
const commonClass = cn("group relative flex flex-wrap items-center gap-x-2 gap-y-0.5 px-3 py-2 rounded-lg font-semibold text-sm transition-colors", badge ? "justify-between" : "justify-start", disabled ? "text-
|
|
1678
|
+
const commonClass = cn("group relative flex flex-wrap items-center gap-x-2 gap-y-0.5 px-3 py-2 rounded-lg font-semibold text-sm transition-colors", badge ? "justify-between" : "justify-start", disabled ? "text-muted-foreground/60 cursor-not-allowed" : isSelected ? "text-selected bg-selected/10" : "text-muted-foreground hover:text-foreground cursor-pointer hover:before:content-[\"\"] hover:before:absolute hover:before:inset-x-0 hover:before:top-1 hover:before:bottom-1 hover:before:bg-muted/80 hover:before:rounded-lg hover:before:-z-10", size === "small" ? "min-h-10" : "min-h-11", className);
|
|
1679
1679
|
const content = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
1680
1680
|
className: "flex items-center gap-2",
|
|
1681
1681
|
children: [icon, children]
|
|
@@ -1853,7 +1853,7 @@ function TabsList({ className, ...props }) {
|
|
|
1853
1853
|
function TabsTrigger({ className, ...props }) {
|
|
1854
1854
|
return /* @__PURE__ */ jsx(TabsPrimitive.Trigger, {
|
|
1855
1855
|
"data-slot": "tabs-trigger",
|
|
1856
|
-
className: cn("data-[state=active]:bg-background data-[state=active]:text-
|
|
1856
|
+
className: cn("data-[state=active]:bg-background data-[state=active]:text-selected focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1857
1857
|
...props
|
|
1858
1858
|
});
|
|
1859
1859
|
}
|
|
@@ -1928,7 +1928,7 @@ function canClick(state, freeNavigation = false) {
|
|
|
1928
1928
|
}
|
|
1929
1929
|
function StepCircle({ state, index }) {
|
|
1930
1930
|
return /* @__PURE__ */ jsx("span", {
|
|
1931
|
-
className: cn("flex size-6 shrink-0 items-center justify-center rounded-full text-xs font-semibold transition-all", state === "completed" && "bg-
|
|
1931
|
+
className: cn("flex size-6 shrink-0 items-center justify-center rounded-full text-xs font-semibold transition-all", state === "completed" && "bg-selected text-selected-foreground", state === "current" && "bg-selected text-selected-foreground ring-2 ring-selected/30", state === "visited" && "bg-selected/10 text-selected ring-1 ring-selected/40", state === "invalid" && "bg-destructive/10 text-destructive ring-1 ring-destructive/40", state === "upcoming" && "bg-muted text-muted-foreground"),
|
|
1932
1932
|
children: state === "completed" ? /* @__PURE__ */ jsx(Check, { className: "size-3.5" }) : state === "visited" ? /* @__PURE__ */ jsx(Pencil, { className: "size-3" }) : state === "invalid" ? /* @__PURE__ */ jsx(AlertCircle, { className: "size-3.5" }) : index + 1
|
|
1933
1933
|
});
|
|
1934
1934
|
}
|
|
@@ -1936,10 +1936,10 @@ function StepLabel({ title, state, isSkipped }) {
|
|
|
1936
1936
|
return /* @__PURE__ */ jsxs("div", {
|
|
1937
1937
|
className: "min-w-0 flex-1",
|
|
1938
1938
|
children: [/* @__PURE__ */ jsx("span", {
|
|
1939
|
-
className: cn("text-sm font-medium transition-colors", state === "current" && "text-
|
|
1939
|
+
className: cn("text-sm font-medium transition-colors", state === "current" && "text-selected", state === "completed" && "text-foreground", state === "visited" && "text-selected", state === "invalid" && "text-destructive", state === "upcoming" && "text-muted-foreground"),
|
|
1940
1940
|
children: title
|
|
1941
1941
|
}), isSkipped && /* @__PURE__ */ jsx("span", {
|
|
1942
|
-
className: "mt-0.5 block text-[11px] text-
|
|
1942
|
+
className: "mt-0.5 block text-[11px] text-muted-foreground",
|
|
1943
1943
|
children: "Skipped"
|
|
1944
1944
|
})]
|
|
1945
1945
|
});
|
|
@@ -1947,7 +1947,7 @@ function StepLabel({ title, state, isSkipped }) {
|
|
|
1947
1947
|
function VerticalStepper({ steps, currentStepIndex, furthestStepIndex = currentStepIndex, onStepClick, freeNavigation, className }) {
|
|
1948
1948
|
return /* @__PURE__ */ jsx("nav", {
|
|
1949
1949
|
"aria-label": "Wizard steps",
|
|
1950
|
-
className: cn("rounded-2xl border border-
|
|
1950
|
+
className: cn("rounded-2xl border border-border bg-card p-6", className),
|
|
1951
1951
|
children: /* @__PURE__ */ jsx("div", {
|
|
1952
1952
|
className: "flex flex-col gap-1",
|
|
1953
1953
|
children: steps.map((step, index) => {
|
|
@@ -1957,7 +1957,7 @@ function VerticalStepper({ steps, currentStepIndex, furthestStepIndex = currentS
|
|
|
1957
1957
|
type: "button",
|
|
1958
1958
|
onClick: () => clickable && onStepClick?.(index),
|
|
1959
1959
|
disabled: !clickable,
|
|
1960
|
-
className: cn("flex items-center gap-3 rounded-xl border border-transparent px-3 py-3 text-left transition-all duration-150", clickable ? "cursor-pointer" : "cursor-not-allowed opacity-50", state === "current" && "border-
|
|
1960
|
+
className: cn("flex items-center gap-3 rounded-xl border border-transparent px-3 py-3 text-left transition-all duration-150", clickable ? "cursor-pointer" : "cursor-not-allowed opacity-50", state === "current" && "border-selected/40 bg-selected/5", state === "completed" && "bg-card hover:bg-muted/40", state === "visited" && "bg-card hover:bg-selected/5", state === "invalid" && "border-destructive/40 bg-destructive/5 hover:bg-destructive/10", state === "upcoming" && "bg-card"),
|
|
1961
1961
|
"aria-current": state === "current" ? "step" : void 0,
|
|
1962
1962
|
children: [/* @__PURE__ */ jsx(StepCircle, {
|
|
1963
1963
|
state,
|
|
@@ -1975,7 +1975,7 @@ function VerticalStepper({ steps, currentStepIndex, furthestStepIndex = currentS
|
|
|
1975
1975
|
function HorizontalStepper({ steps, currentStepIndex, furthestStepIndex = currentStepIndex, onStepClick, freeNavigation, className }) {
|
|
1976
1976
|
return /* @__PURE__ */ jsx("nav", {
|
|
1977
1977
|
"aria-label": "Wizard steps",
|
|
1978
|
-
className: cn("rounded-2xl border border-
|
|
1978
|
+
className: cn("rounded-2xl border border-border bg-card p-6", className),
|
|
1979
1979
|
children: /* @__PURE__ */ jsx("div", {
|
|
1980
1980
|
className: "flex w-full items-center",
|
|
1981
1981
|
children: steps.map((step, index) => {
|
|
@@ -1986,7 +1986,7 @@ function HorizontalStepper({ steps, currentStepIndex, furthestStepIndex = curren
|
|
|
1986
1986
|
type: "button",
|
|
1987
1987
|
onClick: () => clickable && onStepClick?.(index),
|
|
1988
1988
|
disabled: !clickable,
|
|
1989
|
-
className: cn("flex items-center gap-2 rounded-xl border border-transparent px-3 py-2 text-left transition-all duration-150", clickable ? "cursor-pointer" : "cursor-not-allowed opacity-50", state === "current" && "border-
|
|
1989
|
+
className: cn("flex items-center gap-2 rounded-xl border border-transparent px-3 py-2 text-left transition-all duration-150", clickable ? "cursor-pointer" : "cursor-not-allowed opacity-50", state === "current" && "border-selected/40 bg-selected/5", state === "completed" && "bg-card hover:bg-muted/40", state === "visited" && "bg-card hover:bg-selected/5", state === "invalid" && "border-destructive/40 bg-destructive/5 hover:bg-destructive/10", state === "upcoming" && "bg-card"),
|
|
1990
1990
|
"aria-current": state === "current" ? "step" : void 0,
|
|
1991
1991
|
"aria-label": `Step ${index + 1}: ${step.title}`,
|
|
1992
1992
|
children: [/* @__PURE__ */ jsx(StepCircle, {
|
|
@@ -2000,7 +2000,7 @@ function HorizontalStepper({ steps, currentStepIndex, furthestStepIndex = curren
|
|
|
2000
2000
|
isSkipped: step.status === "skipped"
|
|
2001
2001
|
})
|
|
2002
2002
|
})]
|
|
2003
|
-
}), !isLast && /* @__PURE__ */ jsx("div", { className: cn("mx-1 h-px flex-1 transition-colors sm:mx-2", index < currentStepIndex ? "bg-
|
|
2003
|
+
}), !isLast && /* @__PURE__ */ jsx("div", { className: cn("mx-1 h-px flex-1 transition-colors sm:mx-2", index < currentStepIndex ? "bg-selected" : "bg-border") })] }, step.id);
|
|
2004
2004
|
})
|
|
2005
2005
|
})
|
|
2006
2006
|
});
|
|
@@ -2030,7 +2030,8 @@ function WizardStepper(props) {
|
|
|
2030
2030
|
* @param props - The props for the WizardNavigation component.
|
|
2031
2031
|
* @returns A React node representing the navigation component.
|
|
2032
2032
|
*/
|
|
2033
|
-
function WizardNavigation({ isFirstStep, isLastStep, canProceed = true, onPrevious, onNext, onCancel, extraActions, nextLabel = "Next", lastStepLabel = "Finish", className }) {
|
|
2033
|
+
function WizardNavigation({ isFirstStep, isLastStep, canProceed = true, onPrevious, onNext, onCancel, extraActions, nextLabel = "Next", lastStepLabel = "Finish", showLastStepPrimary = true, className }) {
|
|
2034
|
+
const showPrimary = !isLastStep || showLastStepPrimary;
|
|
2034
2035
|
return /* @__PURE__ */ jsxs("div", {
|
|
2035
2036
|
className: cn("flex items-center justify-between", className),
|
|
2036
2037
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -2050,7 +2051,7 @@ function WizardNavigation({ isFirstStep, isLastStep, canProceed = true, onPrevio
|
|
|
2050
2051
|
})]
|
|
2051
2052
|
}), /* @__PURE__ */ jsxs("div", {
|
|
2052
2053
|
className: "flex gap-2",
|
|
2053
|
-
children: [extraActions, /* @__PURE__ */ jsxs(Button, {
|
|
2054
|
+
children: [extraActions, showPrimary && /* @__PURE__ */ jsxs(Button, {
|
|
2054
2055
|
type: "button",
|
|
2055
2056
|
onClick: onNext,
|
|
2056
2057
|
disabled: !canProceed,
|
|
@@ -2286,7 +2287,7 @@ function isScrollableNavigationKey(event) {
|
|
|
2286
2287
|
|
|
2287
2288
|
//#endregion
|
|
2288
2289
|
//#region src/components/ui/wizard/WizardLayout.tsx
|
|
2289
|
-
function PagedLayout({ steps, currentStepIndex, furthestStepIndex: furthestStepIndexProp, onStepChange, onComplete, onCancel, navActions, header, variant, className }) {
|
|
2290
|
+
function PagedLayout({ steps, currentStepIndex, furthestStepIndex: furthestStepIndexProp, onStepChange, onComplete, onLastStepPrimary, onCancel, nextLabel, lastStepLabel, hideLastStepPrimary, navActions, header, variant, className }) {
|
|
2290
2291
|
const safeIndex = getSafeStepIndex(steps.length, currentStepIndex);
|
|
2291
2292
|
const resolvedFurthestStepIndex = useFurthestStepIndex(safeIndex, furthestStepIndexProp);
|
|
2292
2293
|
if (steps.length === 0) return null;
|
|
@@ -2296,7 +2297,8 @@ function PagedLayout({ steps, currentStepIndex, furthestStepIndex: furthestStepI
|
|
|
2296
2297
|
const canProceed = currentStep?.isValid !== false;
|
|
2297
2298
|
const handleNext = () => {
|
|
2298
2299
|
if (isLastStep) {
|
|
2299
|
-
|
|
2300
|
+
if (onLastStepPrimary) onLastStepPrimary();
|
|
2301
|
+
else onComplete?.();
|
|
2300
2302
|
return;
|
|
2301
2303
|
}
|
|
2302
2304
|
onStepChange(safeIndex + 1);
|
|
@@ -2316,7 +2318,10 @@ function PagedLayout({ steps, currentStepIndex, furthestStepIndex: furthestStepI
|
|
|
2316
2318
|
onPrevious: handlePrevious,
|
|
2317
2319
|
onNext: handleNext,
|
|
2318
2320
|
onCancel,
|
|
2319
|
-
extraActions: navActions
|
|
2321
|
+
extraActions: navActions,
|
|
2322
|
+
nextLabel,
|
|
2323
|
+
lastStepLabel,
|
|
2324
|
+
showLastStepPrimary: !hideLastStepPrimary
|
|
2320
2325
|
})
|
|
2321
2326
|
})
|
|
2322
2327
|
});
|
|
@@ -2366,7 +2371,7 @@ function PagedLayout({ steps, currentStepIndex, furthestStepIndex: furthestStepI
|
|
|
2366
2371
|
})]
|
|
2367
2372
|
});
|
|
2368
2373
|
}
|
|
2369
|
-
function ScrollableLayout({ steps, currentStepIndex, onStepChange, header, onComplete, scrollPadding, className }) {
|
|
2374
|
+
function ScrollableLayout({ steps, currentStepIndex, onStepChange, header, onComplete, hideScrollableCompleteButton, scrollableCompleteLabel, scrollPadding, className }) {
|
|
2370
2375
|
const instanceId = useId();
|
|
2371
2376
|
const scrollRef = useRef(null);
|
|
2372
2377
|
const sectionId = useCallback((stepId) => `wizard-section-${instanceId}-${stepId}`, [instanceId]);
|
|
@@ -2405,12 +2410,12 @@ function ScrollableLayout({ steps, currentStepIndex, onStepChange, header, onCom
|
|
|
2405
2410
|
children: step.component
|
|
2406
2411
|
}, step.id))
|
|
2407
2412
|
}),
|
|
2408
|
-
onComplete && /* @__PURE__ */ jsx("div", {
|
|
2413
|
+
onComplete && !hideScrollableCompleteButton && /* @__PURE__ */ jsx("div", {
|
|
2409
2414
|
className: "flex justify-end pt-8",
|
|
2410
2415
|
children: /* @__PURE__ */ jsx(Button, {
|
|
2411
2416
|
type: "button",
|
|
2412
2417
|
onClick: onComplete,
|
|
2413
|
-
children: "Finish"
|
|
2418
|
+
children: scrollableCompleteLabel ?? "Finish"
|
|
2414
2419
|
})
|
|
2415
2420
|
})
|
|
2416
2421
|
]
|
|
@@ -2443,6 +2448,8 @@ function WizardLayout(props) {
|
|
|
2443
2448
|
onStepChange: rest.onStepChange,
|
|
2444
2449
|
header: rest.header,
|
|
2445
2450
|
onComplete: rest.onComplete,
|
|
2451
|
+
hideScrollableCompleteButton: rest.hideScrollableCompleteButton,
|
|
2452
|
+
scrollableCompleteLabel: rest.scrollableCompleteLabel,
|
|
2446
2453
|
scrollPadding: rest.scrollPadding,
|
|
2447
2454
|
className: rest.className
|
|
2448
2455
|
});
|
|
@@ -2843,7 +2850,7 @@ function AddressField({ id, label, placeholder, helperText, control, name, width
|
|
|
2843
2850
|
type: "button",
|
|
2844
2851
|
role: "option",
|
|
2845
2852
|
"aria-selected": i === highlightedIndex,
|
|
2846
|
-
className: cn("flex w-full flex-col px-3 py-2 text-left text-sm", "hover:bg-
|
|
2853
|
+
className: cn("flex w-full flex-col px-3 py-2 text-left text-sm", "hover:bg-selected/10", i === highlightedIndex && "bg-selected/10"),
|
|
2847
2854
|
onMouseDown: (e) => {
|
|
2848
2855
|
e.preventDefault();
|
|
2849
2856
|
applySuggestion(s);
|
|
@@ -4537,15 +4544,15 @@ function FileUploadField({ id, label, placeholder = "Drop your file here or clic
|
|
|
4537
4544
|
},
|
|
4538
4545
|
className: `
|
|
4539
4546
|
relative rounded-lg border-2 border-dashed transition-all duration-200
|
|
4540
|
-
${isDragOver ? "border-
|
|
4547
|
+
${isDragOver ? "border-selected bg-selected/5" : hasError ? "border-destructive bg-destructive/5" : fileName ? "border-border bg-muted/30" : "border-border bg-background hover:border-selected/50 hover:bg-muted/50"}
|
|
4541
4548
|
${readOnly || isProcessing ? "cursor-not-allowed opacity-60" : fileName ? "cursor-default" : "cursor-pointer"}
|
|
4542
4549
|
p-6
|
|
4543
4550
|
`,
|
|
4544
4551
|
children: !fileName ? /* @__PURE__ */ jsxs("div", {
|
|
4545
4552
|
className: "flex flex-col items-center justify-center gap-3 text-center",
|
|
4546
4553
|
children: [/* @__PURE__ */ jsx("div", {
|
|
4547
|
-
className: `rounded-full p-3 transition-colors ${isDragOver ? "bg-
|
|
4548
|
-
children: /* @__PURE__ */ jsx(Upload, { className: `h-8 w-8 transition-colors ${isDragOver ? "text-
|
|
4554
|
+
className: `rounded-full p-3 transition-colors ${isDragOver ? "bg-selected/10" : "bg-muted"}`,
|
|
4555
|
+
children: /* @__PURE__ */ jsx(Upload, { className: `h-8 w-8 transition-colors ${isDragOver ? "text-selected" : "text-muted-foreground"}` })
|
|
4549
4556
|
}), /* @__PURE__ */ jsxs("div", {
|
|
4550
4557
|
className: "space-y-1",
|
|
4551
4558
|
children: [/* @__PURE__ */ jsx("p", {
|
|
@@ -5430,7 +5437,7 @@ function RadioField({ id, label, helperText, control, name, width = "full", vali
|
|
|
5430
5437
|
const isDisabled = option.disabled;
|
|
5431
5438
|
return /* @__PURE__ */ jsxs("label", {
|
|
5432
5439
|
htmlFor: optionId,
|
|
5433
|
-
className: `group relative flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 transition-all duration-150 ${isDisabled ? "cursor-not-allowed opacity-50" : "hover:bg-muted/50"} ${isSelected && !hasError ? "bg-
|
|
5440
|
+
className: `group relative flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 transition-all duration-150 ${isDisabled ? "cursor-not-allowed opacity-50" : "hover:bg-muted/50"} ${isSelected && !hasError ? "bg-selected/5" : ""}`,
|
|
5434
5441
|
children: [
|
|
5435
5442
|
/* @__PURE__ */ jsx("input", {
|
|
5436
5443
|
type: "radio",
|
|
@@ -5444,13 +5451,13 @@ function RadioField({ id, label, helperText, control, name, width = "full", vali
|
|
|
5444
5451
|
}),
|
|
5445
5452
|
/* @__PURE__ */ jsxs("div", {
|
|
5446
5453
|
className: "relative flex size-4 items-center justify-center",
|
|
5447
|
-
children: [/* @__PURE__ */ jsx("div", { className: `absolute size-4 rounded-full border-2 transition-all duration-150 ${isSelected ? hasError ? "border-destructive bg-destructive/10" : "border-
|
|
5454
|
+
children: [/* @__PURE__ */ jsx("div", { className: `absolute size-4 rounded-full border-2 transition-all duration-150 ${isSelected ? hasError ? "border-destructive bg-destructive/10" : "border-selected bg-selected/10" : hasError ? "border-destructive/50" : "border-muted-foreground/40 group-hover:border-muted-foreground/60"} ${!isDisabled && "group-hover:scale-105"}` }), /* @__PURE__ */ jsx("div", { className: `absolute size-1.5 rounded-full transition-all duration-150 ${isSelected ? hasError ? "bg-destructive scale-100 opacity-100" : "bg-selected scale-100 opacity-100" : "scale-0 opacity-0"}` })]
|
|
5448
5455
|
}),
|
|
5449
5456
|
/* @__PURE__ */ jsx("span", {
|
|
5450
5457
|
className: `text-sm transition-colors duration-150 ${isDisabled ? "text-muted-foreground" : isSelected ? hasError ? "text-destructive font-medium" : "text-foreground font-medium" : "text-foreground"}`,
|
|
5451
5458
|
children: option.label
|
|
5452
5459
|
}),
|
|
5453
|
-
/* @__PURE__ */ jsx("div", { className: `absolute -inset-1 rounded-lg ring-2 ring-
|
|
5460
|
+
/* @__PURE__ */ jsx("div", { className: `absolute -inset-1 rounded-lg ring-2 ring-selected ring-offset-2 ring-offset-background transition-opacity duration-150 ${isSelected && !isDisabled ? "opacity-0 focus-within:opacity-100" : "opacity-0"}` })
|
|
5454
5461
|
]
|
|
5455
5462
|
}, option.value);
|
|
5456
5463
|
})
|