react-wizard-engine 0.1.3 → 0.1.4
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/CHANGELOG.md +6 -0
- package/dist/chunk-5ZSA2PNS.js +76 -0
- package/dist/chunk-5ZSA2PNS.js.map +1 -0
- package/dist/chunk-XNH2LQZL.cjs +76 -0
- package/dist/chunk-XNH2LQZL.cjs.map +1 -0
- package/dist/index.cjs +388 -548
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +51 -104
- package/dist/index.js.map +1 -1
- package/dist/shadcn/index.cjs +64 -156
- package/dist/shadcn/index.cjs.map +1 -1
- package/dist/shadcn/index.js +32 -83
- package/dist/shadcn/index.js.map +1 -1
- package/package.json +1 -1
package/dist/shadcn/index.cjs
CHANGED
|
@@ -1,81 +1,18 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
"use strict";
|
|
3
|
-
var __create = Object.create;
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
-
var __export = (target, all) => {
|
|
10
|
-
for (var name in all)
|
|
11
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
-
};
|
|
13
|
-
var __copyProps = (to, from, except, desc) => {
|
|
14
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
-
for (let key of __getOwnPropNames(from))
|
|
16
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
-
}
|
|
19
|
-
return to;
|
|
20
|
-
};
|
|
21
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
-
mod
|
|
28
|
-
));
|
|
29
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
|
|
30
2
|
|
|
31
|
-
// src/shadcn/index.ts
|
|
32
|
-
var shadcn_exports = {};
|
|
33
|
-
__export(shadcn_exports, {
|
|
34
|
-
WizardComponentsProviderWithDefaults: () => WizardComponentsProviderWithDefaults,
|
|
35
|
-
WizardLayout: () => WizardLayout,
|
|
36
|
-
WizardLayoutContext: () => WizardLayoutContext,
|
|
37
|
-
WizardTopBar: () => WizardTopBar,
|
|
38
|
-
defaultBackArrowIcon: () => defaultBackArrowIcon,
|
|
39
|
-
defaultButton: () => defaultButton
|
|
40
|
-
});
|
|
41
|
-
module.exports = __toCommonJS(shadcn_exports);
|
|
42
3
|
|
|
43
|
-
// src/react/components-provider.tsx
|
|
44
|
-
var import_react = require("react");
|
|
45
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
46
|
-
var FallbackButton = (props) => {
|
|
47
|
-
const { children, asChild: _asChild, variant: _variant, size: _size, ...rest } = props;
|
|
48
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ...rest, type: props.type ?? "button", children });
|
|
49
|
-
};
|
|
50
|
-
var FallbackBackArrowIcon = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className, width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M10 4 L6 8 L10 12", stroke: "currentColor", strokeWidth: "1.5", fill: "none" }) });
|
|
51
|
-
var defaults = { Button: FallbackButton, BackArrowIcon: FallbackBackArrowIcon };
|
|
52
|
-
var WizardComponentsContext = (0, import_react.createContext)(defaults);
|
|
53
|
-
function WizardComponentsProvider(props) {
|
|
54
|
-
const { Button, BackArrowIcon, children } = props;
|
|
55
|
-
const value = {
|
|
56
|
-
Button: Button ?? defaults.Button,
|
|
57
|
-
BackArrowIcon: BackArrowIcon ?? defaults.BackArrowIcon
|
|
58
|
-
};
|
|
59
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WizardComponentsContext.Provider, { value, children });
|
|
60
|
-
}
|
|
61
|
-
function useWizardComponents() {
|
|
62
|
-
return (0, import_react.useContext)(WizardComponentsContext);
|
|
63
|
-
}
|
|
64
4
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
var
|
|
68
|
-
function cn(...inputs) {
|
|
69
|
-
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(...inputs));
|
|
70
|
-
}
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkXNH2LQZLcjs = require('../chunk-XNH2LQZL.cjs');
|
|
71
8
|
|
|
72
9
|
// src/shadcn/default-back-arrow-icon.tsx
|
|
73
|
-
var
|
|
10
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
74
11
|
function defaultBackArrowIcon({ className, ...rest }) {
|
|
75
|
-
return /* @__PURE__ */ (0,
|
|
12
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
76
13
|
"svg",
|
|
77
14
|
{
|
|
78
|
-
className: cn(
|
|
15
|
+
className: _chunkXNH2LQZLcjs.cn.call(void 0,
|
|
79
16
|
"h-4 w-4 transition-transform duration-150 group-hover:-translate-x-0.5",
|
|
80
17
|
className
|
|
81
18
|
),
|
|
@@ -87,17 +24,17 @@ function defaultBackArrowIcon({ className, ...rest }) {
|
|
|
87
24
|
viewBox: "0 0 16 16",
|
|
88
25
|
"aria-hidden": true,
|
|
89
26
|
...rest,
|
|
90
|
-
children: /* @__PURE__ */ (0,
|
|
27
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { d: "M10 4 L6 8 L10 12" })
|
|
91
28
|
}
|
|
92
29
|
);
|
|
93
30
|
}
|
|
94
31
|
|
|
95
32
|
// src/shadcn/default-button.tsx
|
|
96
|
-
var
|
|
97
|
-
var
|
|
98
|
-
var
|
|
99
|
-
|
|
100
|
-
var buttonVariants = (0,
|
|
33
|
+
var _reactslot = require('@radix-ui/react-slot');
|
|
34
|
+
var _classvarianceauthority = require('class-variance-authority');
|
|
35
|
+
var _react = require('react');
|
|
36
|
+
|
|
37
|
+
var buttonVariants = _classvarianceauthority.cva.call(void 0,
|
|
101
38
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
|
102
39
|
{
|
|
103
40
|
variants: {
|
|
@@ -116,60 +53,60 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
|
116
53
|
}
|
|
117
54
|
}
|
|
118
55
|
);
|
|
119
|
-
var defaultButton = (0,
|
|
120
|
-
const Comp = asChild ?
|
|
121
|
-
return /* @__PURE__ */ (0,
|
|
56
|
+
var defaultButton = _react.forwardRef.call(void 0, function DefaultButton({ asChild, className, size, variant, type, ...rest }, ref) {
|
|
57
|
+
const Comp = asChild ? _reactslot.Slot : "button";
|
|
58
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
122
59
|
Comp,
|
|
123
60
|
{
|
|
124
61
|
ref,
|
|
125
|
-
type: asChild ? void 0 : type
|
|
126
|
-
className: cn(buttonVariants({ size, variant }), className),
|
|
62
|
+
type: asChild ? void 0 : _nullishCoalesce(type, () => ( "button")),
|
|
63
|
+
className: _chunkXNH2LQZLcjs.cn.call(void 0, buttonVariants({ size, variant }), className),
|
|
127
64
|
...rest
|
|
128
65
|
}
|
|
129
66
|
);
|
|
130
67
|
});
|
|
131
68
|
|
|
132
69
|
// src/shadcn/components-provider-with-defaults.tsx
|
|
133
|
-
|
|
70
|
+
|
|
134
71
|
function WizardComponentsProviderWithDefaults({ children }) {
|
|
135
|
-
return /* @__PURE__ */ (0,
|
|
72
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXNH2LQZLcjs.WizardComponentsProvider, { Button: defaultButton, BackArrowIcon: defaultBackArrowIcon, children });
|
|
136
73
|
}
|
|
137
74
|
|
|
138
75
|
// src/shadcn/wizard-layout.tsx
|
|
139
|
-
var
|
|
140
|
-
|
|
76
|
+
var _reactdialog = require('@radix-ui/react-dialog'); var Dialog = _interopRequireWildcard(_reactdialog);
|
|
77
|
+
|
|
141
78
|
|
|
142
79
|
// src/shadcn/wizard-layout.context.ts
|
|
143
|
-
|
|
144
|
-
var WizardLayoutContext = (0,
|
|
80
|
+
|
|
81
|
+
var WizardLayoutContext = _react.createContext.call(void 0, null);
|
|
145
82
|
|
|
146
83
|
// src/shadcn/wizard-layout.tsx
|
|
147
|
-
|
|
84
|
+
|
|
148
85
|
function WizardLayout(props) {
|
|
149
86
|
const { children, className, defaultRailTitle = "Wizard steps", rail, railTitle, ref, topBar } = props;
|
|
150
|
-
const [mobileSheetOpen, setMobileSheetOpen] = (0,
|
|
87
|
+
const [mobileSheetOpen, setMobileSheetOpen] = _react.useState.call(void 0, false);
|
|
151
88
|
const closeMobileSheet = () => setMobileSheetOpen(false);
|
|
152
|
-
return /* @__PURE__ */ (0,
|
|
153
|
-
/* @__PURE__ */ (0,
|
|
89
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, WizardLayoutContext.Provider, { value: { mobileSheetOpen, setMobileSheetOpen }, children: [
|
|
90
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkXNH2LQZLcjs.cn.call(void 0, "flex h-full min-h-0 w-full flex-1 bg-sidebar", className), "data-slot": "wizard-layout-outer", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
154
91
|
"div",
|
|
155
92
|
{
|
|
156
93
|
className: "flex flex-1 overflow-hidden bg-background text-foreground shadow-sm ring-1 ring-foreground/10 md:rounded-xl",
|
|
157
94
|
"data-slot": "wizard-layout",
|
|
158
95
|
children: [
|
|
159
|
-
/* @__PURE__ */ (0,
|
|
96
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
160
97
|
"aside",
|
|
161
98
|
{
|
|
162
99
|
className: "hidden w-[280px] shrink-0 flex-col gap-4 border-r border-border px-4 py-6 md:flex",
|
|
163
100
|
"data-slot": "wizard-layout-rail",
|
|
164
101
|
children: [
|
|
165
|
-
railTitle && /* @__PURE__ */ (0,
|
|
102
|
+
railTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-3 text-base font-semibold text-foreground", children: railTitle }),
|
|
166
103
|
rail
|
|
167
104
|
]
|
|
168
105
|
}
|
|
169
106
|
),
|
|
170
|
-
/* @__PURE__ */ (0,
|
|
107
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
171
108
|
topBar,
|
|
172
|
-
/* @__PURE__ */ (0,
|
|
109
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
173
110
|
"div",
|
|
174
111
|
{
|
|
175
112
|
className: "min-h-0 flex-1 overflow-y-auto px-4 py-6 sm:px-8",
|
|
@@ -182,16 +119,16 @@ function WizardLayout(props) {
|
|
|
182
119
|
]
|
|
183
120
|
}
|
|
184
121
|
) }),
|
|
185
|
-
/* @__PURE__ */ (0,
|
|
186
|
-
/* @__PURE__ */ (0,
|
|
187
|
-
/* @__PURE__ */ (0,
|
|
122
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, Dialog.Root, { onOpenChange: setMobileSheetOpen, open: mobileSheetOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Dialog.Portal, { children: [
|
|
123
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, Dialog.Overlay, { className: "fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" }),
|
|
124
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
188
125
|
Dialog.Content,
|
|
189
126
|
{
|
|
190
127
|
"aria-describedby": void 0,
|
|
191
128
|
className: "fixed inset-y-0 left-0 z-50 flex w-3/4 max-w-sm flex-col gap-4 border-r border-border bg-background px-4 py-6 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left",
|
|
192
129
|
children: [
|
|
193
|
-
/* @__PURE__ */ (0,
|
|
194
|
-
/* @__PURE__ */ (0,
|
|
130
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, Dialog.Title, { className: "px-3 text-base font-semibold", children: _nullishCoalesce(railTitle, () => ( defaultRailTitle)) }),
|
|
131
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { onClickCapture: closeMobileSheet, children: rail })
|
|
195
132
|
]
|
|
196
133
|
}
|
|
197
134
|
)
|
|
@@ -200,58 +137,30 @@ function WizardLayout(props) {
|
|
|
200
137
|
}
|
|
201
138
|
|
|
202
139
|
// src/shadcn/wizard-top-bar.tsx
|
|
203
|
-
var
|
|
204
|
-
var import_react7 = require("react");
|
|
205
|
-
|
|
206
|
-
// src/react/use-wizard.ts
|
|
207
|
-
var import_react6 = require("react");
|
|
140
|
+
var _lucidereact = require('lucide-react');
|
|
208
141
|
|
|
209
|
-
// src/core/errors/wizard.error.ts
|
|
210
|
-
var WizardError = class extends Error {
|
|
211
|
-
name = "WizardError";
|
|
212
|
-
constructor(message) {
|
|
213
|
-
super(message);
|
|
214
|
-
Object.setPrototypeOf(this, new.target.prototype);
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
142
|
|
|
218
|
-
// src/react/context.ts
|
|
219
|
-
var import_react5 = require("react");
|
|
220
|
-
var WizardEngineContext = (0, import_react5.createContext)(null);
|
|
221
|
-
|
|
222
|
-
// src/react/use-wizard.ts
|
|
223
|
-
function useWizard() {
|
|
224
|
-
const engine = (0, import_react6.useContext)(WizardEngineContext);
|
|
225
|
-
if (!engine) {
|
|
226
|
-
throw new WizardError("useWizard must be used inside <WizardProvider>");
|
|
227
|
-
}
|
|
228
|
-
(0, import_react6.useSyncExternalStore)(engine.subscribe, engine.getTreeSnapshot, engine.getTreeSnapshot);
|
|
229
|
-
return engine;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// src/shadcn/wizard-top-bar.tsx
|
|
233
|
-
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
234
143
|
function WizardTopBar(props) {
|
|
235
144
|
const { backLabel, className, closeLabel, disabled, extraActions, finishLabel, menuLabel, nextLabel, onClose } = props;
|
|
236
|
-
const wizard = useWizard();
|
|
237
|
-
const layout = (0,
|
|
238
|
-
const { Button, BackArrowIcon } = useWizardComponents();
|
|
145
|
+
const wizard = _chunkXNH2LQZLcjs.useWizard.call(void 0, );
|
|
146
|
+
const layout = _react.useContext.call(void 0, WizardLayoutContext);
|
|
147
|
+
const { Button, BackArrowIcon } = _chunkXNH2LQZLcjs.useWizardComponents.call(void 0, );
|
|
239
148
|
const config = wizard.configOptions;
|
|
240
149
|
const tree = wizard.tree;
|
|
241
150
|
const isFirstStep = tree.activeBranch.prevCategory == null && tree.activeCategory.prevStep == null;
|
|
242
151
|
const isLastStep = tree.activeBranch.nextCategory == null && tree.activeCategory.nextStep == null;
|
|
243
|
-
const resolvedBackLabel = backLabel
|
|
244
|
-
const resolvedFinishLabel = finishLabel
|
|
245
|
-
const resolvedNextLabel = nextLabel
|
|
246
|
-
const resolvedMenuLabel = menuLabel
|
|
247
|
-
const resolvedCloseLabel = closeLabel
|
|
248
|
-
return /* @__PURE__ */ (0,
|
|
152
|
+
const resolvedBackLabel = _nullishCoalesce(backLabel, () => ( config.backBtnText));
|
|
153
|
+
const resolvedFinishLabel = _nullishCoalesce(finishLabel, () => ( config.finishText));
|
|
154
|
+
const resolvedNextLabel = _nullishCoalesce(nextLabel, () => ( config.nextBtnText));
|
|
155
|
+
const resolvedMenuLabel = _nullishCoalesce(menuLabel, () => ( "Open wizard steps"));
|
|
156
|
+
const resolvedCloseLabel = _nullishCoalesce(closeLabel, () => ( "Close"));
|
|
157
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
249
158
|
"div",
|
|
250
159
|
{
|
|
251
|
-
className: cn("flex h-14 items-center gap-3 border-b border-border bg-background px-4 sm:px-6", className),
|
|
160
|
+
className: _chunkXNH2LQZLcjs.cn.call(void 0, "flex h-14 items-center gap-3 border-b border-border bg-background px-4 sm:px-6", className),
|
|
252
161
|
"data-slot": "wizard-top-bar",
|
|
253
162
|
children: [
|
|
254
|
-
layout && /* @__PURE__ */ (0,
|
|
163
|
+
layout && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
255
164
|
Button,
|
|
256
165
|
{
|
|
257
166
|
"aria-label": resolvedMenuLabel,
|
|
@@ -260,10 +169,10 @@ function WizardTopBar(props) {
|
|
|
260
169
|
size: "icon-sm",
|
|
261
170
|
type: "button",
|
|
262
171
|
variant: "ghost",
|
|
263
|
-
children: /* @__PURE__ */ (0,
|
|
172
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.MenuIcon, {})
|
|
264
173
|
}
|
|
265
174
|
),
|
|
266
|
-
!isFirstStep && /* @__PURE__ */ (0,
|
|
175
|
+
!isFirstStep && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
267
176
|
"button",
|
|
268
177
|
{
|
|
269
178
|
"aria-label": typeof resolvedBackLabel === "string" ? resolvedBackLabel : void 0,
|
|
@@ -273,14 +182,14 @@ function WizardTopBar(props) {
|
|
|
273
182
|
},
|
|
274
183
|
type: "button",
|
|
275
184
|
children: [
|
|
276
|
-
/* @__PURE__ */ (0,
|
|
277
|
-
/* @__PURE__ */ (0,
|
|
185
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, BackArrowIcon, {}),
|
|
186
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: resolvedBackLabel })
|
|
278
187
|
]
|
|
279
188
|
}
|
|
280
189
|
),
|
|
281
|
-
/* @__PURE__ */ (0,
|
|
190
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-1 items-center justify-end gap-2", children: [
|
|
282
191
|
extraActions,
|
|
283
|
-
isLastStep ? /* @__PURE__ */ (0,
|
|
192
|
+
isLastStep ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Button, { disabled, type: "submit", variant: "default", children: resolvedFinishLabel }, "wizard-finish") : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
284
193
|
Button,
|
|
285
194
|
{
|
|
286
195
|
disabled,
|
|
@@ -293,19 +202,18 @@ function WizardTopBar(props) {
|
|
|
293
202
|
},
|
|
294
203
|
"wizard-next"
|
|
295
204
|
),
|
|
296
|
-
/* @__PURE__ */ (0,
|
|
205
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, Button, { "aria-label": resolvedCloseLabel, onClick: onClose, size: "icon-sm", type: "button", variant: "ghost", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.XIcon, {}) })
|
|
297
206
|
] })
|
|
298
207
|
]
|
|
299
208
|
}
|
|
300
209
|
);
|
|
301
210
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
});
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
exports.WizardComponentsProviderWithDefaults = WizardComponentsProviderWithDefaults; exports.WizardLayout = WizardLayout; exports.WizardLayoutContext = WizardLayoutContext; exports.WizardTopBar = WizardTopBar; exports.defaultBackArrowIcon = defaultBackArrowIcon; exports.defaultButton = defaultButton;
|
|
311
219
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shadcn/index.ts","../../src/react/components-provider.tsx","../../src/utils/cn.ts","../../src/shadcn/default-back-arrow-icon.tsx","../../src/shadcn/default-button.tsx","../../src/shadcn/components-provider-with-defaults.tsx","../../src/shadcn/wizard-layout.tsx","../../src/shadcn/wizard-layout.context.ts","../../src/shadcn/wizard-top-bar.tsx","../../src/react/use-wizard.ts","../../src/core/errors/wizard.error.ts","../../src/react/context.ts"],"sourcesContent":["export { WizardComponentsProviderWithDefaults } from './components-provider-with-defaults';\nexport { defaultBackArrowIcon } from './default-back-arrow-icon';\nexport { defaultButton } from './default-button';\nexport { WizardLayout } from './wizard-layout';\nexport { WizardLayoutContext } from './wizard-layout.context';\nexport { WizardTopBar } from './wizard-top-bar';\n","'use client';\n\nimport { type ComponentType, createContext, type ReactNode, useContext } from 'react';\n\nexport interface IWizardButtonProps {\n\tasChild?: boolean;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tdisabled?: boolean;\n\tonClick?: () => void;\n\ttype?: 'button' | 'submit';\n\tvariant?: 'default' | 'ghost';\n\tsize?: 'default' | 'icon-sm';\n\t'aria-label'?: string;\n}\n\nexport interface IWizardBackArrowIconProps {\n\tclassName?: string;\n}\n\nexport interface IWizardComponents {\n\tButton: ComponentType<IWizardButtonProps>;\n\tBackArrowIcon: ComponentType<IWizardBackArrowIconProps>;\n}\n\nconst FallbackButton: ComponentType<IWizardButtonProps> = (props) => {\n\tconst { children, asChild: _asChild, variant: _variant, size: _size, ...rest } = props;\n\treturn (\n\t\t<button {...rest} type={props.type ?? 'button'}>\n\t\t\t{children}\n\t\t</button>\n\t);\n};\n\nconst FallbackBackArrowIcon: ComponentType<IWizardBackArrowIconProps> = ({ className }) => (\n\t<svg className={className} width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden>\n\t\t<path d=\"M10 4 L6 8 L10 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n\t</svg>\n);\n\nconst defaults: IWizardComponents = { Button: FallbackButton, BackArrowIcon: FallbackBackArrowIcon };\n\nconst WizardComponentsContext = createContext<IWizardComponents>(defaults);\n\nexport function WizardComponentsProvider(props: {\n\tButton?: ComponentType<IWizardButtonProps>;\n\tBackArrowIcon?: ComponentType<IWizardBackArrowIconProps>;\n\tchildren: ReactNode;\n}) {\n\tconst { Button, BackArrowIcon, children } = props;\n\tconst value: IWizardComponents = {\n\t\tButton: Button ?? defaults.Button,\n\t\tBackArrowIcon: BackArrowIcon ?? defaults.BackArrowIcon,\n\t};\n\treturn <WizardComponentsContext.Provider value={value}>{children}</WizardComponentsContext.Provider>;\n}\n\nexport function useWizardComponents(): IWizardComponents {\n\treturn useContext(WizardComponentsContext);\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(...inputs));\n}\n","'use client';\n\nimport { type ComponentProps } from 'react';\n\nimport { cn } from '~/utils/cn';\n\n/** Animated back-arrow icon. The arrow translates -2px on the parent's group-hover. */\nexport function defaultBackArrowIcon({ className, ...rest }: ComponentProps<'svg'>) {\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn(\n\t\t\t\t'h-4 w-4 transition-transform duration-150 group-hover:-translate-x-0.5',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={1.75}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\tviewBox=\"0 0 16 16\"\n\t\t\taria-hidden\n\t\t\t{...rest}\n\t\t>\n\t\t\t<path d=\"M10 4 L6 8 L10 12\" />\n\t\t</svg>\n\t);\n}\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '~/utils/cn';\nimport { type IWizardButtonProps } from '../react/components-provider';\n\nconst buttonVariants = cva(\n\t'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-primary text-primary-foreground hover:bg-primary/90',\n\t\t\t\tghost: 'hover:bg-accent hover:text-accent-foreground',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-9 px-4 py-2',\n\t\t\t\t'icon-sm': 'h-8 w-8',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t}\n);\n\ntype InternalProps = Omit<IWizardButtonProps, 'size' | 'variant'> &\n\tVariantProps<typeof buttonVariants> & {\n\t\tchildren?: ReactNode;\n\t};\n\nexport const defaultButton = forwardRef<HTMLButtonElement, InternalProps>(function DefaultButton(\n\t{ asChild, className, size, variant, type, ...rest },\n\tref\n) {\n\tconst Comp: any = asChild ? Slot : 'button';\n\treturn (\n\t\t<Comp\n\t\t\tref={ref}\n\t\t\ttype={asChild ? undefined : (type ?? 'button')}\n\t\t\tclassName={cn(buttonVariants({ size, variant }), className)}\n\t\t\t{...rest}\n\t\t/>\n\t);\n});\n","'use client';\n\nimport { type ReactNode } from 'react';\n\nimport { WizardComponentsProvider } from '../react/components-provider';\nimport { defaultBackArrowIcon } from './default-back-arrow-icon';\nimport { defaultButton } from './default-button';\n\n/**\n * Convenience wrapper around `WizardComponentsProvider` that wires in the\n * package-shipped `defaultButton` and `defaultBackArrowIcon`. Use this if\n * you want the styled adapter out of the box; use `WizardComponentsProvider`\n * directly if you want to pass your own.\n */\nexport function WizardComponentsProviderWithDefaults({ children }: { children: ReactNode }) {\n\treturn (\n\t\t<WizardComponentsProvider Button={defaultButton} BackArrowIcon={defaultBackArrowIcon}>\n\t\t\t{children}\n\t\t</WizardComponentsProvider>\n\t);\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { type ReactNode, type Ref, useState } from 'react';\n\nimport { cn } from '~/utils/cn';\nimport { WizardLayoutContext } from './wizard-layout.context';\n\ninterface IWizardLayoutProps {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tdefaultRailTitle?: string;\n\trail: ReactNode;\n\trailTitle?: ReactNode;\n\tref?: Ref<HTMLDivElement>;\n\ttopBar: ReactNode;\n}\n\n/**\n * Full-page wizard shell. Renders a top bar across the right column on\n * desktop, a vertical rail on the left, and a scrollable content area for\n * the active step. Below the `md` breakpoint the rail collapses into a\n * left-side dialog whose open state is exposed via `WizardLayoutContext`\n * so the top bar's hamburger button can drive it.\n */\nexport function WizardLayout(props: IWizardLayoutProps) {\n\tconst { children, className, defaultRailTitle = 'Wizard steps', rail, railTitle, ref, topBar } = props;\n\tconst [mobileSheetOpen, setMobileSheetOpen] = useState(false);\n\n\tconst closeMobileSheet = () => setMobileSheetOpen(false);\n\n\treturn (\n\t\t<WizardLayoutContext.Provider value={{ mobileSheetOpen, setMobileSheetOpen }}>\n\t\t\t<div className={cn('flex h-full min-h-0 w-full flex-1 bg-sidebar', className)} data-slot=\"wizard-layout-outer\">\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"flex flex-1 overflow-hidden bg-background text-foreground shadow-sm ring-1 ring-foreground/10 md:rounded-xl\"\n\t\t\t\t\tdata-slot=\"wizard-layout\"\n\t\t\t\t>\n\t\t\t\t\t<aside\n\t\t\t\t\t\tclassName=\"hidden w-[280px] shrink-0 flex-col gap-4 border-r border-border px-4 py-6 md:flex\"\n\t\t\t\t\t\tdata-slot=\"wizard-layout-rail\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{railTitle && <div className=\"px-3 text-base font-semibold text-foreground\">{railTitle}</div>}\n\t\t\t\t\t\t{rail}\n\t\t\t\t\t</aside>\n\n\t\t\t\t\t<div className=\"flex min-w-0 flex-1 flex-col\">\n\t\t\t\t\t\t{topBar}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"min-h-0 flex-1 overflow-y-auto px-4 py-6 sm:px-8\"\n\t\t\t\t\t\t\tdata-slot=\"wizard-layout-scroll\"\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<Dialog.Root onOpenChange={setMobileSheetOpen} open={mobileSheetOpen}>\n\t\t\t\t<Dialog.Portal>\n\t\t\t\t\t<Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n\t\t\t\t\t<Dialog.Content\n\t\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t\t\tclassName=\"fixed inset-y-0 left-0 z-50 flex w-3/4 max-w-sm flex-col gap-4 border-r border-border bg-background px-4 py-6 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Dialog.Title className=\"px-3 text-base font-semibold\">{railTitle ?? defaultRailTitle}</Dialog.Title>\n\t\t\t\t\t\t<div onClickCapture={closeMobileSheet}>{rail}</div>\n\t\t\t\t\t</Dialog.Content>\n\t\t\t\t</Dialog.Portal>\n\t\t\t</Dialog.Root>\n\t\t</WizardLayoutContext.Provider>\n\t);\n}\n","'use client';\n\nimport { createContext } from 'react';\n\nexport interface IWizardLayoutContextValue {\n\tmobileSheetOpen: boolean;\n\tsetMobileSheetOpen: (open: boolean) => void;\n}\n\n/**\n * Communicates the rail's mobile-Sheet open state from `WizardLayout` to\n * `WizardTopBar`. Null outside a layout — consumers (top bar's hamburger\n * button) silently no-op when context is missing, so the top bar stays usable\n * outside `WizardLayout`.\n */\nexport const WizardLayoutContext = createContext<IWizardLayoutContextValue | null>(null);\n","'use client';\n\nimport { MenuIcon, XIcon } from 'lucide-react';\nimport { type ReactNode, useContext } from 'react';\n\nimport { useWizardComponents } from '../react/components-provider';\nimport { useWizard } from '../react/use-wizard';\nimport { cn } from '~/utils/cn';\nimport { WizardLayoutContext } from './wizard-layout.context';\n\ninterface IWizardTopBarProps {\n\tbackLabel?: ReactNode;\n\tclassName?: string;\n\tcloseLabel?: string;\n\tdisabled?: boolean;\n\textraActions?: ReactNode;\n\tfinishLabel?: ReactNode;\n\tmenuLabel?: string;\n\tnextLabel?: ReactNode;\n\tonClose: () => void;\n}\n\n/**\n * Header bar for full-page wizard layouts. Renders Back / primary action /\n * extras / close X. Reads `useWizard` for first/last-step detection. The\n * primary action is `type=\"submit\"` on the last step (lets the parent form\n * own submission) and dispatches `wizard.next()` otherwise. Hamburger only\n * surfaces when wrapped by a `WizardLayout`.\n */\nexport function WizardTopBar(props: IWizardTopBarProps) {\n\tconst { backLabel, className, closeLabel, disabled, extraActions, finishLabel, menuLabel, nextLabel, onClose } =\n\t\tprops;\n\tconst wizard = useWizard();\n\tconst layout = useContext(WizardLayoutContext);\n\tconst { Button, BackArrowIcon } = useWizardComponents();\n\n\tconst config = wizard.configOptions;\n\tconst tree = wizard.tree;\n\tconst isFirstStep = tree.activeBranch.prevCategory == null && tree.activeCategory.prevStep == null;\n\tconst isLastStep = tree.activeBranch.nextCategory == null && tree.activeCategory.nextStep == null;\n\n\tconst resolvedBackLabel = backLabel ?? config.backBtnText;\n\tconst resolvedFinishLabel = finishLabel ?? config.finishText;\n\tconst resolvedNextLabel = nextLabel ?? config.nextBtnText;\n\tconst resolvedMenuLabel = menuLabel ?? 'Open wizard steps';\n\tconst resolvedCloseLabel = closeLabel ?? 'Close';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('flex h-14 items-center gap-3 border-b border-border bg-background px-4 sm:px-6', className)}\n\t\t\tdata-slot=\"wizard-top-bar\"\n\t\t>\n\t\t\t{layout && (\n\t\t\t\t<Button\n\t\t\t\t\taria-label={resolvedMenuLabel}\n\t\t\t\t\tclassName=\"md:hidden\"\n\t\t\t\t\tonClick={() => layout.setMobileSheetOpen(true)}\n\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t>\n\t\t\t\t\t<MenuIcon />\n\t\t\t\t</Button>\n\t\t\t)}\n\n\t\t\t{!isFirstStep && (\n\t\t\t\t<button\n\t\t\t\t\taria-label={typeof resolvedBackLabel === 'string' ? resolvedBackLabel : undefined}\n\t\t\t\t\tclassName=\"group inline-flex items-center gap-1 rounded-md py-1 pr-2.5 pl-3.5 text-sm font-normal text-muted-foreground transition-colors duration-150 hover:bg-muted hover:text-foreground\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid wizard.back();\n\t\t\t\t\t}}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t<BackArrowIcon />\n\t\t\t\t\t<span>{resolvedBackLabel}</span>\n\t\t\t\t</button>\n\t\t\t)}\n\n\t\t\t<div className=\"flex flex-1 items-center justify-end gap-2\">\n\t\t\t\t{extraActions}\n\t\t\t\t{isLastStep ? (\n\t\t\t\t\t<Button disabled={disabled} key=\"wizard-finish\" type=\"submit\" variant=\"default\">\n\t\t\t\t\t\t{resolvedFinishLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t) : (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tkey=\"wizard-next\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tvoid wizard.next();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedNextLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t<Button aria-label={resolvedCloseLabel} onClick={onClose} size=\"icon-sm\" type=\"button\" variant=\"ghost\">\n\t\t\t\t\t<XIcon />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","'use client';\n\nimport { useContext, useSyncExternalStore } from 'react';\n\nimport type { WizardEngine } from '../core/wizard-engine';\n\nimport { WizardError } from '../core/errors';\nimport { WizardEngineContext } from './context';\n\n/**\n * Returns the active `WizardEngine` instance and re-renders the consumer on\n * every tree change. Throws if used outside a `<WizardProvider>`.\n *\n * Engine identity is stable across renders.\n */\nexport function useWizard<Step extends string, Category extends string, Branch extends string = string>(): WizardEngine<\n\tStep,\n\tCategory,\n\tBranch\n> {\n\tconst engine = useContext(WizardEngineContext) as null | WizardEngine<Step, Category, Branch>;\n\tif (!engine) {\n\t\tthrow new WizardError('useWizard must be used inside <WizardProvider>');\n\t}\n\tuseSyncExternalStore(engine.subscribe, engine.getTreeSnapshot, engine.getTreeSnapshot);\n\treturn engine;\n}\n","export class WizardError extends Error {\n\tpublic override readonly name: string = 'WizardError';\n\n\tconstructor(message?: string) {\n\t\tsuper(message);\n\t\tObject.setPrototypeOf(this, new.target.prototype);\n\t}\n}\n\nexport class WizardInitializationError extends WizardError {\n\tpublic override readonly name: string = 'WizardInitializationError';\n}\n\nexport class WizardNavigationError extends WizardError {\n\tpublic override readonly name: string = 'WizardNavigationError';\n}\n\nexport class WizardResolverError extends WizardError {\n\tpublic override readonly name: string = 'WizardResolverError';\n}\n","'use client';\n\nimport { createContext } from 'react';\n\nimport type { WizardEngine } from '../core/wizard-engine';\n\n/**\n * React context exposing the active `WizardEngine` instance to descendants.\n * `null` outside a `<WizardProvider>` — `useWizard()` throws a clear error.\n */\nexport const WizardEngineContext = createContext<null | WizardEngine<string, string, string>>(null);\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_react","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["/Users/knazark/work/extract-tmp/perks-extract/dist/shadcn/index.cjs","../../src/shadcn/default-back-arrow-icon.tsx","../../src/shadcn/default-button.tsx","../../src/shadcn/components-provider-with-defaults.tsx","../../src/shadcn/wizard-layout.tsx","../../src/shadcn/wizard-layout.context.ts","../../src/shadcn/wizard-top-bar.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"/Users/knazark/work/extract-tmp/perks-extract/dist/shadcn/index.cjs","sourcesContent":[null,"'use client';\n\nimport { type ComponentProps } from 'react';\n\nimport { cn } from '~/utils/cn';\n\n/** Animated back-arrow icon. The arrow translates -2px on the parent's group-hover. */\nexport function defaultBackArrowIcon({ className, ...rest }: ComponentProps<'svg'>) {\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn(\n\t\t\t\t'h-4 w-4 transition-transform duration-150 group-hover:-translate-x-0.5',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={1.75}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\tviewBox=\"0 0 16 16\"\n\t\t\taria-hidden\n\t\t\t{...rest}\n\t\t>\n\t\t\t<path d=\"M10 4 L6 8 L10 12\" />\n\t\t</svg>\n\t);\n}\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '~/utils/cn';\nimport { type IWizardButtonProps } from '../react/components-provider';\n\nconst buttonVariants = cva(\n\t'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-primary text-primary-foreground hover:bg-primary/90',\n\t\t\t\tghost: 'hover:bg-accent hover:text-accent-foreground',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-9 px-4 py-2',\n\t\t\t\t'icon-sm': 'h-8 w-8',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t}\n);\n\ntype InternalProps = Omit<IWizardButtonProps, 'size' | 'variant'> &\n\tVariantProps<typeof buttonVariants> & {\n\t\tchildren?: ReactNode;\n\t};\n\nexport const defaultButton = forwardRef<HTMLButtonElement, InternalProps>(function DefaultButton(\n\t{ asChild, className, size, variant, type, ...rest },\n\tref\n) {\n\tconst Comp: any = asChild ? Slot : 'button';\n\treturn (\n\t\t<Comp\n\t\t\tref={ref}\n\t\t\ttype={asChild ? undefined : (type ?? 'button')}\n\t\t\tclassName={cn(buttonVariants({ size, variant }), className)}\n\t\t\t{...rest}\n\t\t/>\n\t);\n});\n","'use client';\n\nimport { type ReactNode } from 'react';\n\nimport { WizardComponentsProvider } from '../react/components-provider';\nimport { defaultBackArrowIcon } from './default-back-arrow-icon';\nimport { defaultButton } from './default-button';\n\n/**\n * Convenience wrapper around `WizardComponentsProvider` that wires in the\n * package-shipped `defaultButton` and `defaultBackArrowIcon`. Use this if\n * you want the styled adapter out of the box; use `WizardComponentsProvider`\n * directly if you want to pass your own.\n */\nexport function WizardComponentsProviderWithDefaults({ children }: { children: ReactNode }) {\n\treturn (\n\t\t<WizardComponentsProvider Button={defaultButton} BackArrowIcon={defaultBackArrowIcon}>\n\t\t\t{children}\n\t\t</WizardComponentsProvider>\n\t);\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { type ReactNode, type Ref, useState } from 'react';\n\nimport { cn } from '~/utils/cn';\nimport { WizardLayoutContext } from './wizard-layout.context';\n\ninterface IWizardLayoutProps {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tdefaultRailTitle?: string;\n\trail: ReactNode;\n\trailTitle?: ReactNode;\n\tref?: Ref<HTMLDivElement>;\n\ttopBar: ReactNode;\n}\n\n/**\n * Full-page wizard shell. Renders a top bar across the right column on\n * desktop, a vertical rail on the left, and a scrollable content area for\n * the active step. Below the `md` breakpoint the rail collapses into a\n * left-side dialog whose open state is exposed via `WizardLayoutContext`\n * so the top bar's hamburger button can drive it.\n */\nexport function WizardLayout(props: IWizardLayoutProps) {\n\tconst { children, className, defaultRailTitle = 'Wizard steps', rail, railTitle, ref, topBar } = props;\n\tconst [mobileSheetOpen, setMobileSheetOpen] = useState(false);\n\n\tconst closeMobileSheet = () => setMobileSheetOpen(false);\n\n\treturn (\n\t\t<WizardLayoutContext.Provider value={{ mobileSheetOpen, setMobileSheetOpen }}>\n\t\t\t<div className={cn('flex h-full min-h-0 w-full flex-1 bg-sidebar', className)} data-slot=\"wizard-layout-outer\">\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"flex flex-1 overflow-hidden bg-background text-foreground shadow-sm ring-1 ring-foreground/10 md:rounded-xl\"\n\t\t\t\t\tdata-slot=\"wizard-layout\"\n\t\t\t\t>\n\t\t\t\t\t<aside\n\t\t\t\t\t\tclassName=\"hidden w-[280px] shrink-0 flex-col gap-4 border-r border-border px-4 py-6 md:flex\"\n\t\t\t\t\t\tdata-slot=\"wizard-layout-rail\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{railTitle && <div className=\"px-3 text-base font-semibold text-foreground\">{railTitle}</div>}\n\t\t\t\t\t\t{rail}\n\t\t\t\t\t</aside>\n\n\t\t\t\t\t<div className=\"flex min-w-0 flex-1 flex-col\">\n\t\t\t\t\t\t{topBar}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"min-h-0 flex-1 overflow-y-auto px-4 py-6 sm:px-8\"\n\t\t\t\t\t\t\tdata-slot=\"wizard-layout-scroll\"\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<Dialog.Root onOpenChange={setMobileSheetOpen} open={mobileSheetOpen}>\n\t\t\t\t<Dialog.Portal>\n\t\t\t\t\t<Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n\t\t\t\t\t<Dialog.Content\n\t\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t\t\tclassName=\"fixed inset-y-0 left-0 z-50 flex w-3/4 max-w-sm flex-col gap-4 border-r border-border bg-background px-4 py-6 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Dialog.Title className=\"px-3 text-base font-semibold\">{railTitle ?? defaultRailTitle}</Dialog.Title>\n\t\t\t\t\t\t<div onClickCapture={closeMobileSheet}>{rail}</div>\n\t\t\t\t\t</Dialog.Content>\n\t\t\t\t</Dialog.Portal>\n\t\t\t</Dialog.Root>\n\t\t</WizardLayoutContext.Provider>\n\t);\n}\n","'use client';\n\nimport { createContext } from 'react';\n\nexport interface IWizardLayoutContextValue {\n\tmobileSheetOpen: boolean;\n\tsetMobileSheetOpen: (open: boolean) => void;\n}\n\n/**\n * Communicates the rail's mobile-Sheet open state from `WizardLayout` to\n * `WizardTopBar`. Null outside a layout — consumers (top bar's hamburger\n * button) silently no-op when context is missing, so the top bar stays usable\n * outside `WizardLayout`.\n */\nexport const WizardLayoutContext = createContext<IWizardLayoutContextValue | null>(null);\n","'use client';\n\nimport { MenuIcon, XIcon } from 'lucide-react';\nimport { type ReactNode, useContext } from 'react';\n\nimport { useWizardComponents } from '../react/components-provider';\nimport { useWizard } from '../react/use-wizard';\nimport { cn } from '~/utils/cn';\nimport { WizardLayoutContext } from './wizard-layout.context';\n\ninterface IWizardTopBarProps {\n\tbackLabel?: ReactNode;\n\tclassName?: string;\n\tcloseLabel?: string;\n\tdisabled?: boolean;\n\textraActions?: ReactNode;\n\tfinishLabel?: ReactNode;\n\tmenuLabel?: string;\n\tnextLabel?: ReactNode;\n\tonClose: () => void;\n}\n\n/**\n * Header bar for full-page wizard layouts. Renders Back / primary action /\n * extras / close X. Reads `useWizard` for first/last-step detection. The\n * primary action is `type=\"submit\"` on the last step (lets the parent form\n * own submission) and dispatches `wizard.next()` otherwise. Hamburger only\n * surfaces when wrapped by a `WizardLayout`.\n */\nexport function WizardTopBar(props: IWizardTopBarProps) {\n\tconst { backLabel, className, closeLabel, disabled, extraActions, finishLabel, menuLabel, nextLabel, onClose } =\n\t\tprops;\n\tconst wizard = useWizard();\n\tconst layout = useContext(WizardLayoutContext);\n\tconst { Button, BackArrowIcon } = useWizardComponents();\n\n\tconst config = wizard.configOptions;\n\tconst tree = wizard.tree;\n\tconst isFirstStep = tree.activeBranch.prevCategory == null && tree.activeCategory.prevStep == null;\n\tconst isLastStep = tree.activeBranch.nextCategory == null && tree.activeCategory.nextStep == null;\n\n\tconst resolvedBackLabel = backLabel ?? config.backBtnText;\n\tconst resolvedFinishLabel = finishLabel ?? config.finishText;\n\tconst resolvedNextLabel = nextLabel ?? config.nextBtnText;\n\tconst resolvedMenuLabel = menuLabel ?? 'Open wizard steps';\n\tconst resolvedCloseLabel = closeLabel ?? 'Close';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('flex h-14 items-center gap-3 border-b border-border bg-background px-4 sm:px-6', className)}\n\t\t\tdata-slot=\"wizard-top-bar\"\n\t\t>\n\t\t\t{layout && (\n\t\t\t\t<Button\n\t\t\t\t\taria-label={resolvedMenuLabel}\n\t\t\t\t\tclassName=\"md:hidden\"\n\t\t\t\t\tonClick={() => layout.setMobileSheetOpen(true)}\n\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t>\n\t\t\t\t\t<MenuIcon />\n\t\t\t\t</Button>\n\t\t\t)}\n\n\t\t\t{!isFirstStep && (\n\t\t\t\t<button\n\t\t\t\t\taria-label={typeof resolvedBackLabel === 'string' ? resolvedBackLabel : undefined}\n\t\t\t\t\tclassName=\"group inline-flex items-center gap-1 rounded-md py-1 pr-2.5 pl-3.5 text-sm font-normal text-muted-foreground transition-colors duration-150 hover:bg-muted hover:text-foreground\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid wizard.back();\n\t\t\t\t\t}}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t<BackArrowIcon />\n\t\t\t\t\t<span>{resolvedBackLabel}</span>\n\t\t\t\t</button>\n\t\t\t)}\n\n\t\t\t<div className=\"flex flex-1 items-center justify-end gap-2\">\n\t\t\t\t{extraActions}\n\t\t\t\t{isLastStep ? (\n\t\t\t\t\t<Button disabled={disabled} key=\"wizard-finish\" type=\"submit\" variant=\"default\">\n\t\t\t\t\t\t{resolvedFinishLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t) : (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tkey=\"wizard-next\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tvoid wizard.next();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedNextLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t<Button aria-label={resolvedCloseLabel} onClick={onClose} size=\"icon-sm\" type=\"button\" variant=\"ghost\">\n\t\t\t\t\t<XIcon />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
|