@datatechsolutions/ui 3.9.1 → 3.11.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.
Files changed (117) hide show
  1. package/dist/astrlabe/contracts.d.mts +18 -2
  2. package/dist/astrlabe/contracts.d.ts +18 -2
  3. package/dist/astrlabe/index.d.mts +2 -2
  4. package/dist/astrlabe/index.d.ts +2 -2
  5. package/dist/astrlabe/index.js +109 -109
  6. package/dist/astrlabe/index.mjs +5 -5
  7. package/dist/astrlabe/workflow-canvas.js +5 -5
  8. package/dist/astrlabe/workflow-canvas.mjs +4 -4
  9. package/dist/{chunk-SJ6SUS7H.mjs → chunk-2AJ73ULK.mjs} +3 -3
  10. package/dist/{chunk-SJ6SUS7H.mjs.map → chunk-2AJ73ULK.mjs.map} +1 -1
  11. package/dist/{chunk-WJENX6KB.js → chunk-35O2X7WY.js} +9 -9
  12. package/dist/{chunk-WJENX6KB.js.map → chunk-35O2X7WY.js.map} +1 -1
  13. package/dist/{chunk-ZQRUAXGP.mjs → chunk-35P352JX.mjs} +331 -200
  14. package/dist/chunk-35P352JX.mjs.map +1 -0
  15. package/dist/{chunk-6QJI5YOJ.mjs → chunk-37FWIPYO.mjs} +3 -3
  16. package/dist/{chunk-6QJI5YOJ.mjs.map → chunk-37FWIPYO.mjs.map} +1 -1
  17. package/dist/{chunk-EAIE4QGD.mjs → chunk-3US2QXEF.mjs} +20 -20
  18. package/dist/{chunk-EAIE4QGD.mjs.map → chunk-3US2QXEF.mjs.map} +1 -1
  19. package/dist/{chunk-R6GEJBFC.js → chunk-62BD4WLW.js} +34 -34
  20. package/dist/{chunk-R6GEJBFC.js.map → chunk-62BD4WLW.js.map} +1 -1
  21. package/dist/{chunk-7AM2SXEF.js → chunk-6TKCMQ75.js} +85 -85
  22. package/dist/{chunk-7AM2SXEF.js.map → chunk-6TKCMQ75.js.map} +1 -1
  23. package/dist/{chunk-OVQ4MKCV.mjs → chunk-7D52TFVL.mjs} +3 -3
  24. package/dist/{chunk-OVQ4MKCV.mjs.map → chunk-7D52TFVL.mjs.map} +1 -1
  25. package/dist/{chunk-PD3JLDA5.mjs → chunk-7KPMLHPR.mjs} +3 -3
  26. package/dist/{chunk-PD3JLDA5.mjs.map → chunk-7KPMLHPR.mjs.map} +1 -1
  27. package/dist/{chunk-DQIEVLA3.js → chunk-7MPIYSRH.js} +63 -63
  28. package/dist/{chunk-DQIEVLA3.js.map → chunk-7MPIYSRH.js.map} +1 -1
  29. package/dist/{chunk-2ZY3IQ2I.mjs → chunk-7V7WEXHS.mjs} +3 -3
  30. package/dist/{chunk-2ZY3IQ2I.mjs.map → chunk-7V7WEXHS.mjs.map} +1 -1
  31. package/dist/{chunk-T4IYOKHR.js → chunk-BCJATFZE.js} +25 -25
  32. package/dist/{chunk-T4IYOKHR.js.map → chunk-BCJATFZE.js.map} +1 -1
  33. package/dist/{chunk-ZDXEGSCF.js → chunk-BO3RXG6M.js} +45 -45
  34. package/dist/{chunk-ZDXEGSCF.js.map → chunk-BO3RXG6M.js.map} +1 -1
  35. package/dist/{chunk-CRBGZA6Y.js → chunk-G52HXPSB.js} +13 -13
  36. package/dist/{chunk-CRBGZA6Y.js.map → chunk-G52HXPSB.js.map} +1 -1
  37. package/dist/{chunk-UZIICTIY.js → chunk-GKI74CPB.js} +55 -55
  38. package/dist/{chunk-UZIICTIY.js.map → chunk-GKI74CPB.js.map} +1 -1
  39. package/dist/{chunk-RFUSH7WD.js → chunk-GTJGX7IZ.js} +10 -10
  40. package/dist/{chunk-RFUSH7WD.js.map → chunk-GTJGX7IZ.js.map} +1 -1
  41. package/dist/{chunk-U6VFS3RD.js → chunk-H475T2N7.js} +143 -143
  42. package/dist/chunk-H475T2N7.js.map +1 -0
  43. package/dist/{chunk-ZQEMKEEH.mjs → chunk-HUAWGBYL.mjs} +3 -3
  44. package/dist/{chunk-ZQEMKEEH.mjs.map → chunk-HUAWGBYL.mjs.map} +1 -1
  45. package/dist/{chunk-RHRJXK5R.mjs → chunk-IGOMJHC6.mjs} +11 -3
  46. package/dist/chunk-IGOMJHC6.mjs.map +1 -0
  47. package/dist/{chunk-6E2YH67A.js → chunk-JTD3BBVI.js} +35 -35
  48. package/dist/{chunk-6E2YH67A.js.map → chunk-JTD3BBVI.js.map} +1 -1
  49. package/dist/{chunk-2E7HYTS7.mjs → chunk-K4AJL4BH.mjs} +3 -3
  50. package/dist/{chunk-2E7HYTS7.mjs.map → chunk-K4AJL4BH.mjs.map} +1 -1
  51. package/dist/{chunk-OEZ7GAJY.mjs → chunk-KTEEXEAX.mjs} +6 -6
  52. package/dist/{chunk-OEZ7GAJY.mjs.map → chunk-KTEEXEAX.mjs.map} +1 -1
  53. package/dist/{chunk-WS3IJFPW.mjs → chunk-NM3YTQ26.mjs} +3 -3
  54. package/dist/{chunk-WS3IJFPW.mjs.map → chunk-NM3YTQ26.mjs.map} +1 -1
  55. package/dist/{chunk-BWUFLW5W.mjs → chunk-NRVV4PHB.mjs} +7 -7
  56. package/dist/{chunk-BWUFLW5W.mjs.map → chunk-NRVV4PHB.mjs.map} +1 -1
  57. package/dist/{chunk-A2RIX2RK.js → chunk-O2CUOJ74.js} +4 -4
  58. package/dist/{chunk-A2RIX2RK.js.map → chunk-O2CUOJ74.js.map} +1 -1
  59. package/dist/{chunk-CLTNCBSP.js → chunk-PHBZ3TXE.js} +4 -4
  60. package/dist/{chunk-CLTNCBSP.js.map → chunk-PHBZ3TXE.js.map} +1 -1
  61. package/dist/{chunk-ARLYOLSO.mjs → chunk-R3CGJK7D.mjs} +3 -3
  62. package/dist/{chunk-ARLYOLSO.mjs.map → chunk-R3CGJK7D.mjs.map} +1 -1
  63. package/dist/{chunk-GQWC4EKE.mjs → chunk-TCIK6WHT.mjs} +24 -22
  64. package/dist/chunk-TCIK6WHT.mjs.map +1 -0
  65. package/dist/{chunk-IVKFXPLO.js → chunk-Z6FZQOTW.js} +46 -44
  66. package/dist/chunk-Z6FZQOTW.js.map +1 -0
  67. package/dist/{chunk-MT66VKLS.js → chunk-ZGVN23J4.js} +331 -200
  68. package/dist/chunk-ZGVN23J4.js.map +1 -0
  69. package/dist/{chunk-AXBD6OAF.mjs → chunk-ZJMYLUZ2.mjs} +12 -12
  70. package/dist/chunk-ZJMYLUZ2.mjs.map +1 -0
  71. package/dist/{chunk-SY4MUT5V.js → chunk-ZUU7G3PC.js} +11 -2
  72. package/dist/chunk-ZUU7G3PC.js.map +1 -0
  73. package/dist/index.d.mts +124 -34
  74. package/dist/index.d.ts +124 -34
  75. package/dist/index.js +666 -666
  76. package/dist/index.mjs +3 -3
  77. package/dist/platform/admin/index.js +11 -11
  78. package/dist/platform/admin/index.mjs +5 -5
  79. package/dist/platform/agents-workspace.js +8 -8
  80. package/dist/platform/agents-workspace.mjs +7 -7
  81. package/dist/platform/app-shell.js +5 -5
  82. package/dist/platform/app-shell.mjs +4 -4
  83. package/dist/platform/auth/index.js +23 -23
  84. package/dist/platform/auth/index.mjs +5 -5
  85. package/dist/platform/billing/index.js +5 -5
  86. package/dist/platform/billing/index.mjs +4 -4
  87. package/dist/platform/impersonation/index.js +5 -5
  88. package/dist/platform/impersonation/index.mjs +4 -4
  89. package/dist/platform/index.js +86 -86
  90. package/dist/platform/index.mjs +19 -19
  91. package/dist/platform/pages/index.d.mts +238 -6
  92. package/dist/platform/pages/index.d.ts +238 -6
  93. package/dist/platform/pages/index.js +2093 -345
  94. package/dist/platform/pages/index.js.map +1 -1
  95. package/dist/platform/pages/index.mjs +1872 -126
  96. package/dist/platform/pages/index.mjs.map +1 -1
  97. package/dist/platform/settings/index.js +8 -8
  98. package/dist/platform/settings/index.mjs +7 -7
  99. package/dist/platform/workflow-api-client.d.mts +1 -1
  100. package/dist/platform/workflow-api-client.d.ts +1 -1
  101. package/dist/platform/workflow-api-client.js +65 -61
  102. package/dist/platform/workflow-api-client.mjs +1 -1
  103. package/dist/platform/workflow-canvas-shell.js +6 -6
  104. package/dist/platform/workflow-canvas-shell.mjs +5 -5
  105. package/dist/{rule-form-BYJzyork.d.mts → rule-form-BkKCY8Tc.d.mts} +8 -2
  106. package/dist/{rule-form-BYJzyork.d.ts → rule-form-CBD8wlrw.d.ts} +8 -2
  107. package/dist/{workflow-api-client-CpFl3WcG.d.mts → workflow-api-client-D9_0Spdz.d.mts} +16 -1
  108. package/dist/{workflow-api-client-uLICOanv.d.ts → workflow-api-client-E1QFRgeP.d.ts} +16 -1
  109. package/package.json +1 -1
  110. package/dist/chunk-AXBD6OAF.mjs.map +0 -1
  111. package/dist/chunk-GQWC4EKE.mjs.map +0 -1
  112. package/dist/chunk-IVKFXPLO.js.map +0 -1
  113. package/dist/chunk-MT66VKLS.js.map +0 -1
  114. package/dist/chunk-RHRJXK5R.mjs.map +0 -1
  115. package/dist/chunk-SY4MUT5V.js.map +0 -1
  116. package/dist/chunk-U6VFS3RD.js.map +0 -1
  117. package/dist/chunk-ZQRUAXGP.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkZUU7G3PC_js = require('./chunk-ZUU7G3PC.js');
