@syscore/ui-library 1.27.3 → 2.0.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/client/components/ui/app-bar.tsx +299 -0
- package/client/components/ui/banner.tsx +108 -0
- package/client/components/ui/bottom-navigation.tsx +223 -0
- package/client/components/ui/card.tsx +108 -26
- package/client/components/ui/date-picker.tsx +188 -0
- package/client/components/ui/empty-state.tsx +197 -0
- package/client/components/ui/file-upload.tsx +214 -0
- package/client/components/ui/footer.tsx +179 -0
- package/client/components/ui/layout.tsx +381 -0
- package/client/components/ui/stepper.tsx +148 -0
- package/client/components/ui/system-bar.tsx +119 -0
- package/client/components/ui/timeline.tsx +181 -0
- package/client/global.css +2304 -41
- package/client/ui/AppBar/app-bar.stories.tsx +280 -0
- package/client/ui/Banner/banner.stories.tsx +238 -0
- package/client/ui/BottomNavigation/bottom-navigation.stories.tsx +285 -0
- package/client/ui/Card.stories.tsx +285 -168
- package/client/ui/DatePicker/DatePicker.stories.tsx +293 -0
- package/client/ui/EmptyState/empty-state.stories.tsx +251 -0
- package/client/ui/FileUpload/FileUpload.stories.tsx +218 -0
- package/client/ui/Footer/footer.stories.tsx +194 -0
- package/client/ui/Layout.stories.tsx +1481 -0
- package/client/ui/Stepper/Stepper.stories.tsx +344 -0
- package/client/ui/SystemBar/system-bar.stories.tsx +179 -0
- package/client/ui/Timeline/timeline.stories.tsx +404 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +219 -0
- package/dist/index.es.js +1430 -24
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { useState, useEffect, useCallback, useRef, useLayoutEffect, createContext, Children, isValidElement, cloneElement, useContext, useMemo } from "react";
|
|
4
|
-
import { motion, AnimatePresence, animate, useMotionValue } from "motion/react";
|
|
5
4
|
import { clsx } from "clsx";
|
|
6
5
|
import { twMerge } from "tailwind-merge";
|
|
6
|
+
import { motion, AnimatePresence, animate, useMotionValue } from "motion/react";
|
|
7
7
|
import { cva } from "class-variance-authority";
|
|
8
8
|
import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
|
|
9
9
|
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
@@ -38,6 +38,7 @@ import useEmblaCarousel from "embla-carousel-react";
|
|
|
38
38
|
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
39
39
|
import * as ToastPrimitives from "@radix-ui/react-toast";
|
|
40
40
|
import * as RechartsPrimitive from "recharts";
|
|
41
|
+
import { format } from "date-fns";
|
|
41
42
|
import { useTheme } from "next-themes";
|
|
42
43
|
import { Toaster as Toaster$2 } from "sonner";
|
|
43
44
|
function cn(...inputs) {
|
|
@@ -47,6 +48,656 @@ function capitalize(str) {
|
|
|
47
48
|
if (!str) return str;
|
|
48
49
|
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
49
50
|
}
|
|
51
|
+
const DENSITY_HEIGHT = {
|
|
52
|
+
default: 64,
|
|
53
|
+
comfortable: 56,
|
|
54
|
+
compact: 48,
|
|
55
|
+
prominent: 128
|
|
56
|
+
};
|
|
57
|
+
const AppBar = React.forwardRef(
|
|
58
|
+
({
|
|
59
|
+
className,
|
|
60
|
+
children,
|
|
61
|
+
collapse = false,
|
|
62
|
+
rounded = false,
|
|
63
|
+
elevated = false,
|
|
64
|
+
flat = false,
|
|
65
|
+
position = "fixed",
|
|
66
|
+
color = "default",
|
|
67
|
+
density = "default",
|
|
68
|
+
image,
|
|
69
|
+
imageOverlay,
|
|
70
|
+
style,
|
|
71
|
+
...props
|
|
72
|
+
}, ref) => {
|
|
73
|
+
const height = DENSITY_HEIGHT[density];
|
|
74
|
+
const isProminent = density === "prominent";
|
|
75
|
+
return /* @__PURE__ */ jsxs(
|
|
76
|
+
"header",
|
|
77
|
+
{
|
|
78
|
+
ref,
|
|
79
|
+
role: "banner",
|
|
80
|
+
style: {
|
|
81
|
+
height: collapse ? void 0 : height,
|
|
82
|
+
...style
|
|
83
|
+
},
|
|
84
|
+
className: cn(
|
|
85
|
+
"app-bar",
|
|
86
|
+
// position
|
|
87
|
+
position === "fixed" && "app-bar--fixed",
|
|
88
|
+
position === "sticky" && "app-bar--sticky",
|
|
89
|
+
position === "relative" && "app-bar--relative",
|
|
90
|
+
position === "static" && "app-bar--static",
|
|
91
|
+
// color variants
|
|
92
|
+
color === "primary" && "app-bar--primary",
|
|
93
|
+
color === "transparent" && "app-bar--transparent",
|
|
94
|
+
// density
|
|
95
|
+
density === "comfortable" && "app-bar--comfortable",
|
|
96
|
+
density === "compact" && "app-bar--compact",
|
|
97
|
+
isProminent && "app-bar--prominent",
|
|
98
|
+
// modifiers
|
|
99
|
+
rounded && "app-bar--rounded",
|
|
100
|
+
elevated && "app-bar--elevated",
|
|
101
|
+
flat && "app-bar--flat",
|
|
102
|
+
collapse && "app-bar--collapse",
|
|
103
|
+
// image
|
|
104
|
+
image && "app-bar--image",
|
|
105
|
+
className
|
|
106
|
+
),
|
|
107
|
+
...props,
|
|
108
|
+
children: [
|
|
109
|
+
image && /* @__PURE__ */ jsx(
|
|
110
|
+
"span",
|
|
111
|
+
{
|
|
112
|
+
className: "app-bar-image-layer",
|
|
113
|
+
style: { backgroundImage: `url(${image})` },
|
|
114
|
+
"aria-hidden": "true",
|
|
115
|
+
children: imageOverlay && /* @__PURE__ */ jsx(
|
|
116
|
+
"span",
|
|
117
|
+
{
|
|
118
|
+
className: "app-bar-image-overlay",
|
|
119
|
+
style: {
|
|
120
|
+
background: `linear-gradient(${imageOverlay})`
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
),
|
|
126
|
+
isProminent ? /* @__PURE__ */ jsx(ProminentLayout, { children }) : children
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
AppBar.displayName = "AppBar";
|
|
133
|
+
const AppBarNavIcon = React.forwardRef(
|
|
134
|
+
({ className, icon, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
135
|
+
"button",
|
|
136
|
+
{
|
|
137
|
+
ref,
|
|
138
|
+
type: "button",
|
|
139
|
+
"aria-label": "Open navigation menu",
|
|
140
|
+
className: cn("app-bar-nav-icon", className),
|
|
141
|
+
...props,
|
|
142
|
+
children: children ?? icon ?? /* @__PURE__ */ jsx(HamburgerIcon, {})
|
|
143
|
+
}
|
|
144
|
+
)
|
|
145
|
+
);
|
|
146
|
+
AppBarNavIcon.displayName = "AppBarNavIcon";
|
|
147
|
+
const AppBarTitle = React.forwardRef(
|
|
148
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
149
|
+
"div",
|
|
150
|
+
{
|
|
151
|
+
ref,
|
|
152
|
+
className: cn("app-bar-title", className),
|
|
153
|
+
...props
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
);
|
|
157
|
+
AppBarTitle.displayName = "AppBarTitle";
|
|
158
|
+
const AppBarPrepend = React.forwardRef(
|
|
159
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
160
|
+
"div",
|
|
161
|
+
{
|
|
162
|
+
ref,
|
|
163
|
+
className: cn("app-bar-prepend", className),
|
|
164
|
+
...props
|
|
165
|
+
}
|
|
166
|
+
)
|
|
167
|
+
);
|
|
168
|
+
AppBarPrepend.displayName = "AppBarPrepend";
|
|
169
|
+
const AppBarAppend = React.forwardRef(
|
|
170
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
171
|
+
"div",
|
|
172
|
+
{
|
|
173
|
+
ref,
|
|
174
|
+
className: cn("app-bar-append", className),
|
|
175
|
+
...props
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
);
|
|
179
|
+
AppBarAppend.displayName = "AppBarAppend";
|
|
180
|
+
const AppBarContent = React.forwardRef(
|
|
181
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
182
|
+
"div",
|
|
183
|
+
{
|
|
184
|
+
ref,
|
|
185
|
+
className: cn("app-bar-content", className),
|
|
186
|
+
...props
|
|
187
|
+
}
|
|
188
|
+
)
|
|
189
|
+
);
|
|
190
|
+
AppBarContent.displayName = "AppBarContent";
|
|
191
|
+
function ProminentLayout({ children }) {
|
|
192
|
+
const kids = React.Children.toArray(children);
|
|
193
|
+
const topKids = kids.filter((child) => {
|
|
194
|
+
if (!React.isValidElement(child)) return false;
|
|
195
|
+
const name = child.type.displayName ?? "";
|
|
196
|
+
return name === "AppBarPrepend" || name === "AppBarAppend";
|
|
197
|
+
});
|
|
198
|
+
const bottomKids = kids.filter((child) => {
|
|
199
|
+
if (!React.isValidElement(child)) return false;
|
|
200
|
+
const name = child.type.displayName ?? "";
|
|
201
|
+
return name === "AppBarTitle" || name === "AppBarContent";
|
|
202
|
+
});
|
|
203
|
+
const otherKids = kids.filter((child) => {
|
|
204
|
+
if (!React.isValidElement(child)) return true;
|
|
205
|
+
const name = child.type.displayName ?? "";
|
|
206
|
+
return ![
|
|
207
|
+
"AppBarPrepend",
|
|
208
|
+
"AppBarAppend",
|
|
209
|
+
"AppBarTitle",
|
|
210
|
+
"AppBarContent"
|
|
211
|
+
].includes(name);
|
|
212
|
+
});
|
|
213
|
+
return /* @__PURE__ */ jsxs("span", { className: "app-bar-prominent-inner", children: [
|
|
214
|
+
/* @__PURE__ */ jsxs("span", { className: "app-bar-prominent-top", children: [
|
|
215
|
+
topKids,
|
|
216
|
+
otherKids
|
|
217
|
+
] }),
|
|
218
|
+
/* @__PURE__ */ jsx("span", { className: "app-bar-prominent-bottom", children: bottomKids })
|
|
219
|
+
] });
|
|
220
|
+
}
|
|
221
|
+
function HamburgerIcon() {
|
|
222
|
+
return /* @__PURE__ */ jsxs(
|
|
223
|
+
"svg",
|
|
224
|
+
{
|
|
225
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
226
|
+
width: "24",
|
|
227
|
+
height: "24",
|
|
228
|
+
viewBox: "0 0 24 24",
|
|
229
|
+
fill: "none",
|
|
230
|
+
stroke: "currentColor",
|
|
231
|
+
strokeWidth: "2",
|
|
232
|
+
strokeLinecap: "round",
|
|
233
|
+
strokeLinejoin: "round",
|
|
234
|
+
"aria-hidden": "true",
|
|
235
|
+
children: [
|
|
236
|
+
/* @__PURE__ */ jsx("line", { x1: "4", y1: "6", x2: "20", y2: "6" }),
|
|
237
|
+
/* @__PURE__ */ jsx("line", { x1: "4", y1: "12", x2: "20", y2: "12" }),
|
|
238
|
+
/* @__PURE__ */ jsx("line", { x1: "4", y1: "18", x2: "20", y2: "18" })
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
const BottomNavContext = React.createContext({
|
|
244
|
+
value: null,
|
|
245
|
+
onChange: () => {
|
|
246
|
+
},
|
|
247
|
+
grow: false,
|
|
248
|
+
horizontal: false,
|
|
249
|
+
shift: false,
|
|
250
|
+
activeColor: void 0
|
|
251
|
+
});
|
|
252
|
+
const BottomNavigation = React.forwardRef(
|
|
253
|
+
({
|
|
254
|
+
className,
|
|
255
|
+
children,
|
|
256
|
+
value: valueProp,
|
|
257
|
+
defaultValue,
|
|
258
|
+
onChange,
|
|
259
|
+
color,
|
|
260
|
+
grow = false,
|
|
261
|
+
horizontal = false,
|
|
262
|
+
shift = false,
|
|
263
|
+
active = true,
|
|
264
|
+
elevated = false,
|
|
265
|
+
...props
|
|
266
|
+
}, ref) => {
|
|
267
|
+
const [internalValue, setInternalValue] = React.useState(defaultValue ?? null);
|
|
268
|
+
const isControlled = valueProp !== void 0;
|
|
269
|
+
const currentValue = isControlled ? valueProp : internalValue;
|
|
270
|
+
const handleChange = React.useCallback(
|
|
271
|
+
(val) => {
|
|
272
|
+
if (!isControlled) setInternalValue(val);
|
|
273
|
+
onChange == null ? void 0 : onChange(val);
|
|
274
|
+
},
|
|
275
|
+
[isControlled, onChange]
|
|
276
|
+
);
|
|
277
|
+
return /* @__PURE__ */ jsx(
|
|
278
|
+
BottomNavContext.Provider,
|
|
279
|
+
{
|
|
280
|
+
value: {
|
|
281
|
+
value: currentValue ?? null,
|
|
282
|
+
onChange: handleChange,
|
|
283
|
+
grow,
|
|
284
|
+
horizontal,
|
|
285
|
+
shift,
|
|
286
|
+
activeColor: color
|
|
287
|
+
},
|
|
288
|
+
children: /* @__PURE__ */ jsx(
|
|
289
|
+
"nav",
|
|
290
|
+
{
|
|
291
|
+
ref,
|
|
292
|
+
role: "navigation",
|
|
293
|
+
"aria-label": "Bottom navigation",
|
|
294
|
+
className: cn(
|
|
295
|
+
"bottom-nav",
|
|
296
|
+
grow && "bottom-nav--grow",
|
|
297
|
+
horizontal && "bottom-nav--horizontal",
|
|
298
|
+
shift && "bottom-nav--shift",
|
|
299
|
+
!active && "bottom-nav--hidden",
|
|
300
|
+
elevated && "bottom-nav--elevated",
|
|
301
|
+
className
|
|
302
|
+
),
|
|
303
|
+
...props,
|
|
304
|
+
children
|
|
305
|
+
}
|
|
306
|
+
)
|
|
307
|
+
}
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
);
|
|
311
|
+
BottomNavigation.displayName = "BottomNavigation";
|
|
312
|
+
const BottomNavigationItem = React.forwardRef(({ className, children, value: valueProp, _index, style, ...props }, ref) => {
|
|
313
|
+
const { value, onChange, grow, horizontal, shift, activeColor } = React.useContext(BottomNavContext);
|
|
314
|
+
const itemValue = valueProp ?? _index ?? 0;
|
|
315
|
+
const isActive = value === itemValue;
|
|
316
|
+
const activeStyle = isActive && activeColor ? { "--bottom-nav-active-color": activeColor } : {};
|
|
317
|
+
return /* @__PURE__ */ jsx(
|
|
318
|
+
"button",
|
|
319
|
+
{
|
|
320
|
+
ref,
|
|
321
|
+
type: "button",
|
|
322
|
+
role: "tab",
|
|
323
|
+
"aria-selected": isActive,
|
|
324
|
+
"aria-current": isActive ? "page" : void 0,
|
|
325
|
+
onClick: () => onChange(itemValue),
|
|
326
|
+
style: { ...activeStyle, ...style },
|
|
327
|
+
className: cn(
|
|
328
|
+
"bottom-nav-item",
|
|
329
|
+
isActive && "bottom-nav-item--active",
|
|
330
|
+
grow && "bottom-nav-item--grow",
|
|
331
|
+
horizontal && "bottom-nav-item--horizontal",
|
|
332
|
+
shift && "bottom-nav-item--shift",
|
|
333
|
+
className
|
|
334
|
+
),
|
|
335
|
+
...props,
|
|
336
|
+
children
|
|
337
|
+
}
|
|
338
|
+
);
|
|
339
|
+
});
|
|
340
|
+
BottomNavigationItem.displayName = "BottomNavigationItem";
|
|
341
|
+
const BottomNavigationGroup = React.forwardRef(({ children, className, ...props }, ref) => {
|
|
342
|
+
const indexedChildren = React.Children.map(children, (child, index) => {
|
|
343
|
+
if (!React.isValidElement(child)) return child;
|
|
344
|
+
const el = child;
|
|
345
|
+
if (el.type.displayName === "BottomNavigationItem") {
|
|
346
|
+
return React.cloneElement(el, { _index: index });
|
|
347
|
+
}
|
|
348
|
+
return child;
|
|
349
|
+
});
|
|
350
|
+
return /* @__PURE__ */ jsx(
|
|
351
|
+
"div",
|
|
352
|
+
{
|
|
353
|
+
ref,
|
|
354
|
+
role: "tablist",
|
|
355
|
+
className: cn("bottom-nav-group", className),
|
|
356
|
+
...props,
|
|
357
|
+
children: indexedChildren
|
|
358
|
+
}
|
|
359
|
+
);
|
|
360
|
+
});
|
|
361
|
+
BottomNavigationGroup.displayName = "BottomNavigationGroup";
|
|
362
|
+
const Footer = React.forwardRef(
|
|
363
|
+
({
|
|
364
|
+
className,
|
|
365
|
+
children,
|
|
366
|
+
bordered = false,
|
|
367
|
+
rounded = false,
|
|
368
|
+
elevated = false,
|
|
369
|
+
color,
|
|
370
|
+
style,
|
|
371
|
+
...props
|
|
372
|
+
}, ref) => /* @__PURE__ */ jsx(
|
|
373
|
+
"footer",
|
|
374
|
+
{
|
|
375
|
+
ref,
|
|
376
|
+
style: { backgroundColor: color, ...style },
|
|
377
|
+
className: cn(
|
|
378
|
+
"footer",
|
|
379
|
+
bordered && "footer--bordered",
|
|
380
|
+
rounded && "footer--rounded",
|
|
381
|
+
elevated && "footer--elevated",
|
|
382
|
+
className
|
|
383
|
+
),
|
|
384
|
+
...props,
|
|
385
|
+
children
|
|
386
|
+
}
|
|
387
|
+
)
|
|
388
|
+
);
|
|
389
|
+
Footer.displayName = "Footer";
|
|
390
|
+
const FooterRow = React.forwardRef(
|
|
391
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("footer-row", className), ...props })
|
|
392
|
+
);
|
|
393
|
+
FooterRow.displayName = "FooterRow";
|
|
394
|
+
const FooterLinks = React.forwardRef(
|
|
395
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("footer-links", className), ...props })
|
|
396
|
+
);
|
|
397
|
+
FooterLinks.displayName = "FooterLinks";
|
|
398
|
+
const FooterLink = React.forwardRef(
|
|
399
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("a", { ref, className: cn("footer-link", className), ...props })
|
|
400
|
+
);
|
|
401
|
+
FooterLink.displayName = "FooterLink";
|
|
402
|
+
const FooterIconButton = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
403
|
+
"button",
|
|
404
|
+
{
|
|
405
|
+
ref,
|
|
406
|
+
type: "button",
|
|
407
|
+
className: cn("footer-icon-btn", className),
|
|
408
|
+
...props,
|
|
409
|
+
children
|
|
410
|
+
}
|
|
411
|
+
));
|
|
412
|
+
FooterIconButton.displayName = "FooterIconButton";
|
|
413
|
+
const FooterDivider = React.forwardRef(
|
|
414
|
+
({ className, width, style, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
415
|
+
"hr",
|
|
416
|
+
{
|
|
417
|
+
ref,
|
|
418
|
+
style: { width, ...style },
|
|
419
|
+
className: cn("footer-divider", className),
|
|
420
|
+
...props
|
|
421
|
+
}
|
|
422
|
+
)
|
|
423
|
+
);
|
|
424
|
+
FooterDivider.displayName = "FooterDivider";
|
|
425
|
+
const FooterCopyright = React.forwardRef(
|
|
426
|
+
({
|
|
427
|
+
className,
|
|
428
|
+
company = "International WELL Building Institute",
|
|
429
|
+
year,
|
|
430
|
+
...props
|
|
431
|
+
}, ref) => /* @__PURE__ */ jsxs("div", { ref, className: cn("footer-copyright", className), ...props, children: [
|
|
432
|
+
year ?? (/* @__PURE__ */ new Date()).getFullYear(),
|
|
433
|
+
" —",
|
|
434
|
+
" ",
|
|
435
|
+
/* @__PURE__ */ jsxs("strong", { children: [
|
|
436
|
+
"© ",
|
|
437
|
+
company
|
|
438
|
+
] })
|
|
439
|
+
] })
|
|
440
|
+
);
|
|
441
|
+
FooterCopyright.displayName = "FooterCopyright";
|
|
442
|
+
const FooterBand = React.forwardRef(
|
|
443
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("footer-band", className), ...props })
|
|
444
|
+
);
|
|
445
|
+
FooterBand.displayName = "FooterBand";
|
|
446
|
+
const HeroSection = ({ backgroundSlot, contentSlot }) => {
|
|
447
|
+
return /* @__PURE__ */ jsxs("section", { className: "relative flex flex-col sm:pt-[169px] pt-24 items-center min-h-[454px] bg-cyan-900 overflow-hidden", children: [
|
|
448
|
+
backgroundSlot,
|
|
449
|
+
/* @__PURE__ */ jsxs("header", { className: "relative z-10 flex flex-col items-center text-center overflow-visible", children: [
|
|
450
|
+
/* @__PURE__ */ jsx(
|
|
451
|
+
motion.h2,
|
|
452
|
+
{
|
|
453
|
+
className: "heading-small mb-6",
|
|
454
|
+
initial: { opacity: 0, y: 20 },
|
|
455
|
+
animate: { opacity: 1, y: 0 },
|
|
456
|
+
transition: { duration: 0.6, delay: 0.3 },
|
|
457
|
+
children: /* @__PURE__ */ jsx(
|
|
458
|
+
"span",
|
|
459
|
+
{
|
|
460
|
+
style: {
|
|
461
|
+
background: "linear-gradient(90deg, #084654 0.08%, #2D718A 50.08%, #084654 100.08%)",
|
|
462
|
+
backgroundClip: "text",
|
|
463
|
+
WebkitBackgroundClip: "text",
|
|
464
|
+
WebkitTextFillColor: "transparent"
|
|
465
|
+
},
|
|
466
|
+
children: "One unified, harmonized standard"
|
|
467
|
+
}
|
|
468
|
+
)
|
|
469
|
+
}
|
|
470
|
+
),
|
|
471
|
+
/* @__PURE__ */ jsx(
|
|
472
|
+
motion.h1,
|
|
473
|
+
{
|
|
474
|
+
className: "text-white heading-large mb-[70px]",
|
|
475
|
+
initial: { opacity: 0, y: 20 },
|
|
476
|
+
animate: { opacity: 1, y: 0 },
|
|
477
|
+
transition: { duration: 0.6, delay: 0.4 },
|
|
478
|
+
children: "One WELL"
|
|
479
|
+
}
|
|
480
|
+
),
|
|
481
|
+
contentSlot
|
|
482
|
+
] })
|
|
483
|
+
] });
|
|
484
|
+
};
|
|
485
|
+
const SystemBar = React.forwardRef(
|
|
486
|
+
({
|
|
487
|
+
className,
|
|
488
|
+
children,
|
|
489
|
+
color,
|
|
490
|
+
window: isWindow = false,
|
|
491
|
+
height,
|
|
492
|
+
style,
|
|
493
|
+
...props
|
|
494
|
+
}, ref) => {
|
|
495
|
+
const barHeight = height ?? (isWindow ? 32 : 24);
|
|
496
|
+
return /* @__PURE__ */ jsx(
|
|
497
|
+
"header",
|
|
498
|
+
{
|
|
499
|
+
ref,
|
|
500
|
+
role: "banner",
|
|
501
|
+
style: {
|
|
502
|
+
height: barHeight,
|
|
503
|
+
backgroundColor: color,
|
|
504
|
+
...style
|
|
505
|
+
},
|
|
506
|
+
className: cn(
|
|
507
|
+
"system-bar",
|
|
508
|
+
isWindow && "system-bar--window",
|
|
509
|
+
color && "system-bar--colored",
|
|
510
|
+
className
|
|
511
|
+
),
|
|
512
|
+
...props,
|
|
513
|
+
children
|
|
514
|
+
}
|
|
515
|
+
);
|
|
516
|
+
}
|
|
517
|
+
);
|
|
518
|
+
SystemBar.displayName = "SystemBar";
|
|
519
|
+
const SystemBarSpacer = React.forwardRef(
|
|
520
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
521
|
+
"span",
|
|
522
|
+
{
|
|
523
|
+
ref,
|
|
524
|
+
className: cn("system-bar-spacer", className),
|
|
525
|
+
...props
|
|
526
|
+
}
|
|
527
|
+
)
|
|
528
|
+
);
|
|
529
|
+
SystemBarSpacer.displayName = "SystemBarSpacer";
|
|
530
|
+
const SystemBarIcon = React.forwardRef(
|
|
531
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
532
|
+
"span",
|
|
533
|
+
{
|
|
534
|
+
ref,
|
|
535
|
+
className: cn("system-bar-icon", className),
|
|
536
|
+
...props
|
|
537
|
+
}
|
|
538
|
+
)
|
|
539
|
+
);
|
|
540
|
+
SystemBarIcon.displayName = "SystemBarIcon";
|
|
541
|
+
const SystemBarAction = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
542
|
+
"button",
|
|
543
|
+
{
|
|
544
|
+
ref,
|
|
545
|
+
type: "button",
|
|
546
|
+
className: cn("system-bar-action", className),
|
|
547
|
+
...props,
|
|
548
|
+
children
|
|
549
|
+
}
|
|
550
|
+
));
|
|
551
|
+
SystemBarAction.displayName = "SystemBarAction";
|
|
552
|
+
const TimelineContext = React.createContext({
|
|
553
|
+
direction: "vertical",
|
|
554
|
+
side: "alternate",
|
|
555
|
+
align: "center",
|
|
556
|
+
density: "default"
|
|
557
|
+
});
|
|
558
|
+
const Timeline = React.forwardRef(
|
|
559
|
+
({
|
|
560
|
+
className,
|
|
561
|
+
children,
|
|
562
|
+
direction = "vertical",
|
|
563
|
+
side = "alternate",
|
|
564
|
+
align = "center",
|
|
565
|
+
density = "default",
|
|
566
|
+
...props
|
|
567
|
+
}, ref) => /* @__PURE__ */ jsx(TimelineContext.Provider, { value: { direction, side, align, density }, children: /* @__PURE__ */ jsx(
|
|
568
|
+
"div",
|
|
569
|
+
{
|
|
570
|
+
ref,
|
|
571
|
+
className: cn(
|
|
572
|
+
"timeline",
|
|
573
|
+
direction === "horizontal" && "timeline--horizontal",
|
|
574
|
+
`timeline--side-${side}`,
|
|
575
|
+
`timeline--align-${align}`,
|
|
576
|
+
density === "compact" && "timeline--compact",
|
|
577
|
+
className
|
|
578
|
+
),
|
|
579
|
+
...props,
|
|
580
|
+
children
|
|
581
|
+
}
|
|
582
|
+
) })
|
|
583
|
+
);
|
|
584
|
+
Timeline.displayName = "Timeline";
|
|
585
|
+
const TimelineItem = React.forwardRef(
|
|
586
|
+
({
|
|
587
|
+
className,
|
|
588
|
+
children,
|
|
589
|
+
dotColor,
|
|
590
|
+
size = "small",
|
|
591
|
+
fillDot = false,
|
|
592
|
+
hideDot = false,
|
|
593
|
+
icon,
|
|
594
|
+
opposite,
|
|
595
|
+
...props
|
|
596
|
+
}, ref) => {
|
|
597
|
+
const { align } = React.useContext(TimelineContext);
|
|
598
|
+
return /* @__PURE__ */ jsxs(
|
|
599
|
+
"div",
|
|
600
|
+
{
|
|
601
|
+
ref,
|
|
602
|
+
className: cn(
|
|
603
|
+
"timeline-item",
|
|
604
|
+
`timeline-item--size-${size}`,
|
|
605
|
+
fillDot && "timeline-item--fill-dot",
|
|
606
|
+
hideDot && "timeline-item--hide-dot",
|
|
607
|
+
align === "start" && "timeline-item--align-start",
|
|
608
|
+
className
|
|
609
|
+
),
|
|
610
|
+
...props,
|
|
611
|
+
children: [
|
|
612
|
+
/* @__PURE__ */ jsx("div", { className: "timeline-item-opposite", children: opposite }),
|
|
613
|
+
/* @__PURE__ */ jsxs("div", { className: "timeline-item-stem", children: [
|
|
614
|
+
/* @__PURE__ */ jsx("div", { className: "timeline-item-stem-line timeline-item-stem-line--before" }),
|
|
615
|
+
!hideDot && /* @__PURE__ */ jsx(
|
|
616
|
+
"div",
|
|
617
|
+
{
|
|
618
|
+
className: "timeline-item-dot",
|
|
619
|
+
style: dotColor ? { backgroundColor: dotColor, borderColor: dotColor } : void 0,
|
|
620
|
+
children: icon && /* @__PURE__ */ jsx("span", { className: "timeline-item-dot-icon", children: icon })
|
|
621
|
+
}
|
|
622
|
+
),
|
|
623
|
+
/* @__PURE__ */ jsx("div", { className: "timeline-item-stem-line timeline-item-stem-line--after" })
|
|
624
|
+
] }),
|
|
625
|
+
/* @__PURE__ */ jsx("div", { className: "timeline-item-body", children })
|
|
626
|
+
]
|
|
627
|
+
}
|
|
628
|
+
);
|
|
629
|
+
}
|
|
630
|
+
);
|
|
631
|
+
TimelineItem.displayName = "TimelineItem";
|
|
632
|
+
const EmptyState = React.forwardRef(
|
|
633
|
+
({
|
|
634
|
+
className,
|
|
635
|
+
children,
|
|
636
|
+
headline,
|
|
637
|
+
title,
|
|
638
|
+
subtitle,
|
|
639
|
+
text,
|
|
640
|
+
image,
|
|
641
|
+
imageAlt = "",
|
|
642
|
+
icon,
|
|
643
|
+
actionText,
|
|
644
|
+
onClickAction,
|
|
645
|
+
mediaSlot,
|
|
646
|
+
headlineSlot,
|
|
647
|
+
titleSlot,
|
|
648
|
+
subtitleSlot,
|
|
649
|
+
textSlot,
|
|
650
|
+
actionsSlot,
|
|
651
|
+
...props
|
|
652
|
+
}, ref) => {
|
|
653
|
+
const hasMedia = mediaSlot || image || icon;
|
|
654
|
+
const hasHeadline = headlineSlot || headline;
|
|
655
|
+
const hasTitle = titleSlot || title;
|
|
656
|
+
const hasSubtitle = subtitleSlot || subtitle;
|
|
657
|
+
const hasText = textSlot || text;
|
|
658
|
+
const hasActions = actionsSlot || actionText;
|
|
659
|
+
return /* @__PURE__ */ jsxs(
|
|
660
|
+
"div",
|
|
661
|
+
{
|
|
662
|
+
ref,
|
|
663
|
+
className: cn("empty-state", className),
|
|
664
|
+
...props,
|
|
665
|
+
children: [
|
|
666
|
+
hasMedia && /* @__PURE__ */ jsx("div", { className: "empty-state-media", children: mediaSlot ?? (image ? /* @__PURE__ */ jsx(
|
|
667
|
+
"img",
|
|
668
|
+
{
|
|
669
|
+
src: image,
|
|
670
|
+
alt: imageAlt,
|
|
671
|
+
className: "empty-state-image"
|
|
672
|
+
}
|
|
673
|
+
) : /* @__PURE__ */ jsx("span", { className: "empty-state-icon", children: icon })) }),
|
|
674
|
+
hasHeadline && /* @__PURE__ */ jsx("div", { className: "empty-state-headline", children: headlineSlot ?? headline }),
|
|
675
|
+
hasTitle && /* @__PURE__ */ jsx("div", { className: "empty-state-title", children: titleSlot ?? title }),
|
|
676
|
+
hasSubtitle && /* @__PURE__ */ jsx("div", { className: "empty-state-subtitle", children: subtitleSlot ?? subtitle }),
|
|
677
|
+
hasText && /* @__PURE__ */ jsx("div", { className: "empty-state-text", children: textSlot ?? text }),
|
|
678
|
+
children && /* @__PURE__ */ jsx("div", { className: "empty-state-default", children }),
|
|
679
|
+
hasActions && /* @__PURE__ */ jsx("div", { className: "empty-state-actions", children: actionsSlot ?? /* @__PURE__ */ jsx(EmptyStateAction, { onClick: onClickAction, children: actionText }) })
|
|
680
|
+
]
|
|
681
|
+
}
|
|
682
|
+
);
|
|
683
|
+
}
|
|
684
|
+
);
|
|
685
|
+
EmptyState.displayName = "EmptyState";
|
|
686
|
+
const EmptyStateAction = React.forwardRef(({ className, variant = "default", ...props }, ref) => /* @__PURE__ */ jsx(
|
|
687
|
+
"button",
|
|
688
|
+
{
|
|
689
|
+
ref,
|
|
690
|
+
type: "button",
|
|
691
|
+
className: cn(
|
|
692
|
+
"empty-state-action-btn",
|
|
693
|
+
variant === "primary" && "empty-state-action-btn--primary",
|
|
694
|
+
variant === "outline" && "empty-state-action-btn--outline",
|
|
695
|
+
className
|
|
696
|
+
),
|
|
697
|
+
...props
|
|
698
|
+
}
|
|
699
|
+
));
|
|
700
|
+
EmptyStateAction.displayName = "EmptyStateAction";
|
|
50
701
|
const buttonVariants = cva(
|
|
51
702
|
"button",
|
|
52
703
|
{
|
|
@@ -536,14 +1187,30 @@ const ListItem = React.forwardRef(
|
|
|
536
1187
|
}
|
|
537
1188
|
);
|
|
538
1189
|
ListItem.displayName = "ListItem";
|
|
539
|
-
const
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
1190
|
+
const cardVariants = cva("card", {
|
|
1191
|
+
variants: {
|
|
1192
|
+
variant: {
|
|
1193
|
+
default: "card--default",
|
|
1194
|
+
outlined: "card--outlined",
|
|
1195
|
+
elevated: "card--elevated",
|
|
1196
|
+
filled: "card--filled",
|
|
1197
|
+
interactive: "card--interactive"
|
|
1198
|
+
}
|
|
1199
|
+
},
|
|
1200
|
+
defaultVariants: {
|
|
1201
|
+
variant: "default"
|
|
545
1202
|
}
|
|
546
|
-
)
|
|
1203
|
+
});
|
|
1204
|
+
const Card = React.forwardRef(
|
|
1205
|
+
({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1206
|
+
"div",
|
|
1207
|
+
{
|
|
1208
|
+
ref,
|
|
1209
|
+
className: cn(cardVariants({ variant }), className),
|
|
1210
|
+
...props
|
|
1211
|
+
}
|
|
1212
|
+
)
|
|
1213
|
+
);
|
|
547
1214
|
Card.displayName = "Card";
|
|
548
1215
|
const CardHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("card-header", className), ...props }));
|
|
549
1216
|
CardHeader.displayName = "CardHeader";
|
|
@@ -583,21 +1250,51 @@ const CardFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
583
1250
|
}
|
|
584
1251
|
));
|
|
585
1252
|
CardFooter.displayName = "CardFooter";
|
|
586
|
-
const
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
1253
|
+
const CardMedia = React.forwardRef(({ className, src, alt = "", height = 200, children, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("card-media", className), style: { height }, ...props, children: src ? /* @__PURE__ */ jsx("img", { src, alt, className: "card-media__img" }) : children }));
|
|
1254
|
+
CardMedia.displayName = "CardMedia";
|
|
1255
|
+
const CardBadge = React.forwardRef(
|
|
1256
|
+
({ className, color = "default", ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1257
|
+
"span",
|
|
1258
|
+
{
|
|
1259
|
+
ref,
|
|
1260
|
+
className: cn("card-badge", `card-badge--${color}`, className),
|
|
1261
|
+
...props
|
|
1262
|
+
}
|
|
1263
|
+
)
|
|
1264
|
+
);
|
|
1265
|
+
CardBadge.displayName = "CardBadge";
|
|
1266
|
+
const CardActions = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("card-actions", className), ...props }));
|
|
1267
|
+
CardActions.displayName = "CardActions";
|
|
1268
|
+
const CardMetric = React.forwardRef(
|
|
1269
|
+
({ className, value, label, trend, trendValue, ...props }, ref) => /* @__PURE__ */ jsxs("div", { ref, className: cn("card-metric", className), ...props, children: [
|
|
1270
|
+
/* @__PURE__ */ jsx("span", { className: "card-metric__value", children: value }),
|
|
1271
|
+
/* @__PURE__ */ jsx("span", { className: "card-metric__label", children: label }),
|
|
1272
|
+
trend && trendValue && /* @__PURE__ */ jsxs("span", { className: cn("card-metric__trend", `card-metric__trend--${trend}`), children: [
|
|
1273
|
+
trend === "up" ? "↑" : trend === "down" ? "↓" : "→",
|
|
1274
|
+
" ",
|
|
1275
|
+
trendValue
|
|
1276
|
+
] })
|
|
1277
|
+
] })
|
|
1278
|
+
);
|
|
1279
|
+
CardMetric.displayName = "CardMetric";
|
|
1280
|
+
const CardWithIcon = React.forwardRef(
|
|
1281
|
+
({ icon: Icon, title, description, onClick }, ref) => /* @__PURE__ */ jsxs(
|
|
1282
|
+
Card,
|
|
1283
|
+
{
|
|
1284
|
+
ref,
|
|
1285
|
+
variant: "interactive",
|
|
1286
|
+
className: "card-with-icon",
|
|
1287
|
+
onClick,
|
|
1288
|
+
children: [
|
|
1289
|
+
/* @__PURE__ */ jsxs("div", { className: "card-with-icon__header", children: [
|
|
1290
|
+
Icon && /* @__PURE__ */ jsx(Icon, { className: "card-with-icon__icon" }),
|
|
1291
|
+
/* @__PURE__ */ jsx(Text, { as: "h3", variant: "overline-large", children: title })
|
|
1292
|
+
] }),
|
|
1293
|
+
/* @__PURE__ */ jsx(Text, { as: "p", variant: "body-base", children: description })
|
|
1294
|
+
]
|
|
1295
|
+
}
|
|
1296
|
+
)
|
|
1297
|
+
);
|
|
601
1298
|
CardWithIcon.displayName = "CardWithIcon";
|
|
602
1299
|
const Separator = React.forwardRef(
|
|
603
1300
|
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
@@ -2142,6 +2839,68 @@ const AlertDescription = React.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
2142
2839
|
}
|
|
2143
2840
|
));
|
|
2144
2841
|
AlertDescription.displayName = "AlertDescription";
|
|
2842
|
+
const bannerVariants = cva("banner", {
|
|
2843
|
+
variants: {
|
|
2844
|
+
variant: {
|
|
2845
|
+
default: "banner--default",
|
|
2846
|
+
info: "banner--info",
|
|
2847
|
+
success: "banner--success",
|
|
2848
|
+
warning: "banner--warning",
|
|
2849
|
+
destructive: "banner--destructive"
|
|
2850
|
+
}
|
|
2851
|
+
},
|
|
2852
|
+
defaultVariants: {
|
|
2853
|
+
variant: "default"
|
|
2854
|
+
}
|
|
2855
|
+
});
|
|
2856
|
+
const Banner = React.forwardRef(
|
|
2857
|
+
({ className, variant, sticky = false, onClose, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
2858
|
+
"div",
|
|
2859
|
+
{
|
|
2860
|
+
ref,
|
|
2861
|
+
role: "banner",
|
|
2862
|
+
className: cn(bannerVariants({ variant }), sticky && "banner--sticky", className),
|
|
2863
|
+
...props,
|
|
2864
|
+
children: [
|
|
2865
|
+
/* @__PURE__ */ jsx("div", { className: "banner-content", children }),
|
|
2866
|
+
onClose && /* @__PURE__ */ jsx(
|
|
2867
|
+
"button",
|
|
2868
|
+
{
|
|
2869
|
+
type: "button",
|
|
2870
|
+
className: "banner-close",
|
|
2871
|
+
"aria-label": "Dismiss banner",
|
|
2872
|
+
onClick: onClose,
|
|
2873
|
+
children: /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
2874
|
+
/* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
2875
|
+
/* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
2876
|
+
] })
|
|
2877
|
+
}
|
|
2878
|
+
)
|
|
2879
|
+
]
|
|
2880
|
+
}
|
|
2881
|
+
)
|
|
2882
|
+
);
|
|
2883
|
+
Banner.displayName = "Banner";
|
|
2884
|
+
const BannerIcon = React.forwardRef(
|
|
2885
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("span", { ref, className: cn("banner-icon", className), "aria-hidden": "true", ...props })
|
|
2886
|
+
);
|
|
2887
|
+
BannerIcon.displayName = "BannerIcon";
|
|
2888
|
+
const BannerTitle = React.forwardRef(
|
|
2889
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("p", { ref, className: cn("banner-title", className), ...props })
|
|
2890
|
+
);
|
|
2891
|
+
BannerTitle.displayName = "BannerTitle";
|
|
2892
|
+
const BannerDescription = React.forwardRef(
|
|
2893
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("p", { ref, className: cn("banner-description", className), ...props })
|
|
2894
|
+
);
|
|
2895
|
+
BannerDescription.displayName = "BannerDescription";
|
|
2896
|
+
const BannerText = React.forwardRef(
|
|
2897
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("banner-text", className), ...props })
|
|
2898
|
+
);
|
|
2899
|
+
BannerText.displayName = "BannerText";
|
|
2900
|
+
const BannerAction = React.forwardRef(
|
|
2901
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("button", { ref, type: "button", className: cn("banner-action", className), ...props })
|
|
2902
|
+
);
|
|
2903
|
+
BannerAction.displayName = "BannerAction";
|
|
2145
2904
|
const AlertDialog = AlertDialogPrimitive.Root;
|
|
2146
2905
|
const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
|
|
2147
2906
|
const AlertDialogPortal = AlertDialogPrimitive.Portal;
|
|
@@ -2800,6 +3559,204 @@ function HeightContainer({
|
|
|
2800
3559
|
}, [stateKey]);
|
|
2801
3560
|
return /* @__PURE__ */ jsx("div", { ref: containerRef, className: cn("overflow-clip", className), children: /* @__PURE__ */ jsx("div", { ref: innerRef, children }) });
|
|
2802
3561
|
}
|
|
3562
|
+
const spacing = (n) => `${n * 0.25}rem`;
|
|
3563
|
+
const Stack = React.forwardRef(
|
|
3564
|
+
({ as: Component = "div", direction = "vertical", gap = 4, align, justify, wrap = false, className, style, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3565
|
+
Component,
|
|
3566
|
+
{
|
|
3567
|
+
ref,
|
|
3568
|
+
className: cn(
|
|
3569
|
+
"stack",
|
|
3570
|
+
direction === "horizontal" && "stack--horizontal",
|
|
3571
|
+
align && `stack--align-${align}`,
|
|
3572
|
+
justify && `stack--justify-${justify}`,
|
|
3573
|
+
wrap && "stack--wrap",
|
|
3574
|
+
className
|
|
3575
|
+
),
|
|
3576
|
+
style: { gap: spacing(gap), ...style },
|
|
3577
|
+
...props
|
|
3578
|
+
}
|
|
3579
|
+
)
|
|
3580
|
+
);
|
|
3581
|
+
Stack.displayName = "Stack";
|
|
3582
|
+
const Grid = React.forwardRef(
|
|
3583
|
+
({ as: Component = "div", cols = 1, colsSm, colsMd, colsLg, gap = 4, rowGap, colGap, className, style, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3584
|
+
Component,
|
|
3585
|
+
{
|
|
3586
|
+
ref,
|
|
3587
|
+
className: cn(
|
|
3588
|
+
"grid-layout",
|
|
3589
|
+
`grid-layout--cols-${cols}`,
|
|
3590
|
+
colsSm && `grid-layout--sm-cols-${colsSm}`,
|
|
3591
|
+
colsMd && `grid-layout--md-cols-${colsMd}`,
|
|
3592
|
+
colsLg && `grid-layout--lg-cols-${colsLg}`,
|
|
3593
|
+
className
|
|
3594
|
+
),
|
|
3595
|
+
style: {
|
|
3596
|
+
gap: rowGap === void 0 && colGap === void 0 ? spacing(gap) : void 0,
|
|
3597
|
+
rowGap: rowGap !== void 0 ? spacing(rowGap) : void 0,
|
|
3598
|
+
columnGap: colGap !== void 0 ? spacing(colGap) : void 0,
|
|
3599
|
+
...style
|
|
3600
|
+
},
|
|
3601
|
+
...props
|
|
3602
|
+
}
|
|
3603
|
+
)
|
|
3604
|
+
);
|
|
3605
|
+
Grid.displayName = "Grid";
|
|
3606
|
+
const ColumnsPresetMap = {
|
|
3607
|
+
"sidebar": "280px 1fr",
|
|
3608
|
+
"sidebar-right": "1fr 280px",
|
|
3609
|
+
"wide-sidebar": "360px 1fr",
|
|
3610
|
+
"narrow-sidebar": "200px 1fr",
|
|
3611
|
+
"split": "1fr 1fr",
|
|
3612
|
+
"1-2": "1fr 2fr",
|
|
3613
|
+
"2-1": "2fr 1fr",
|
|
3614
|
+
"1-3": "1fr 3fr",
|
|
3615
|
+
"3-1": "3fr 1fr"
|
|
3616
|
+
};
|
|
3617
|
+
const Columns = React.forwardRef(
|
|
3618
|
+
({ as: Component = "div", preset = "split", template, gap = 6, colGap, rowGap, collapse, className, style, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3619
|
+
Component,
|
|
3620
|
+
{
|
|
3621
|
+
ref,
|
|
3622
|
+
className: cn(
|
|
3623
|
+
"columns-layout",
|
|
3624
|
+
collapse && `columns-layout--collapse-${collapse}`,
|
|
3625
|
+
className
|
|
3626
|
+
),
|
|
3627
|
+
style: {
|
|
3628
|
+
gridTemplateColumns: template ?? ColumnsPresetMap[preset],
|
|
3629
|
+
gap: rowGap === void 0 && colGap === void 0 ? spacing(gap) : void 0,
|
|
3630
|
+
rowGap: rowGap !== void 0 ? spacing(rowGap) : void 0,
|
|
3631
|
+
columnGap: colGap !== void 0 ? spacing(colGap) : void 0,
|
|
3632
|
+
...style
|
|
3633
|
+
},
|
|
3634
|
+
...props
|
|
3635
|
+
}
|
|
3636
|
+
)
|
|
3637
|
+
);
|
|
3638
|
+
Columns.displayName = "Columns";
|
|
3639
|
+
const Container = React.forwardRef(
|
|
3640
|
+
({ as: Component = "div", size = "xl", center = true, padded = true, className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3641
|
+
Component,
|
|
3642
|
+
{
|
|
3643
|
+
ref,
|
|
3644
|
+
className: cn(
|
|
3645
|
+
"container-layout",
|
|
3646
|
+
`container-layout--${size}`,
|
|
3647
|
+
center && "container-layout--center",
|
|
3648
|
+
padded && "container-layout--padded",
|
|
3649
|
+
className
|
|
3650
|
+
),
|
|
3651
|
+
...props
|
|
3652
|
+
}
|
|
3653
|
+
)
|
|
3654
|
+
);
|
|
3655
|
+
Container.displayName = "Container";
|
|
3656
|
+
const Section = React.forwardRef(
|
|
3657
|
+
({ as: Component = "section", padding = "lg", className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3658
|
+
Component,
|
|
3659
|
+
{
|
|
3660
|
+
ref,
|
|
3661
|
+
className: cn("section-layout", padding !== "none" && `section-layout--${padding}`, className),
|
|
3662
|
+
...props
|
|
3663
|
+
}
|
|
3664
|
+
)
|
|
3665
|
+
);
|
|
3666
|
+
Section.displayName = "Section";
|
|
3667
|
+
const AppShell = React.forwardRef(
|
|
3668
|
+
({ sidebarWidth = "17.5rem", headerHeight = "4rem", className, style, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3669
|
+
"div",
|
|
3670
|
+
{
|
|
3671
|
+
ref,
|
|
3672
|
+
className: cn("app-shell", className),
|
|
3673
|
+
style: {
|
|
3674
|
+
"--app-shell-header-height": typeof headerHeight === "number" ? `${headerHeight}px` : headerHeight,
|
|
3675
|
+
"--app-shell-sidebar-width": typeof sidebarWidth === "number" ? `${sidebarWidth}px` : sidebarWidth,
|
|
3676
|
+
...style
|
|
3677
|
+
},
|
|
3678
|
+
...props
|
|
3679
|
+
}
|
|
3680
|
+
)
|
|
3681
|
+
);
|
|
3682
|
+
AppShell.displayName = "AppShell";
|
|
3683
|
+
const AppShellHeader = React.forwardRef(
|
|
3684
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("header", { ref, className: cn("app-shell-header", className), ...props })
|
|
3685
|
+
);
|
|
3686
|
+
AppShellHeader.displayName = "AppShellHeader";
|
|
3687
|
+
const AppShellSidebar = React.forwardRef(
|
|
3688
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn("app-shell-sidebar", className), ...props })
|
|
3689
|
+
);
|
|
3690
|
+
AppShellSidebar.displayName = "AppShellSidebar";
|
|
3691
|
+
const AppShellMain = React.forwardRef(
|
|
3692
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("main", { ref, className: cn("app-shell-main", className), ...props })
|
|
3693
|
+
);
|
|
3694
|
+
AppShellMain.displayName = "AppShellMain";
|
|
3695
|
+
const AppShellFooter = React.forwardRef(
|
|
3696
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("footer", { ref, className: cn("app-shell-footer", className), ...props })
|
|
3697
|
+
);
|
|
3698
|
+
AppShellFooter.displayName = "AppShellFooter";
|
|
3699
|
+
const Show = React.forwardRef(
|
|
3700
|
+
({ above, below, as: Component = "div", className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3701
|
+
Component,
|
|
3702
|
+
{
|
|
3703
|
+
ref,
|
|
3704
|
+
className: cn(
|
|
3705
|
+
above && `show-above-${above}`,
|
|
3706
|
+
below && `show-below-${below}`,
|
|
3707
|
+
className
|
|
3708
|
+
),
|
|
3709
|
+
...props
|
|
3710
|
+
}
|
|
3711
|
+
)
|
|
3712
|
+
);
|
|
3713
|
+
Show.displayName = "Show";
|
|
3714
|
+
const Hide = React.forwardRef(
|
|
3715
|
+
({ above, below, as: Component = "div", className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3716
|
+
Component,
|
|
3717
|
+
{
|
|
3718
|
+
ref,
|
|
3719
|
+
className: cn(
|
|
3720
|
+
above && `hide-above-${above}`,
|
|
3721
|
+
below && `hide-below-${below}`,
|
|
3722
|
+
className
|
|
3723
|
+
),
|
|
3724
|
+
...props
|
|
3725
|
+
}
|
|
3726
|
+
)
|
|
3727
|
+
);
|
|
3728
|
+
Hide.displayName = "Hide";
|
|
3729
|
+
const Positioned = React.forwardRef(
|
|
3730
|
+
({ as: Component = "div", position = "relative", top, right, bottom, left, inset, zIndex, fill = false, className, style, ...props }, ref) => {
|
|
3731
|
+
const resolveValue = (v) => v === void 0 ? void 0 : typeof v === "number" ? spacing(v) : v;
|
|
3732
|
+
return /* @__PURE__ */ jsx(
|
|
3733
|
+
Component,
|
|
3734
|
+
{
|
|
3735
|
+
ref,
|
|
3736
|
+
className: cn(`positioned--${position}`, className),
|
|
3737
|
+
style: {
|
|
3738
|
+
top: resolveValue(top),
|
|
3739
|
+
right: resolveValue(right),
|
|
3740
|
+
bottom: resolveValue(bottom),
|
|
3741
|
+
left: resolveValue(left),
|
|
3742
|
+
inset: fill ? 0 : resolveValue(inset),
|
|
3743
|
+
zIndex,
|
|
3744
|
+
...style
|
|
3745
|
+
},
|
|
3746
|
+
...props
|
|
3747
|
+
}
|
|
3748
|
+
);
|
|
3749
|
+
}
|
|
3750
|
+
);
|
|
3751
|
+
Positioned.displayName = "Positioned";
|
|
3752
|
+
const Spacer = ({ size = 4, axis = "vertical" }) => /* @__PURE__ */ jsx(
|
|
3753
|
+
"div",
|
|
3754
|
+
{
|
|
3755
|
+
"aria-hidden": "true",
|
|
3756
|
+
style: axis === "vertical" ? { height: spacing(size), minHeight: spacing(size) } : { width: spacing(size), minWidth: spacing(size) }
|
|
3757
|
+
}
|
|
3758
|
+
);
|
|
3759
|
+
Spacer.displayName = "Spacer";
|
|
2803
3760
|
const TabsContext = createContext(null);
|
|
2804
3761
|
function useTabsContext() {
|
|
2805
3762
|
const ctx = useContext(TabsContext);
|
|
@@ -4914,6 +5871,398 @@ const NavigationAccount = React.forwardRef(({ className, asChild, children, ...p
|
|
|
4914
5871
|
);
|
|
4915
5872
|
});
|
|
4916
5873
|
NavigationAccount.displayName = "NavigationAccount";
|
|
5874
|
+
function formatBytes(bytes) {
|
|
5875
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
5876
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
5877
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
5878
|
+
}
|
|
5879
|
+
function getFileIcon(type) {
|
|
5880
|
+
if (type.startsWith("image/")) return "🖼";
|
|
5881
|
+
if (type === "application/pdf") return "📄";
|
|
5882
|
+
if (type.includes("spreadsheet") || type.includes("excel") || type.includes("csv")) return "📊";
|
|
5883
|
+
if (type.includes("word") || type.includes("document")) return "📝";
|
|
5884
|
+
if (type.includes("zip") || type.includes("compressed")) return "🗜";
|
|
5885
|
+
return "📎";
|
|
5886
|
+
}
|
|
5887
|
+
const FileUpload = React.forwardRef(
|
|
5888
|
+
({
|
|
5889
|
+
accept,
|
|
5890
|
+
multiple = false,
|
|
5891
|
+
maxSize,
|
|
5892
|
+
maxFiles,
|
|
5893
|
+
disabled = false,
|
|
5894
|
+
variant = "default",
|
|
5895
|
+
onFilesChange,
|
|
5896
|
+
className
|
|
5897
|
+
}, ref) => {
|
|
5898
|
+
const [files, setFiles] = React.useState([]);
|
|
5899
|
+
const [isDragging, setIsDragging] = React.useState(false);
|
|
5900
|
+
const inputRef = React.useRef(null);
|
|
5901
|
+
const validateFile = (file) => {
|
|
5902
|
+
if (maxSize && file.size > maxSize) {
|
|
5903
|
+
return `File exceeds ${formatBytes(maxSize)} limit`;
|
|
5904
|
+
}
|
|
5905
|
+
return void 0;
|
|
5906
|
+
};
|
|
5907
|
+
const addFiles = (incoming) => {
|
|
5908
|
+
const incomingArray = Array.from(incoming);
|
|
5909
|
+
const next = multiple ? [...files] : [];
|
|
5910
|
+
for (const file of incomingArray) {
|
|
5911
|
+
if (maxFiles && next.filter((f) => !f.error).length >= maxFiles) break;
|
|
5912
|
+
const error = validateFile(file);
|
|
5913
|
+
next.push({ file, id: `${file.name}-${Date.now()}-${Math.random()}`, error });
|
|
5914
|
+
}
|
|
5915
|
+
setFiles(next);
|
|
5916
|
+
onFilesChange == null ? void 0 : onFilesChange(next.filter((f) => !f.error).map((f) => f.file));
|
|
5917
|
+
};
|
|
5918
|
+
const removeFile = (id) => {
|
|
5919
|
+
const next = files.filter((f) => f.id !== id);
|
|
5920
|
+
setFiles(next);
|
|
5921
|
+
onFilesChange == null ? void 0 : onFilesChange(next.filter((f) => !f.error).map((f) => f.file));
|
|
5922
|
+
};
|
|
5923
|
+
const onDragOver = (e) => {
|
|
5924
|
+
e.preventDefault();
|
|
5925
|
+
if (!disabled) setIsDragging(true);
|
|
5926
|
+
};
|
|
5927
|
+
const onDragLeave = (e) => {
|
|
5928
|
+
e.preventDefault();
|
|
5929
|
+
setIsDragging(false);
|
|
5930
|
+
};
|
|
5931
|
+
const onDrop = (e) => {
|
|
5932
|
+
e.preventDefault();
|
|
5933
|
+
setIsDragging(false);
|
|
5934
|
+
if (disabled) return;
|
|
5935
|
+
if (e.dataTransfer.files.length > 0) addFiles(e.dataTransfer.files);
|
|
5936
|
+
};
|
|
5937
|
+
const onInputChange = (e) => {
|
|
5938
|
+
if (e.target.files && e.target.files.length > 0) {
|
|
5939
|
+
addFiles(e.target.files);
|
|
5940
|
+
e.target.value = "";
|
|
5941
|
+
}
|
|
5942
|
+
};
|
|
5943
|
+
const openPicker = () => {
|
|
5944
|
+
var _a;
|
|
5945
|
+
if (!disabled) (_a = inputRef.current) == null ? void 0 : _a.click();
|
|
5946
|
+
};
|
|
5947
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("file-upload", className), children: [
|
|
5948
|
+
/* @__PURE__ */ jsxs(
|
|
5949
|
+
"div",
|
|
5950
|
+
{
|
|
5951
|
+
role: "button",
|
|
5952
|
+
tabIndex: disabled ? -1 : 0,
|
|
5953
|
+
"aria-label": "Upload files",
|
|
5954
|
+
onClick: openPicker,
|
|
5955
|
+
onKeyDown: (e) => e.key === "Enter" && openPicker(),
|
|
5956
|
+
onDragOver,
|
|
5957
|
+
onDragLeave,
|
|
5958
|
+
onDrop,
|
|
5959
|
+
className: cn(
|
|
5960
|
+
"file-upload-zone",
|
|
5961
|
+
variant === "compact" && "file-upload-zone--compact",
|
|
5962
|
+
isDragging && "file-upload-zone--dragging",
|
|
5963
|
+
disabled && "file-upload-zone--disabled"
|
|
5964
|
+
),
|
|
5965
|
+
children: [
|
|
5966
|
+
/* @__PURE__ */ jsx(
|
|
5967
|
+
"input",
|
|
5968
|
+
{
|
|
5969
|
+
ref: inputRef,
|
|
5970
|
+
type: "file",
|
|
5971
|
+
accept,
|
|
5972
|
+
multiple,
|
|
5973
|
+
disabled,
|
|
5974
|
+
onChange: onInputChange,
|
|
5975
|
+
className: "file-upload-input",
|
|
5976
|
+
tabIndex: -1
|
|
5977
|
+
}
|
|
5978
|
+
),
|
|
5979
|
+
variant === "compact" ? /* @__PURE__ */ jsxs("div", { className: "file-upload-compact-inner", children: [
|
|
5980
|
+
/* @__PURE__ */ jsx("span", { className: "file-upload-icon", children: "↑" }),
|
|
5981
|
+
/* @__PURE__ */ jsxs("span", { className: "file-upload-zone-text", children: [
|
|
5982
|
+
/* @__PURE__ */ jsx("span", { className: "file-upload-zone-link", children: "Click to upload" }),
|
|
5983
|
+
" ",
|
|
5984
|
+
"or drag and drop"
|
|
5985
|
+
] }),
|
|
5986
|
+
accept && /* @__PURE__ */ jsx("span", { className: "file-upload-hint", children: accept.split(",").join(", ") }),
|
|
5987
|
+
maxSize && /* @__PURE__ */ jsxs("span", { className: "file-upload-hint", children: [
|
|
5988
|
+
"Max ",
|
|
5989
|
+
formatBytes(maxSize)
|
|
5990
|
+
] })
|
|
5991
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "file-upload-default-inner", children: [
|
|
5992
|
+
/* @__PURE__ */ jsx("div", { className: "file-upload-icon-circle", children: /* @__PURE__ */ jsx("span", { className: "file-upload-icon", children: "↑" }) }),
|
|
5993
|
+
/* @__PURE__ */ jsxs("div", { className: "file-upload-zone-body", children: [
|
|
5994
|
+
/* @__PURE__ */ jsxs("span", { className: "file-upload-zone-text", children: [
|
|
5995
|
+
/* @__PURE__ */ jsx("span", { className: "file-upload-zone-link", children: "Click to upload" }),
|
|
5996
|
+
" ",
|
|
5997
|
+
"or drag and drop"
|
|
5998
|
+
] }),
|
|
5999
|
+
(accept || maxSize) && /* @__PURE__ */ jsx("span", { className: "file-upload-hint", children: [
|
|
6000
|
+
accept && accept.split(",").join(", "),
|
|
6001
|
+
maxSize && `Max ${formatBytes(maxSize)}`
|
|
6002
|
+
].filter(Boolean).join(" · ") })
|
|
6003
|
+
] })
|
|
6004
|
+
] })
|
|
6005
|
+
]
|
|
6006
|
+
}
|
|
6007
|
+
),
|
|
6008
|
+
files.length > 0 && /* @__PURE__ */ jsx("ul", { className: "file-upload-list", children: files.map(({ file, id, error }) => /* @__PURE__ */ jsxs(
|
|
6009
|
+
"li",
|
|
6010
|
+
{
|
|
6011
|
+
className: cn("file-upload-item", error && "file-upload-item--error"),
|
|
6012
|
+
children: [
|
|
6013
|
+
/* @__PURE__ */ jsx("span", { className: "file-upload-item-icon", children: getFileIcon(file.type) }),
|
|
6014
|
+
/* @__PURE__ */ jsxs("div", { className: "file-upload-item-info", children: [
|
|
6015
|
+
/* @__PURE__ */ jsx("span", { className: "file-upload-item-name", children: file.name }),
|
|
6016
|
+
error ? /* @__PURE__ */ jsx("span", { className: "file-upload-item-error", children: error }) : /* @__PURE__ */ jsx("span", { className: "file-upload-item-size", children: formatBytes(file.size) })
|
|
6017
|
+
] }),
|
|
6018
|
+
/* @__PURE__ */ jsx(
|
|
6019
|
+
"button",
|
|
6020
|
+
{
|
|
6021
|
+
type: "button",
|
|
6022
|
+
"aria-label": `Remove ${file.name}`,
|
|
6023
|
+
onClick: (e) => {
|
|
6024
|
+
e.stopPropagation();
|
|
6025
|
+
removeFile(id);
|
|
6026
|
+
},
|
|
6027
|
+
className: "file-upload-item-remove",
|
|
6028
|
+
children: "✕"
|
|
6029
|
+
}
|
|
6030
|
+
)
|
|
6031
|
+
]
|
|
6032
|
+
},
|
|
6033
|
+
id
|
|
6034
|
+
)) })
|
|
6035
|
+
] });
|
|
6036
|
+
}
|
|
6037
|
+
);
|
|
6038
|
+
FileUpload.displayName = "FileUpload";
|
|
6039
|
+
function getStatus(index, currentStep) {
|
|
6040
|
+
if (index < currentStep) return "complete";
|
|
6041
|
+
if (index === currentStep) return "current";
|
|
6042
|
+
return "upcoming";
|
|
6043
|
+
}
|
|
6044
|
+
const CheckIcon = () => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
|
|
6045
|
+
"path",
|
|
6046
|
+
{
|
|
6047
|
+
d: "M2.5 7L5.5 10L11.5 4",
|
|
6048
|
+
stroke: "currentColor",
|
|
6049
|
+
strokeWidth: "2",
|
|
6050
|
+
strokeLinecap: "round",
|
|
6051
|
+
strokeLinejoin: "round"
|
|
6052
|
+
}
|
|
6053
|
+
) });
|
|
6054
|
+
const Stepper = React.forwardRef(
|
|
6055
|
+
({
|
|
6056
|
+
steps,
|
|
6057
|
+
currentStep,
|
|
6058
|
+
orientation = "horizontal",
|
|
6059
|
+
variant = "default",
|
|
6060
|
+
size = "md",
|
|
6061
|
+
onStepClick,
|
|
6062
|
+
className
|
|
6063
|
+
}, ref) => {
|
|
6064
|
+
return /* @__PURE__ */ jsx(
|
|
6065
|
+
"div",
|
|
6066
|
+
{
|
|
6067
|
+
ref,
|
|
6068
|
+
role: "list",
|
|
6069
|
+
"aria-label": "Progress steps",
|
|
6070
|
+
className: cn(
|
|
6071
|
+
"stepper",
|
|
6072
|
+
`stepper--${orientation}`,
|
|
6073
|
+
`stepper--${size}`,
|
|
6074
|
+
className
|
|
6075
|
+
),
|
|
6076
|
+
children: steps.map((step, index) => {
|
|
6077
|
+
const status = getStatus(index, currentStep);
|
|
6078
|
+
const isClickable = !!onStepClick && status === "complete";
|
|
6079
|
+
const isLast = index === steps.length - 1;
|
|
6080
|
+
return /* @__PURE__ */ jsxs(
|
|
6081
|
+
"div",
|
|
6082
|
+
{
|
|
6083
|
+
role: "listitem",
|
|
6084
|
+
"aria-current": status === "current" ? "step" : void 0,
|
|
6085
|
+
className: cn(
|
|
6086
|
+
"stepper-item",
|
|
6087
|
+
`stepper-item--${status}`,
|
|
6088
|
+
orientation === "horizontal" && !isLast && "stepper-item--with-connector"
|
|
6089
|
+
),
|
|
6090
|
+
children: [
|
|
6091
|
+
/* @__PURE__ */ jsxs("div", { className: "stepper-indicator-row", children: [
|
|
6092
|
+
/* @__PURE__ */ jsx(
|
|
6093
|
+
"button",
|
|
6094
|
+
{
|
|
6095
|
+
type: "button",
|
|
6096
|
+
disabled: !isClickable,
|
|
6097
|
+
onClick: () => isClickable && onStepClick(index),
|
|
6098
|
+
className: cn(
|
|
6099
|
+
"stepper-indicator",
|
|
6100
|
+
`stepper-indicator--${status}`,
|
|
6101
|
+
`stepper-indicator--${variant}`,
|
|
6102
|
+
isClickable && "stepper-indicator--clickable"
|
|
6103
|
+
),
|
|
6104
|
+
"aria-label": `Step ${index + 1}: ${step.title} (${status})`,
|
|
6105
|
+
children: status === "complete" ? /* @__PURE__ */ jsx(CheckIcon, {}) : /* @__PURE__ */ jsx("span", { className: "stepper-indicator-number", children: index + 1 })
|
|
6106
|
+
}
|
|
6107
|
+
),
|
|
6108
|
+
!isLast && /* @__PURE__ */ jsx(
|
|
6109
|
+
"div",
|
|
6110
|
+
{
|
|
6111
|
+
className: cn(
|
|
6112
|
+
"stepper-connector",
|
|
6113
|
+
`stepper-connector--${orientation}`,
|
|
6114
|
+
index < currentStep && "stepper-connector--complete"
|
|
6115
|
+
),
|
|
6116
|
+
"aria-hidden": "true"
|
|
6117
|
+
}
|
|
6118
|
+
)
|
|
6119
|
+
] }),
|
|
6120
|
+
/* @__PURE__ */ jsxs("div", { className: "stepper-label", children: [
|
|
6121
|
+
/* @__PURE__ */ jsx("span", { className: cn("stepper-title", `stepper-title--${status}`), children: step.title }),
|
|
6122
|
+
step.description && /* @__PURE__ */ jsx("span", { className: cn("stepper-description", `stepper-description--${status}`), children: step.description })
|
|
6123
|
+
] })
|
|
6124
|
+
]
|
|
6125
|
+
},
|
|
6126
|
+
index
|
|
6127
|
+
);
|
|
6128
|
+
})
|
|
6129
|
+
}
|
|
6130
|
+
);
|
|
6131
|
+
}
|
|
6132
|
+
);
|
|
6133
|
+
Stepper.displayName = "Stepper";
|
|
6134
|
+
const DatePicker = React.forwardRef(
|
|
6135
|
+
({
|
|
6136
|
+
value,
|
|
6137
|
+
onChange,
|
|
6138
|
+
placeholder = "Select date",
|
|
6139
|
+
disabled = false,
|
|
6140
|
+
disabledDates,
|
|
6141
|
+
fromDate,
|
|
6142
|
+
toDate,
|
|
6143
|
+
dateFormat = "MMM d, yyyy",
|
|
6144
|
+
className,
|
|
6145
|
+
align = "start"
|
|
6146
|
+
}, ref) => {
|
|
6147
|
+
const [open, setOpen] = React.useState(false);
|
|
6148
|
+
const handleSelect = (date) => {
|
|
6149
|
+
onChange == null ? void 0 : onChange(date);
|
|
6150
|
+
setOpen(false);
|
|
6151
|
+
};
|
|
6152
|
+
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
6153
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
6154
|
+
"button",
|
|
6155
|
+
{
|
|
6156
|
+
ref,
|
|
6157
|
+
type: "button",
|
|
6158
|
+
disabled,
|
|
6159
|
+
"aria-haspopup": "dialog",
|
|
6160
|
+
"aria-expanded": open,
|
|
6161
|
+
className: cn(
|
|
6162
|
+
"date-picker-trigger",
|
|
6163
|
+
!value && "date-picker-trigger--placeholder",
|
|
6164
|
+
disabled && "date-picker-trigger--disabled",
|
|
6165
|
+
className
|
|
6166
|
+
),
|
|
6167
|
+
children: [
|
|
6168
|
+
/* @__PURE__ */ jsx("span", { className: "date-picker-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: [
|
|
6169
|
+
/* @__PURE__ */ jsx("rect", { x: "1", y: "3", width: "14", height: "12", rx: "2", stroke: "currentColor", strokeWidth: "1.5" }),
|
|
6170
|
+
/* @__PURE__ */ jsx("path", { d: "M1 7h14", stroke: "currentColor", strokeWidth: "1.5" }),
|
|
6171
|
+
/* @__PURE__ */ jsx("path", { d: "M5 1v4M11 1v4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })
|
|
6172
|
+
] }) }),
|
|
6173
|
+
/* @__PURE__ */ jsx("span", { className: "date-picker-value", children: value ? format(value, dateFormat) : placeholder }),
|
|
6174
|
+
/* @__PURE__ */ jsx("span", { className: "date-picker-chevron", "aria-hidden": "true", children: /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ jsx("path", { d: "M2 4l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
|
|
6175
|
+
]
|
|
6176
|
+
}
|
|
6177
|
+
) }),
|
|
6178
|
+
/* @__PURE__ */ jsx(
|
|
6179
|
+
PopoverContent,
|
|
6180
|
+
{
|
|
6181
|
+
className: "date-picker-popover",
|
|
6182
|
+
align,
|
|
6183
|
+
sideOffset: 6,
|
|
6184
|
+
children: /* @__PURE__ */ jsx(
|
|
6185
|
+
Calendar,
|
|
6186
|
+
{
|
|
6187
|
+
mode: "single",
|
|
6188
|
+
selected: value,
|
|
6189
|
+
onSelect: handleSelect,
|
|
6190
|
+
disabled: disabledDates,
|
|
6191
|
+
fromDate,
|
|
6192
|
+
toDate,
|
|
6193
|
+
initialFocus: true
|
|
6194
|
+
}
|
|
6195
|
+
)
|
|
6196
|
+
}
|
|
6197
|
+
)
|
|
6198
|
+
] });
|
|
6199
|
+
}
|
|
6200
|
+
);
|
|
6201
|
+
DatePicker.displayName = "DatePicker";
|
|
6202
|
+
const DateRangePicker = React.forwardRef(
|
|
6203
|
+
({
|
|
6204
|
+
value,
|
|
6205
|
+
onChange,
|
|
6206
|
+
placeholder = "Select date range",
|
|
6207
|
+
disabled = false,
|
|
6208
|
+
dateFormat = "MMM d, yyyy",
|
|
6209
|
+
className,
|
|
6210
|
+
align = "start"
|
|
6211
|
+
}, ref) => {
|
|
6212
|
+
const [open, setOpen] = React.useState(false);
|
|
6213
|
+
const label = React.useMemo(() => {
|
|
6214
|
+
if (!(value == null ? void 0 : value.from)) return null;
|
|
6215
|
+
if (!value.to) return format(value.from, dateFormat);
|
|
6216
|
+
return `${format(value.from, dateFormat)} — ${format(value.to, dateFormat)}`;
|
|
6217
|
+
}, [value, dateFormat]);
|
|
6218
|
+
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
6219
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
6220
|
+
"button",
|
|
6221
|
+
{
|
|
6222
|
+
ref,
|
|
6223
|
+
type: "button",
|
|
6224
|
+
disabled,
|
|
6225
|
+
"aria-haspopup": "dialog",
|
|
6226
|
+
"aria-expanded": open,
|
|
6227
|
+
className: cn(
|
|
6228
|
+
"date-picker-trigger",
|
|
6229
|
+
!label && "date-picker-trigger--placeholder",
|
|
6230
|
+
disabled && "date-picker-trigger--disabled",
|
|
6231
|
+
className
|
|
6232
|
+
),
|
|
6233
|
+
children: [
|
|
6234
|
+
/* @__PURE__ */ jsx("span", { className: "date-picker-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: [
|
|
6235
|
+
/* @__PURE__ */ jsx("rect", { x: "1", y: "3", width: "14", height: "12", rx: "2", stroke: "currentColor", strokeWidth: "1.5" }),
|
|
6236
|
+
/* @__PURE__ */ jsx("path", { d: "M1 7h14", stroke: "currentColor", strokeWidth: "1.5" }),
|
|
6237
|
+
/* @__PURE__ */ jsx("path", { d: "M5 1v4M11 1v4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })
|
|
6238
|
+
] }) }),
|
|
6239
|
+
/* @__PURE__ */ jsx("span", { className: "date-picker-value", children: label ?? placeholder }),
|
|
6240
|
+
/* @__PURE__ */ jsx("span", { className: "date-picker-chevron", "aria-hidden": "true", children: /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ jsx("path", { d: "M2 4l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
|
|
6241
|
+
]
|
|
6242
|
+
}
|
|
6243
|
+
) }),
|
|
6244
|
+
/* @__PURE__ */ jsx(
|
|
6245
|
+
PopoverContent,
|
|
6246
|
+
{
|
|
6247
|
+
className: "date-picker-popover",
|
|
6248
|
+
align,
|
|
6249
|
+
sideOffset: 6,
|
|
6250
|
+
children: /* @__PURE__ */ jsx(
|
|
6251
|
+
Calendar,
|
|
6252
|
+
{
|
|
6253
|
+
mode: "range",
|
|
6254
|
+
selected: value,
|
|
6255
|
+
onSelect: onChange,
|
|
6256
|
+
numberOfMonths: 2,
|
|
6257
|
+
initialFocus: true
|
|
6258
|
+
}
|
|
6259
|
+
)
|
|
6260
|
+
}
|
|
6261
|
+
)
|
|
6262
|
+
] });
|
|
6263
|
+
}
|
|
6264
|
+
);
|
|
6265
|
+
DateRangePicker.displayName = "DateRangePicker";
|
|
4917
6266
|
const Toaster = ({ ...props }) => {
|
|
4918
6267
|
const { theme = "system" } = useTheme();
|
|
4919
6268
|
return /* @__PURE__ */ jsx(
|
|
@@ -13510,6 +14859,17 @@ export {
|
|
|
13510
14859
|
AlertDialogTrigger,
|
|
13511
14860
|
AlertTitle,
|
|
13512
14861
|
AlphaIcon,
|
|
14862
|
+
AppBar,
|
|
14863
|
+
AppBarAppend,
|
|
14864
|
+
AppBarContent,
|
|
14865
|
+
AppBarNavIcon,
|
|
14866
|
+
AppBarPrepend,
|
|
14867
|
+
AppBarTitle,
|
|
14868
|
+
AppShell,
|
|
14869
|
+
AppShellFooter,
|
|
14870
|
+
AppShellHeader,
|
|
14871
|
+
AppShellMain,
|
|
14872
|
+
AppShellSidebar,
|
|
13513
14873
|
AspectRatio,
|
|
13514
14874
|
Avatar,
|
|
13515
14875
|
AvatarFallback,
|
|
@@ -13534,6 +14894,15 @@ export {
|
|
|
13534
14894
|
BadgeRatingResidential,
|
|
13535
14895
|
BadgeRatingWorkforce,
|
|
13536
14896
|
BadgeSurveyProvider,
|
|
14897
|
+
Banner,
|
|
14898
|
+
BannerAction,
|
|
14899
|
+
BannerDescription,
|
|
14900
|
+
BannerIcon,
|
|
14901
|
+
BannerText,
|
|
14902
|
+
BannerTitle,
|
|
14903
|
+
BottomNavigation,
|
|
14904
|
+
BottomNavigationGroup,
|
|
14905
|
+
BottomNavigationItem,
|
|
13537
14906
|
Breadcrumb,
|
|
13538
14907
|
BreadcrumbItem,
|
|
13539
14908
|
BreadcrumbLink,
|
|
@@ -13544,10 +14913,14 @@ export {
|
|
|
13544
14913
|
CONCEPT_ICONS,
|
|
13545
14914
|
Calendar,
|
|
13546
14915
|
Card,
|
|
14916
|
+
CardActions,
|
|
14917
|
+
CardBadge,
|
|
13547
14918
|
CardContent,
|
|
13548
14919
|
CardDescription,
|
|
13549
14920
|
CardFooter,
|
|
13550
14921
|
CardHeader,
|
|
14922
|
+
CardMedia,
|
|
14923
|
+
CardMetric,
|
|
13551
14924
|
CardTitle,
|
|
13552
14925
|
CardWithIcon,
|
|
13553
14926
|
Carousel,
|
|
@@ -13564,6 +14937,7 @@ export {
|
|
|
13564
14937
|
Collapsible,
|
|
13565
14938
|
CollapsibleContent,
|
|
13566
14939
|
CollapsibleTrigger,
|
|
14940
|
+
Columns,
|
|
13567
14941
|
Command,
|
|
13568
14942
|
CommandDialog,
|
|
13569
14943
|
CommandEmpty,
|
|
@@ -13573,6 +14947,7 @@ export {
|
|
|
13573
14947
|
CommandList,
|
|
13574
14948
|
CommandSeparator,
|
|
13575
14949
|
CommandShortcut,
|
|
14950
|
+
Container,
|
|
13576
14951
|
ContextMenu,
|
|
13577
14952
|
ContextMenuCheckboxItem,
|
|
13578
14953
|
ContextMenuContent,
|
|
@@ -13588,6 +14963,8 @@ export {
|
|
|
13588
14963
|
ContextMenuSubContent,
|
|
13589
14964
|
ContextMenuSubTrigger,
|
|
13590
14965
|
ContextMenuTrigger,
|
|
14966
|
+
DatePicker,
|
|
14967
|
+
DateRangePicker,
|
|
13591
14968
|
Dialog,
|
|
13592
14969
|
DialogClose,
|
|
13593
14970
|
DialogContent,
|
|
@@ -13621,6 +14998,17 @@ export {
|
|
|
13621
14998
|
DropdownMenuSubContent,
|
|
13622
14999
|
DropdownMenuSubTrigger,
|
|
13623
15000
|
DropdownMenuTrigger,
|
|
15001
|
+
EmptyState,
|
|
15002
|
+
EmptyStateAction,
|
|
15003
|
+
FileUpload,
|
|
15004
|
+
Footer,
|
|
15005
|
+
FooterBand,
|
|
15006
|
+
FooterCopyright,
|
|
15007
|
+
FooterDivider,
|
|
15008
|
+
FooterIconButton,
|
|
15009
|
+
FooterLink,
|
|
15010
|
+
FooterLinks,
|
|
15011
|
+
FooterRow,
|
|
13624
15012
|
Form,
|
|
13625
15013
|
FormControl,
|
|
13626
15014
|
FormDescription,
|
|
@@ -13628,7 +15016,10 @@ export {
|
|
|
13628
15016
|
FormItem,
|
|
13629
15017
|
FormLabel,
|
|
13630
15018
|
FormMessage,
|
|
15019
|
+
Grid,
|
|
13631
15020
|
HeightContainer,
|
|
15021
|
+
HeroSection,
|
|
15022
|
+
Hide,
|
|
13632
15023
|
HoverCard,
|
|
13633
15024
|
HoverCardContent,
|
|
13634
15025
|
HoverCardTrigger,
|
|
@@ -13650,6 +15041,8 @@ export {
|
|
|
13650
15041
|
InputOTPSeparator,
|
|
13651
15042
|
InputOTPSlot,
|
|
13652
15043
|
Label,
|
|
15044
|
+
List,
|
|
15045
|
+
ListItem,
|
|
13653
15046
|
Menubar,
|
|
13654
15047
|
MenubarCheckboxItem,
|
|
13655
15048
|
MenubarContent,
|
|
@@ -13703,6 +15096,7 @@ export {
|
|
|
13703
15096
|
Popover,
|
|
13704
15097
|
PopoverContent,
|
|
13705
15098
|
PopoverTrigger,
|
|
15099
|
+
Positioned,
|
|
13706
15100
|
Progress,
|
|
13707
15101
|
RadioGroup,
|
|
13708
15102
|
RadioGroupItem,
|
|
@@ -13737,6 +15131,7 @@ export {
|
|
|
13737
15131
|
SealWellResidence,
|
|
13738
15132
|
SealWorksWithWell,
|
|
13739
15133
|
SearchField,
|
|
15134
|
+
Section,
|
|
13740
15135
|
SectionBadge,
|
|
13741
15136
|
Select,
|
|
13742
15137
|
SelectContent,
|
|
@@ -13757,6 +15152,7 @@ export {
|
|
|
13757
15152
|
SheetHeader,
|
|
13758
15153
|
SheetTitle,
|
|
13759
15154
|
SheetTrigger,
|
|
15155
|
+
Show,
|
|
13760
15156
|
Sidebar,
|
|
13761
15157
|
SidebarContent,
|
|
13762
15158
|
SidebarFooter,
|
|
@@ -13773,9 +15169,16 @@ export {
|
|
|
13773
15169
|
Skeleton,
|
|
13774
15170
|
Slider,
|
|
13775
15171
|
Toaster as Sonner,
|
|
15172
|
+
Spacer,
|
|
15173
|
+
Stack,
|
|
13776
15174
|
StandardLogo,
|
|
13777
15175
|
StandardNavigation,
|
|
15176
|
+
Stepper,
|
|
13778
15177
|
Switch,
|
|
15178
|
+
SystemBar,
|
|
15179
|
+
SystemBarAction,
|
|
15180
|
+
SystemBarIcon,
|
|
15181
|
+
SystemBarSpacer,
|
|
13779
15182
|
Table,
|
|
13780
15183
|
TableBody,
|
|
13781
15184
|
TableCaption,
|
|
@@ -13791,6 +15194,8 @@ export {
|
|
|
13791
15194
|
Tag,
|
|
13792
15195
|
Text,
|
|
13793
15196
|
Textarea,
|
|
15197
|
+
Timeline,
|
|
15198
|
+
TimelineItem,
|
|
13794
15199
|
Toast,
|
|
13795
15200
|
ToastAction,
|
|
13796
15201
|
ToastClose,
|
|
@@ -13838,6 +15243,7 @@ export {
|
|
|
13838
15243
|
WatermarkMemberOrg,
|
|
13839
15244
|
X,
|
|
13840
15245
|
badgeVariants,
|
|
15246
|
+
bannerVariants,
|
|
13841
15247
|
buttonVariants,
|
|
13842
15248
|
capitalize,
|
|
13843
15249
|
cn,
|