@getgreenline/blaze-ui 1.0.49 → 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.
@@ -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";
@@ -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';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getgreenline/blaze-ui",
3
- "version": "1.0.49",
3
+ "version": "1.0.50",
4
4
  "type": "module",
5
5
  "dependencies": {
6
6
  "@base-ui/react": "^1.4.1",
@@ -65,8 +65,8 @@
65
65
  "rollup": "^4.60.3",
66
66
  "tailwindcss": "^4.2.4",
67
67
  "typescript": "^6.0.3",
68
- "@workspace/typescript-config": "0.0.0",
69
- "@workspace/eslint-config": "0.0.0"
68
+ "@workspace/eslint-config": "0.0.0",
69
+ "@workspace/typescript-config": "0.0.0"
70
70
  },
71
71
  "main": "./dist/index.js",
72
72
  "module": "./dist/index.js",