4
5
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
5
- var chunkSY4MUT5V_js = require('./chunk-SY4MUT5V.js');
6
6
  var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
7
7
  var chunkUZ3CMNUJ_js = require('./chunk-UZ3CMNUJ.js');
8
8
  var chunkS7KHTUHA_js = require('./chunk-S7KHTUHA.js');
@@ -12,12 +12,12 @@ var HeroIcons = require('@heroicons/react/24/outline');
12
12
  var jsxRuntime = require('react/jsx-runtime');
13
13
  var solid = require('@heroicons/react/20/solid');
14
14
  var Headless3 = require('@headlessui/react');
15
- var solid$1 = require('@heroicons/react/24/solid');
16
15
  var Popover = require('@radix-ui/react-popover');
17
16
  var clsx4 = require('clsx');
18
17
  var reactDom = require('react-dom');
19
18
  var dateFns = require('date-fns');
20
19
  var locale = require('date-fns/locale');
20
+ var solid$1 = require('@heroicons/react/24/solid');
21
21
  var reactTransitionProgress = require('react-transition-progress');
22
22
  var lucideReact = require('lucide-react');
23
23
  var d3Geo = require('d3-geo');
@@ -1800,94 +1800,84 @@ var StatusBadge = React9.forwardRef(function StatusBadge2({ status, label, size
1800
1800
  }
1801
1801
  );
1802
1802
  });
