@diwauhris/ui 1.7.6 → 1.7.7

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/lib/assets/ui.css CHANGED
@@ -2332,6 +2332,10 @@
2332
2332
  border-color: rgb(255 255 255 / 0.2);
2333
2333
  }
2334
2334
 
2335
+ .border-white\/30 {
2336
+ border-color: rgb(255 255 255 / 0.3);
2337
+ }
2338
+
2335
2339
  .border-white\/50 {
2336
2340
  border-color: rgb(255 255 255 / 0.5);
2337
2341
  }
@@ -2374,6 +2378,10 @@
2374
2378
  background-color: rgb(45 138 202 / var(--tw-bg-opacity, 1));
2375
2379
  }
2376
2380
 
2381
+ .bg-\[\#2D8ACA\]\/50 {
2382
+ background-color: rgb(45 138 202 / 0.5);
2383
+ }
2384
+
2377
2385
  .bg-\[\#B91C1C\] {
2378
2386
  --tw-bg-opacity: 1;
2379
2387
  background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));
@@ -2879,6 +2887,10 @@
2879
2887
  background-color: rgb(255 255 255 / 0.3);
2880
2888
  }
2881
2889
 
2890
+ .bg-white\/5 {
2891
+ background-color: rgb(255 255 255 / 0.05);
2892
+ }
2893
+
2882
2894
  .bg-white\/60 {
2883
2895
  background-color: rgb(255 255 255 / 0.6);
2884
2896
  }
@@ -3806,6 +3818,10 @@
3806
3818
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3807
3819
  }
3808
3820
 
3821
+ .text-white\/20 {
3822
+ color: rgb(255 255 255 / 0.2);
3823
+ }
3824
+
3809
3825
  .text-white\/30 {
3810
3826
  color: rgb(255 255 255 / 0.3);
3811
3827
  }
@@ -3959,6 +3975,11 @@
3959
3975
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
3960
3976
  }
3961
3977
 
3978
+ .shadow-black\/20 {
3979
+ --tw-shadow-color: rgb(0 0 0 / 0.2);
3980
+ --tw-shadow: var(--tw-shadow-colored);
3981
+ }
3982
+
3962
3983
  .shadow-brand-blue\/15 {
3963
3984
  --tw-shadow-color: rgb(3 78 162 / 0.15);
3964
3985
  --tw-shadow: var(--tw-shadow-colored);
package/lib/index.cjs CHANGED
@@ -3519,14 +3519,19 @@ function resolveState(id, currentStep, completedSteps, disabledSteps) {
3519
3519
  if (id === currentStep) return "current";
3520
3520
  return "upcoming";
3521
3521
  }
3522
- function StepCircle({ state, number, icon }) {
3522
+ function StepCircle({ state, number, icon, dark = false }) {
3523
3523
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3524
- className: `flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-bold transition-all ${{
3524
+ className: `flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-bold transition-all ${(dark ? {
3525
+ completed: "border-[#2D8ACA] bg-[#2D8ACA] text-white",
3526
+ current: "border-white bg-white text-[#00377B] shadow-md shadow-black/20",
3527
+ upcoming: "border-white/30 bg-white/10 text-white/60",
3528
+ disabled: "border-white/10 bg-white/5 text-white/20"
3529
+ } : {
3525
3530
  completed: "border-brand-blue bg-brand-blue text-white",
3526
3531
  current: "border-brand-blue bg-white text-brand-blue shadow-md shadow-brand-blue/15",
3527
3532
  upcoming: "border-slate-300 bg-white text-slate-400",
3528
3533
  disabled: "border-slate-200 bg-slate-50 text-slate-300"
3529
- }[state]}`,
3534
+ })[state]}`,
3530
3535
  "aria-hidden": "true",
3531
3536
  children: state === "completed" ? icon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Check, {
3532
3537
  size: 16,
@@ -3534,8 +3539,10 @@ function StepCircle({ state, number, icon }) {
3534
3539
  }) : icon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: number })
3535
3540
  });
