@algorithm-shift/design-system 1.3.123 → 1.3.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +17 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +210 -97
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +210 -97
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -174,6 +174,7 @@ interface StagesProps extends ElementProps {
|
|
|
174
174
|
saving?: boolean;
|
|
175
175
|
canvasMode?: 'desktop' | 'tablet' | 'mobile' | 'app';
|
|
176
176
|
primaryColor?: string
|
|
177
|
+
[key: string]: any;
|
|
177
178
|
}
|
|
178
179
|
|
|
179
180
|
type ButtonProps = ElementProps & React.ComponentProps<"button"> & {
|
|
@@ -365,7 +366,10 @@ declare const ImageControl: ({ className, style, imageUrl, altText, apiUrl, ...p
|
|
|
365
366
|
|
|
366
367
|
declare const Shape: ({ children, className, style }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
367
368
|
|
|
368
|
-
|
|
369
|
+
type TypographyWrapperProps = TypographyProps & {
|
|
370
|
+
format?: string;
|
|
371
|
+
};
|
|
372
|
+
declare const Typography: ({ className, style, tagName, textContent, onClick, format, }: TypographyWrapperProps) => React$1.DetailedReactHTMLElement<{
|
|
369
373
|
style: React$1.CSSProperties | undefined;
|
|
370
374
|
className: string;
|
|
371
375
|
onClick: ((e: React$1.MouseEvent<HTMLElement, MouseEvent>) => void) | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -174,6 +174,7 @@ interface StagesProps extends ElementProps {
|
|
|
174
174
|
saving?: boolean;
|
|
175
175
|
canvasMode?: 'desktop' | 'tablet' | 'mobile' | 'app';
|
|
176
176
|
primaryColor?: string
|
|
177
|
+
[key: string]: any;
|
|
177
178
|
}
|
|
178
179
|
|
|
179
180
|
type ButtonProps = ElementProps & React.ComponentProps<"button"> & {
|
|
@@ -365,7 +366,10 @@ declare const ImageControl: ({ className, style, imageUrl, altText, apiUrl, ...p
|
|
|
365
366
|
|
|
366
367
|
declare const Shape: ({ children, className, style }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
367
368
|
|
|
368
|
-
|
|
369
|
+
type TypographyWrapperProps = TypographyProps & {
|
|
370
|
+
format?: string;
|
|
371
|
+
};
|
|
372
|
+
declare const Typography: ({ className, style, tagName, textContent, onClick, format, }: TypographyWrapperProps) => React$1.DetailedReactHTMLElement<{
|
|
369
373
|
style: React$1.CSSProperties | undefined;
|
|
370
374
|
className: string;
|
|
371
375
|
onClick: ((e: React$1.MouseEvent<HTMLElement, MouseEvent>) => void) | undefined;
|
package/dist/index.js
CHANGED
|
@@ -618,14 +618,64 @@ var Shape_default = Shape;
|
|
|
618
618
|
|
|
619
619
|
// src/components/Basic/Typography/Typography.tsx
|
|
620
620
|
var import_react7 = __toESM(require("react"));
|
|
621
|
+
|
|
622
|
+
// src/lib/dayjs-setup.ts
|
|
623
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
624
|
+
var import_utc = __toESM(require("dayjs/plugin/utc"));
|
|
625
|
+
import_dayjs.default.extend(import_utc.default);
|
|
626
|
+
var dayjs_setup_default = import_dayjs.default;
|
|
627
|
+
|
|
628
|
+
// src/lib/table/valueFormatter.ts
|
|
629
|
+
var valueFormatter = (value, format3, customFormatters = {}) => {
|
|
630
|
+
if (!format3) return value;
|
|
631
|
+
if (value == null || value === "" || value === void 0) return "-";
|
|
632
|
+
if (format3.startsWith("custom:")) {
|
|
633
|
+
const key = format3.replace("custom:", "");
|
|
634
|
+
return customFormatters[key] ? customFormatters[key](value) : value;
|
|
635
|
+
}
|
|
636
|
+
const [type, arg] = format3.split(":");
|
|
637
|
+
switch (type) {
|
|
638
|
+
case "date":
|
|
639
|
+
return dayjs_setup_default(value).format(arg || "YYYY-MM-DD");
|
|
640
|
+
case "datetimenumber":
|
|
641
|
+
return dayjs_setup_default(value).format("YYYY-MM-DD hh:mm");
|
|
642
|
+
case "datetime":
|
|
643
|
+
return dayjs_setup_default(value).format("DD MMM YYYY hh:mm A");
|
|
644
|
+
case "days":
|
|
645
|
+
return `${dayjs_setup_default().diff(dayjs_setup_default(value), "day")} days`;
|
|
646
|
+
case "months":
|
|
647
|
+
return `${dayjs_setup_default().diff(dayjs_setup_default(value), "month")} months`;
|
|
648
|
+
case "years":
|
|
649
|
+
return `${dayjs_setup_default().diff(dayjs_setup_default(value), "year")} years`;
|
|
650
|
+
case "time":
|
|
651
|
+
return dayjs_setup_default(value).format("HH:mm");
|
|
652
|
+
case "number":
|
|
653
|
+
return Number(value).toFixed(parseInt(arg || "2"));
|
|
654
|
+
case "currency":
|
|
655
|
+
return new Intl.NumberFormat("en-IN", {
|
|
656
|
+
style: "currency",
|
|
657
|
+
currency: arg || "INR"
|
|
658
|
+
}).format(Number(value));
|
|
659
|
+
case "uppercase":
|
|
660
|
+
return String(value).toUpperCase();
|
|
661
|
+
case "lowercase":
|
|
662
|
+
return String(value).toLowerCase();
|
|
663
|
+
default:
|
|
664
|
+
return value;
|
|
665
|
+
}
|
|
666
|
+
};
|
|
667
|
+
|
|
668
|
+
// src/components/Basic/Typography/Typography.tsx
|
|
621
669
|
var Typography = ({
|
|
622
670
|
className,
|
|
623
671
|
style,
|
|
624
672
|
tagName,
|
|
625
673
|
textContent,
|
|
626
|
-
onClick
|
|
674
|
+
onClick,
|
|
675
|
+
format: format3
|
|
627
676
|
}) => {
|
|
628
677
|
const Tag = tagName || "h1";
|
|
678
|
+
const formattedContent = format3 != null && format3 !== "" ? valueFormatter(textContent, format3) : textContent;
|
|
629
679
|
return import_react7.default.createElement(
|
|
630
680
|
Tag,
|
|
631
681
|
{
|
|
@@ -637,7 +687,7 @@ var Typography = ({
|
|
|
637
687
|
import_react7.default.createElement("span", {
|
|
638
688
|
key: "html",
|
|
639
689
|
className: "pointer-events-none",
|
|
640
|
-
dangerouslySetInnerHTML: { __html:
|
|
690
|
+
dangerouslySetInnerHTML: { __html: formattedContent || "--" }
|
|
641
691
|
})
|
|
642
692
|
]
|
|
643
693
|
);
|
|
@@ -2328,6 +2378,7 @@ function LazySelectDropdown({
|
|
|
2328
2378
|
}) {
|
|
2329
2379
|
const [isOpen, setIsOpen] = (0, import_react22.useState)(false);
|
|
2330
2380
|
const [searchTerm, setSearchTerm] = (0, import_react22.useState)("");
|
|
2381
|
+
const [highlightedIndex, setHighlightedIndex] = (0, import_react22.useState)(-1);
|
|
2331
2382
|
const dropdownRef = (0, import_react22.useRef)(null);
|
|
2332
2383
|
const observerTarget = (0, import_react22.useRef)(null);
|
|
2333
2384
|
const {
|
|
@@ -2352,11 +2403,19 @@ function LazySelectDropdown({
|
|
|
2352
2403
|
enforceStrictQueryParams
|
|
2353
2404
|
});
|
|
2354
2405
|
const selectedOption = (0, import_react22.useMemo)(() => lazyOptions.find((opt) => opt.value === value), [lazyOptions, value]);
|
|
2406
|
+
(0, import_react22.useEffect)(() => {
|
|
2407
|
+
if (!isOpen) {
|
|
2408
|
+
setHighlightedIndex(-1);
|
|
2409
|
+
} else if (lazyOptions.length > 0 && highlightedIndex === -1) {
|
|
2410
|
+
setHighlightedIndex(0);
|
|
2411
|
+
}
|
|
2412
|
+
}, [isOpen, lazyOptions.length, highlightedIndex]);
|
|
2355
2413
|
(0, import_react22.useEffect)(() => {
|
|
2356
2414
|
const handleClickOutside = (e) => {
|
|
2357
2415
|
if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
|
|
2358
2416
|
setIsOpen(false);
|
|
2359
2417
|
setSearchTerm("");
|
|
2418
|
+
setHighlightedIndex(-1);
|
|
2360
2419
|
}
|
|
2361
2420
|
};
|
|
2362
2421
|
document.addEventListener("mousedown", handleClickOutside);
|
|
@@ -2376,24 +2435,30 @@ function LazySelectDropdown({
|
|
|
2376
2435
|
const handleSearchChange = (e) => {
|
|
2377
2436
|
const term = e.target.value;
|
|
2378
2437
|
setSearchTerm(term);
|
|
2438
|
+
setHighlightedIndex(-1);
|
|
2379
2439
|
search(term);
|
|
2380
2440
|
};
|
|
2381
2441
|
const handleSelect = (optValue) => {
|
|
2382
2442
|
onChange?.(optValue, id || "");
|
|
2383
2443
|
setIsOpen(false);
|
|
2384
2444
|
setSearchTerm("");
|
|
2445
|
+
setHighlightedIndex(-1);
|
|
2385
2446
|
reset();
|
|
2386
2447
|
};
|
|
2387
2448
|
const handleFocus = () => {
|
|
2388
|
-
if (!disabled)
|
|
2389
|
-
|
|
2390
|
-
|
|
2449
|
+
if (!disabled) {
|
|
2450
|
+
setIsOpen(true);
|
|
2451
|
+
if (lazyOptions.length === 0) {
|
|
2452
|
+
loadPage(1, "");
|
|
2453
|
+
}
|
|
2454
|
+
}
|
|
2391
2455
|
};
|
|
2392
2456
|
const handleRemoveSelection = (e) => {
|
|
2393
2457
|
e.preventDefault();
|
|
2394
2458
|
e.stopPropagation();
|
|
2395
2459
|
onChange?.("", id || "");
|
|
2396
2460
|
setSearchTerm("");
|
|
2461
|
+
setHighlightedIndex(-1);
|
|
2397
2462
|
reset();
|
|
2398
2463
|
search("");
|
|
2399
2464
|
};
|
|
@@ -2403,9 +2468,50 @@ function LazySelectDropdown({
|
|
|
2403
2468
|
onChange?.(option.value, id || "");
|
|
2404
2469
|
setIsOpen(false);
|
|
2405
2470
|
setSearchTerm("");
|
|
2471
|
+
setHighlightedIndex(-1);
|
|
2406
2472
|
reset();
|
|
2407
2473
|
}
|
|
2408
2474
|
};
|
|
2475
|
+
const handleKeyDown = (e) => {
|
|
2476
|
+
if (disabled || readOnly) return;
|
|
2477
|
+
if (!isOpen) {
|
|
2478
|
+
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
2479
|
+
e.preventDefault();
|
|
2480
|
+
setIsOpen(true);
|
|
2481
|
+
if (lazyOptions.length > 0) {
|
|
2482
|
+
setHighlightedIndex(0);
|
|
2483
|
+
}
|
|
2484
|
+
return;
|
|
2485
|
+
}
|
|
2486
|
+
}
|
|
2487
|
+
switch (e.key) {
|
|
2488
|
+
case "ArrowDown":
|
|
2489
|
+
e.preventDefault();
|
|
2490
|
+
setHighlightedIndex(
|
|
2491
|
+
(prev) => prev < lazyOptions.length - 1 ? prev + 1 : 0
|
|
2492
|
+
);
|
|
2493
|
+
break;
|
|
2494
|
+
case "ArrowUp":
|
|
2495
|
+
e.preventDefault();
|
|
2496
|
+
setHighlightedIndex(
|
|
2497
|
+
(prev) => prev > 0 ? prev - 1 : lazyOptions.length - 1
|
|
2498
|
+
);
|
|
2499
|
+
break;
|
|
2500
|
+
case "Enter":
|
|
2501
|
+
e.preventDefault();
|
|
2502
|
+
if (highlightedIndex >= 0 && highlightedIndex < lazyOptions.length) {
|
|
2503
|
+
handleSelect(lazyOptions[highlightedIndex].value);
|
|
2504
|
+
}
|
|
2505
|
+
break;
|
|
2506
|
+
case "Escape":
|
|
2507
|
+
e.preventDefault();
|
|
2508
|
+
setIsOpen(false);
|
|
2509
|
+
setSearchTerm("");
|
|
2510
|
+
setHighlightedIndex(-1);
|
|
2511
|
+
reset();
|
|
2512
|
+
break;
|
|
2513
|
+
}
|
|
2514
|
+
};
|
|
2409
2515
|
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { ref: dropdownRef, className: "relative w-full", children: [
|
|
2410
2516
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2411
2517
|
"input",
|
|
@@ -2423,6 +2529,7 @@ function LazySelectDropdown({
|
|
|
2423
2529
|
value: isOpen ? searchTerm : selectedOption?.label || "",
|
|
2424
2530
|
onFocus: handleFocus,
|
|
2425
2531
|
onChange: handleSearchChange,
|
|
2532
|
+
onKeyDown: handleKeyDown,
|
|
2426
2533
|
readOnly: !isOpen || readOnly,
|
|
2427
2534
|
disabled,
|
|
2428
2535
|
autoComplete: "off"
|
|
@@ -2460,10 +2567,18 @@ function LazySelectDropdown({
|
|
|
2460
2567
|
lazyOptions.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2461
2568
|
"div",
|
|
2462
2569
|
{
|
|
2463
|
-
|
|
2464
|
-
|
|
2570
|
+
tabIndex: 0,
|
|
2571
|
+
className: cn(
|
|
2572
|
+
"px-3 py-2 hover:bg-blue-50 cursor-pointer text-sm focus:outline-none",
|
|
2573
|
+
option.value === value ? "bg-blue-100" : "",
|
|
2574
|
+
index === highlightedIndex ? "bg-blue-200" : ""
|
|
2575
|
+
),
|
|
2576
|
+
onClick: () => handleSelect(option.value),
|
|
2577
|
+
onKeyDown: (e) => {
|
|
2578
|
+
if (e.key === "Enter") {
|
|
2579
|
+
handleSelect(option.value);
|
|
2580
|
+
}
|
|
2465
2581
|
},
|
|
2466
|
-
className: `px-3 py-2 hover:bg-blue-50 cursor-pointer text-sm ${option.value === value ? "bg-blue-100" : ""}`,
|
|
2467
2582
|
children: option.label
|
|
2468
2583
|
},
|
|
2469
2584
|
`${option.value}-${index}`
|
|
@@ -2484,9 +2599,7 @@ function LazySelectDropdown({
|
|
|
2484
2599
|
enableAddNewOption && searchTerm && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2485
2600
|
"div",
|
|
2486
2601
|
{
|
|
2487
|
-
onClick: () =>
|
|
2488
|
-
handleAddNewOption(searchTerm);
|
|
2489
|
-
},
|
|
2602
|
+
onClick: () => handleAddNewOption(searchTerm),
|
|
2490
2603
|
className: "mt-2 px-3 py-2 bg-green-50 hover:bg-green-100 cursor-pointer text-green-700 rounded text-sm",
|
|
2491
2604
|
children: `Add "${searchTerm}"`
|
|
2492
2605
|
}
|
|
@@ -3237,7 +3350,7 @@ function DateTimePicker({
|
|
|
3237
3350
|
};
|
|
3238
3351
|
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
3239
3352
|
const yearOptions = [];
|
|
3240
|
-
for (let y = currentYear -
|
|
3353
|
+
for (let y = currentYear - 90; y <= currentYear; y++) {
|
|
3241
3354
|
yearOptions.push(y);
|
|
3242
3355
|
}
|
|
3243
3356
|
const displayValue = React8.useMemo(() => {
|
|
@@ -3844,54 +3957,6 @@ var import_react31 = __toESM(require("react"));
|
|
|
3844
3957
|
var LucideIcons2 = __toESM(require("lucide-react"));
|
|
3845
3958
|
var import_lucide_react11 = require("lucide-react");
|
|
3846
3959
|
var import_image = __toESM(require("next/image"));
|
|
3847
|
-
|
|
3848
|
-
// src/lib/dayjs-setup.ts
|
|
3849
|
-
var import_dayjs = __toESM(require("dayjs"));
|
|
3850
|
-
var import_utc = __toESM(require("dayjs/plugin/utc"));
|
|
3851
|
-
import_dayjs.default.extend(import_utc.default);
|
|
3852
|
-
var dayjs_setup_default = import_dayjs.default;
|
|
3853
|
-
|
|
3854
|
-
// src/lib/table/valueFormatter.ts
|
|
3855
|
-
var valueFormatter = (value, format3, customFormatters = {}) => {
|
|
3856
|
-
if (!format3) return value;
|
|
3857
|
-
if (value == null || value === "" || value === void 0) return "-";
|
|
3858
|
-
if (format3.startsWith("custom:")) {
|
|
3859
|
-
const key = format3.replace("custom:", "");
|
|
3860
|
-
return customFormatters[key] ? customFormatters[key](value) : value;
|
|
3861
|
-
}
|
|
3862
|
-
const [type, arg] = format3.split(":");
|
|
3863
|
-
switch (type) {
|
|
3864
|
-
case "date":
|
|
3865
|
-
return dayjs_setup_default(value).format(arg || "YYYY-MM-DD");
|
|
3866
|
-
case "datetimenumber":
|
|
3867
|
-
return dayjs_setup_default(value).format("YYYY-MM-DD hh:mm");
|
|
3868
|
-
case "datetime":
|
|
3869
|
-
return dayjs_setup_default(value).format("DD MMM YYYY hh:mm A");
|
|
3870
|
-
case "days":
|
|
3871
|
-
return `${dayjs_setup_default().diff(dayjs_setup_default(value), "day")} days`;
|
|
3872
|
-
case "months":
|
|
3873
|
-
return `${dayjs_setup_default().diff(dayjs_setup_default(value), "month")} months`;
|
|
3874
|
-
case "years":
|
|
3875
|
-
return `${dayjs_setup_default().diff(dayjs_setup_default(value), "year")} years`;
|
|
3876
|
-
case "time":
|
|
3877
|
-
return dayjs_setup_default(value).format("HH:mm");
|
|
3878
|
-
case "number":
|
|
3879
|
-
return Number(value).toFixed(parseInt(arg || "2"));
|
|
3880
|
-
case "currency":
|
|
3881
|
-
return new Intl.NumberFormat("en-IN", {
|
|
3882
|
-
style: "currency",
|
|
3883
|
-
currency: arg || "INR"
|
|
3884
|
-
}).format(Number(value));
|
|
3885
|
-
case "uppercase":
|
|
3886
|
-
return String(value).toUpperCase();
|
|
3887
|
-
case "lowercase":
|
|
3888
|
-
return String(value).toLowerCase();
|
|
3889
|
-
default:
|
|
3890
|
-
return value;
|
|
3891
|
-
}
|
|
3892
|
-
};
|
|
3893
|
-
|
|
3894
|
-
// src/lib/table/cellRendererFactory.tsx
|
|
3895
3960
|
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
3896
3961
|
var getContrastColor = (bg) => {
|
|
3897
3962
|
let c = bg.trim().toUpperCase();
|
|
@@ -4710,7 +4775,7 @@ function DataTable({
|
|
|
4710
4775
|
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
4711
4776
|
TableCell,
|
|
4712
4777
|
{
|
|
4713
|
-
className: `break-words whitespace-normal align-top ${
|
|
4778
|
+
className: `break-words whitespace-normal align-top ${isClickable ? "cursor-pointer hover:bg-gray-100 underline text-blue-500" : ""} relative py-2 ${meta2?.cellClass ?? ""}`,
|
|
4714
4779
|
style: {
|
|
4715
4780
|
width: cell.column.getSize(),
|
|
4716
4781
|
minWidth: cell.column.columnDef.minSize,
|
|
@@ -5704,6 +5769,30 @@ function TooltipTrigger({
|
|
|
5704
5769
|
}) {
|
|
5705
5770
|
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
5706
5771
|
}
|
|
5772
|
+
function TooltipContent({
|
|
5773
|
+
className,
|
|
5774
|
+
sideOffset = 4,
|
|
5775
|
+
children,
|
|
5776
|
+
hideArrow,
|
|
5777
|
+
...props
|
|
5778
|
+
}) {
|
|
5779
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(TooltipPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
5780
|
+
TooltipPrimitive.Content,
|
|
5781
|
+
{
|
|
5782
|
+
"data-slot": "tooltip-content",
|
|
5783
|
+
sideOffset,
|
|
5784
|
+
className: cn(
|
|
5785
|
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
|
|
5786
|
+
className
|
|
5787
|
+
),
|
|
5788
|
+
...props,
|
|
5789
|
+
children: [
|
|
5790
|
+
children,
|
|
5791
|
+
!hideArrow && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(TooltipPrimitive.Arrow, { className: "bg-primary fill-primary z-50 size-2.5 rotate-45 rounded-[2px]" })
|
|
5792
|
+
]
|
|
5793
|
+
}
|
|
5794
|
+
) });
|
|
5795
|
+
}
|
|
5707
5796
|
|
|
5708
5797
|
// src/components/Navigation/Stages/Stages.tsx
|
|
5709
5798
|
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
@@ -5761,6 +5850,9 @@ var StagesComponent = ({
|
|
|
5761
5850
|
const onStageClick = (stageKey) => {
|
|
5762
5851
|
if (!stageKey || stageKey === activeStage) return;
|
|
5763
5852
|
setActiveStage(stageKey);
|
|
5853
|
+
const { activeRoot, activeChild } = findStageContext(stages, stageKey);
|
|
5854
|
+
setActiveRootStage(activeRoot);
|
|
5855
|
+
setActiveChildStage(activeChild);
|
|
5764
5856
|
if (triggerOnClick) {
|
|
5765
5857
|
onStageChange?.(stageKey);
|
|
5766
5858
|
}
|
|
@@ -5833,50 +5925,71 @@ var StagesComponent = ({
|
|
|
5833
5925
|
disabled: true
|
|
5834
5926
|
},
|
|
5835
5927
|
index
|
|
5836
|
-
)) : (stages || [])?.length > 0 &&
|
|
5837
|
-
const
|
|
5838
|
-
const
|
|
5839
|
-
const
|
|
5840
|
-
const
|
|
5841
|
-
const
|
|
5842
|
-
|
|
5843
|
-
|
|
5844
|
-
|
|
5845
|
-
|
|
5846
|
-
|
|
5847
|
-
|
|
5848
|
-
|
|
5849
|
-
|
|
5850
|
-
|
|
5851
|
-
|
|
5852
|
-
|
|
5928
|
+
)) : (stages || [])?.length > 0 && (() => {
|
|
5929
|
+
const safeStages = stages ?? [];
|
|
5930
|
+
const activeRootKey = activeRootStage?.[dataKey];
|
|
5931
|
+
const isActiveStageTopLevel = safeStages.some((s) => s?.[dataKey] === activeStage);
|
|
5932
|
+
const activeIndexKey = isActiveStageTopLevel ? activeStage : activeRootKey ?? activeStage;
|
|
5933
|
+
const currentIndex = safeStages.findIndex((s) => s?.[dataKey] === activeIndexKey);
|
|
5934
|
+
const isOutcomeWon = activeChildStage?.is_won === true;
|
|
5935
|
+
const isOutcomeLost = activeChildStage?.is_won === false;
|
|
5936
|
+
const hasOutcome = isOutcomeWon || isOutcomeLost;
|
|
5937
|
+
const activeOutcomeClass = isOutcomeWon ? "bg-green-600 text-white shadow-md" : isOutcomeLost ? "bg-red-600 text-white shadow-md" : "";
|
|
5938
|
+
return safeStages.map((stage, index) => {
|
|
5939
|
+
const isCompletedStage = isAllStagesCompleted || index <= currentIndex;
|
|
5940
|
+
const showAsActive = isAllStagesCompleted ? index === safeStages.length - 1 : index === currentIndex;
|
|
5941
|
+
const isCurrentRootStage = activeRootStage?.[dataKey] === stage[dataKey];
|
|
5942
|
+
const stageHasChildren = Array.isArray(stage?.children) && stage.children.length > 0;
|
|
5943
|
+
const isCurrentChildStage = activeChildStage?.[dataKey] === activeStage;
|
|
5944
|
+
const showOutcomeForCurrentStage = showAsActive && hasOutcome && stageHasChildren && isCurrentRootStage && isCurrentChildStage;
|
|
5945
|
+
let stageColor = `text-[${primaryColor}] border-2 border-[${primaryColor}]`;
|
|
5946
|
+
let stageStyle = {
|
|
5947
|
+
borderColor: primaryColor,
|
|
5948
|
+
color: showAsActive ? "white" : primaryColor,
|
|
5949
|
+
backgroundColor: showAsActive ? primaryColor : "transparent"
|
|
5950
|
+
};
|
|
5951
|
+
if (stage.hasOwnProperty("isSuccess") && stage.isSuccess === false) {
|
|
5853
5952
|
stageColor = "bg-red-50 text-red-700 border-2 border-red-700";
|
|
5854
5953
|
stageStyle = { borderColor: "red", color: "red", backgroundColor: "transparent" };
|
|
5855
5954
|
}
|
|
5856
|
-
|
|
5857
|
-
|
|
5858
|
-
|
|
5859
|
-
|
|
5860
|
-
|
|
5861
|
-
|
|
5862
|
-
|
|
5955
|
+
if (showOutcomeForCurrentStage) {
|
|
5956
|
+
stageColor = isOutcomeWon ? "bg-green-600 text-white border-2 border-green-600" : "bg-red-600 text-white border-2 border-red-600";
|
|
5957
|
+
stageStyle = isOutcomeWon ? { borderColor: "#16a34a", color: "white", backgroundColor: "#16a34a" } : { borderColor: "#dc2626", color: "white", backgroundColor: "#dc2626" };
|
|
5958
|
+
}
|
|
5959
|
+
let stageLabel = stage[dataLabel];
|
|
5960
|
+
if (stage[dataKey] !== activeChildStage?.[dataKey] && activeRootStage?.[dataKey] === stage[dataKey]) {
|
|
5961
|
+
stageLabel = activeChildStage?.[dataLabel] || stageLabel;
|
|
5962
|
+
stageColor = `text-[${primaryColor}] border-2 border-[${primaryColor}]`;
|
|
5963
|
+
if (showOutcomeForCurrentStage) {
|
|
5964
|
+
stageColor = isOutcomeWon ? "bg-green-600 text-white border-2 border-green-600" : "bg-red-600 text-white border-2 border-red-600";
|
|
5965
|
+
stageStyle = isOutcomeWon ? { borderColor: "#16a34a", color: "white", backgroundColor: "#16a34a" } : { borderColor: "#dc2626", color: "white", backgroundColor: "#dc2626" };
|
|
5966
|
+
}
|
|
5967
|
+
}
|
|
5968
|
+
const stageKey = typeof stage[dataKey] === "string" ? stage[dataKey] : JSON.stringify(stage[dataKey]);
|
|
5969
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react34.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Tooltip, { delayDuration: 500, disableHoverableContent: true, children: [
|
|
5970
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
5971
|
+
"button",
|
|
5972
|
+
{
|
|
5973
|
+
className: `
|
|
5863
5974
|
min-w-[70px] sm:min-w-[80px] w-full sm:w-auto px-3 sm:px-4 py-1.5 sm:py-2
|
|
5864
5975
|
rounded-full text-xs sm:text-sm font-medium transition-colors duration-200
|
|
5865
5976
|
whitespace-normal sm:whitespace-nowrap flex-shrink-0 max-w-[150px] text-ellipsis overflow-hidden
|
|
5866
|
-
${showAsActive ? `bg-[${primaryColor}] text-white shadow-md` : isCompletedStage ? stageColor : "bg-white border border-gray-200"}
|
|
5977
|
+
${showAsActive ? showOutcomeForCurrentStage ? activeOutcomeClass : `bg-[${primaryColor}] text-white shadow-md` : isCompletedStage ? stageColor : "bg-white border border-gray-200"}
|
|
5867
5978
|
${isMobile ? "flex-1 text-center py-2.5" : ""}
|
|
5868
5979
|
`,
|
|
5869
|
-
|
|
5870
|
-
|
|
5871
|
-
|
|
5872
|
-
|
|
5873
|
-
|
|
5874
|
-
|
|
5875
|
-
|
|
5876
|
-
|
|
5877
|
-
|
|
5878
|
-
|
|
5879
|
-
|
|
5980
|
+
onClick: () => {
|
|
5981
|
+
if (isAllStagesCompleted) return;
|
|
5982
|
+
onStageClick(stage[dataKey]);
|
|
5983
|
+
},
|
|
5984
|
+
style: stageStyle,
|
|
5985
|
+
children: stageLabel
|
|
5986
|
+
}
|
|
5987
|
+
) }),
|
|
5988
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TooltipContent, { side: "top", sideOffset: 6, hideArrow: true, children: stageLabel }),
|
|
5989
|
+
!isMobile && index < safeStages.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "hidden sm:flex sm:flex-shrink-0 w-3 h-px bg-gray-300 sm:w-4" })
|
|
5990
|
+
] }, stageKey) }, stageKey);
|
|
5991
|
+
});
|
|
5992
|
+
})()
|
|
5880
5993
|
}
|
|
5881
5994
|
),
|
|
5882
5995
|
isShowBtn && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|