1803
- function classNames(...classes) {
1804
- return classes.filter(Boolean).join(" ");
1805
- }
1806
- function StepTimeline({
1803
+ var accentStyles = {
1804
+ indigo: {
1805
+ currentPill: "bg-indigo-500/15 text-indigo-700 dark:bg-indigo-500/25 dark:text-indigo-300",
1806
+ completePill: "bg-emerald-500/10 text-emerald-700 hover:bg-emerald-500/20 dark:bg-emerald-500/20 dark:text-emerald-300",
1807
+ currentDot: "bg-indigo-500 text-white",
1808
+ completeDot: "bg-emerald-500 text-white",
1809
+ connector: "bg-emerald-500/30 dark:bg-emerald-500/20"
1810
+ },
1811
+ blue: {
1812
+ currentPill: "bg-blue-500/15 text-blue-700 dark:bg-blue-500/25 dark:text-blue-300",
1813
+ completePill: "bg-emerald-500/10 text-emerald-700 hover:bg-emerald-500/20 dark:bg-emerald-500/20 dark:text-emerald-300",
1814
+ currentDot: "bg-blue-500 text-white",
1815
+ completeDot: "bg-emerald-500 text-white",
1816
+ connector: "bg-emerald-500/30 dark:bg-emerald-500/20"
1817
+ },
1818
+ emerald: {
1819
+ currentPill: "bg-emerald-500/15 text-emerald-700 dark:bg-emerald-500/25 dark:text-emerald-300",
1820
+ completePill: "bg-emerald-500/10 text-emerald-700 hover:bg-emerald-500/20 dark:bg-emerald-500/20 dark:text-emerald-300",
1821
+ currentDot: "bg-emerald-500 text-white",
1822
+ completeDot: "bg-emerald-500 text-white",
1823
+ connector: "bg-emerald-500/30 dark:bg-emerald-500/20"
1824
+ },
1825
+ violet: {
1826
+ currentPill: "bg-violet-500/15 text-violet-700 dark:bg-violet-500/25 dark:text-violet-300",
1827
+ completePill: "bg-emerald-500/10 text-emerald-700 hover:bg-emerald-500/20 dark:bg-emerald-500/20 dark:text-emerald-300",
1828
+ currentDot: "bg-violet-500 text-white",
1829
+ completeDot: "bg-emerald-500 text-white",
1830
+ connector: "bg-emerald-500/30 dark:bg-emerald-500/20"
1831
+ }
1832
+ };
1833
+ var upcomingPill = "bg-slate-500/8 text-slate-400 dark:bg-white/5 dark:text-white/30";
1834
+ var upcomingDot = "bg-slate-200 text-slate-400 dark:bg-white/10 dark:text-white/30";
1835
+ var upcomingConnector = "bg-slate-200 dark:bg-white/10";
1836
+ function StepIndicator({
1807
1837
  steps,
1838
+ currentStep,
1839
+ onStepChange,
1808
1840
  progressLabel,
1809
- onStepClick,
1810
- renderCompleteContent
1841
+ accent = "indigo"
1811
1842
  }) {
1812
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lg:border-t lg:border-b lg:border-gray-200 dark:lg:border-white/15", children: /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": progressLabel, className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsx(
1813
- "ol",
1814
- {
1815
- role: "list",
1816
- className: "overflow-hidden rounded-md lg:flex lg:rounded-none lg:border-r lg:border-l lg:border-gray-200 dark:lg:border-white/15",
1817
- children: steps.map((step, stepIndex) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "relative overflow-hidden lg:flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs(
1843
+ const tone = accentStyles[accent];
1844
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": progressLabel, className: "flex items-center gap-2", children: steps.map((step, index) => {
1845
+ const isCompleted = index < currentStep;
1846
+ const isCurrent = index === currentStep;
1847
+ const isClickable = isCompleted && Boolean(onStepChange);
1848
+ const pillTone = isCurrent ? tone.currentPill : isCompleted ? tone.completePill : upcomingPill;
1849
+ const dotTone = isCurrent ? tone.currentDot : isCompleted ? tone.completeDot : upcomingDot;
1850
+ const connectorTone = index < currentStep ? tone.connector : upcomingConnector;
1851
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 items-center gap-2", children: [
1852
+ /* @__PURE__ */ jsxRuntime.jsxs(
1818
1853
  "button",
1819
1854
  {
1820
1855
  type: "button",
1821
- onClick: () => onStepClick?.(stepIndex),
1822
- disabled: step.status === "upcoming",
1823
- className: classNames(
1824
- step.status === "upcoming" ? "cursor-not-allowed" : "cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800",
1825
- stepIndex === 0 ? "rounded-t-md border-b-0" : "",
1826
- stepIndex === steps.length - 1 ? "rounded-b-md border-t-0" : "",
1827
- "w-full overflow-hidden border border-gray-200 text-left transition-colors lg:border-0 dark:border-white/15"
1828
- ),
1856
+ onClick: isClickable ? () => onStepChange?.(index) : void 0,
1857
+ disabled: !isClickable && !isCurrent,
1858
+ "aria-current": isCurrent ? "step" : void 0,
1859
+ className: `flex items-center gap-2 rounded-full px-3 py-1.5 text-xs font-medium transition-all duration-200 backdrop-blur-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 ${pillTone} ${isClickable ? "cursor-pointer" : ""}`,
1829
1860
  children: [
1830
- step.status === "complete" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group", children: [
1831
- /* @__PURE__ */ jsxRuntime.jsx(
1832
- "span",
1833
- {
1834
- "aria-hidden": "true",
1835
- className: "absolute top-0 left-0 h-full w-1 bg-transparent group-hover:bg-gray-200 lg:top-auto lg:bottom-0 lg:h-1 lg:w-full dark:group-hover:bg-white/20"
1836
- }
1837
- ),
1838
- renderCompleteContent ? renderCompleteContent(step) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: classNames(stepIndex !== 0 ? "lg:pl-9" : "", "flex items-start px-6 py-5 text-sm font-medium"), children: [
1839
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-blue-600 dark:bg-blue-500", children: /* @__PURE__ */ jsxRuntime.jsx(solid$1.CheckIcon, { "aria-hidden": "true", className: "h-5 w-5 text-white" }) }) }),
1840
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mt-0.5 ml-4 flex min-w-0 flex-col", children: [
1841
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-white", children: step.name }),
1842
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-500 dark:text-gray-400", children: step.description })
1843
- ] })
1844
- ] })
1845
- ] }) : step.status === "current" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { "aria-current": "step", children: [
1846
- /* @__PURE__ */ jsxRuntime.jsx(
1847
- "span",
1848
- {
1849
- "aria-hidden": "true",
1850
- className: "absolute top-0 left-0 h-full w-1 bg-blue-600 lg:top-auto lg:bottom-0 lg:h-1 lg:w-full dark:bg-blue-500"
1851
- }
1852
- ),
1853
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: classNames(stepIndex !== 0 ? "lg:pl-9" : "", "flex items-start px-6 py-5 text-sm font-medium"), children: [
1854
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 items-center justify-center rounded-full border-2 border-blue-600 dark:border-blue-500", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-blue-600 dark:text-blue-400", children: step.id }) }) }),
1855
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mt-0.5 ml-4 flex min-w-0 flex-col", children: [
1856
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-blue-600 dark:text-blue-400", children: step.name }),
1857
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-500 dark:text-gray-400", children: step.description })
1858
- ] })
1859
- ] })
1860
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group", children: [
1861
- /* @__PURE__ */ jsxRuntime.jsx(
1862
- "span",
1863
- {
1864
- "aria-hidden": "true",
1865
- className: "absolute top-0 left-0 h-full w-1 bg-transparent group-hover:bg-gray-200 lg:top-auto lg:bottom-0 lg:h-1 lg:w-full dark:group-hover:bg-white/20"
1866
- }
1867
- ),
1868
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: classNames(stepIndex !== 0 ? "lg:pl-9" : "", "flex items-start px-6 py-5 text-sm font-medium"), children: [
1869
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 items-center justify-center rounded-full border-2 border-gray-300 dark:border-white/15", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-500 dark:text-gray-400", children: step.id }) }) }),
1870
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mt-0.5 ml-4 flex min-w-0 flex-col", children: [
1871
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-500 dark:text-gray-400", children: step.name }),
1872
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-500 dark:text-gray-400", children: step.description })
1873
- ] })
1874
- ] })
1875
- ] }),
1876
- stepIndex !== 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", className: "absolute inset-0 top-0 left-0 hidden w-3 lg:block", children: /* @__PURE__ */ jsxRuntime.jsx(
1877
- "svg",
1861
+ /* @__PURE__ */ jsxRuntime.jsx(
1862
+ "span",
1878
1863
  {
1879
- fill: "none",
1880
- viewBox: "0 0 12 82",
1881
- preserveAspectRatio: "none",
1882
- className: "h-full w-full text-gray-200 dark:text-white/15",
1883
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0.5 0V31L10.5 41L0.5 51V82", stroke: "currentColor", vectorEffect: "non-scaling-stroke" })
1864
+ className: `flex h-5 w-5 items-center justify-center rounded-full text-[10px] font-bold ${dotTone}`,
1865
+ children: step.icon ? step.icon : isCompleted ? /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.CheckIcon, { className: "h-3 w-3" }) : index + 1
1884
1866
  }