3536
3541
  }
3537
- function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [], orientation = "horizontal", className = "" }) {
3538
- if (!(orientation === "horizontal")) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3542
+ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [], orientation = "horizontal", theme = "light", className = "" }) {
3543
+ const isHorizontal = orientation === "horizontal";
3544
+ const dark = theme === "dark";
3545
+ if (!isHorizontal) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3539
3546
  role: "group",
3540
3547
  "aria-label": "Progress",
3541
3548
  className: cn("flex flex-col", className),
@@ -3545,6 +3552,18 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3545
3552
  const state = resolveState(step.id, currentStep, completedSteps, disabledSteps);
3546
3553
  const isCurrent = state === "current";
3547
3554
  const isLast = idx === steps.length - 1;
3555
+ const labelColor = dark ? {
3556
+ completed: "text-[#2D8ACA]",
3557
+ current: "text-white font-bold",
3558
+ upcoming: "text-white/60",
3559
+ disabled: "text-white/20"
3560
+ } : {
3561
+ completed: "text-brand-blue",
3562
+ current: "text-brand-navy font-bold",
3563
+ upcoming: "text-slate-500",
3564
+ disabled: "text-slate-300"
3565
+ };
3566
+ const connectorColor = dark ? state === "completed" ? "bg-[#2D8ACA]/50" : "bg-white/15" : state === "completed" ? "bg-brand-blue/50" : "bg-slate-200";
3548
3567
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
3549
3568
  "aria-current": isCurrent ? "step" : void 0,
3550
3569
  className: "flex items-start gap-4 pb-8 last:pb-0",
@@ -3553,23 +3572,19 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3553
3572
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StepCircle, {
3554
3573
  state,
3555
3574
  number: idx + 1,
3556
- icon: step.icon
3575
+ icon: step.icon,
3576
+ dark
3557
3577
  }), !isLast && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3558
- className: `mt-1 w-0.5 flex-1 min-h-[32px] ${state === "completed" ? "bg-brand-blue/50" : "bg-slate-200"}`,
3578
+ className: `mt-1 w-0.5 flex-1 min-h-[32px] ${connectorColor}`,
3559
3579
  "aria-hidden": "true"
3560
3580
  })]
3561
3581
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3562
3582
  className: "min-w-0 flex-1 pt-1",
3563
3583
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
3564
- className: `text-sm leading-tight ${{
3565
- completed: "text-brand-blue",
3566
- current: "text-brand-navy font-bold",
3567
- upcoming: "text-slate-500",
3568
- disabled: "text-slate-300"
3569
- }[state]}`,
3584
+ className: `text-sm leading-tight ${labelColor[state]}`,
3570
3585
  children: step.label
3571
3586
  }), step.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
3572
- className: "mt-0.5 text-xs text-slate-400 leading-tight",
3587
+ className: `mt-0.5 text-xs leading-tight ${dark ? "text-white/40" : "text-slate-400"}`,
3573
3588
  children: step.description
3574
3589
  })]
3575
3590
  })]
@@ -3578,7 +3593,12 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3578
3593
  })
3579
3594
  });
3580
3595
  const resolvedStates = steps.map((step) => resolveState(step.id, currentStep, completedSteps, disabledSteps));
