@algorithm-shift/design-system 1.3.124 → 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.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
- declare const Typography: ({ className, style, tagName, textContent, onClick, }: TypographyProps) => React$1.DetailedReactHTMLElement<{
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
- declare const Typography: ({ className, style, tagName, textContent, onClick, }: TypographyProps) => React$1.DetailedReactHTMLElement<{
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: textContent || "--" }
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) setIsOpen(true);
2389
- if (lazyOptions.length === 0)
2390
- loadPage(1, "");
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
- onClick: () => {
2464
- handleSelect(option.value);
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 - 50; y <= currentYear + 10; y++) {
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 ${meta2?.cellClass ?? ""} ${isClickable ? "cursor-pointer hover:bg-gray-100 underline text-blue-500" : ""} relative py-2 `,
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,
@@ -5785,6 +5850,9 @@ var StagesComponent = ({
5785
5850
  const onStageClick = (stageKey) => {
5786
5851
  if (!stageKey || stageKey === activeStage) return;
5787
5852
  setActiveStage(stageKey);
5853
+ const { activeRoot, activeChild } = findStageContext(stages, stageKey);
5854
+ setActiveRootStage(activeRoot);
5855
+ setActiveChildStage(activeChild);
5788
5856
  if (triggerOnClick) {
5789
5857
  onStageChange?.(stageKey);
5790
5858
  }
@@ -5857,51 +5925,71 @@ var StagesComponent = ({
5857
5925
  disabled: true
5858
5926
  },
5859
5927
  index
5860
- )) : (stages || [])?.length > 0 && stages?.map((stage, index) => {
5861
- const currentIndex = stages.findIndex((s) => s[dataKey] === activeStage);
5862
- const isCompletedStage = isAllStagesCompleted || index <= currentIndex;
5863
- const isActive = !isAllStagesCompleted && index === currentIndex;
5864
- const isLastStageWhenCompleted = isAllStagesCompleted && index === stages.length - 1;
5865
- const showAsActive = isActive || isLastStageWhenCompleted;
5866
- let stageColor = `text-[${primaryColor}] border-2 border-[${primaryColor}]`;
5867
- let stageStyle = { borderColor: primaryColor, color: showAsActive ? "white" : primaryColor, backgroundColor: showAsActive ? primaryColor : "transparent" };
5868
- if (stage.hasOwnProperty("isSuccess") && stage.isSuccess === false) {
5869
- stageColor = "bg-red-50 text-red-700 border-2 border-red-700";
5870
- stageStyle = { borderColor: "red", color: "red", backgroundColor: "transparent" };
5871
- }
5872
- let stageLabel = stage[dataLabel];
5873
- if (stage[dataKey] !== activeChildStage?.[dataKey] && activeRootStage?.[dataKey] === stage[dataKey]) {
5874
- stageLabel = activeChildStage?.[dataLabel] || stageLabel;
5875
- stageColor = `text-[${primaryColor}] border-2 border-[${primaryColor}]`;
5876
- if (activeChildStage.hasOwnProperty("isSuccess") && activeChildStage.isSuccess === false) {
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) {
5877
5952
  stageColor = "bg-red-50 text-red-700 border-2 border-red-700";
5878
5953
  stageStyle = { borderColor: "red", color: "red", backgroundColor: "transparent" };
5879
5954
  }
5880
- }
5881
- const stageKey = typeof stage[dataKey] === "string" ? stage[dataKey] : JSON.stringify(stage[dataKey]);
5882
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react34.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Tooltip, { delayDuration: 500, disableHoverableContent: true, children: [
5883
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5884
- "button",
5885
- {
5886
- className: `
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: `
5887
5974
  min-w-[70px] sm:min-w-[80px] w-full sm:w-auto px-3 sm:px-4 py-1.5 sm:py-2
5888
5975
  rounded-full text-xs sm:text-sm font-medium transition-colors duration-200
5889
5976
  whitespace-normal sm:whitespace-nowrap flex-shrink-0 max-w-[150px] text-ellipsis overflow-hidden
5890
- ${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"}
5891
5978
  ${isMobile ? "flex-1 text-center py-2.5" : ""}
5892
5979
  `,
5893
- onClick: () => {
5894
- if (isAllStagesCompleted) return;
5895
- onStageClick(stage[dataKey]);
5896
- },
5897
- style: stageStyle,
5898
- children: stageLabel
5899
- }
5900
- ) }),
5901
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TooltipContent, { side: "top", sideOffset: 6, hideArrow: true, children: stageLabel }),
5902
- !isMobile && index < stages.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" })
5903
- ] }, stageKey) }, stageKey);
5904
- })
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
+ })()
5905
5993
  }
5906
5994
  ),
5907
5995
  isShowBtn && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(