1885
- ) }) : null
1867
+ ),
1868
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:inline", children: step.title })
1886
1869
  ]
1887
1870
  }
1888
- ) }, step.id))
1889
- }
1890
- ) }) });
1871
+ ),
1872
+ index < steps.length - 1 ? /* @__PURE__ */ jsxRuntime.jsx(
1873
+ "div",
1874
+ {
1875
+ "aria-hidden": true,
1876
+ className: `h-px flex-1 transition-colors duration-200 ${connectorTone}`
1877
+ }
1878
+ ) : null
1879
+ ] }, step.id);
1880
+ }) });
1891
1881
  }
1892
1882
  function AgentAnalysisCard({ name, avatar, duration: duration2, output }) {
1893
1883
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liquid-surface rounded-xl p-3 transition-all duration-300", children: [
@@ -2099,10 +2089,12 @@ function LifecycleSection({ data }) {
2099
2089
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-zinc-950/10 bg-white p-4 dark:border-white/10 dark:bg-zinc-900", children: [
2100
2090
  data.title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-3 text-sm font-semibold text-slate-900 dark:text-slate-100", children: data.title }),
2101
2091
  /* @__PURE__ */ jsxRuntime.jsx(
2102
- StepTimeline,
2092
+ StepIndicator,
2103
2093
  {
2104
- steps: data.steps,
2105
- progressLabel: data.progressLabel ?? data.title ?? "Progress"
2094
+ accent: "indigo",
2095
+ currentStep: data.steps.filter((step) => step.status === "complete").length,
2096
+ progressLabel: data.progressLabel ?? data.title ?? "Progress",
2097
+ steps: data.steps.map((step) => ({ id: step.id, title: step.name }))
2106
2098
  }
2107
2099
  )
2108
2100
  ] });