3581
- const labelColor = {
3596
+ const labelColor = dark ? {
3597
+ completed: "text-[#2D8ACA]",
3598
+ current: "text-white font-bold",
3599
+ upcoming: "text-white/60",
3600
+ disabled: "text-white/20"
3601
+ } : {
3582
3602
  completed: "text-brand-blue",
3583
3603
  current: "text-brand-navy font-bold",
3584
3604
  upcoming: "text-slate-500",
@@ -3596,6 +3616,9 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3596
3616
  const isCurrent = state === "current";
3597
3617
  const isLast = idx === steps.length - 1;
3598
3618
  const prevState = idx > 0 ? resolvedStates[idx - 1] : null;
3619
+ const connectorDone = prevState === "completed" || prevState === "current";
3620
+ const connectorLeft = dark ? connectorDone ? "bg-[#2D8ACA]/50" : "bg-white/15" : connectorDone ? "bg-brand-blue/50" : "bg-slate-200";
3621
+ const connectorRight = dark ? state === "completed" ? "bg-[#2D8ACA]/50" : "bg-white/15" : state === "completed" ? "bg-brand-blue/50" : "bg-slate-200";
3599
3622
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
3600
3623
  "aria-current": isCurrent ? "step" : void 0,
3601
3624
  className: "flex flex-col items-center",
@@ -3603,7 +3626,7 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3603
3626
  className: "flex w-full items-center",
3604
3627
  children: [
3605
3628
  idx > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3606
- className: `h-0.5 flex-1 ${prevState === "completed" || prevState === "current" ? "bg-brand-blue/50" : "bg-slate-200"}`,
3629
+ className: `h-0.5 flex-1 ${connectorLeft}`,
3607
3630
  "aria-hidden": "true"
3608
3631
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3609
3632
  className: "flex-1",
@@ -3614,11 +3637,12 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3614
3637
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StepCircle, {
3615
3638
  state,
3616
3639
  number: idx + 1,
3617
- icon: step.icon
3640
+ icon: step.icon,
3641
+ dark
3618
3642
  })
3619
3643
  }),
3620
3644
  !isLast ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3621
- className: `h-0.5 flex-1 ${state === "completed" ? "bg-brand-blue/50" : "bg-slate-200"}`,
3645
+ className: `h-0.5 flex-1 ${connectorRight}`,
3622
3646
  "aria-hidden": "true"
3623
3647
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3624
3648
  className: "flex-1",
@@ -3631,7 +3655,7 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3631
3655
  className: `text-sm leading-tight ${labelColor[state]}`,
3632
3656
  children: step.label
3633
3657
  }), step.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
3634
- className: "mt-0.5 text-xs text-slate-400 leading-tight",
3658
+ className: `mt-0.5 text-xs leading-tight ${dark ? "text-white/40" : "text-slate-400"}`,
3635
3659
  children: step.description
3636
3660
  })]
3637
3661
  })]
package/lib/index.mjs CHANGED
@@ -3495,14 +3495,19 @@ function resolveState(id, currentStep, completedSteps, disabledSteps) {
3495
3495
  if (id === currentStep) return "current";
3496
3496
  return "upcoming";
3497
3497
  }
