@cjlapao/ui-kit 0.2.3 → 0.2.4
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.cjs +1205 -829
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +37 -0
- package/dist/index.d.cts +260 -44
- package/dist/index.d.ts +260 -44
- package/dist/index.js +1140 -767
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/CapsuleBlueprint--CgRT7dr.d.cts +0 -426
- package/dist/CapsuleBlueprint--CgRT7dr.d.ts +0 -426
- package/dist/CapsuleBlueprint-12uQWAvU.d.cts +0 -732
- package/dist/CapsuleBlueprint-12uQWAvU.d.ts +0 -732
- package/dist/CapsuleBlueprint-1FP6avn4.d.cts +0 -1017
- package/dist/CapsuleBlueprint-1FP6avn4.d.ts +0 -1017
- package/dist/CapsuleBlueprint-6DmJgar9.d.cts +0 -358
- package/dist/CapsuleBlueprint-6DmJgar9.d.ts +0 -358
- package/dist/CapsuleBlueprint-B7MPc5wu.d.cts +0 -835
- package/dist/CapsuleBlueprint-B7MPc5wu.d.ts +0 -835
- package/dist/CapsuleBlueprint-BFHAMKUF.d.cts +0 -991
- package/dist/CapsuleBlueprint-BFHAMKUF.d.ts +0 -991
- package/dist/CapsuleBlueprint-BG23ZWsl.d.cts +0 -460
- package/dist/CapsuleBlueprint-BG23ZWsl.d.ts +0 -460
- package/dist/CapsuleBlueprint-BGx-KPqS.d.cts +0 -925
- package/dist/CapsuleBlueprint-BGx-KPqS.d.ts +0 -925
- package/dist/CapsuleBlueprint-BJYVRyFD.d.cts +0 -449
- package/dist/CapsuleBlueprint-BJYVRyFD.d.ts +0 -449
- package/dist/CapsuleBlueprint-BQq4ywG4.d.cts +0 -835
- package/dist/CapsuleBlueprint-BQq4ywG4.d.ts +0 -835
- package/dist/CapsuleBlueprint-BTgmUcyF.d.cts +0 -278
- package/dist/CapsuleBlueprint-BTgmUcyF.d.ts +0 -278
- package/dist/CapsuleBlueprint-BX2YI1yC.d.cts +0 -415
- package/dist/CapsuleBlueprint-BX2YI1yC.d.ts +0 -415
- package/dist/CapsuleBlueprint-BfPODmvJ.d.cts +0 -822
- package/dist/CapsuleBlueprint-BfPODmvJ.d.ts +0 -822
- package/dist/CapsuleBlueprint-BfSPPu5k.d.cts +0 -616
- package/dist/CapsuleBlueprint-BfSPPu5k.d.ts +0 -616
- package/dist/CapsuleBlueprint-BoPkPR2J.d.cts +0 -785
- package/dist/CapsuleBlueprint-BoPkPR2J.d.ts +0 -785
- package/dist/CapsuleBlueprint-CJeLH0j2.d.cts +0 -228
- package/dist/CapsuleBlueprint-CJeLH0j2.d.ts +0 -228
- package/dist/CapsuleBlueprint-CJwXDMzM.d.cts +0 -622
- package/dist/CapsuleBlueprint-CJwXDMzM.d.ts +0 -622
- package/dist/CapsuleBlueprint-CM125BJI.d.cts +0 -811
- package/dist/CapsuleBlueprint-CM125BJI.d.ts +0 -811
- package/dist/CapsuleBlueprint-CQPeacGV.d.cts +0 -426
- package/dist/CapsuleBlueprint-CQPeacGV.d.ts +0 -426
- package/dist/CapsuleBlueprint-CQy2O0UN.d.cts +0 -889
- package/dist/CapsuleBlueprint-CQy2O0UN.d.ts +0 -889
- package/dist/CapsuleBlueprint-CRy04iCR.d.cts +0 -695
- package/dist/CapsuleBlueprint-CRy04iCR.d.ts +0 -695
- package/dist/CapsuleBlueprint-CixXdjMu.d.cts +0 -925
- package/dist/CapsuleBlueprint-CixXdjMu.d.ts +0 -925
- package/dist/CapsuleBlueprint-CjCxwO1O.d.cts +0 -786
- package/dist/CapsuleBlueprint-CjCxwO1O.d.ts +0 -786
- package/dist/CapsuleBlueprint-Cm10IA2w.d.cts +0 -342
- package/dist/CapsuleBlueprint-Cm10IA2w.d.ts +0 -342
- package/dist/CapsuleBlueprint-CoGsooJJ.d.cts +0 -492
- package/dist/CapsuleBlueprint-CoGsooJJ.d.ts +0 -492
- package/dist/CapsuleBlueprint-CpHqUsJK.d.cts +0 -786
- package/dist/CapsuleBlueprint-CpHqUsJK.d.ts +0 -786
- package/dist/CapsuleBlueprint-CrRg8EVW.d.cts +0 -358
- package/dist/CapsuleBlueprint-CrRg8EVW.d.ts +0 -358
- package/dist/CapsuleBlueprint-DGxsd0aY.d.cts +0 -785
- package/dist/CapsuleBlueprint-DGxsd0aY.d.ts +0 -785
- package/dist/CapsuleBlueprint-DYnwizSo.d.cts +0 -698
- package/dist/CapsuleBlueprint-DYnwizSo.d.ts +0 -698
- package/dist/CapsuleBlueprint-DbLSB78P.d.cts +0 -235
- package/dist/CapsuleBlueprint-DbLSB78P.d.ts +0 -235
- package/dist/CapsuleBlueprint-DfV8XBEZ.d.cts +0 -1001
- package/dist/CapsuleBlueprint-DfV8XBEZ.d.ts +0 -1001
- package/dist/CapsuleBlueprint-DiG1FUoM.d.cts +0 -757
- package/dist/CapsuleBlueprint-DiG1FUoM.d.ts +0 -757
- package/dist/CapsuleBlueprint-DvdeHC13.d.cts +0 -289
- package/dist/CapsuleBlueprint-DvdeHC13.d.ts +0 -289
- package/dist/CapsuleBlueprint-DvinXyHp.d.cts +0 -342
- package/dist/CapsuleBlueprint-DvinXyHp.d.ts +0 -342
- package/dist/CapsuleBlueprint-DwW8YOJg.d.cts +0 -925
- package/dist/CapsuleBlueprint-DwW8YOJg.d.ts +0 -925
- package/dist/CapsuleBlueprint-E069msDY.d.cts +0 -310
- package/dist/CapsuleBlueprint-E069msDY.d.ts +0 -310
- package/dist/CapsuleBlueprint-LECoxlXA.d.cts +0 -497
- package/dist/CapsuleBlueprint-LECoxlXA.d.ts +0 -497
- package/dist/CapsuleBlueprint-V9pDg6lh.d.cts +0 -247
- package/dist/CapsuleBlueprint-V9pDg6lh.d.ts +0 -247
- package/dist/CapsuleBlueprint-bOLrWbIc.d.cts +0 -858
- package/dist/CapsuleBlueprint-bOLrWbIc.d.ts +0 -858
- package/dist/CapsuleBlueprint-if_tP8K8.d.cts +0 -1022
- package/dist/CapsuleBlueprint-if_tP8K8.d.ts +0 -1022
- package/dist/CapsuleBlueprint-pP0Ima0I.d.cts +0 -768
- package/dist/CapsuleBlueprint-pP0Ima0I.d.ts +0 -768
- package/dist/CapsuleBlueprint-w82xP6zg.d.cts +0 -222
- package/dist/CapsuleBlueprint-w82xP6zg.d.ts +0 -222
- package/dist/CapsuleBlueprint-wdlxOX4L.d.cts +0 -472
- package/dist/CapsuleBlueprint-wdlxOX4L.d.ts +0 -472
- package/dist/CapsuleBlueprint-wxqu6jA3.d.cts +0 -529
- package/dist/CapsuleBlueprint-wxqu6jA3.d.ts +0 -529
package/dist/index.cjs
CHANGED
|
@@ -348,6 +348,9 @@ __export(src_exports, {
|
|
|
348
348
|
WorkflowRailSkeleton: () => WorkflowRailSkeleton,
|
|
349
349
|
WorkflowStatusNode: () => WorkflowStatusNode_default,
|
|
350
350
|
WorkflowTracker: () => WorkflowTracker_default,
|
|
351
|
+
WorkflowTrackerDetails: () => WorkflowTrackerDetails_default,
|
|
352
|
+
WorkflowTrackerRail: () => WorkflowTrackerRail_default,
|
|
353
|
+
WorkflowTrackerStepDetails: () => WorkflowTrackerStepDetails_default,
|
|
351
354
|
areaPathFromPoints: () => areaPathFromPoints,
|
|
352
355
|
bandAreaPath: () => bandAreaPath,
|
|
353
356
|
buildColumns: () => buildColumns,
|
|
@@ -22032,27 +22035,38 @@ var PageHeader = ({
|
|
|
22032
22035
|
center,
|
|
22033
22036
|
end,
|
|
22034
22037
|
children,
|
|
22038
|
+
variant = "default",
|
|
22039
|
+
accentColor = "blue",
|
|
22035
22040
|
className = "",
|
|
22036
22041
|
...rest
|
|
22037
|
-
}) =>
|
|
22038
|
-
"
|
|
22039
|
-
|
|
22040
|
-
|
|
22041
|
-
|
|
22042
|
-
|
|
22043
|
-
|
|
22044
|
-
|
|
22045
|
-
|
|
22046
|
-
|
|
22047
|
-
|
|
22048
|
-
|
|
22049
|
-
|
|
22050
|
-
|
|
22051
|
-
|
|
22052
|
-
|
|
22053
|
-
|
|
22054
|
-
|
|
22055
|
-
)
|
|
22042
|
+
}) => {
|
|
22043
|
+
const surface = variant === "default" ? null : getSidebarSurfaceTokens(variant, accentColor);
|
|
22044
|
+
return /* @__PURE__ */ (0, import_jsx_runtime201.jsxs)(
|
|
22045
|
+
"header",
|
|
22046
|
+
{
|
|
22047
|
+
...rest,
|
|
22048
|
+
className: (0, import_classnames51.default)(
|
|
22049
|
+
"flex w-full items-center justify-between gap-4 px-5",
|
|
22050
|
+
SIDE_MENU_HEADER_HEIGHT,
|
|
22051
|
+
surface ? (0, import_classnames51.default)(
|
|
22052
|
+
surface.offset,
|
|
22053
|
+
surface.radius,
|
|
22054
|
+
"border",
|
|
22055
|
+
surface.border,
|
|
22056
|
+
surface.shadow,
|
|
22057
|
+
surface.fill
|
|
22058
|
+
) : (0, import_classnames51.default)("border-b", SIDE_MENU_HEADER_FILL, SIDE_MENU_HEADER_SEAM),
|
|
22059
|
+
className
|
|
22060
|
+
),
|
|
22061
|
+
children: [
|
|
22062
|
+
/* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children: start }),
|
|
22063
|
+
/* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children: center }),
|
|
22064
|
+
/* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children: end }),
|
|
22065
|
+
children != null && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children })
|
|
22066
|
+
]
|
|
22067
|
+
}
|
|
22068
|
+
);
|
|
22069
|
+
};
|
|
22056
22070
|
PageHeader.displayName = "PageHeader";
|
|
22057
22071
|
var PageHeader_default = PageHeader;
|
|
22058
22072
|
|
|
@@ -42738,7 +42752,8 @@ var SideMenu = ({
|
|
|
42738
42752
|
const hasVisibleLink = visibleItems2.some(
|
|
42739
42753
|
(item) => item.type !== "group" && item.type !== "divider"
|
|
42740
42754
|
);
|
|
42741
|
-
const
|
|
42755
|
+
const detached = Boolean(surface.offset);
|
|
42756
|
+
const heightClass = fullHeight ? detached ? "h-[calc(100%-1rem)]" : "h-full" : detached ? "sticky top-16 h-[calc(100vh-64px-1rem)]" : "sticky top-16 h-[calc(100vh-64px)]";
|
|
42742
42757
|
const isLeft = side === "left";
|
|
42743
42758
|
const isHoverMode = openOnHover && !isMobile;
|
|
42744
42759
|
const borderClasses = surface.border ? `${surface.border} ${surface.borderSides === "all" ? "border" : isLeft ? "border-r" : "border-l"}` : "";
|
|
@@ -42911,48 +42926,56 @@ var SideMenu = ({
|
|
|
42911
42926
|
]
|
|
42912
42927
|
}
|
|
42913
42928
|
),
|
|
42914
|
-
/* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42915
|
-
|
|
42916
|
-
|
|
42917
|
-
|
|
42918
|
-
|
|
42919
|
-
|
|
42920
|
-
|
|
42921
|
-
|
|
42922
|
-
|
|
42923
|
-
|
|
42924
|
-
|
|
42925
|
-
|
|
42926
|
-
|
|
42927
|
-
|
|
42928
|
-
|
|
42929
|
-
|
|
42930
|
-
|
|
42931
|
-
|
|
42932
|
-
|
|
42933
|
-
|
|
42934
|
-
|
|
42935
|
-
|
|
42936
|
-
|
|
42937
|
-
|
|
42938
|
-
|
|
42939
|
-
|
|
42940
|
-
|
|
42941
|
-
|
|
42942
|
-
|
|
42943
|
-
|
|
42944
|
-
|
|
42945
|
-
|
|
42946
|
-
|
|
42947
|
-
|
|
42948
|
-
|
|
42949
|
-
|
|
42950
|
-
|
|
42951
|
-
|
|
42952
|
-
|
|
42953
|
-
|
|
42954
|
-
|
|
42955
|
-
|
|
42929
|
+
/* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42930
|
+
ScrollArea_default,
|
|
42931
|
+
{
|
|
42932
|
+
variant: "hover",
|
|
42933
|
+
className: "flex-1 w-full",
|
|
42934
|
+
contentClassName: "px-3 py-1",
|
|
42935
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)("nav", { "aria-label": title || "Side menu", className: "space-y-1 w-full", children: [
|
|
42936
|
+
visibleItems2.map((item, index) => {
|
|
42937
|
+
if (item.type === "divider") {
|
|
42938
|
+
return /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42939
|
+
"div",
|
|
42940
|
+
{
|
|
42941
|
+
className: `my-2 border-t ${surface.divider} ${contentCollapsed2 && !isMobileView ? "mx-1" : "mx-0"}`
|
|
42942
|
+
},
|
|
42943
|
+
`divider-${index}-${item.slug}`
|
|
42944
|
+
);
|
|
42945
|
+
}
|
|
42946
|
+
if (item.type === "group") {
|
|
42947
|
+
if (contentCollapsed2 && !isMobileView) return null;
|
|
42948
|
+
return /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)(import_react245.default.Fragment, { children: [
|
|
42949
|
+
item.hasDivider && /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42950
|
+
"div",
|
|
42951
|
+
{
|
|
42952
|
+
className: `my-2 border-t ${surface.divider} ${contentCollapsed2 && !isMobileView ? "mx-1" : "mx-0"}`
|
|
42953
|
+
}
|
|
42954
|
+
),
|
|
42955
|
+
/* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42956
|
+
"div",
|
|
42957
|
+
{
|
|
42958
|
+
className: `px-3 py-1 mb-1 text-xs font-semibold uppercase tracking-wider ${surface.muted} ${index === 0 ? "mt-1" : "mt-4"}`,
|
|
42959
|
+
children: item.label
|
|
42960
|
+
}
|
|
42961
|
+
)
|
|
42962
|
+
] }, `group-${index}-${item.slug}`);
|
|
42963
|
+
}
|
|
42964
|
+
return renderLinkRow(
|
|
42965
|
+
item,
|
|
42966
|
+
0,
|
|
42967
|
+
`link-${index}-${item.slug}`,
|
|
42968
|
+
contentCollapsed2
|
|
42969
|
+
);
|
|
42970
|
+
}),
|
|
42971
|
+
searchActive && !hasVisibleLink && /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)("p", { className: `px-3 py-6 text-center text-xs ${surface.muted}`, children: [
|
|
42972
|
+
'No results for "',
|
|
42973
|
+
searchQuery.trim(),
|
|
42974
|
+
'"'
|
|
42975
|
+
] })
|
|
42976
|
+
] })
|
|
42977
|
+
}
|
|
42978
|
+
),
|
|
42956
42979
|
footerItem && /* @__PURE__ */ (0, import_jsx_runtime257.jsx)("div", { className: "shrink-0 px-3 pb-1", children: /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42957
42980
|
SideMenuDropdownRow,
|
|
42958
42981
|
{
|
|
@@ -60164,93 +60187,14 @@ var TreeView = ({
|
|
|
60164
60187
|
var TreeView_default = TreeView;
|
|
60165
60188
|
|
|
60166
60189
|
// src/components/WorkflowTracker/WorkflowTracker.tsx
|
|
60167
|
-
var
|
|
60168
|
-
var
|
|
60169
|
-
|
|
60170
|
-
// src/components/WorkflowTracker/WorkflowTimeline.tsx
|
|
60171
|
-
var import_react277 = __toESM(require("react"), 1);
|
|
60172
|
-
var import_classnames110 = __toESM(require("classnames"), 1);
|
|
60190
|
+
var import_react282 = require("react");
|
|
60191
|
+
var import_classnames118 = __toESM(require("classnames"), 1);
|
|
60173
60192
|
|
|
60174
|
-
// src/components/WorkflowTracker/
|
|
60175
|
-
var
|
|
60176
|
-
var import_jsx_runtime296 = require("react/jsx-runtime");
|
|
60177
|
-
var Bar3 = ({
|
|
60178
|
-
width,
|
|
60179
|
-
className
|
|
60180
|
-
}) => /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(
|
|
60181
|
-
"span",
|
|
60182
|
-
{
|
|
60183
|
-
className: (0, import_classnames107.default)(
|
|
60184
|
-
"block h-2.5 rounded-full bg-neutral-200 dark:bg-neutral-800",
|
|
60185
|
-
className
|
|
60186
|
-
),
|
|
60187
|
-
style: { width }
|
|
60188
|
-
}
|
|
60189
|
-
);
|
|
60190
|
-
var Dot = () => /* @__PURE__ */ (0, import_jsx_runtime296.jsx)("span", { className: "h-5 w-5 shrink-0 rounded-full bg-neutral-200 dark:bg-neutral-800" });
|
|
60191
|
-
var WorkflowHeaderSkeleton = ({ hasIcon = false, iconCorner = DEFAULT_SURFACE_CORNER }) => /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "mb-5 flex animate-pulse flex-wrap items-start justify-between gap-3 motion-reduce:animate-none", children: [
|
|
60192
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
60193
|
-
hasIcon && /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(
|
|
60194
|
-
Bar3,
|
|
60195
|
-
{
|
|
60196
|
-
width: "3rem",
|
|
60197
|
-
className: (0, import_classnames107.default)("h-12", getSurfaceCornerClass(iconCorner))
|
|
60198
|
-
}
|
|
60199
|
-
),
|
|
60200
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "space-y-3", children: [
|
|
60201
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "11rem", className: "h-2" }),
|
|
60202
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "16rem", className: "h-6" })
|
|
60203
|
-
] })
|
|
60204
|
-
] }),
|
|
60205
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "9rem", className: "h-6 rounded-full" })
|
|
60206
|
-
] });
|
|
60207
|
-
var WorkflowRailSkeleton = ({
|
|
60208
|
-
rows = 6
|
|
60209
|
-
}) => /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "animate-pulse motion-reduce:animate-none", children: [
|
|
60210
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "border-b border-neutral-200 px-5 pb-4 pt-5 dark:border-neutral-800", children: [
|
|
60211
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
60212
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "4.5rem" }),
|
|
60213
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "2rem" })
|
|
60214
|
-
] }),
|
|
60215
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)("span", { className: "mt-3 block h-1 w-full rounded-full bg-neutral-200 dark:bg-neutral-800" }),
|
|
60216
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "80%", className: "mt-3" })
|
|
60217
|
-
] }),
|
|
60218
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)("div", { className: "space-y-5 px-5 py-5", children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
60219
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Dot, {}),
|
|
60220
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "flex-1 space-y-2", children: [
|
|
60221
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: index % 2 === 0 ? "62%" : "48%" }),
|
|
60222
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "34%", className: "h-2" })
|
|
60223
|
-
] })
|
|
60224
|
-
] }, index)) })
|
|
60225
|
-
] });
|
|
60226
|
-
var WorkflowDetailSkeleton = () => /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "animate-pulse motion-reduce:animate-none", children: [
|
|
60227
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "space-y-4 px-5 pb-6 pt-5 sm:px-6", children: [
|
|
60228
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
60229
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "6rem" }),
|
|
60230
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "4rem" })
|
|
60231
|
-
] }),
|
|
60232
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "45%", className: "h-5" }),
|
|
60233
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "space-y-2", children: [
|
|
60234
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "92%", className: "h-2" }),
|
|
60235
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "70%", className: "h-2" })
|
|
60236
|
-
] }),
|
|
60237
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "flex gap-10 pt-2", children: [
|
|
60238
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "5rem" }),
|
|
60239
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "6rem" }),
|
|
60240
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "4rem" })
|
|
60241
|
-
] })
|
|
60242
|
-
] }),
|
|
60243
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)("div", { className: "border-y border-neutral-200 bg-neutral-50 px-5 py-3 dark:border-neutral-800 dark:bg-white/5 sm:px-6", children: /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "5rem" }) }),
|
|
60244
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)("div", { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "flex items-center gap-3 px-5 py-4 sm:px-6", children: [
|
|
60245
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Dot, {}),
|
|
60246
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: index === 1 ? "38%" : "30%" }),
|
|
60247
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)("span", { className: "flex-1" }),
|
|
60248
|
-
/* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Bar3, { width: "3rem" })
|
|
60249
|
-
] }, index)) })
|
|
60250
|
-
] });
|
|
60193
|
+
// src/components/WorkflowTracker/WorkflowSummaryCard.tsx
|
|
60194
|
+
var import_classnames109 = __toESM(require("classnames"), 1);
|
|
60251
60195
|
|
|
60252
60196
|
// src/components/WorkflowTracker/WorkflowStatusNode.tsx
|
|
60253
|
-
var
|
|
60197
|
+
var import_classnames107 = __toESM(require("classnames"), 1);
|
|
60254
60198
|
|
|
60255
60199
|
// src/components/WorkflowTracker/surfaces.ts
|
|
60256
60200
|
var isTranslucentVariant = (variant) => getSurfaceTextTokens(variant).translucent;
|
|
@@ -60388,13 +60332,13 @@ var getStatusTokens = (status, palette) => {
|
|
|
60388
60332
|
};
|
|
60389
60333
|
|
|
60390
60334
|
// src/components/WorkflowTracker/WorkflowStatusNode.tsx
|
|
60391
|
-
var
|
|
60335
|
+
var import_jsx_runtime296 = require("react/jsx-runtime");
|
|
60392
60336
|
var sizeTokens11 = {
|
|
60393
60337
|
sm: { node: "h-4 w-4", glyph: "h-2.5 w-2.5" },
|
|
60394
60338
|
md: { node: "h-5 w-5", glyph: "h-3 w-3" },
|
|
60395
60339
|
lg: { node: "h-9 w-9", glyph: "h-5 w-5" }
|
|
60396
60340
|
};
|
|
60397
|
-
var DashedRing = ({ className }) => /* @__PURE__ */ (0,
|
|
60341
|
+
var DashedRing = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime296.jsx)("svg", { viewBox: "0 0 20 20", "aria-hidden": "true", className, children: /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(
|
|
60398
60342
|
"circle",
|
|
60399
60343
|
{
|
|
60400
60344
|
cx: "10",
|
|
@@ -60407,7 +60351,7 @@ var DashedRing = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime297.js
|
|
|
60407
60351
|
strokeLinecap: "round"
|
|
60408
60352
|
}
|
|
60409
60353
|
) });
|
|
60410
|
-
var AlertGlyph = ({ className }) => /* @__PURE__ */ (0,
|
|
60354
|
+
var AlertGlyph = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime296.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", className, children: /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(
|
|
60411
60355
|
"path",
|
|
60412
60356
|
{
|
|
60413
60357
|
d: "M12 6.5a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0v-6a1 1 0 0 1 1-1Zm0 9.25a1.15 1.15 0 1 1 0 2.3 1.15 1.15 0 0 1 0-2.3Z",
|
|
@@ -60422,33 +60366,33 @@ var WorkflowStatusNode = ({
|
|
|
60422
60366
|
}) => {
|
|
60423
60367
|
const tokens = getStatusTokens(status, palette);
|
|
60424
60368
|
const { node, glyph } = sizeTokens11[size];
|
|
60425
|
-
return /* @__PURE__ */ (0,
|
|
60369
|
+
return /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)(
|
|
60426
60370
|
"span",
|
|
60427
60371
|
{
|
|
60428
60372
|
"aria-hidden": "true",
|
|
60429
|
-
className: (0,
|
|
60373
|
+
className: (0, import_classnames107.default)("relative inline-flex shrink-0", node, className),
|
|
60430
60374
|
children: [
|
|
60431
|
-
tokens.pulse && /* @__PURE__ */ (0,
|
|
60375
|
+
tokens.pulse && /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(
|
|
60432
60376
|
"span",
|
|
60433
60377
|
{
|
|
60434
|
-
className: (0,
|
|
60378
|
+
className: (0, import_classnames107.default)(
|
|
60435
60379
|
"absolute inset-0 animate-ping rounded-full opacity-60 motion-reduce:hidden",
|
|
60436
60380
|
`bg-${tokens.tone}-300 dark:bg-${tokens.tone}-500`
|
|
60437
60381
|
)
|
|
60438
60382
|
}
|
|
60439
60383
|
),
|
|
60440
|
-
/* @__PURE__ */ (0,
|
|
60384
|
+
/* @__PURE__ */ (0, import_jsx_runtime296.jsxs)(
|
|
60441
60385
|
"span",
|
|
60442
60386
|
{
|
|
60443
|
-
className: (0,
|
|
60387
|
+
className: (0, import_classnames107.default)(
|
|
60444
60388
|
"relative inline-flex h-full w-full items-center justify-center rounded-full",
|
|
60445
60389
|
tokens.node
|
|
60446
60390
|
),
|
|
60447
60391
|
children: [
|
|
60448
|
-
tokens.glyph === "check" && /* @__PURE__ */ (0,
|
|
60449
|
-
tokens.glyph === "pause" && /* @__PURE__ */ (0,
|
|
60450
|
-
tokens.glyph === "alert" && /* @__PURE__ */ (0,
|
|
60451
|
-
tokens.glyph === "dashed" && /* @__PURE__ */ (0,
|
|
60392
|
+
tokens.glyph === "check" && /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Check, { className: (0, import_classnames107.default)(glyph, tokens.glyphClass) }),
|
|
60393
|
+
tokens.glyph === "pause" && /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(Pause, { className: (0, import_classnames107.default)(glyph, tokens.glyphClass) }),
|
|
60394
|
+
tokens.glyph === "alert" && /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(AlertGlyph, { className: (0, import_classnames107.default)(glyph, tokens.glyphClass) }),
|
|
60395
|
+
tokens.glyph === "dashed" && /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(DashedRing, { className: (0, import_classnames107.default)("h-full w-full", tokens.glyphClass) })
|
|
60452
60396
|
]
|
|
60453
60397
|
}
|
|
60454
60398
|
)
|
|
@@ -60459,33 +60403,33 @@ var WorkflowStatusNode = ({
|
|
|
60459
60403
|
var WorkflowStatusNode_default = WorkflowStatusNode;
|
|
60460
60404
|
|
|
60461
60405
|
// src/components/WorkflowTracker/parts.tsx
|
|
60462
|
-
var
|
|
60463
|
-
var
|
|
60406
|
+
var import_classnames108 = __toESM(require("classnames"), 1);
|
|
60407
|
+
var import_jsx_runtime297 = require("react/jsx-runtime");
|
|
60464
60408
|
var resolve = (surfaces) => surfaces ?? getSurfaceTokens(false);
|
|
60465
|
-
var WorkflowPlaceholder = ({ title, subtitle, palette, surfaces, className }) => /* @__PURE__ */ (0,
|
|
60409
|
+
var WorkflowPlaceholder = ({ title, subtitle, palette, surfaces, className }) => /* @__PURE__ */ (0, import_jsx_runtime297.jsxs)(
|
|
60466
60410
|
"div",
|
|
60467
60411
|
{
|
|
60468
|
-
className: (0,
|
|
60412
|
+
className: (0, import_classnames108.default)(
|
|
60469
60413
|
"flex flex-col items-center justify-center gap-3 px-6 py-10 text-center",
|
|
60470
60414
|
className
|
|
60471
60415
|
),
|
|
60472
60416
|
children: [
|
|
60473
|
-
/* @__PURE__ */ (0,
|
|
60474
|
-
/* @__PURE__ */ (0,
|
|
60475
|
-
/* @__PURE__ */ (0,
|
|
60417
|
+
/* @__PURE__ */ (0, import_jsx_runtime297.jsx)(WorkflowStatusNode_default, { status: "not_started", palette, size: "lg" }),
|
|
60418
|
+
/* @__PURE__ */ (0, import_jsx_runtime297.jsxs)("div", { className: "space-y-1", children: [
|
|
60419
|
+
/* @__PURE__ */ (0, import_jsx_runtime297.jsx)(
|
|
60476
60420
|
"p",
|
|
60477
60421
|
{
|
|
60478
|
-
className: (0,
|
|
60422
|
+
className: (0, import_classnames108.default)(
|
|
60479
60423
|
"text-sm font-semibold",
|
|
60480
60424
|
resolve(surfaces).mutedText
|
|
60481
60425
|
),
|
|
60482
60426
|
children: title
|
|
60483
60427
|
}
|
|
60484
60428
|
),
|
|
60485
|
-
subtitle && /* @__PURE__ */ (0,
|
|
60429
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime297.jsx)(
|
|
60486
60430
|
"p",
|
|
60487
60431
|
{
|
|
60488
|
-
className: (0,
|
|
60432
|
+
className: (0, import_classnames108.default)(
|
|
60489
60433
|
"max-w-xs text-xs leading-5",
|
|
60490
60434
|
resolve(surfaces).faintText
|
|
60491
60435
|
),
|
|
@@ -60496,10 +60440,10 @@ var WorkflowPlaceholder = ({ title, subtitle, palette, surfaces, className }) =>
|
|
|
60496
60440
|
]
|
|
60497
60441
|
}
|
|
60498
60442
|
);
|
|
60499
|
-
var SectionTitle = ({ children, surfaces, className }) => /* @__PURE__ */ (0,
|
|
60443
|
+
var SectionTitle = ({ children, surfaces, className }) => /* @__PURE__ */ (0, import_jsx_runtime297.jsx)(
|
|
60500
60444
|
"span",
|
|
60501
60445
|
{
|
|
60502
|
-
className: (0,
|
|
60446
|
+
className: (0, import_classnames108.default)(
|
|
60503
60447
|
"text-[10px] font-semibold uppercase tracking-widest",
|
|
60504
60448
|
resolve(surfaces).faintText,
|
|
60505
60449
|
className
|
|
@@ -60507,7 +60451,7 @@ var SectionTitle = ({ children, surfaces, className }) => /* @__PURE__ */ (0, im
|
|
|
60507
60451
|
children
|
|
60508
60452
|
}
|
|
60509
60453
|
);
|
|
60510
|
-
var SectionMeta = ({ children, surfaces, className }) => /* @__PURE__ */ (0,
|
|
60454
|
+
var SectionMeta = ({ children, surfaces, className }) => /* @__PURE__ */ (0, import_jsx_runtime297.jsx)("span", { className: (0, import_classnames108.default)("text-xs", resolve(surfaces).mutedText, className), children });
|
|
60511
60455
|
var WorkflowBadge = ({
|
|
60512
60456
|
children,
|
|
60513
60457
|
status,
|
|
@@ -60515,14 +60459,14 @@ var WorkflowBadge = ({
|
|
|
60515
60459
|
tone
|
|
60516
60460
|
}) => {
|
|
60517
60461
|
const tokens = getStatusTokens(status, palette);
|
|
60518
|
-
return /* @__PURE__ */ (0,
|
|
60462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime297.jsx)(
|
|
60519
60463
|
Pill_default,
|
|
60520
60464
|
{
|
|
60521
60465
|
size: "xs",
|
|
60522
60466
|
uppercase: true,
|
|
60523
60467
|
tone: tone ?? tokens.pillTone,
|
|
60524
60468
|
variant: "outline",
|
|
60525
|
-
className: (0,
|
|
60469
|
+
className: (0, import_classnames108.default)(
|
|
60526
60470
|
"shrink-0 font-medium",
|
|
60527
60471
|
tone ? `bg-${tone}-100 dark:bg-${tone}-900` : tokens.pillFill
|
|
60528
60472
|
),
|
|
@@ -60530,17 +60474,177 @@ var WorkflowBadge = ({
|
|
|
60530
60474
|
}
|
|
60531
60475
|
);
|
|
60532
60476
|
};
|
|
60533
|
-
var MetaField = ({ label, value, surfaces }) => /* @__PURE__ */ (0,
|
|
60534
|
-
/* @__PURE__ */ (0,
|
|
60535
|
-
/* @__PURE__ */ (0,
|
|
60477
|
+
var MetaField = ({ label, value, surfaces }) => /* @__PURE__ */ (0, import_jsx_runtime297.jsxs)("div", { className: "min-w-0", children: [
|
|
60478
|
+
/* @__PURE__ */ (0, import_jsx_runtime297.jsx)(SectionTitle, { surfaces, children: label }),
|
|
60479
|
+
/* @__PURE__ */ (0, import_jsx_runtime297.jsx)("p", { className: "mt-1 text-sm font-medium text-neutral-800 dark:text-neutral-100", children: value })
|
|
60536
60480
|
] });
|
|
60537
|
-
var Tally = ({ count, label, surfaces }) => /* @__PURE__ */ (0,
|
|
60538
|
-
/* @__PURE__ */ (0,
|
|
60539
|
-
/* @__PURE__ */ (0,
|
|
60481
|
+
var Tally = ({ count, label, surfaces }) => /* @__PURE__ */ (0, import_jsx_runtime297.jsxs)("span", { className: "inline-flex items-center gap-1", children: [
|
|
60482
|
+
/* @__PURE__ */ (0, import_jsx_runtime297.jsx)("span", { className: "font-semibold text-neutral-900 dark:text-white", children: count }),
|
|
60483
|
+
/* @__PURE__ */ (0, import_jsx_runtime297.jsx)("span", { className: resolve(surfaces).mutedText, children: label })
|
|
60540
60484
|
] });
|
|
60541
60485
|
|
|
60486
|
+
// src/components/WorkflowTracker/WorkflowSummaryCard.tsx
|
|
60487
|
+
var import_jsx_runtime298 = require("react/jsx-runtime");
|
|
60488
|
+
var WorkflowSummaryCard = ({
|
|
60489
|
+
title,
|
|
60490
|
+
steps,
|
|
60491
|
+
palette,
|
|
60492
|
+
surfaces
|
|
60493
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime298.jsxs)("div", { className: "px-5 py-4", children: [
|
|
60494
|
+
/* @__PURE__ */ (0, import_jsx_runtime298.jsx)(SectionTitle, { surfaces, children: title }),
|
|
60495
|
+
/* @__PURE__ */ (0, import_jsx_runtime298.jsx)("ul", { className: "mt-3 space-y-3", children: steps.map((step) => /* @__PURE__ */ (0, import_jsx_runtime298.jsxs)("li", { className: "flex items-start gap-3", children: [
|
|
60496
|
+
/* @__PURE__ */ (0, import_jsx_runtime298.jsx)(
|
|
60497
|
+
WorkflowStatusNode_default,
|
|
60498
|
+
{
|
|
60499
|
+
status: normalizeStatus(step.status),
|
|
60500
|
+
palette,
|
|
60501
|
+
className: "mt-0.5"
|
|
60502
|
+
}
|
|
60503
|
+
),
|
|
60504
|
+
/* @__PURE__ */ (0, import_jsx_runtime298.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
60505
|
+
/* @__PURE__ */ (0, import_jsx_runtime298.jsx)("p", { className: "text-sm font-medium text-neutral-800 dark:text-neutral-100", children: step.label }),
|
|
60506
|
+
step.meta && /* @__PURE__ */ (0, import_jsx_runtime298.jsx)(
|
|
60507
|
+
"p",
|
|
60508
|
+
{
|
|
60509
|
+
className: (0, import_classnames109.default)(
|
|
60510
|
+
"mt-0.5 text-xs leading-5",
|
|
60511
|
+
surfaces.mutedText
|
|
60512
|
+
),
|
|
60513
|
+
children: step.meta
|
|
60514
|
+
}
|
|
60515
|
+
)
|
|
60516
|
+
] })
|
|
60517
|
+
] }, step.id)) })
|
|
60518
|
+
] });
|
|
60519
|
+
var WorkflowSummaryCard_default = WorkflowSummaryCard;
|
|
60520
|
+
|
|
60521
|
+
// src/components/WorkflowTracker/WorkflowTrackerRail.tsx
|
|
60522
|
+
var import_react279 = require("react");
|
|
60523
|
+
var import_classnames113 = __toESM(require("classnames"), 1);
|
|
60524
|
+
|
|
60542
60525
|
// src/components/WorkflowTracker/WorkflowTimeline.tsx
|
|
60526
|
+
var import_react277 = __toESM(require("react"), 1);
|
|
60527
|
+
var import_classnames112 = __toESM(require("classnames"), 1);
|
|
60528
|
+
|
|
60529
|
+
// src/components/WorkflowTracker/WorkflowSkeleton.tsx
|
|
60530
|
+
var import_classnames110 = __toESM(require("classnames"), 1);
|
|
60543
60531
|
var import_jsx_runtime299 = require("react/jsx-runtime");
|
|
60532
|
+
var Bar3 = ({
|
|
60533
|
+
width,
|
|
60534
|
+
className
|
|
60535
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime299.jsx)(
|
|
60536
|
+
"span",
|
|
60537
|
+
{
|
|
60538
|
+
className: (0, import_classnames110.default)(
|
|
60539
|
+
"block h-2.5 rounded-full bg-neutral-200 dark:bg-neutral-800",
|
|
60540
|
+
className
|
|
60541
|
+
),
|
|
60542
|
+
style: { width }
|
|
60543
|
+
}
|
|
60544
|
+
);
|
|
60545
|
+
var Dot = () => /* @__PURE__ */ (0, import_jsx_runtime299.jsx)("span", { className: "h-5 w-5 shrink-0 rounded-full bg-neutral-200 dark:bg-neutral-800" });
|
|
60546
|
+
var WorkflowHeaderSkeleton = ({ hasIcon = false, iconCorner = DEFAULT_SURFACE_CORNER }) => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "mb-5 flex animate-pulse flex-wrap items-start justify-between gap-3 motion-reduce:animate-none", children: [
|
|
60547
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
60548
|
+
hasIcon && /* @__PURE__ */ (0, import_jsx_runtime299.jsx)(
|
|
60549
|
+
Bar3,
|
|
60550
|
+
{
|
|
60551
|
+
width: "3rem",
|
|
60552
|
+
className: (0, import_classnames110.default)("h-12", getSurfaceCornerClass(iconCorner))
|
|
60553
|
+
}
|
|
60554
|
+
),
|
|
60555
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "space-y-3", children: [
|
|
60556
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "11rem", className: "h-2" }),
|
|
60557
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "16rem", className: "h-6" })
|
|
60558
|
+
] })
|
|
60559
|
+
] }),
|
|
60560
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "9rem", className: "h-6 rounded-full" })
|
|
60561
|
+
] });
|
|
60562
|
+
var WorkflowRailSkeleton = ({
|
|
60563
|
+
rows = 6
|
|
60564
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "animate-pulse motion-reduce:animate-none", children: [
|
|
60565
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "border-b border-neutral-200 px-5 pb-4 pt-5 dark:border-neutral-800", children: [
|
|
60566
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
60567
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "4.5rem" }),
|
|
60568
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "2rem" })
|
|
60569
|
+
] }),
|
|
60570
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("span", { className: "mt-3 block h-1 w-full rounded-full bg-neutral-200 dark:bg-neutral-800" }),
|
|
60571
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "80%", className: "mt-3" })
|
|
60572
|
+
] }),
|
|
60573
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("div", { className: "space-y-5 px-5 py-5", children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
60574
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Dot, {}),
|
|
60575
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "flex-1 space-y-2", children: [
|
|
60576
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: index % 2 === 0 ? "62%" : "48%" }),
|
|
60577
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "34%", className: "h-2" })
|
|
60578
|
+
] })
|
|
60579
|
+
] }, index)) })
|
|
60580
|
+
] });
|
|
60581
|
+
var WorkflowDetailSkeleton = () => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "animate-pulse motion-reduce:animate-none", children: [
|
|
60582
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "space-y-4 px-5 pb-6 pt-5 sm:px-6", children: [
|
|
60583
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
60584
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "6rem" }),
|
|
60585
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "4rem" })
|
|
60586
|
+
] }),
|
|
60587
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "45%", className: "h-5" }),
|
|
60588
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "space-y-2", children: [
|
|
60589
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "92%", className: "h-2" }),
|
|
60590
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "70%", className: "h-2" })
|
|
60591
|
+
] }),
|
|
60592
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "flex gap-10 pt-2", children: [
|
|
60593
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "5rem" }),
|
|
60594
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "6rem" }),
|
|
60595
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "4rem" })
|
|
60596
|
+
] })
|
|
60597
|
+
] }),
|
|
60598
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("div", { className: "border-y border-neutral-200 bg-neutral-50 px-5 py-3 dark:border-neutral-800 dark:bg-white/5 sm:px-6", children: /* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "5rem" }) }),
|
|
60599
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("div", { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "flex items-center gap-3 px-5 py-4 sm:px-6", children: [
|
|
60600
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Dot, {}),
|
|
60601
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: index === 1 ? "38%" : "30%" }),
|
|
60602
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("span", { className: "flex-1" }),
|
|
60603
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(Bar3, { width: "3rem" })
|
|
60604
|
+
] }, index)) })
|
|
60605
|
+
] });
|
|
60606
|
+
|
|
60607
|
+
// src/components/WorkflowTracker/WorkflowQuickActions.tsx
|
|
60608
|
+
var import_classnames111 = __toESM(require("classnames"), 1);
|
|
60609
|
+
var import_jsx_runtime300 = require("react/jsx-runtime");
|
|
60610
|
+
var WorkflowQuickActions = ({
|
|
60611
|
+
stepId,
|
|
60612
|
+
actions,
|
|
60613
|
+
palette,
|
|
60614
|
+
groupLabel,
|
|
60615
|
+
onAction,
|
|
60616
|
+
className,
|
|
60617
|
+
style
|
|
60618
|
+
}) => {
|
|
60619
|
+
if (!onAction || actions.length === 0) return null;
|
|
60620
|
+
return /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60621
|
+
"div",
|
|
60622
|
+
{
|
|
60623
|
+
role: "group",
|
|
60624
|
+
"aria-label": groupLabel,
|
|
60625
|
+
className: (0, import_classnames111.default)("flex flex-wrap gap-1.5", className),
|
|
60626
|
+
style,
|
|
60627
|
+
children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60628
|
+
Button_default,
|
|
60629
|
+
{
|
|
60630
|
+
size: "xs",
|
|
60631
|
+
weight: "medium",
|
|
60632
|
+
variant: action.variant ?? "soft",
|
|
60633
|
+
color: action.tone ?? palette.accent,
|
|
60634
|
+
leadingIcon: action.leadingIcon,
|
|
60635
|
+
disabled: action.disabled,
|
|
60636
|
+
onClick: () => onAction(stepId, action.id),
|
|
60637
|
+
children: action.label
|
|
60638
|
+
},
|
|
60639
|
+
action.id
|
|
60640
|
+
))
|
|
60641
|
+
}
|
|
60642
|
+
);
|
|
60643
|
+
};
|
|
60644
|
+
var WorkflowQuickActions_default = WorkflowQuickActions;
|
|
60645
|
+
|
|
60646
|
+
// src/components/WorkflowTracker/WorkflowTimeline.tsx
|
|
60647
|
+
var import_jsx_runtime301 = require("react/jsx-runtime");
|
|
60544
60648
|
var CONNECTOR_LEFT = 9;
|
|
60545
60649
|
var CONNECTOR_TOP = 24;
|
|
60546
60650
|
var NESTED_INDENT = 32;
|
|
@@ -60558,16 +60662,16 @@ var NestedSubSteps = ({
|
|
|
60558
60662
|
palette,
|
|
60559
60663
|
surfaces,
|
|
60560
60664
|
onSubStepSelect
|
|
60561
|
-
}) => /* @__PURE__ */ (0,
|
|
60665
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60562
60666
|
"div",
|
|
60563
60667
|
{
|
|
60564
|
-
className: (0,
|
|
60668
|
+
className: (0, import_classnames112.default)("mt-3 rounded-lg p-3", surfaces.nestedBox),
|
|
60565
60669
|
style: { marginLeft: NESTED_INDENT },
|
|
60566
|
-
children: /* @__PURE__ */ (0,
|
|
60670
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("ul", { className: "space-y-2.5", children: subSteps.map((subStep) => {
|
|
60567
60671
|
const status = normalizeStatus(subStep.status);
|
|
60568
60672
|
const isActive = status === "running" || status === "in_progress";
|
|
60569
|
-
const content = /* @__PURE__ */ (0,
|
|
60570
|
-
/* @__PURE__ */ (0,
|
|
60673
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)(import_jsx_runtime301.Fragment, { children: [
|
|
60674
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60571
60675
|
WorkflowStatusNode_default,
|
|
60572
60676
|
{
|
|
60573
60677
|
status,
|
|
@@ -60575,10 +60679,10 @@ var NestedSubSteps = ({
|
|
|
60575
60679
|
size: "sm"
|
|
60576
60680
|
}
|
|
60577
60681
|
),
|
|
60578
|
-
/* @__PURE__ */ (0,
|
|
60682
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60579
60683
|
"span",
|
|
60580
60684
|
{
|
|
60581
|
-
className: (0,
|
|
60685
|
+
className: (0, import_classnames112.default)(
|
|
60582
60686
|
"text-sm",
|
|
60583
60687
|
isActive ? "font-semibold text-neutral-900 dark:text-white" : "text-neutral-600 dark:text-neutral-300"
|
|
60584
60688
|
),
|
|
@@ -60586,7 +60690,7 @@ var NestedSubSteps = ({
|
|
|
60586
60690
|
}
|
|
60587
60691
|
)
|
|
60588
60692
|
] });
|
|
60589
|
-
return /* @__PURE__ */ (0,
|
|
60693
|
+
return /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("li", { children: onSubStepSelect ? /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60590
60694
|
"button",
|
|
60591
60695
|
{
|
|
60592
60696
|
type: "button",
|
|
@@ -60594,7 +60698,7 @@ var NestedSubSteps = ({
|
|
|
60594
60698
|
className: "flex w-full items-center gap-2.5 rounded-sm text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 focus-visible:ring-offset-2 dark:focus-visible:ring-neutral-500",
|
|
60595
60699
|
children: content
|
|
60596
60700
|
}
|
|
60597
|
-
) : /* @__PURE__ */ (0,
|
|
60701
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("div", { className: "flex items-center gap-2.5", children: content }) }, subStep.id);
|
|
60598
60702
|
}) })
|
|
60599
60703
|
}
|
|
60600
60704
|
);
|
|
@@ -60611,10 +60715,11 @@ var WorkflowTimeline = ({
|
|
|
60611
60715
|
loadingRows,
|
|
60612
60716
|
emptyState,
|
|
60613
60717
|
onStepSelect,
|
|
60614
|
-
onSubStepSelect
|
|
60718
|
+
onSubStepSelect,
|
|
60719
|
+
onStepAction
|
|
60615
60720
|
}) => {
|
|
60616
60721
|
if (loading) {
|
|
60617
|
-
return /* @__PURE__ */ (0,
|
|
60722
|
+
return /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(WorkflowRailSkeleton, { rows: loadingRows });
|
|
60618
60723
|
}
|
|
60619
60724
|
const isEmpty2 = steps.length === 0;
|
|
60620
60725
|
const tallyEntries = [
|
|
@@ -60623,19 +60728,19 @@ var WorkflowTimeline = ({
|
|
|
60623
60728
|
{ count: tallies.flagged, label: labels.flagged },
|
|
60624
60729
|
{ count: tallies.remaining, label: labels.remaining }
|
|
60625
60730
|
].filter((entry) => entry.count > 0);
|
|
60626
|
-
return /* @__PURE__ */ (0,
|
|
60627
|
-
!isEmpty2 && /* @__PURE__ */ (0,
|
|
60628
|
-
/* @__PURE__ */ (0,
|
|
60629
|
-
/* @__PURE__ */ (0,
|
|
60630
|
-
/* @__PURE__ */ (0,
|
|
60731
|
+
return /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { className: "flex flex-col", children: [
|
|
60732
|
+
!isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { className: (0, import_classnames112.default)("border-b px-5 pb-4 pt-5", surfaces.border), children: [
|
|
60733
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { className: "flex items-baseline justify-between gap-3", children: [
|
|
60734
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(SectionTitle, { surfaces, children: labels.progress }),
|
|
60735
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("span", { className: "text-sm font-semibold text-neutral-900 dark:text-white", children: [
|
|
60631
60736
|
progress,
|
|
60632
60737
|
"%"
|
|
60633
60738
|
] })
|
|
60634
60739
|
] }),
|
|
60635
|
-
/* @__PURE__ */ (0,
|
|
60740
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60636
60741
|
Progress_default,
|
|
60637
60742
|
{
|
|
60638
|
-
className: (0,
|
|
60743
|
+
className: (0, import_classnames112.default)(
|
|
60639
60744
|
"mt-2",
|
|
60640
60745
|
surfaces.translucent ? "bg-white/40 dark:bg-white/15" : "bg-neutral-200 dark:bg-neutral-700"
|
|
60641
60746
|
),
|
|
@@ -60645,8 +60750,8 @@ var WorkflowTimeline = ({
|
|
|
60645
60750
|
motion: "none"
|
|
60646
60751
|
}
|
|
60647
60752
|
),
|
|
60648
|
-
tallyEntries.length > 0 && /* @__PURE__ */ (0,
|
|
60649
|
-
index > 0 && /* @__PURE__ */ (0,
|
|
60753
|
+
tallyEntries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("div", { className: "mt-3 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs", children: tallyEntries.map((entry, index) => /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)(import_react277.default.Fragment, { children: [
|
|
60754
|
+
index > 0 && /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60650
60755
|
"span",
|
|
60651
60756
|
{
|
|
60652
60757
|
"aria-hidden": "true",
|
|
@@ -60654,7 +60759,7 @@ var WorkflowTimeline = ({
|
|
|
60654
60759
|
children: "\xB7"
|
|
60655
60760
|
}
|
|
60656
60761
|
),
|
|
60657
|
-
/* @__PURE__ */ (0,
|
|
60762
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60658
60763
|
Tally,
|
|
60659
60764
|
{
|
|
60660
60765
|
count: entry.count,
|
|
@@ -60664,7 +60769,7 @@ var WorkflowTimeline = ({
|
|
|
60664
60769
|
)
|
|
60665
60770
|
] }, entry.label)) })
|
|
60666
60771
|
] }),
|
|
60667
|
-
/* @__PURE__ */ (0,
|
|
60772
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)("div", { className: (0, import_classnames112.default)(isEmpty2 ? "" : "px-5 py-5"), children: isEmpty2 ? emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60668
60773
|
WorkflowPlaceholder,
|
|
60669
60774
|
{
|
|
60670
60775
|
title: labels.empty,
|
|
@@ -60672,14 +60777,14 @@ var WorkflowTimeline = ({
|
|
|
60672
60777
|
palette,
|
|
60673
60778
|
surfaces
|
|
60674
60779
|
}
|
|
60675
|
-
) : /* @__PURE__ */ (0,
|
|
60780
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("ol", { className: "m-0 list-none p-0", children: steps.map((step, index) => {
|
|
60676
60781
|
const status = normalizeStatus(step.status);
|
|
60677
60782
|
const tokens = getStatusTokens(status, palette);
|
|
60678
60783
|
const isActive = step.id === activeStepId;
|
|
60679
60784
|
const isLast = index === steps.length - 1;
|
|
60680
60785
|
const nested = isActive && step.subSteps && step.subSteps.length > 0 ? step.subSteps : void 0;
|
|
60681
|
-
const rowContent = /* @__PURE__ */ (0,
|
|
60682
|
-
/* @__PURE__ */ (0,
|
|
60786
|
+
const rowContent = /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)(import_jsx_runtime301.Fragment, { children: [
|
|
60787
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60683
60788
|
WorkflowStatusNode_default,
|
|
60684
60789
|
{
|
|
60685
60790
|
status,
|
|
@@ -60687,19 +60792,19 @@ var WorkflowTimeline = ({
|
|
|
60687
60792
|
className: "mt-0.5"
|
|
60688
60793
|
}
|
|
60689
60794
|
),
|
|
60690
|
-
/* @__PURE__ */ (0,
|
|
60691
|
-
/* @__PURE__ */ (0,
|
|
60692
|
-
/* @__PURE__ */ (0,
|
|
60795
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
60796
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
60797
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60693
60798
|
"span",
|
|
60694
60799
|
{
|
|
60695
|
-
className: (0,
|
|
60800
|
+
className: (0, import_classnames112.default)(
|
|
60696
60801
|
"text-sm",
|
|
60697
60802
|
isActive ? "font-semibold text-neutral-900 dark:text-white" : "font-medium text-neutral-700 dark:text-neutral-200"
|
|
60698
60803
|
),
|
|
60699
60804
|
children: step.label
|
|
60700
60805
|
}
|
|
60701
60806
|
),
|
|
60702
|
-
step.badge && /* @__PURE__ */ (0,
|
|
60807
|
+
step.badge && /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60703
60808
|
WorkflowBadge,
|
|
60704
60809
|
{
|
|
60705
60810
|
status,
|
|
@@ -60709,10 +60814,10 @@ var WorkflowTimeline = ({
|
|
|
60709
60814
|
}
|
|
60710
60815
|
)
|
|
60711
60816
|
] }),
|
|
60712
|
-
step.meta && /* @__PURE__ */ (0,
|
|
60817
|
+
step.meta && /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60713
60818
|
"p",
|
|
60714
60819
|
{
|
|
60715
|
-
className: (0,
|
|
60820
|
+
className: (0, import_classnames112.default)(
|
|
60716
60821
|
"mt-1 text-xs leading-5",
|
|
60717
60822
|
surfaces.mutedText
|
|
60718
60823
|
),
|
|
@@ -60721,24 +60826,24 @@ var WorkflowTimeline = ({
|
|
|
60721
60826
|
)
|
|
60722
60827
|
] })
|
|
60723
60828
|
] });
|
|
60724
|
-
return /* @__PURE__ */ (0,
|
|
60829
|
+
return /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)(
|
|
60725
60830
|
"li",
|
|
60726
60831
|
{
|
|
60727
|
-
className: (0,
|
|
60832
|
+
className: (0, import_classnames112.default)("relative", !isLast && "pb-5"),
|
|
60728
60833
|
"aria-current": isActive ? "step" : void 0,
|
|
60729
60834
|
children: [
|
|
60730
|
-
!isLast && /* @__PURE__ */ (0,
|
|
60835
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60731
60836
|
"span",
|
|
60732
60837
|
{
|
|
60733
60838
|
"aria-hidden": "true",
|
|
60734
|
-
className: (0,
|
|
60839
|
+
className: (0, import_classnames112.default)(
|
|
60735
60840
|
"absolute bottom-0",
|
|
60736
60841
|
tokens.connectorDashed ? `border-l-2 border-dashed ${tokens.connector}` : `w-0.5 rounded-full ${tokens.connector}`
|
|
60737
60842
|
),
|
|
60738
60843
|
style: { left: CONNECTOR_LEFT, top: CONNECTOR_TOP }
|
|
60739
60844
|
}
|
|
60740
60845
|
),
|
|
60741
|
-
onStepSelect ? /* @__PURE__ */ (0,
|
|
60846
|
+
onStepSelect ? /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60742
60847
|
"button",
|
|
60743
60848
|
{
|
|
60744
60849
|
type: "button",
|
|
@@ -60746,8 +60851,19 @@ var WorkflowTimeline = ({
|
|
|
60746
60851
|
className: "flex w-full items-start gap-3 rounded-sm text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 focus-visible:ring-offset-2 dark:focus-visible:ring-neutral-500",
|
|
60747
60852
|
children: rowContent
|
|
60748
60853
|
}
|
|
60749
|
-
) : /* @__PURE__ */ (0,
|
|
60750
|
-
|
|
60854
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("div", { className: "flex items-start gap-3", children: rowContent }),
|
|
60855
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60856
|
+
WorkflowQuickActions_default,
|
|
60857
|
+
{
|
|
60858
|
+
stepId: step.id,
|
|
60859
|
+
actions: step.actions ?? [],
|
|
60860
|
+
palette,
|
|
60861
|
+
groupLabel: labels.quickActions,
|
|
60862
|
+
onAction: onStepAction,
|
|
60863
|
+
className: "ml-8 mt-2"
|
|
60864
|
+
}
|
|
60865
|
+
),
|
|
60866
|
+
nested && /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60751
60867
|
NestedSubSteps,
|
|
60752
60868
|
{
|
|
60753
60869
|
stepId: step.id,
|
|
@@ -60762,8 +60878,8 @@ var WorkflowTimeline = ({
|
|
|
60762
60878
|
step.id
|
|
60763
60879
|
);
|
|
60764
60880
|
}) }) }),
|
|
60765
|
-
showLegend && !isEmpty2 && /* @__PURE__ */ (0,
|
|
60766
|
-
/* @__PURE__ */ (0,
|
|
60881
|
+
showLegend && !isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("div", { className: (0, import_classnames112.default)("mt-auto border-t px-5 py-4", surfaces.border), children: /* @__PURE__ */ (0, import_jsx_runtime301.jsx)("ul", { className: "flex flex-wrap gap-x-4 gap-y-2", children: LEGEND_ORDER.map((status) => /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("li", { className: "flex items-center gap-2", children: [
|
|
60882
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
60767
60883
|
WorkflowStatusNode_default,
|
|
60768
60884
|
{
|
|
60769
60885
|
status,
|
|
@@ -60771,14 +60887,92 @@ var WorkflowTimeline = ({
|
|
|
60771
60887
|
size: "sm"
|
|
60772
60888
|
}
|
|
60773
60889
|
),
|
|
60774
|
-
/* @__PURE__ */ (0,
|
|
60890
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)("span", { className: (0, import_classnames112.default)("text-xs", surfaces.mutedText), children: labels.statuses[status] })
|
|
60775
60891
|
] }, status)) }) })
|
|
60776
60892
|
] });
|
|
60777
60893
|
};
|
|
60778
60894
|
var WorkflowTimeline_default = WorkflowTimeline;
|
|
60779
60895
|
|
|
60780
|
-
// src/components/WorkflowTracker/
|
|
60781
|
-
var
|
|
60896
|
+
// src/components/WorkflowTracker/chrome.ts
|
|
60897
|
+
var import_react278 = require("react");
|
|
60898
|
+
var DEFAULT_LABELS = {
|
|
60899
|
+
progress: "Progress",
|
|
60900
|
+
done: "done",
|
|
60901
|
+
skipped: "skipped",
|
|
60902
|
+
flagged: "flagged",
|
|
60903
|
+
remaining: "remaining",
|
|
60904
|
+
step: "Step",
|
|
60905
|
+
of: "of",
|
|
60906
|
+
elapsed: "Elapsed",
|
|
60907
|
+
owner: "Owner",
|
|
60908
|
+
started: "Started",
|
|
60909
|
+
sla: "SLA",
|
|
60910
|
+
subSteps: "Sub-steps",
|
|
60911
|
+
accepted: "accepted",
|
|
60912
|
+
open: "open",
|
|
60913
|
+
needsAttention: "Needs attention",
|
|
60914
|
+
skippedSteps: "Skipped steps",
|
|
60915
|
+
live: "LIVE \xB7 read-only view",
|
|
60916
|
+
empty: "No steps yet",
|
|
60917
|
+
emptySubtitle: "Steps appear here as soon as the workflow starts.",
|
|
60918
|
+
noActiveStep: "No step selected",
|
|
60919
|
+
details: "Step details",
|
|
60920
|
+
quickActions: "Quick actions",
|
|
60921
|
+
statuses: {
|
|
60922
|
+
done: "Done",
|
|
60923
|
+
in_progress: "In progress",
|
|
60924
|
+
running: "Running",
|
|
60925
|
+
skipped: "Skipped",
|
|
60926
|
+
blocked: "Blocked",
|
|
60927
|
+
attention: "Attention",
|
|
60928
|
+
not_started: "Not started"
|
|
60929
|
+
}
|
|
60930
|
+
};
|
|
60931
|
+
var useWorkflowChrome = ({
|
|
60932
|
+
accentColor = "blue",
|
|
60933
|
+
attentionColor = "rose",
|
|
60934
|
+
blockedColor = "amber",
|
|
60935
|
+
mutedColor = "neutral",
|
|
60936
|
+
variant = "outlined",
|
|
60937
|
+
translucentSurfaces
|
|
60938
|
+
}) => {
|
|
60939
|
+
const translucent = translucentSurfaces ?? isTranslucentVariant(variant);
|
|
60940
|
+
const palette = (0, import_react278.useMemo)(
|
|
60941
|
+
() => ({
|
|
60942
|
+
accent: accentColor,
|
|
60943
|
+
attention: attentionColor,
|
|
60944
|
+
blocked: blockedColor,
|
|
60945
|
+
muted: mutedColor,
|
|
60946
|
+
translucent
|
|
60947
|
+
}),
|
|
60948
|
+
[accentColor, attentionColor, blockedColor, mutedColor, translucent]
|
|
60949
|
+
);
|
|
60950
|
+
const surfaces = (0, import_react278.useMemo)(() => getSurfaceTokens(translucent), [translucent]);
|
|
60951
|
+
return { translucent, palette, surfaces };
|
|
60952
|
+
};
|
|
60953
|
+
var resolveLabels = (labelOverrides) => labelOverrides ? {
|
|
60954
|
+
...DEFAULT_LABELS,
|
|
60955
|
+
...labelOverrides,
|
|
60956
|
+
statuses: { ...DEFAULT_LABELS.statuses, ...labelOverrides.statuses }
|
|
60957
|
+
} : DEFAULT_LABELS;
|
|
60958
|
+
var buildCardProps = ({
|
|
60959
|
+
variant = "outlined",
|
|
60960
|
+
cardTone = "neutral",
|
|
60961
|
+
corner = DEFAULT_SURFACE_CORNER,
|
|
60962
|
+
glassOpacity = "light",
|
|
60963
|
+
vibrancy,
|
|
60964
|
+
specularMode,
|
|
60965
|
+
padding = "none"
|
|
60966
|
+
}) => ({
|
|
60967
|
+
variant,
|
|
60968
|
+
tone: cardTone,
|
|
60969
|
+
corner,
|
|
60970
|
+
glassOpacity,
|
|
60971
|
+
vibrancy,
|
|
60972
|
+
specularMode,
|
|
60973
|
+
padding,
|
|
60974
|
+
scrollable: false
|
|
60975
|
+
});
|
|
60782
60976
|
|
|
60783
60977
|
// src/components/WorkflowTracker/derive.ts
|
|
60784
60978
|
var computeProgress = (steps) => {
|
|
@@ -60853,8 +61047,262 @@ var resolveActiveStep = (steps, activeStepId) => {
|
|
|
60853
61047
|
return { step: steps[0], index: 1 };
|
|
60854
61048
|
};
|
|
60855
61049
|
|
|
61050
|
+
// src/components/WorkflowTracker/sampleWorkflow.tsx
|
|
61051
|
+
var import_jsx_runtime302 = require("react/jsx-runtime");
|
|
61052
|
+
var sampleWorkflow = {
|
|
61053
|
+
eyebrow: "VENDOR ONBOARDING \xB7 REQ-4128",
|
|
61054
|
+
title: "Northwind Logistics GmbH",
|
|
61055
|
+
live: true,
|
|
61056
|
+
activeStepId: "security_questionnaire",
|
|
61057
|
+
steps: [
|
|
61058
|
+
{
|
|
61059
|
+
id: "request_submitted",
|
|
61060
|
+
label: "Request submitted",
|
|
61061
|
+
status: "done",
|
|
61062
|
+
meta: "2m"
|
|
61063
|
+
},
|
|
61064
|
+
{
|
|
61065
|
+
id: "duplicate_check",
|
|
61066
|
+
label: "Duplicate check",
|
|
61067
|
+
status: "skipped",
|
|
61068
|
+
badge: "Not needed",
|
|
61069
|
+
meta: "No match in registry"
|
|
61070
|
+
},
|
|
61071
|
+
{
|
|
61072
|
+
id: "business_verification",
|
|
61073
|
+
label: "Business verification",
|
|
61074
|
+
status: "done",
|
|
61075
|
+
meta: "12m \xB7 3 of 3 sub-steps"
|
|
61076
|
+
},
|
|
61077
|
+
{
|
|
61078
|
+
id: "sanctions_screening",
|
|
61079
|
+
label: "Sanctions screening",
|
|
61080
|
+
status: "done",
|
|
61081
|
+
meta: "4m"
|
|
61082
|
+
},
|
|
61083
|
+
{
|
|
61084
|
+
id: "tax_documents",
|
|
61085
|
+
label: "Tax documents",
|
|
61086
|
+
status: "skipped",
|
|
61087
|
+
badge: "Skipped",
|
|
61088
|
+
meta: "Skipped by M. Reyes \xB7 resume anytime"
|
|
61089
|
+
},
|
|
61090
|
+
{
|
|
61091
|
+
id: "insurance_certificates",
|
|
61092
|
+
label: "Insurance certificates",
|
|
61093
|
+
status: "attention",
|
|
61094
|
+
badge: "Needs attention",
|
|
61095
|
+
meta: "1h 06m \xB7 Liability certificate expired 12 Aug",
|
|
61096
|
+
details: /* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { className: "space-y-3 px-5 py-4 sm:px-6", children: [
|
|
61097
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)("p", { className: "text-sm leading-6 text-neutral-600 dark:text-neutral-300", children: "The liability certificate expired on 12 Aug. A reminder went to the vendor\u2019s compliance contact; the underwriter quote is still pending." }),
|
|
61098
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)("ul", { className: "flex flex-wrap gap-2", children: ["reminder-12-aug.pdf", "underwriter-quote.pdf"].map((file) => /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61099
|
+
"li",
|
|
61100
|
+
{
|
|
61101
|
+
className: "rounded-full border border-neutral-200 px-2.5 py-0.5 text-xs text-neutral-500 dark:border-neutral-700 dark:text-neutral-400",
|
|
61102
|
+
children: file
|
|
61103
|
+
},
|
|
61104
|
+
file
|
|
61105
|
+
)) })
|
|
61106
|
+
] }),
|
|
61107
|
+
actions: [
|
|
61108
|
+
{ id: "review", label: "Review" },
|
|
61109
|
+
{ id: "remind", label: "Remind vendor", tone: "amber" }
|
|
61110
|
+
]
|
|
61111
|
+
},
|
|
61112
|
+
{
|
|
61113
|
+
id: "contract_drafting",
|
|
61114
|
+
label: "Contract drafting",
|
|
61115
|
+
status: "done",
|
|
61116
|
+
meta: "1h 10m"
|
|
61117
|
+
},
|
|
61118
|
+
{
|
|
61119
|
+
id: "security_questionnaire",
|
|
61120
|
+
label: "Security questionnaire",
|
|
61121
|
+
status: "in_progress",
|
|
61122
|
+
badge: "In progress",
|
|
61123
|
+
meta: "24m \xB7 3 of 6 sub-steps",
|
|
61124
|
+
elapsed: "24m",
|
|
61125
|
+
description: "Vendor is completing the long-form questionnaire. Each sub-step unlocks once its evidence file is accepted by the reviewer.",
|
|
61126
|
+
owner: "D. Okafor",
|
|
61127
|
+
startedAt: "19 Aug \xB7 09:12",
|
|
61128
|
+
sla: "Due in 6h",
|
|
61129
|
+
details: /* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { className: "space-y-5 px-5 py-4 sm:px-6", children: [
|
|
61130
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { children: [
|
|
61131
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)("p", { className: "text-[11px] font-semibold uppercase tracking-widest text-neutral-400 dark:text-neutral-500", children: "Review activity" }),
|
|
61132
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)("p", { className: "mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-300", children: "Reviewer A. Lindqvist is cross-checking the subprocessor list against the master agreement. Uploads appear here as the vendor submits them." })
|
|
61133
|
+
] }),
|
|
61134
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { children: [
|
|
61135
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)("p", { className: "text-[11px] font-semibold uppercase tracking-widest text-neutral-400 dark:text-neutral-500", children: "Files received" }),
|
|
61136
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)("ul", { className: "mt-2 flex flex-wrap gap-2", children: [
|
|
61137
|
+
"data-handling-v3.pdf",
|
|
61138
|
+
"pentest-2026.pdf",
|
|
61139
|
+
"soc2-typeii.pdf"
|
|
61140
|
+
].map((file) => /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61141
|
+
"li",
|
|
61142
|
+
{
|
|
61143
|
+
className: "rounded-full border border-neutral-200 px-2.5 py-0.5 text-xs text-neutral-500 dark:border-neutral-700 dark:text-neutral-400",
|
|
61144
|
+
children: file
|
|
61145
|
+
},
|
|
61146
|
+
file
|
|
61147
|
+
)) })
|
|
61148
|
+
] }),
|
|
61149
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { children: [
|
|
61150
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)("p", { className: "text-[11px] font-semibold uppercase tracking-widest text-neutral-400 dark:text-neutral-500", children: "Open findings" }),
|
|
61151
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("ul", { className: "mt-2 space-y-2", children: [
|
|
61152
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("li", { className: "flex items-start gap-2 text-sm leading-6 text-neutral-600 dark:text-neutral-300", children: [
|
|
61153
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61154
|
+
"span",
|
|
61155
|
+
{
|
|
61156
|
+
"aria-hidden": "true",
|
|
61157
|
+
className: "mt-[9px] size-1.5 shrink-0 rounded-full bg-amber-400"
|
|
61158
|
+
}
|
|
61159
|
+
),
|
|
61160
|
+
"Subprocessor \u201CCloudDot BV\u201D is not covered by the DPA yet"
|
|
61161
|
+
] }),
|
|
61162
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("li", { className: "flex items-start gap-2 text-sm leading-6 text-neutral-600 dark:text-neutral-300", children: [
|
|
61163
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61164
|
+
"span",
|
|
61165
|
+
{
|
|
61166
|
+
"aria-hidden": "true",
|
|
61167
|
+
className: "mt-[9px] size-1.5 shrink-0 rounded-full bg-neutral-300 dark:bg-neutral-600"
|
|
61168
|
+
}
|
|
61169
|
+
),
|
|
61170
|
+
"Waiting on the incident-contact annex"
|
|
61171
|
+
] })
|
|
61172
|
+
] })
|
|
61173
|
+
] })
|
|
61174
|
+
] }),
|
|
61175
|
+
subSteps: [
|
|
61176
|
+
{
|
|
61177
|
+
id: "data_handling",
|
|
61178
|
+
label: "Data handling policy",
|
|
61179
|
+
status: "done",
|
|
61180
|
+
badge: "Accepted",
|
|
61181
|
+
duration: "5m"
|
|
61182
|
+
},
|
|
61183
|
+
{
|
|
61184
|
+
id: "pentest",
|
|
61185
|
+
label: "Penetration test report",
|
|
61186
|
+
status: "done",
|
|
61187
|
+
badge: "Accepted",
|
|
61188
|
+
duration: "8m"
|
|
61189
|
+
},
|
|
61190
|
+
{
|
|
61191
|
+
id: "soc2",
|
|
61192
|
+
label: "SOC 2 Type II evidence",
|
|
61193
|
+
status: "done",
|
|
61194
|
+
badge: "Accepted",
|
|
61195
|
+
duration: "11m"
|
|
61196
|
+
},
|
|
61197
|
+
{
|
|
61198
|
+
id: "subprocessor_list",
|
|
61199
|
+
label: "Subprocessor list",
|
|
61200
|
+
status: "running",
|
|
61201
|
+
badge: "Running",
|
|
61202
|
+
note: "Vendor uploading \u2014 2 of 3 files received"
|
|
61203
|
+
},
|
|
61204
|
+
{
|
|
61205
|
+
id: "incident_response",
|
|
61206
|
+
label: "Incident response plan",
|
|
61207
|
+
status: "skipped",
|
|
61208
|
+
badge: "Skipped",
|
|
61209
|
+
note: "Covered by master agreement \xA77"
|
|
61210
|
+
},
|
|
61211
|
+
{
|
|
61212
|
+
id: "business_continuity",
|
|
61213
|
+
label: "Business continuity plan",
|
|
61214
|
+
status: "not_started"
|
|
61215
|
+
}
|
|
61216
|
+
]
|
|
61217
|
+
},
|
|
61218
|
+
{
|
|
61219
|
+
id: "legal_review",
|
|
61220
|
+
label: "Legal review",
|
|
61221
|
+
status: "blocked",
|
|
61222
|
+
badge: "Blocked",
|
|
61223
|
+
meta: "Waiting on Legal \xB7 queued 2d",
|
|
61224
|
+
actions: [{ id: "nudge", label: "Nudge Legal", tone: "violet" }]
|
|
61225
|
+
},
|
|
61226
|
+
{
|
|
61227
|
+
id: "banking_details",
|
|
61228
|
+
label: "Banking details",
|
|
61229
|
+
status: "not_started"
|
|
61230
|
+
},
|
|
61231
|
+
{
|
|
61232
|
+
id: "system_provisioning",
|
|
61233
|
+
label: "System provisioning",
|
|
61234
|
+
status: "not_started"
|
|
61235
|
+
},
|
|
61236
|
+
{ id: "go_live", label: "Go-live", status: "not_started" }
|
|
61237
|
+
]
|
|
61238
|
+
};
|
|
61239
|
+
|
|
61240
|
+
// src/components/WorkflowTracker/WorkflowTrackerRail.tsx
|
|
61241
|
+
var import_jsx_runtime303 = require("react/jsx-runtime");
|
|
61242
|
+
var WorkflowTrackerRail = ({
|
|
61243
|
+
data = sampleWorkflow,
|
|
61244
|
+
loading = false,
|
|
61245
|
+
loadingRows = 6,
|
|
61246
|
+
showLegend = true,
|
|
61247
|
+
emptyState,
|
|
61248
|
+
labels: labelOverrides,
|
|
61249
|
+
cardClassName,
|
|
61250
|
+
cardScrollable,
|
|
61251
|
+
onStepSelect,
|
|
61252
|
+
onSubStepSelect,
|
|
61253
|
+
onStepAction,
|
|
61254
|
+
className,
|
|
61255
|
+
style,
|
|
61256
|
+
...styleProps
|
|
61257
|
+
}) => {
|
|
61258
|
+
const steps = data?.steps ?? [];
|
|
61259
|
+
const { palette, surfaces } = useWorkflowChrome(styleProps);
|
|
61260
|
+
const labels = (0, import_react279.useMemo)(() => resolveLabels(labelOverrides), [labelOverrides]);
|
|
61261
|
+
const cardProps = buildCardProps(styleProps);
|
|
61262
|
+
const active = (0, import_react279.useMemo)(
|
|
61263
|
+
() => resolveActiveStep(steps, data?.activeStepId),
|
|
61264
|
+
[steps, data?.activeStepId]
|
|
61265
|
+
);
|
|
61266
|
+
const progress = (0, import_react279.useMemo)(() => computeProgress(steps), [steps]);
|
|
61267
|
+
const tallies = (0, import_react279.useMemo)(() => computeTallies(steps), [steps]);
|
|
61268
|
+
return /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
61269
|
+
Panel_default,
|
|
61270
|
+
{
|
|
61271
|
+
...cardProps,
|
|
61272
|
+
scrollable: cardScrollable ?? false,
|
|
61273
|
+
className: (0, import_classnames113.default)(className, cardClassName),
|
|
61274
|
+
style,
|
|
61275
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
61276
|
+
WorkflowTimeline_default,
|
|
61277
|
+
{
|
|
61278
|
+
steps,
|
|
61279
|
+
activeStepId: active?.step.id,
|
|
61280
|
+
palette,
|
|
61281
|
+
surfaces,
|
|
61282
|
+
labels,
|
|
61283
|
+
progress,
|
|
61284
|
+
tallies,
|
|
61285
|
+
showLegend: showLegend && !loading,
|
|
61286
|
+
loading,
|
|
61287
|
+
loadingRows,
|
|
61288
|
+
emptyState,
|
|
61289
|
+
onStepSelect,
|
|
61290
|
+
onSubStepSelect,
|
|
61291
|
+
onStepAction
|
|
61292
|
+
}
|
|
61293
|
+
)
|
|
61294
|
+
}
|
|
61295
|
+
);
|
|
61296
|
+
};
|
|
61297
|
+
var WorkflowTrackerRail_default = WorkflowTrackerRail;
|
|
61298
|
+
|
|
61299
|
+
// src/components/WorkflowTracker/WorkflowTrackerStepDetails.tsx
|
|
61300
|
+
var import_react280 = require("react");
|
|
61301
|
+
var import_classnames115 = __toESM(require("classnames"), 1);
|
|
61302
|
+
|
|
60856
61303
|
// src/components/WorkflowTracker/WorkflowDetailPanel.tsx
|
|
60857
|
-
var
|
|
61304
|
+
var import_classnames114 = __toESM(require("classnames"), 1);
|
|
61305
|
+
var import_jsx_runtime304 = require("react/jsx-runtime");
|
|
60858
61306
|
var WorkflowDetailPanel = ({
|
|
60859
61307
|
active,
|
|
60860
61308
|
totalSteps,
|
|
@@ -60862,13 +61310,14 @@ var WorkflowDetailPanel = ({
|
|
|
60862
61310
|
surfaces,
|
|
60863
61311
|
labels,
|
|
60864
61312
|
loading,
|
|
60865
|
-
onSubStepSelect
|
|
61313
|
+
onSubStepSelect,
|
|
61314
|
+
onStepAction
|
|
60866
61315
|
}) => {
|
|
60867
61316
|
if (loading) {
|
|
60868
|
-
return /* @__PURE__ */ (0,
|
|
61317
|
+
return /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(WorkflowDetailSkeleton, {});
|
|
60869
61318
|
}
|
|
60870
61319
|
if (!active) {
|
|
60871
|
-
return /* @__PURE__ */ (0,
|
|
61320
|
+
return /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
60872
61321
|
WorkflowPlaceholder,
|
|
60873
61322
|
{
|
|
60874
61323
|
title: labels.noActiveStep,
|
|
@@ -60886,11 +61335,11 @@ var WorkflowDetailPanel = ({
|
|
|
60886
61335
|
step.startedAt ? { label: labels.started, value: step.startedAt } : void 0,
|
|
60887
61336
|
step.sla ? { label: labels.sla, value: step.sla } : void 0
|
|
60888
61337
|
].filter(Boolean);
|
|
60889
|
-
return /* @__PURE__ */ (0,
|
|
60890
|
-
/* @__PURE__ */ (0,
|
|
60891
|
-
/* @__PURE__ */ (0,
|
|
60892
|
-
/* @__PURE__ */ (0,
|
|
60893
|
-
/* @__PURE__ */ (0,
|
|
61338
|
+
return /* @__PURE__ */ (0, import_jsx_runtime304.jsxs)("div", { className: "flex flex-col", children: [
|
|
61339
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)("div", { className: "px-5 pb-6 pt-5 sm:px-6", children: [
|
|
61340
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-x-4 gap-y-2", children: [
|
|
61341
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
61342
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)(SectionTitle, { surfaces, children: [
|
|
60894
61343
|
labels.step,
|
|
60895
61344
|
" ",
|
|
60896
61345
|
index,
|
|
@@ -60899,7 +61348,7 @@ var WorkflowDetailPanel = ({
|
|
|
60899
61348
|
" ",
|
|
60900
61349
|
totalSteps
|
|
60901
61350
|
] }),
|
|
60902
|
-
step.badge && /* @__PURE__ */ (0,
|
|
61351
|
+
step.badge && /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
60903
61352
|
WorkflowBadge,
|
|
60904
61353
|
{
|
|
60905
61354
|
status,
|
|
@@ -60909,24 +61358,36 @@ var WorkflowDetailPanel = ({
|
|
|
60909
61358
|
}
|
|
60910
61359
|
)
|
|
60911
61360
|
] }),
|
|
60912
|
-
|
|
60913
|
-
|
|
60914
|
-
|
|
60915
|
-
|
|
61361
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)("div", { className: "flex flex-wrap items-center justify-end gap-x-4 gap-y-2", children: [
|
|
61362
|
+
step.elapsed && /* @__PURE__ */ (0, import_jsx_runtime304.jsxs)(SectionMeta, { surfaces, children: [
|
|
61363
|
+
labels.elapsed,
|
|
61364
|
+
" ",
|
|
61365
|
+
step.elapsed
|
|
61366
|
+
] }),
|
|
61367
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
61368
|
+
WorkflowQuickActions_default,
|
|
61369
|
+
{
|
|
61370
|
+
stepId: step.id,
|
|
61371
|
+
actions: step.actions ?? [],
|
|
61372
|
+
palette,
|
|
61373
|
+
groupLabel: labels.quickActions,
|
|
61374
|
+
onAction: onStepAction
|
|
61375
|
+
}
|
|
61376
|
+
)
|
|
60916
61377
|
] })
|
|
60917
61378
|
] }),
|
|
60918
|
-
/* @__PURE__ */ (0,
|
|
60919
|
-
step.description && /* @__PURE__ */ (0,
|
|
61379
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)("h3", { className: "mt-3 text-xl font-semibold tracking-tight text-neutral-900 dark:text-white sm:text-2xl", children: step.label }),
|
|
61380
|
+
step.description && /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
60920
61381
|
"p",
|
|
60921
61382
|
{
|
|
60922
|
-
className: (0,
|
|
61383
|
+
className: (0, import_classnames114.default)(
|
|
60923
61384
|
"mt-2 max-w-3xl text-sm leading-6",
|
|
60924
61385
|
surfaces.mutedText
|
|
60925
61386
|
),
|
|
60926
61387
|
children: step.description
|
|
60927
61388
|
}
|
|
60928
61389
|
),
|
|
60929
|
-
metaFields.length > 0 && /* @__PURE__ */ (0,
|
|
61390
|
+
metaFields.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime304.jsx)("div", { className: "mt-5 flex flex-wrap gap-x-10 gap-y-4", children: metaFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
60930
61391
|
MetaField,
|
|
60931
61392
|
{
|
|
60932
61393
|
label: field.label,
|
|
@@ -60936,18 +61397,18 @@ var WorkflowDetailPanel = ({
|
|
|
60936
61397
|
field.label
|
|
60937
61398
|
)) })
|
|
60938
61399
|
] }),
|
|
60939
|
-
subSteps.length > 0 && /* @__PURE__ */ (0,
|
|
60940
|
-
/* @__PURE__ */ (0,
|
|
61400
|
+
subSteps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime304.jsxs)(import_jsx_runtime304.Fragment, { children: [
|
|
61401
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)(
|
|
60941
61402
|
"div",
|
|
60942
61403
|
{
|
|
60943
|
-
className: (0,
|
|
61404
|
+
className: (0, import_classnames114.default)(
|
|
60944
61405
|
"flex flex-wrap items-center justify-between gap-2 border-y px-5 py-2.5 sm:px-6",
|
|
60945
61406
|
surfaces.border,
|
|
60946
61407
|
surfaces.strip
|
|
60947
61408
|
),
|
|
60948
61409
|
children: [
|
|
60949
|
-
/* @__PURE__ */ (0,
|
|
60950
|
-
/* @__PURE__ */ (0,
|
|
61410
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)(SectionTitle, { surfaces, children: labels.subSteps }),
|
|
61411
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)(SectionMeta, { surfaces, children: [
|
|
60951
61412
|
summary.accepted,
|
|
60952
61413
|
" ",
|
|
60953
61414
|
labels.accepted,
|
|
@@ -60963,24 +61424,24 @@ var WorkflowDetailPanel = ({
|
|
|
60963
61424
|
]
|
|
60964
61425
|
}
|
|
60965
61426
|
),
|
|
60966
|
-
/* @__PURE__ */ (0,
|
|
61427
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
60967
61428
|
"ul",
|
|
60968
61429
|
{
|
|
60969
|
-
className: (0,
|
|
61430
|
+
className: (0, import_classnames114.default)(
|
|
60970
61431
|
"m-0 list-none divide-y p-0",
|
|
60971
61432
|
surfaces.divider
|
|
60972
61433
|
),
|
|
60973
61434
|
children: subSteps.map((subStep) => {
|
|
60974
61435
|
const subStatus = normalizeStatus(subStep.status);
|
|
60975
61436
|
const isRunning = subStatus === "running";
|
|
60976
|
-
const rowContent = /* @__PURE__ */ (0,
|
|
60977
|
-
/* @__PURE__ */ (0,
|
|
60978
|
-
/* @__PURE__ */ (0,
|
|
60979
|
-
/* @__PURE__ */ (0,
|
|
60980
|
-
subStep.note && /* @__PURE__ */ (0,
|
|
61437
|
+
const rowContent = /* @__PURE__ */ (0, import_jsx_runtime304.jsxs)(import_jsx_runtime304.Fragment, { children: [
|
|
61438
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)(WorkflowStatusNode_default, { status: subStatus, palette }),
|
|
61439
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
61440
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)("p", { className: "text-sm font-medium text-neutral-800 dark:text-neutral-100", children: subStep.label }),
|
|
61441
|
+
subStep.note && /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
60981
61442
|
"p",
|
|
60982
61443
|
{
|
|
60983
|
-
className: (0,
|
|
61444
|
+
className: (0, import_classnames114.default)(
|
|
60984
61445
|
"mt-0.5 text-xs leading-5",
|
|
60985
61446
|
surfaces.mutedText
|
|
60986
61447
|
),
|
|
@@ -60988,7 +61449,7 @@ var WorkflowDetailPanel = ({
|
|
|
60988
61449
|
}
|
|
60989
61450
|
)
|
|
60990
61451
|
] }),
|
|
60991
|
-
subStep.badge && /* @__PURE__ */ (0,
|
|
61452
|
+
subStep.badge && /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
60992
61453
|
WorkflowBadge,
|
|
60993
61454
|
{
|
|
60994
61455
|
status: subStatus,
|
|
@@ -60997,10 +61458,10 @@ var WorkflowDetailPanel = ({
|
|
|
60997
61458
|
children: subStep.badge
|
|
60998
61459
|
}
|
|
60999
61460
|
),
|
|
61000
|
-
/* @__PURE__ */ (0,
|
|
61461
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
61001
61462
|
"span",
|
|
61002
61463
|
{
|
|
61003
|
-
className: (0,
|
|
61464
|
+
className: (0, import_classnames114.default)(
|
|
61004
61465
|
"w-10 shrink-0 text-right text-xs tabular-nums",
|
|
61005
61466
|
surfaces.faintText
|
|
61006
61467
|
),
|
|
@@ -61008,22 +61469,22 @@ var WorkflowDetailPanel = ({
|
|
|
61008
61469
|
}
|
|
61009
61470
|
)
|
|
61010
61471
|
] });
|
|
61011
|
-
const rowClasses = (0,
|
|
61472
|
+
const rowClasses = (0, import_classnames114.default)(
|
|
61012
61473
|
"flex w-full items-center gap-3 px-5 py-3 text-left sm:px-6",
|
|
61013
61474
|
isRunning && getRowHighlight(palette.accent, surfaces.translucent)
|
|
61014
61475
|
);
|
|
61015
|
-
return /* @__PURE__ */ (0,
|
|
61476
|
+
return /* @__PURE__ */ (0, import_jsx_runtime304.jsx)("li", { children: onSubStepSelect ? /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
61016
61477
|
"button",
|
|
61017
61478
|
{
|
|
61018
61479
|
type: "button",
|
|
61019
61480
|
onClick: () => onSubStepSelect(step.id, subStep.id),
|
|
61020
|
-
className: (0,
|
|
61481
|
+
className: (0, import_classnames114.default)(
|
|
61021
61482
|
rowClasses,
|
|
61022
61483
|
"focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-neutral-400 dark:focus-visible:ring-neutral-500"
|
|
61023
61484
|
),
|
|
61024
61485
|
children: rowContent
|
|
61025
61486
|
}
|
|
61026
|
-
) : /* @__PURE__ */ (0,
|
|
61487
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime304.jsx)("div", { className: rowClasses, children: rowContent }) }, subStep.id);
|
|
61027
61488
|
})
|
|
61028
61489
|
}
|
|
61029
61490
|
)
|
|
@@ -61032,202 +61493,114 @@ var WorkflowDetailPanel = ({
|
|
|
61032
61493
|
};
|
|
61033
61494
|
var WorkflowDetailPanel_default = WorkflowDetailPanel;
|
|
61034
61495
|
|
|
61035
|
-
// src/components/WorkflowTracker/
|
|
61036
|
-
var
|
|
61037
|
-
var
|
|
61038
|
-
|
|
61039
|
-
|
|
61040
|
-
|
|
61041
|
-
|
|
61042
|
-
|
|
61043
|
-
|
|
61044
|
-
|
|
61045
|
-
|
|
61046
|
-
|
|
61047
|
-
|
|
61048
|
-
|
|
61049
|
-
|
|
61050
|
-
|
|
61051
|
-
|
|
61052
|
-
|
|
61053
|
-
|
|
61054
|
-
|
|
61055
|
-
|
|
61056
|
-
|
|
61057
|
-
|
|
61496
|
+
// src/components/WorkflowTracker/WorkflowTrackerStepDetails.tsx
|
|
61497
|
+
var import_jsx_runtime305 = require("react/jsx-runtime");
|
|
61498
|
+
var WorkflowTrackerStepDetails = ({
|
|
61499
|
+
data = sampleWorkflow,
|
|
61500
|
+
loading = false,
|
|
61501
|
+
labels: labelOverrides,
|
|
61502
|
+
cardClassName,
|
|
61503
|
+
onSubStepSelect,
|
|
61504
|
+
onStepAction,
|
|
61505
|
+
className,
|
|
61506
|
+
style,
|
|
61507
|
+
...styleProps
|
|
61508
|
+
}) => {
|
|
61509
|
+
const steps = data?.steps ?? [];
|
|
61510
|
+
const { palette, surfaces } = useWorkflowChrome(styleProps);
|
|
61511
|
+
const labels = (0, import_react280.useMemo)(
|
|
61512
|
+
() => resolveLabels(labelOverrides),
|
|
61513
|
+
[labelOverrides]
|
|
61514
|
+
);
|
|
61515
|
+
const cardProps = buildCardProps(styleProps);
|
|
61516
|
+
const active = (0, import_react280.useMemo)(
|
|
61517
|
+
() => resolveActiveStep(steps, data?.activeStepId),
|
|
61518
|
+
[steps, data?.activeStepId]
|
|
61519
|
+
);
|
|
61520
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
61521
|
+
Panel_default,
|
|
61522
|
+
{
|
|
61523
|
+
...cardProps,
|
|
61524
|
+
className: (0, import_classnames115.default)(className, cardClassName),
|
|
61525
|
+
style,
|
|
61526
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
61527
|
+
WorkflowDetailPanel_default,
|
|
61058
61528
|
{
|
|
61059
|
-
|
|
61060
|
-
|
|
61061
|
-
|
|
61062
|
-
|
|
61063
|
-
|
|
61529
|
+
active,
|
|
61530
|
+
totalSteps: steps.length,
|
|
61531
|
+
palette,
|
|
61532
|
+
surfaces,
|
|
61533
|
+
labels,
|
|
61534
|
+
loading,
|
|
61535
|
+
onSubStepSelect,
|
|
61536
|
+
onStepAction
|
|
61064
61537
|
}
|
|
61065
61538
|
)
|
|
61066
|
-
|
|
61067
|
-
|
|
61068
|
-
|
|
61069
|
-
var
|
|
61539
|
+
}
|
|
61540
|
+
);
|
|
61541
|
+
};
|
|
61542
|
+
var WorkflowTrackerStepDetails_default = WorkflowTrackerStepDetails;
|
|
61070
61543
|
|
|
61071
|
-
// src/components/WorkflowTracker/
|
|
61072
|
-
var
|
|
61073
|
-
|
|
61074
|
-
|
|
61075
|
-
|
|
61076
|
-
|
|
61077
|
-
|
|
61078
|
-
|
|
61079
|
-
|
|
61080
|
-
|
|
61081
|
-
|
|
61082
|
-
|
|
61083
|
-
|
|
61084
|
-
|
|
61085
|
-
|
|
61086
|
-
|
|
61087
|
-
|
|
61088
|
-
|
|
61089
|
-
|
|
61090
|
-
|
|
61091
|
-
{
|
|
61092
|
-
|
|
61093
|
-
|
|
61094
|
-
|
|
61095
|
-
|
|
61096
|
-
|
|
61097
|
-
|
|
61098
|
-
|
|
61099
|
-
|
|
61100
|
-
|
|
61101
|
-
|
|
61102
|
-
|
|
61103
|
-
|
|
61104
|
-
|
|
61105
|
-
|
|
61106
|
-
|
|
61107
|
-
|
|
61108
|
-
|
|
61109
|
-
|
|
61110
|
-
|
|
61111
|
-
|
|
61112
|
-
|
|
61113
|
-
|
|
61114
|
-
|
|
61115
|
-
|
|
61116
|
-
|
|
61117
|
-
|
|
61118
|
-
id: "contract_drafting",
|
|
61119
|
-
label: "Contract drafting",
|
|
61120
|
-
status: "done",
|
|
61121
|
-
meta: "1h 10m"
|
|
61122
|
-
},
|
|
61123
|
-
{
|
|
61124
|
-
id: "security_questionnaire",
|
|
61125
|
-
label: "Security questionnaire",
|
|
61126
|
-
status: "in_progress",
|
|
61127
|
-
badge: "In progress",
|
|
61128
|
-
meta: "24m \xB7 3 of 6 sub-steps",
|
|
61129
|
-
elapsed: "24m",
|
|
61130
|
-
description: "Vendor is completing the long-form questionnaire. Each sub-step unlocks once its evidence file is accepted by the reviewer.",
|
|
61131
|
-
owner: "D. Okafor",
|
|
61132
|
-
startedAt: "19 Aug \xB7 09:12",
|
|
61133
|
-
sla: "Due in 6h",
|
|
61134
|
-
subSteps: [
|
|
61135
|
-
{
|
|
61136
|
-
id: "data_handling",
|
|
61137
|
-
label: "Data handling policy",
|
|
61138
|
-
status: "done",
|
|
61139
|
-
badge: "Accepted",
|
|
61140
|
-
duration: "5m"
|
|
61141
|
-
},
|
|
61142
|
-
{
|
|
61143
|
-
id: "pentest",
|
|
61144
|
-
label: "Penetration test report",
|
|
61145
|
-
status: "done",
|
|
61146
|
-
badge: "Accepted",
|
|
61147
|
-
duration: "8m"
|
|
61148
|
-
},
|
|
61149
|
-
{
|
|
61150
|
-
id: "soc2",
|
|
61151
|
-
label: "SOC 2 Type II evidence",
|
|
61152
|
-
status: "done",
|
|
61153
|
-
badge: "Accepted",
|
|
61154
|
-
duration: "11m"
|
|
61155
|
-
},
|
|
61156
|
-
{
|
|
61157
|
-
id: "subprocessor_list",
|
|
61158
|
-
label: "Subprocessor list",
|
|
61159
|
-
status: "running",
|
|
61160
|
-
badge: "Running",
|
|
61161
|
-
note: "Vendor uploading \u2014 2 of 3 files received"
|
|
61162
|
-
},
|
|
61163
|
-
{
|
|
61164
|
-
id: "incident_response",
|
|
61165
|
-
label: "Incident response plan",
|
|
61166
|
-
status: "skipped",
|
|
61167
|
-
badge: "Skipped",
|
|
61168
|
-
note: "Covered by master agreement \xA77"
|
|
61169
|
-
},
|
|
61170
|
-
{
|
|
61171
|
-
id: "business_continuity",
|
|
61172
|
-
label: "Business continuity plan",
|
|
61173
|
-
status: "not_started"
|
|
61174
|
-
}
|
|
61175
|
-
]
|
|
61176
|
-
},
|
|
61177
|
-
{
|
|
61178
|
-
id: "legal_review",
|
|
61179
|
-
label: "Legal review",
|
|
61180
|
-
status: "blocked",
|
|
61181
|
-
badge: "Blocked",
|
|
61182
|
-
meta: "Waiting on Legal \xB7 queued 2d"
|
|
61183
|
-
},
|
|
61184
|
-
{
|
|
61185
|
-
id: "banking_details",
|
|
61186
|
-
label: "Banking details",
|
|
61187
|
-
status: "not_started"
|
|
61188
|
-
},
|
|
61544
|
+
// src/components/WorkflowTracker/WorkflowTrackerDetails.tsx
|
|
61545
|
+
var import_react281 = require("react");
|
|
61546
|
+
var import_classnames117 = __toESM(require("classnames"), 1);
|
|
61547
|
+
|
|
61548
|
+
// src/components/WorkflowTracker/WorkflowDetailsCard.tsx
|
|
61549
|
+
var import_classnames116 = __toESM(require("classnames"), 1);
|
|
61550
|
+
var import_jsx_runtime306 = require("react/jsx-runtime");
|
|
61551
|
+
var WorkflowDetailsCard = ({
|
|
61552
|
+
details,
|
|
61553
|
+
ariaLabel,
|
|
61554
|
+
cardProps,
|
|
61555
|
+
className,
|
|
61556
|
+
style
|
|
61557
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
61558
|
+
Panel_default,
|
|
61559
|
+
{
|
|
61560
|
+
...cardProps,
|
|
61561
|
+
flexBody: true,
|
|
61562
|
+
className: (0, import_classnames116.default)("flex-1", className),
|
|
61563
|
+
style,
|
|
61564
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(ScrollArea_default, { className: "h-full", mask: true, role: "region", "aria-label": ariaLabel, children: details })
|
|
61565
|
+
}
|
|
61566
|
+
);
|
|
61567
|
+
var WorkflowDetailsCard_default = WorkflowDetailsCard;
|
|
61568
|
+
|
|
61569
|
+
// src/components/WorkflowTracker/WorkflowTrackerDetails.tsx
|
|
61570
|
+
var import_jsx_runtime307 = require("react/jsx-runtime");
|
|
61571
|
+
var WorkflowTrackerDetails = ({
|
|
61572
|
+
data = sampleWorkflow,
|
|
61573
|
+
loading = false,
|
|
61574
|
+
labels: labelOverrides,
|
|
61575
|
+
cardClassName,
|
|
61576
|
+
className,
|
|
61577
|
+
style,
|
|
61578
|
+
...styleProps
|
|
61579
|
+
}) => {
|
|
61580
|
+
const steps = data?.steps ?? [];
|
|
61581
|
+
const labels = (0, import_react281.useMemo)(() => resolveLabels(labelOverrides), [labelOverrides]);
|
|
61582
|
+
const cardProps = buildCardProps(styleProps);
|
|
61583
|
+
const active = (0, import_react281.useMemo)(
|
|
61584
|
+
() => resolveActiveStep(steps, data?.activeStepId),
|
|
61585
|
+
[steps, data?.activeStepId]
|
|
61586
|
+
);
|
|
61587
|
+
const details = active?.step.details;
|
|
61588
|
+
if (loading || details == null || details === "") return null;
|
|
61589
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
61590
|
+
WorkflowDetailsCard_default,
|
|
61189
61591
|
{
|
|
61190
|
-
|
|
61191
|
-
|
|
61192
|
-
|
|
61193
|
-
|
|
61194
|
-
|
|
61195
|
-
|
|
61592
|
+
details,
|
|
61593
|
+
ariaLabel: labels.details,
|
|
61594
|
+
cardProps,
|
|
61595
|
+
className: (0, import_classnames117.default)(className, cardClassName),
|
|
61596
|
+
style
|
|
61597
|
+
}
|
|
61598
|
+
);
|
|
61196
61599
|
};
|
|
61600
|
+
var WorkflowTrackerDetails_default = WorkflowTrackerDetails;
|
|
61197
61601
|
|
|
61198
61602
|
// src/components/WorkflowTracker/WorkflowTracker.tsx
|
|
61199
|
-
var
|
|
61200
|
-
var DEFAULT_LABELS = {
|
|
61201
|
-
progress: "Progress",
|
|
61202
|
-
done: "done",
|
|
61203
|
-
skipped: "skipped",
|
|
61204
|
-
flagged: "flagged",
|
|
61205
|
-
remaining: "remaining",
|
|
61206
|
-
step: "Step",
|
|
61207
|
-
of: "of",
|
|
61208
|
-
elapsed: "Elapsed",
|
|
61209
|
-
owner: "Owner",
|
|
61210
|
-
started: "Started",
|
|
61211
|
-
sla: "SLA",
|
|
61212
|
-
subSteps: "Sub-steps",
|
|
61213
|
-
accepted: "accepted",
|
|
61214
|
-
open: "open",
|
|
61215
|
-
needsAttention: "Needs attention",
|
|
61216
|
-
skippedSteps: "Skipped steps",
|
|
61217
|
-
live: "LIVE \xB7 read-only view",
|
|
61218
|
-
empty: "No steps yet",
|
|
61219
|
-
emptySubtitle: "Steps appear here as soon as the workflow starts.",
|
|
61220
|
-
noActiveStep: "No step selected",
|
|
61221
|
-
statuses: {
|
|
61222
|
-
done: "Done",
|
|
61223
|
-
in_progress: "In progress",
|
|
61224
|
-
running: "Running",
|
|
61225
|
-
skipped: "Skipped",
|
|
61226
|
-
blocked: "Blocked",
|
|
61227
|
-
attention: "Attention",
|
|
61228
|
-
not_started: "Not started"
|
|
61229
|
-
}
|
|
61230
|
-
};
|
|
61603
|
+
var import_jsx_runtime308 = require("react/jsx-runtime");
|
|
61231
61604
|
var WorkflowTracker = ({
|
|
61232
61605
|
data = sampleWorkflow,
|
|
61233
61606
|
accentColor = "blue",
|
|
@@ -61246,6 +61619,8 @@ var WorkflowTracker = ({
|
|
|
61246
61619
|
maxWidth = 1180,
|
|
61247
61620
|
railWidth = 360,
|
|
61248
61621
|
stickyRail = false,
|
|
61622
|
+
fillHeight = false,
|
|
61623
|
+
fillHeightOffset = 0,
|
|
61249
61624
|
loading = false,
|
|
61250
61625
|
loadingRows = 6,
|
|
61251
61626
|
emptyState,
|
|
@@ -61254,81 +61629,58 @@ var WorkflowTracker = ({
|
|
|
61254
61629
|
labels: labelOverrides,
|
|
61255
61630
|
onStepSelect,
|
|
61256
61631
|
onSubStepSelect,
|
|
61632
|
+
onStepAction,
|
|
61257
61633
|
className,
|
|
61258
61634
|
style,
|
|
61259
61635
|
...rest
|
|
61260
61636
|
}) => {
|
|
61261
61637
|
const steps = data?.steps ?? [];
|
|
61262
|
-
const
|
|
61263
|
-
|
|
61264
|
-
|
|
61265
|
-
|
|
61266
|
-
|
|
61267
|
-
const palette = (0, import_react278.useMemo)(
|
|
61268
|
-
() => ({
|
|
61269
|
-
accent: accentColor,
|
|
61270
|
-
attention: attentionColor,
|
|
61271
|
-
blocked: blockedColor,
|
|
61272
|
-
muted: mutedColor,
|
|
61273
|
-
translucent
|
|
61274
|
-
}),
|
|
61275
|
-
[accentColor, attentionColor, blockedColor, mutedColor, translucent]
|
|
61276
|
-
);
|
|
61277
|
-
const labels = (0, import_react278.useMemo)(
|
|
61278
|
-
() => ({
|
|
61279
|
-
...DEFAULT_LABELS,
|
|
61280
|
-
...labelOverrides,
|
|
61281
|
-
statuses: {
|
|
61282
|
-
...DEFAULT_LABELS.statuses,
|
|
61283
|
-
...labelOverrides?.statuses
|
|
61284
|
-
}
|
|
61285
|
-
}),
|
|
61286
|
-
[labelOverrides]
|
|
61287
|
-
);
|
|
61288
|
-
const progress = (0, import_react278.useMemo)(() => computeProgress(steps), [steps]);
|
|
61289
|
-
const tallies = (0, import_react278.useMemo)(() => computeTallies(steps), [steps]);
|
|
61290
|
-
const active = (0, import_react278.useMemo)(
|
|
61291
|
-
() => resolveActiveStep(steps, data?.activeStepId),
|
|
61292
|
-
[steps, data?.activeStepId]
|
|
61293
|
-
);
|
|
61294
|
-
const attentionSteps = (0, import_react278.useMemo)(() => getAttentionSteps(steps), [steps]);
|
|
61295
|
-
const skippedSteps = (0, import_react278.useMemo)(() => getSkippedSteps(steps), [steps]);
|
|
61296
|
-
const cardProps = {
|
|
61638
|
+
const styleProps = {
|
|
61639
|
+
accentColor,
|
|
61640
|
+
attentionColor,
|
|
61641
|
+
blockedColor,
|
|
61642
|
+
mutedColor,
|
|
61297
61643
|
variant,
|
|
61298
|
-
|
|
61644
|
+
cardTone,
|
|
61299
61645
|
corner,
|
|
61300
61646
|
glassOpacity,
|
|
61301
61647
|
vibrancy,
|
|
61302
61648
|
specularMode,
|
|
61303
61649
|
padding,
|
|
61304
|
-
|
|
61650
|
+
translucentSurfaces
|
|
61305
61651
|
};
|
|
61652
|
+
const { palette, surfaces } = useWorkflowChrome(styleProps);
|
|
61653
|
+
const labels = (0, import_react282.useMemo)(() => resolveLabels(labelOverrides), [labelOverrides]);
|
|
61654
|
+
const cardProps = buildCardProps(styleProps);
|
|
61655
|
+
const attentionSteps = (0, import_react282.useMemo)(() => getAttentionSteps(steps), [steps]);
|
|
61656
|
+
const skippedSteps = (0, import_react282.useMemo)(() => getSkippedSteps(steps), [steps]);
|
|
61306
61657
|
const railStyle = {
|
|
61307
|
-
"--wt-rail-width": typeof railWidth === "number" ? `${railWidth}px` : railWidth
|
|
61658
|
+
"--wt-rail-width": typeof railWidth === "number" ? `${railWidth}px` : railWidth,
|
|
61659
|
+
"--wt-fill-offset": typeof fillHeightOffset === "number" ? `${fillHeightOffset}px` : fillHeightOffset
|
|
61308
61660
|
};
|
|
61309
|
-
return /* @__PURE__ */ (0,
|
|
61661
|
+
return /* @__PURE__ */ (0, import_jsx_runtime308.jsxs)(
|
|
61310
61662
|
"div",
|
|
61311
61663
|
{
|
|
61312
|
-
className: (0,
|
|
61664
|
+
className: (0, import_classnames118.default)("@container w-full", className),
|
|
61313
61665
|
style: { maxWidth, ...railStyle, ...style },
|
|
61314
61666
|
"aria-busy": loading || void 0,
|
|
61315
61667
|
...rest,
|
|
61316
61668
|
children: [
|
|
61317
|
-
showHeader && loading && /* @__PURE__ */ (0,
|
|
61669
|
+
showHeader && loading && /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61318
61670
|
WorkflowHeaderSkeleton,
|
|
61319
61671
|
{
|
|
61320
61672
|
hasIcon: Boolean(data?.icon),
|
|
61321
61673
|
iconCorner
|
|
61322
61674
|
}
|
|
61323
61675
|
),
|
|
61324
|
-
showHeader && !loading && /* @__PURE__ */ (0,
|
|
61325
|
-
/* @__PURE__ */ (0,
|
|
61676
|
+
showHeader && !loading && /* @__PURE__ */ (0, import_jsx_runtime308.jsxs)("header", { className: "mb-5 flex flex-wrap items-start justify-between gap-3", children: [
|
|
61677
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
61326
61678
|
data?.icon && // `overflow-hidden` plus the shared corner class clips whatever
|
|
61327
61679
|
// the caller passes, so an <img> needs no rounding of its own.
|
|
61328
|
-
/* @__PURE__ */ (0,
|
|
61680
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61329
61681
|
"span",
|
|
61330
61682
|
{
|
|
61331
|
-
className: (0,
|
|
61683
|
+
className: (0, import_classnames118.default)(
|
|
61332
61684
|
"flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden [&>img]:h-full [&>img]:w-full [&>img]:object-cover",
|
|
61333
61685
|
getSurfaceCornerClass(iconCorner),
|
|
61334
61686
|
surfaces.chip
|
|
@@ -61336,33 +61688,33 @@ var WorkflowTracker = ({
|
|
|
61336
61688
|
children: data.icon
|
|
61337
61689
|
}
|
|
61338
61690
|
),
|
|
61339
|
-
/* @__PURE__ */ (0,
|
|
61340
|
-
data?.eyebrow && /* @__PURE__ */ (0,
|
|
61691
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsxs)("div", { className: "min-w-0", children: [
|
|
61692
|
+
data?.eyebrow && /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61341
61693
|
"p",
|
|
61342
61694
|
{
|
|
61343
|
-
className: (0,
|
|
61695
|
+
className: (0, import_classnames118.default)(
|
|
61344
61696
|
"text-[11px] font-semibold uppercase tracking-widest",
|
|
61345
61697
|
surfaces.faintText
|
|
61346
61698
|
),
|
|
61347
61699
|
children: data.eyebrow
|
|
61348
61700
|
}
|
|
61349
61701
|
),
|
|
61350
|
-
/* @__PURE__ */ (0,
|
|
61702
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)("h2", { className: "mt-1 text-2xl font-semibold tracking-tight text-neutral-900 dark:text-white sm:text-3xl", children: data?.title })
|
|
61351
61703
|
] })
|
|
61352
61704
|
] }),
|
|
61353
|
-
data?.live && /* @__PURE__ */ (0,
|
|
61705
|
+
data?.live && /* @__PURE__ */ (0, import_jsx_runtime308.jsxs)(
|
|
61354
61706
|
Pill_default,
|
|
61355
61707
|
{
|
|
61356
61708
|
size: "md",
|
|
61357
61709
|
tone: mutedColor,
|
|
61358
61710
|
variant: "outline",
|
|
61359
|
-
className: (0,
|
|
61711
|
+
className: (0, import_classnames118.default)("tracking-wide", surfaces.chip),
|
|
61360
61712
|
children: [
|
|
61361
|
-
/* @__PURE__ */ (0,
|
|
61713
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61362
61714
|
"span",
|
|
61363
61715
|
{
|
|
61364
61716
|
"aria-hidden": "true",
|
|
61365
|
-
className: (0,
|
|
61717
|
+
className: (0, import_classnames118.default)(
|
|
61366
61718
|
"mr-2 inline-block h-1.5 w-1.5 rounded-full",
|
|
61367
61719
|
`bg-${accentColor}-500 dark:bg-${accentColor}-400`
|
|
61368
61720
|
)
|
|
@@ -61373,67 +61725,88 @@ var WorkflowTracker = ({
|
|
|
61373
61725
|
}
|
|
61374
61726
|
)
|
|
61375
61727
|
] }),
|
|
61376
|
-
/* @__PURE__ */ (0,
|
|
61377
|
-
|
|
61378
|
-
|
|
61379
|
-
|
|
61380
|
-
|
|
61381
|
-
|
|
61382
|
-
|
|
61383
|
-
|
|
61728
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsxs)(
|
|
61729
|
+
"div",
|
|
61730
|
+
{
|
|
61731
|
+
className: (0, import_classnames118.default)(
|
|
61732
|
+
"grid grid-cols-1 items-start gap-5 @4xl:grid-cols-[var(--wt-rail-width)_minmax(0,1fr)]",
|
|
61733
|
+
fillHeight && "@4xl:h-[calc(100dvh-var(--wt-fill-offset))]"
|
|
61734
|
+
),
|
|
61735
|
+
children: [
|
|
61736
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61737
|
+
WorkflowTrackerRail_default,
|
|
61384
61738
|
{
|
|
61385
|
-
|
|
61386
|
-
|
|
61387
|
-
palette,
|
|
61388
|
-
surfaces,
|
|
61389
|
-
labels,
|
|
61390
|
-
progress,
|
|
61391
|
-
tallies,
|
|
61392
|
-
showLegend: showLegend && !loading,
|
|
61739
|
+
...styleProps,
|
|
61740
|
+
data,
|
|
61393
61741
|
loading,
|
|
61394
61742
|
loadingRows,
|
|
61743
|
+
showLegend,
|
|
61395
61744
|
emptyState,
|
|
61745
|
+
labels: labelOverrides,
|
|
61746
|
+
cardScrollable: fillHeight,
|
|
61747
|
+
cardClassName: (0, import_classnames118.default)(
|
|
61748
|
+
stickyRail && !fillHeight && "@4xl:sticky @4xl:top-6",
|
|
61749
|
+
fillHeight && "@4xl:min-h-0 @4xl:self-stretch"
|
|
61750
|
+
),
|
|
61396
61751
|
onStepSelect,
|
|
61397
|
-
onSubStepSelect
|
|
61398
|
-
|
|
61399
|
-
)
|
|
61400
|
-
}
|
|
61401
|
-
),
|
|
61402
|
-
/* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { className: "@container flex min-w-0 flex-col gap-5", children: [
|
|
61403
|
-
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)(Panel_default, { ...cardProps, children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61404
|
-
WorkflowDetailPanel_default,
|
|
61405
|
-
{
|
|
61406
|
-
active,
|
|
61407
|
-
totalSteps: steps.length,
|
|
61408
|
-
palette,
|
|
61409
|
-
surfaces,
|
|
61410
|
-
labels,
|
|
61411
|
-
loading,
|
|
61412
|
-
onSubStepSelect
|
|
61413
|
-
}
|
|
61414
|
-
) }),
|
|
61415
|
-
!loading && (attentionSteps.length > 0 || skippedSteps.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { className: "grid grid-cols-1 gap-5 @xl:grid-cols-2", children: [
|
|
61416
|
-
attentionSteps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(Panel_default, { ...cardProps, children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61417
|
-
WorkflowSummaryCard_default,
|
|
61418
|
-
{
|
|
61419
|
-
title: labels.needsAttention,
|
|
61420
|
-
steps: attentionSteps,
|
|
61421
|
-
palette,
|
|
61422
|
-
surfaces
|
|
61752
|
+
onSubStepSelect,
|
|
61753
|
+
onStepAction
|
|
61423
61754
|
}
|
|
61424
|
-
)
|
|
61425
|
-
|
|
61426
|
-
|
|
61755
|
+
),
|
|
61756
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsxs)(
|
|
61757
|
+
"div",
|
|
61427
61758
|
{
|
|
61428
|
-
|
|
61429
|
-
|
|
61430
|
-
|
|
61431
|
-
|
|
61759
|
+
className: (0, import_classnames118.default)(
|
|
61760
|
+
"@container flex min-w-0 flex-col gap-5",
|
|
61761
|
+
fillHeight && "@4xl:min-h-0 @4xl:self-stretch"
|
|
61762
|
+
),
|
|
61763
|
+
children: [
|
|
61764
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61765
|
+
WorkflowTrackerStepDetails_default,
|
|
61766
|
+
{
|
|
61767
|
+
...styleProps,
|
|
61768
|
+
data,
|
|
61769
|
+
loading,
|
|
61770
|
+
labels: labelOverrides,
|
|
61771
|
+
onSubStepSelect,
|
|
61772
|
+
onStepAction
|
|
61773
|
+
}
|
|
61774
|
+
),
|
|
61775
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61776
|
+
WorkflowTrackerDetails_default,
|
|
61777
|
+
{
|
|
61778
|
+
...styleProps,
|
|
61779
|
+
data,
|
|
61780
|
+
loading,
|
|
61781
|
+
labels: labelOverrides
|
|
61782
|
+
}
|
|
61783
|
+
),
|
|
61784
|
+
!loading && (attentionSteps.length > 0 || skippedSteps.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime308.jsxs)("div", { className: "grid grid-cols-1 gap-5 @xl:grid-cols-2", children: [
|
|
61785
|
+
attentionSteps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(Panel_default, { ...cardProps, children: /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61786
|
+
WorkflowSummaryCard_default,
|
|
61787
|
+
{
|
|
61788
|
+
title: labels.needsAttention,
|
|
61789
|
+
steps: attentionSteps,
|
|
61790
|
+
palette,
|
|
61791
|
+
surfaces
|
|
61792
|
+
}
|
|
61793
|
+
) }),
|
|
61794
|
+
skippedSteps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(Panel_default, { ...cardProps, children: /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61795
|
+
WorkflowSummaryCard_default,
|
|
61796
|
+
{
|
|
61797
|
+
title: labels.skippedSteps,
|
|
61798
|
+
steps: skippedSteps,
|
|
61799
|
+
palette,
|
|
61800
|
+
surfaces
|
|
61801
|
+
}
|
|
61802
|
+
) })
|
|
61803
|
+
] })
|
|
61804
|
+
]
|
|
61432
61805
|
}
|
|
61433
|
-
)
|
|
61434
|
-
]
|
|
61435
|
-
|
|
61436
|
-
|
|
61806
|
+
)
|
|
61807
|
+
]
|
|
61808
|
+
}
|
|
61809
|
+
)
|
|
61437
61810
|
]
|
|
61438
61811
|
}
|
|
61439
61812
|
);
|
|
@@ -61441,9 +61814,9 @@ var WorkflowTracker = ({
|
|
|
61441
61814
|
var WorkflowTracker_default = WorkflowTracker;
|
|
61442
61815
|
|
|
61443
61816
|
// src/components/Gantt/Gantt.tsx
|
|
61444
|
-
var
|
|
61817
|
+
var import_react287 = require("react");
|
|
61445
61818
|
var import_react_dom15 = require("react-dom");
|
|
61446
|
-
var
|
|
61819
|
+
var import_classnames122 = __toESM(require("classnames"), 1);
|
|
61447
61820
|
|
|
61448
61821
|
// ../common/gantt/types.ts
|
|
61449
61822
|
var GANTT_ZOOM_PRESETS = [
|
|
@@ -62789,38 +63162,38 @@ var sampleGantt = {
|
|
|
62789
63162
|
};
|
|
62790
63163
|
|
|
62791
63164
|
// src/components/Gantt/GanttScale.tsx
|
|
62792
|
-
var
|
|
62793
|
-
var
|
|
63165
|
+
var import_classnames119 = __toESM(require("classnames"), 1);
|
|
63166
|
+
var import_jsx_runtime309 = require("react/jsx-runtime");
|
|
62794
63167
|
var GanttScale = ({ levels, height }) => {
|
|
62795
63168
|
if (levels.length === 0) {
|
|
62796
|
-
return /* @__PURE__ */ (0,
|
|
63169
|
+
return /* @__PURE__ */ (0, import_jsx_runtime309.jsx)("div", { style: { height } });
|
|
62797
63170
|
}
|
|
62798
63171
|
const coarseHeight = levels.length > 1 ? 24 : height;
|
|
62799
|
-
return /* @__PURE__ */ (0,
|
|
63172
|
+
return /* @__PURE__ */ (0, import_jsx_runtime309.jsx)("div", { className: "flex h-full w-full flex-col", children: levels.map((level, li) => /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
62800
63173
|
"div",
|
|
62801
63174
|
{
|
|
62802
|
-
className: (0,
|
|
63175
|
+
className: (0, import_classnames119.default)("flex w-full", li === 0 ? "shrink-0" : "min-h-0 flex-1"),
|
|
62803
63176
|
style: li === 0 ? { height: coarseHeight } : void 0,
|
|
62804
|
-
children: level.columns.map((col) => /* @__PURE__ */ (0,
|
|
63177
|
+
children: level.columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime309.jsxs)(
|
|
62805
63178
|
"div",
|
|
62806
63179
|
{
|
|
62807
|
-
className: (0,
|
|
63180
|
+
className: (0, import_classnames119.default)(
|
|
62808
63181
|
"flex shrink-0 flex-col items-center justify-center overflow-hidden border-r border-neutral-200/70 dark:border-neutral-800/70",
|
|
62809
63182
|
li === 0 ? "bg-neutral-50/60 dark:bg-neutral-800/40" : "bg-white dark:bg-neutral-900"
|
|
62810
63183
|
),
|
|
62811
63184
|
style: { width: col.width },
|
|
62812
63185
|
children: [
|
|
62813
|
-
/* @__PURE__ */ (0,
|
|
63186
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
62814
63187
|
"span",
|
|
62815
63188
|
{
|
|
62816
|
-
className: (0,
|
|
63189
|
+
className: (0, import_classnames119.default)(
|
|
62817
63190
|
"max-w-full truncate px-1 text-[10px] font-semibold uppercase leading-none tracking-wide",
|
|
62818
63191
|
li === 0 ? "text-neutral-700 dark:text-neutral-200" : "text-neutral-500 dark:text-neutral-400"
|
|
62819
63192
|
),
|
|
62820
63193
|
children: col.label
|
|
62821
63194
|
}
|
|
62822
63195
|
),
|
|
62823
|
-
col.subLabel != null && /* @__PURE__ */ (0,
|
|
63196
|
+
col.subLabel != null && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)("span", { className: "max-w-full truncate px-1 text-[9px] font-medium leading-none text-neutral-400 dark:text-neutral-500", children: col.subLabel })
|
|
62824
63197
|
]
|
|
62825
63198
|
},
|
|
62826
63199
|
col.id
|
|
@@ -62832,9 +63205,9 @@ var GanttScale = ({ levels, height }) => {
|
|
|
62832
63205
|
GanttScale.displayName = "GanttScale";
|
|
62833
63206
|
|
|
62834
63207
|
// src/components/Gantt/GanttLinkLayer.tsx
|
|
62835
|
-
var
|
|
62836
|
-
var
|
|
62837
|
-
var GanttLinkLayer = (0,
|
|
63208
|
+
var import_react283 = require("react");
|
|
63209
|
+
var import_jsx_runtime310 = require("react/jsx-runtime");
|
|
63210
|
+
var GanttLinkLayer = (0, import_react283.forwardRef)(
|
|
62838
63211
|
function GanttLinkLayer2({
|
|
62839
63212
|
width,
|
|
62840
63213
|
height,
|
|
@@ -62848,7 +63221,7 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62848
63221
|
onDeleteLink
|
|
62849
63222
|
}, ref) {
|
|
62850
63223
|
const t = useKitT();
|
|
62851
|
-
const svgRef = (0,
|
|
63224
|
+
const svgRef = (0, import_react283.useRef)(null);
|
|
62852
63225
|
const selPath = selected ? paths.find((p) => p.link === selected) : void 0;
|
|
62853
63226
|
const selColor = selPath ? selPath.color ?? color : color;
|
|
62854
63227
|
const selMid = selPath ? { x: (selPath.from.x + selPath.to.x) / 2, y: (selPath.from.y + selPath.to.y) / 2 } : null;
|
|
@@ -62869,24 +63242,24 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62869
63242
|
const pick = pickFromEvent(e) ?? clicked;
|
|
62870
63243
|
if (interactive && onDeleteLink) onDeleteLink(pick.link);
|
|
62871
63244
|
};
|
|
62872
|
-
return /* @__PURE__ */ (0,
|
|
63245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsxs)(
|
|
62873
63246
|
"div",
|
|
62874
63247
|
{
|
|
62875
63248
|
ref,
|
|
62876
63249
|
className: "pointer-events-none absolute top-0 z-10",
|
|
62877
63250
|
style: { left: offsetLeft, width, height },
|
|
62878
63251
|
children: [
|
|
62879
|
-
/* @__PURE__ */ (0,
|
|
63252
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsxs)("svg", { ref: svgRef, width, height, className: "block overflow-visible", children: [
|
|
62880
63253
|
paths.map((p, i) => {
|
|
62881
63254
|
const tokens = getGanttLinkTokens(p.color ?? color);
|
|
62882
63255
|
const sel = selected != null && p.link === selected;
|
|
62883
63256
|
const nodeR = sel ? 4.5 : 3.5;
|
|
62884
|
-
return /* @__PURE__ */ (0,
|
|
63257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsxs)(
|
|
62885
63258
|
"g",
|
|
62886
63259
|
{
|
|
62887
63260
|
style: sel ? { filter: `drop-shadow(0 0 3px var(--color-${p.color ?? color}-500))` } : void 0,
|
|
62888
63261
|
children: [
|
|
62889
|
-
/* @__PURE__ */ (0,
|
|
63262
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)(
|
|
62890
63263
|
"path",
|
|
62891
63264
|
{
|
|
62892
63265
|
d: p.d,
|
|
@@ -62902,10 +63275,10 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62902
63275
|
},
|
|
62903
63276
|
onClick: (e) => handlePick(e, p),
|
|
62904
63277
|
onDoubleClick: (e) => handleDelete(e, p),
|
|
62905
|
-
children: /* @__PURE__ */ (0,
|
|
63278
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("title", { children: `${p.link.source} \u2192 ${p.link.target} (${p.type.toUpperCase()})` })
|
|
62906
63279
|
}
|
|
62907
63280
|
),
|
|
62908
|
-
/* @__PURE__ */ (0,
|
|
63281
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)(
|
|
62909
63282
|
"path",
|
|
62910
63283
|
{
|
|
62911
63284
|
d: p.d,
|
|
@@ -62921,14 +63294,14 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62921
63294
|
},
|
|
62922
63295
|
onClick: (e) => handlePick(e, p),
|
|
62923
63296
|
onDoubleClick: (e) => handleDelete(e, p),
|
|
62924
|
-
children: /* @__PURE__ */ (0,
|
|
63297
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("title", { children: `${p.link.source} \u2192 ${p.link.target} (${p.type.toUpperCase()})` })
|
|
62925
63298
|
}
|
|
62926
63299
|
),
|
|
62927
|
-
p.arrow && /* @__PURE__ */ (0,
|
|
62928
|
-
/* @__PURE__ */ (0,
|
|
62929
|
-
/* @__PURE__ */ (0,
|
|
62930
|
-
/* @__PURE__ */ (0,
|
|
62931
|
-
/* @__PURE__ */ (0,
|
|
63300
|
+
p.arrow && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("polygon", { points: p.arrow, className: tokens.fill }),
|
|
63301
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: p.from.x, cy: p.from.y, r: nodeR + 2.5, className: tokens.halo }),
|
|
63302
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: p.from.x, cy: p.from.y, r: nodeR, className: tokens.fill }),
|
|
63303
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: p.to.x, cy: p.to.y, r: nodeR + 2.5, className: tokens.halo }),
|
|
63304
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: p.to.x, cy: p.to.y, r: nodeR, className: tokens.fill })
|
|
62932
63305
|
]
|
|
62933
63306
|
},
|
|
62934
63307
|
`${p.link.source}->${p.link.target}-${p.type}-${i}`
|
|
@@ -62936,8 +63309,8 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62936
63309
|
}),
|
|
62937
63310
|
rubber && (() => {
|
|
62938
63311
|
const tokens = getGanttLinkTokens(rubber.color);
|
|
62939
|
-
return /* @__PURE__ */ (0,
|
|
62940
|
-
/* @__PURE__ */ (0,
|
|
63312
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsxs)("g", { children: [
|
|
63313
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)(
|
|
62941
63314
|
"path",
|
|
62942
63315
|
{
|
|
62943
63316
|
d: rubber.d,
|
|
@@ -62948,15 +63321,15 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62948
63321
|
strokeDasharray: "5 3"
|
|
62949
63322
|
}
|
|
62950
63323
|
),
|
|
62951
|
-
rubber.arrow && /* @__PURE__ */ (0,
|
|
62952
|
-
/* @__PURE__ */ (0,
|
|
62953
|
-
/* @__PURE__ */ (0,
|
|
62954
|
-
/* @__PURE__ */ (0,
|
|
62955
|
-
/* @__PURE__ */ (0,
|
|
63324
|
+
rubber.arrow && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("polygon", { points: rubber.arrow, className: tokens.fill }),
|
|
63325
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: rubber.from.x, cy: rubber.from.y, r: 6, className: tokens.halo }),
|
|
63326
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: rubber.from.x, cy: rubber.from.y, r: 3.5, className: tokens.fill }),
|
|
63327
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: rubber.to.x, cy: rubber.to.y, r: 6, className: tokens.halo }),
|
|
63328
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("circle", { cx: rubber.to.x, cy: rubber.to.y, r: 3.5, className: tokens.fill })
|
|
62956
63329
|
] });
|
|
62957
63330
|
})()
|
|
62958
63331
|
] }),
|
|
62959
|
-
canDelete && selMid && /* @__PURE__ */ (0,
|
|
63332
|
+
canDelete && selMid && /* @__PURE__ */ (0, import_jsx_runtime310.jsxs)(
|
|
62960
63333
|
"button",
|
|
62961
63334
|
{
|
|
62962
63335
|
type: "button",
|
|
@@ -62974,7 +63347,7 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62974
63347
|
onClick: () => onDeleteLink(selected),
|
|
62975
63348
|
title: t("kit.gantt.removeDependency"),
|
|
62976
63349
|
children: [
|
|
62977
|
-
/* @__PURE__ */ (0,
|
|
63350
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("span", { "aria-hidden": true, children: "\u2715" }),
|
|
62978
63351
|
" ",
|
|
62979
63352
|
t("kit.gantt.delete")
|
|
62980
63353
|
]
|
|
@@ -62988,9 +63361,9 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62988
63361
|
GanttLinkLayer.displayName = "GanttLinkLayer";
|
|
62989
63362
|
|
|
62990
63363
|
// src/components/Gantt/GanttBodyRow.tsx
|
|
62991
|
-
var
|
|
62992
|
-
var
|
|
62993
|
-
var
|
|
63364
|
+
var import_react284 = require("react");
|
|
63365
|
+
var import_classnames120 = __toESM(require("classnames"), 1);
|
|
63366
|
+
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
62994
63367
|
var BAR_HEIGHT = 24;
|
|
62995
63368
|
var MILESTONE_SIZE = 14;
|
|
62996
63369
|
var GanttBodyRow = ({
|
|
@@ -63029,11 +63402,11 @@ var GanttBodyRow = ({
|
|
|
63029
63402
|
const t = useKitT();
|
|
63030
63403
|
const isDraggingThis = row.task != null && drag?.taskId === row.task.id;
|
|
63031
63404
|
const reorderDragging = isDraggingThis && drag?.kind === "reorder";
|
|
63032
|
-
return /* @__PURE__ */ (0,
|
|
63405
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63033
63406
|
"div",
|
|
63034
63407
|
{
|
|
63035
63408
|
"data-row-key": row.key,
|
|
63036
|
-
className: (0,
|
|
63409
|
+
className: (0, import_classnames120.default)(
|
|
63037
63410
|
// No overflow here: an overflow-hidden row root would become the
|
|
63038
63411
|
// sticky halves' (non-scrolling) scrollport and stop them pinning to
|
|
63039
63412
|
// the left edge while the timeline scrolls. The halves pin the
|
|
@@ -63050,7 +63423,7 @@ var GanttBodyRow = ({
|
|
|
63050
63423
|
boxShadow: `inset 2px 0 0 var(--color-${color}-500)`
|
|
63051
63424
|
} : {}
|
|
63052
63425
|
},
|
|
63053
|
-
children: row.task == null ? /* @__PURE__ */ (0,
|
|
63426
|
+
children: row.task == null ? /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63054
63427
|
LaneHeader,
|
|
63055
63428
|
{
|
|
63056
63429
|
row,
|
|
@@ -63061,20 +63434,20 @@ var GanttBodyRow = ({
|
|
|
63061
63434
|
dividerClass,
|
|
63062
63435
|
liveProgress: liveLane
|
|
63063
63436
|
}
|
|
63064
|
-
) : /* @__PURE__ */ (0,
|
|
63065
|
-
/* @__PURE__ */ (0,
|
|
63437
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(import_jsx_runtime311.Fragment, { children: [
|
|
63438
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
63066
63439
|
"div",
|
|
63067
63440
|
{
|
|
63068
|
-
className: (0,
|
|
63441
|
+
className: (0, import_classnames120.default)(
|
|
63069
63442
|
"sticky left-0 z-20 flex items-stretch overflow-hidden border-r border-b bg-white dark:bg-neutral-900",
|
|
63070
63443
|
dividerClass
|
|
63071
63444
|
),
|
|
63072
63445
|
style: { width: leftWidth },
|
|
63073
63446
|
children: [
|
|
63074
|
-
/* @__PURE__ */ (0,
|
|
63447
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "flex w-9 shrink-0 items-center justify-center", children: interactive && !row.task.locked && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63075
63448
|
"span",
|
|
63076
63449
|
{
|
|
63077
|
-
className: (0,
|
|
63450
|
+
className: (0, import_classnames120.default)(
|
|
63078
63451
|
"flex cursor-grab touch-none items-center text-neutral-300 transition-opacity active:cursor-grabbing dark:text-neutral-600",
|
|
63079
63452
|
reorderDragging ? "opacity-100" : "opacity-0 group-hover/row:opacity-100"
|
|
63080
63453
|
),
|
|
@@ -63082,10 +63455,10 @@ var GanttBodyRow = ({
|
|
|
63082
63455
|
onPointerDown: (e) => onGripPointerDown(row.key, row.task, e),
|
|
63083
63456
|
title: t("kit.gantt.dragReorder"),
|
|
63084
63457
|
"aria-hidden": "true",
|
|
63085
|
-
children: /* @__PURE__ */ (0,
|
|
63458
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(Drag, { className: "h-3.5 w-3.5" })
|
|
63086
63459
|
}
|
|
63087
63460
|
) }),
|
|
63088
|
-
columns.map((col, i) => /* @__PURE__ */ (0,
|
|
63461
|
+
columns.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63089
63462
|
Cell,
|
|
63090
63463
|
{
|
|
63091
63464
|
col,
|
|
@@ -63106,12 +63479,12 @@ var GanttBodyRow = ({
|
|
|
63106
63479
|
]
|
|
63107
63480
|
}
|
|
63108
63481
|
),
|
|
63109
|
-
/* @__PURE__ */ (0,
|
|
63482
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63110
63483
|
"div",
|
|
63111
63484
|
{
|
|
63112
|
-
className: (0,
|
|
63485
|
+
className: (0, import_classnames120.default)("relative shrink-0 border-b", dividerClass),
|
|
63113
63486
|
style: { width: timelineWidth },
|
|
63114
|
-
children: /* @__PURE__ */ (0,
|
|
63487
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63115
63488
|
TaskBar,
|
|
63116
63489
|
{
|
|
63117
63490
|
task: row.task,
|
|
@@ -63152,57 +63525,57 @@ var LaneHeader = ({ row, columns, leftWidth, color, onCaretClick, dividerClass =
|
|
|
63152
63525
|
const laneColor = lane.color ?? color;
|
|
63153
63526
|
const tokens = getGanttLaneTokens(laneColor);
|
|
63154
63527
|
const isOpen = lane.open !== false;
|
|
63155
|
-
return /* @__PURE__ */ (0,
|
|
63156
|
-
/* @__PURE__ */ (0,
|
|
63528
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(import_jsx_runtime311.Fragment, { children: [
|
|
63529
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
63157
63530
|
"div",
|
|
63158
63531
|
{
|
|
63159
|
-
className: (0,
|
|
63532
|
+
className: (0, import_classnames120.default)(
|
|
63160
63533
|
"sticky left-0 z-20 flex items-stretch overflow-hidden border-r border-b bg-white dark:bg-neutral-900",
|
|
63161
63534
|
dividerClass
|
|
63162
63535
|
),
|
|
63163
63536
|
style: { width: leftWidth },
|
|
63164
63537
|
children: [
|
|
63165
|
-
/* @__PURE__ */ (0,
|
|
63166
|
-
/* @__PURE__ */ (0,
|
|
63538
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: (0, import_classnames120.default)("pointer-events-none absolute inset-0", tokens.band) }),
|
|
63539
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "relative flex w-9 shrink-0 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63167
63540
|
"button",
|
|
63168
63541
|
{
|
|
63169
63542
|
type: "button",
|
|
63170
63543
|
className: "flex h-5 w-5 shrink-0 items-center justify-center rounded text-neutral-500 hover:bg-white/60 focus-visible:ring-2 focus-visible:ring-neutral-400 dark:text-neutral-400 dark:hover:bg-white/10",
|
|
63171
63544
|
onClick: () => onCaretClick(lane.id, isOpen),
|
|
63172
63545
|
"aria-label": t(isOpen ? "kit.gantt.collapse" : "kit.gantt.expand", { name: lane.label }),
|
|
63173
|
-
children: /* @__PURE__ */ (0,
|
|
63546
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(ChevronRight, { className: (0, import_classnames120.default)("h-3 w-3 transition-transform", isOpen && "rotate-90") })
|
|
63174
63547
|
}
|
|
63175
63548
|
) }),
|
|
63176
|
-
columns.map((col, i) => /* @__PURE__ */ (0,
|
|
63549
|
+
columns.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63177
63550
|
"div",
|
|
63178
63551
|
{
|
|
63179
|
-
className: (0,
|
|
63552
|
+
className: (0, import_classnames120.default)(
|
|
63180
63553
|
"relative flex shrink-0 items-center gap-2 overflow-hidden border-r px-2 last:border-r-0",
|
|
63181
63554
|
dividerClass
|
|
63182
63555
|
),
|
|
63183
63556
|
style: { width: col.width ?? "160px" },
|
|
63184
|
-
children: i === 0 ? /* @__PURE__ */ (0,
|
|
63185
|
-
/* @__PURE__ */ (0,
|
|
63186
|
-
lane.description && /* @__PURE__ */ (0,
|
|
63187
|
-
row.childCount > 0 && /* @__PURE__ */ (0,
|
|
63188
|
-
] }) : col.key === "progress" ? /* @__PURE__ */ (0,
|
|
63557
|
+
children: i === 0 ? /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(import_jsx_runtime311.Fragment, { children: [
|
|
63558
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: (0, import_classnames120.default)("truncate text-[13px] font-semibold", tokens.label), children: lane.label }),
|
|
63559
|
+
lane.description && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "hidden truncate text-[11px] text-neutral-500 dark:text-neutral-400 lg:inline", children: lane.description }),
|
|
63560
|
+
row.childCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "shrink-0 rounded-full bg-white/70 px-1.5 py-0.5 text-[10px] font-semibold text-neutral-600 dark:bg-white/10 dark:text-neutral-300", children: row.childCount })
|
|
63561
|
+
] }) : col.key === "progress" ? /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(ProgressCell, { value: liveProgress ?? row.progress ?? 0, barClass: tokens.chip }) : null
|
|
63189
63562
|
},
|
|
63190
63563
|
col.key
|
|
63191
63564
|
))
|
|
63192
63565
|
]
|
|
63193
63566
|
}
|
|
63194
63567
|
),
|
|
63195
|
-
/* @__PURE__ */ (0,
|
|
63568
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: (0, import_classnames120.default)("relative min-w-0 flex-1 border-b", dividerClass), children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: (0, import_classnames120.default)("absolute inset-0", tokens.band) }) })
|
|
63196
63569
|
] });
|
|
63197
63570
|
};
|
|
63198
63571
|
var Cell = ({ col, task, depth, isGroup, childCount, first, onCaretClick, renderCell, liveProgress, liveRollup, rowProgress, dividerClass = "border-neutral-100 dark:border-neutral-800" }) => {
|
|
63199
63572
|
const t = useKitT();
|
|
63200
63573
|
const value = col.key === "name" ? task.name : col.key === "owner" ? task.owner : col.key === "progress" ? isGroup ? liveRollup ?? rowProgress ?? 0 : liveProgress ?? task.progress ?? 0 : task.values?.[col.key] ?? null;
|
|
63201
63574
|
const custom = col.key !== "name" && renderCell ? renderCell(value, task, col) : null;
|
|
63202
|
-
return /* @__PURE__ */ (0,
|
|
63575
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63203
63576
|
"div",
|
|
63204
63577
|
{
|
|
63205
|
-
className: (0,
|
|
63578
|
+
className: (0, import_classnames120.default)(
|
|
63206
63579
|
"flex shrink-0 items-center gap-1.5 overflow-hidden border-r px-2 text-[12.5px] last:border-r-0",
|
|
63207
63580
|
dividerClass
|
|
63208
63581
|
),
|
|
@@ -63210,50 +63583,50 @@ var Cell = ({ col, task, depth, isGroup, childCount, first, onCaretClick, render
|
|
|
63210
63583
|
width: col.width ?? "160px",
|
|
63211
63584
|
justifyContent: col.align === "center" ? "center" : col.align === "right" ? "flex-end" : "flex-start"
|
|
63212
63585
|
},
|
|
63213
|
-
children: first ? /* @__PURE__ */ (0,
|
|
63214
|
-
/* @__PURE__ */ (0,
|
|
63586
|
+
children: first ? /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(import_jsx_runtime311.Fragment, { children: [
|
|
63587
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "shrink-0", style: { width: depth * 14 + 18 }, children: isGroup && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63215
63588
|
"button",
|
|
63216
63589
|
{
|
|
63217
63590
|
type: "button",
|
|
63218
63591
|
className: "flex h-4 w-4 items-center justify-center rounded text-neutral-400 hover:bg-neutral-100 hover:text-neutral-600 focus-visible:ring-2 focus-visible:ring-neutral-400 dark:hover:bg-white/10 dark:hover:text-neutral-300",
|
|
63219
63592
|
onClick: () => onCaretClick(task.id, task.open !== false),
|
|
63220
63593
|
"aria-label": t(task.open === false ? "kit.gantt.expand" : "kit.gantt.collapse", { name: task.name }),
|
|
63221
|
-
children: /* @__PURE__ */ (0,
|
|
63594
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(ChevronRight, { className: (0, import_classnames120.default)("h-3 w-3 transition-transform", task.open !== false && "rotate-90") })
|
|
63222
63595
|
}
|
|
63223
63596
|
) }),
|
|
63224
|
-
isGroup && childCount > 0 ? /* @__PURE__ */ (0,
|
|
63225
|
-
/* @__PURE__ */ (0,
|
|
63226
|
-
/* @__PURE__ */ (0,
|
|
63227
|
-
] }) : /* @__PURE__ */ (0,
|
|
63228
|
-
] }) : col.kind === "owner" ? value != null ? /* @__PURE__ */ (0,
|
|
63229
|
-
/* @__PURE__ */ (0,
|
|
63597
|
+
isGroup && childCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("span", { className: "flex min-w-0 items-center gap-1 font-semibold text-neutral-800 dark:text-neutral-100", children: [
|
|
63598
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "truncate", children: task.name }),
|
|
63599
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "shrink-0 rounded-full bg-neutral-100 px-1 text-[10px] font-semibold text-neutral-500 dark:bg-white/10 dark:text-neutral-400", children: childCount })
|
|
63600
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "truncate font-medium text-neutral-700 dark:text-neutral-300", children: task.name })
|
|
63601
|
+
] }) : col.kind === "owner" ? value != null ? /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("span", { className: "flex min-w-0 items-center gap-1.5 text-neutral-600 dark:text-neutral-400", children: [
|
|
63602
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63230
63603
|
"span",
|
|
63231
63604
|
{
|
|
63232
|
-
className: (0,
|
|
63605
|
+
className: (0, import_classnames120.default)(
|
|
63233
63606
|
"flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[8px] font-bold uppercase text-white",
|
|
63234
63607
|
getGanttBarTokens(task.color ?? "blue").fill
|
|
63235
63608
|
),
|
|
63236
63609
|
children: String(value).slice(0, 1)
|
|
63237
63610
|
}
|
|
63238
63611
|
),
|
|
63239
|
-
/* @__PURE__ */ (0,
|
|
63240
|
-
] }) : /* @__PURE__ */ (0,
|
|
63612
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "truncate", children: String(value) })
|
|
63613
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "text-neutral-400 dark:text-neutral-600", children: "\u2014" }) : col.kind === "progress" ? /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(ProgressCell, { value: typeof value === "number" ? value : 0 }) : col.kind === "badge" ? task.badge != null ? /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63241
63614
|
"span",
|
|
63242
63615
|
{
|
|
63243
|
-
className: (0,
|
|
63616
|
+
className: (0, import_classnames120.default)(
|
|
63244
63617
|
"rounded-full px-1.5 py-0.5 text-[10px] font-semibold",
|
|
63245
63618
|
getGanttBarTokens(task.badgeColor ?? "neutral").fill,
|
|
63246
63619
|
"text-white"
|
|
63247
63620
|
),
|
|
63248
63621
|
children: task.badge
|
|
63249
63622
|
}
|
|
63250
|
-
) : /* @__PURE__ */ (0,
|
|
63623
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "text-neutral-400 dark:text-neutral-600", children: "\u2014" }) : custom != null ? custom : /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "truncate text-neutral-600 dark:text-neutral-400", children: value == null || value === "" ? "\u2014" : String(value) })
|
|
63251
63624
|
}
|
|
63252
63625
|
);
|
|
63253
63626
|
};
|
|
63254
|
-
var ProgressCell = ({ value, barClass = "bg-emerald-500" }) => /* @__PURE__ */ (0,
|
|
63255
|
-
/* @__PURE__ */ (0,
|
|
63256
|
-
/* @__PURE__ */ (0,
|
|
63627
|
+
var ProgressCell = ({ value, barClass = "bg-emerald-500" }) => /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("span", { className: "flex w-full items-center gap-1.5", children: [
|
|
63628
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "h-1.5 min-w-0 flex-1 overflow-hidden rounded-full bg-neutral-200/80 dark:bg-white/10", children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: (0, import_classnames120.default)("block h-full rounded-full", barClass), style: { width: `${Math.round(value * 100)}%` } }) }),
|
|
63629
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("span", { className: "w-7 shrink-0 text-right text-[10px] font-semibold tabular-nums text-neutral-500 dark:text-neutral-400", children: [
|
|
63257
63630
|
Math.round(value * 100),
|
|
63258
63631
|
"%"
|
|
63259
63632
|
] })
|
|
@@ -63285,7 +63658,7 @@ var TaskBar = ({
|
|
|
63285
63658
|
const t = useKitT();
|
|
63286
63659
|
const milestone = task.type === "milestone";
|
|
63287
63660
|
const barColor = task.color ?? color;
|
|
63288
|
-
const tokens = (0,
|
|
63661
|
+
const tokens = (0, import_react284.useMemo)(() => getGanttBarTokens(barColor), [barColor]);
|
|
63289
63662
|
const startMs = liveDates ? liveDates.start : toMs(task.start);
|
|
63290
63663
|
const endMs = liveDates ? liveDates.end : toMs(task.end);
|
|
63291
63664
|
const left = dateToX(startMs, rangeStart, zoom);
|
|
@@ -63310,7 +63683,7 @@ var TaskBar = ({
|
|
|
63310
63683
|
pct: progressPct
|
|
63311
63684
|
});
|
|
63312
63685
|
if (milestone) {
|
|
63313
|
-
return /* @__PURE__ */ (0,
|
|
63686
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
63314
63687
|
"div",
|
|
63315
63688
|
{
|
|
63316
63689
|
role: "button",
|
|
@@ -63318,7 +63691,7 @@ var TaskBar = ({
|
|
|
63318
63691
|
"aria-label": ariaLabel,
|
|
63319
63692
|
title: ariaLabel,
|
|
63320
63693
|
"data-gantt-bar": task.id,
|
|
63321
|
-
className: (0,
|
|
63694
|
+
className: (0, import_classnames120.default)(
|
|
63322
63695
|
"absolute z-10 flex cursor-pointer items-center gap-1.5 outline-none",
|
|
63323
63696
|
selected && selectionTokens.ring,
|
|
63324
63697
|
"rounded"
|
|
@@ -63328,13 +63701,13 @@ var TaskBar = ({
|
|
|
63328
63701
|
onClick: () => onSelect(task.id),
|
|
63329
63702
|
onKeyDown: (e) => onBarKeyDown(e, task),
|
|
63330
63703
|
children: [
|
|
63331
|
-
/* @__PURE__ */ (0,
|
|
63332
|
-
/* @__PURE__ */ (0,
|
|
63704
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: (0, import_classnames120.default)("h-3.5 w-3.5 shrink-0 rotate-45 rounded-[2px] shadow-sm", tokens.milestone) }),
|
|
63705
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: "truncate text-[11px] font-semibold text-neutral-700 dark:text-neutral-300", children: task.name })
|
|
63333
63706
|
]
|
|
63334
63707
|
}
|
|
63335
63708
|
);
|
|
63336
63709
|
}
|
|
63337
|
-
return /* @__PURE__ */ (0,
|
|
63710
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
63338
63711
|
"div",
|
|
63339
63712
|
{
|
|
63340
63713
|
role: "button",
|
|
@@ -63342,7 +63715,7 @@ var TaskBar = ({
|
|
|
63342
63715
|
"aria-label": ariaLabel,
|
|
63343
63716
|
title: `${task.name} \xB7 ${formatDateTime(startMs, locale)} \u2192 ${formatDateTime(endMs, locale)} \xB7 ${progressPct}%`,
|
|
63344
63717
|
"data-gantt-bar": task.id,
|
|
63345
|
-
className: (0,
|
|
63718
|
+
className: (0, import_classnames120.default)(
|
|
63346
63719
|
"group/bar absolute z-10 cursor-grab touch-none rounded-md shadow-sm outline-none transition-shadow active:cursor-grabbing",
|
|
63347
63720
|
tokens.base,
|
|
63348
63721
|
tokens.rim,
|
|
@@ -63359,17 +63732,17 @@ var TaskBar = ({
|
|
|
63359
63732
|
onClick: () => onSelect(task.id),
|
|
63360
63733
|
onKeyDown: (e) => onBarKeyDown(e, task),
|
|
63361
63734
|
children: [
|
|
63362
|
-
progress > 0 && /* @__PURE__ */ (0,
|
|
63735
|
+
progress > 0 && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63363
63736
|
"div",
|
|
63364
63737
|
{
|
|
63365
|
-
className: (0,
|
|
63738
|
+
className: (0, import_classnames120.default)("absolute inset-y-0 left-0 rounded-l-md", tokens.progress),
|
|
63366
63739
|
style: { width: `${progress * 100}%` }
|
|
63367
63740
|
}
|
|
63368
63741
|
),
|
|
63369
|
-
canEdit && !row.isGroup && progress > 0 && progress < 1 && /* @__PURE__ */ (0,
|
|
63742
|
+
canEdit && !row.isGroup && progress > 0 && progress < 1 && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63370
63743
|
"div",
|
|
63371
63744
|
{
|
|
63372
|
-
className: (0,
|
|
63745
|
+
className: (0, import_classnames120.default)(
|
|
63373
63746
|
"absolute inset-y-0 z-20 w-2 cursor-ew-resize touch-none opacity-0 transition-opacity group-hover/bar:opacity-100",
|
|
63374
63747
|
liveProgress != null && "opacity-100"
|
|
63375
63748
|
),
|
|
@@ -63377,10 +63750,10 @@ var TaskBar = ({
|
|
|
63377
63750
|
onPointerDown: (e) => onProgressPointerDown(task, e),
|
|
63378
63751
|
title: labels.progress,
|
|
63379
63752
|
"aria-hidden": "true",
|
|
63380
|
-
children: /* @__PURE__ */ (0,
|
|
63753
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "mx-auto h-full w-0.5 rounded-full bg-white/90" })
|
|
63381
63754
|
}
|
|
63382
63755
|
),
|
|
63383
|
-
liveProgress != null && /* @__PURE__ */ (0,
|
|
63756
|
+
liveProgress != null && /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
63384
63757
|
"div",
|
|
63385
63758
|
{
|
|
63386
63759
|
className: "pointer-events-none absolute -top-5 z-30 -translate-x-1/2 rounded-full bg-neutral-900/90 px-1.5 py-px text-[10px] font-semibold tabular-nums text-white shadow-md",
|
|
@@ -63391,31 +63764,31 @@ var TaskBar = ({
|
|
|
63391
63764
|
]
|
|
63392
63765
|
}
|
|
63393
63766
|
),
|
|
63394
|
-
showName && (renderBar != null ? /* @__PURE__ */ (0,
|
|
63395
|
-
canEdit && /* @__PURE__ */ (0,
|
|
63396
|
-
/* @__PURE__ */ (0,
|
|
63767
|
+
showName && (renderBar != null ? /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: (0, import_classnames120.default)("pointer-events-none absolute inset-0 flex items-center px-1.5 text-[11px] font-medium", labelText), children: renderBar(task, { taskId: task.id, left, width, top, height: row.height, milestone: false }) }) : /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { className: (0, import_classnames120.default)("pointer-events-none absolute inset-0 flex items-center truncate px-1.5 text-[11px] font-medium", labelText), children: task.name })),
|
|
63768
|
+
canEdit && /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(import_jsx_runtime311.Fragment, { children: [
|
|
63769
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63397
63770
|
"div",
|
|
63398
63771
|
{
|
|
63399
63772
|
className: "absolute inset-y-0 -left-1 z-20 w-2 cursor-ew-resize touch-none",
|
|
63400
63773
|
onPointerDown: (e) => onResizePointerDown(task, "start", e),
|
|
63401
63774
|
title: t("kit.gantt.resizeStart"),
|
|
63402
63775
|
"aria-hidden": "true",
|
|
63403
|
-
children: /* @__PURE__ */ (0,
|
|
63776
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "mx-auto h-full w-1 rounded-full bg-white/0 opacity-0 transition-opacity group-hover/bar:opacity-100" })
|
|
63404
63777
|
}
|
|
63405
63778
|
),
|
|
63406
|
-
/* @__PURE__ */ (0,
|
|
63779
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63407
63780
|
"div",
|
|
63408
63781
|
{
|
|
63409
63782
|
className: "absolute inset-y-0 -right-1 z-20 w-2 cursor-ew-resize touch-none",
|
|
63410
63783
|
onPointerDown: (e) => onResizePointerDown(task, "end", e),
|
|
63411
63784
|
title: t("kit.gantt.resizeEnd"),
|
|
63412
63785
|
"aria-hidden": "true",
|
|
63413
|
-
children: /* @__PURE__ */ (0,
|
|
63786
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "mx-auto h-full w-1 rounded-full bg-white/0 opacity-0 transition-opacity group-hover/bar:opacity-100" })
|
|
63414
63787
|
}
|
|
63415
63788
|
)
|
|
63416
63789
|
] }),
|
|
63417
|
-
canEdit && /* @__PURE__ */ (0,
|
|
63418
|
-
/* @__PURE__ */ (0,
|
|
63790
|
+
canEdit && /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(import_jsx_runtime311.Fragment, { children: [
|
|
63791
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63419
63792
|
"button",
|
|
63420
63793
|
{
|
|
63421
63794
|
type: "button",
|
|
@@ -63426,7 +63799,7 @@ var TaskBar = ({
|
|
|
63426
63799
|
"aria-label": t("kit.gantt.linkFromStart", { task: task.name })
|
|
63427
63800
|
}
|
|
63428
63801
|
),
|
|
63429
|
-
/* @__PURE__ */ (0,
|
|
63802
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
63430
63803
|
"button",
|
|
63431
63804
|
{
|
|
63432
63805
|
type: "button",
|
|
@@ -63444,9 +63817,9 @@ var TaskBar = ({
|
|
|
63444
63817
|
};
|
|
63445
63818
|
|
|
63446
63819
|
// src/components/Gantt/GanttToolbar.tsx
|
|
63447
|
-
var
|
|
63448
|
-
var
|
|
63449
|
-
var
|
|
63820
|
+
var import_react285 = require("react");
|
|
63821
|
+
var import_classnames121 = __toESM(require("classnames"), 1);
|
|
63822
|
+
var import_jsx_runtime312 = require("react/jsx-runtime");
|
|
63450
63823
|
function nearestPreset(zoom, presets) {
|
|
63451
63824
|
let best = null;
|
|
63452
63825
|
let bestDist = Infinity;
|
|
@@ -63473,25 +63846,25 @@ var GanttToolbar = ({
|
|
|
63473
63846
|
Month: t("kit.gantt.zoomMonth"),
|
|
63474
63847
|
Quarter: t("kit.gantt.zoomQuarter")
|
|
63475
63848
|
};
|
|
63476
|
-
const active = (0,
|
|
63477
|
-
const chrome = (0,
|
|
63849
|
+
const active = (0, import_react285.useMemo)(() => nearestPreset(zoom, presets), [zoom, presets]);
|
|
63850
|
+
const chrome = (0, import_react285.useMemo)(
|
|
63478
63851
|
() => getSurfaceVariantClasses(variant, "neutral"),
|
|
63479
63852
|
[variant]
|
|
63480
63853
|
);
|
|
63481
|
-
return /* @__PURE__ */ (0,
|
|
63854
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
|
|
63482
63855
|
"div",
|
|
63483
63856
|
{
|
|
63484
|
-
className: (0,
|
|
63857
|
+
className: (0, import_classnames121.default)(
|
|
63485
63858
|
"pointer-events-auto flex items-center gap-1 rounded-lg p-1",
|
|
63486
63859
|
chrome
|
|
63487
63860
|
),
|
|
63488
63861
|
children: [
|
|
63489
|
-
/* @__PURE__ */ (0,
|
|
63862
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "flex items-center rounded-md bg-neutral-100 p-0.5 dark:bg-neutral-800", children: presets.map((p) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63490
63863
|
"button",
|
|
63491
63864
|
{
|
|
63492
63865
|
type: "button",
|
|
63493
63866
|
onClick: () => onZoomTo(p.value),
|
|
63494
|
-
className: (0,
|
|
63867
|
+
className: (0, import_classnames121.default)(
|
|
63495
63868
|
"rounded px-1.5 py-0.5 text-[10.5px] font-semibold transition-colors",
|
|
63496
63869
|
active === p.value ? "bg-white text-neutral-900 shadow-sm dark:bg-neutral-600 dark:text-white" : "text-neutral-500 hover:text-neutral-800 dark:text-neutral-400 dark:hover:text-neutral-200"
|
|
63497
63870
|
),
|
|
@@ -63499,9 +63872,9 @@ var GanttToolbar = ({
|
|
|
63499
63872
|
},
|
|
63500
63873
|
p.label
|
|
63501
63874
|
)) }),
|
|
63502
|
-
/* @__PURE__ */ (0,
|
|
63503
|
-
/* @__PURE__ */ (0,
|
|
63504
|
-
/* @__PURE__ */ (0,
|
|
63875
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "mx-0.5 h-4 w-px bg-neutral-200 dark:bg-neutral-700" }),
|
|
63876
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(Button_default, { variant: "ghost", size: "xs", onClick: () => onZoomBy(1 / 1.25), "aria-label": t("kit.gantt.zoomOut"), children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "text-xs font-semibold leading-none", children: "\u2212" }) }),
|
|
63877
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(Button_default, { variant: "ghost", size: "xs", onClick: () => onZoomBy(1.25), "aria-label": t("kit.gantt.zoomIn"), children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "text-xs font-semibold leading-none", children: "+" }) })
|
|
63505
63878
|
]
|
|
63506
63879
|
}
|
|
63507
63880
|
);
|
|
@@ -63509,16 +63882,16 @@ var GanttToolbar = ({
|
|
|
63509
63882
|
GanttToolbar.displayName = "GanttToolbar";
|
|
63510
63883
|
|
|
63511
63884
|
// src/components/Gantt/useGanttDrag.ts
|
|
63512
|
-
var
|
|
63885
|
+
var import_react286 = require("react");
|
|
63513
63886
|
function useGanttDrag(opts) {
|
|
63514
|
-
const [drag, setDrag] = (0,
|
|
63515
|
-
const [linkSelected, setLinkSelected] = (0,
|
|
63516
|
-
const optsRef = (0,
|
|
63887
|
+
const [drag, setDrag] = (0, import_react286.useState)(null);
|
|
63888
|
+
const [linkSelected, setLinkSelected] = (0, import_react286.useState)(null);
|
|
63889
|
+
const optsRef = (0, import_react286.useRef)(opts);
|
|
63517
63890
|
optsRef.current = opts;
|
|
63518
|
-
const dragRef = (0,
|
|
63891
|
+
const dragRef = (0, import_react286.useRef)(null);
|
|
63519
63892
|
dragRef.current = drag;
|
|
63520
63893
|
const { rows, zoom, rangeStart, accentColor } = opts;
|
|
63521
|
-
const barGeom = (0,
|
|
63894
|
+
const barGeom = (0, import_react286.useCallback)(
|
|
63522
63895
|
(taskId) => {
|
|
63523
63896
|
const row = rows.find((r) => r.key === `task:${taskId}`);
|
|
63524
63897
|
if (!row?.task) return null;
|
|
@@ -63538,7 +63911,7 @@ function useGanttDrag(opts) {
|
|
|
63538
63911
|
},
|
|
63539
63912
|
[rows, zoom, rangeStart]
|
|
63540
63913
|
);
|
|
63541
|
-
const findTargetBar = (0,
|
|
63914
|
+
const findTargetBar = (0, import_react286.useCallback)(
|
|
63542
63915
|
(x, y, excludeId) => {
|
|
63543
63916
|
const row = rows.find((r) => r.task && y >= r.top && y < r.top + r.height);
|
|
63544
63917
|
if (!row?.task || row.task.id === excludeId) return null;
|
|
@@ -63549,7 +63922,7 @@ function useGanttDrag(opts) {
|
|
|
63549
63922
|
},
|
|
63550
63923
|
[rows, barGeom]
|
|
63551
63924
|
);
|
|
63552
|
-
const allBarGeoms = (0,
|
|
63925
|
+
const allBarGeoms = (0, import_react286.useCallback)(() => {
|
|
63553
63926
|
const out = [];
|
|
63554
63927
|
for (const row of rows) {
|
|
63555
63928
|
if (!row.task) continue;
|
|
@@ -63558,17 +63931,17 @@ function useGanttDrag(opts) {
|
|
|
63558
63931
|
}
|
|
63559
63932
|
return out;
|
|
63560
63933
|
}, [rows, barGeom]);
|
|
63561
|
-
const timelineX = (0,
|
|
63934
|
+
const timelineX = (0, import_react286.useCallback)((clientX) => {
|
|
63562
63935
|
const overlay = optsRef.current.overlayRef.current;
|
|
63563
63936
|
if (!overlay) return 0;
|
|
63564
63937
|
return clientX - overlay.getBoundingClientRect().left;
|
|
63565
63938
|
}, []);
|
|
63566
|
-
const rowY = (0,
|
|
63939
|
+
const rowY = (0, import_react286.useCallback)((clientY) => {
|
|
63567
63940
|
const overlay = optsRef.current.overlayRef.current;
|
|
63568
63941
|
if (!overlay) return 0;
|
|
63569
63942
|
return clientY - overlay.getBoundingClientRect().top;
|
|
63570
63943
|
}, []);
|
|
63571
|
-
(0,
|
|
63944
|
+
(0, import_react286.useEffect)(() => {
|
|
63572
63945
|
if (!drag) return;
|
|
63573
63946
|
const onMove = (e) => {
|
|
63574
63947
|
e.preventDefault();
|
|
@@ -63693,7 +64066,7 @@ function useGanttDrag(opts) {
|
|
|
63693
64066
|
window.removeEventListener("pointerup", onUp);
|
|
63694
64067
|
};
|
|
63695
64068
|
}, [drag != null, timelineX, rowY]);
|
|
63696
|
-
const beginDrag = (0,
|
|
64069
|
+
const beginDrag = (0, import_react286.useCallback)(
|
|
63697
64070
|
(partial, e, focusEl) => {
|
|
63698
64071
|
const o = optsRef.current;
|
|
63699
64072
|
if (!o.interactive) return;
|
|
@@ -63727,7 +64100,7 @@ function useGanttDrag(opts) {
|
|
|
63727
64100
|
},
|
|
63728
64101
|
[timelineX, rowY]
|
|
63729
64102
|
);
|
|
63730
|
-
const onBarPointerDown = (0,
|
|
64103
|
+
const onBarPointerDown = (0, import_react286.useCallback)(
|
|
63731
64104
|
(task, e) => {
|
|
63732
64105
|
if (e.button !== 0) return;
|
|
63733
64106
|
beginDrag(
|
|
@@ -63745,7 +64118,7 @@ function useGanttDrag(opts) {
|
|
|
63745
64118
|
},
|
|
63746
64119
|
[beginDrag, timelineX, rowY]
|
|
63747
64120
|
);
|
|
63748
|
-
const onResizePointerDown = (0,
|
|
64121
|
+
const onResizePointerDown = (0, import_react286.useCallback)(
|
|
63749
64122
|
(task, edge, e) => {
|
|
63750
64123
|
if (e.button !== 0) return;
|
|
63751
64124
|
e.stopPropagation();
|
|
@@ -63764,7 +64137,7 @@ function useGanttDrag(opts) {
|
|
|
63764
64137
|
},
|
|
63765
64138
|
[beginDrag, timelineX, rowY]
|
|
63766
64139
|
);
|
|
63767
|
-
const onGripPointerDown = (0,
|
|
64140
|
+
const onGripPointerDown = (0, import_react286.useCallback)(
|
|
63768
64141
|
(_rowKey, task, e) => {
|
|
63769
64142
|
if (e.button !== 0) return;
|
|
63770
64143
|
const rowEl = e.currentTarget.closest(
|
|
@@ -63789,7 +64162,7 @@ function useGanttDrag(opts) {
|
|
|
63789
64162
|
},
|
|
63790
64163
|
[beginDrag, timelineX, rowY]
|
|
63791
64164
|
);
|
|
63792
|
-
const onLinkHandlePointerDown = (0,
|
|
64165
|
+
const onLinkHandlePointerDown = (0, import_react286.useCallback)(
|
|
63793
64166
|
(task, side, e, fromOffset = 0) => {
|
|
63794
64167
|
if (e.button !== 0) return;
|
|
63795
64168
|
e.stopPropagation();
|
|
@@ -63809,7 +64182,7 @@ function useGanttDrag(opts) {
|
|
|
63809
64182
|
},
|
|
63810
64183
|
[beginDrag, timelineX, rowY]
|
|
63811
64184
|
);
|
|
63812
|
-
const onProgressPointerDown = (0,
|
|
64185
|
+
const onProgressPointerDown = (0, import_react286.useCallback)(
|
|
63813
64186
|
(task, e) => {
|
|
63814
64187
|
if (e.button !== 0) return;
|
|
63815
64188
|
e.stopPropagation();
|
|
@@ -63827,7 +64200,7 @@ function useGanttDrag(opts) {
|
|
|
63827
64200
|
},
|
|
63828
64201
|
[beginDrag, timelineX, rowY]
|
|
63829
64202
|
);
|
|
63830
|
-
const rubber = (0,
|
|
64203
|
+
const rubber = (0, import_react286.useMemo)(() => {
|
|
63831
64204
|
if (!drag || drag.kind !== "link") return null;
|
|
63832
64205
|
const source = barGeom(drag.taskId);
|
|
63833
64206
|
if (!source) return null;
|
|
@@ -63859,7 +64232,7 @@ function useGanttDrag(opts) {
|
|
|
63859
64232
|
}
|
|
63860
64233
|
|
|
63861
64234
|
// src/components/Gantt/Gantt.tsx
|
|
63862
|
-
var
|
|
64235
|
+
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
63863
64236
|
var HEADER_HEIGHT = 52;
|
|
63864
64237
|
var GRIP_WIDTH = 36;
|
|
63865
64238
|
var DEFAULT_COLUMNS = [
|
|
@@ -63918,7 +64291,7 @@ var Gantt = ({
|
|
|
63918
64291
|
const t = useKitT();
|
|
63919
64292
|
const kitEngine = useKitEngine();
|
|
63920
64293
|
const dateLocale = locale ?? kitEngine.locale;
|
|
63921
|
-
const allLabels = (0,
|
|
64294
|
+
const allLabels = (0, import_react287.useMemo)(
|
|
63922
64295
|
() => ({
|
|
63923
64296
|
loading: t("kit.gantt.loading"),
|
|
63924
64297
|
empty: t("kit.gantt.empty"),
|
|
@@ -63941,10 +64314,10 @@ var Gantt = ({
|
|
|
63941
64314
|
title: c.key === "name" ? allLabels.task : c.key === "owner" ? t("kit.gantt.colOwner") : t("kit.gantt.colProgress")
|
|
63942
64315
|
}));
|
|
63943
64316
|
const interactive = editable ?? Boolean(onTasksChange || onLinksChange || onReorder);
|
|
63944
|
-
const surfaceText = (0,
|
|
63945
|
-
const [internalZoom, setInternalZoom] = (0,
|
|
64317
|
+
const surfaceText = (0, import_react287.useMemo)(() => getSurfaceTextTokens(variant), [variant]);
|
|
64318
|
+
const [internalZoom, setInternalZoom] = (0, import_react287.useState)(initialZoom);
|
|
63946
64319
|
const zoom = zoomProp ?? internalZoom;
|
|
63947
|
-
const setZoom = (0,
|
|
64320
|
+
const setZoom = (0, import_react287.useCallback)(
|
|
63948
64321
|
(z) => {
|
|
63949
64322
|
const clamped = Math.min(maxZoom, Math.max(minZoom, z));
|
|
63950
64323
|
if (onZoomChange) onZoomChange(clamped);
|
|
@@ -63952,33 +64325,33 @@ var Gantt = ({
|
|
|
63952
64325
|
},
|
|
63953
64326
|
[minZoom, maxZoom, onZoomChange]
|
|
63954
64327
|
);
|
|
63955
|
-
const [internalSelection, setInternalSelection] = (0,
|
|
64328
|
+
const [internalSelection, setInternalSelection] = (0, import_react287.useState)(null);
|
|
63956
64329
|
const selectedId = selectedIdProp !== void 0 ? selectedIdProp : internalSelection;
|
|
63957
|
-
const setSelected = (0,
|
|
64330
|
+
const setSelected = (0, import_react287.useCallback)(
|
|
63958
64331
|
(id) => {
|
|
63959
64332
|
onSelect?.(id);
|
|
63960
64333
|
if (selectedIdProp === void 0) setInternalSelection(id);
|
|
63961
64334
|
},
|
|
63962
64335
|
[onSelect, selectedIdProp]
|
|
63963
64336
|
);
|
|
63964
|
-
const [internalOrder, setInternalOrder] = (0,
|
|
64337
|
+
const [internalOrder, setInternalOrder] = (0, import_react287.useState)(void 0);
|
|
63965
64338
|
const rowOrder = rowOrderProp ?? internalOrder;
|
|
63966
|
-
const handleReorder = (0,
|
|
64339
|
+
const handleReorder = (0, import_react287.useCallback)(
|
|
63967
64340
|
(order) => {
|
|
63968
64341
|
onReorder?.(order);
|
|
63969
64342
|
if (rowOrderProp === void 0) setInternalOrder(order);
|
|
63970
64343
|
},
|
|
63971
64344
|
[onReorder, rowOrderProp]
|
|
63972
64345
|
);
|
|
63973
|
-
const [collapsed, setCollapsed] = (0,
|
|
64346
|
+
const [collapsed, setCollapsed] = (0, import_react287.useState)(
|
|
63974
64347
|
() => new Set(tasks.filter((t2) => t2.open === false).map((t2) => t2.id))
|
|
63975
64348
|
);
|
|
63976
|
-
const [closedLanes, setClosedLanes] = (0,
|
|
64349
|
+
const [closedLanes, setClosedLanes] = (0, import_react287.useState)(
|
|
63977
64350
|
() => new Set((lanes ?? []).filter((l) => l.open === false).map((l) => l.id))
|
|
63978
64351
|
);
|
|
63979
|
-
const tasksRef = (0,
|
|
63980
|
-
const lanesRef = (0,
|
|
63981
|
-
(0,
|
|
64352
|
+
const tasksRef = (0, import_react287.useRef)(tasks);
|
|
64353
|
+
const lanesRef = (0, import_react287.useRef)(lanes);
|
|
64354
|
+
(0, import_react287.useEffect)(() => {
|
|
63982
64355
|
if (tasksRef.current !== tasks) {
|
|
63983
64356
|
tasksRef.current = tasks;
|
|
63984
64357
|
setCollapsed(new Set(tasks.filter((t2) => t2.open === false).map((t2) => t2.id)));
|
|
@@ -63988,7 +64361,7 @@ var Gantt = ({
|
|
|
63988
64361
|
setClosedLanes(new Set((lanes ?? []).filter((l) => l.open === false).map((l) => l.id)));
|
|
63989
64362
|
}
|
|
63990
64363
|
}, [tasks, lanes]);
|
|
63991
|
-
const toggleCollapse = (0,
|
|
64364
|
+
const toggleCollapse = (0, import_react287.useCallback)((taskId, isOpen) => {
|
|
63992
64365
|
setCollapsed((prev) => {
|
|
63993
64366
|
const next = new Set(prev);
|
|
63994
64367
|
if (isOpen) next.add(taskId);
|
|
@@ -63996,7 +64369,7 @@ var Gantt = ({
|
|
|
63996
64369
|
return next;
|
|
63997
64370
|
});
|
|
63998
64371
|
}, []);
|
|
63999
|
-
const toggleLane = (0,
|
|
64372
|
+
const toggleLane = (0, import_react287.useCallback)((laneId, isOpen) => {
|
|
64000
64373
|
setClosedLanes((prev) => {
|
|
64001
64374
|
const next = new Set(prev);
|
|
64002
64375
|
if (isOpen) next.add(laneId);
|
|
@@ -64004,37 +64377,37 @@ var Gantt = ({
|
|
|
64004
64377
|
return next;
|
|
64005
64378
|
});
|
|
64006
64379
|
}, []);
|
|
64007
|
-
const effectiveTasks = (0,
|
|
64380
|
+
const effectiveTasks = (0, import_react287.useMemo)(() => {
|
|
64008
64381
|
let out = tasks;
|
|
64009
64382
|
if (collapsed.size > 0) {
|
|
64010
64383
|
out = out.map((t2) => collapsed.has(t2.id) ? { ...t2, open: false } : t2);
|
|
64011
64384
|
}
|
|
64012
64385
|
return out;
|
|
64013
64386
|
}, [tasks, collapsed]);
|
|
64014
|
-
const effectiveLanes = (0,
|
|
64387
|
+
const effectiveLanes = (0, import_react287.useMemo)(() => {
|
|
64015
64388
|
if (closedLanes.size === 0) return lanes;
|
|
64016
64389
|
return (lanes ?? []).map(
|
|
64017
64390
|
(l) => closedLanes.has(l.id) ? { ...l, open: false } : l
|
|
64018
64391
|
);
|
|
64019
64392
|
}, [lanes, closedLanes]);
|
|
64020
|
-
const committedModel = (0,
|
|
64393
|
+
const committedModel = (0, import_react287.useMemo)(
|
|
64021
64394
|
() => buildRows(effectiveTasks, effectiveLanes, rowOrder, rowHeight2),
|
|
64022
64395
|
[effectiveTasks, effectiveLanes, rowOrder, rowHeight2]
|
|
64023
64396
|
);
|
|
64024
|
-
const range = (0,
|
|
64397
|
+
const range = (0, import_react287.useMemo)(() => {
|
|
64025
64398
|
const starts = tasks.map((t2) => toMs(t2.start));
|
|
64026
64399
|
const ends = tasks.map((t2) => toMs(t2.end));
|
|
64027
64400
|
return computeViewRange(starts, ends);
|
|
64028
64401
|
}, [tasks]);
|
|
64029
64402
|
const timelineWidth = rangeWidth(range.start, range.end, zoom);
|
|
64030
|
-
const scaleLevels = (0,
|
|
64403
|
+
const scaleLevels = (0, import_react287.useMemo)(
|
|
64031
64404
|
() => buildTimeScale(range.start, range.end, zoom, dateLocale),
|
|
64032
64405
|
[range, zoom, dateLocale]
|
|
64033
64406
|
);
|
|
64034
|
-
const [colWidths, setColWidths] = (0,
|
|
64407
|
+
const [colWidths, setColWidths] = (0, import_react287.useState)(
|
|
64035
64408
|
() => columnWidths ? { ...columnWidths } : {}
|
|
64036
64409
|
);
|
|
64037
|
-
(0,
|
|
64410
|
+
(0, import_react287.useEffect)(() => {
|
|
64038
64411
|
if (!columnWidths) return;
|
|
64039
64412
|
setColWidths((prev) => ({ ...prev, ...columnWidths }));
|
|
64040
64413
|
}, [columnWidths]);
|
|
@@ -64044,21 +64417,21 @@ var Gantt = ({
|
|
|
64044
64417
|
const m = /^(\d+(?:\.\d+)?)px$/.exec(col.width ?? "");
|
|
64045
64418
|
return m ? Number(m[1]) : 160;
|
|
64046
64419
|
};
|
|
64047
|
-
const sizedColumns = (0,
|
|
64420
|
+
const sizedColumns = (0, import_react287.useMemo)(
|
|
64048
64421
|
() => resolvedColumns.map((c) => ({ ...c, width: `${effectiveColWidth(c)}px` })),
|
|
64049
64422
|
[resolvedColumns, colWidths]
|
|
64050
64423
|
);
|
|
64051
|
-
const effectiveWidthsRef = (0,
|
|
64424
|
+
const effectiveWidthsRef = (0, import_react287.useRef)({});
|
|
64052
64425
|
effectiveWidthsRef.current = Object.fromEntries(
|
|
64053
64426
|
sizedColumns.map((c) => [c.key, effectiveColWidth(c)])
|
|
64054
64427
|
);
|
|
64055
|
-
const leftWidth = (0,
|
|
64428
|
+
const leftWidth = (0, import_react287.useMemo)(
|
|
64056
64429
|
() => GRIP_WIDTH + resolvedColumns.reduce((sum, c) => sum + effectiveColWidth(c), 0),
|
|
64057
64430
|
[resolvedColumns, colWidths]
|
|
64058
64431
|
);
|
|
64059
|
-
const resizingRef = (0,
|
|
64060
|
-
const [resizingKey, setResizingKey] = (0,
|
|
64061
|
-
const startColumnResize = (0,
|
|
64432
|
+
const resizingRef = (0, import_react287.useRef)(null);
|
|
64433
|
+
const [resizingKey, setResizingKey] = (0, import_react287.useState)(null);
|
|
64434
|
+
const startColumnResize = (0, import_react287.useCallback)(
|
|
64062
64435
|
(e, key) => {
|
|
64063
64436
|
if (e.button !== 0) return;
|
|
64064
64437
|
e.preventDefault();
|
|
@@ -64089,23 +64462,23 @@ var Gantt = ({
|
|
|
64089
64462
|
},
|
|
64090
64463
|
[onColumnWidthChange]
|
|
64091
64464
|
);
|
|
64092
|
-
(0,
|
|
64465
|
+
(0, import_react287.useEffect)(
|
|
64093
64466
|
() => () => {
|
|
64094
64467
|
document.body.style.cursor = "";
|
|
64095
64468
|
document.body.style.userSelect = "";
|
|
64096
64469
|
},
|
|
64097
64470
|
[]
|
|
64098
64471
|
);
|
|
64099
|
-
const scrollRef = (0,
|
|
64100
|
-
const overlayRef = (0,
|
|
64101
|
-
const rootRef = (0,
|
|
64102
|
-
const headerScaleRef = (0,
|
|
64103
|
-
const syncHeaderScale = (0,
|
|
64472
|
+
const scrollRef = (0, import_react287.useRef)(null);
|
|
64473
|
+
const overlayRef = (0, import_react287.useRef)(null);
|
|
64474
|
+
const rootRef = (0, import_react287.useRef)(null);
|
|
64475
|
+
const headerScaleRef = (0, import_react287.useRef)(null);
|
|
64476
|
+
const syncHeaderScale = (0, import_react287.useCallback)(() => {
|
|
64104
64477
|
const s = scrollRef.current;
|
|
64105
64478
|
const h = headerScaleRef.current;
|
|
64106
64479
|
if (s && h) h.style.transform = `translateX(${-s.scrollLeft}px)`;
|
|
64107
64480
|
}, []);
|
|
64108
|
-
const zoomBy = (0,
|
|
64481
|
+
const zoomBy = (0, import_react287.useCallback)(
|
|
64109
64482
|
(factor, pointerClientX) => {
|
|
64110
64483
|
const el = scrollRef.current;
|
|
64111
64484
|
const next = Math.min(maxZoom, Math.max(minZoom, zoom * factor));
|
|
@@ -64124,7 +64497,7 @@ var Gantt = ({
|
|
|
64124
64497
|
},
|
|
64125
64498
|
[zoom, minZoom, maxZoom, leftWidth, setZoom]
|
|
64126
64499
|
);
|
|
64127
|
-
(0,
|
|
64500
|
+
(0, import_react287.useEffect)(() => {
|
|
64128
64501
|
const el = scrollRef.current;
|
|
64129
64502
|
if (!el) return;
|
|
64130
64503
|
const onWheel = (e) => {
|
|
@@ -64136,10 +64509,10 @@ var Gantt = ({
|
|
|
64136
64509
|
el.addEventListener("wheel", onWheel, { passive: false });
|
|
64137
64510
|
return () => el.removeEventListener("wheel", onWheel);
|
|
64138
64511
|
}, [zoomBy]);
|
|
64139
|
-
(0,
|
|
64512
|
+
(0, import_react287.useEffect)(() => {
|
|
64140
64513
|
syncHeaderScale();
|
|
64141
64514
|
}, [syncHeaderScale, timelineWidth, zoom, range.start, leftWidth]);
|
|
64142
|
-
const liveRowsRef = (0,
|
|
64515
|
+
const liveRowsRef = (0, import_react287.useRef)(null);
|
|
64143
64516
|
const dragApi = useGanttDrag({
|
|
64144
64517
|
scrollRef,
|
|
64145
64518
|
overlayRef,
|
|
@@ -64161,12 +64534,12 @@ var Gantt = ({
|
|
|
64161
64534
|
rowOrder,
|
|
64162
64535
|
setSelected
|
|
64163
64536
|
});
|
|
64164
|
-
const liveReorder = (0,
|
|
64537
|
+
const liveReorder = (0, import_react287.useMemo)(() => {
|
|
64165
64538
|
const d = dragApi.drag;
|
|
64166
64539
|
if (d?.kind !== "reorder" || d.beforeId === void 0) return null;
|
|
64167
64540
|
return applyRowReorder(effectiveTasks, d.taskId, d.beforeId, rowOrder);
|
|
64168
64541
|
}, [dragApi.drag, effectiveTasks, rowOrder]);
|
|
64169
|
-
const liveModel = (0,
|
|
64542
|
+
const liveModel = (0, import_react287.useMemo)(
|
|
64170
64543
|
() => liveReorder ? buildRows(
|
|
64171
64544
|
liveReorder.tasks,
|
|
64172
64545
|
effectiveLanes,
|
|
@@ -64176,7 +64549,7 @@ var Gantt = ({
|
|
|
64176
64549
|
[liveReorder, effectiveLanes, rowHeight2, committedModel]
|
|
64177
64550
|
);
|
|
64178
64551
|
liveRowsRef.current = liveModel.rows;
|
|
64179
|
-
const bars = (0,
|
|
64552
|
+
const bars = (0, import_react287.useMemo)(() => {
|
|
64180
64553
|
const map = /* @__PURE__ */ new Map();
|
|
64181
64554
|
for (const row of liveModel.rows) {
|
|
64182
64555
|
if (!row.task) continue;
|
|
@@ -64198,7 +64571,7 @@ var Gantt = ({
|
|
|
64198
64571
|
return map;
|
|
64199
64572
|
}, [liveModel.rows, range, zoom]);
|
|
64200
64573
|
const bodyHeight = liveModel.rows.length > 0 ? liveModel.rows[liveModel.rows.length - 1].top + liveModel.rows[liveModel.rows.length - 1].height : 0;
|
|
64201
|
-
const onBarKeyDown = (0,
|
|
64574
|
+
const onBarKeyDown = (0, import_react287.useCallback)(
|
|
64202
64575
|
(e, task) => {
|
|
64203
64576
|
if (!interactive || task.locked || !onTasksChange) return;
|
|
64204
64577
|
const stepMs = snap2 === "hour" ? 36e5 : snap2 === "week" ? 7 * MS_PER_DAY : MS_PER_DAY;
|
|
@@ -64243,7 +64616,7 @@ var Gantt = ({
|
|
|
64243
64616
|
},
|
|
64244
64617
|
[interactive, snap2, tasks, onTasksChange, setSelected]
|
|
64245
64618
|
);
|
|
64246
|
-
const deleteSelectedLink = (0,
|
|
64619
|
+
const deleteSelectedLink = (0, import_react287.useCallback)(() => {
|
|
64247
64620
|
const sel = dragApi.linkSelected;
|
|
64248
64621
|
if (!sel || !interactive || !onLinksChange) return;
|
|
64249
64622
|
const key = (l) => l.id ?? `${l.source}~${l.target}~${l.type ?? "fs"}`;
|
|
@@ -64251,7 +64624,7 @@ var Gantt = ({
|
|
|
64251
64624
|
onLinksChange(links.filter((l) => key(l) !== selKey));
|
|
64252
64625
|
dragApi.setLinkSelected(null);
|
|
64253
64626
|
}, [dragApi, links, interactive, onLinksChange]);
|
|
64254
|
-
const moveSelection = (0,
|
|
64627
|
+
const moveSelection = (0, import_react287.useCallback)(
|
|
64255
64628
|
(where) => {
|
|
64256
64629
|
const rows = liveModel.rows;
|
|
64257
64630
|
if (!rows.length) return;
|
|
@@ -64264,7 +64637,7 @@ var Gantt = ({
|
|
|
64264
64637
|
},
|
|
64265
64638
|
[liveModel.rows, selectedId, setSelected]
|
|
64266
64639
|
);
|
|
64267
|
-
const onRootKeyDown = (0,
|
|
64640
|
+
const onRootKeyDown = (0, import_react287.useCallback)(
|
|
64268
64641
|
(e) => {
|
|
64269
64642
|
if (dragApi.linkSelected) {
|
|
64270
64643
|
if (e.key === "Escape") {
|
|
@@ -64310,14 +64683,14 @@ var Gantt = ({
|
|
|
64310
64683
|
},
|
|
64311
64684
|
[dragApi, deleteSelectedLink, moveSelection, setZoom, zoom]
|
|
64312
64685
|
);
|
|
64313
|
-
const handleSelectLink = (0,
|
|
64686
|
+
const handleSelectLink = (0, import_react287.useCallback)(
|
|
64314
64687
|
(link) => {
|
|
64315
64688
|
dragApi.setLinkSelected(link);
|
|
64316
64689
|
if (link) rootRef.current?.focus();
|
|
64317
64690
|
},
|
|
64318
64691
|
[dragApi]
|
|
64319
64692
|
);
|
|
64320
|
-
const handleRootPointerDown = (0,
|
|
64693
|
+
const handleRootPointerDown = (0, import_react287.useCallback)(
|
|
64321
64694
|
(e) => {
|
|
64322
64695
|
if (e.target.closest?.("[data-gantt-keep-link-selection]")) return;
|
|
64323
64696
|
if (dragApi.linkSelected) dragApi.setLinkSelected(null);
|
|
@@ -64332,22 +64705,22 @@ var Gantt = ({
|
|
|
64332
64705
|
const drag = dragApi.drag;
|
|
64333
64706
|
const dragTask = drag?.taskId ? committedModel.tasksById.get(drag.taskId) : void 0;
|
|
64334
64707
|
const reorderLineY = drag?.kind === "reorder" && drag.beforeId !== void 0 ? reorderPreviewTop(liveModel.rows, `task:${drag.taskId}`, drag.beforeId) : null;
|
|
64335
|
-
const dragSubtree = (0,
|
|
64708
|
+
const dragSubtree = (0, import_react287.useMemo)(() => {
|
|
64336
64709
|
if (dragApi.drag?.kind !== "reorder") return null;
|
|
64337
64710
|
return reorderDragSubtree(
|
|
64338
64711
|
liveModel.rows,
|
|
64339
64712
|
`task:${dragApi.drag.taskId}`
|
|
64340
64713
|
);
|
|
64341
64714
|
}, [dragApi.drag, liveModel.rows]);
|
|
64342
|
-
const dragSubtreeKeys = (0,
|
|
64715
|
+
const dragSubtreeKeys = (0, import_react287.useMemo)(
|
|
64343
64716
|
() => new Set((dragSubtree ?? []).map((r) => r.key)),
|
|
64344
64717
|
[dragSubtree]
|
|
64345
64718
|
);
|
|
64346
|
-
const dragSubtreeHeight = (0,
|
|
64719
|
+
const dragSubtreeHeight = (0, import_react287.useMemo)(
|
|
64347
64720
|
() => (dragSubtree ?? []).reduce((sum, r) => sum + r.height, 0),
|
|
64348
64721
|
[dragSubtree]
|
|
64349
64722
|
);
|
|
64350
|
-
const liveDragDates = (0,
|
|
64723
|
+
const liveDragDates = (0, import_react287.useMemo)(() => {
|
|
64351
64724
|
if (!drag || !dragTask) return null;
|
|
64352
64725
|
if (drag.kind !== "move" && drag.kind !== "resize-start" && drag.kind !== "resize-end") return null;
|
|
64353
64726
|
return applyDragDates(
|
|
@@ -64358,7 +64731,7 @@ var Gantt = ({
|
|
|
64358
64731
|
);
|
|
64359
64732
|
}, [drag, dragTask, zoom, snap2]);
|
|
64360
64733
|
const liveDragProgress = drag?.kind === "progress" && drag.liveProgress != null ? drag.liveProgress : null;
|
|
64361
|
-
const dragOverride = (0,
|
|
64734
|
+
const dragOverride = (0, import_react287.useMemo)(() => {
|
|
64362
64735
|
if (!drag || !dragTask) return null;
|
|
64363
64736
|
if (drag.kind === "progress" && drag.liveProgress != null) {
|
|
64364
64737
|
return { ...dragTask, progress: drag.liveProgress };
|
|
@@ -64368,11 +64741,11 @@ var Gantt = ({
|
|
|
64368
64741
|
}
|
|
64369
64742
|
return null;
|
|
64370
64743
|
}, [drag, dragTask, liveDragDates]);
|
|
64371
|
-
const liveLaneProgress = (0,
|
|
64744
|
+
const liveLaneProgress = (0, import_react287.useMemo)(
|
|
64372
64745
|
() => dragOverride && dragTask ? laneRollupProgress(effectiveTasks, dragTask.id, dragOverride) : null,
|
|
64373
64746
|
[dragOverride, dragTask, effectiveTasks]
|
|
64374
64747
|
);
|
|
64375
|
-
const liveGroupProgress = (0,
|
|
64748
|
+
const liveGroupProgress = (0, import_react287.useMemo)(() => {
|
|
64376
64749
|
if (!dragOverride || !dragTask) return null;
|
|
64377
64750
|
const byId = new Map(effectiveTasks.map((t2) => [t2.id, t2]));
|
|
64378
64751
|
const m = /* @__PURE__ */ new Map();
|
|
@@ -64384,7 +64757,7 @@ var Gantt = ({
|
|
|
64384
64757
|
}
|
|
64385
64758
|
return m.size > 0 ? m : null;
|
|
64386
64759
|
}, [dragOverride, dragTask, effectiveTasks]);
|
|
64387
|
-
const liveLinkBars = (0,
|
|
64760
|
+
const liveLinkBars = (0, import_react287.useMemo)(() => {
|
|
64388
64761
|
if (!liveDragDates || !dragTask) return bars;
|
|
64389
64762
|
const g = bars.get(dragTask.id);
|
|
64390
64763
|
if (!g) return bars;
|
|
@@ -64393,12 +64766,12 @@ var Gantt = ({
|
|
|
64393
64766
|
if (left === g.left && width === g.width) return bars;
|
|
64394
64767
|
return new Map(bars).set(dragTask.id, { ...g, left, width });
|
|
64395
64768
|
}, [bars, liveDragDates, dragTask, range, zoom]);
|
|
64396
|
-
const linkPaths = (0,
|
|
64769
|
+
const linkPaths = (0, import_react287.useMemo)(
|
|
64397
64770
|
() => computeLinkPaths(links, liveLinkBars, color),
|
|
64398
64771
|
[links, liveLinkBars, color]
|
|
64399
64772
|
);
|
|
64400
|
-
const linkFan = (0,
|
|
64401
|
-
return /* @__PURE__ */ (0,
|
|
64773
|
+
const linkFan = (0, import_react287.useMemo)(() => computeLinkFanOffsets(links, bars), [links, bars]);
|
|
64774
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64402
64775
|
Panel_default,
|
|
64403
64776
|
{
|
|
64404
64777
|
ref: rootRef,
|
|
@@ -64416,31 +64789,31 @@ var Gantt = ({
|
|
|
64416
64789
|
"aria-label": t("kit.gantt.root"),
|
|
64417
64790
|
onKeyDown: onRootKeyDown,
|
|
64418
64791
|
onPointerDown: handleRootPointerDown,
|
|
64419
|
-
children: /* @__PURE__ */ (0,
|
|
64420
|
-
/* @__PURE__ */ (0,
|
|
64792
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "flex h-full min-h-0 flex-col", children: [
|
|
64793
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
64421
64794
|
"div",
|
|
64422
64795
|
{
|
|
64423
|
-
className: (0,
|
|
64796
|
+
className: (0, import_classnames122.default)(
|
|
64424
64797
|
"flex shrink-0 items-center gap-3 border-b px-4 py-3",
|
|
64425
64798
|
surfaceText.divider
|
|
64426
64799
|
),
|
|
64427
64800
|
children: [
|
|
64428
|
-
hasNode(icon) && /* @__PURE__ */ (0,
|
|
64801
|
+
hasNode(icon) && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64429
64802
|
"div",
|
|
64430
64803
|
{
|
|
64431
|
-
className: (0,
|
|
64804
|
+
className: (0, import_classnames122.default)(
|
|
64432
64805
|
"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl",
|
|
64433
64806
|
getSurfaceVariantClasses(variant, "neutral")
|
|
64434
64807
|
),
|
|
64435
64808
|
children: icon
|
|
64436
64809
|
}
|
|
64437
64810
|
),
|
|
64438
|
-
(title != null || subtitle != null) && /* @__PURE__ */ (0,
|
|
64439
|
-
subtitle != null && /* @__PURE__ */ (0,
|
|
64440
|
-
title != null && /* @__PURE__ */ (0,
|
|
64811
|
+
(title != null || subtitle != null) && /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
64812
|
+
subtitle != null && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "truncate text-[11px] font-semibold uppercase tracking-wider text-neutral-500 dark:text-neutral-400", children: subtitle }),
|
|
64813
|
+
title != null && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "truncate text-lg font-semibold text-neutral-900 dark:text-white", children: title })
|
|
64441
64814
|
] }),
|
|
64442
|
-
hasNode(actions) && /* @__PURE__ */ (0,
|
|
64443
|
-
/* @__PURE__ */ (0,
|
|
64815
|
+
hasNode(actions) && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "flex shrink-0 items-center gap-2", children: actions }),
|
|
64816
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "ml-auto shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64444
64817
|
GanttToolbar,
|
|
64445
64818
|
{
|
|
64446
64819
|
variant,
|
|
@@ -64453,31 +64826,31 @@ var Gantt = ({
|
|
|
64453
64826
|
]
|
|
64454
64827
|
}
|
|
64455
64828
|
),
|
|
64456
|
-
/* @__PURE__ */ (0,
|
|
64829
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
64457
64830
|
"div",
|
|
64458
64831
|
{
|
|
64459
|
-
className: (0,
|
|
64832
|
+
className: (0, import_classnames122.default)(
|
|
64460
64833
|
"relative flex shrink-0 items-stretch border-b",
|
|
64461
64834
|
surfaceText.divider
|
|
64462
64835
|
),
|
|
64463
64836
|
style: { height: HEADER_HEIGHT },
|
|
64464
64837
|
children: [
|
|
64465
|
-
/* @__PURE__ */ (0,
|
|
64838
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
64466
64839
|
"div",
|
|
64467
64840
|
{
|
|
64468
|
-
className: (0,
|
|
64841
|
+
className: (0, import_classnames122.default)(
|
|
64469
64842
|
"flex items-stretch border-r bg-white dark:bg-neutral-900",
|
|
64470
64843
|
surfaceText.divider
|
|
64471
64844
|
),
|
|
64472
64845
|
style: { width: leftWidth },
|
|
64473
64846
|
children: [
|
|
64474
|
-
/* @__PURE__ */ (0,
|
|
64847
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "w-9 shrink-0" }),
|
|
64475
64848
|
sizedColumns.map((col) => {
|
|
64476
64849
|
const resizable = resizableColumns && col.resizable !== false;
|
|
64477
|
-
return /* @__PURE__ */ (0,
|
|
64850
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
64478
64851
|
"div",
|
|
64479
64852
|
{
|
|
64480
|
-
className: (0,
|
|
64853
|
+
className: (0, import_classnames122.default)(
|
|
64481
64854
|
"relative flex shrink-0 items-center border-r px-2 text-[11px] font-semibold uppercase tracking-wide text-neutral-600 last:border-r-0 dark:text-neutral-400",
|
|
64482
64855
|
surfaceText.divider
|
|
64483
64856
|
),
|
|
@@ -64486,7 +64859,7 @@ var Gantt = ({
|
|
|
64486
64859
|
justifyContent: col.align === "center" ? "center" : col.align === "right" ? "flex-end" : "flex-start"
|
|
64487
64860
|
},
|
|
64488
64861
|
children: [
|
|
64489
|
-
/* @__PURE__ */ (0,
|
|
64862
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("span", { className: "truncate", children: col.title }),
|
|
64490
64863
|
resizable && /* Resize handle — Table's header-edge pattern: an 8px hit
|
|
64491
64864
|
area whose 1px line sits exactly on the column border.
|
|
64492
64865
|
Absolute insets stop at the padding edge (1px inside
|
|
@@ -64495,7 +64868,7 @@ var Gantt = ({
|
|
|
64495
64868
|
the border's own pixel. The cell carries no
|
|
64496
64869
|
overflow-hidden so the line can paint over the border
|
|
64497
64870
|
(the title span truncates itself). */
|
|
64498
|
-
/* @__PURE__ */ (0,
|
|
64871
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64499
64872
|
"div",
|
|
64500
64873
|
{
|
|
64501
64874
|
role: "separator",
|
|
@@ -64504,7 +64877,7 @@ var Gantt = ({
|
|
|
64504
64877
|
className: "group/rh absolute inset-y-0 -right-px z-10 flex w-2 cursor-col-resize select-none items-stretch justify-end",
|
|
64505
64878
|
onPointerDown: (e) => startColumnResize(e, col.key),
|
|
64506
64879
|
title: t("kit.gantt.resizeColumn", { column: col.title }),
|
|
64507
|
-
children: /* @__PURE__ */ (0,
|
|
64880
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64508
64881
|
"div",
|
|
64509
64882
|
{
|
|
64510
64883
|
className: "h-full w-px bg-neutral-300 transition-colors group-hover/rh:bg-neutral-400 dark:bg-neutral-600 dark:group-hover/rh:bg-neutral-500",
|
|
@@ -64521,30 +64894,30 @@ var Gantt = ({
|
|
|
64521
64894
|
]
|
|
64522
64895
|
}
|
|
64523
64896
|
),
|
|
64524
|
-
/* @__PURE__ */ (0,
|
|
64897
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "relative min-w-0 flex-1 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
64525
64898
|
"div",
|
|
64526
64899
|
{
|
|
64527
64900
|
ref: headerScaleRef,
|
|
64528
64901
|
className: "relative h-full",
|
|
64529
64902
|
style: { width: timelineWidth },
|
|
64530
64903
|
children: [
|
|
64531
|
-
/* @__PURE__ */ (0,
|
|
64532
|
-
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0,
|
|
64904
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(GanttScale, { levels: scaleLevels, height: HEADER_HEIGHT }),
|
|
64905
|
+
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64533
64906
|
"div",
|
|
64534
64907
|
{
|
|
64535
|
-
className: (0,
|
|
64908
|
+
className: (0, import_classnames122.default)(
|
|
64536
64909
|
"pointer-events-none absolute inset-y-0 z-[1] border-l-2",
|
|
64537
64910
|
todayTokens.line
|
|
64538
64911
|
),
|
|
64539
64912
|
style: { left: todayX }
|
|
64540
64913
|
}
|
|
64541
64914
|
),
|
|
64542
|
-
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0,
|
|
64915
|
+
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64543
64916
|
"div",
|
|
64544
64917
|
{
|
|
64545
64918
|
className: "pointer-events-none absolute top-1 z-10 -translate-x-1/2",
|
|
64546
64919
|
style: { left: todayX },
|
|
64547
|
-
children: /* @__PURE__ */ (0,
|
|
64920
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("span", { className: (0, import_classnames122.default)("rounded-full px-2 py-0.5 text-[10px] font-semibold text-white shadow-sm", todayTokens.chip), children: allLabels.today })
|
|
64548
64921
|
}
|
|
64549
64922
|
)
|
|
64550
64923
|
]
|
|
@@ -64553,20 +64926,20 @@ var Gantt = ({
|
|
|
64553
64926
|
]
|
|
64554
64927
|
}
|
|
64555
64928
|
),
|
|
64556
|
-
/* @__PURE__ */ (0,
|
|
64929
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64557
64930
|
"div",
|
|
64558
64931
|
{
|
|
64559
64932
|
ref: scrollRef,
|
|
64560
64933
|
className: `gantt-scroller min-h-0 flex-1 overflow-auto overscroll-contain [&::-webkit-scrollbar]:h-1.5 ${THIN_SCROLLBAR}`,
|
|
64561
64934
|
onScroll: syncHeaderScale,
|
|
64562
|
-
children: /* @__PURE__ */ (0,
|
|
64563
|
-
/* @__PURE__ */ (0,
|
|
64935
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { style: { width: leftWidth + timelineWidth + LINK_RIGHT_GUTTER, minWidth: "100%" }, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(GanttSkeleton, { rows: 12, rowHeight: rowHeight2, leftWidth }) : isEmpty2 ? /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "flex items-center justify-center text-sm text-neutral-500", style: { height: bodyHeight || 160, width: leftWidth + timelineWidth }, children: emptyState ?? allLabels.empty }) : /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "relative", style: { height: bodyHeight }, children: [
|
|
64936
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
64564
64937
|
"div",
|
|
64565
64938
|
{
|
|
64566
64939
|
className: "pointer-events-none absolute inset-y-0 z-0",
|
|
64567
64940
|
style: { left: leftWidth, width: timelineWidth },
|
|
64568
64941
|
children: [
|
|
64569
|
-
scaleLevels.length > 0 && scaleLevels[scaleLevels.length - 1].columns.map((c) => /* @__PURE__ */ (0,
|
|
64942
|
+
scaleLevels.length > 0 && scaleLevels[scaleLevels.length - 1].columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64570
64943
|
"div",
|
|
64571
64944
|
{
|
|
64572
64945
|
className: "absolute inset-y-0 border-r border-neutral-100 dark:border-neutral-800",
|
|
@@ -64574,10 +64947,10 @@ var Gantt = ({
|
|
|
64574
64947
|
},
|
|
64575
64948
|
c.id
|
|
64576
64949
|
)),
|
|
64577
|
-
todayVisible && /* @__PURE__ */ (0,
|
|
64950
|
+
todayVisible && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64578
64951
|
"div",
|
|
64579
64952
|
{
|
|
64580
|
-
className: (0,
|
|
64953
|
+
className: (0, import_classnames122.default)("absolute inset-y-0 border-l-2", todayTokens.line),
|
|
64581
64954
|
style: { left: todayX }
|
|
64582
64955
|
}
|
|
64583
64956
|
)
|
|
@@ -64587,7 +64960,7 @@ var Gantt = ({
|
|
|
64587
64960
|
liveModel.rows.map((row) => {
|
|
64588
64961
|
const isDragSource = drag?.kind === "reorder" && row.task != null && row.task.id === drag.taskId;
|
|
64589
64962
|
if (isDragSource) {
|
|
64590
|
-
return /* @__PURE__ */ (0,
|
|
64963
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64591
64964
|
"div",
|
|
64592
64965
|
{
|
|
64593
64966
|
"data-row-key": row.key,
|
|
@@ -64595,7 +64968,7 @@ var Gantt = ({
|
|
|
64595
64968
|
"aria-hidden": "true",
|
|
64596
64969
|
className: "pointer-events-none flex border-b",
|
|
64597
64970
|
style: { height: dragSubtreeHeight || row.height },
|
|
64598
|
-
children: /* @__PURE__ */ (0,
|
|
64971
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64599
64972
|
"div",
|
|
64600
64973
|
{
|
|
64601
64974
|
className: "m-1 flex-1 rounded-md border-2 border-dashed",
|
|
@@ -64612,7 +64985,7 @@ var Gantt = ({
|
|
|
64612
64985
|
if (drag?.kind === "reorder" && dragSubtreeKeys.has(row.key)) {
|
|
64613
64986
|
return null;
|
|
64614
64987
|
}
|
|
64615
|
-
return /* @__PURE__ */ (0,
|
|
64988
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64616
64989
|
GanttBodyRow,
|
|
64617
64990
|
{
|
|
64618
64991
|
row,
|
|
@@ -64650,7 +65023,7 @@ var Gantt = ({
|
|
|
64650
65023
|
row.key
|
|
64651
65024
|
);
|
|
64652
65025
|
}),
|
|
64653
|
-
/* @__PURE__ */ (0,
|
|
65026
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64654
65027
|
GanttLinkLayer,
|
|
64655
65028
|
{
|
|
64656
65029
|
ref: overlayRef,
|
|
@@ -64666,7 +65039,7 @@ var Gantt = ({
|
|
|
64666
65039
|
onDeleteLink: interactive && onLinksChange ? deleteSelectedLink : void 0
|
|
64667
65040
|
}
|
|
64668
65041
|
),
|
|
64669
|
-
drag?.kind === "reorder" && reorderLineY != null && /* @__PURE__ */ (0,
|
|
65042
|
+
drag?.kind === "reorder" && reorderLineY != null && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64670
65043
|
"div",
|
|
64671
65044
|
{
|
|
64672
65045
|
className: "pointer-events-none absolute z-30 h-0.5 rounded-full",
|
|
@@ -64686,7 +65059,7 @@ var Gantt = ({
|
|
|
64686
65059
|
// there is no filtered/overflowing ancestor and the fixed
|
|
64687
65060
|
// clone always tracks the viewport pointer.
|
|
64688
65061
|
(0, import_react_dom15.createPortal)(
|
|
64689
|
-
/* @__PURE__ */ (0,
|
|
65062
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64690
65063
|
"div",
|
|
64691
65064
|
{
|
|
64692
65065
|
"data-gantt-drag-clone": "true",
|
|
@@ -64697,14 +65070,14 @@ var Gantt = ({
|
|
|
64697
65070
|
top: drag.clientY - (drag.grabOffset?.y ?? 0),
|
|
64698
65071
|
width: leftWidth + timelineWidth + LINK_RIGHT_GUTTER
|
|
64699
65072
|
},
|
|
64700
|
-
children: /* @__PURE__ */ (0,
|
|
65073
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64701
65074
|
"div",
|
|
64702
65075
|
{
|
|
64703
65076
|
className: "overflow-hidden rounded-lg bg-white/95 shadow-2xl backdrop-blur-sm dark:bg-neutral-900/95",
|
|
64704
65077
|
style: {
|
|
64705
65078
|
boxShadow: `0 8px 32px rgba(0, 0, 0, 0.28), inset 2px 0 0 var(--color-${color}-500)`
|
|
64706
65079
|
},
|
|
64707
|
-
children: dragSubtree.map((row) => /* @__PURE__ */ (0,
|
|
65080
|
+
children: dragSubtree.map((row) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64708
65081
|
GanttBodyRow,
|
|
64709
65082
|
{
|
|
64710
65083
|
row,
|
|
@@ -64747,7 +65120,7 @@ var Gantt = ({
|
|
|
64747
65120
|
),
|
|
64748
65121
|
document.body
|
|
64749
65122
|
),
|
|
64750
|
-
drag && drag.kind !== "reorder" && dragTask && liveDragDates && /* @__PURE__ */ (0,
|
|
65123
|
+
drag && drag.kind !== "reorder" && dragTask && liveDragDates && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64751
65124
|
"div",
|
|
64752
65125
|
{
|
|
64753
65126
|
className: "pointer-events-none absolute z-50 rounded-md bg-neutral-900/90 px-2 py-1 text-[11px] font-medium text-white shadow-lg dark:bg-neutral-700/95",
|
|
@@ -64778,13 +65151,13 @@ var GanttSkeleton = ({
|
|
|
64778
65151
|
rows,
|
|
64779
65152
|
rowHeight: rowHeight2,
|
|
64780
65153
|
leftWidth
|
|
64781
|
-
}) => /* @__PURE__ */ (0,
|
|
64782
|
-
/* @__PURE__ */ (0,
|
|
65154
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "animate-pulse", "aria-busy": "true", children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "flex", style: { height: rowHeight2 }, children: [
|
|
65155
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64783
65156
|
"div",
|
|
64784
65157
|
{
|
|
64785
65158
|
className: "sticky left-0 flex items-center border-b border-neutral-100 bg-white px-3 dark:border-neutral-800 dark:bg-neutral-900",
|
|
64786
65159
|
style: { width: leftWidth },
|
|
64787
|
-
children: /* @__PURE__ */ (0,
|
|
65160
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64788
65161
|
"div",
|
|
64789
65162
|
{
|
|
64790
65163
|
className: "h-3 rounded-full bg-neutral-200 dark:bg-neutral-700",
|
|
@@ -64793,7 +65166,7 @@ var GanttSkeleton = ({
|
|
|
64793
65166
|
)
|
|
64794
65167
|
}
|
|
64795
65168
|
),
|
|
64796
|
-
/* @__PURE__ */ (0,
|
|
65169
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "relative flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
64797
65170
|
"div",
|
|
64798
65171
|
{
|
|
64799
65172
|
className: "absolute top-1/2 h-4 -translate-y-1/2 rounded-md bg-neutral-200/80 dark:bg-neutral-700/60",
|
|
@@ -64806,11 +65179,11 @@ var GanttSkeleton = ({
|
|
|
64806
65179
|
] }, i)) });
|
|
64807
65180
|
|
|
64808
65181
|
// src/contexts/BottomSheetContext.tsx
|
|
64809
|
-
var
|
|
65182
|
+
var import_react288 = require("react");
|
|
64810
65183
|
var import_react_dom16 = require("react-dom");
|
|
64811
|
-
var
|
|
64812
|
-
var
|
|
64813
|
-
var BottomSheetContext = (0,
|
|
65184
|
+
var import_classnames123 = __toESM(require("classnames"), 1);
|
|
65185
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
65186
|
+
var BottomSheetContext = (0, import_react288.createContext)(null);
|
|
64814
65187
|
var TRANSITION_MS2 = 260;
|
|
64815
65188
|
var renderSlot = (slot, controls) => {
|
|
64816
65189
|
if (!slot) {
|
|
@@ -64821,13 +65194,13 @@ var renderSlot = (slot, controls) => {
|
|
|
64821
65194
|
var BottomSheetProvider = ({
|
|
64822
65195
|
children
|
|
64823
65196
|
}) => {
|
|
64824
|
-
const [sheet, setSheet] = (0,
|
|
64825
|
-
const [isVisible, setIsVisible] = (0,
|
|
64826
|
-
const pendingCloseRef = (0,
|
|
64827
|
-
const dismissSheet = (0,
|
|
65197
|
+
const [sheet, setSheet] = (0, import_react288.useState)(null);
|
|
65198
|
+
const [isVisible, setIsVisible] = (0, import_react288.useState)(false);
|
|
65199
|
+
const pendingCloseRef = (0, import_react288.useRef)(null);
|
|
65200
|
+
const dismissSheet = (0, import_react288.useCallback)(() => {
|
|
64828
65201
|
setIsVisible(false);
|
|
64829
65202
|
}, []);
|
|
64830
|
-
const presentSheet = (0,
|
|
65203
|
+
const presentSheet = (0, import_react288.useCallback)((options) => {
|
|
64831
65204
|
if (pendingCloseRef.current) {
|
|
64832
65205
|
clearTimeout(pendingCloseRef.current);
|
|
64833
65206
|
pendingCloseRef.current = null;
|
|
@@ -64840,7 +65213,7 @@ var BottomSheetProvider = ({
|
|
|
64840
65213
|
setTimeout(animateIn, 0);
|
|
64841
65214
|
}
|
|
64842
65215
|
}, []);
|
|
64843
|
-
(0,
|
|
65216
|
+
(0, import_react288.useEffect)(() => {
|
|
64844
65217
|
if (!isVisible && sheet) {
|
|
64845
65218
|
pendingCloseRef.current = setTimeout(() => {
|
|
64846
65219
|
sheet.onClose?.();
|
|
@@ -64855,7 +65228,7 @@ var BottomSheetProvider = ({
|
|
|
64855
65228
|
}
|
|
64856
65229
|
return void 0;
|
|
64857
65230
|
}, [isVisible, sheet]);
|
|
64858
|
-
(0,
|
|
65231
|
+
(0, import_react288.useEffect)(
|
|
64859
65232
|
() => () => {
|
|
64860
65233
|
if (pendingCloseRef.current) {
|
|
64861
65234
|
clearTimeout(pendingCloseRef.current);
|
|
@@ -64863,13 +65236,13 @@ var BottomSheetProvider = ({
|
|
|
64863
65236
|
},
|
|
64864
65237
|
[]
|
|
64865
65238
|
);
|
|
64866
|
-
const controls = (0,
|
|
65239
|
+
const controls = (0, import_react288.useMemo)(
|
|
64867
65240
|
() => ({
|
|
64868
65241
|
dismiss: dismissSheet
|
|
64869
65242
|
}),
|
|
64870
65243
|
[dismissSheet]
|
|
64871
65244
|
);
|
|
64872
|
-
const contextValue = (0,
|
|
65245
|
+
const contextValue = (0, import_react288.useMemo)(
|
|
64873
65246
|
() => ({
|
|
64874
65247
|
presentSheet,
|
|
64875
65248
|
dismissSheet,
|
|
@@ -64879,11 +65252,11 @@ var BottomSheetProvider = ({
|
|
|
64879
65252
|
[presentSheet, dismissSheet, sheet, isVisible]
|
|
64880
65253
|
);
|
|
64881
65254
|
const overlayNode = typeof document !== "undefined" && sheet ? (0, import_react_dom16.createPortal)(
|
|
64882
|
-
/* @__PURE__ */ (0,
|
|
64883
|
-
/* @__PURE__ */ (0,
|
|
65255
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "pointer-events-none fixed inset-0 z-[70] flex items-end justify-center", children: [
|
|
65256
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64884
65257
|
"div",
|
|
64885
65258
|
{
|
|
64886
|
-
className: (0,
|
|
65259
|
+
className: (0, import_classnames123.default)(
|
|
64887
65260
|
"absolute inset-0 bg-neutral-900/40 transition-opacity duration-300",
|
|
64888
65261
|
isVisible ? "opacity-100 pointer-events-auto" : "opacity-0"
|
|
64889
65262
|
),
|
|
@@ -64893,24 +65266,24 @@ var BottomSheetProvider = ({
|
|
|
64893
65266
|
}
|
|
64894
65267
|
}
|
|
64895
65268
|
),
|
|
64896
|
-
/* @__PURE__ */ (0,
|
|
65269
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "relative w-full max-w-4xl px-4 pb-4 sm:px-8", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
64897
65270
|
"section",
|
|
64898
65271
|
{
|
|
64899
65272
|
role: "dialog",
|
|
64900
65273
|
"aria-modal": "true",
|
|
64901
|
-
className: (0,
|
|
65274
|
+
className: (0, import_classnames123.default)(
|
|
64902
65275
|
"pointer-events-auto ml-auto flex w-full flex-col rounded-t-3xl border border-slate-200 bg-white shadow-2xl transition-transform duration-300 dark:border-slate-700 dark:bg-slate-900",
|
|
64903
65276
|
sheet.className,
|
|
64904
65277
|
isVisible ? "translate-y-0" : "translate-y-full"
|
|
64905
65278
|
),
|
|
64906
65279
|
style: { minHeight: "25vh", maxHeight: "85vh" },
|
|
64907
65280
|
children: [
|
|
64908
|
-
/* @__PURE__ */ (0,
|
|
64909
|
-
/* @__PURE__ */ (0,
|
|
64910
|
-
sheet.title && /* @__PURE__ */ (0,
|
|
64911
|
-
sheet.description && /* @__PURE__ */ (0,
|
|
65281
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("header", { className: "flex items-start justify-between gap-3 border-b border-slate-200 px-6 py-4 dark:border-slate-800", children: [
|
|
65282
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "space-y-1", children: [
|
|
65283
|
+
sheet.title && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "text-base font-semibold text-slate-900 dark:text-slate-100", children: sheet.title }),
|
|
65284
|
+
sheet.description && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("p", { className: "text-sm text-slate-500 dark:text-slate-300", children: sheet.description })
|
|
64912
65285
|
] }),
|
|
64913
|
-
(sheet.showCloseButton ?? true) && /* @__PURE__ */ (0,
|
|
65286
|
+
(sheet.showCloseButton ?? true) && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64914
65287
|
IconButton_default,
|
|
64915
65288
|
{
|
|
64916
65289
|
icon: "Close",
|
|
@@ -64922,21 +65295,21 @@ var BottomSheetProvider = ({
|
|
|
64922
65295
|
}
|
|
64923
65296
|
)
|
|
64924
65297
|
] }),
|
|
64925
|
-
/* @__PURE__ */ (0,
|
|
64926
|
-
sheet.actions && /* @__PURE__ */ (0,
|
|
65298
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "flex-1 overflow-y-auto px-6 py-4", children: renderSlot(sheet.content, controls) ?? /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("p", { className: "text-sm text-slate-500", children: "No content provided." }) }),
|
|
65299
|
+
sheet.actions && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "flex flex-wrap items-center justify-end gap-3 border-t border-slate-200 px-6 py-4 dark:border-slate-800", children: renderSlot(sheet.actions, controls) })
|
|
64927
65300
|
]
|
|
64928
65301
|
}
|
|
64929
65302
|
) })
|
|
64930
65303
|
] }),
|
|
64931
65304
|
document.body
|
|
64932
65305
|
) : null;
|
|
64933
|
-
return /* @__PURE__ */ (0,
|
|
65306
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(BottomSheetContext.Provider, { value: contextValue, children: [
|
|
64934
65307
|
children,
|
|
64935
65308
|
overlayNode
|
|
64936
65309
|
] });
|
|
64937
65310
|
};
|
|
64938
65311
|
var useBottomSheet = () => {
|
|
64939
|
-
const context = (0,
|
|
65312
|
+
const context = (0, import_react288.useContext)(BottomSheetContext);
|
|
64940
65313
|
if (!context) {
|
|
64941
65314
|
throw new Error("useBottomSheet must be used within a BottomSheetProvider");
|
|
64942
65315
|
}
|
|
@@ -65570,8 +65943,8 @@ var SYSTEM_VARIABLES = [
|
|
|
65570
65943
|
];
|
|
65571
65944
|
|
|
65572
65945
|
// src/components/MetricBar.tsx
|
|
65573
|
-
var
|
|
65574
|
-
var
|
|
65946
|
+
var import_classnames124 = __toESM(require("classnames"), 1);
|
|
65947
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
65575
65948
|
var MetricBar = ({
|
|
65576
65949
|
label,
|
|
65577
65950
|
value,
|
|
@@ -65581,7 +65954,7 @@ var MetricBar = ({
|
|
|
65581
65954
|
size = "sm",
|
|
65582
65955
|
className,
|
|
65583
65956
|
...rest
|
|
65584
|
-
}) => /* @__PURE__ */ (0,
|
|
65957
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
65585
65958
|
Progress_default,
|
|
65586
65959
|
{
|
|
65587
65960
|
...rest,
|
|
@@ -65591,7 +65964,7 @@ var MetricBar = ({
|
|
|
65591
65964
|
formatValue: value !== void 0 ? () => String(value) : void 0,
|
|
65592
65965
|
size,
|
|
65593
65966
|
color: tone ?? color ?? "blue",
|
|
65594
|
-
className: (0,
|
|
65967
|
+
className: (0, import_classnames124.default)("w-full", className)
|
|
65595
65968
|
}
|
|
65596
65969
|
);
|
|
65597
65970
|
MetricBar.displayName = "MetricBar";
|
|
@@ -65913,6 +66286,9 @@ MetricBar.displayName = "MetricBar";
|
|
|
65913
66286
|
WorkflowRailSkeleton,
|
|
65914
66287
|
WorkflowStatusNode,
|
|
65915
66288
|
WorkflowTracker,
|
|
66289
|
+
WorkflowTrackerDetails,
|
|
66290
|
+
WorkflowTrackerRail,
|
|
66291
|
+
WorkflowTrackerStepDetails,
|
|
65916
66292
|
areaPathFromPoints,
|
|
65917
66293
|
bandAreaPath,
|
|
65918
66294
|
buildColumns,
|