@@ -2278,7 +2270,7 @@ function InputRequestForm({
2278
2270
  try {
2279
2271
  const payload = decision === "approved" ? sanitizeForSubmit(values) : void 0;
2280
2272
  const reason = decision === "rejected" ? typeof values.reason === "string" ? values.reason : "rejected" : void 0;
2281
- await chunkSY4MUT5V_js.submitApproval(runId, data.nodeId, {
2273
+ await chunkZUU7G3PC_js.submitApproval(runId, data.nodeId, {
2282
2274
  approved: decision === "approved",
2283
2275
  ...payload ? { payload } : {},
2284
2276
  ...reason ? { reason } : {}
@@ -2526,7 +2518,7 @@ function StreamingDashboard({
2526
2518
  if (phase === "completed" || phase === "failed" || phase === "cancelled") {
2527
2519
  return;
2528
2520
  }
2529
- const unsubscribe = chunkSY4MUT5V_js.subscribeToRunEvents(
2521
+ const unsubscribe = chunkZUU7G3PC_js.subscribeToRunEvents(
2530
2522
  runId,
2531
2523
  (event) => handleEvent(event),
2532
2524
  (err) => {
@@ -3230,54 +3222,54 @@ function InfoPopover({ title, content, triggerLabel = "Info" }) {
3230
3222
  }
3231
3223
  var colorClasses = {
3232
3224
  emerald: {
3233
- iconBg: "bg-emerald-100 text-emerald-600 dark:bg-emerald-900/50 dark:text-emerald-400",
3225
+ iconBg: "bg-emerald-500/15 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300",
3234
3226
  activeGradient: "from-emerald-500 to-teal-600",
3235
3227
  activeRing: "ring-emerald-500",
3236
3228
  valueColor: "text-slate-900 dark:text-white",
3237
- badgeBg: "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300"
3229
+ badgeBg: "border border-emerald-500/30 bg-emerald-500/20 text-emerald-700 dark:text-emerald-300"
3238
3230
  },
3239
3231
  blue: {
3240
- iconBg: "bg-blue-100 text-blue-600 dark:bg-blue-900/50 dark:text-blue-400",
3232
+ iconBg: "bg-blue-500/15 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300",
3241
3233
  activeGradient: "from-blue-500 to-indigo-600",
3242
3234
  activeRing: "ring-indigo-500/70",
3243
3235
  valueColor: "text-slate-900 dark:text-white",
3244
- badgeBg: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300"
3236
+ badgeBg: "border border-blue-500/30 bg-blue-500/20 text-blue-700 dark:text-blue-300"
3245
3237
  },
3246
3238
  amber: {
3247
- iconBg: "bg-amber-100 text-amber-600 dark:bg-amber-900/50 dark:text-amber-400",
3239
+ iconBg: "bg-amber-500/15 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300",
3248
3240
  activeGradient: "from-amber-500 to-orange-600",
3249
3241
  activeRing: "ring-amber-500",
3250
3242
  valueColor: "text-slate-900 dark:text-white",
3251
- badgeBg: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300",
3243
+ badgeBg: "border border-amber-500/30 bg-amber-500/20 text-amber-700 dark:text-amber-300",
3252
3244
  urgentValueColor: "text-amber-600 dark:text-amber-400"
3253
3245
  },
3254
3246
  orange: {
3255
- iconBg: "bg-orange-100 text-orange-600 dark:bg-orange-900/50 dark:text-orange-400",
3247
+ iconBg: "bg-orange-500/15 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300",
3256
3248
  activeGradient: "from-orange-500 to-amber-600",
3257
3249
  activeRing: "ring-orange-500",
3258
3250
  valueColor: "text-slate-900 dark:text-white",
3259
- badgeBg: "bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300"
3251
+ badgeBg: "border border-orange-500/30 bg-orange-500/20 text-orange-700 dark:text-orange-300"
3260
3252
  },
3261
3253
  indigo: {
3262
- iconBg: "bg-indigo-100 text-indigo-600 dark:bg-indigo-900/50 dark:text-indigo-400",
3254
+ iconBg: "bg-indigo-500/15 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300",
3263
3255
  activeGradient: "from-indigo-500 to-blue-600",
3264
3256
  activeRing: "ring-indigo-500",
3265
3257
  valueColor: "text-slate-900 dark:text-white",
3266
- badgeBg: "bg-indigo-100 text-indigo-700 dark:bg-indigo-900/50 dark:text-indigo-300"
3258
+ badgeBg: "border border-indigo-500/30 bg-indigo-500/20 text-indigo-700 dark:text-indigo-300"
3267
3259
  },
3268
3260
  purple: {
3269
- iconBg: "bg-purple-100 text-purple-600 dark:bg-purple-900/50 dark:text-purple-400",
3261
+ iconBg: "bg-purple-500/15 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300",
3270
3262
  activeGradient: "from-purple-500 to-indigo-600",
3271
3263
  activeRing: "ring-purple-500",
3272
3264
  valueColor: "text-slate-900 dark:text-white",
3273
- badgeBg: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300"
3265
+ badgeBg: "border border-purple-500/30 bg-purple-500/20 text-purple-700 dark:text-purple-300"
3274
3266
  },
3275
3267
  red: {
3276
- iconBg: "bg-red-100 text-red-600 dark:bg-red-900/50 dark:text-red-400",
3268
+ iconBg: "bg-red-500/15 text-red-700 dark:bg-red-500/20 dark:text-red-300",
3277
3269
  activeGradient: "from-red-500 to-rose-600",
3278
3270
  activeRing: "ring-red-500",
3279
3271
  valueColor: "text-red-600 dark:text-red-400",
3280
- badgeBg: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300"
3272
+ badgeBg: "border border-red-500/30 bg-red-500/20 text-red-700 dark:text-red-300"
3281
3273
  }
3282
3274
  };
3283
3275
  function StatCard({
@@ -3351,7 +3343,12 @@ function StatCard({
3351
3343
  badge && /* @__PURE__ */ jsxRuntime.jsx(
3352
3344
  "span",
3353
3345
  {
3354
- className: `mt-2 inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${isActive ? "bg-white/20 text-white" : colorConfig.badgeBg}`,
3346
+ style: isActive ? void 0 : {
3347
+ backdropFilter: "blur(12px) saturate(1.5)",
3348
+ WebkitBackdropFilter: "blur(12px) saturate(1.5)",
3349
+ boxShadow: "inset 0 1px 1.5px rgba(255,255,255,0.45), 0 1px 3px -1px rgba(15,23,42,0.12)"
3350
+ },
3351
+ className: `mt-2 inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold ${isActive ? "border border-white/30 bg-white/20 text-white backdrop-blur-sm" : colorConfig.badgeBg}`,
3355
3352
  children: badge
3356
3353
  }
3357
3354
  )
@@ -3455,6 +3452,11 @@ function getStatusColor(status) {
3455
3452
  return "bg-zinc-100 text-zinc-700 dark:bg-zinc-800 dark:text-zinc-400";
3456
3453
  }
3457
3454
  }
3455
+ var CRYSTAL_STYLE2 = {
3456
+ backdropFilter: "blur(12px) saturate(1.5)",
3457
+ WebkitBackdropFilter: "blur(12px) saturate(1.5)",
3458
+ boxShadow: "inset 0 1px 1.5px rgba(255,255,255,0.45), 0 1px 3px -1px rgba(15,23,42,0.12)"
3459
+ };
3458
3460
  function PriceChangeBadge({
3459
3461
  value,
3460
3462
  size = "md",
@@ -3464,13 +3466,15 @@ function PriceChangeBadge({
3464
3466
  const locale = chunkYXN2K77G_js.useLocale();
3465
3467
  if (value === null) return null;
3466
3468
  const isPositive = value >= 0;
3467
- const colorClasses3 = isPositive ? "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400" : "bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400";
3468
- const sizeClasses3 = size === "sm" ? "px-2 py-1 text-xs" : "px-2.5 py-1 text-xs";
3469
+ const toneClasses = isPositive ? "border-emerald-500/30 bg-emerald-500/20 text-emerald-700 dark:text-emerald-300" : "border-red-500/30 bg-red-500/20 text-red-700 dark:text-red-300";
3470
+ const sizeClasses3 = size === "sm" ? "px-2 py-0.5 text-xs" : "px-2.5 py-1 text-xs";
3469
3471
  const iconClasses = size === "sm" ? "h-3 w-3" : "h-3.5 w-3.5";
3470
3472
  return /* @__PURE__ */ jsxRuntime.jsxs(
3471
3473
  "span",
3472
3474
  {
3473
- className: `inline-flex items-center gap-1 rounded-full font-semibold ${colorClasses3} ${sizeClasses3} ${className}`,
3475
+ role: "status",
3476
+ style: CRYSTAL_STYLE2,
3477
+ className: `inline-flex items-center gap-1 rounded-full border font-semibold ${toneClasses} ${sizeClasses3} ${className}`,
3474
3478
  children: [
3475
3479
  showIcon && (isPositive ? /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.ArrowTrendingUpIcon, { className: iconClasses }) : /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.ArrowTrendingDownIcon, { className: iconClasses })),
3476
3480
  !showIcon && isPositive ? "+" : "",
@@ -3774,9 +3778,14 @@ function InlineSpinner({ size = "xs", className }) {
3774
3778
  return /* @__PURE__ */ jsxRuntime.jsx(Spinner, { size, color: "current", className });
3775
3779
  }
3776
3780
  var sizeClasses = {
3777
- xs: { icon: "h-2.5 w-2.5", text: "text-[10px]" },
3778
- sm: { icon: "h-3 w-3", text: "text-xs" },
3779
- md: { icon: "h-4 w-4", text: "text-sm" }
3781
+ xs: { icon: "h-2.5 w-2.5", text: "text-[10px]", pad: "px-1.5 py-0.5" },
3782
+ sm: { icon: "h-3 w-3", text: "text-xs", pad: "px-2 py-0.5" },
3783
+ md: { icon: "h-4 w-4", text: "text-sm", pad: "px-2.5 py-1" }
3784
+ };
3785
+ var CRYSTAL_STYLE3 = {
3786
+ backdropFilter: "blur(12px) saturate(1.5)",
3787
+ WebkitBackdropFilter: "blur(12px) saturate(1.5)",
3788
+ boxShadow: "inset 0 1px 1.5px rgba(255,255,255,0.45), 0 1px 3px -1px rgba(15,23,42,0.12)"
3780
3789
  };
3781
3790
  function defaultFormatValue(value, format3) {
3782
3791
  if (format3 === "percent") {
@@ -3791,20 +3800,42 @@ function GrowthIndicator({
3791
3800
  showValue = false,
3792
3801
  format: format3 = "percent",
3793
3802
  formatValue,
3803
+ variant = "inline",
3794
3804
  className
3795
3805
  }) {
3796
3806
  const isPositive = value > 0;
3797
3807
  const isNegative = value < 0;
3798
3808
  const isNeutral = value === 0;
3799
- const colorClasses3 = isPositive ? "text-emerald-500" : isNegative ? "text-red-500" : "text-gray-500";
3809
+ const inlineColorClasses = isPositive ? "text-emerald-500" : isNegative ? "text-red-500" : "text-slate-500";
3810
+ const pillToneClasses = isPositive ? "border-emerald-500/30 bg-emerald-500/20 text-emerald-700 dark:text-emerald-300" : isNegative ? "border-red-500/30 bg-red-500/20 text-red-700 dark:text-red-300" : "border-slate-500/30 bg-slate-500/20 text-slate-700 dark:text-slate-300";
3800
3811
  const Icon = isPositive ? HeroIcons.ArrowTrendingUpIcon : HeroIcons.ArrowTrendingDownIcon;
3801
- const { icon: iconClass, text: textClass } = sizeClasses[size];
3812
+ const { icon: iconClass, text: textClass, pad: padClass } = sizeClasses[size];
3802
3813
  const formatter = formatValue ?? defaultFormatValue;
3803
3814
  const formattedValue = formatter(value, format3);
3804
3815
  if (isNeutral && !showValue) {
3805
3816
  return null;
3806
3817
  }
3807
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: clsx4.clsx("inline-flex items-center gap-0.5", colorClasses3, className), children: [
3818
+ if (variant === "pill") {
3819
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3820
+ "span",
3821
+ {
3822
+ role: "status",
3823
+ style: CRYSTAL_STYLE3,
3824
+ className: clsx4.clsx(
3825
+ "inline-flex items-center gap-1 rounded-full border font-semibold",
3826
+ padClass,
3827
+ textClass,
3828
+ pillToneClasses,
3829
+ className
3830
+ ),
3831
+ children: [
3832
+ !isNeutral && /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: iconClass }),
3833
+ showValue && /* @__PURE__ */ jsxRuntime.jsx("span", { children: formattedValue })
3834
+ ]
3835
+ }
3836
+ );
3837
+ }
3838
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: clsx4.clsx("inline-flex items-center gap-0.5", inlineColorClasses, className), children: [
3808
3839
  !isNeutral && /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: iconClass }),
3809
3840
  showValue && /* @__PURE__ */ jsxRuntime.jsx("span", { className: textClass, children: formattedValue })
3810
3841
  ] });
@@ -6567,31 +6598,102 @@ function DialogActions({
6567
6598
  }
6568
6599
  );
6569
6600
  }
6601
+ var DEFAULT_UNSELECTED_STYLE = {
6602
+ bg: "bg-slate-500/15",
6603
+ text: "text-slate-700 dark:text-slate-200"
6604
+ };
6605
+ function slugify(raw) {
6606
+ return raw.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
6607
+ }
6570
6608
  function ChipPicker({
6571
6609
  items,
6572
6610
  selectedIds,
6573
6611
  onChange,
6612
+ allowCustom = false,
6613
+ onItemsChange,
6614
+ unselectedStyle,
6574
6615
  isLoading = false,
6575
6616
  showActions = true,
6576
6617
  loadingLabel = "Loading...",
6577
6618
  selectedLabel = "selected",
6578
6619
  selectAllLabel = "Select all",
6579
6620
  clearLabel = "Clear",
6580
- emptyLabel = "No items configured"
6621
+ emptyLabel = "No items configured",
6622
+ addPlaceholder = "Add\u2026",
6623
+ addAriaLabel = "Add new item"
6581
6624
  }) {
6582
- const toggleItem = (itemId) => {
6625
+ const groupId = React9.useId();
6626
+ const inputId = `${groupId}-add`;
6627
+ const [draft, setDraft] = React9.useState("");
6628
+ const styleForNew = unselectedStyle ?? DEFAULT_UNSELECTED_STYLE;
6629
+ const toggleItem = React9.useCallback((itemId) => {
6583
6630
  if (selectedIds.includes(itemId)) {
6584
6631
  onChange(selectedIds.filter((id) => id !== itemId));
6585
6632
  } else {
6586
6633
  onChange([...selectedIds, itemId]);
6587
6634
  }
6588
- };
6589
- const selectAll = () => {
6635
+ }, [selectedIds, onChange]);
6636
+ const selectAll = React9.useCallback(() => {
6590
6637
  onChange(items.map((item) => item.id));
6591
- };
6592
- const clearAll = () => {
6638
+ }, [items, onChange]);
6639
+ const clearAll = React9.useCallback(() => {
6593
6640
  onChange([]);
6594
- };
6641
+ }, [onChange]);
6642
+ const existingIds = React9.useMemo(() => new Set(items.map((i) => i.id)), [items]);
6643
+ const commitDraft = React9.useCallback((raw) => {
6644
+ const trimmed = raw.trim();
6645
+ if (!trimmed) {
6646
+ setDraft("");
6647
+ return;
6648
+ }
6649
+ if (!allowCustom || !onItemsChange) return;
6650
+ const candidates = trimmed.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
6651
+ const additions = [];
6652
+ const addedIds = [];
6653
+ for (const candidate of candidates) {
6654
+ const slug = slugify(candidate) || `item-${additions.length + items.length}`;
6655
+ if (existingIds.has(slug) || additions.some((a) => a.id === slug)) {
6656
+ if (!selectedIds.includes(slug)) addedIds.push(slug);
6657
+ continue;
6658
+ }
6659
+ additions.push({
6660
+ id: slug,
6661
+ name: candidate,
6662
+ style: styleForNew,
6663
+ userCreated: true
6664
+ });
6665
+ addedIds.push(slug);
6666
+ }
6667
+ if (additions.length > 0) {
6668
+ onItemsChange([...items, ...additions]);
6669
+ }
6670
+ if (addedIds.length > 0) {
6671
+ const nextSelected = Array.from(/* @__PURE__ */ new Set([...selectedIds, ...addedIds]));
6672
+ onChange(nextSelected);
6673
+ }
6674
+ setDraft("");
6675
+ }, [allowCustom, onItemsChange, items, existingIds, selectedIds, onChange, styleForNew]);
6676
+ const removeUserCreated = React9.useCallback((itemId) => {
6677
+ if (!allowCustom || !onItemsChange) return;
6678
+ const target = items.find((i) => i.id === itemId);
6679
+ if (!target?.userCreated) return;
6680
+ onItemsChange(items.filter((i) => i.id !== itemId));
6681
+ if (selectedIds.includes(itemId)) {
6682
+ onChange(selectedIds.filter((id) => id !== itemId));
6683
+ }
6684
+ }, [allowCustom, onItemsChange, items, selectedIds, onChange]);
6685
+ const handleKeyDown = React9.useCallback((e) => {
6686
+ if (e.key === "Enter" || e.key === ",") {
6687
+ e.preventDefault();
6688
+ commitDraft(draft);
6689
+ } else if (e.key === "Backspace" && draft.length === 0) {
6690
+ const lastUserCreated = [...items].reverse().find((i) => i.userCreated);
6691
+ if (lastUserCreated) {
6692
+ e.preventDefault();
6693
+ removeUserCreated(lastUserCreated.id);
6694
+ }
6695
+ }
6696
+ }, [draft, commitDraft, items, removeUserCreated]);
6595
6697
  if (isLoading) {
6596
6698
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 text-center text-sm text-gray-500 dark:text-gray-400", children: loadingLabel });
6597
6699
  }
@@ -6624,31 +6726,77 @@ function ChipPicker({
6624
6726
  )
6625
6727
  ] })
6626
6728
  ] }),
6627
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: items.map((item) => {
6628
- const isSelected = selectedIds.includes(item.id);
6629
- const { style } = item;
6630
- return /* @__PURE__ */ jsxRuntime.jsxs(
6631
- "label",
6632
- {
6633
- className: `inline-flex cursor-pointer items-center gap-2 rounded-full border px-3 py-1.5 text-xs font-medium transition ${isSelected ? `${style.bg} ${style.text} border-transparent ring-2 ring-offset-1 ring-current` : "border-gray-200 bg-white/70 text-gray-700 hover:border-gray-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-200"}`,
6634
- children: [
6729
+ /* @__PURE__ */ jsxRuntime.jsxs(
6730
+ "div",
6731
+ {
6732
+ className: "flex flex-wrap items-center gap-2",
6733
+ role: "group",
6734
+ "aria-multiselectable": "true",
6735
+ children: [
6736
+ items.map((item) => {
6737
+ const isSelected = selectedIds.includes(item.id);
6738
+ const { style } = item;
6739
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6740
+ "span",
6741
+ {
6742
+ className: `inline-flex items-center gap-1.5 rounded-full border text-xs font-medium transition ${isSelected ? `${style.bg} ${style.text} border-transparent ring-2 ring-offset-1 ring-current` : "border-gray-200 bg-white/70 text-gray-700 hover:border-gray-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-200"}`,
6743
+ children: [
6744
+ /* @__PURE__ */ jsxRuntime.jsxs(
6745
+ "label",
6746
+ {
6747
+ className: "inline-flex cursor-pointer items-center gap-2 rounded-full px-3 py-1.5",
6748
+ "aria-selected": isSelected,
6749
+ children: [
6750
+ /* @__PURE__ */ jsxRuntime.jsx(
6751
+ "input",
6752
+ {
6753
+ type: "checkbox",
6754
+ checked: isSelected,
6755
+ onChange: () => toggleItem(item.id),
6756
+ className: "sr-only"
6757
+ }
6758
+ ),
6759
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `inline-flex h-2 w-2 rounded-full ${isSelected ? "bg-current opacity-70" : style.bg}` }),
6760
+ item.abbreviation ? `${item.abbreviation} - ${item.name}` : item.name
6761
+ ]
6762
+ }
6763
+ ),
6764
+ allowCustom && item.userCreated && /* @__PURE__ */ jsxRuntime.jsx(
6765
+ "button",
6766
+ {
6767
+ type: "button",
6768
+ "aria-label": `Remove ${item.name}`,
6769
+ onClick: () => removeUserCreated(item.id),
6770
+ className: "liquid-surface mr-1 inline-flex h-5 w-5 items-center justify-center rounded-full text-current/70 hover:text-current focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70",
6771
+ children: /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.XMarkIcon, { className: "h-3 w-3" })
6772
+ }
6773
+ )
6774
+ ]
6775
+ },
6776
+ item.id
6777
+ );
6778
+ }),
6779
+ allowCustom && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1 rounded-full border border-dashed border-slate-300 bg-white/50 px-2 py-1 text-xs dark:border-white/15 dark:bg-white/5", children: [
6780
+ /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.PlusIcon, { className: "h-3 w-3 text-slate-500 dark:text-slate-400", "aria-hidden": "true" }),
6635
6781
  /* @__PURE__ */ jsxRuntime.jsx(
6636
6782
  "input",
6637
6783
  {
6638
- type: "checkbox",
6639
- checked: isSelected,
6640
- onChange: () => toggleItem(item.id),
6641
- className: "sr-only"
6784
+ id: inputId,
6785
+ type: "text",
6786
+ value: draft,
6787
+ onChange: (e) => setDraft(e.target.value),
6788
+ onKeyDown: handleKeyDown,
6789
+ onBlur: () => commitDraft(draft),
6790
+ placeholder: addPlaceholder,
6791
+ "aria-label": addAriaLabel,
6792
+ className: "min-w-[6rem] border-0 bg-transparent p-0 text-xs text-slate-800 placeholder:text-slate-400 focus:outline-none focus:ring-0 dark:text-slate-100 dark:placeholder:text-slate-500"
6642
6793
  }
6643
- ),
6644
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `inline-flex h-2 w-2 rounded-full ${isSelected ? "bg-current opacity-70" : style.bg}` }),
6645
- item.abbreviation ? `${item.abbreviation} - ${item.name}` : item.name
6646
- ]
6647
- },
6648
- item.id
6649
- );
6650
- }) }),
6651
- items.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-6 text-center text-sm text-gray-500 dark:text-gray-400", children: emptyLabel })
6794
+ )
6795
+ ] })
6796
+ ]
6797
+ }
6798
+ ),
6799
+ items.length === 0 && !allowCustom && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-6 text-center text-sm text-gray-500 dark:text-gray-400", children: emptyLabel })
6652
6800
  ] });