3498
- function StepCircle({ state, number, icon }) {
3498
+ function StepCircle({ state, number, icon, dark = false }) {
3499
3499
  return /* @__PURE__ */ jsx("div", {
3500
- className: `flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-bold transition-all ${{
3500
+ className: `flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-bold transition-all ${(dark ? {
3501
+ completed: "border-[#2D8ACA] bg-[#2D8ACA] text-white",
3502
+ current: "border-white bg-white text-[#00377B] shadow-md shadow-black/20",
3503
+ upcoming: "border-white/30 bg-white/10 text-white/60",
3504
+ disabled: "border-white/10 bg-white/5 text-white/20"
3505
+ } : {
3501
3506
  completed: "border-brand-blue bg-brand-blue text-white",
3502
3507
  current: "border-brand-blue bg-white text-brand-blue shadow-md shadow-brand-blue/15",
3503
3508
  upcoming: "border-slate-300 bg-white text-slate-400",
3504
3509
  disabled: "border-slate-200 bg-slate-50 text-slate-300"
3505
- }[state]}`,
3510
+ })[state]}`,
3506
3511
  "aria-hidden": "true",
3507
3512
  children: state === "completed" ? icon ?? /* @__PURE__ */ jsx(Check, {
3508
3513
  size: 16,
@@ -3510,8 +3515,10 @@ function StepCircle({ state, number, icon }) {
3510
3515
  }) : icon ?? /* @__PURE__ */ jsx("span", { children: number })
3511
3516
  });
3512
3517
  }
3513
- function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [], orientation = "horizontal", className = "" }) {
3514
- if (!(orientation === "horizontal")) return /* @__PURE__ */ jsx("div", {
3518
+ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [], orientation = "horizontal", theme = "light", className = "" }) {
3519
+ const isHorizontal = orientation === "horizontal";
3520
+ const dark = theme === "dark";
3521
+ if (!isHorizontal) return /* @__PURE__ */ jsx("div", {
3515
3522
  role: "group",
3516
3523
  "aria-label": "Progress",
3517
3524
  className: cn("flex flex-col", className),
@@ -3521,6 +3528,18 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3521
3528
  const state = resolveState(step.id, currentStep, completedSteps, disabledSteps);
3522
3529
  const isCurrent = state === "current";
3523
3530
  const isLast = idx === steps.length - 1;
3531
+ const labelColor = dark ? {
3532
+ completed: "text-[#2D8ACA]",
3533
+ current: "text-white font-bold",
3534
+ upcoming: "text-white/60",
3535
+ disabled: "text-white/20"
3536
+ } : {
3537
+ completed: "text-brand-blue",
3538
+ current: "text-brand-navy font-bold",
3539
+ upcoming: "text-slate-500",
3540
+ disabled: "text-slate-300"
3541
+ };
3542
+ const connectorColor = dark ? state === "completed" ? "bg-[#2D8ACA]/50" : "bg-white/15" : state === "completed" ? "bg-brand-blue/50" : "bg-slate-200";
3524
3543
  return /* @__PURE__ */ jsxs("li", {
3525
3544
  "aria-current": isCurrent ? "step" : void 0,
3526
3545
  className: "flex items-start gap-4 pb-8 last:pb-0",
@@ -3529,23 +3548,19 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3529
3548
  children: [/* @__PURE__ */ jsx(StepCircle, {
3530
3549
  state,
3531
3550
  number: idx + 1,
3532
- icon: step.icon
3551
+ icon: step.icon,
3552
+ dark
3533
3553
  }), !isLast && /* @__PURE__ */ jsx("div", {
3534
- className: `mt-1 w-0.5 flex-1 min-h-[32px] ${state === "completed" ? "bg-brand-blue/50" : "bg-slate-200"}`,
3554
+ className: `mt-1 w-0.5 flex-1 min-h-[32px] ${connectorColor}`,
3535
3555
  "aria-hidden": "true"
3536
3556
  })]
3537
3557
  }), /* @__PURE__ */ jsxs("div", {
3538
3558
  className: "min-w-0 flex-1 pt-1",
3539
3559
  children: [/* @__PURE__ */ jsx("p", {
3540
- className: `text-sm leading-tight ${{
3541
- completed: "text-brand-blue",
3542
- current: "text-brand-navy font-bold",
3543
- upcoming: "text-slate-500",
3544
- disabled: "text-slate-300"
3545
- }[state]}`,
3560
+ className: `text-sm leading-tight ${labelColor[state]}`,
3546
3561
  children: step.label
3547
3562
  }), step.description && /* @__PURE__ */ jsx("p", {
3548
- className: "mt-0.5 text-xs text-slate-400 leading-tight",
3563
+ className: `mt-0.5 text-xs leading-tight ${dark ? "text-white/40" : "text-slate-400"}`,
3549
3564
  children: step.description
3550
3565
  })]
3551
3566
  })]
@@ -3554,7 +3569,12 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3554
3569
  })
3555
3570
  });
3556
3571
  const resolvedStates = steps.map((step) => resolveState(step.id, currentStep, completedSteps, disabledSteps));
