@getgreenline/blaze-ui 1.0.49-beta.2 → 1.0.50
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/components/stepper.d.ts +20 -0
- package/dist/components/stepper.d.ts.map +1 -0
- package/dist/components/stepper.js +121 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const stepperVariants: (props?: ({
|
|
4
|
+
variant?: "card" | "compact" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
export interface StepperStep {
|
|
7
|
+
id: string;
|
|
8
|
+
title: React.ReactNode;
|
|
9
|
+
description?: React.ReactNode;
|
|
10
|
+
hasWarning?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface StepperProps extends React.ComponentProps<"nav">, VariantProps<typeof stepperVariants> {
|
|
13
|
+
steps: readonly StepperStep[];
|
|
14
|
+
activeStepId: StepperStep["id"];
|
|
15
|
+
onStepClick?: (step: StepperStep) => void;
|
|
16
|
+
isLoading?: boolean;
|
|
17
|
+
}
|
|
18
|
+
declare function Stepper({ steps, activeStepId, onStepClick, isLoading, variant, className, ...props }: StepperProps): import("react/jsx-runtime").JSX.Element | null;
|
|
19
|
+
export { Stepper, stepperVariants };
|
|
20
|
+
//# sourceMappingURL=stepper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../src/components/stepper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE,QAAA,MAAM,eAAe;;8EAUnB,CAAA;AAuDF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,YACf,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,eAAe,CAAC;IACzE,KAAK,EAAE,SAAS,WAAW,EAAE,CAAA;IAC7B,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;IAC/B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IACzC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AA8DD,iBAAS,OAAO,CAAC,EACf,KAAK,EACL,YAAY,EACZ,WAAW,EACX,SAAiB,EACjB,OAAgB,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,YAAY,kDAgId;AAED,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { ChevronRight, Check, TriangleAlert } from 'lucide-react';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { cn } from '../lib/utils.js';
|
|
6
|
+
import { VisuallyHidden } from './visually-hidden.js';
|
|
7
|
+
|
|
8
|
+
const stepperVariants = cva("tw:flex tw:flex-wrap tw:items-center", {
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
card: "tw:justify-center tw:gap-3",
|
|
12
|
+
compact: "tw:gap-1",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
defaultVariants: {
|
|
16
|
+
variant: "card",
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
const stepperTriggerVariants = cva("tw:group/stepper-trigger tw:inline-flex tw:items-center tw:outline-none tw:transition-[background-color,border-color,color,box-shadow,opacity] tw:focus-visible:ring-ring/50 tw:focus-visible:ring-[3px] tw:disabled:cursor-not-allowed tw:disabled:opacity-50", {
|
|
20
|
+
variants: {
|
|
21
|
+
variant: {
|
|
22
|
+
card: [
|
|
23
|
+
"tw:gap-3 tw:rounded-xl tw:px-4 tw:py-3 tw:text-left",
|
|
24
|
+
"tw:hover:bg-[color-mix(in_oklab,var(--primary)_10%,transparent)] tw:hover:text-accent-foreground",
|
|
25
|
+
"data-[disabled=true]:tw:bg-muted/40",
|
|
26
|
+
],
|
|
27
|
+
compact: [
|
|
28
|
+
"tw:gap-2 tw:rounded-md tw:px-2 tw:py-1.5 tw:text-left",
|
|
29
|
+
"data-[active=true]:tw:bg-primary/5",
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
defaultVariants: {
|
|
34
|
+
variant: "card",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const stepperIndicatorVariants = cva("tw:flex tw:shrink-0 tw:items-center tw:justify-center tw:rounded-full tw:font-medium tw:transition-[background-color,color]", {
|
|
38
|
+
variants: {
|
|
39
|
+
variant: {
|
|
40
|
+
card: "tw:size-11 tw:text-base tw:font-semibold",
|
|
41
|
+
compact: "tw:size-5 tw:text-sm tw:font-semibold",
|
|
42
|
+
},
|
|
43
|
+
state: {
|
|
44
|
+
inactive: "tw:bg-muted tw:text-muted-foreground",
|
|
45
|
+
active: "tw:bg-primary tw:text-primary-foreground",
|
|
46
|
+
completed: "tw:bg-primary/10 tw:text-primary",
|
|
47
|
+
warning: "tw:bg-amber-500/10 tw:text-amber-700 dark:tw:text-amber-400",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
defaultVariants: {
|
|
51
|
+
variant: "card",
|
|
52
|
+
state: "inactive",
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
const stepperTitleClassName = "tw:text-sm tw:font-medium tw:leading-tight tw:transition-colors";
|
|
56
|
+
const stepperDescriptionClassName = "tw:text-muted-foreground tw:text-xs tw:leading-tight";
|
|
57
|
+
function getStepperIndicatorState({ isActive, isCompleted, hasWarning, }) {
|
|
58
|
+
if (isCompleted) {
|
|
59
|
+
if (hasWarning) {
|
|
60
|
+
return "warning";
|
|
61
|
+
}
|
|
62
|
+
return "completed";
|
|
63
|
+
}
|
|
64
|
+
if (isActive) {
|
|
65
|
+
return "active";
|
|
66
|
+
}
|
|
67
|
+
return "inactive";
|
|
68
|
+
}
|
|
69
|
+
function getStepperIndicatorIcon({ variant, state, }) {
|
|
70
|
+
if (state === "completed") {
|
|
71
|
+
return (jsx(Check, { className: cn(variant === "card" ? "tw:size-5" : "tw:size-3.5") }));
|
|
72
|
+
}
|
|
73
|
+
if (state === "warning") {
|
|
74
|
+
return (jsx(TriangleAlert, { className: cn(variant === "card" ? "tw:size-5" : "tw:size-3.5") }));
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
function getStepperIndicatorStatusLabel(state) {
|
|
79
|
+
if (state === "warning") {
|
|
80
|
+
return "Warning";
|
|
81
|
+
}
|
|
82
|
+
if (state === "completed") {
|
|
83
|
+
return "Completed";
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
function Stepper({ steps, activeStepId, onStepClick, isLoading = false, variant = "card", className, ...props }) {
|
|
88
|
+
if (steps.length === 0) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const stepperVariant = variant ?? "card";
|
|
92
|
+
const activeStepIndex = steps.findIndex((step) => step.id === activeStepId);
|
|
93
|
+
const boundedActiveStepIndex = activeStepIndex >= 0 ? activeStepIndex : 0;
|
|
94
|
+
return (jsx("nav", { "data-slot": "stepper", "aria-label": "Progress", className: cn(stepperVariants({ variant: stepperVariant }), className), ...props, children: steps.map((step, index) => {
|
|
95
|
+
const isActive = index === boundedActiveStepIndex;
|
|
96
|
+
const isCompleted = index < boundedActiveStepIndex;
|
|
97
|
+
const isDisabled = isLoading;
|
|
98
|
+
const isInteractive = Boolean(onStepClick);
|
|
99
|
+
const isClickable = isInteractive && !isDisabled;
|
|
100
|
+
const indicatorState = getStepperIndicatorState({
|
|
101
|
+
isActive,
|
|
102
|
+
isCompleted,
|
|
103
|
+
hasWarning: step.hasWarning,
|
|
104
|
+
});
|
|
105
|
+
const indicatorIcon = getStepperIndicatorIcon({
|
|
106
|
+
variant: stepperVariant,
|
|
107
|
+
state: indicatorState,
|
|
108
|
+
});
|
|
109
|
+
const indicatorStatusLabel = getStepperIndicatorStatusLabel(indicatorState);
|
|
110
|
+
const stepperTriggerClassName = cn(stepperTriggerVariants({ variant: stepperVariant }), stepperVariant === "card" &&
|
|
111
|
+
isActive &&
|
|
112
|
+
"tw:bg-[color-mix(in_oklab,var(--primary)_10%,transparent)] tw:text-accent-foreground", isClickable && "tw:cursor-pointer", !isClickable && "tw:cursor-default");
|
|
113
|
+
const stepperTriggerContent = (jsxs(Fragment, { children: [jsxs("div", { "data-slot": "stepper-indicator", className: stepperIndicatorVariants({
|
|
114
|
+
variant: stepperVariant,
|
|
115
|
+
state: indicatorState,
|
|
116
|
+
}), children: [indicatorIcon ? indicatorIcon : jsx("span", { children: index + 1 }), indicatorStatusLabel ? (jsx(VisuallyHidden, { children: indicatorStatusLabel })) : null] }), stepperVariant === "card" ? (jsxs("div", { "data-slot": "stepper-content", className: "tw:flex tw:min-w-0 tw:flex-col tw:gap-0.5", children: [jsx("span", { className: cn(stepperTitleClassName, isActive ? "tw:text-primary" : "tw:text-foreground"), children: step.title }), step.description ? (jsx("span", { className: stepperDescriptionClassName, children: step.description })) : null] })) : (jsx("span", { className: cn(stepperTitleClassName, "tw:text-foreground"), children: step.title }))] }));
|
|
117
|
+
return (jsxs(React.Fragment, { children: [jsx("div", { "data-slot": "stepper-item", className: "tw:flex tw:items-center tw:gap-3", children: isInteractive ? (jsx("button", { type: "button", "data-slot": "stepper-trigger", "data-active": isActive, "data-completed": isCompleted, "data-disabled": isDisabled, "aria-current": isActive ? "step" : undefined, disabled: isDisabled, onClick: () => onStepClick?.(step), className: stepperTriggerClassName, children: stepperTriggerContent })) : (jsx("div", { "data-slot": "stepper-trigger", "data-active": isActive, "data-completed": isCompleted, "aria-current": isActive ? "step" : undefined, className: stepperTriggerClassName, children: stepperTriggerContent })) }), index < steps.length - 1 ? (jsx(ChevronRight, { "data-slot": "stepper-separator", className: "tw:size-4 tw:shrink-0 tw:text-muted-foreground" })) : null] }, step.id));
|
|
118
|
+
}) }));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { Stepper, stepperVariants };
|
package/dist/index.d.ts
CHANGED
|
@@ -38,6 +38,7 @@ export * from "./components/skeleton";
|
|
|
38
38
|
export * from "./components/slider";
|
|
39
39
|
export * from "./components/sonner";
|
|
40
40
|
export * from "./components/spinner";
|
|
41
|
+
export * from "./components/stepper";
|
|
41
42
|
export * from "./components/table";
|
|
42
43
|
export * from "./components/data-table";
|
|
43
44
|
export * from "./components/tabs";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,kCAAkC,CAAA;AAChD,cAAc,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,kCAAkC,CAAA;AAChD,cAAc,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -38,6 +38,7 @@ export { Skeleton } from './components/skeleton.js';
|
|
|
38
38
|
export { Slider } from './components/slider.js';
|
|
39
39
|
export { Toaster } from './components/sonner.js';
|
|
40
40
|
export { Spinner } from './components/spinner.js';
|
|
41
|
+
export { Stepper, stepperVariants } from './components/stepper.js';
|
|
41
42
|
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './components/table.js';
|
|
42
43
|
export { DataTable } from './components/data-table.js';
|
|
43
44
|
export { Tabs, TabsContent, TabsList, TabsTrigger } from './components/tabs.js';
|