6653
6801
  }
6654
6802
  var DEFAULT_COPYABLE_CLASSNAME = "liquid-surface-strong text-gray-500 dark:text-gray-400";
@@ -7203,6 +7351,39 @@ function TimePicker({
7203
7351
  ) })
7204
7352
  ] });
7205
7353
  }
7354
+ var completeStyles = "border-indigo-500 hover:border-indigo-600 dark:border-indigo-400 dark:hover:border-indigo-300";
7355
+ var currentStyles = "border-indigo-500 dark:border-indigo-400";
7356
+ var upcomingStyles = "border-slate-300 hover:border-slate-400 dark:border-white/10 dark:hover:border-white/20";
7357
+ var completeEyebrow = "text-indigo-700 group-hover:text-indigo-800 dark:text-indigo-300 dark:group-hover:text-indigo-200";
7358
+ var currentEyebrow = "text-indigo-700 dark:text-indigo-300";
7359
+ var upcomingEyebrow = "text-slate-500 group-hover:text-slate-700 dark:text-slate-400 dark:group-hover:text-slate-300";
7360
+ function StepProgress({ steps, progressLabel, onStepClick }) {
7361
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": progressLabel, children: /* @__PURE__ */ jsxRuntime.jsx("ol", { role: "list", className: "space-y-4 md:flex md:space-y-0 md:space-x-8", children: steps.map((step, index) => {
7362
+ const borderStyles = step.status === "complete" ? completeStyles : step.status === "current" ? currentStyles : upcomingStyles;
7363
+ const eyebrowStyles = step.status === "complete" ? completeEyebrow : step.status === "current" ? currentEyebrow : upcomingEyebrow;
7364
+ const isInteractive = step.status !== "upcoming" || Boolean(onStepClick);
7365
+ const ariaCurrent = step.status === "current" ? "step" : void 0;
7366
+ const handleClick = (event) => {
7367
+ if (!onStepClick) return;
7368
+ event.preventDefault();
7369
+ onStepClick(index);
7370
+ };
7371
+ const baseClasses = "group flex flex-col border-l-4 py-2 pl-4 transition-colors md:border-t-4 md:border-l-0 md:pt-4 md:pb-0 md:pl-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 focus-visible:rounded-sm";
7372
+ return /* @__PURE__ */ jsxRuntime.jsx("li", { className: "md:flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs(
7373
+ "a",
7374
+ {
7375
+ href: step.href ?? "#",
7376
+ "aria-current": ariaCurrent,
7377
+ onClick: onStepClick ? handleClick : void 0,
7378
+ className: `${baseClasses} ${borderStyles} ${isInteractive ? "" : "cursor-default"}`,
7379
+ children: [
7380
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-sm font-medium ${eyebrowStyles}`, children: step.id }),
7381
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-slate-900 dark:text-white", children: step.name })
7382
+ ]
7383
+ }
7384
+ ) }, step.id);
7385
+ }) }) });
7386
+ }
7206
7387
  function PageHeading({
7207
7388
  breadcrumbs,
7208
7389
  eyebrow,
@@ -7859,27 +8040,16 @@ function StepFormPage({
7859
8040
  ] }),
7860
8041
  /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-2 text-2xl font-semibold tracking-tight text-slate-950 dark:text-white sm:text-3xl", children: steps[currentStep]?.title ?? title }),
7861
8042
  steps[currentStep]?.description ?? subtitle ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 max-w-xl text-sm text-slate-500 dark:text-white/60 sm:text-base", children: steps[currentStep]?.description ?? subtitle }) : null,
7862
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 flex items-center gap-2", children: steps.map((step, index) => {
7863
- const isCompleted = index < currentStep;
7864
- const isCurrent = index === currentStep;
7865
- const isClickable = index < currentStep;
7866
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 items-center gap-2", children: [
7867
- /* @__PURE__ */ jsxRuntime.jsxs(
7868
- "button",
7869
- {
7870
- type: "button",
7871
- onClick: () => isClickable ? onStepChange(index) : void 0,
7872
- disabled: !isClickable && !isCurrent,
7873
- className: `flex items-center gap-2 rounded-full px-3 py-1.5 text-xs font-medium transition-all duration-200 ${isCurrent ? "bg-blue-500/15 text-blue-700 shadow-sm backdrop-blur-sm dark:bg-blue-500/25 dark:text-blue-300" : isCompleted ? "bg-emerald-500/10 text-emerald-700 cursor-pointer hover:bg-emerald-500/20 backdrop-blur-sm dark:bg-emerald-500/20 dark:text-emerald-300" : "bg-slate-500/8 text-slate-400 dark:bg-white/5 dark:text-white/30"}`,
7874
- children: [
7875
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `flex h-5 w-5 items-center justify-center rounded-full text-[10px] font-bold ${isCurrent ? "bg-blue-500 text-white" : isCompleted ? "bg-emerald-500 text-white" : "bg-slate-200 text-slate-400 dark:bg-white/10 dark:text-white/30"}`, children: isCompleted ? /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.CheckIcon, { className: "h-3 w-3" }) : index + 1 }),
7876
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:inline", children: step.title })
7877
- ]
7878
- }
7879
- ),
7880
- index < steps.length - 1 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-px flex-1 transition-colors duration-200 ${index < currentStep ? "bg-emerald-500/30 dark:bg-emerald-500/20" : "bg-slate-200 dark:bg-white/10"}` }) : null
7881
- ] }, step.id);
7882
- }) })
8043
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsxRuntime.jsx(
8044
+ StepIndicator,
8045
+ {
8046
+ steps: steps.map((step) => ({ id: step.id, title: step.title, icon: step.icon })),
8047
+ currentStep,
8048
+ onStepChange,
8049
+ accent: "blue",
8050
+ progressLabel: title
8051
+ }
8052
+ ) })
7883
8053
  ] })