3557
- const labelColor = {
3572
+ const labelColor = dark ? {
3573
+ completed: "text-[#2D8ACA]",
3574
+ current: "text-white font-bold",
3575
+ upcoming: "text-white/60",
3576
+ disabled: "text-white/20"
3577
+ } : {
3558
3578
  completed: "text-brand-blue",
3559
3579
  current: "text-brand-navy font-bold",
3560
3580
  upcoming: "text-slate-500",
@@ -3572,6 +3592,9 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3572
3592
  const isCurrent = state === "current";
3573
3593
  const isLast = idx === steps.length - 1;
3574
3594
  const prevState = idx > 0 ? resolvedStates[idx - 1] : null;
3595
+ const connectorDone = prevState === "completed" || prevState === "current";
3596
+ const connectorLeft = dark ? connectorDone ? "bg-[#2D8ACA]/50" : "bg-white/15" : connectorDone ? "bg-brand-blue/50" : "bg-slate-200";
3597
+ const connectorRight = dark ? state === "completed" ? "bg-[#2D8ACA]/50" : "bg-white/15" : state === "completed" ? "bg-brand-blue/50" : "bg-slate-200";
3575
3598
  return /* @__PURE__ */ jsxs("li", {
3576
3599
  "aria-current": isCurrent ? "step" : void 0,
3577
3600
  className: "flex flex-col items-center",
@@ -3579,7 +3602,7 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3579
3602
  className: "flex w-full items-center",
3580
3603
  children: [
3581
3604
  idx > 0 ? /* @__PURE__ */ jsx("div", {
3582
- className: `h-0.5 flex-1 ${prevState === "completed" || prevState === "current" ? "bg-brand-blue/50" : "bg-slate-200"}`,
3605
+ className: `h-0.5 flex-1 ${connectorLeft}`,
3583
3606
  "aria-hidden": "true"
3584
3607
  }) : /* @__PURE__ */ jsx("div", {
3585
3608
  className: "flex-1",
@@ -3590,11 +3613,12 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3590
3613
  children: /* @__PURE__ */ jsx(StepCircle, {
3591
3614
  state,
3592
3615
  number: idx + 1,
3593
- icon: step.icon
3616
+ icon: step.icon,
3617
+ dark
3594
3618
  })
3595
3619
  }),
3596
3620
  !isLast ? /* @__PURE__ */ jsx("div", {
3597
- className: `h-0.5 flex-1 ${state === "completed" ? "bg-brand-blue/50" : "bg-slate-200"}`,
3621
+ className: `h-0.5 flex-1 ${connectorRight}`,
3598
3622
  "aria-hidden": "true"
3599
3623
  }) : /* @__PURE__ */ jsx("div", {
3600
3624
  className: "flex-1",
@@ -3607,7 +3631,7 @@ function Stepper({ steps, currentStep, completedSteps = [], disabledSteps = [],
3607
3631
  className: `text-sm leading-tight ${labelColor[state]}`,
3608
3632
  children: step.label
3609
3633
  }), step.description && /* @__PURE__ */ jsx("p", {
3610
- className: "mt-0.5 text-xs text-slate-400 leading-tight",
3634
+ className: `mt-0.5 text-xs leading-tight ${dark ? "text-white/40" : "text-slate-400"}`,
3611
3635
  children: step.description
3612
3636
  })]
3613
3637
  })]
@@ -38,6 +38,8 @@ export interface StepperProps {
38
38
  /** IDs of steps that are disabled */
39
39
  disabledSteps?: string[];
40
40
  orientation?: 'horizontal' | 'vertical';
41
+ /** Use "dark" when rendering on a dark/navy background */
42
+ theme?: 'light' | 'dark';
41
43
  className?: string;
42
44
  }
43
- export declare function Stepper({ steps, currentStep, completedSteps, disabledSteps, orientation, className, }: StepperProps): import("react").JSX.Element;
45
+ export declare function Stepper({ steps, currentStep, completedSteps, disabledSteps, orientation, theme, className, }: StepperProps): import("react").JSX.Element;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@diwauhris/ui",
3
3
  "private": false,
4
- "version": "1.7.6",
4
+ "version": "1.7.7",
5
5
  "type": "module",
6
6
  "description": "DIWA UHRIS UI component library — React + Tailwind CSS",
7
7
  "keywords": [