7884
8054
  ] }),
7885
8055
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liquid-surface rounded-2xl p-6", children: [
@@ -7921,45 +8091,6 @@ function StepFormPage({
7921
8091
  ] })
7922
8092
  ] });
7923
8093
  }
7924
- var BACK_BUTTON_CLASSES = "flex-1 px-4 py-3 border border-white/45 dark:border-white/14 bg-white/80 dark:bg-white/5 backdrop-blur-sm text-gray-900 dark:text-white rounded-xl hover:bg-white/90 dark:hover:bg-white/10 disabled:opacity-50 transition-all duration-200 shadow-[inset_0_1px_0_rgba(255,255,255,0.88)]";
7925
- var CONTINUE_BUTTON_CLASSES = "flex-1 px-4 py-3 bg-gradient-to-r from-indigo-600 to-purple-600 hover:from-indigo-700 hover:to-purple-700 disabled:from-gray-400 disabled:to-gray-500 text-white font-semibold rounded-xl transition-all duration-200 shadow-lg shadow-indigo-500/25 disabled:shadow-none";
7926
- function StepNavigationButtons({
7927
- onBack,
7928
- isLoading,
7929
- backLabel,
7930
- continueLabel,
7931
- loadingLabel,
7932
- showSpinner = false,
7933
- type = "submit",
7934
- onContinue
7935
- }) {
7936
- const displayLabel = isLoading && loadingLabel ? loadingLabel : continueLabel;
7937
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: onBack ? "flex gap-4" : "", children: [
7938
- onBack && backLabel && /* @__PURE__ */ jsxRuntime.jsx(
7939
- "button",
7940
- {
7941
- type: "button",
7942
- onClick: onBack,
7943
- disabled: isLoading,
7944
- className: BACK_BUTTON_CLASSES,
7945
- children: backLabel
7946
- }
7947
- ),
7948
- /* @__PURE__ */ jsxRuntime.jsx(
7949
- "button",
7950
- {
7951
- type,
7952
- disabled: isLoading,
7953
- onClick: onContinue,
7954
- className: `${CONTINUE_BUTTON_CLASSES}${!onBack ? " w-full" : ""}`,
7955
- children: isLoading && showSpinner ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center justify-center gap-2", children: [
7956
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-4 w-4 animate-spin motion-reduce:animate-none rounded-full border-2 border-white border-t-transparent" }),
7957
- displayLabel
7958
- ] }) : displayLabel
7959
- }
7960
- )
7961
- ] });
7962
- }
7963
8094
  var COLOR_MAP = {
7964
8095
  blue: {
7965
8096
  activeGradient: "bg-gradient-to-br from-blue-500 to-blue-600 ring-2 ring-indigo-500/70 shadow-lg",
@@ -20319,8 +20450,8 @@ exports.StatCardSkeleton = StatCardSkeleton;
20319
20450
  exports.StatusBadge = StatusBadge;
20320
20451
  exports.StatusToggle = StatusToggle;
20321
20452
  exports.StepFormPage = StepFormPage;
20322
- exports.StepNavigationButtons = StepNavigationButtons;
20323
- exports.StepTimeline = StepTimeline;
20453
+ exports.StepIndicator = StepIndicator;
20454
+ exports.StepProgress = StepProgress;
20324
20455
  exports.StreamingDashboard = StreamingDashboard;
20325
20456
  exports.Strong = Strong;
20326
20457
  exports.Subheading = Subheading;
@@ -20628,5 +20759,5 @@ exports.useSocialProviders = useSocialProviders;
20628
20759
  exports.validateDashboardSpec = validateDashboardSpec;
20629
20760
  exports.xScale = xScale;
20630
20761
  exports.yScale = yScale;
20631
- //# sourceMappingURL=chunk-MT66VKLS.js.map
20632
- //# sourceMappingURL=chunk-MT66VKLS.js.map
20762
+ //# sourceMappingURL=chunk-ZGVN23J4.js.map
20763
+ //# sourceMappingURL=chunk-ZGVN23J4.js.map