@cjlapao/ui-kit 0.2.3 → 0.2.5
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/{CapsuleBlueprint-DwDZ7nii.d.cts → CapsuleBlueprint-BI0jdbTt.d.cts} +16 -1
- package/dist/{CapsuleBlueprint-DwDZ7nii.d.ts → CapsuleBlueprint-BI0jdbTt.d.ts} +16 -1
- package/dist/index.cjs +1158 -713
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +73 -0
- package/dist/index.d.cts +320 -46
- package/dist/index.d.ts +320 -46
- package/dist/index.js +1077 -639
- package/dist/index.js.map +1 -1
- package/dist/markdown.cjs.map +1 -1
- package/dist/markdown.d.cts +2 -2
- package/dist/markdown.d.ts +2 -2
- package/dist/markdown.js.map +1 -1
- package/package.json +3 -3
- 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
|
@@ -106,6 +106,7 @@ __export(src_exports, {
|
|
|
106
106
|
DEFAULT_LAYOUT_OPTIONS: () => DEFAULT_LAYOUT_OPTIONS,
|
|
107
107
|
DEFAULT_SERIES_PALETTE: () => DEFAULT_SERIES_PALETTE,
|
|
108
108
|
DEFAULT_SURFACE_CORNER: () => DEFAULT_SURFACE_CORNER,
|
|
109
|
+
DEFAULT_SURFACE_GUTTER: () => DEFAULT_SURFACE_GUTTER,
|
|
109
110
|
DEFAULT_SURFACE_PADDING: () => DEFAULT_SURFACE_PADDING,
|
|
110
111
|
DEFAULT_SURFACE_TONE: () => DEFAULT_SURFACE_TONE,
|
|
111
112
|
DEFAULT_TOAST_GAP_PX: () => DEFAULT_TOAST_GAP_PX,
|
|
@@ -256,6 +257,7 @@ __export(src_exports, {
|
|
|
256
257
|
STAT_PAGER_PLACEMENTS: () => STAT_PAGER_PLACEMENTS,
|
|
257
258
|
SURFACE_CORNERS: () => SURFACE_CORNERS,
|
|
258
259
|
SURFACE_GLASS_RIM: () => SURFACE_GLASS_RIM,
|
|
260
|
+
SURFACE_GUTTER_AXES: () => SURFACE_GUTTER_AXES,
|
|
259
261
|
SURFACE_PADDINGS: () => SURFACE_PADDINGS,
|
|
260
262
|
SURFACE_TO_BUTTON_VARIANT: () => SURFACE_TO_BUTTON_VARIANT,
|
|
261
263
|
SURFACE_VARIANTS: () => SURFACE_VARIANTS,
|
|
@@ -348,6 +350,10 @@ __export(src_exports, {
|
|
|
348
350
|
WorkflowRailSkeleton: () => WorkflowRailSkeleton,
|
|
349
351
|
WorkflowStatusNode: () => WorkflowStatusNode_default,
|
|
350
352
|
WorkflowTracker: () => WorkflowTracker_default,
|
|
353
|
+
WorkflowTrackerDetails: () => WorkflowTrackerDetails_default,
|
|
354
|
+
WorkflowTrackerRail: () => WorkflowTrackerRail_default,
|
|
355
|
+
WorkflowTrackerRollups: () => WorkflowTrackerRollups_default,
|
|
356
|
+
WorkflowTrackerStepDetails: () => WorkflowTrackerStepDetails_default,
|
|
351
357
|
areaPathFromPoints: () => areaPathFromPoints,
|
|
352
358
|
bandAreaPath: () => bandAreaPath,
|
|
353
359
|
buildColumns: () => buildColumns,
|
|
@@ -485,6 +491,7 @@ __export(src_exports, {
|
|
|
485
491
|
getStepperTonePalette: () => getStepperTonePalette,
|
|
486
492
|
getSurfaceCornerClass: () => getSurfaceCornerClass,
|
|
487
493
|
getSurfaceCornerRem: () => getSurfaceCornerRem,
|
|
494
|
+
getSurfaceGutterClass: () => getSurfaceGutterClass,
|
|
488
495
|
getSurfacePaddingClass: () => getSurfacePaddingClass,
|
|
489
496
|
getSurfacePaddingClasses: () => getSurfacePaddingClasses,
|
|
490
497
|
getSurfaceTextTokens: () => getSurfaceTextTokens,
|
|
@@ -5966,6 +5973,15 @@ var getSurfacePaddingClass = (padding) => surfacePaddingClasses[padding] ?? surf
|
|
|
5966
5973
|
var getSurfacePaddingClasses = () => ({
|
|
5967
5974
|
...surfacePaddingClasses
|
|
5968
5975
|
});
|
|
5976
|
+
var SURFACE_GUTTER_AXES = ["top", "right", "bottom", "left"];
|
|
5977
|
+
var surfaceGutterClasses = {
|
|
5978
|
+
top: { none: "mt-0", xs: "mt-2", sm: "mt-4", md: "mt-6", lg: "mt-8", xl: "mt-10" },
|
|
5979
|
+
right: { none: "mr-0", xs: "mr-2", sm: "mr-4", md: "mr-6", lg: "mr-8", xl: "mr-10" },
|
|
5980
|
+
bottom: { none: "mb-0", xs: "mb-2", sm: "mb-4", md: "mb-6", lg: "mb-8", xl: "mb-10" },
|
|
5981
|
+
left: { none: "ml-0", xs: "ml-2", sm: "ml-4", md: "ml-6", lg: "ml-8", xl: "ml-10" }
|
|
5982
|
+
};
|
|
5983
|
+
var DEFAULT_SURFACE_GUTTER = "none";
|
|
5984
|
+
var getSurfaceGutterClass = (axis, gutter) => surfaceGutterClasses[axis][gutter] ?? surfaceGutterClasses[axis][DEFAULT_SURFACE_GUTTER];
|
|
5969
5985
|
var NEUTRAL_TONES = [
|
|
5970
5986
|
"neutral",
|
|
5971
5987
|
"slate",
|
|
@@ -22032,27 +22048,54 @@ var PageHeader = ({
|
|
|
22032
22048
|
center,
|
|
22033
22049
|
end,
|
|
22034
22050
|
children,
|
|
22051
|
+
variant = "default",
|
|
22052
|
+
accentColor = "blue",
|
|
22053
|
+
padding,
|
|
22054
|
+
paddingTop,
|
|
22055
|
+
paddingRight,
|
|
22056
|
+
paddingBottom,
|
|
22057
|
+
paddingLeft,
|
|
22058
|
+
corner = DEFAULT_SURFACE_CORNER,
|
|
22035
22059
|
className = "",
|
|
22036
22060
|
...rest
|
|
22037
|
-
}) =>
|
|
22038
|
-
"
|
|
22039
|
-
|
|
22040
|
-
|
|
22041
|
-
|
|
22042
|
-
|
|
22043
|
-
|
|
22044
|
-
|
|
22045
|
-
|
|
22046
|
-
|
|
22047
|
-
|
|
22048
|
-
|
|
22049
|
-
|
|
22050
|
-
|
|
22051
|
-
|
|
22052
|
-
|
|
22053
|
-
|
|
22054
|
-
|
|
22055
|
-
)
|
|
22061
|
+
}) => {
|
|
22062
|
+
const surface = variant === "default" ? null : getSidebarSurfaceTokens(variant, accentColor);
|
|
22063
|
+
const pair = surface ? "xs" : "none";
|
|
22064
|
+
const gutter = {
|
|
22065
|
+
top: paddingTop ?? padding ?? pair,
|
|
22066
|
+
right: paddingRight ?? padding ?? pair,
|
|
22067
|
+
bottom: paddingBottom ?? padding ?? "none",
|
|
22068
|
+
left: paddingLeft ?? padding ?? "none"
|
|
22069
|
+
};
|
|
22070
|
+
return /* @__PURE__ */ (0, import_jsx_runtime201.jsxs)(
|
|
22071
|
+
"header",
|
|
22072
|
+
{
|
|
22073
|
+
...rest,
|
|
22074
|
+
className: (0, import_classnames51.default)(
|
|
22075
|
+
"flex w-full items-center justify-between gap-4 px-5",
|
|
22076
|
+
SIDE_MENU_HEADER_HEIGHT,
|
|
22077
|
+
getSurfaceGutterClass("top", gutter.top),
|
|
22078
|
+
getSurfaceGutterClass("right", gutter.right),
|
|
22079
|
+
getSurfaceGutterClass("bottom", gutter.bottom),
|
|
22080
|
+
getSurfaceGutterClass("left", gutter.left),
|
|
22081
|
+
getSurfaceCornerClass(corner),
|
|
22082
|
+
surface ? (0, import_classnames51.default)(
|
|
22083
|
+
"border",
|
|
22084
|
+
surface.border,
|
|
22085
|
+
surface.shadow,
|
|
22086
|
+
surface.fill
|
|
22087
|
+
) : (0, import_classnames51.default)("border-b", SIDE_MENU_HEADER_FILL, SIDE_MENU_HEADER_SEAM),
|
|
22088
|
+
className
|
|
22089
|
+
),
|
|
22090
|
+
children: [
|
|
22091
|
+
/* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children: start }),
|
|
22092
|
+
/* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children: center }),
|
|
22093
|
+
/* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children: end }),
|
|
22094
|
+
children != null && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: GROUP_CLASS2, children })
|
|
22095
|
+
]
|
|
22096
|
+
}
|
|
22097
|
+
);
|
|
22098
|
+
};
|
|
22056
22099
|
PageHeader.displayName = "PageHeader";
|
|
22057
22100
|
var PageHeader_default = PageHeader;
|
|
22058
22101
|
|
|
@@ -42738,7 +42781,8 @@ var SideMenu = ({
|
|
|
42738
42781
|
const hasVisibleLink = visibleItems2.some(
|
|
42739
42782
|
(item) => item.type !== "group" && item.type !== "divider"
|
|
42740
42783
|
);
|
|
42741
|
-
const
|
|
42784
|
+
const detached = Boolean(surface.offset);
|
|
42785
|
+
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
42786
|
const isLeft = side === "left";
|
|
42743
42787
|
const isHoverMode = openOnHover && !isMobile;
|
|
42744
42788
|
const borderClasses = surface.border ? `${surface.border} ${surface.borderSides === "all" ? "border" : isLeft ? "border-r" : "border-l"}` : "";
|
|
@@ -42911,48 +42955,56 @@ var SideMenu = ({
|
|
|
42911
42955
|
]
|
|
42912
42956
|
}
|
|
42913
42957
|
),
|
|
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
|
-
|
|
42958
|
+
/* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42959
|
+
ScrollArea_default,
|
|
42960
|
+
{
|
|
42961
|
+
variant: "hover",
|
|
42962
|
+
className: "flex-1 w-full",
|
|
42963
|
+
contentClassName: "px-3 py-1",
|
|
42964
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)("nav", { "aria-label": title || "Side menu", className: "space-y-1 w-full", children: [
|
|
42965
|
+
visibleItems2.map((item, index) => {
|
|
42966
|
+
if (item.type === "divider") {
|
|
42967
|
+
return /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42968
|
+
"div",
|
|
42969
|
+
{
|
|
42970
|
+
className: `my-2 border-t ${surface.divider} ${contentCollapsed2 && !isMobileView ? "mx-1" : "mx-0"}`
|
|
42971
|
+
},
|
|
42972
|
+
`divider-${index}-${item.slug}`
|
|
42973
|
+
);
|
|
42974
|
+
}
|
|
42975
|
+
if (item.type === "group") {
|
|
42976
|
+
if (contentCollapsed2 && !isMobileView) return null;
|
|
42977
|
+
return /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)(import_react245.default.Fragment, { children: [
|
|
42978
|
+
item.hasDivider && /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42979
|
+
"div",
|
|
42980
|
+
{
|
|
42981
|
+
className: `my-2 border-t ${surface.divider} ${contentCollapsed2 && !isMobileView ? "mx-1" : "mx-0"}`
|
|
42982
|
+
}
|
|
42983
|
+
),
|
|
42984
|
+
/* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42985
|
+
"div",
|
|
42986
|
+
{
|
|
42987
|
+
className: `px-3 py-1 mb-1 text-xs font-semibold uppercase tracking-wider ${surface.muted} ${index === 0 ? "mt-1" : "mt-4"}`,
|
|
42988
|
+
children: item.label
|
|
42989
|
+
}
|
|
42990
|
+
)
|
|
42991
|
+
] }, `group-${index}-${item.slug}`);
|
|
42992
|
+
}
|
|
42993
|
+
return renderLinkRow(
|
|
42994
|
+
item,
|
|
42995
|
+
0,
|
|
42996
|
+
`link-${index}-${item.slug}`,
|
|
42997
|
+
contentCollapsed2
|
|
42998
|
+
);
|
|
42999
|
+
}),
|
|
43000
|
+
searchActive && !hasVisibleLink && /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)("p", { className: `px-3 py-6 text-center text-xs ${surface.muted}`, children: [
|
|
43001
|
+
'No results for "',
|
|
43002
|
+
searchQuery.trim(),
|
|
43003
|
+
'"'
|
|
43004
|
+
] })
|
|
43005
|
+
] })
|
|
43006
|
+
}
|
|
43007
|
+
),
|
|
42956
43008
|
footerItem && /* @__PURE__ */ (0, import_jsx_runtime257.jsx)("div", { className: "shrink-0 px-3 pb-1", children: /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
|
|
42957
43009
|
SideMenuDropdownRow,
|
|
42958
43010
|
{
|
|
@@ -60164,12 +60216,16 @@ var TreeView = ({
|
|
|
60164
60216
|
var TreeView_default = TreeView;
|
|
60165
60217
|
|
|
60166
60218
|
// src/components/WorkflowTracker/WorkflowTracker.tsx
|
|
60167
|
-
var
|
|
60168
|
-
var
|
|
60219
|
+
var import_react283 = require("react");
|
|
60220
|
+
var import_classnames119 = __toESM(require("classnames"), 1);
|
|
60221
|
+
|
|
60222
|
+
// src/components/WorkflowTracker/WorkflowTrackerRail.tsx
|
|
60223
|
+
var import_react279 = require("react");
|
|
60224
|
+
var import_classnames112 = __toESM(require("classnames"), 1);
|
|
60169
60225
|
|
|
60170
60226
|
// src/components/WorkflowTracker/WorkflowTimeline.tsx
|
|
60171
60227
|
var import_react277 = __toESM(require("react"), 1);
|
|
60172
|
-
var
|
|
60228
|
+
var import_classnames111 = __toESM(require("classnames"), 1);
|
|
60173
60229
|
|
|
60174
60230
|
// src/components/WorkflowTracker/WorkflowSkeleton.tsx
|
|
60175
60231
|
var import_classnames107 = __toESM(require("classnames"), 1);
|
|
@@ -60458,34 +60514,73 @@ var WorkflowStatusNode = ({
|
|
|
60458
60514
|
};
|
|
60459
60515
|
var WorkflowStatusNode_default = WorkflowStatusNode;
|
|
60460
60516
|
|
|
60461
|
-
// src/components/WorkflowTracker/
|
|
60517
|
+
// src/components/WorkflowTracker/WorkflowQuickActions.tsx
|
|
60462
60518
|
var import_classnames109 = __toESM(require("classnames"), 1);
|
|
60463
60519
|
var import_jsx_runtime298 = require("react/jsx-runtime");
|
|
60520
|
+
var WorkflowQuickActions = ({
|
|
60521
|
+
stepId,
|
|
60522
|
+
actions,
|
|
60523
|
+
palette,
|
|
60524
|
+
groupLabel,
|
|
60525
|
+
onAction,
|
|
60526
|
+
className,
|
|
60527
|
+
style
|
|
60528
|
+
}) => {
|
|
60529
|
+
if (!onAction || actions.length === 0) return null;
|
|
60530
|
+
return /* @__PURE__ */ (0, import_jsx_runtime298.jsx)(
|
|
60531
|
+
"div",
|
|
60532
|
+
{
|
|
60533
|
+
role: "group",
|
|
60534
|
+
"aria-label": groupLabel,
|
|
60535
|
+
className: (0, import_classnames109.default)("flex flex-wrap gap-1.5", className),
|
|
60536
|
+
style,
|
|
60537
|
+
children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime298.jsx)(
|
|
60538
|
+
Button_default,
|
|
60539
|
+
{
|
|
60540
|
+
size: "xs",
|
|
60541
|
+
weight: "medium",
|
|
60542
|
+
variant: action.variant ?? "soft",
|
|
60543
|
+
color: action.tone ?? palette.accent,
|
|
60544
|
+
leadingIcon: action.leadingIcon,
|
|
60545
|
+
disabled: action.disabled,
|
|
60546
|
+
onClick: () => onAction(stepId, action.id),
|
|
60547
|
+
children: action.label
|
|
60548
|
+
},
|
|
60549
|
+
action.id
|
|
60550
|
+
))
|
|
60551
|
+
}
|
|
60552
|
+
);
|
|
60553
|
+
};
|
|
60554
|
+
var WorkflowQuickActions_default = WorkflowQuickActions;
|
|
60555
|
+
|
|
60556
|
+
// src/components/WorkflowTracker/parts.tsx
|
|
60557
|
+
var import_classnames110 = __toESM(require("classnames"), 1);
|
|
60558
|
+
var import_jsx_runtime299 = require("react/jsx-runtime");
|
|
60464
60559
|
var resolve = (surfaces) => surfaces ?? getSurfaceTokens(false);
|
|
60465
|
-
var WorkflowPlaceholder = ({ title, subtitle, palette, surfaces, className }) => /* @__PURE__ */ (0,
|
|
60560
|
+
var WorkflowPlaceholder = ({ title, subtitle, palette, surfaces, className }) => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)(
|
|
60466
60561
|
"div",
|
|
60467
60562
|
{
|
|
60468
|
-
className: (0,
|
|
60563
|
+
className: (0, import_classnames110.default)(
|
|
60469
60564
|
"flex flex-col items-center justify-center gap-3 px-6 py-10 text-center",
|
|
60470
60565
|
className
|
|
60471
60566
|
),
|
|
60472
60567
|
children: [
|
|
60473
|
-
/* @__PURE__ */ (0,
|
|
60474
|
-
/* @__PURE__ */ (0,
|
|
60475
|
-
/* @__PURE__ */ (0,
|
|
60568
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(WorkflowStatusNode_default, { status: "not_started", palette, size: "lg" }),
|
|
60569
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "space-y-1", children: [
|
|
60570
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(
|
|
60476
60571
|
"p",
|
|
60477
60572
|
{
|
|
60478
|
-
className: (0,
|
|
60573
|
+
className: (0, import_classnames110.default)(
|
|
60479
60574
|
"text-sm font-semibold",
|
|
60480
60575
|
resolve(surfaces).mutedText
|
|
60481
60576
|
),
|
|
60482
60577
|
children: title
|
|
60483
60578
|
}
|
|
60484
60579
|
),
|
|
60485
|
-
subtitle && /* @__PURE__ */ (0,
|
|
60580
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime299.jsx)(
|
|
60486
60581
|
"p",
|
|
60487
60582
|
{
|
|
60488
|
-
className: (0,
|
|
60583
|
+
className: (0, import_classnames110.default)(
|
|
60489
60584
|
"max-w-xs text-xs leading-5",
|
|
60490
60585
|
resolve(surfaces).faintText
|
|
60491
60586
|
),
|
|
@@ -60496,10 +60591,10 @@ var WorkflowPlaceholder = ({ title, subtitle, palette, surfaces, className }) =>
|
|
|
60496
60591
|
]
|
|
60497
60592
|
}
|
|
60498
60593
|
);
|
|
60499
|
-
var SectionTitle = ({ children, surfaces, className }) => /* @__PURE__ */ (0,
|
|
60594
|
+
var SectionTitle = ({ children, surfaces, className }) => /* @__PURE__ */ (0, import_jsx_runtime299.jsx)(
|
|
60500
60595
|
"span",
|
|
60501
60596
|
{
|
|
60502
|
-
className: (0,
|
|
60597
|
+
className: (0, import_classnames110.default)(
|
|
60503
60598
|
"text-[10px] font-semibold uppercase tracking-widest",
|
|
60504
60599
|
resolve(surfaces).faintText,
|
|
60505
60600
|
className
|
|
@@ -60507,7 +60602,7 @@ var SectionTitle = ({ children, surfaces, className }) => /* @__PURE__ */ (0, im
|
|
|
60507
60602
|
children
|
|
60508
60603
|
}
|
|
60509
60604
|
);
|
|
60510
|
-
var SectionMeta = ({ children, surfaces, className }) => /* @__PURE__ */ (0,
|
|
60605
|
+
var SectionMeta = ({ children, surfaces, className }) => /* @__PURE__ */ (0, import_jsx_runtime299.jsx)("span", { className: (0, import_classnames110.default)("text-xs", resolve(surfaces).mutedText, className), children });
|
|
60511
60606
|
var WorkflowBadge = ({
|
|
60512
60607
|
children,
|
|
60513
60608
|
status,
|
|
@@ -60515,14 +60610,14 @@ var WorkflowBadge = ({
|
|
|
60515
60610
|
tone
|
|
60516
60611
|
}) => {
|
|
60517
60612
|
const tokens = getStatusTokens(status, palette);
|
|
60518
|
-
return /* @__PURE__ */ (0,
|
|
60613
|
+
return /* @__PURE__ */ (0, import_jsx_runtime299.jsx)(
|
|
60519
60614
|
Pill_default,
|
|
60520
60615
|
{
|
|
60521
60616
|
size: "xs",
|
|
60522
60617
|
uppercase: true,
|
|
60523
60618
|
tone: tone ?? tokens.pillTone,
|
|
60524
60619
|
variant: "outline",
|
|
60525
|
-
className: (0,
|
|
60620
|
+
className: (0, import_classnames110.default)(
|
|
60526
60621
|
"shrink-0 font-medium",
|
|
60527
60622
|
tone ? `bg-${tone}-100 dark:bg-${tone}-900` : tokens.pillFill
|
|
60528
60623
|
),
|
|
@@ -60530,17 +60625,17 @@ var WorkflowBadge = ({
|
|
|
60530
60625
|
}
|
|
60531
60626
|
);
|
|
60532
60627
|
};
|
|
60533
|
-
var MetaField = ({ label, value, surfaces }) => /* @__PURE__ */ (0,
|
|
60534
|
-
/* @__PURE__ */ (0,
|
|
60535
|
-
/* @__PURE__ */ (0,
|
|
60628
|
+
var MetaField = ({ label, value, surfaces }) => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("div", { className: "min-w-0", children: [
|
|
60629
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)(SectionTitle, { surfaces, children: label }),
|
|
60630
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("p", { className: "mt-1 text-sm font-medium text-neutral-800 dark:text-neutral-100", children: value })
|
|
60536
60631
|
] });
|
|
60537
|
-
var Tally = ({ count, label, surfaces }) => /* @__PURE__ */ (0,
|
|
60538
|
-
/* @__PURE__ */ (0,
|
|
60539
|
-
/* @__PURE__ */ (0,
|
|
60632
|
+
var Tally = ({ count, label, surfaces }) => /* @__PURE__ */ (0, import_jsx_runtime299.jsxs)("span", { className: "inline-flex items-center gap-1", children: [
|
|
60633
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("span", { className: "font-semibold text-neutral-900 dark:text-white", children: count }),
|
|
60634
|
+
/* @__PURE__ */ (0, import_jsx_runtime299.jsx)("span", { className: resolve(surfaces).mutedText, children: label })
|
|
60540
60635
|
] });
|
|
60541
60636
|
|
|
60542
60637
|
// src/components/WorkflowTracker/WorkflowTimeline.tsx
|
|
60543
|
-
var
|
|
60638
|
+
var import_jsx_runtime300 = require("react/jsx-runtime");
|
|
60544
60639
|
var CONNECTOR_LEFT = 9;
|
|
60545
60640
|
var CONNECTOR_TOP = 24;
|
|
60546
60641
|
var NESTED_INDENT = 32;
|
|
@@ -60558,16 +60653,16 @@ var NestedSubSteps = ({
|
|
|
60558
60653
|
palette,
|
|
60559
60654
|
surfaces,
|
|
60560
60655
|
onSubStepSelect
|
|
60561
|
-
}) => /* @__PURE__ */ (0,
|
|
60656
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60562
60657
|
"div",
|
|
60563
60658
|
{
|
|
60564
|
-
className: (0,
|
|
60659
|
+
className: (0, import_classnames111.default)("mt-3 rounded-lg p-3", surfaces.nestedBox),
|
|
60565
60660
|
style: { marginLeft: NESTED_INDENT },
|
|
60566
|
-
children: /* @__PURE__ */ (0,
|
|
60661
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime300.jsx)("ul", { className: "space-y-2.5", children: subSteps.map((subStep) => {
|
|
60567
60662
|
const status = normalizeStatus(subStep.status);
|
|
60568
60663
|
const isActive = status === "running" || status === "in_progress";
|
|
60569
|
-
const content = /* @__PURE__ */ (0,
|
|
60570
|
-
/* @__PURE__ */ (0,
|
|
60664
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime300.jsxs)(import_jsx_runtime300.Fragment, { children: [
|
|
60665
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60571
60666
|
WorkflowStatusNode_default,
|
|
60572
60667
|
{
|
|
60573
60668
|
status,
|
|
@@ -60575,10 +60670,10 @@ var NestedSubSteps = ({
|
|
|
60575
60670
|
size: "sm"
|
|
60576
60671
|
}
|
|
60577
60672
|
),
|
|
60578
|
-
/* @__PURE__ */ (0,
|
|
60673
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60579
60674
|
"span",
|
|
60580
60675
|
{
|
|
60581
|
-
className: (0,
|
|
60676
|
+
className: (0, import_classnames111.default)(
|
|
60582
60677
|
"text-sm",
|
|
60583
60678
|
isActive ? "font-semibold text-neutral-900 dark:text-white" : "text-neutral-600 dark:text-neutral-300"
|
|
60584
60679
|
),
|
|
@@ -60586,7 +60681,7 @@ var NestedSubSteps = ({
|
|
|
60586
60681
|
}
|
|
60587
60682
|
)
|
|
60588
60683
|
] });
|
|
60589
|
-
return /* @__PURE__ */ (0,
|
|
60684
|
+
return /* @__PURE__ */ (0, import_jsx_runtime300.jsx)("li", { children: onSubStepSelect ? /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60590
60685
|
"button",
|
|
60591
60686
|
{
|
|
60592
60687
|
type: "button",
|
|
@@ -60594,7 +60689,7 @@ var NestedSubSteps = ({
|
|
|
60594
60689
|
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
60690
|
children: content
|
|
60596
60691
|
}
|
|
60597
|
-
) : /* @__PURE__ */ (0,
|
|
60692
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime300.jsx)("div", { className: "flex items-center gap-2.5", children: content }) }, subStep.id);
|
|
60598
60693
|
}) })
|
|
60599
60694
|
}
|
|
60600
60695
|
);
|
|
@@ -60611,10 +60706,11 @@ var WorkflowTimeline = ({
|
|
|
60611
60706
|
loadingRows,
|
|
60612
60707
|
emptyState,
|
|
60613
60708
|
onStepSelect,
|
|
60614
|
-
onSubStepSelect
|
|
60709
|
+
onSubStepSelect,
|
|
60710
|
+
onStepAction
|
|
60615
60711
|
}) => {
|
|
60616
60712
|
if (loading) {
|
|
60617
|
-
return /* @__PURE__ */ (0,
|
|
60713
|
+
return /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(WorkflowRailSkeleton, { rows: loadingRows });
|
|
60618
60714
|
}
|
|
60619
60715
|
const isEmpty2 = steps.length === 0;
|
|
60620
60716
|
const tallyEntries = [
|
|
@@ -60623,19 +60719,19 @@ var WorkflowTimeline = ({
|
|
|
60623
60719
|
{ count: tallies.flagged, label: labels.flagged },
|
|
60624
60720
|
{ count: tallies.remaining, label: labels.remaining }
|
|
60625
60721
|
].filter((entry) => entry.count > 0);
|
|
60626
|
-
return /* @__PURE__ */ (0,
|
|
60627
|
-
!isEmpty2 && /* @__PURE__ */ (0,
|
|
60628
|
-
/* @__PURE__ */ (0,
|
|
60629
|
-
/* @__PURE__ */ (0,
|
|
60630
|
-
/* @__PURE__ */ (0,
|
|
60722
|
+
return /* @__PURE__ */ (0, import_jsx_runtime300.jsxs)("div", { className: "flex flex-col", children: [
|
|
60723
|
+
!isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime300.jsxs)("div", { className: (0, import_classnames111.default)("border-b px-5 pb-4 pt-5", surfaces.border), children: [
|
|
60724
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsxs)("div", { className: "flex items-baseline justify-between gap-3", children: [
|
|
60725
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(SectionTitle, { surfaces, children: labels.progress }),
|
|
60726
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsxs)("span", { className: "text-sm font-semibold text-neutral-900 dark:text-white", children: [
|
|
60631
60727
|
progress,
|
|
60632
60728
|
"%"
|
|
60633
60729
|
] })
|
|
60634
60730
|
] }),
|
|
60635
|
-
/* @__PURE__ */ (0,
|
|
60731
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60636
60732
|
Progress_default,
|
|
60637
60733
|
{
|
|
60638
|
-
className: (0,
|
|
60734
|
+
className: (0, import_classnames111.default)(
|
|
60639
60735
|
"mt-2",
|
|
60640
60736
|
surfaces.translucent ? "bg-white/40 dark:bg-white/15" : "bg-neutral-200 dark:bg-neutral-700"
|
|
60641
60737
|
),
|
|
@@ -60645,8 +60741,8 @@ var WorkflowTimeline = ({
|
|
|
60645
60741
|
motion: "none"
|
|
60646
60742
|
}
|
|
60647
60743
|
),
|
|
60648
|
-
tallyEntries.length > 0 && /* @__PURE__ */ (0,
|
|
60649
|
-
index > 0 && /* @__PURE__ */ (0,
|
|
60744
|
+
tallyEntries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime300.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_runtime300.jsxs)(import_react277.default.Fragment, { children: [
|
|
60745
|
+
index > 0 && /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60650
60746
|
"span",
|
|
60651
60747
|
{
|
|
60652
60748
|
"aria-hidden": "true",
|
|
@@ -60654,7 +60750,7 @@ var WorkflowTimeline = ({
|
|
|
60654
60750
|
children: "\xB7"
|
|
60655
60751
|
}
|
|
60656
60752
|
),
|
|
60657
|
-
/* @__PURE__ */ (0,
|
|
60753
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60658
60754
|
Tally,
|
|
60659
60755
|
{
|
|
60660
60756
|
count: entry.count,
|
|
@@ -60664,7 +60760,7 @@ var WorkflowTimeline = ({
|
|
|
60664
60760
|
)
|
|
60665
60761
|
] }, entry.label)) })
|
|
60666
60762
|
] }),
|
|
60667
|
-
/* @__PURE__ */ (0,
|
|
60763
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)("div", { className: (0, import_classnames111.default)(isEmpty2 ? "" : "px-5 py-5"), children: isEmpty2 ? emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60668
60764
|
WorkflowPlaceholder,
|
|
60669
60765
|
{
|
|
60670
60766
|
title: labels.empty,
|
|
@@ -60672,14 +60768,14 @@ var WorkflowTimeline = ({
|
|
|
60672
60768
|
palette,
|
|
60673
60769
|
surfaces
|
|
60674
60770
|
}
|
|
60675
|
-
) : /* @__PURE__ */ (0,
|
|
60771
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime300.jsx)("ol", { className: "m-0 list-none p-0", children: steps.map((step, index) => {
|
|
60676
60772
|
const status = normalizeStatus(step.status);
|
|
60677
60773
|
const tokens = getStatusTokens(status, palette);
|
|
60678
60774
|
const isActive = step.id === activeStepId;
|
|
60679
60775
|
const isLast = index === steps.length - 1;
|
|
60680
60776
|
const nested = isActive && step.subSteps && step.subSteps.length > 0 ? step.subSteps : void 0;
|
|
60681
|
-
const rowContent = /* @__PURE__ */ (0,
|
|
60682
|
-
/* @__PURE__ */ (0,
|
|
60777
|
+
const rowContent = /* @__PURE__ */ (0, import_jsx_runtime300.jsxs)(import_jsx_runtime300.Fragment, { children: [
|
|
60778
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60683
60779
|
WorkflowStatusNode_default,
|
|
60684
60780
|
{
|
|
60685
60781
|
status,
|
|
@@ -60687,19 +60783,19 @@ var WorkflowTimeline = ({
|
|
|
60687
60783
|
className: "mt-0.5"
|
|
60688
60784
|
}
|
|
60689
60785
|
),
|
|
60690
|
-
/* @__PURE__ */ (0,
|
|
60691
|
-
/* @__PURE__ */ (0,
|
|
60692
|
-
/* @__PURE__ */ (0,
|
|
60786
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
60787
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
60788
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60693
60789
|
"span",
|
|
60694
60790
|
{
|
|
60695
|
-
className: (0,
|
|
60791
|
+
className: (0, import_classnames111.default)(
|
|
60696
60792
|
"text-sm",
|
|
60697
60793
|
isActive ? "font-semibold text-neutral-900 dark:text-white" : "font-medium text-neutral-700 dark:text-neutral-200"
|
|
60698
60794
|
),
|
|
60699
60795
|
children: step.label
|
|
60700
60796
|
}
|
|
60701
60797
|
),
|
|
60702
|
-
step.badge && /* @__PURE__ */ (0,
|
|
60798
|
+
step.badge && /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60703
60799
|
WorkflowBadge,
|
|
60704
60800
|
{
|
|
60705
60801
|
status,
|
|
@@ -60709,10 +60805,10 @@ var WorkflowTimeline = ({
|
|
|
60709
60805
|
}
|
|
60710
60806
|
)
|
|
60711
60807
|
] }),
|
|
60712
|
-
step.meta && /* @__PURE__ */ (0,
|
|
60808
|
+
step.meta && /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60713
60809
|
"p",
|
|
60714
60810
|
{
|
|
60715
|
-
className: (0,
|
|
60811
|
+
className: (0, import_classnames111.default)(
|
|
60716
60812
|
"mt-1 text-xs leading-5",
|
|
60717
60813
|
surfaces.mutedText
|
|
60718
60814
|
),
|
|
@@ -60721,24 +60817,24 @@ var WorkflowTimeline = ({
|
|
|
60721
60817
|
)
|
|
60722
60818
|
] })
|
|
60723
60819
|
] });
|
|
60724
|
-
return /* @__PURE__ */ (0,
|
|
60820
|
+
return /* @__PURE__ */ (0, import_jsx_runtime300.jsxs)(
|
|
60725
60821
|
"li",
|
|
60726
60822
|
{
|
|
60727
|
-
className: (0,
|
|
60823
|
+
className: (0, import_classnames111.default)("relative", !isLast && "pb-5"),
|
|
60728
60824
|
"aria-current": isActive ? "step" : void 0,
|
|
60729
60825
|
children: [
|
|
60730
|
-
!isLast && /* @__PURE__ */ (0,
|
|
60826
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60731
60827
|
"span",
|
|
60732
60828
|
{
|
|
60733
60829
|
"aria-hidden": "true",
|
|
60734
|
-
className: (0,
|
|
60830
|
+
className: (0, import_classnames111.default)(
|
|
60735
60831
|
"absolute bottom-0",
|
|
60736
60832
|
tokens.connectorDashed ? `border-l-2 border-dashed ${tokens.connector}` : `w-0.5 rounded-full ${tokens.connector}`
|
|
60737
60833
|
),
|
|
60738
60834
|
style: { left: CONNECTOR_LEFT, top: CONNECTOR_TOP }
|
|
60739
60835
|
}
|
|
60740
60836
|
),
|
|
60741
|
-
onStepSelect ? /* @__PURE__ */ (0,
|
|
60837
|
+
onStepSelect ? /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60742
60838
|
"button",
|
|
60743
60839
|
{
|
|
60744
60840
|
type: "button",
|
|
@@ -60746,8 +60842,19 @@ var WorkflowTimeline = ({
|
|
|
60746
60842
|
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
60843
|
children: rowContent
|
|
60748
60844
|
}
|
|
60749
|
-
) : /* @__PURE__ */ (0,
|
|
60750
|
-
|
|
60845
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime300.jsx)("div", { className: "flex items-start gap-3", children: rowContent }),
|
|
60846
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60847
|
+
WorkflowQuickActions_default,
|
|
60848
|
+
{
|
|
60849
|
+
stepId: step.id,
|
|
60850
|
+
actions: step.actions ?? [],
|
|
60851
|
+
palette,
|
|
60852
|
+
groupLabel: labels.quickActions,
|
|
60853
|
+
onAction: onStepAction,
|
|
60854
|
+
className: "ml-8 mt-2"
|
|
60855
|
+
}
|
|
60856
|
+
),
|
|
60857
|
+
nested && /* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60751
60858
|
NestedSubSteps,
|
|
60752
60859
|
{
|
|
60753
60860
|
stepId: step.id,
|
|
@@ -60762,8 +60869,8 @@ var WorkflowTimeline = ({
|
|
|
60762
60869
|
step.id
|
|
60763
60870
|
);
|
|
60764
60871
|
}) }) }),
|
|
60765
|
-
showLegend && !isEmpty2 && /* @__PURE__ */ (0,
|
|
60766
|
-
/* @__PURE__ */ (0,
|
|
60872
|
+
showLegend && !isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime300.jsx)("div", { className: (0, import_classnames111.default)("mt-auto border-t px-5 py-4", surfaces.border), children: /* @__PURE__ */ (0, import_jsx_runtime300.jsx)("ul", { className: "flex flex-wrap gap-x-4 gap-y-2", children: LEGEND_ORDER.map((status) => /* @__PURE__ */ (0, import_jsx_runtime300.jsxs)("li", { className: "flex items-center gap-2", children: [
|
|
60873
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)(
|
|
60767
60874
|
WorkflowStatusNode_default,
|
|
60768
60875
|
{
|
|
60769
60876
|
status,
|
|
@@ -60771,14 +60878,92 @@ var WorkflowTimeline = ({
|
|
|
60771
60878
|
size: "sm"
|
|
60772
60879
|
}
|
|
60773
60880
|
),
|
|
60774
|
-
/* @__PURE__ */ (0,
|
|
60881
|
+
/* @__PURE__ */ (0, import_jsx_runtime300.jsx)("span", { className: (0, import_classnames111.default)("text-xs", surfaces.mutedText), children: labels.statuses[status] })
|
|
60775
60882
|
] }, status)) }) })
|
|
60776
60883
|
] });
|
|
60777
60884
|
};
|
|
60778
60885
|
var WorkflowTimeline_default = WorkflowTimeline;
|
|
60779
60886
|
|
|
60780
|
-
// src/components/WorkflowTracker/
|
|
60781
|
-
var
|
|
60887
|
+
// src/components/WorkflowTracker/chrome.ts
|
|
60888
|
+
var import_react278 = require("react");
|
|
60889
|
+
var DEFAULT_LABELS = {
|
|
60890
|
+
progress: "Progress",
|
|
60891
|
+
done: "done",
|
|
60892
|
+
skipped: "skipped",
|
|
60893
|
+
flagged: "flagged",
|
|
60894
|
+
remaining: "remaining",
|
|
60895
|
+
step: "Step",
|
|
60896
|
+
of: "of",
|
|
60897
|
+
elapsed: "Elapsed",
|
|
60898
|
+
owner: "Owner",
|
|
60899
|
+
started: "Started",
|
|
60900
|
+
sla: "SLA",
|
|
60901
|
+
subSteps: "Sub-steps",
|
|
60902
|
+
accepted: "accepted",
|
|
60903
|
+
open: "open",
|
|
60904
|
+
needsAttention: "Needs attention",
|
|
60905
|
+
skippedSteps: "Skipped steps",
|
|
60906
|
+
live: "LIVE \xB7 read-only view",
|
|
60907
|
+
empty: "No steps yet",
|
|
60908
|
+
emptySubtitle: "Steps appear here as soon as the workflow starts.",
|
|
60909
|
+
noActiveStep: "No step selected",
|
|
60910
|
+
details: "Step details",
|
|
60911
|
+
quickActions: "Quick actions",
|
|
60912
|
+
statuses: {
|
|
60913
|
+
done: "Done",
|
|
60914
|
+
in_progress: "In progress",
|
|
60915
|
+
running: "Running",
|
|
60916
|
+
skipped: "Skipped",
|
|
60917
|
+
blocked: "Blocked",
|
|
60918
|
+
attention: "Attention",
|
|
60919
|
+
not_started: "Not started"
|
|
60920
|
+
}
|
|
60921
|
+
};
|
|
60922
|
+
var useWorkflowChrome = ({
|
|
60923
|
+
accentColor = "blue",
|
|
60924
|
+
attentionColor = "rose",
|
|
60925
|
+
blockedColor = "amber",
|
|
60926
|
+
mutedColor = "neutral",
|
|
60927
|
+
variant = "outlined",
|
|
60928
|
+
translucentSurfaces
|
|
60929
|
+
}) => {
|
|
60930
|
+
const translucent = translucentSurfaces ?? isTranslucentVariant(variant);
|
|
60931
|
+
const palette = (0, import_react278.useMemo)(
|
|
60932
|
+
() => ({
|
|
60933
|
+
accent: accentColor,
|
|
60934
|
+
attention: attentionColor,
|
|
60935
|
+
blocked: blockedColor,
|
|
60936
|
+
muted: mutedColor,
|
|
60937
|
+
translucent
|
|
60938
|
+
}),
|
|
60939
|
+
[accentColor, attentionColor, blockedColor, mutedColor, translucent]
|
|
60940
|
+
);
|
|
60941
|
+
const surfaces = (0, import_react278.useMemo)(() => getSurfaceTokens(translucent), [translucent]);
|
|
60942
|
+
return { translucent, palette, surfaces };
|
|
60943
|
+
};
|
|
60944
|
+
var resolveLabels = (labelOverrides) => labelOverrides ? {
|
|
60945
|
+
...DEFAULT_LABELS,
|
|
60946
|
+
...labelOverrides,
|
|
60947
|
+
statuses: { ...DEFAULT_LABELS.statuses, ...labelOverrides.statuses }
|
|
60948
|
+
} : DEFAULT_LABELS;
|
|
60949
|
+
var buildCardProps = ({
|
|
60950
|
+
variant = "outlined",
|
|
60951
|
+
cardTone = "neutral",
|
|
60952
|
+
corner = DEFAULT_SURFACE_CORNER,
|
|
60953
|
+
glassOpacity = "light",
|
|
60954
|
+
vibrancy,
|
|
60955
|
+
specularMode,
|
|
60956
|
+
padding = "none"
|
|
60957
|
+
}) => ({
|
|
60958
|
+
variant,
|
|
60959
|
+
tone: cardTone,
|
|
60960
|
+
corner,
|
|
60961
|
+
glassOpacity,
|
|
60962
|
+
vibrancy,
|
|
60963
|
+
specularMode,
|
|
60964
|
+
padding,
|
|
60965
|
+
scrollable: false
|
|
60966
|
+
});
|
|
60782
60967
|
|
|
60783
60968
|
// src/components/WorkflowTracker/derive.ts
|
|
60784
60969
|
var computeProgress = (steps) => {
|
|
@@ -60853,8 +61038,262 @@ var resolveActiveStep = (steps, activeStepId) => {
|
|
|
60853
61038
|
return { step: steps[0], index: 1 };
|
|
60854
61039
|
};
|
|
60855
61040
|
|
|
61041
|
+
// src/components/WorkflowTracker/sampleWorkflow.tsx
|
|
61042
|
+
var import_jsx_runtime301 = require("react/jsx-runtime");
|
|
61043
|
+
var sampleWorkflow = {
|
|
61044
|
+
eyebrow: "VENDOR ONBOARDING \xB7 REQ-4128",
|
|
61045
|
+
title: "Northwind Logistics GmbH",
|
|
61046
|
+
live: true,
|
|
61047
|
+
activeStepId: "security_questionnaire",
|
|
61048
|
+
steps: [
|
|
61049
|
+
{
|
|
61050
|
+
id: "request_submitted",
|
|
61051
|
+
label: "Request submitted",
|
|
61052
|
+
status: "done",
|
|
61053
|
+
meta: "2m"
|
|
61054
|
+
},
|
|
61055
|
+
{
|
|
61056
|
+
id: "duplicate_check",
|
|
61057
|
+
label: "Duplicate check",
|
|
61058
|
+
status: "skipped",
|
|
61059
|
+
badge: "Not needed",
|
|
61060
|
+
meta: "No match in registry"
|
|
61061
|
+
},
|
|
61062
|
+
{
|
|
61063
|
+
id: "business_verification",
|
|
61064
|
+
label: "Business verification",
|
|
61065
|
+
status: "done",
|
|
61066
|
+
meta: "12m \xB7 3 of 3 sub-steps"
|
|
61067
|
+
},
|
|
61068
|
+
{
|
|
61069
|
+
id: "sanctions_screening",
|
|
61070
|
+
label: "Sanctions screening",
|
|
61071
|
+
status: "done",
|
|
61072
|
+
meta: "4m"
|
|
61073
|
+
},
|
|
61074
|
+
{
|
|
61075
|
+
id: "tax_documents",
|
|
61076
|
+
label: "Tax documents",
|
|
61077
|
+
status: "skipped",
|
|
61078
|
+
badge: "Skipped",
|
|
61079
|
+
meta: "Skipped by M. Reyes \xB7 resume anytime"
|
|
61080
|
+
},
|
|
61081
|
+
{
|
|
61082
|
+
id: "insurance_certificates",
|
|
61083
|
+
label: "Insurance certificates",
|
|
61084
|
+
status: "attention",
|
|
61085
|
+
badge: "Needs attention",
|
|
61086
|
+
meta: "1h 06m \xB7 Liability certificate expired 12 Aug",
|
|
61087
|
+
details: /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { className: "space-y-3 px-5 py-4 sm:px-6", children: [
|
|
61088
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.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." }),
|
|
61089
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)("ul", { className: "flex flex-wrap gap-2", children: ["reminder-12-aug.pdf", "underwriter-quote.pdf"].map((file) => /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
61090
|
+
"li",
|
|
61091
|
+
{
|
|
61092
|
+
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",
|
|
61093
|
+
children: file
|
|
61094
|
+
},
|
|
61095
|
+
file
|
|
61096
|
+
)) })
|
|
61097
|
+
] }),
|
|
61098
|
+
actions: [
|
|
61099
|
+
{ id: "review", label: "Review" },
|
|
61100
|
+
{ id: "remind", label: "Remind vendor", tone: "amber" }
|
|
61101
|
+
]
|
|
61102
|
+
},
|
|
61103
|
+
{
|
|
61104
|
+
id: "contract_drafting",
|
|
61105
|
+
label: "Contract drafting",
|
|
61106
|
+
status: "done",
|
|
61107
|
+
meta: "1h 10m"
|
|
61108
|
+
},
|
|
61109
|
+
{
|
|
61110
|
+
id: "security_questionnaire",
|
|
61111
|
+
label: "Security questionnaire",
|
|
61112
|
+
status: "in_progress",
|
|
61113
|
+
badge: "In progress",
|
|
61114
|
+
meta: "24m \xB7 3 of 6 sub-steps",
|
|
61115
|
+
elapsed: "24m",
|
|
61116
|
+
description: "Vendor is completing the long-form questionnaire. Each sub-step unlocks once its evidence file is accepted by the reviewer.",
|
|
61117
|
+
owner: "D. Okafor",
|
|
61118
|
+
startedAt: "19 Aug \xB7 09:12",
|
|
61119
|
+
sla: "Due in 6h",
|
|
61120
|
+
details: /* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { className: "space-y-5 px-5 py-4 sm:px-6", children: [
|
|
61121
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { children: [
|
|
61122
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)("p", { className: "text-[11px] font-semibold uppercase tracking-widest text-neutral-400 dark:text-neutral-500", children: "Review activity" }),
|
|
61123
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.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." })
|
|
61124
|
+
] }),
|
|
61125
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { children: [
|
|
61126
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)("p", { className: "text-[11px] font-semibold uppercase tracking-widest text-neutral-400 dark:text-neutral-500", children: "Files received" }),
|
|
61127
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)("ul", { className: "mt-2 flex flex-wrap gap-2", children: [
|
|
61128
|
+
"data-handling-v3.pdf",
|
|
61129
|
+
"pentest-2026.pdf",
|
|
61130
|
+
"soc2-typeii.pdf"
|
|
61131
|
+
].map((file) => /* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
61132
|
+
"li",
|
|
61133
|
+
{
|
|
61134
|
+
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",
|
|
61135
|
+
children: file
|
|
61136
|
+
},
|
|
61137
|
+
file
|
|
61138
|
+
)) })
|
|
61139
|
+
] }),
|
|
61140
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("div", { children: [
|
|
61141
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)("p", { className: "text-[11px] font-semibold uppercase tracking-widest text-neutral-400 dark:text-neutral-500", children: "Open findings" }),
|
|
61142
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("ul", { className: "mt-2 space-y-2", children: [
|
|
61143
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("li", { className: "flex items-start gap-2 text-sm leading-6 text-neutral-600 dark:text-neutral-300", children: [
|
|
61144
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
61145
|
+
"span",
|
|
61146
|
+
{
|
|
61147
|
+
"aria-hidden": "true",
|
|
61148
|
+
className: "mt-[9px] size-1.5 shrink-0 rounded-full bg-amber-400"
|
|
61149
|
+
}
|
|
61150
|
+
),
|
|
61151
|
+
"Subprocessor \u201CCloudDot BV\u201D is not covered by the DPA yet"
|
|
61152
|
+
] }),
|
|
61153
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsxs)("li", { className: "flex items-start gap-2 text-sm leading-6 text-neutral-600 dark:text-neutral-300", children: [
|
|
61154
|
+
/* @__PURE__ */ (0, import_jsx_runtime301.jsx)(
|
|
61155
|
+
"span",
|
|
61156
|
+
{
|
|
61157
|
+
"aria-hidden": "true",
|
|
61158
|
+
className: "mt-[9px] size-1.5 shrink-0 rounded-full bg-neutral-300 dark:bg-neutral-600"
|
|
61159
|
+
}
|
|
61160
|
+
),
|
|
61161
|
+
"Waiting on the incident-contact annex"
|
|
61162
|
+
] })
|
|
61163
|
+
] })
|
|
61164
|
+
] })
|
|
61165
|
+
] }),
|
|
61166
|
+
subSteps: [
|
|
61167
|
+
{
|
|
61168
|
+
id: "data_handling",
|
|
61169
|
+
label: "Data handling policy",
|
|
61170
|
+
status: "done",
|
|
61171
|
+
badge: "Accepted",
|
|
61172
|
+
duration: "5m"
|
|
61173
|
+
},
|
|
61174
|
+
{
|
|
61175
|
+
id: "pentest",
|
|
61176
|
+
label: "Penetration test report",
|
|
61177
|
+
status: "done",
|
|
61178
|
+
badge: "Accepted",
|
|
61179
|
+
duration: "8m"
|
|
61180
|
+
},
|
|
61181
|
+
{
|
|
61182
|
+
id: "soc2",
|
|
61183
|
+
label: "SOC 2 Type II evidence",
|
|
61184
|
+
status: "done",
|
|
61185
|
+
badge: "Accepted",
|
|
61186
|
+
duration: "11m"
|
|
61187
|
+
},
|
|
61188
|
+
{
|
|
61189
|
+
id: "subprocessor_list",
|
|
61190
|
+
label: "Subprocessor list",
|
|
61191
|
+
status: "running",
|
|
61192
|
+
badge: "Running",
|
|
61193
|
+
note: "Vendor uploading \u2014 2 of 3 files received"
|
|
61194
|
+
},
|
|
61195
|
+
{
|
|
61196
|
+
id: "incident_response",
|
|
61197
|
+
label: "Incident response plan",
|
|
61198
|
+
status: "skipped",
|
|
61199
|
+
badge: "Skipped",
|
|
61200
|
+
note: "Covered by master agreement \xA77"
|
|
61201
|
+
},
|
|
61202
|
+
{
|
|
61203
|
+
id: "business_continuity",
|
|
61204
|
+
label: "Business continuity plan",
|
|
61205
|
+
status: "not_started"
|
|
61206
|
+
}
|
|
61207
|
+
]
|
|
61208
|
+
},
|
|
61209
|
+
{
|
|
61210
|
+
id: "legal_review",
|
|
61211
|
+
label: "Legal review",
|
|
61212
|
+
status: "blocked",
|
|
61213
|
+
badge: "Blocked",
|
|
61214
|
+
meta: "Waiting on Legal \xB7 queued 2d",
|
|
61215
|
+
actions: [{ id: "nudge", label: "Nudge Legal", tone: "violet" }]
|
|
61216
|
+
},
|
|
61217
|
+
{
|
|
61218
|
+
id: "banking_details",
|
|
61219
|
+
label: "Banking details",
|
|
61220
|
+
status: "not_started"
|
|
61221
|
+
},
|
|
61222
|
+
{
|
|
61223
|
+
id: "system_provisioning",
|
|
61224
|
+
label: "System provisioning",
|
|
61225
|
+
status: "not_started"
|
|
61226
|
+
},
|
|
61227
|
+
{ id: "go_live", label: "Go-live", status: "not_started" }
|
|
61228
|
+
]
|
|
61229
|
+
};
|
|
61230
|
+
|
|
61231
|
+
// src/components/WorkflowTracker/WorkflowTrackerRail.tsx
|
|
61232
|
+
var import_jsx_runtime302 = require("react/jsx-runtime");
|
|
61233
|
+
var WorkflowTrackerRail = ({
|
|
61234
|
+
data = sampleWorkflow,
|
|
61235
|
+
loading = false,
|
|
61236
|
+
loadingRows = 6,
|
|
61237
|
+
showLegend = true,
|
|
61238
|
+
emptyState,
|
|
61239
|
+
labels: labelOverrides,
|
|
61240
|
+
cardClassName,
|
|
61241
|
+
cardScrollable,
|
|
61242
|
+
onStepSelect,
|
|
61243
|
+
onSubStepSelect,
|
|
61244
|
+
onStepAction,
|
|
61245
|
+
className,
|
|
61246
|
+
style,
|
|
61247
|
+
...styleProps
|
|
61248
|
+
}) => {
|
|
61249
|
+
const steps = data?.steps ?? [];
|
|
61250
|
+
const { palette, surfaces } = useWorkflowChrome(styleProps);
|
|
61251
|
+
const labels = (0, import_react279.useMemo)(() => resolveLabels(labelOverrides), [labelOverrides]);
|
|
61252
|
+
const cardProps = buildCardProps(styleProps);
|
|
61253
|
+
const active = (0, import_react279.useMemo)(
|
|
61254
|
+
() => resolveActiveStep(steps, data?.activeStepId),
|
|
61255
|
+
[steps, data?.activeStepId]
|
|
61256
|
+
);
|
|
61257
|
+
const progress = (0, import_react279.useMemo)(() => computeProgress(steps), [steps]);
|
|
61258
|
+
const tallies = (0, import_react279.useMemo)(() => computeTallies(steps), [steps]);
|
|
61259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61260
|
+
Panel_default,
|
|
61261
|
+
{
|
|
61262
|
+
...cardProps,
|
|
61263
|
+
scrollable: cardScrollable ?? false,
|
|
61264
|
+
className: (0, import_classnames112.default)(className, cardClassName),
|
|
61265
|
+
style,
|
|
61266
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
61267
|
+
WorkflowTimeline_default,
|
|
61268
|
+
{
|
|
61269
|
+
steps,
|
|
61270
|
+
activeStepId: active?.step.id,
|
|
61271
|
+
palette,
|
|
61272
|
+
surfaces,
|
|
61273
|
+
labels,
|
|
61274
|
+
progress,
|
|
61275
|
+
tallies,
|
|
61276
|
+
showLegend: showLegend && !loading,
|
|
61277
|
+
loading,
|
|
61278
|
+
loadingRows,
|
|
61279
|
+
emptyState,
|
|
61280
|
+
onStepSelect,
|
|
61281
|
+
onSubStepSelect,
|
|
61282
|
+
onStepAction
|
|
61283
|
+
}
|
|
61284
|
+
)
|
|
61285
|
+
}
|
|
61286
|
+
);
|
|
61287
|
+
};
|
|
61288
|
+
var WorkflowTrackerRail_default = WorkflowTrackerRail;
|
|
61289
|
+
|
|
61290
|
+
// src/components/WorkflowTracker/WorkflowTrackerStepDetails.tsx
|
|
61291
|
+
var import_react280 = require("react");
|
|
61292
|
+
var import_classnames114 = __toESM(require("classnames"), 1);
|
|
61293
|
+
|
|
60856
61294
|
// src/components/WorkflowTracker/WorkflowDetailPanel.tsx
|
|
60857
|
-
var
|
|
61295
|
+
var import_classnames113 = __toESM(require("classnames"), 1);
|
|
61296
|
+
var import_jsx_runtime303 = require("react/jsx-runtime");
|
|
60858
61297
|
var WorkflowDetailPanel = ({
|
|
60859
61298
|
active,
|
|
60860
61299
|
totalSteps,
|
|
@@ -60862,13 +61301,14 @@ var WorkflowDetailPanel = ({
|
|
|
60862
61301
|
surfaces,
|
|
60863
61302
|
labels,
|
|
60864
61303
|
loading,
|
|
60865
|
-
onSubStepSelect
|
|
61304
|
+
onSubStepSelect,
|
|
61305
|
+
onStepAction
|
|
60866
61306
|
}) => {
|
|
60867
61307
|
if (loading) {
|
|
60868
|
-
return /* @__PURE__ */ (0,
|
|
61308
|
+
return /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(WorkflowDetailSkeleton, {});
|
|
60869
61309
|
}
|
|
60870
61310
|
if (!active) {
|
|
60871
|
-
return /* @__PURE__ */ (0,
|
|
61311
|
+
return /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
60872
61312
|
WorkflowPlaceholder,
|
|
60873
61313
|
{
|
|
60874
61314
|
title: labels.noActiveStep,
|
|
@@ -60886,11 +61326,11 @@ var WorkflowDetailPanel = ({
|
|
|
60886
61326
|
step.startedAt ? { label: labels.started, value: step.startedAt } : void 0,
|
|
60887
61327
|
step.sla ? { label: labels.sla, value: step.sla } : void 0
|
|
60888
61328
|
].filter(Boolean);
|
|
60889
|
-
return /* @__PURE__ */ (0,
|
|
60890
|
-
/* @__PURE__ */ (0,
|
|
60891
|
-
/* @__PURE__ */ (0,
|
|
60892
|
-
/* @__PURE__ */ (0,
|
|
60893
|
-
/* @__PURE__ */ (0,
|
|
61329
|
+
return /* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: "flex flex-col", children: [
|
|
61330
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: "px-5 pb-6 pt-5 sm:px-6", children: [
|
|
61331
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-x-4 gap-y-2", children: [
|
|
61332
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
61333
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)(SectionTitle, { surfaces, children: [
|
|
60894
61334
|
labels.step,
|
|
60895
61335
|
" ",
|
|
60896
61336
|
index,
|
|
@@ -60899,7 +61339,7 @@ var WorkflowDetailPanel = ({
|
|
|
60899
61339
|
" ",
|
|
60900
61340
|
totalSteps
|
|
60901
61341
|
] }),
|
|
60902
|
-
step.badge && /* @__PURE__ */ (0,
|
|
61342
|
+
step.badge && /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
60903
61343
|
WorkflowBadge,
|
|
60904
61344
|
{
|
|
60905
61345
|
status,
|
|
@@ -60909,24 +61349,36 @@ var WorkflowDetailPanel = ({
|
|
|
60909
61349
|
}
|
|
60910
61350
|
)
|
|
60911
61351
|
] }),
|
|
60912
|
-
|
|
60913
|
-
|
|
60914
|
-
|
|
60915
|
-
|
|
61352
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: "flex flex-wrap items-center justify-end gap-x-4 gap-y-2", children: [
|
|
61353
|
+
step.elapsed && /* @__PURE__ */ (0, import_jsx_runtime303.jsxs)(SectionMeta, { surfaces, children: [
|
|
61354
|
+
labels.elapsed,
|
|
61355
|
+
" ",
|
|
61356
|
+
step.elapsed
|
|
61357
|
+
] }),
|
|
61358
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
61359
|
+
WorkflowQuickActions_default,
|
|
61360
|
+
{
|
|
61361
|
+
stepId: step.id,
|
|
61362
|
+
actions: step.actions ?? [],
|
|
61363
|
+
palette,
|
|
61364
|
+
groupLabel: labels.quickActions,
|
|
61365
|
+
onAction: onStepAction
|
|
61366
|
+
}
|
|
61367
|
+
)
|
|
60916
61368
|
] })
|
|
60917
61369
|
] }),
|
|
60918
|
-
/* @__PURE__ */ (0,
|
|
60919
|
-
step.description && /* @__PURE__ */ (0,
|
|
61370
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)("h3", { className: "mt-3 text-xl font-semibold tracking-tight text-neutral-900 dark:text-white sm:text-2xl", children: step.label }),
|
|
61371
|
+
step.description && /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
60920
61372
|
"p",
|
|
60921
61373
|
{
|
|
60922
|
-
className: (0,
|
|
61374
|
+
className: (0, import_classnames113.default)(
|
|
60923
61375
|
"mt-2 max-w-3xl text-sm leading-6",
|
|
60924
61376
|
surfaces.mutedText
|
|
60925
61377
|
),
|
|
60926
61378
|
children: step.description
|
|
60927
61379
|
}
|
|
60928
61380
|
),
|
|
60929
|
-
metaFields.length > 0 && /* @__PURE__ */ (0,
|
|
61381
|
+
metaFields.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime303.jsx)("div", { className: "mt-5 flex flex-wrap gap-x-10 gap-y-4", children: metaFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
60930
61382
|
MetaField,
|
|
60931
61383
|
{
|
|
60932
61384
|
label: field.label,
|
|
@@ -60936,18 +61388,18 @@ var WorkflowDetailPanel = ({
|
|
|
60936
61388
|
field.label
|
|
60937
61389
|
)) })
|
|
60938
61390
|
] }),
|
|
60939
|
-
subSteps.length > 0 && /* @__PURE__ */ (0,
|
|
60940
|
-
/* @__PURE__ */ (0,
|
|
61391
|
+
subSteps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime303.jsxs)(import_jsx_runtime303.Fragment, { children: [
|
|
61392
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)(
|
|
60941
61393
|
"div",
|
|
60942
61394
|
{
|
|
60943
|
-
className: (0,
|
|
61395
|
+
className: (0, import_classnames113.default)(
|
|
60944
61396
|
"flex flex-wrap items-center justify-between gap-2 border-y px-5 py-2.5 sm:px-6",
|
|
60945
61397
|
surfaces.border,
|
|
60946
61398
|
surfaces.strip
|
|
60947
61399
|
),
|
|
60948
61400
|
children: [
|
|
60949
|
-
/* @__PURE__ */ (0,
|
|
60950
|
-
/* @__PURE__ */ (0,
|
|
61401
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)(SectionTitle, { surfaces, children: labels.subSteps }),
|
|
61402
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)(SectionMeta, { surfaces, children: [
|
|
60951
61403
|
summary.accepted,
|
|
60952
61404
|
" ",
|
|
60953
61405
|
labels.accepted,
|
|
@@ -60963,24 +61415,24 @@ var WorkflowDetailPanel = ({
|
|
|
60963
61415
|
]
|
|
60964
61416
|
}
|
|
60965
61417
|
),
|
|
60966
|
-
/* @__PURE__ */ (0,
|
|
61418
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
60967
61419
|
"ul",
|
|
60968
61420
|
{
|
|
60969
|
-
className: (0,
|
|
61421
|
+
className: (0, import_classnames113.default)(
|
|
60970
61422
|
"m-0 list-none divide-y p-0",
|
|
60971
61423
|
surfaces.divider
|
|
60972
61424
|
),
|
|
60973
61425
|
children: subSteps.map((subStep) => {
|
|
60974
61426
|
const subStatus = normalizeStatus(subStep.status);
|
|
60975
61427
|
const isRunning = subStatus === "running";
|
|
60976
|
-
const rowContent = /* @__PURE__ */ (0,
|
|
60977
|
-
/* @__PURE__ */ (0,
|
|
60978
|
-
/* @__PURE__ */ (0,
|
|
60979
|
-
/* @__PURE__ */ (0,
|
|
60980
|
-
subStep.note && /* @__PURE__ */ (0,
|
|
61428
|
+
const rowContent = /* @__PURE__ */ (0, import_jsx_runtime303.jsxs)(import_jsx_runtime303.Fragment, { children: [
|
|
61429
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)(WorkflowStatusNode_default, { status: subStatus, palette }),
|
|
61430
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
61431
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)("p", { className: "text-sm font-medium text-neutral-800 dark:text-neutral-100", children: subStep.label }),
|
|
61432
|
+
subStep.note && /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
60981
61433
|
"p",
|
|
60982
61434
|
{
|
|
60983
|
-
className: (0,
|
|
61435
|
+
className: (0, import_classnames113.default)(
|
|
60984
61436
|
"mt-0.5 text-xs leading-5",
|
|
60985
61437
|
surfaces.mutedText
|
|
60986
61438
|
),
|
|
@@ -60988,7 +61440,7 @@ var WorkflowDetailPanel = ({
|
|
|
60988
61440
|
}
|
|
60989
61441
|
)
|
|
60990
61442
|
] }),
|
|
60991
|
-
subStep.badge && /* @__PURE__ */ (0,
|
|
61443
|
+
subStep.badge && /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
60992
61444
|
WorkflowBadge,
|
|
60993
61445
|
{
|
|
60994
61446
|
status: subStatus,
|
|
@@ -60997,10 +61449,10 @@ var WorkflowDetailPanel = ({
|
|
|
60997
61449
|
children: subStep.badge
|
|
60998
61450
|
}
|
|
60999
61451
|
),
|
|
61000
|
-
/* @__PURE__ */ (0,
|
|
61452
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
61001
61453
|
"span",
|
|
61002
61454
|
{
|
|
61003
|
-
className: (0,
|
|
61455
|
+
className: (0, import_classnames113.default)(
|
|
61004
61456
|
"w-10 shrink-0 text-right text-xs tabular-nums",
|
|
61005
61457
|
surfaces.faintText
|
|
61006
61458
|
),
|
|
@@ -61008,22 +61460,22 @@ var WorkflowDetailPanel = ({
|
|
|
61008
61460
|
}
|
|
61009
61461
|
)
|
|
61010
61462
|
] });
|
|
61011
|
-
const rowClasses = (0,
|
|
61463
|
+
const rowClasses = (0, import_classnames113.default)(
|
|
61012
61464
|
"flex w-full items-center gap-3 px-5 py-3 text-left sm:px-6",
|
|
61013
61465
|
isRunning && getRowHighlight(palette.accent, surfaces.translucent)
|
|
61014
61466
|
);
|
|
61015
|
-
return /* @__PURE__ */ (0,
|
|
61467
|
+
return /* @__PURE__ */ (0, import_jsx_runtime303.jsx)("li", { children: onSubStepSelect ? /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
61016
61468
|
"button",
|
|
61017
61469
|
{
|
|
61018
61470
|
type: "button",
|
|
61019
61471
|
onClick: () => onSubStepSelect(step.id, subStep.id),
|
|
61020
|
-
className: (0,
|
|
61472
|
+
className: (0, import_classnames113.default)(
|
|
61021
61473
|
rowClasses,
|
|
61022
61474
|
"focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-neutral-400 dark:focus-visible:ring-neutral-500"
|
|
61023
61475
|
),
|
|
61024
61476
|
children: rowContent
|
|
61025
61477
|
}
|
|
61026
|
-
) : /* @__PURE__ */ (0,
|
|
61478
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime303.jsx)("div", { className: rowClasses, children: rowContent }) }, subStep.id);
|
|
61027
61479
|
})
|
|
61028
61480
|
}
|
|
61029
61481
|
)
|
|
@@ -61032,18 +61484,128 @@ var WorkflowDetailPanel = ({
|
|
|
61032
61484
|
};
|
|
61033
61485
|
var WorkflowDetailPanel_default = WorkflowDetailPanel;
|
|
61034
61486
|
|
|
61487
|
+
// src/components/WorkflowTracker/WorkflowTrackerStepDetails.tsx
|
|
61488
|
+
var import_jsx_runtime304 = require("react/jsx-runtime");
|
|
61489
|
+
var WorkflowTrackerStepDetails = ({
|
|
61490
|
+
data = sampleWorkflow,
|
|
61491
|
+
loading = false,
|
|
61492
|
+
labels: labelOverrides,
|
|
61493
|
+
cardClassName,
|
|
61494
|
+
onSubStepSelect,
|
|
61495
|
+
onStepAction,
|
|
61496
|
+
className,
|
|
61497
|
+
style,
|
|
61498
|
+
...styleProps
|
|
61499
|
+
}) => {
|
|
61500
|
+
const steps = data?.steps ?? [];
|
|
61501
|
+
const { palette, surfaces } = useWorkflowChrome(styleProps);
|
|
61502
|
+
const labels = (0, import_react280.useMemo)(
|
|
61503
|
+
() => resolveLabels(labelOverrides),
|
|
61504
|
+
[labelOverrides]
|
|
61505
|
+
);
|
|
61506
|
+
const cardProps = buildCardProps(styleProps);
|
|
61507
|
+
const active = (0, import_react280.useMemo)(
|
|
61508
|
+
() => resolveActiveStep(steps, data?.activeStepId),
|
|
61509
|
+
[steps, data?.activeStepId]
|
|
61510
|
+
);
|
|
61511
|
+
return /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
61512
|
+
Panel_default,
|
|
61513
|
+
{
|
|
61514
|
+
...cardProps,
|
|
61515
|
+
className: (0, import_classnames114.default)(className, cardClassName),
|
|
61516
|
+
style,
|
|
61517
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
61518
|
+
WorkflowDetailPanel_default,
|
|
61519
|
+
{
|
|
61520
|
+
active,
|
|
61521
|
+
totalSteps: steps.length,
|
|
61522
|
+
palette,
|
|
61523
|
+
surfaces,
|
|
61524
|
+
labels,
|
|
61525
|
+
loading,
|
|
61526
|
+
onSubStepSelect,
|
|
61527
|
+
onStepAction
|
|
61528
|
+
}
|
|
61529
|
+
)
|
|
61530
|
+
}
|
|
61531
|
+
);
|
|
61532
|
+
};
|
|
61533
|
+
var WorkflowTrackerStepDetails_default = WorkflowTrackerStepDetails;
|
|
61534
|
+
|
|
61535
|
+
// src/components/WorkflowTracker/WorkflowTrackerDetails.tsx
|
|
61536
|
+
var import_react281 = require("react");
|
|
61537
|
+
var import_classnames116 = __toESM(require("classnames"), 1);
|
|
61538
|
+
|
|
61539
|
+
// src/components/WorkflowTracker/WorkflowDetailsCard.tsx
|
|
61540
|
+
var import_classnames115 = __toESM(require("classnames"), 1);
|
|
61541
|
+
var import_jsx_runtime305 = require("react/jsx-runtime");
|
|
61542
|
+
var WorkflowDetailsCard = ({
|
|
61543
|
+
details,
|
|
61544
|
+
ariaLabel,
|
|
61545
|
+
cardProps,
|
|
61546
|
+
className,
|
|
61547
|
+
style
|
|
61548
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
61549
|
+
Panel_default,
|
|
61550
|
+
{
|
|
61551
|
+
...cardProps,
|
|
61552
|
+
flexBody: true,
|
|
61553
|
+
className: (0, import_classnames115.default)("flex-1", className),
|
|
61554
|
+
style,
|
|
61555
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(ScrollArea_default, { className: "h-full", mask: true, role: "region", "aria-label": ariaLabel, children: details })
|
|
61556
|
+
}
|
|
61557
|
+
);
|
|
61558
|
+
var WorkflowDetailsCard_default = WorkflowDetailsCard;
|
|
61559
|
+
|
|
61560
|
+
// src/components/WorkflowTracker/WorkflowTrackerDetails.tsx
|
|
61561
|
+
var import_jsx_runtime306 = require("react/jsx-runtime");
|
|
61562
|
+
var WorkflowTrackerDetails = ({
|
|
61563
|
+
data = sampleWorkflow,
|
|
61564
|
+
loading = false,
|
|
61565
|
+
labels: labelOverrides,
|
|
61566
|
+
cardClassName,
|
|
61567
|
+
className,
|
|
61568
|
+
style,
|
|
61569
|
+
...styleProps
|
|
61570
|
+
}) => {
|
|
61571
|
+
const steps = data?.steps ?? [];
|
|
61572
|
+
const labels = (0, import_react281.useMemo)(() => resolveLabels(labelOverrides), [labelOverrides]);
|
|
61573
|
+
const cardProps = buildCardProps(styleProps);
|
|
61574
|
+
const active = (0, import_react281.useMemo)(
|
|
61575
|
+
() => resolveActiveStep(steps, data?.activeStepId),
|
|
61576
|
+
[steps, data?.activeStepId]
|
|
61577
|
+
);
|
|
61578
|
+
const details = active?.step.details;
|
|
61579
|
+
if (loading || details == null || details === "") return null;
|
|
61580
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
61581
|
+
WorkflowDetailsCard_default,
|
|
61582
|
+
{
|
|
61583
|
+
details,
|
|
61584
|
+
ariaLabel: labels.details,
|
|
61585
|
+
cardProps,
|
|
61586
|
+
className: (0, import_classnames116.default)(className, cardClassName),
|
|
61587
|
+
style
|
|
61588
|
+
}
|
|
61589
|
+
);
|
|
61590
|
+
};
|
|
61591
|
+
var WorkflowTrackerDetails_default = WorkflowTrackerDetails;
|
|
61592
|
+
|
|
61593
|
+
// src/components/WorkflowTracker/WorkflowTrackerRollups.tsx
|
|
61594
|
+
var import_react282 = require("react");
|
|
61595
|
+
var import_classnames118 = __toESM(require("classnames"), 1);
|
|
61596
|
+
|
|
61035
61597
|
// src/components/WorkflowTracker/WorkflowSummaryCard.tsx
|
|
61036
|
-
var
|
|
61037
|
-
var
|
|
61598
|
+
var import_classnames117 = __toESM(require("classnames"), 1);
|
|
61599
|
+
var import_jsx_runtime307 = require("react/jsx-runtime");
|
|
61038
61600
|
var WorkflowSummaryCard = ({
|
|
61039
61601
|
title,
|
|
61040
61602
|
steps,
|
|
61041
61603
|
palette,
|
|
61042
61604
|
surfaces
|
|
61043
|
-
}) => /* @__PURE__ */ (0,
|
|
61044
|
-
/* @__PURE__ */ (0,
|
|
61045
|
-
/* @__PURE__ */ (0,
|
|
61046
|
-
/* @__PURE__ */ (0,
|
|
61605
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("div", { className: "px-5 py-4", children: [
|
|
61606
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(SectionTitle, { surfaces, children: title }),
|
|
61607
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("ul", { className: "mt-3 space-y-3", children: steps.map((step) => /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("li", { className: "flex items-start gap-3", children: [
|
|
61608
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
61047
61609
|
WorkflowStatusNode_default,
|
|
61048
61610
|
{
|
|
61049
61611
|
status: normalizeStatus(step.status),
|
|
@@ -61051,12 +61613,12 @@ var WorkflowSummaryCard = ({
|
|
|
61051
61613
|
className: "mt-0.5"
|
|
61052
61614
|
}
|
|
61053
61615
|
),
|
|
61054
|
-
/* @__PURE__ */ (0,
|
|
61055
|
-
/* @__PURE__ */ (0,
|
|
61056
|
-
step.meta && /* @__PURE__ */ (0,
|
|
61616
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
61617
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("p", { className: "text-sm font-medium text-neutral-800 dark:text-neutral-100", children: step.label }),
|
|
61618
|
+
step.meta && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
61057
61619
|
"p",
|
|
61058
61620
|
{
|
|
61059
|
-
className: (0,
|
|
61621
|
+
className: (0, import_classnames117.default)(
|
|
61060
61622
|
"mt-0.5 text-xs leading-5",
|
|
61061
61623
|
surfaces.mutedText
|
|
61062
61624
|
),
|
|
@@ -61068,166 +61630,57 @@ var WorkflowSummaryCard = ({
|
|
|
61068
61630
|
] });
|
|
61069
61631
|
var WorkflowSummaryCard_default = WorkflowSummaryCard;
|
|
61070
61632
|
|
|
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
|
-
id: "business_verification",
|
|
61093
|
-
label: "Business verification",
|
|
61094
|
-
status: "done",
|
|
61095
|
-
meta: "12m \xB7 3 of 3 sub-steps"
|
|
61096
|
-
},
|
|
61097
|
-
{
|
|
61098
|
-
id: "sanctions_screening",
|
|
61099
|
-
label: "Sanctions screening",
|
|
61100
|
-
status: "done",
|
|
61101
|
-
meta: "4m"
|
|
61102
|
-
},
|
|
61103
|
-
{
|
|
61104
|
-
id: "tax_documents",
|
|
61105
|
-
label: "Tax documents",
|
|
61106
|
-
status: "skipped",
|
|
61107
|
-
badge: "Skipped",
|
|
61108
|
-
meta: "Skipped by M. Reyes \xB7 resume anytime"
|
|
61109
|
-
},
|
|
61110
|
-
{
|
|
61111
|
-
id: "insurance_certificates",
|
|
61112
|
-
label: "Insurance certificates",
|
|
61113
|
-
status: "attention",
|
|
61114
|
-
badge: "Needs attention",
|
|
61115
|
-
meta: "1h 06m \xB7 Liability certificate expired 12 Aug"
|
|
61116
|
-
},
|
|
61117
|
-
{
|
|
61118
|
-
id: "contract_drafting",
|
|
61119
|
-
label: "Contract drafting",
|
|
61120
|
-
status: "done",
|
|
61121
|
-
meta: "1h 10m"
|
|
61122
|
-
},
|
|
61633
|
+
// src/components/WorkflowTracker/WorkflowTrackerRollups.tsx
|
|
61634
|
+
var import_jsx_runtime308 = require("react/jsx-runtime");
|
|
61635
|
+
var WorkflowTrackerRollups = ({
|
|
61636
|
+
data = sampleWorkflow,
|
|
61637
|
+
loading = false,
|
|
61638
|
+
labels: labelOverrides,
|
|
61639
|
+
className,
|
|
61640
|
+
style,
|
|
61641
|
+
...styleProps
|
|
61642
|
+
}) => {
|
|
61643
|
+
const steps = data?.steps ?? [];
|
|
61644
|
+
const { palette, surfaces } = useWorkflowChrome(styleProps);
|
|
61645
|
+
const labels = (0, import_react282.useMemo)(() => resolveLabels(labelOverrides), [labelOverrides]);
|
|
61646
|
+
const cardProps = buildCardProps(styleProps);
|
|
61647
|
+
const attentionSteps = (0, import_react282.useMemo)(() => getAttentionSteps(steps), [steps]);
|
|
61648
|
+
const skippedSteps = (0, import_react282.useMemo)(() => getSkippedSteps(steps), [steps]);
|
|
61649
|
+
if (loading || attentionSteps.length === 0 && skippedSteps.length === 0) {
|
|
61650
|
+
return null;
|
|
61651
|
+
}
|
|
61652
|
+
return /* @__PURE__ */ (0, import_jsx_runtime308.jsxs)(
|
|
61653
|
+
"div",
|
|
61123
61654
|
{
|
|
61124
|
-
|
|
61125
|
-
|
|
61126
|
-
|
|
61127
|
-
|
|
61128
|
-
|
|
61129
|
-
|
|
61130
|
-
|
|
61131
|
-
|
|
61132
|
-
|
|
61133
|
-
|
|
61134
|
-
|
|
61135
|
-
|
|
61136
|
-
|
|
61137
|
-
|
|
61138
|
-
|
|
61139
|
-
|
|
61140
|
-
|
|
61141
|
-
|
|
61142
|
-
|
|
61143
|
-
|
|
61144
|
-
|
|
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
|
-
}
|
|
61655
|
+
className: (0, import_classnames118.default)("grid grid-cols-1 gap-5 @xl:grid-cols-2", className),
|
|
61656
|
+
style,
|
|
61657
|
+
children: [
|
|
61658
|
+
attentionSteps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(Panel_default, { ...cardProps, children: /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61659
|
+
WorkflowSummaryCard_default,
|
|
61660
|
+
{
|
|
61661
|
+
title: labels.needsAttention,
|
|
61662
|
+
steps: attentionSteps,
|
|
61663
|
+
palette,
|
|
61664
|
+
surfaces
|
|
61665
|
+
}
|
|
61666
|
+
) }),
|
|
61667
|
+
skippedSteps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(Panel_default, { ...cardProps, children: /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
61668
|
+
WorkflowSummaryCard_default,
|
|
61669
|
+
{
|
|
61670
|
+
title: labels.skippedSteps,
|
|
61671
|
+
steps: skippedSteps,
|
|
61672
|
+
palette,
|
|
61673
|
+
surfaces
|
|
61674
|
+
}
|
|
61675
|
+
) })
|
|
61175
61676
|
]
|
|
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
|
-
},
|
|
61189
|
-
{
|
|
61190
|
-
id: "system_provisioning",
|
|
61191
|
-
label: "System provisioning",
|
|
61192
|
-
status: "not_started"
|
|
61193
|
-
},
|
|
61194
|
-
{ id: "go_live", label: "Go-live", status: "not_started" }
|
|
61195
|
-
]
|
|
61677
|
+
}
|
|
61678
|
+
);
|
|
61196
61679
|
};
|
|
61680
|
+
var WorkflowTrackerRollups_default = WorkflowTrackerRollups;
|
|
61197
61681
|
|
|
61198
61682
|
// 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
|
-
};
|
|
61683
|
+
var import_jsx_runtime309 = require("react/jsx-runtime");
|
|
61231
61684
|
var WorkflowTracker = ({
|
|
61232
61685
|
data = sampleWorkflow,
|
|
61233
61686
|
accentColor = "blue",
|
|
@@ -61246,6 +61699,8 @@ var WorkflowTracker = ({
|
|
|
61246
61699
|
maxWidth = 1180,
|
|
61247
61700
|
railWidth = 360,
|
|
61248
61701
|
stickyRail = false,
|
|
61702
|
+
fillHeight = false,
|
|
61703
|
+
fillHeightOffset = 0,
|
|
61249
61704
|
loading = false,
|
|
61250
61705
|
loadingRows = 6,
|
|
61251
61706
|
emptyState,
|
|
@@ -61254,81 +61709,54 @@ var WorkflowTracker = ({
|
|
|
61254
61709
|
labels: labelOverrides,
|
|
61255
61710
|
onStepSelect,
|
|
61256
61711
|
onSubStepSelect,
|
|
61712
|
+
onStepAction,
|
|
61257
61713
|
className,
|
|
61258
61714
|
style,
|
|
61259
61715
|
...rest
|
|
61260
61716
|
}) => {
|
|
61261
|
-
const
|
|
61262
|
-
|
|
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 = {
|
|
61717
|
+
const styleProps = {
|
|
61718
|
+
accentColor,
|
|
61719
|
+
attentionColor,
|
|
61720
|
+
blockedColor,
|
|
61721
|
+
mutedColor,
|
|
61297
61722
|
variant,
|
|
61298
|
-
|
|
61723
|
+
cardTone,
|
|
61299
61724
|
corner,
|
|
61300
61725
|
glassOpacity,
|
|
61301
61726
|
vibrancy,
|
|
61302
61727
|
specularMode,
|
|
61303
61728
|
padding,
|
|
61304
|
-
|
|
61729
|
+
translucentSurfaces
|
|
61305
61730
|
};
|
|
61731
|
+
const { surfaces } = useWorkflowChrome(styleProps);
|
|
61732
|
+
const labels = (0, import_react283.useMemo)(() => resolveLabels(labelOverrides), [labelOverrides]);
|
|
61306
61733
|
const railStyle = {
|
|
61307
|
-
"--wt-rail-width": typeof railWidth === "number" ? `${railWidth}px` : railWidth
|
|
61734
|
+
"--wt-rail-width": typeof railWidth === "number" ? `${railWidth}px` : railWidth,
|
|
61735
|
+
"--wt-fill-offset": typeof fillHeightOffset === "number" ? `${fillHeightOffset}px` : fillHeightOffset
|
|
61308
61736
|
};
|
|
61309
|
-
return /* @__PURE__ */ (0,
|
|
61737
|
+
return /* @__PURE__ */ (0, import_jsx_runtime309.jsxs)(
|
|
61310
61738
|
"div",
|
|
61311
61739
|
{
|
|
61312
|
-
className: (0,
|
|
61740
|
+
className: (0, import_classnames119.default)("@container w-full", className),
|
|
61313
61741
|
style: { maxWidth, ...railStyle, ...style },
|
|
61314
61742
|
"aria-busy": loading || void 0,
|
|
61315
61743
|
...rest,
|
|
61316
61744
|
children: [
|
|
61317
|
-
showHeader && loading && /* @__PURE__ */ (0,
|
|
61745
|
+
showHeader && loading && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61318
61746
|
WorkflowHeaderSkeleton,
|
|
61319
61747
|
{
|
|
61320
61748
|
hasIcon: Boolean(data?.icon),
|
|
61321
61749
|
iconCorner
|
|
61322
61750
|
}
|
|
61323
61751
|
),
|
|
61324
|
-
showHeader && !loading && /* @__PURE__ */ (0,
|
|
61325
|
-
/* @__PURE__ */ (0,
|
|
61752
|
+
showHeader && !loading && /* @__PURE__ */ (0, import_jsx_runtime309.jsxs)("header", { className: "mb-5 flex flex-wrap items-start justify-between gap-3", children: [
|
|
61753
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
61326
61754
|
data?.icon && // `overflow-hidden` plus the shared corner class clips whatever
|
|
61327
61755
|
// the caller passes, so an <img> needs no rounding of its own.
|
|
61328
|
-
/* @__PURE__ */ (0,
|
|
61756
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61329
61757
|
"span",
|
|
61330
61758
|
{
|
|
61331
|
-
className: (0,
|
|
61759
|
+
className: (0, import_classnames119.default)(
|
|
61332
61760
|
"flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden [&>img]:h-full [&>img]:w-full [&>img]:object-cover",
|
|
61333
61761
|
getSurfaceCornerClass(iconCorner),
|
|
61334
61762
|
surfaces.chip
|
|
@@ -61336,33 +61764,33 @@ var WorkflowTracker = ({
|
|
|
61336
61764
|
children: data.icon
|
|
61337
61765
|
}
|
|
61338
61766
|
),
|
|
61339
|
-
/* @__PURE__ */ (0,
|
|
61340
|
-
data?.eyebrow && /* @__PURE__ */ (0,
|
|
61767
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsxs)("div", { className: "min-w-0", children: [
|
|
61768
|
+
data?.eyebrow && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61341
61769
|
"p",
|
|
61342
61770
|
{
|
|
61343
|
-
className: (0,
|
|
61771
|
+
className: (0, import_classnames119.default)(
|
|
61344
61772
|
"text-[11px] font-semibold uppercase tracking-widest",
|
|
61345
61773
|
surfaces.faintText
|
|
61346
61774
|
),
|
|
61347
61775
|
children: data.eyebrow
|
|
61348
61776
|
}
|
|
61349
61777
|
),
|
|
61350
|
-
/* @__PURE__ */ (0,
|
|
61778
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)("h2", { className: "mt-1 text-2xl font-semibold tracking-tight text-neutral-900 dark:text-white sm:text-3xl", children: data?.title })
|
|
61351
61779
|
] })
|
|
61352
61780
|
] }),
|
|
61353
|
-
data?.live && /* @__PURE__ */ (0,
|
|
61781
|
+
data?.live && /* @__PURE__ */ (0, import_jsx_runtime309.jsxs)(
|
|
61354
61782
|
Pill_default,
|
|
61355
61783
|
{
|
|
61356
61784
|
size: "md",
|
|
61357
61785
|
tone: mutedColor,
|
|
61358
61786
|
variant: "outline",
|
|
61359
|
-
className: (0,
|
|
61787
|
+
className: (0, import_classnames119.default)("tracking-wide", surfaces.chip),
|
|
61360
61788
|
children: [
|
|
61361
|
-
/* @__PURE__ */ (0,
|
|
61789
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61362
61790
|
"span",
|
|
61363
61791
|
{
|
|
61364
61792
|
"aria-hidden": "true",
|
|
61365
|
-
className: (0,
|
|
61793
|
+
className: (0, import_classnames119.default)(
|
|
61366
61794
|
"mr-2 inline-block h-1.5 w-1.5 rounded-full",
|
|
61367
61795
|
`bg-${accentColor}-500 dark:bg-${accentColor}-400`
|
|
61368
61796
|
)
|
|
@@ -61373,67 +61801,77 @@ var WorkflowTracker = ({
|
|
|
61373
61801
|
}
|
|
61374
61802
|
)
|
|
61375
61803
|
] }),
|
|
61376
|
-
/* @__PURE__ */ (0,
|
|
61377
|
-
|
|
61378
|
-
|
|
61379
|
-
|
|
61380
|
-
|
|
61381
|
-
|
|
61382
|
-
|
|
61383
|
-
|
|
61804
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsxs)(
|
|
61805
|
+
"div",
|
|
61806
|
+
{
|
|
61807
|
+
className: (0, import_classnames119.default)(
|
|
61808
|
+
"grid grid-cols-1 items-start gap-5 @4xl:grid-cols-[var(--wt-rail-width)_minmax(0,1fr)]",
|
|
61809
|
+
fillHeight && "@4xl:h-[calc(100dvh-var(--wt-fill-offset))]"
|
|
61810
|
+
),
|
|
61811
|
+
children: [
|
|
61812
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61813
|
+
WorkflowTrackerRail_default,
|
|
61384
61814
|
{
|
|
61385
|
-
|
|
61386
|
-
|
|
61387
|
-
palette,
|
|
61388
|
-
surfaces,
|
|
61389
|
-
labels,
|
|
61390
|
-
progress,
|
|
61391
|
-
tallies,
|
|
61392
|
-
showLegend: showLegend && !loading,
|
|
61815
|
+
...styleProps,
|
|
61816
|
+
data,
|
|
61393
61817
|
loading,
|
|
61394
61818
|
loadingRows,
|
|
61819
|
+
showLegend,
|
|
61395
61820
|
emptyState,
|
|
61821
|
+
labels: labelOverrides,
|
|
61822
|
+
cardScrollable: fillHeight,
|
|
61823
|
+
cardClassName: (0, import_classnames119.default)(
|
|
61824
|
+
stickyRail && !fillHeight && "@4xl:sticky @4xl:top-6",
|
|
61825
|
+
fillHeight && "@4xl:min-h-0 @4xl:self-stretch"
|
|
61826
|
+
),
|
|
61396
61827
|
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
|
|
61828
|
+
onSubStepSelect,
|
|
61829
|
+
onStepAction
|
|
61423
61830
|
}
|
|
61424
|
-
)
|
|
61425
|
-
|
|
61426
|
-
|
|
61831
|
+
),
|
|
61832
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsxs)(
|
|
61833
|
+
"div",
|
|
61427
61834
|
{
|
|
61428
|
-
|
|
61429
|
-
|
|
61430
|
-
|
|
61431
|
-
|
|
61835
|
+
className: (0, import_classnames119.default)(
|
|
61836
|
+
"@container flex min-w-0 flex-col gap-5",
|
|
61837
|
+
fillHeight && "@4xl:min-h-0 @4xl:self-stretch"
|
|
61838
|
+
),
|
|
61839
|
+
children: [
|
|
61840
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61841
|
+
WorkflowTrackerStepDetails_default,
|
|
61842
|
+
{
|
|
61843
|
+
...styleProps,
|
|
61844
|
+
data,
|
|
61845
|
+
loading,
|
|
61846
|
+
labels: labelOverrides,
|
|
61847
|
+
onSubStepSelect,
|
|
61848
|
+
onStepAction
|
|
61849
|
+
}
|
|
61850
|
+
),
|
|
61851
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61852
|
+
WorkflowTrackerDetails_default,
|
|
61853
|
+
{
|
|
61854
|
+
...styleProps,
|
|
61855
|
+
data,
|
|
61856
|
+
loading,
|
|
61857
|
+
labels: labelOverrides
|
|
61858
|
+
}
|
|
61859
|
+
),
|
|
61860
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
61861
|
+
WorkflowTrackerRollups_default,
|
|
61862
|
+
{
|
|
61863
|
+
...styleProps,
|
|
61864
|
+
data,
|
|
61865
|
+
loading,
|
|
61866
|
+
labels: labelOverrides
|
|
61867
|
+
}
|
|
61868
|
+
)
|
|
61869
|
+
]
|
|
61432
61870
|
}
|
|
61433
|
-
)
|
|
61434
|
-
]
|
|
61435
|
-
|
|
61436
|
-
|
|
61871
|
+
)
|
|
61872
|
+
]
|
|
61873
|
+
}
|
|
61874
|
+
)
|
|
61437
61875
|
]
|
|
61438
61876
|
}
|
|
61439
61877
|
);
|
|
@@ -61441,9 +61879,9 @@ var WorkflowTracker = ({
|
|
|
61441
61879
|
var WorkflowTracker_default = WorkflowTracker;
|
|
61442
61880
|
|
|
61443
61881
|
// src/components/Gantt/Gantt.tsx
|
|
61444
|
-
var
|
|
61882
|
+
var import_react288 = require("react");
|
|
61445
61883
|
var import_react_dom15 = require("react-dom");
|
|
61446
|
-
var
|
|
61884
|
+
var import_classnames123 = __toESM(require("classnames"), 1);
|
|
61447
61885
|
|
|
61448
61886
|
// ../common/gantt/types.ts
|
|
61449
61887
|
var GANTT_ZOOM_PRESETS = [
|
|
@@ -62789,38 +63227,38 @@ var sampleGantt = {
|
|
|
62789
63227
|
};
|
|
62790
63228
|
|
|
62791
63229
|
// src/components/Gantt/GanttScale.tsx
|
|
62792
|
-
var
|
|
62793
|
-
var
|
|
63230
|
+
var import_classnames120 = __toESM(require("classnames"), 1);
|
|
63231
|
+
var import_jsx_runtime310 = require("react/jsx-runtime");
|
|
62794
63232
|
var GanttScale = ({ levels, height }) => {
|
|
62795
63233
|
if (levels.length === 0) {
|
|
62796
|
-
return /* @__PURE__ */ (0,
|
|
63234
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("div", { style: { height } });
|
|
62797
63235
|
}
|
|
62798
63236
|
const coarseHeight = levels.length > 1 ? 24 : height;
|
|
62799
|
-
return /* @__PURE__ */ (0,
|
|
63237
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("div", { className: "flex h-full w-full flex-col", children: levels.map((level, li) => /* @__PURE__ */ (0, import_jsx_runtime310.jsx)(
|
|
62800
63238
|
"div",
|
|
62801
63239
|
{
|
|
62802
|
-
className: (0,
|
|
63240
|
+
className: (0, import_classnames120.default)("flex w-full", li === 0 ? "shrink-0" : "min-h-0 flex-1"),
|
|
62803
63241
|
style: li === 0 ? { height: coarseHeight } : void 0,
|
|
62804
|
-
children: level.columns.map((col) => /* @__PURE__ */ (0,
|
|
63242
|
+
children: level.columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime310.jsxs)(
|
|
62805
63243
|
"div",
|
|
62806
63244
|
{
|
|
62807
|
-
className: (0,
|
|
63245
|
+
className: (0, import_classnames120.default)(
|
|
62808
63246
|
"flex shrink-0 flex-col items-center justify-center overflow-hidden border-r border-neutral-200/70 dark:border-neutral-800/70",
|
|
62809
63247
|
li === 0 ? "bg-neutral-50/60 dark:bg-neutral-800/40" : "bg-white dark:bg-neutral-900"
|
|
62810
63248
|
),
|
|
62811
63249
|
style: { width: col.width },
|
|
62812
63250
|
children: [
|
|
62813
|
-
/* @__PURE__ */ (0,
|
|
63251
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)(
|
|
62814
63252
|
"span",
|
|
62815
63253
|
{
|
|
62816
|
-
className: (0,
|
|
63254
|
+
className: (0, import_classnames120.default)(
|
|
62817
63255
|
"max-w-full truncate px-1 text-[10px] font-semibold uppercase leading-none tracking-wide",
|
|
62818
63256
|
li === 0 ? "text-neutral-700 dark:text-neutral-200" : "text-neutral-500 dark:text-neutral-400"
|
|
62819
63257
|
),
|
|
62820
63258
|
children: col.label
|
|
62821
63259
|
}
|
|
62822
63260
|
),
|
|
62823
|
-
col.subLabel != null && /* @__PURE__ */ (0,
|
|
63261
|
+
col.subLabel != null && /* @__PURE__ */ (0, import_jsx_runtime310.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
63262
|
]
|
|
62825
63263
|
},
|
|
62826
63264
|
col.id
|
|
@@ -62832,9 +63270,9 @@ var GanttScale = ({ levels, height }) => {
|
|
|
62832
63270
|
GanttScale.displayName = "GanttScale";
|
|
62833
63271
|
|
|
62834
63272
|
// src/components/Gantt/GanttLinkLayer.tsx
|
|
62835
|
-
var
|
|
62836
|
-
var
|
|
62837
|
-
var GanttLinkLayer = (0,
|
|
63273
|
+
var import_react284 = require("react");
|
|
63274
|
+
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
63275
|
+
var GanttLinkLayer = (0, import_react284.forwardRef)(
|
|
62838
63276
|
function GanttLinkLayer2({
|
|
62839
63277
|
width,
|
|
62840
63278
|
height,
|
|
@@ -62848,7 +63286,7 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62848
63286
|
onDeleteLink
|
|
62849
63287
|
}, ref) {
|
|
62850
63288
|
const t = useKitT();
|
|
62851
|
-
const svgRef = (0,
|
|
63289
|
+
const svgRef = (0, import_react284.useRef)(null);
|
|
62852
63290
|
const selPath = selected ? paths.find((p) => p.link === selected) : void 0;
|
|
62853
63291
|
const selColor = selPath ? selPath.color ?? color : color;
|
|
62854
63292
|
const selMid = selPath ? { x: (selPath.from.x + selPath.to.x) / 2, y: (selPath.from.y + selPath.to.y) / 2 } : null;
|
|
@@ -62869,24 +63307,24 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62869
63307
|
const pick = pickFromEvent(e) ?? clicked;
|
|
62870
63308
|
if (interactive && onDeleteLink) onDeleteLink(pick.link);
|
|
62871
63309
|
};
|
|
62872
|
-
return /* @__PURE__ */ (0,
|
|
63310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
62873
63311
|
"div",
|
|
62874
63312
|
{
|
|
62875
63313
|
ref,
|
|
62876
63314
|
className: "pointer-events-none absolute top-0 z-10",
|
|
62877
63315
|
style: { left: offsetLeft, width, height },
|
|
62878
63316
|
children: [
|
|
62879
|
-
/* @__PURE__ */ (0,
|
|
63317
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("svg", { ref: svgRef, width, height, className: "block overflow-visible", children: [
|
|
62880
63318
|
paths.map((p, i) => {
|
|
62881
63319
|
const tokens = getGanttLinkTokens(p.color ?? color);
|
|
62882
63320
|
const sel = selected != null && p.link === selected;
|
|
62883
63321
|
const nodeR = sel ? 4.5 : 3.5;
|
|
62884
|
-
return /* @__PURE__ */ (0,
|
|
63322
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
62885
63323
|
"g",
|
|
62886
63324
|
{
|
|
62887
63325
|
style: sel ? { filter: `drop-shadow(0 0 3px var(--color-${p.color ?? color}-500))` } : void 0,
|
|
62888
63326
|
children: [
|
|
62889
|
-
/* @__PURE__ */ (0,
|
|
63327
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
62890
63328
|
"path",
|
|
62891
63329
|
{
|
|
62892
63330
|
d: p.d,
|
|
@@ -62902,10 +63340,10 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62902
63340
|
},
|
|
62903
63341
|
onClick: (e) => handlePick(e, p),
|
|
62904
63342
|
onDoubleClick: (e) => handleDelete(e, p),
|
|
62905
|
-
children: /* @__PURE__ */ (0,
|
|
63343
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("title", { children: `${p.link.source} \u2192 ${p.link.target} (${p.type.toUpperCase()})` })
|
|
62906
63344
|
}
|
|
62907
63345
|
),
|
|
62908
|
-
/* @__PURE__ */ (0,
|
|
63346
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
62909
63347
|
"path",
|
|
62910
63348
|
{
|
|
62911
63349
|
d: p.d,
|
|
@@ -62921,14 +63359,14 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62921
63359
|
},
|
|
62922
63360
|
onClick: (e) => handlePick(e, p),
|
|
62923
63361
|
onDoubleClick: (e) => handleDelete(e, p),
|
|
62924
|
-
children: /* @__PURE__ */ (0,
|
|
63362
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("title", { children: `${p.link.source} \u2192 ${p.link.target} (${p.type.toUpperCase()})` })
|
|
62925
63363
|
}
|
|
62926
63364
|
),
|
|
62927
|
-
p.arrow && /* @__PURE__ */ (0,
|
|
62928
|
-
/* @__PURE__ */ (0,
|
|
62929
|
-
/* @__PURE__ */ (0,
|
|
62930
|
-
/* @__PURE__ */ (0,
|
|
62931
|
-
/* @__PURE__ */ (0,
|
|
63365
|
+
p.arrow && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("polygon", { points: p.arrow, className: tokens.fill }),
|
|
63366
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: p.from.x, cy: p.from.y, r: nodeR + 2.5, className: tokens.halo }),
|
|
63367
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: p.from.x, cy: p.from.y, r: nodeR, className: tokens.fill }),
|
|
63368
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: p.to.x, cy: p.to.y, r: nodeR + 2.5, className: tokens.halo }),
|
|
63369
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: p.to.x, cy: p.to.y, r: nodeR, className: tokens.fill })
|
|
62932
63370
|
]
|
|
62933
63371
|
},
|
|
62934
63372
|
`${p.link.source}->${p.link.target}-${p.type}-${i}`
|
|
@@ -62936,8 +63374,8 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62936
63374
|
}),
|
|
62937
63375
|
rubber && (() => {
|
|
62938
63376
|
const tokens = getGanttLinkTokens(rubber.color);
|
|
62939
|
-
return /* @__PURE__ */ (0,
|
|
62940
|
-
/* @__PURE__ */ (0,
|
|
63377
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("g", { children: [
|
|
63378
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
62941
63379
|
"path",
|
|
62942
63380
|
{
|
|
62943
63381
|
d: rubber.d,
|
|
@@ -62948,15 +63386,15 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62948
63386
|
strokeDasharray: "5 3"
|
|
62949
63387
|
}
|
|
62950
63388
|
),
|
|
62951
|
-
rubber.arrow && /* @__PURE__ */ (0,
|
|
62952
|
-
/* @__PURE__ */ (0,
|
|
62953
|
-
/* @__PURE__ */ (0,
|
|
62954
|
-
/* @__PURE__ */ (0,
|
|
62955
|
-
/* @__PURE__ */ (0,
|
|
63389
|
+
rubber.arrow && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("polygon", { points: rubber.arrow, className: tokens.fill }),
|
|
63390
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: rubber.from.x, cy: rubber.from.y, r: 6, className: tokens.halo }),
|
|
63391
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: rubber.from.x, cy: rubber.from.y, r: 3.5, className: tokens.fill }),
|
|
63392
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: rubber.to.x, cy: rubber.to.y, r: 6, className: tokens.halo }),
|
|
63393
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("circle", { cx: rubber.to.x, cy: rubber.to.y, r: 3.5, className: tokens.fill })
|
|
62956
63394
|
] });
|
|
62957
63395
|
})()
|
|
62958
63396
|
] }),
|
|
62959
|
-
canDelete && selMid && /* @__PURE__ */ (0,
|
|
63397
|
+
canDelete && selMid && /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
62960
63398
|
"button",
|
|
62961
63399
|
{
|
|
62962
63400
|
type: "button",
|
|
@@ -62974,7 +63412,7 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62974
63412
|
onClick: () => onDeleteLink(selected),
|
|
62975
63413
|
title: t("kit.gantt.removeDependency"),
|
|
62976
63414
|
children: [
|
|
62977
|
-
/* @__PURE__ */ (0,
|
|
63415
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("span", { "aria-hidden": true, children: "\u2715" }),
|
|
62978
63416
|
" ",
|
|
62979
63417
|
t("kit.gantt.delete")
|
|
62980
63418
|
]
|
|
@@ -62988,9 +63426,9 @@ var GanttLinkLayer = (0, import_react279.forwardRef)(
|
|
|
62988
63426
|
GanttLinkLayer.displayName = "GanttLinkLayer";
|
|
62989
63427
|
|
|
62990
63428
|
// src/components/Gantt/GanttBodyRow.tsx
|
|
62991
|
-
var
|
|
62992
|
-
var
|
|
62993
|
-
var
|
|
63429
|
+
var import_react285 = require("react");
|
|
63430
|
+
var import_classnames121 = __toESM(require("classnames"), 1);
|
|
63431
|
+
var import_jsx_runtime312 = require("react/jsx-runtime");
|
|
62994
63432
|
var BAR_HEIGHT = 24;
|
|
62995
63433
|
var MILESTONE_SIZE = 14;
|
|
62996
63434
|
var GanttBodyRow = ({
|
|
@@ -63029,11 +63467,11 @@ var GanttBodyRow = ({
|
|
|
63029
63467
|
const t = useKitT();
|
|
63030
63468
|
const isDraggingThis = row.task != null && drag?.taskId === row.task.id;
|
|
63031
63469
|
const reorderDragging = isDraggingThis && drag?.kind === "reorder";
|
|
63032
|
-
return /* @__PURE__ */ (0,
|
|
63470
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63033
63471
|
"div",
|
|
63034
63472
|
{
|
|
63035
63473
|
"data-row-key": row.key,
|
|
63036
|
-
className: (0,
|
|
63474
|
+
className: (0, import_classnames121.default)(
|
|
63037
63475
|
// No overflow here: an overflow-hidden row root would become the
|
|
63038
63476
|
// sticky halves' (non-scrolling) scrollport and stop them pinning to
|
|
63039
63477
|
// the left edge while the timeline scrolls. The halves pin the
|
|
@@ -63050,7 +63488,7 @@ var GanttBodyRow = ({
|
|
|
63050
63488
|
boxShadow: `inset 2px 0 0 var(--color-${color}-500)`
|
|
63051
63489
|
} : {}
|
|
63052
63490
|
},
|
|
63053
|
-
children: row.task == null ? /* @__PURE__ */ (0,
|
|
63491
|
+
children: row.task == null ? /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63054
63492
|
LaneHeader,
|
|
63055
63493
|
{
|
|
63056
63494
|
row,
|
|
@@ -63061,20 +63499,20 @@ var GanttBodyRow = ({
|
|
|
63061
63499
|
dividerClass,
|
|
63062
63500
|
liveProgress: liveLane
|
|
63063
63501
|
}
|
|
63064
|
-
) : /* @__PURE__ */ (0,
|
|
63065
|
-
/* @__PURE__ */ (0,
|
|
63502
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
|
|
63503
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
|
|
63066
63504
|
"div",
|
|
63067
63505
|
{
|
|
63068
|
-
className: (0,
|
|
63506
|
+
className: (0, import_classnames121.default)(
|
|
63069
63507
|
"sticky left-0 z-20 flex items-stretch overflow-hidden border-r border-b bg-white dark:bg-neutral-900",
|
|
63070
63508
|
dividerClass
|
|
63071
63509
|
),
|
|
63072
63510
|
style: { width: leftWidth },
|
|
63073
63511
|
children: [
|
|
63074
|
-
/* @__PURE__ */ (0,
|
|
63512
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "flex w-9 shrink-0 items-center justify-center", children: interactive && !row.task.locked && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63075
63513
|
"span",
|
|
63076
63514
|
{
|
|
63077
|
-
className: (0,
|
|
63515
|
+
className: (0, import_classnames121.default)(
|
|
63078
63516
|
"flex cursor-grab touch-none items-center text-neutral-300 transition-opacity active:cursor-grabbing dark:text-neutral-600",
|
|
63079
63517
|
reorderDragging ? "opacity-100" : "opacity-0 group-hover/row:opacity-100"
|
|
63080
63518
|
),
|
|
@@ -63082,10 +63520,10 @@ var GanttBodyRow = ({
|
|
|
63082
63520
|
onPointerDown: (e) => onGripPointerDown(row.key, row.task, e),
|
|
63083
63521
|
title: t("kit.gantt.dragReorder"),
|
|
63084
63522
|
"aria-hidden": "true",
|
|
63085
|
-
children: /* @__PURE__ */ (0,
|
|
63523
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(Drag, { className: "h-3.5 w-3.5" })
|
|
63086
63524
|
}
|
|
63087
63525
|
) }),
|
|
63088
|
-
columns.map((col, i) => /* @__PURE__ */ (0,
|
|
63526
|
+
columns.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63089
63527
|
Cell,
|
|
63090
63528
|
{
|
|
63091
63529
|
col,
|
|
@@ -63106,12 +63544,12 @@ var GanttBodyRow = ({
|
|
|
63106
63544
|
]
|
|
63107
63545
|
}
|
|
63108
63546
|
),
|
|
63109
|
-
/* @__PURE__ */ (0,
|
|
63547
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63110
63548
|
"div",
|
|
63111
63549
|
{
|
|
63112
|
-
className: (0,
|
|
63550
|
+
className: (0, import_classnames121.default)("relative shrink-0 border-b", dividerClass),
|
|
63113
63551
|
style: { width: timelineWidth },
|
|
63114
|
-
children: /* @__PURE__ */ (0,
|
|
63552
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63115
63553
|
TaskBar,
|
|
63116
63554
|
{
|
|
63117
63555
|
task: row.task,
|
|
@@ -63152,57 +63590,57 @@ var LaneHeader = ({ row, columns, leftWidth, color, onCaretClick, dividerClass =
|
|
|
63152
63590
|
const laneColor = lane.color ?? color;
|
|
63153
63591
|
const tokens = getGanttLaneTokens(laneColor);
|
|
63154
63592
|
const isOpen = lane.open !== false;
|
|
63155
|
-
return /* @__PURE__ */ (0,
|
|
63156
|
-
/* @__PURE__ */ (0,
|
|
63593
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
|
|
63594
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
|
|
63157
63595
|
"div",
|
|
63158
63596
|
{
|
|
63159
|
-
className: (0,
|
|
63597
|
+
className: (0, import_classnames121.default)(
|
|
63160
63598
|
"sticky left-0 z-20 flex items-stretch overflow-hidden border-r border-b bg-white dark:bg-neutral-900",
|
|
63161
63599
|
dividerClass
|
|
63162
63600
|
),
|
|
63163
63601
|
style: { width: leftWidth },
|
|
63164
63602
|
children: [
|
|
63165
|
-
/* @__PURE__ */ (0,
|
|
63166
|
-
/* @__PURE__ */ (0,
|
|
63603
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: (0, import_classnames121.default)("pointer-events-none absolute inset-0", tokens.band) }),
|
|
63604
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "relative flex w-9 shrink-0 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63167
63605
|
"button",
|
|
63168
63606
|
{
|
|
63169
63607
|
type: "button",
|
|
63170
63608
|
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
63609
|
onClick: () => onCaretClick(lane.id, isOpen),
|
|
63172
63610
|
"aria-label": t(isOpen ? "kit.gantt.collapse" : "kit.gantt.expand", { name: lane.label }),
|
|
63173
|
-
children: /* @__PURE__ */ (0,
|
|
63611
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ChevronRight, { className: (0, import_classnames121.default)("h-3 w-3 transition-transform", isOpen && "rotate-90") })
|
|
63174
63612
|
}
|
|
63175
63613
|
) }),
|
|
63176
|
-
columns.map((col, i) => /* @__PURE__ */ (0,
|
|
63614
|
+
columns.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63177
63615
|
"div",
|
|
63178
63616
|
{
|
|
63179
|
-
className: (0,
|
|
63617
|
+
className: (0, import_classnames121.default)(
|
|
63180
63618
|
"relative flex shrink-0 items-center gap-2 overflow-hidden border-r px-2 last:border-r-0",
|
|
63181
63619
|
dividerClass
|
|
63182
63620
|
),
|
|
63183
63621
|
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,
|
|
63622
|
+
children: i === 0 ? /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
|
|
63623
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: (0, import_classnames121.default)("truncate text-[13px] font-semibold", tokens.label), children: lane.label }),
|
|
63624
|
+
lane.description && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "hidden truncate text-[11px] text-neutral-500 dark:text-neutral-400 lg:inline", children: lane.description }),
|
|
63625
|
+
row.childCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime312.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 })
|
|
63626
|
+
] }) : col.key === "progress" ? /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ProgressCell, { value: liveProgress ?? row.progress ?? 0, barClass: tokens.chip }) : null
|
|
63189
63627
|
},
|
|
63190
63628
|
col.key
|
|
63191
63629
|
))
|
|
63192
63630
|
]
|
|
63193
63631
|
}
|
|
63194
63632
|
),
|
|
63195
|
-
/* @__PURE__ */ (0,
|
|
63633
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: (0, import_classnames121.default)("relative min-w-0 flex-1 border-b", dividerClass), children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: (0, import_classnames121.default)("absolute inset-0", tokens.band) }) })
|
|
63196
63634
|
] });
|
|
63197
63635
|
};
|
|
63198
63636
|
var Cell = ({ col, task, depth, isGroup, childCount, first, onCaretClick, renderCell, liveProgress, liveRollup, rowProgress, dividerClass = "border-neutral-100 dark:border-neutral-800" }) => {
|
|
63199
63637
|
const t = useKitT();
|
|
63200
63638
|
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
63639
|
const custom = col.key !== "name" && renderCell ? renderCell(value, task, col) : null;
|
|
63202
|
-
return /* @__PURE__ */ (0,
|
|
63640
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63203
63641
|
"div",
|
|
63204
63642
|
{
|
|
63205
|
-
className: (0,
|
|
63643
|
+
className: (0, import_classnames121.default)(
|
|
63206
63644
|
"flex shrink-0 items-center gap-1.5 overflow-hidden border-r px-2 text-[12.5px] last:border-r-0",
|
|
63207
63645
|
dividerClass
|
|
63208
63646
|
),
|
|
@@ -63210,50 +63648,50 @@ var Cell = ({ col, task, depth, isGroup, childCount, first, onCaretClick, render
|
|
|
63210
63648
|
width: col.width ?? "160px",
|
|
63211
63649
|
justifyContent: col.align === "center" ? "center" : col.align === "right" ? "flex-end" : "flex-start"
|
|
63212
63650
|
},
|
|
63213
|
-
children: first ? /* @__PURE__ */ (0,
|
|
63214
|
-
/* @__PURE__ */ (0,
|
|
63651
|
+
children: first ? /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
|
|
63652
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "shrink-0", style: { width: depth * 14 + 18 }, children: isGroup && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63215
63653
|
"button",
|
|
63216
63654
|
{
|
|
63217
63655
|
type: "button",
|
|
63218
63656
|
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
63657
|
onClick: () => onCaretClick(task.id, task.open !== false),
|
|
63220
63658
|
"aria-label": t(task.open === false ? "kit.gantt.expand" : "kit.gantt.collapse", { name: task.name }),
|
|
63221
|
-
children: /* @__PURE__ */ (0,
|
|
63659
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ChevronRight, { className: (0, import_classnames121.default)("h-3 w-3 transition-transform", task.open !== false && "rotate-90") })
|
|
63222
63660
|
}
|
|
63223
63661
|
) }),
|
|
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,
|
|
63662
|
+
isGroup && childCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("span", { className: "flex min-w-0 items-center gap-1 font-semibold text-neutral-800 dark:text-neutral-100", children: [
|
|
63663
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "truncate", children: task.name }),
|
|
63664
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.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 })
|
|
63665
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "truncate font-medium text-neutral-700 dark:text-neutral-300", children: task.name })
|
|
63666
|
+
] }) : col.kind === "owner" ? value != null ? /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("span", { className: "flex min-w-0 items-center gap-1.5 text-neutral-600 dark:text-neutral-400", children: [
|
|
63667
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63230
63668
|
"span",
|
|
63231
63669
|
{
|
|
63232
|
-
className: (0,
|
|
63670
|
+
className: (0, import_classnames121.default)(
|
|
63233
63671
|
"flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[8px] font-bold uppercase text-white",
|
|
63234
63672
|
getGanttBarTokens(task.color ?? "blue").fill
|
|
63235
63673
|
),
|
|
63236
63674
|
children: String(value).slice(0, 1)
|
|
63237
63675
|
}
|
|
63238
63676
|
),
|
|
63239
|
-
/* @__PURE__ */ (0,
|
|
63240
|
-
] }) : /* @__PURE__ */ (0,
|
|
63677
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "truncate", children: String(value) })
|
|
63678
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "text-neutral-400 dark:text-neutral-600", children: "\u2014" }) : col.kind === "progress" ? /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ProgressCell, { value: typeof value === "number" ? value : 0 }) : col.kind === "badge" ? task.badge != null ? /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63241
63679
|
"span",
|
|
63242
63680
|
{
|
|
63243
|
-
className: (0,
|
|
63681
|
+
className: (0, import_classnames121.default)(
|
|
63244
63682
|
"rounded-full px-1.5 py-0.5 text-[10px] font-semibold",
|
|
63245
63683
|
getGanttBarTokens(task.badgeColor ?? "neutral").fill,
|
|
63246
63684
|
"text-white"
|
|
63247
63685
|
),
|
|
63248
63686
|
children: task.badge
|
|
63249
63687
|
}
|
|
63250
|
-
) : /* @__PURE__ */ (0,
|
|
63688
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "text-neutral-400 dark:text-neutral-600", children: "\u2014" }) : custom != null ? custom : /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "truncate text-neutral-600 dark:text-neutral-400", children: value == null || value === "" ? "\u2014" : String(value) })
|
|
63251
63689
|
}
|
|
63252
63690
|
);
|
|
63253
63691
|
};
|
|
63254
|
-
var ProgressCell = ({ value, barClass = "bg-emerald-500" }) => /* @__PURE__ */ (0,
|
|
63255
|
-
/* @__PURE__ */ (0,
|
|
63256
|
-
/* @__PURE__ */ (0,
|
|
63692
|
+
var ProgressCell = ({ value, barClass = "bg-emerald-500" }) => /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("span", { className: "flex w-full items-center gap-1.5", children: [
|
|
63693
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.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_runtime312.jsx)("span", { className: (0, import_classnames121.default)("block h-full rounded-full", barClass), style: { width: `${Math.round(value * 100)}%` } }) }),
|
|
63694
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("span", { className: "w-7 shrink-0 text-right text-[10px] font-semibold tabular-nums text-neutral-500 dark:text-neutral-400", children: [
|
|
63257
63695
|
Math.round(value * 100),
|
|
63258
63696
|
"%"
|
|
63259
63697
|
] })
|
|
@@ -63285,7 +63723,7 @@ var TaskBar = ({
|
|
|
63285
63723
|
const t = useKitT();
|
|
63286
63724
|
const milestone = task.type === "milestone";
|
|
63287
63725
|
const barColor = task.color ?? color;
|
|
63288
|
-
const tokens = (0,
|
|
63726
|
+
const tokens = (0, import_react285.useMemo)(() => getGanttBarTokens(barColor), [barColor]);
|
|
63289
63727
|
const startMs = liveDates ? liveDates.start : toMs(task.start);
|
|
63290
63728
|
const endMs = liveDates ? liveDates.end : toMs(task.end);
|
|
63291
63729
|
const left = dateToX(startMs, rangeStart, zoom);
|
|
@@ -63310,7 +63748,7 @@ var TaskBar = ({
|
|
|
63310
63748
|
pct: progressPct
|
|
63311
63749
|
});
|
|
63312
63750
|
if (milestone) {
|
|
63313
|
-
return /* @__PURE__ */ (0,
|
|
63751
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
|
|
63314
63752
|
"div",
|
|
63315
63753
|
{
|
|
63316
63754
|
role: "button",
|
|
@@ -63318,7 +63756,7 @@ var TaskBar = ({
|
|
|
63318
63756
|
"aria-label": ariaLabel,
|
|
63319
63757
|
title: ariaLabel,
|
|
63320
63758
|
"data-gantt-bar": task.id,
|
|
63321
|
-
className: (0,
|
|
63759
|
+
className: (0, import_classnames121.default)(
|
|
63322
63760
|
"absolute z-10 flex cursor-pointer items-center gap-1.5 outline-none",
|
|
63323
63761
|
selected && selectionTokens.ring,
|
|
63324
63762
|
"rounded"
|
|
@@ -63328,13 +63766,13 @@ var TaskBar = ({
|
|
|
63328
63766
|
onClick: () => onSelect(task.id),
|
|
63329
63767
|
onKeyDown: (e) => onBarKeyDown(e, task),
|
|
63330
63768
|
children: [
|
|
63331
|
-
/* @__PURE__ */ (0,
|
|
63332
|
-
/* @__PURE__ */ (0,
|
|
63769
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: (0, import_classnames121.default)("h-3.5 w-3.5 shrink-0 rotate-45 rounded-[2px] shadow-sm", tokens.milestone) }),
|
|
63770
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)("span", { className: "truncate text-[11px] font-semibold text-neutral-700 dark:text-neutral-300", children: task.name })
|
|
63333
63771
|
]
|
|
63334
63772
|
}
|
|
63335
63773
|
);
|
|
63336
63774
|
}
|
|
63337
|
-
return /* @__PURE__ */ (0,
|
|
63775
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
|
|
63338
63776
|
"div",
|
|
63339
63777
|
{
|
|
63340
63778
|
role: "button",
|
|
@@ -63342,7 +63780,7 @@ var TaskBar = ({
|
|
|
63342
63780
|
"aria-label": ariaLabel,
|
|
63343
63781
|
title: `${task.name} \xB7 ${formatDateTime(startMs, locale)} \u2192 ${formatDateTime(endMs, locale)} \xB7 ${progressPct}%`,
|
|
63344
63782
|
"data-gantt-bar": task.id,
|
|
63345
|
-
className: (0,
|
|
63783
|
+
className: (0, import_classnames121.default)(
|
|
63346
63784
|
"group/bar absolute z-10 cursor-grab touch-none rounded-md shadow-sm outline-none transition-shadow active:cursor-grabbing",
|
|
63347
63785
|
tokens.base,
|
|
63348
63786
|
tokens.rim,
|
|
@@ -63359,17 +63797,17 @@ var TaskBar = ({
|
|
|
63359
63797
|
onClick: () => onSelect(task.id),
|
|
63360
63798
|
onKeyDown: (e) => onBarKeyDown(e, task),
|
|
63361
63799
|
children: [
|
|
63362
|
-
progress > 0 && /* @__PURE__ */ (0,
|
|
63800
|
+
progress > 0 && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63363
63801
|
"div",
|
|
63364
63802
|
{
|
|
63365
|
-
className: (0,
|
|
63803
|
+
className: (0, import_classnames121.default)("absolute inset-y-0 left-0 rounded-l-md", tokens.progress),
|
|
63366
63804
|
style: { width: `${progress * 100}%` }
|
|
63367
63805
|
}
|
|
63368
63806
|
),
|
|
63369
|
-
canEdit && !row.isGroup && progress > 0 && progress < 1 && /* @__PURE__ */ (0,
|
|
63807
|
+
canEdit && !row.isGroup && progress > 0 && progress < 1 && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63370
63808
|
"div",
|
|
63371
63809
|
{
|
|
63372
|
-
className: (0,
|
|
63810
|
+
className: (0, import_classnames121.default)(
|
|
63373
63811
|
"absolute inset-y-0 z-20 w-2 cursor-ew-resize touch-none opacity-0 transition-opacity group-hover/bar:opacity-100",
|
|
63374
63812
|
liveProgress != null && "opacity-100"
|
|
63375
63813
|
),
|
|
@@ -63377,10 +63815,10 @@ var TaskBar = ({
|
|
|
63377
63815
|
onPointerDown: (e) => onProgressPointerDown(task, e),
|
|
63378
63816
|
title: labels.progress,
|
|
63379
63817
|
"aria-hidden": "true",
|
|
63380
|
-
children: /* @__PURE__ */ (0,
|
|
63818
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "mx-auto h-full w-0.5 rounded-full bg-white/90" })
|
|
63381
63819
|
}
|
|
63382
63820
|
),
|
|
63383
|
-
liveProgress != null && /* @__PURE__ */ (0,
|
|
63821
|
+
liveProgress != null && /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
|
|
63384
63822
|
"div",
|
|
63385
63823
|
{
|
|
63386
63824
|
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 +63829,31 @@ var TaskBar = ({
|
|
|
63391
63829
|
]
|
|
63392
63830
|
}
|
|
63393
63831
|
),
|
|
63394
|
-
showName && (renderBar != null ? /* @__PURE__ */ (0,
|
|
63395
|
-
canEdit && /* @__PURE__ */ (0,
|
|
63396
|
-
/* @__PURE__ */ (0,
|
|
63832
|
+
showName && (renderBar != null ? /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: (0, import_classnames121.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_runtime312.jsx)("span", { className: (0, import_classnames121.default)("pointer-events-none absolute inset-0 flex items-center truncate px-1.5 text-[11px] font-medium", labelText), children: task.name })),
|
|
63833
|
+
canEdit && /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
|
|
63834
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63397
63835
|
"div",
|
|
63398
63836
|
{
|
|
63399
63837
|
className: "absolute inset-y-0 -left-1 z-20 w-2 cursor-ew-resize touch-none",
|
|
63400
63838
|
onPointerDown: (e) => onResizePointerDown(task, "start", e),
|
|
63401
63839
|
title: t("kit.gantt.resizeStart"),
|
|
63402
63840
|
"aria-hidden": "true",
|
|
63403
|
-
children: /* @__PURE__ */ (0,
|
|
63841
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "mx-auto h-full w-1 rounded-full bg-white/0 opacity-0 transition-opacity group-hover/bar:opacity-100" })
|
|
63404
63842
|
}
|
|
63405
63843
|
),
|
|
63406
|
-
/* @__PURE__ */ (0,
|
|
63844
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63407
63845
|
"div",
|
|
63408
63846
|
{
|
|
63409
63847
|
className: "absolute inset-y-0 -right-1 z-20 w-2 cursor-ew-resize touch-none",
|
|
63410
63848
|
onPointerDown: (e) => onResizePointerDown(task, "end", e),
|
|
63411
63849
|
title: t("kit.gantt.resizeEnd"),
|
|
63412
63850
|
"aria-hidden": "true",
|
|
63413
|
-
children: /* @__PURE__ */ (0,
|
|
63851
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "mx-auto h-full w-1 rounded-full bg-white/0 opacity-0 transition-opacity group-hover/bar:opacity-100" })
|
|
63414
63852
|
}
|
|
63415
63853
|
)
|
|
63416
63854
|
] }),
|
|
63417
|
-
canEdit && /* @__PURE__ */ (0,
|
|
63418
|
-
/* @__PURE__ */ (0,
|
|
63855
|
+
canEdit && /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
|
|
63856
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63419
63857
|
"button",
|
|
63420
63858
|
{
|
|
63421
63859
|
type: "button",
|
|
@@ -63426,7 +63864,7 @@ var TaskBar = ({
|
|
|
63426
63864
|
"aria-label": t("kit.gantt.linkFromStart", { task: task.name })
|
|
63427
63865
|
}
|
|
63428
63866
|
),
|
|
63429
|
-
/* @__PURE__ */ (0,
|
|
63867
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
63430
63868
|
"button",
|
|
63431
63869
|
{
|
|
63432
63870
|
type: "button",
|
|
@@ -63444,9 +63882,9 @@ var TaskBar = ({
|
|
|
63444
63882
|
};
|
|
63445
63883
|
|
|
63446
63884
|
// src/components/Gantt/GanttToolbar.tsx
|
|
63447
|
-
var
|
|
63448
|
-
var
|
|
63449
|
-
var
|
|
63885
|
+
var import_react286 = require("react");
|
|
63886
|
+
var import_classnames122 = __toESM(require("classnames"), 1);
|
|
63887
|
+
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
63450
63888
|
function nearestPreset(zoom, presets) {
|
|
63451
63889
|
let best = null;
|
|
63452
63890
|
let bestDist = Infinity;
|
|
@@ -63473,25 +63911,25 @@ var GanttToolbar = ({
|
|
|
63473
63911
|
Month: t("kit.gantt.zoomMonth"),
|
|
63474
63912
|
Quarter: t("kit.gantt.zoomQuarter")
|
|
63475
63913
|
};
|
|
63476
|
-
const active = (0,
|
|
63477
|
-
const chrome = (0,
|
|
63914
|
+
const active = (0, import_react286.useMemo)(() => nearestPreset(zoom, presets), [zoom, presets]);
|
|
63915
|
+
const chrome = (0, import_react286.useMemo)(
|
|
63478
63916
|
() => getSurfaceVariantClasses(variant, "neutral"),
|
|
63479
63917
|
[variant]
|
|
63480
63918
|
);
|
|
63481
|
-
return /* @__PURE__ */ (0,
|
|
63919
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
63482
63920
|
"div",
|
|
63483
63921
|
{
|
|
63484
|
-
className: (0,
|
|
63922
|
+
className: (0, import_classnames122.default)(
|
|
63485
63923
|
"pointer-events-auto flex items-center gap-1 rounded-lg p-1",
|
|
63486
63924
|
chrome
|
|
63487
63925
|
),
|
|
63488
63926
|
children: [
|
|
63489
|
-
/* @__PURE__ */ (0,
|
|
63927
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.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_runtime313.jsx)(
|
|
63490
63928
|
"button",
|
|
63491
63929
|
{
|
|
63492
63930
|
type: "button",
|
|
63493
63931
|
onClick: () => onZoomTo(p.value),
|
|
63494
|
-
className: (0,
|
|
63932
|
+
className: (0, import_classnames122.default)(
|
|
63495
63933
|
"rounded px-1.5 py-0.5 text-[10.5px] font-semibold transition-colors",
|
|
63496
63934
|
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
63935
|
),
|
|
@@ -63499,9 +63937,9 @@ var GanttToolbar = ({
|
|
|
63499
63937
|
},
|
|
63500
63938
|
p.label
|
|
63501
63939
|
)) }),
|
|
63502
|
-
/* @__PURE__ */ (0,
|
|
63503
|
-
/* @__PURE__ */ (0,
|
|
63504
|
-
/* @__PURE__ */ (0,
|
|
63940
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "mx-0.5 h-4 w-px bg-neutral-200 dark:bg-neutral-700" }),
|
|
63941
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(Button_default, { variant: "ghost", size: "xs", onClick: () => onZoomBy(1 / 1.25), "aria-label": t("kit.gantt.zoomOut"), children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("span", { className: "text-xs font-semibold leading-none", children: "\u2212" }) }),
|
|
63942
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(Button_default, { variant: "ghost", size: "xs", onClick: () => onZoomBy(1.25), "aria-label": t("kit.gantt.zoomIn"), children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("span", { className: "text-xs font-semibold leading-none", children: "+" }) })
|
|
63505
63943
|
]
|
|
63506
63944
|
}
|
|
63507
63945
|
);
|
|
@@ -63509,16 +63947,16 @@ var GanttToolbar = ({
|
|
|
63509
63947
|
GanttToolbar.displayName = "GanttToolbar";
|
|
63510
63948
|
|
|
63511
63949
|
// src/components/Gantt/useGanttDrag.ts
|
|
63512
|
-
var
|
|
63950
|
+
var import_react287 = require("react");
|
|
63513
63951
|
function useGanttDrag(opts) {
|
|
63514
|
-
const [drag, setDrag] = (0,
|
|
63515
|
-
const [linkSelected, setLinkSelected] = (0,
|
|
63516
|
-
const optsRef = (0,
|
|
63952
|
+
const [drag, setDrag] = (0, import_react287.useState)(null);
|
|
63953
|
+
const [linkSelected, setLinkSelected] = (0, import_react287.useState)(null);
|
|
63954
|
+
const optsRef = (0, import_react287.useRef)(opts);
|
|
63517
63955
|
optsRef.current = opts;
|
|
63518
|
-
const dragRef = (0,
|
|
63956
|
+
const dragRef = (0, import_react287.useRef)(null);
|
|
63519
63957
|
dragRef.current = drag;
|
|
63520
63958
|
const { rows, zoom, rangeStart, accentColor } = opts;
|
|
63521
|
-
const barGeom = (0,
|
|
63959
|
+
const barGeom = (0, import_react287.useCallback)(
|
|
63522
63960
|
(taskId) => {
|
|
63523
63961
|
const row = rows.find((r) => r.key === `task:${taskId}`);
|
|
63524
63962
|
if (!row?.task) return null;
|
|
@@ -63538,7 +63976,7 @@ function useGanttDrag(opts) {
|
|
|
63538
63976
|
},
|
|
63539
63977
|
[rows, zoom, rangeStart]
|
|
63540
63978
|
);
|
|
63541
|
-
const findTargetBar = (0,
|
|
63979
|
+
const findTargetBar = (0, import_react287.useCallback)(
|
|
63542
63980
|
(x, y, excludeId) => {
|
|
63543
63981
|
const row = rows.find((r) => r.task && y >= r.top && y < r.top + r.height);
|
|
63544
63982
|
if (!row?.task || row.task.id === excludeId) return null;
|
|
@@ -63549,7 +63987,7 @@ function useGanttDrag(opts) {
|
|
|
63549
63987
|
},
|
|
63550
63988
|
[rows, barGeom]
|
|
63551
63989
|
);
|
|
63552
|
-
const allBarGeoms = (0,
|
|
63990
|
+
const allBarGeoms = (0, import_react287.useCallback)(() => {
|
|
63553
63991
|
const out = [];
|
|
63554
63992
|
for (const row of rows) {
|
|
63555
63993
|
if (!row.task) continue;
|
|
@@ -63558,17 +63996,17 @@ function useGanttDrag(opts) {
|
|
|
63558
63996
|
}
|
|
63559
63997
|
return out;
|
|
63560
63998
|
}, [rows, barGeom]);
|
|
63561
|
-
const timelineX = (0,
|
|
63999
|
+
const timelineX = (0, import_react287.useCallback)((clientX) => {
|
|
63562
64000
|
const overlay = optsRef.current.overlayRef.current;
|
|
63563
64001
|
if (!overlay) return 0;
|
|
63564
64002
|
return clientX - overlay.getBoundingClientRect().left;
|
|
63565
64003
|
}, []);
|
|
63566
|
-
const rowY = (0,
|
|
64004
|
+
const rowY = (0, import_react287.useCallback)((clientY) => {
|
|
63567
64005
|
const overlay = optsRef.current.overlayRef.current;
|
|
63568
64006
|
if (!overlay) return 0;
|
|
63569
64007
|
return clientY - overlay.getBoundingClientRect().top;
|
|
63570
64008
|
}, []);
|
|
63571
|
-
(0,
|
|
64009
|
+
(0, import_react287.useEffect)(() => {
|
|
63572
64010
|
if (!drag) return;
|
|
63573
64011
|
const onMove = (e) => {
|
|
63574
64012
|
e.preventDefault();
|
|
@@ -63693,7 +64131,7 @@ function useGanttDrag(opts) {
|
|
|
63693
64131
|
window.removeEventListener("pointerup", onUp);
|
|
63694
64132
|
};
|
|
63695
64133
|
}, [drag != null, timelineX, rowY]);
|
|
63696
|
-
const beginDrag = (0,
|
|
64134
|
+
const beginDrag = (0, import_react287.useCallback)(
|
|
63697
64135
|
(partial, e, focusEl) => {
|
|
63698
64136
|
const o = optsRef.current;
|
|
63699
64137
|
if (!o.interactive) return;
|
|
@@ -63727,7 +64165,7 @@ function useGanttDrag(opts) {
|
|
|
63727
64165
|
},
|
|
63728
64166
|
[timelineX, rowY]
|
|
63729
64167
|
);
|
|
63730
|
-
const onBarPointerDown = (0,
|
|
64168
|
+
const onBarPointerDown = (0, import_react287.useCallback)(
|
|
63731
64169
|
(task, e) => {
|
|
63732
64170
|
if (e.button !== 0) return;
|
|
63733
64171
|
beginDrag(
|
|
@@ -63745,7 +64183,7 @@ function useGanttDrag(opts) {
|
|
|
63745
64183
|
},
|
|
63746
64184
|
[beginDrag, timelineX, rowY]
|
|
63747
64185
|
);
|
|
63748
|
-
const onResizePointerDown = (0,
|
|
64186
|
+
const onResizePointerDown = (0, import_react287.useCallback)(
|
|
63749
64187
|
(task, edge, e) => {
|
|
63750
64188
|
if (e.button !== 0) return;
|
|
63751
64189
|
e.stopPropagation();
|
|
@@ -63764,7 +64202,7 @@ function useGanttDrag(opts) {
|
|
|
63764
64202
|
},
|
|
63765
64203
|
[beginDrag, timelineX, rowY]
|
|
63766
64204
|
);
|
|
63767
|
-
const onGripPointerDown = (0,
|
|
64205
|
+
const onGripPointerDown = (0, import_react287.useCallback)(
|
|
63768
64206
|
(_rowKey, task, e) => {
|
|
63769
64207
|
if (e.button !== 0) return;
|
|
63770
64208
|
const rowEl = e.currentTarget.closest(
|
|
@@ -63789,7 +64227,7 @@ function useGanttDrag(opts) {
|
|
|
63789
64227
|
},
|
|
63790
64228
|
[beginDrag, timelineX, rowY]
|
|
63791
64229
|
);
|
|
63792
|
-
const onLinkHandlePointerDown = (0,
|
|
64230
|
+
const onLinkHandlePointerDown = (0, import_react287.useCallback)(
|
|
63793
64231
|
(task, side, e, fromOffset = 0) => {
|
|
63794
64232
|
if (e.button !== 0) return;
|
|
63795
64233
|
e.stopPropagation();
|
|
@@ -63809,7 +64247,7 @@ function useGanttDrag(opts) {
|
|
|
63809
64247
|
},
|
|
63810
64248
|
[beginDrag, timelineX, rowY]
|
|
63811
64249
|
);
|
|
63812
|
-
const onProgressPointerDown = (0,
|
|
64250
|
+
const onProgressPointerDown = (0, import_react287.useCallback)(
|
|
63813
64251
|
(task, e) => {
|
|
63814
64252
|
if (e.button !== 0) return;
|
|
63815
64253
|
e.stopPropagation();
|
|
@@ -63827,7 +64265,7 @@ function useGanttDrag(opts) {
|
|
|
63827
64265
|
},
|
|
63828
64266
|
[beginDrag, timelineX, rowY]
|
|
63829
64267
|
);
|
|
63830
|
-
const rubber = (0,
|
|
64268
|
+
const rubber = (0, import_react287.useMemo)(() => {
|
|
63831
64269
|
if (!drag || drag.kind !== "link") return null;
|
|
63832
64270
|
const source = barGeom(drag.taskId);
|
|
63833
64271
|
if (!source) return null;
|
|
@@ -63859,7 +64297,7 @@ function useGanttDrag(opts) {
|
|
|
63859
64297
|
}
|
|
63860
64298
|
|
|
63861
64299
|
// src/components/Gantt/Gantt.tsx
|
|
63862
|
-
var
|
|
64300
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
63863
64301
|
var HEADER_HEIGHT = 52;
|
|
63864
64302
|
var GRIP_WIDTH = 36;
|
|
63865
64303
|
var DEFAULT_COLUMNS = [
|
|
@@ -63918,7 +64356,7 @@ var Gantt = ({
|
|
|
63918
64356
|
const t = useKitT();
|
|
63919
64357
|
const kitEngine = useKitEngine();
|
|
63920
64358
|
const dateLocale = locale ?? kitEngine.locale;
|
|
63921
|
-
const allLabels = (0,
|
|
64359
|
+
const allLabels = (0, import_react288.useMemo)(
|
|
63922
64360
|
() => ({
|
|
63923
64361
|
loading: t("kit.gantt.loading"),
|
|
63924
64362
|
empty: t("kit.gantt.empty"),
|
|
@@ -63941,10 +64379,10 @@ var Gantt = ({
|
|
|
63941
64379
|
title: c.key === "name" ? allLabels.task : c.key === "owner" ? t("kit.gantt.colOwner") : t("kit.gantt.colProgress")
|
|
63942
64380
|
}));
|
|
63943
64381
|
const interactive = editable ?? Boolean(onTasksChange || onLinksChange || onReorder);
|
|
63944
|
-
const surfaceText = (0,
|
|
63945
|
-
const [internalZoom, setInternalZoom] = (0,
|
|
64382
|
+
const surfaceText = (0, import_react288.useMemo)(() => getSurfaceTextTokens(variant), [variant]);
|
|
64383
|
+
const [internalZoom, setInternalZoom] = (0, import_react288.useState)(initialZoom);
|
|
63946
64384
|
const zoom = zoomProp ?? internalZoom;
|
|
63947
|
-
const setZoom = (0,
|
|
64385
|
+
const setZoom = (0, import_react288.useCallback)(
|
|
63948
64386
|
(z) => {
|
|
63949
64387
|
const clamped = Math.min(maxZoom, Math.max(minZoom, z));
|
|
63950
64388
|
if (onZoomChange) onZoomChange(clamped);
|
|
@@ -63952,33 +64390,33 @@ var Gantt = ({
|
|
|
63952
64390
|
},
|
|
63953
64391
|
[minZoom, maxZoom, onZoomChange]
|
|
63954
64392
|
);
|
|
63955
|
-
const [internalSelection, setInternalSelection] = (0,
|
|
64393
|
+
const [internalSelection, setInternalSelection] = (0, import_react288.useState)(null);
|
|
63956
64394
|
const selectedId = selectedIdProp !== void 0 ? selectedIdProp : internalSelection;
|
|
63957
|
-
const setSelected = (0,
|
|
64395
|
+
const setSelected = (0, import_react288.useCallback)(
|
|
63958
64396
|
(id) => {
|
|
63959
64397
|
onSelect?.(id);
|
|
63960
64398
|
if (selectedIdProp === void 0) setInternalSelection(id);
|
|
63961
64399
|
},
|
|
63962
64400
|
[onSelect, selectedIdProp]
|
|
63963
64401
|
);
|
|
63964
|
-
const [internalOrder, setInternalOrder] = (0,
|
|
64402
|
+
const [internalOrder, setInternalOrder] = (0, import_react288.useState)(void 0);
|
|
63965
64403
|
const rowOrder = rowOrderProp ?? internalOrder;
|
|
63966
|
-
const handleReorder = (0,
|
|
64404
|
+
const handleReorder = (0, import_react288.useCallback)(
|
|
63967
64405
|
(order) => {
|
|
63968
64406
|
onReorder?.(order);
|
|
63969
64407
|
if (rowOrderProp === void 0) setInternalOrder(order);
|
|
63970
64408
|
},
|
|
63971
64409
|
[onReorder, rowOrderProp]
|
|
63972
64410
|
);
|
|
63973
|
-
const [collapsed, setCollapsed] = (0,
|
|
64411
|
+
const [collapsed, setCollapsed] = (0, import_react288.useState)(
|
|
63974
64412
|
() => new Set(tasks.filter((t2) => t2.open === false).map((t2) => t2.id))
|
|
63975
64413
|
);
|
|
63976
|
-
const [closedLanes, setClosedLanes] = (0,
|
|
64414
|
+
const [closedLanes, setClosedLanes] = (0, import_react288.useState)(
|
|
63977
64415
|
() => new Set((lanes ?? []).filter((l) => l.open === false).map((l) => l.id))
|
|
63978
64416
|
);
|
|
63979
|
-
const tasksRef = (0,
|
|
63980
|
-
const lanesRef = (0,
|
|
63981
|
-
(0,
|
|
64417
|
+
const tasksRef = (0, import_react288.useRef)(tasks);
|
|
64418
|
+
const lanesRef = (0, import_react288.useRef)(lanes);
|
|
64419
|
+
(0, import_react288.useEffect)(() => {
|
|
63982
64420
|
if (tasksRef.current !== tasks) {
|
|
63983
64421
|
tasksRef.current = tasks;
|
|
63984
64422
|
setCollapsed(new Set(tasks.filter((t2) => t2.open === false).map((t2) => t2.id)));
|
|
@@ -63988,7 +64426,7 @@ var Gantt = ({
|
|
|
63988
64426
|
setClosedLanes(new Set((lanes ?? []).filter((l) => l.open === false).map((l) => l.id)));
|
|
63989
64427
|
}
|
|
63990
64428
|
}, [tasks, lanes]);
|
|
63991
|
-
const toggleCollapse = (0,
|
|
64429
|
+
const toggleCollapse = (0, import_react288.useCallback)((taskId, isOpen) => {
|
|
63992
64430
|
setCollapsed((prev) => {
|
|
63993
64431
|
const next = new Set(prev);
|
|
63994
64432
|
if (isOpen) next.add(taskId);
|
|
@@ -63996,7 +64434,7 @@ var Gantt = ({
|
|
|
63996
64434
|
return next;
|
|
63997
64435
|
});
|
|
63998
64436
|
}, []);
|
|
63999
|
-
const toggleLane = (0,
|
|
64437
|
+
const toggleLane = (0, import_react288.useCallback)((laneId, isOpen) => {
|
|
64000
64438
|
setClosedLanes((prev) => {
|
|
64001
64439
|
const next = new Set(prev);
|
|
64002
64440
|
if (isOpen) next.add(laneId);
|
|
@@ -64004,37 +64442,37 @@ var Gantt = ({
|
|
|
64004
64442
|
return next;
|
|
64005
64443
|
});
|
|
64006
64444
|
}, []);
|
|
64007
|
-
const effectiveTasks = (0,
|
|
64445
|
+
const effectiveTasks = (0, import_react288.useMemo)(() => {
|
|
64008
64446
|
let out = tasks;
|
|
64009
64447
|
if (collapsed.size > 0) {
|
|
64010
64448
|
out = out.map((t2) => collapsed.has(t2.id) ? { ...t2, open: false } : t2);
|
|
64011
64449
|
}
|
|
64012
64450
|
return out;
|
|
64013
64451
|
}, [tasks, collapsed]);
|
|
64014
|
-
const effectiveLanes = (0,
|
|
64452
|
+
const effectiveLanes = (0, import_react288.useMemo)(() => {
|
|
64015
64453
|
if (closedLanes.size === 0) return lanes;
|
|
64016
64454
|
return (lanes ?? []).map(
|
|
64017
64455
|
(l) => closedLanes.has(l.id) ? { ...l, open: false } : l
|
|
64018
64456
|
);
|
|
64019
64457
|
}, [lanes, closedLanes]);
|
|
64020
|
-
const committedModel = (0,
|
|
64458
|
+
const committedModel = (0, import_react288.useMemo)(
|
|
64021
64459
|
() => buildRows(effectiveTasks, effectiveLanes, rowOrder, rowHeight2),
|
|
64022
64460
|
[effectiveTasks, effectiveLanes, rowOrder, rowHeight2]
|
|
64023
64461
|
);
|
|
64024
|
-
const range = (0,
|
|
64462
|
+
const range = (0, import_react288.useMemo)(() => {
|
|
64025
64463
|
const starts = tasks.map((t2) => toMs(t2.start));
|
|
64026
64464
|
const ends = tasks.map((t2) => toMs(t2.end));
|
|
64027
64465
|
return computeViewRange(starts, ends);
|
|
64028
64466
|
}, [tasks]);
|
|
64029
64467
|
const timelineWidth = rangeWidth(range.start, range.end, zoom);
|
|
64030
|
-
const scaleLevels = (0,
|
|
64468
|
+
const scaleLevels = (0, import_react288.useMemo)(
|
|
64031
64469
|
() => buildTimeScale(range.start, range.end, zoom, dateLocale),
|
|
64032
64470
|
[range, zoom, dateLocale]
|
|
64033
64471
|
);
|
|
64034
|
-
const [colWidths, setColWidths] = (0,
|
|
64472
|
+
const [colWidths, setColWidths] = (0, import_react288.useState)(
|
|
64035
64473
|
() => columnWidths ? { ...columnWidths } : {}
|
|
64036
64474
|
);
|
|
64037
|
-
(0,
|
|
64475
|
+
(0, import_react288.useEffect)(() => {
|
|
64038
64476
|
if (!columnWidths) return;
|
|
64039
64477
|
setColWidths((prev) => ({ ...prev, ...columnWidths }));
|
|
64040
64478
|
}, [columnWidths]);
|
|
@@ -64044,21 +64482,21 @@ var Gantt = ({
|
|
|
64044
64482
|
const m = /^(\d+(?:\.\d+)?)px$/.exec(col.width ?? "");
|
|
64045
64483
|
return m ? Number(m[1]) : 160;
|
|
64046
64484
|
};
|
|
64047
|
-
const sizedColumns = (0,
|
|
64485
|
+
const sizedColumns = (0, import_react288.useMemo)(
|
|
64048
64486
|
() => resolvedColumns.map((c) => ({ ...c, width: `${effectiveColWidth(c)}px` })),
|
|
64049
64487
|
[resolvedColumns, colWidths]
|
|
64050
64488
|
);
|
|
64051
|
-
const effectiveWidthsRef = (0,
|
|
64489
|
+
const effectiveWidthsRef = (0, import_react288.useRef)({});
|
|
64052
64490
|
effectiveWidthsRef.current = Object.fromEntries(
|
|
64053
64491
|
sizedColumns.map((c) => [c.key, effectiveColWidth(c)])
|
|
64054
64492
|
);
|
|
64055
|
-
const leftWidth = (0,
|
|
64493
|
+
const leftWidth = (0, import_react288.useMemo)(
|
|
64056
64494
|
() => GRIP_WIDTH + resolvedColumns.reduce((sum, c) => sum + effectiveColWidth(c), 0),
|
|
64057
64495
|
[resolvedColumns, colWidths]
|
|
64058
64496
|
);
|
|
64059
|
-
const resizingRef = (0,
|
|
64060
|
-
const [resizingKey, setResizingKey] = (0,
|
|
64061
|
-
const startColumnResize = (0,
|
|
64497
|
+
const resizingRef = (0, import_react288.useRef)(null);
|
|
64498
|
+
const [resizingKey, setResizingKey] = (0, import_react288.useState)(null);
|
|
64499
|
+
const startColumnResize = (0, import_react288.useCallback)(
|
|
64062
64500
|
(e, key) => {
|
|
64063
64501
|
if (e.button !== 0) return;
|
|
64064
64502
|
e.preventDefault();
|
|
@@ -64089,23 +64527,23 @@ var Gantt = ({
|
|
|
64089
64527
|
},
|
|
64090
64528
|
[onColumnWidthChange]
|
|
64091
64529
|
);
|
|
64092
|
-
(0,
|
|
64530
|
+
(0, import_react288.useEffect)(
|
|
64093
64531
|
() => () => {
|
|
64094
64532
|
document.body.style.cursor = "";
|
|
64095
64533
|
document.body.style.userSelect = "";
|
|
64096
64534
|
},
|
|
64097
64535
|
[]
|
|
64098
64536
|
);
|
|
64099
|
-
const scrollRef = (0,
|
|
64100
|
-
const overlayRef = (0,
|
|
64101
|
-
const rootRef = (0,
|
|
64102
|
-
const headerScaleRef = (0,
|
|
64103
|
-
const syncHeaderScale = (0,
|
|
64537
|
+
const scrollRef = (0, import_react288.useRef)(null);
|
|
64538
|
+
const overlayRef = (0, import_react288.useRef)(null);
|
|
64539
|
+
const rootRef = (0, import_react288.useRef)(null);
|
|
64540
|
+
const headerScaleRef = (0, import_react288.useRef)(null);
|
|
64541
|
+
const syncHeaderScale = (0, import_react288.useCallback)(() => {
|
|
64104
64542
|
const s = scrollRef.current;
|
|
64105
64543
|
const h = headerScaleRef.current;
|
|
64106
64544
|
if (s && h) h.style.transform = `translateX(${-s.scrollLeft}px)`;
|
|
64107
64545
|
}, []);
|
|
64108
|
-
const zoomBy = (0,
|
|
64546
|
+
const zoomBy = (0, import_react288.useCallback)(
|
|
64109
64547
|
(factor, pointerClientX) => {
|
|
64110
64548
|
const el = scrollRef.current;
|
|
64111
64549
|
const next = Math.min(maxZoom, Math.max(minZoom, zoom * factor));
|
|
@@ -64124,7 +64562,7 @@ var Gantt = ({
|
|
|
64124
64562
|
},
|
|
64125
64563
|
[zoom, minZoom, maxZoom, leftWidth, setZoom]
|
|
64126
64564
|
);
|
|
64127
|
-
(0,
|
|
64565
|
+
(0, import_react288.useEffect)(() => {
|
|
64128
64566
|
const el = scrollRef.current;
|
|
64129
64567
|
if (!el) return;
|
|
64130
64568
|
const onWheel = (e) => {
|
|
@@ -64136,10 +64574,10 @@ var Gantt = ({
|
|
|
64136
64574
|
el.addEventListener("wheel", onWheel, { passive: false });
|
|
64137
64575
|
return () => el.removeEventListener("wheel", onWheel);
|
|
64138
64576
|
}, [zoomBy]);
|
|
64139
|
-
(0,
|
|
64577
|
+
(0, import_react288.useEffect)(() => {
|
|
64140
64578
|
syncHeaderScale();
|
|
64141
64579
|
}, [syncHeaderScale, timelineWidth, zoom, range.start, leftWidth]);
|
|
64142
|
-
const liveRowsRef = (0,
|
|
64580
|
+
const liveRowsRef = (0, import_react288.useRef)(null);
|
|
64143
64581
|
const dragApi = useGanttDrag({
|
|
64144
64582
|
scrollRef,
|
|
64145
64583
|
overlayRef,
|
|
@@ -64161,12 +64599,12 @@ var Gantt = ({
|
|
|
64161
64599
|
rowOrder,
|
|
64162
64600
|
setSelected
|
|
64163
64601
|
});
|
|
64164
|
-
const liveReorder = (0,
|
|
64602
|
+
const liveReorder = (0, import_react288.useMemo)(() => {
|
|
64165
64603
|
const d = dragApi.drag;
|
|
64166
64604
|
if (d?.kind !== "reorder" || d.beforeId === void 0) return null;
|
|
64167
64605
|
return applyRowReorder(effectiveTasks, d.taskId, d.beforeId, rowOrder);
|
|
64168
64606
|
}, [dragApi.drag, effectiveTasks, rowOrder]);
|
|
64169
|
-
const liveModel = (0,
|
|
64607
|
+
const liveModel = (0, import_react288.useMemo)(
|
|
64170
64608
|
() => liveReorder ? buildRows(
|
|
64171
64609
|
liveReorder.tasks,
|
|
64172
64610
|
effectiveLanes,
|
|
@@ -64176,7 +64614,7 @@ var Gantt = ({
|
|
|
64176
64614
|
[liveReorder, effectiveLanes, rowHeight2, committedModel]
|
|
64177
64615
|
);
|
|
64178
64616
|
liveRowsRef.current = liveModel.rows;
|
|
64179
|
-
const bars = (0,
|
|
64617
|
+
const bars = (0, import_react288.useMemo)(() => {
|
|
64180
64618
|
const map = /* @__PURE__ */ new Map();
|
|
64181
64619
|
for (const row of liveModel.rows) {
|
|
64182
64620
|
if (!row.task) continue;
|
|
@@ -64198,7 +64636,7 @@ var Gantt = ({
|
|
|
64198
64636
|
return map;
|
|
64199
64637
|
}, [liveModel.rows, range, zoom]);
|
|
64200
64638
|
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,
|
|
64639
|
+
const onBarKeyDown = (0, import_react288.useCallback)(
|
|
64202
64640
|
(e, task) => {
|
|
64203
64641
|
if (!interactive || task.locked || !onTasksChange) return;
|
|
64204
64642
|
const stepMs = snap2 === "hour" ? 36e5 : snap2 === "week" ? 7 * MS_PER_DAY : MS_PER_DAY;
|
|
@@ -64243,7 +64681,7 @@ var Gantt = ({
|
|
|
64243
64681
|
},
|
|
64244
64682
|
[interactive, snap2, tasks, onTasksChange, setSelected]
|
|
64245
64683
|
);
|
|
64246
|
-
const deleteSelectedLink = (0,
|
|
64684
|
+
const deleteSelectedLink = (0, import_react288.useCallback)(() => {
|
|
64247
64685
|
const sel = dragApi.linkSelected;
|
|
64248
64686
|
if (!sel || !interactive || !onLinksChange) return;
|
|
64249
64687
|
const key = (l) => l.id ?? `${l.source}~${l.target}~${l.type ?? "fs"}`;
|
|
@@ -64251,7 +64689,7 @@ var Gantt = ({
|
|
|
64251
64689
|
onLinksChange(links.filter((l) => key(l) !== selKey));
|
|
64252
64690
|
dragApi.setLinkSelected(null);
|
|
64253
64691
|
}, [dragApi, links, interactive, onLinksChange]);
|
|
64254
|
-
const moveSelection = (0,
|
|
64692
|
+
const moveSelection = (0, import_react288.useCallback)(
|
|
64255
64693
|
(where) => {
|
|
64256
64694
|
const rows = liveModel.rows;
|
|
64257
64695
|
if (!rows.length) return;
|
|
@@ -64264,7 +64702,7 @@ var Gantt = ({
|
|
|
64264
64702
|
},
|
|
64265
64703
|
[liveModel.rows, selectedId, setSelected]
|
|
64266
64704
|
);
|
|
64267
|
-
const onRootKeyDown = (0,
|
|
64705
|
+
const onRootKeyDown = (0, import_react288.useCallback)(
|
|
64268
64706
|
(e) => {
|
|
64269
64707
|
if (dragApi.linkSelected) {
|
|
64270
64708
|
if (e.key === "Escape") {
|
|
@@ -64310,14 +64748,14 @@ var Gantt = ({
|
|
|
64310
64748
|
},
|
|
64311
64749
|
[dragApi, deleteSelectedLink, moveSelection, setZoom, zoom]
|
|
64312
64750
|
);
|
|
64313
|
-
const handleSelectLink = (0,
|
|
64751
|
+
const handleSelectLink = (0, import_react288.useCallback)(
|
|
64314
64752
|
(link) => {
|
|
64315
64753
|
dragApi.setLinkSelected(link);
|
|
64316
64754
|
if (link) rootRef.current?.focus();
|
|
64317
64755
|
},
|
|
64318
64756
|
[dragApi]
|
|
64319
64757
|
);
|
|
64320
|
-
const handleRootPointerDown = (0,
|
|
64758
|
+
const handleRootPointerDown = (0, import_react288.useCallback)(
|
|
64321
64759
|
(e) => {
|
|
64322
64760
|
if (e.target.closest?.("[data-gantt-keep-link-selection]")) return;
|
|
64323
64761
|
if (dragApi.linkSelected) dragApi.setLinkSelected(null);
|
|
@@ -64332,22 +64770,22 @@ var Gantt = ({
|
|
|
64332
64770
|
const drag = dragApi.drag;
|
|
64333
64771
|
const dragTask = drag?.taskId ? committedModel.tasksById.get(drag.taskId) : void 0;
|
|
64334
64772
|
const reorderLineY = drag?.kind === "reorder" && drag.beforeId !== void 0 ? reorderPreviewTop(liveModel.rows, `task:${drag.taskId}`, drag.beforeId) : null;
|
|
64335
|
-
const dragSubtree = (0,
|
|
64773
|
+
const dragSubtree = (0, import_react288.useMemo)(() => {
|
|
64336
64774
|
if (dragApi.drag?.kind !== "reorder") return null;
|
|
64337
64775
|
return reorderDragSubtree(
|
|
64338
64776
|
liveModel.rows,
|
|
64339
64777
|
`task:${dragApi.drag.taskId}`
|
|
64340
64778
|
);
|
|
64341
64779
|
}, [dragApi.drag, liveModel.rows]);
|
|
64342
|
-
const dragSubtreeKeys = (0,
|
|
64780
|
+
const dragSubtreeKeys = (0, import_react288.useMemo)(
|
|
64343
64781
|
() => new Set((dragSubtree ?? []).map((r) => r.key)),
|
|
64344
64782
|
[dragSubtree]
|
|
64345
64783
|
);
|
|
64346
|
-
const dragSubtreeHeight = (0,
|
|
64784
|
+
const dragSubtreeHeight = (0, import_react288.useMemo)(
|
|
64347
64785
|
() => (dragSubtree ?? []).reduce((sum, r) => sum + r.height, 0),
|
|
64348
64786
|
[dragSubtree]
|
|
64349
64787
|
);
|
|
64350
|
-
const liveDragDates = (0,
|
|
64788
|
+
const liveDragDates = (0, import_react288.useMemo)(() => {
|
|
64351
64789
|
if (!drag || !dragTask) return null;
|
|
64352
64790
|
if (drag.kind !== "move" && drag.kind !== "resize-start" && drag.kind !== "resize-end") return null;
|
|
64353
64791
|
return applyDragDates(
|
|
@@ -64358,7 +64796,7 @@ var Gantt = ({
|
|
|
64358
64796
|
);
|
|
64359
64797
|
}, [drag, dragTask, zoom, snap2]);
|
|
64360
64798
|
const liveDragProgress = drag?.kind === "progress" && drag.liveProgress != null ? drag.liveProgress : null;
|
|
64361
|
-
const dragOverride = (0,
|
|
64799
|
+
const dragOverride = (0, import_react288.useMemo)(() => {
|
|
64362
64800
|
if (!drag || !dragTask) return null;
|
|
64363
64801
|
if (drag.kind === "progress" && drag.liveProgress != null) {
|
|
64364
64802
|
return { ...dragTask, progress: drag.liveProgress };
|
|
@@ -64368,11 +64806,11 @@ var Gantt = ({
|
|
|
64368
64806
|
}
|
|
64369
64807
|
return null;
|
|
64370
64808
|
}, [drag, dragTask, liveDragDates]);
|
|
64371
|
-
const liveLaneProgress = (0,
|
|
64809
|
+
const liveLaneProgress = (0, import_react288.useMemo)(
|
|
64372
64810
|
() => dragOverride && dragTask ? laneRollupProgress(effectiveTasks, dragTask.id, dragOverride) : null,
|
|
64373
64811
|
[dragOverride, dragTask, effectiveTasks]
|
|
64374
64812
|
);
|
|
64375
|
-
const liveGroupProgress = (0,
|
|
64813
|
+
const liveGroupProgress = (0, import_react288.useMemo)(() => {
|
|
64376
64814
|
if (!dragOverride || !dragTask) return null;
|
|
64377
64815
|
const byId = new Map(effectiveTasks.map((t2) => [t2.id, t2]));
|
|
64378
64816
|
const m = /* @__PURE__ */ new Map();
|
|
@@ -64384,7 +64822,7 @@ var Gantt = ({
|
|
|
64384
64822
|
}
|
|
64385
64823
|
return m.size > 0 ? m : null;
|
|
64386
64824
|
}, [dragOverride, dragTask, effectiveTasks]);
|
|
64387
|
-
const liveLinkBars = (0,
|
|
64825
|
+
const liveLinkBars = (0, import_react288.useMemo)(() => {
|
|
64388
64826
|
if (!liveDragDates || !dragTask) return bars;
|
|
64389
64827
|
const g = bars.get(dragTask.id);
|
|
64390
64828
|
if (!g) return bars;
|
|
@@ -64393,12 +64831,12 @@ var Gantt = ({
|
|
|
64393
64831
|
if (left === g.left && width === g.width) return bars;
|
|
64394
64832
|
return new Map(bars).set(dragTask.id, { ...g, left, width });
|
|
64395
64833
|
}, [bars, liveDragDates, dragTask, range, zoom]);
|
|
64396
|
-
const linkPaths = (0,
|
|
64834
|
+
const linkPaths = (0, import_react288.useMemo)(
|
|
64397
64835
|
() => computeLinkPaths(links, liveLinkBars, color),
|
|
64398
64836
|
[links, liveLinkBars, color]
|
|
64399
64837
|
);
|
|
64400
|
-
const linkFan = (0,
|
|
64401
|
-
return /* @__PURE__ */ (0,
|
|
64838
|
+
const linkFan = (0, import_react288.useMemo)(() => computeLinkFanOffsets(links, bars), [links, bars]);
|
|
64839
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64402
64840
|
Panel_default,
|
|
64403
64841
|
{
|
|
64404
64842
|
ref: rootRef,
|
|
@@ -64416,31 +64854,31 @@ var Gantt = ({
|
|
|
64416
64854
|
"aria-label": t("kit.gantt.root"),
|
|
64417
64855
|
onKeyDown: onRootKeyDown,
|
|
64418
64856
|
onPointerDown: handleRootPointerDown,
|
|
64419
|
-
children: /* @__PURE__ */ (0,
|
|
64420
|
-
/* @__PURE__ */ (0,
|
|
64857
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "flex h-full min-h-0 flex-col", children: [
|
|
64858
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
64421
64859
|
"div",
|
|
64422
64860
|
{
|
|
64423
|
-
className: (0,
|
|
64861
|
+
className: (0, import_classnames123.default)(
|
|
64424
64862
|
"flex shrink-0 items-center gap-3 border-b px-4 py-3",
|
|
64425
64863
|
surfaceText.divider
|
|
64426
64864
|
),
|
|
64427
64865
|
children: [
|
|
64428
|
-
hasNode(icon) && /* @__PURE__ */ (0,
|
|
64866
|
+
hasNode(icon) && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64429
64867
|
"div",
|
|
64430
64868
|
{
|
|
64431
|
-
className: (0,
|
|
64869
|
+
className: (0, import_classnames123.default)(
|
|
64432
64870
|
"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl",
|
|
64433
64871
|
getSurfaceVariantClasses(variant, "neutral")
|
|
64434
64872
|
),
|
|
64435
64873
|
children: icon
|
|
64436
64874
|
}
|
|
64437
64875
|
),
|
|
64438
|
-
(title != null || subtitle != null) && /* @__PURE__ */ (0,
|
|
64439
|
-
subtitle != null && /* @__PURE__ */ (0,
|
|
64440
|
-
title != null && /* @__PURE__ */ (0,
|
|
64876
|
+
(title != null || subtitle != null) && /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
64877
|
+
subtitle != null && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "truncate text-[11px] font-semibold uppercase tracking-wider text-neutral-500 dark:text-neutral-400", children: subtitle }),
|
|
64878
|
+
title != null && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "truncate text-lg font-semibold text-neutral-900 dark:text-white", children: title })
|
|
64441
64879
|
] }),
|
|
64442
|
-
hasNode(actions) && /* @__PURE__ */ (0,
|
|
64443
|
-
/* @__PURE__ */ (0,
|
|
64880
|
+
hasNode(actions) && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "flex shrink-0 items-center gap-2", children: actions }),
|
|
64881
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "ml-auto shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64444
64882
|
GanttToolbar,
|
|
64445
64883
|
{
|
|
64446
64884
|
variant,
|
|
@@ -64453,31 +64891,31 @@ var Gantt = ({
|
|
|
64453
64891
|
]
|
|
64454
64892
|
}
|
|
64455
64893
|
),
|
|
64456
|
-
/* @__PURE__ */ (0,
|
|
64894
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
64457
64895
|
"div",
|
|
64458
64896
|
{
|
|
64459
|
-
className: (0,
|
|
64897
|
+
className: (0, import_classnames123.default)(
|
|
64460
64898
|
"relative flex shrink-0 items-stretch border-b",
|
|
64461
64899
|
surfaceText.divider
|
|
64462
64900
|
),
|
|
64463
64901
|
style: { height: HEADER_HEIGHT },
|
|
64464
64902
|
children: [
|
|
64465
|
-
/* @__PURE__ */ (0,
|
|
64903
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
64466
64904
|
"div",
|
|
64467
64905
|
{
|
|
64468
|
-
className: (0,
|
|
64906
|
+
className: (0, import_classnames123.default)(
|
|
64469
64907
|
"flex items-stretch border-r bg-white dark:bg-neutral-900",
|
|
64470
64908
|
surfaceText.divider
|
|
64471
64909
|
),
|
|
64472
64910
|
style: { width: leftWidth },
|
|
64473
64911
|
children: [
|
|
64474
|
-
/* @__PURE__ */ (0,
|
|
64912
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "w-9 shrink-0" }),
|
|
64475
64913
|
sizedColumns.map((col) => {
|
|
64476
64914
|
const resizable = resizableColumns && col.resizable !== false;
|
|
64477
|
-
return /* @__PURE__ */ (0,
|
|
64915
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
64478
64916
|
"div",
|
|
64479
64917
|
{
|
|
64480
|
-
className: (0,
|
|
64918
|
+
className: (0, import_classnames123.default)(
|
|
64481
64919
|
"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
64920
|
surfaceText.divider
|
|
64483
64921
|
),
|
|
@@ -64486,7 +64924,7 @@ var Gantt = ({
|
|
|
64486
64924
|
justifyContent: col.align === "center" ? "center" : col.align === "right" ? "flex-end" : "flex-start"
|
|
64487
64925
|
},
|
|
64488
64926
|
children: [
|
|
64489
|
-
/* @__PURE__ */ (0,
|
|
64927
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("span", { className: "truncate", children: col.title }),
|
|
64490
64928
|
resizable && /* Resize handle — Table's header-edge pattern: an 8px hit
|
|
64491
64929
|
area whose 1px line sits exactly on the column border.
|
|
64492
64930
|
Absolute insets stop at the padding edge (1px inside
|
|
@@ -64495,7 +64933,7 @@ var Gantt = ({
|
|
|
64495
64933
|
the border's own pixel. The cell carries no
|
|
64496
64934
|
overflow-hidden so the line can paint over the border
|
|
64497
64935
|
(the title span truncates itself). */
|
|
64498
|
-
/* @__PURE__ */ (0,
|
|
64936
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64499
64937
|
"div",
|
|
64500
64938
|
{
|
|
64501
64939
|
role: "separator",
|
|
@@ -64504,7 +64942,7 @@ var Gantt = ({
|
|
|
64504
64942
|
className: "group/rh absolute inset-y-0 -right-px z-10 flex w-2 cursor-col-resize select-none items-stretch justify-end",
|
|
64505
64943
|
onPointerDown: (e) => startColumnResize(e, col.key),
|
|
64506
64944
|
title: t("kit.gantt.resizeColumn", { column: col.title }),
|
|
64507
|
-
children: /* @__PURE__ */ (0,
|
|
64945
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64508
64946
|
"div",
|
|
64509
64947
|
{
|
|
64510
64948
|
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 +64959,30 @@ var Gantt = ({
|
|
|
64521
64959
|
]
|
|
64522
64960
|
}
|
|
64523
64961
|
),
|
|
64524
|
-
/* @__PURE__ */ (0,
|
|
64962
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "relative min-w-0 flex-1 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
64525
64963
|
"div",
|
|
64526
64964
|
{
|
|
64527
64965
|
ref: headerScaleRef,
|
|
64528
64966
|
className: "relative h-full",
|
|
64529
64967
|
style: { width: timelineWidth },
|
|
64530
64968
|
children: [
|
|
64531
|
-
/* @__PURE__ */ (0,
|
|
64532
|
-
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0,
|
|
64969
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(GanttScale, { levels: scaleLevels, height: HEADER_HEIGHT }),
|
|
64970
|
+
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64533
64971
|
"div",
|
|
64534
64972
|
{
|
|
64535
|
-
className: (0,
|
|
64973
|
+
className: (0, import_classnames123.default)(
|
|
64536
64974
|
"pointer-events-none absolute inset-y-0 z-[1] border-l-2",
|
|
64537
64975
|
todayTokens.line
|
|
64538
64976
|
),
|
|
64539
64977
|
style: { left: todayX }
|
|
64540
64978
|
}
|
|
64541
64979
|
),
|
|
64542
|
-
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0,
|
|
64980
|
+
todayVisible && !loading && !isEmpty2 && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64543
64981
|
"div",
|
|
64544
64982
|
{
|
|
64545
64983
|
className: "pointer-events-none absolute top-1 z-10 -translate-x-1/2",
|
|
64546
64984
|
style: { left: todayX },
|
|
64547
|
-
children: /* @__PURE__ */ (0,
|
|
64985
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("span", { className: (0, import_classnames123.default)("rounded-full px-2 py-0.5 text-[10px] font-semibold text-white shadow-sm", todayTokens.chip), children: allLabels.today })
|
|
64548
64986
|
}
|
|
64549
64987
|
)
|
|
64550
64988
|
]
|
|
@@ -64553,20 +64991,20 @@ var Gantt = ({
|
|
|
64553
64991
|
]
|
|
64554
64992
|
}
|
|
64555
64993
|
),
|
|
64556
|
-
/* @__PURE__ */ (0,
|
|
64994
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64557
64995
|
"div",
|
|
64558
64996
|
{
|
|
64559
64997
|
ref: scrollRef,
|
|
64560
64998
|
className: `gantt-scroller min-h-0 flex-1 overflow-auto overscroll-contain [&::-webkit-scrollbar]:h-1.5 ${THIN_SCROLLBAR}`,
|
|
64561
64999
|
onScroll: syncHeaderScale,
|
|
64562
|
-
children: /* @__PURE__ */ (0,
|
|
64563
|
-
/* @__PURE__ */ (0,
|
|
65000
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { style: { width: leftWidth + timelineWidth + LINK_RIGHT_GUTTER, minWidth: "100%" }, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(GanttSkeleton, { rows: 12, rowHeight: rowHeight2, leftWidth }) : isEmpty2 ? /* @__PURE__ */ (0, import_jsx_runtime314.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_runtime314.jsxs)("div", { className: "relative", style: { height: bodyHeight }, children: [
|
|
65001
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
64564
65002
|
"div",
|
|
64565
65003
|
{
|
|
64566
65004
|
className: "pointer-events-none absolute inset-y-0 z-0",
|
|
64567
65005
|
style: { left: leftWidth, width: timelineWidth },
|
|
64568
65006
|
children: [
|
|
64569
|
-
scaleLevels.length > 0 && scaleLevels[scaleLevels.length - 1].columns.map((c) => /* @__PURE__ */ (0,
|
|
65007
|
+
scaleLevels.length > 0 && scaleLevels[scaleLevels.length - 1].columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64570
65008
|
"div",
|
|
64571
65009
|
{
|
|
64572
65010
|
className: "absolute inset-y-0 border-r border-neutral-100 dark:border-neutral-800",
|
|
@@ -64574,10 +65012,10 @@ var Gantt = ({
|
|
|
64574
65012
|
},
|
|
64575
65013
|
c.id
|
|
64576
65014
|
)),
|
|
64577
|
-
todayVisible && /* @__PURE__ */ (0,
|
|
65015
|
+
todayVisible && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64578
65016
|
"div",
|
|
64579
65017
|
{
|
|
64580
|
-
className: (0,
|
|
65018
|
+
className: (0, import_classnames123.default)("absolute inset-y-0 border-l-2", todayTokens.line),
|
|
64581
65019
|
style: { left: todayX }
|
|
64582
65020
|
}
|
|
64583
65021
|
)
|
|
@@ -64587,7 +65025,7 @@ var Gantt = ({
|
|
|
64587
65025
|
liveModel.rows.map((row) => {
|
|
64588
65026
|
const isDragSource = drag?.kind === "reorder" && row.task != null && row.task.id === drag.taskId;
|
|
64589
65027
|
if (isDragSource) {
|
|
64590
|
-
return /* @__PURE__ */ (0,
|
|
65028
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64591
65029
|
"div",
|
|
64592
65030
|
{
|
|
64593
65031
|
"data-row-key": row.key,
|
|
@@ -64595,7 +65033,7 @@ var Gantt = ({
|
|
|
64595
65033
|
"aria-hidden": "true",
|
|
64596
65034
|
className: "pointer-events-none flex border-b",
|
|
64597
65035
|
style: { height: dragSubtreeHeight || row.height },
|
|
64598
|
-
children: /* @__PURE__ */ (0,
|
|
65036
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64599
65037
|
"div",
|
|
64600
65038
|
{
|
|
64601
65039
|
className: "m-1 flex-1 rounded-md border-2 border-dashed",
|
|
@@ -64612,7 +65050,7 @@ var Gantt = ({
|
|
|
64612
65050
|
if (drag?.kind === "reorder" && dragSubtreeKeys.has(row.key)) {
|
|
64613
65051
|
return null;
|
|
64614
65052
|
}
|
|
64615
|
-
return /* @__PURE__ */ (0,
|
|
65053
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64616
65054
|
GanttBodyRow,
|
|
64617
65055
|
{
|
|
64618
65056
|
row,
|
|
@@ -64650,7 +65088,7 @@ var Gantt = ({
|
|
|
64650
65088
|
row.key
|
|
64651
65089
|
);
|
|
64652
65090
|
}),
|
|
64653
|
-
/* @__PURE__ */ (0,
|
|
65091
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64654
65092
|
GanttLinkLayer,
|
|
64655
65093
|
{
|
|
64656
65094
|
ref: overlayRef,
|
|
@@ -64666,7 +65104,7 @@ var Gantt = ({
|
|
|
64666
65104
|
onDeleteLink: interactive && onLinksChange ? deleteSelectedLink : void 0
|
|
64667
65105
|
}
|
|
64668
65106
|
),
|
|
64669
|
-
drag?.kind === "reorder" && reorderLineY != null && /* @__PURE__ */ (0,
|
|
65107
|
+
drag?.kind === "reorder" && reorderLineY != null && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64670
65108
|
"div",
|
|
64671
65109
|
{
|
|
64672
65110
|
className: "pointer-events-none absolute z-30 h-0.5 rounded-full",
|
|
@@ -64686,7 +65124,7 @@ var Gantt = ({
|
|
|
64686
65124
|
// there is no filtered/overflowing ancestor and the fixed
|
|
64687
65125
|
// clone always tracks the viewport pointer.
|
|
64688
65126
|
(0, import_react_dom15.createPortal)(
|
|
64689
|
-
/* @__PURE__ */ (0,
|
|
65127
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64690
65128
|
"div",
|
|
64691
65129
|
{
|
|
64692
65130
|
"data-gantt-drag-clone": "true",
|
|
@@ -64697,14 +65135,14 @@ var Gantt = ({
|
|
|
64697
65135
|
top: drag.clientY - (drag.grabOffset?.y ?? 0),
|
|
64698
65136
|
width: leftWidth + timelineWidth + LINK_RIGHT_GUTTER
|
|
64699
65137
|
},
|
|
64700
|
-
children: /* @__PURE__ */ (0,
|
|
65138
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64701
65139
|
"div",
|
|
64702
65140
|
{
|
|
64703
65141
|
className: "overflow-hidden rounded-lg bg-white/95 shadow-2xl backdrop-blur-sm dark:bg-neutral-900/95",
|
|
64704
65142
|
style: {
|
|
64705
65143
|
boxShadow: `0 8px 32px rgba(0, 0, 0, 0.28), inset 2px 0 0 var(--color-${color}-500)`
|
|
64706
65144
|
},
|
|
64707
|
-
children: dragSubtree.map((row) => /* @__PURE__ */ (0,
|
|
65145
|
+
children: dragSubtree.map((row) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64708
65146
|
GanttBodyRow,
|
|
64709
65147
|
{
|
|
64710
65148
|
row,
|
|
@@ -64747,7 +65185,7 @@ var Gantt = ({
|
|
|
64747
65185
|
),
|
|
64748
65186
|
document.body
|
|
64749
65187
|
),
|
|
64750
|
-
drag && drag.kind !== "reorder" && dragTask && liveDragDates && /* @__PURE__ */ (0,
|
|
65188
|
+
drag && drag.kind !== "reorder" && dragTask && liveDragDates && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64751
65189
|
"div",
|
|
64752
65190
|
{
|
|
64753
65191
|
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 +65216,13 @@ var GanttSkeleton = ({
|
|
|
64778
65216
|
rows,
|
|
64779
65217
|
rowHeight: rowHeight2,
|
|
64780
65218
|
leftWidth
|
|
64781
|
-
}) => /* @__PURE__ */ (0,
|
|
64782
|
-
/* @__PURE__ */ (0,
|
|
65219
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "animate-pulse", "aria-busy": "true", children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "flex", style: { height: rowHeight2 }, children: [
|
|
65220
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64783
65221
|
"div",
|
|
64784
65222
|
{
|
|
64785
65223
|
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
65224
|
style: { width: leftWidth },
|
|
64787
|
-
children: /* @__PURE__ */ (0,
|
|
65225
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64788
65226
|
"div",
|
|
64789
65227
|
{
|
|
64790
65228
|
className: "h-3 rounded-full bg-neutral-200 dark:bg-neutral-700",
|
|
@@ -64793,7 +65231,7 @@ var GanttSkeleton = ({
|
|
|
64793
65231
|
)
|
|
64794
65232
|
}
|
|
64795
65233
|
),
|
|
64796
|
-
/* @__PURE__ */ (0,
|
|
65234
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "relative flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
64797
65235
|
"div",
|
|
64798
65236
|
{
|
|
64799
65237
|
className: "absolute top-1/2 h-4 -translate-y-1/2 rounded-md bg-neutral-200/80 dark:bg-neutral-700/60",
|
|
@@ -64806,11 +65244,11 @@ var GanttSkeleton = ({
|
|
|
64806
65244
|
] }, i)) });
|
|
64807
65245
|
|
|
64808
65246
|
// src/contexts/BottomSheetContext.tsx
|
|
64809
|
-
var
|
|
65247
|
+
var import_react289 = require("react");
|
|
64810
65248
|
var import_react_dom16 = require("react-dom");
|
|
64811
|
-
var
|
|
64812
|
-
var
|
|
64813
|
-
var BottomSheetContext = (0,
|
|
65249
|
+
var import_classnames124 = __toESM(require("classnames"), 1);
|
|
65250
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
65251
|
+
var BottomSheetContext = (0, import_react289.createContext)(null);
|
|
64814
65252
|
var TRANSITION_MS2 = 260;
|
|
64815
65253
|
var renderSlot = (slot, controls) => {
|
|
64816
65254
|
if (!slot) {
|
|
@@ -64821,13 +65259,13 @@ var renderSlot = (slot, controls) => {
|
|
|
64821
65259
|
var BottomSheetProvider = ({
|
|
64822
65260
|
children
|
|
64823
65261
|
}) => {
|
|
64824
|
-
const [sheet, setSheet] = (0,
|
|
64825
|
-
const [isVisible, setIsVisible] = (0,
|
|
64826
|
-
const pendingCloseRef = (0,
|
|
64827
|
-
const dismissSheet = (0,
|
|
65262
|
+
const [sheet, setSheet] = (0, import_react289.useState)(null);
|
|
65263
|
+
const [isVisible, setIsVisible] = (0, import_react289.useState)(false);
|
|
65264
|
+
const pendingCloseRef = (0, import_react289.useRef)(null);
|
|
65265
|
+
const dismissSheet = (0, import_react289.useCallback)(() => {
|
|
64828
65266
|
setIsVisible(false);
|
|
64829
65267
|
}, []);
|
|
64830
|
-
const presentSheet = (0,
|
|
65268
|
+
const presentSheet = (0, import_react289.useCallback)((options) => {
|
|
64831
65269
|
if (pendingCloseRef.current) {
|
|
64832
65270
|
clearTimeout(pendingCloseRef.current);
|
|
64833
65271
|
pendingCloseRef.current = null;
|
|
@@ -64840,7 +65278,7 @@ var BottomSheetProvider = ({
|
|
|
64840
65278
|
setTimeout(animateIn, 0);
|
|
64841
65279
|
}
|
|
64842
65280
|
}, []);
|
|
64843
|
-
(0,
|
|
65281
|
+
(0, import_react289.useEffect)(() => {
|
|
64844
65282
|
if (!isVisible && sheet) {
|
|
64845
65283
|
pendingCloseRef.current = setTimeout(() => {
|
|
64846
65284
|
sheet.onClose?.();
|
|
@@ -64855,7 +65293,7 @@ var BottomSheetProvider = ({
|
|
|
64855
65293
|
}
|
|
64856
65294
|
return void 0;
|
|
64857
65295
|
}, [isVisible, sheet]);
|
|
64858
|
-
(0,
|
|
65296
|
+
(0, import_react289.useEffect)(
|
|
64859
65297
|
() => () => {
|
|
64860
65298
|
if (pendingCloseRef.current) {
|
|
64861
65299
|
clearTimeout(pendingCloseRef.current);
|
|
@@ -64863,13 +65301,13 @@ var BottomSheetProvider = ({
|
|
|
64863
65301
|
},
|
|
64864
65302
|
[]
|
|
64865
65303
|
);
|
|
64866
|
-
const controls = (0,
|
|
65304
|
+
const controls = (0, import_react289.useMemo)(
|
|
64867
65305
|
() => ({
|
|
64868
65306
|
dismiss: dismissSheet
|
|
64869
65307
|
}),
|
|
64870
65308
|
[dismissSheet]
|
|
64871
65309
|
);
|
|
64872
|
-
const contextValue = (0,
|
|
65310
|
+
const contextValue = (0, import_react289.useMemo)(
|
|
64873
65311
|
() => ({
|
|
64874
65312
|
presentSheet,
|
|
64875
65313
|
dismissSheet,
|
|
@@ -64879,11 +65317,11 @@ var BottomSheetProvider = ({
|
|
|
64879
65317
|
[presentSheet, dismissSheet, sheet, isVisible]
|
|
64880
65318
|
);
|
|
64881
65319
|
const overlayNode = typeof document !== "undefined" && sheet ? (0, import_react_dom16.createPortal)(
|
|
64882
|
-
/* @__PURE__ */ (0,
|
|
64883
|
-
/* @__PURE__ */ (0,
|
|
65320
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "pointer-events-none fixed inset-0 z-[70] flex items-end justify-center", children: [
|
|
65321
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
64884
65322
|
"div",
|
|
64885
65323
|
{
|
|
64886
|
-
className: (0,
|
|
65324
|
+
className: (0, import_classnames124.default)(
|
|
64887
65325
|
"absolute inset-0 bg-neutral-900/40 transition-opacity duration-300",
|
|
64888
65326
|
isVisible ? "opacity-100 pointer-events-auto" : "opacity-0"
|
|
64889
65327
|
),
|
|
@@ -64893,24 +65331,24 @@ var BottomSheetProvider = ({
|
|
|
64893
65331
|
}
|
|
64894
65332
|
}
|
|
64895
65333
|
),
|
|
64896
|
-
/* @__PURE__ */ (0,
|
|
65334
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "relative w-full max-w-4xl px-4 pb-4 sm:px-8", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)(
|
|
64897
65335
|
"section",
|
|
64898
65336
|
{
|
|
64899
65337
|
role: "dialog",
|
|
64900
65338
|
"aria-modal": "true",
|
|
64901
|
-
className: (0,
|
|
65339
|
+
className: (0, import_classnames124.default)(
|
|
64902
65340
|
"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
65341
|
sheet.className,
|
|
64904
65342
|
isVisible ? "translate-y-0" : "translate-y-full"
|
|
64905
65343
|
),
|
|
64906
65344
|
style: { minHeight: "25vh", maxHeight: "85vh" },
|
|
64907
65345
|
children: [
|
|
64908
|
-
/* @__PURE__ */ (0,
|
|
64909
|
-
/* @__PURE__ */ (0,
|
|
64910
|
-
sheet.title && /* @__PURE__ */ (0,
|
|
64911
|
-
sheet.description && /* @__PURE__ */ (0,
|
|
65346
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("header", { className: "flex items-start justify-between gap-3 border-b border-slate-200 px-6 py-4 dark:border-slate-800", children: [
|
|
65347
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "space-y-1", children: [
|
|
65348
|
+
sheet.title && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "text-base font-semibold text-slate-900 dark:text-slate-100", children: sheet.title }),
|
|
65349
|
+
sheet.description && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("p", { className: "text-sm text-slate-500 dark:text-slate-300", children: sheet.description })
|
|
64912
65350
|
] }),
|
|
64913
|
-
(sheet.showCloseButton ?? true) && /* @__PURE__ */ (0,
|
|
65351
|
+
(sheet.showCloseButton ?? true) && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
64914
65352
|
IconButton_default,
|
|
64915
65353
|
{
|
|
64916
65354
|
icon: "Close",
|
|
@@ -64922,21 +65360,21 @@ var BottomSheetProvider = ({
|
|
|
64922
65360
|
}
|
|
64923
65361
|
)
|
|
64924
65362
|
] }),
|
|
64925
|
-
/* @__PURE__ */ (0,
|
|
64926
|
-
sheet.actions && /* @__PURE__ */ (0,
|
|
65363
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "flex-1 overflow-y-auto px-6 py-4", children: renderSlot(sheet.content, controls) ?? /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("p", { className: "text-sm text-slate-500", children: "No content provided." }) }),
|
|
65364
|
+
sheet.actions && /* @__PURE__ */ (0, import_jsx_runtime315.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
65365
|
]
|
|
64928
65366
|
}
|
|
64929
65367
|
) })
|
|
64930
65368
|
] }),
|
|
64931
65369
|
document.body
|
|
64932
65370
|
) : null;
|
|
64933
|
-
return /* @__PURE__ */ (0,
|
|
65371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)(BottomSheetContext.Provider, { value: contextValue, children: [
|
|
64934
65372
|
children,
|
|
64935
65373
|
overlayNode
|
|
64936
65374
|
] });
|
|
64937
65375
|
};
|
|
64938
65376
|
var useBottomSheet = () => {
|
|
64939
|
-
const context = (0,
|
|
65377
|
+
const context = (0, import_react289.useContext)(BottomSheetContext);
|
|
64940
65378
|
if (!context) {
|
|
64941
65379
|
throw new Error("useBottomSheet must be used within a BottomSheetProvider");
|
|
64942
65380
|
}
|
|
@@ -65570,8 +66008,8 @@ var SYSTEM_VARIABLES = [
|
|
|
65570
66008
|
];
|
|
65571
66009
|
|
|
65572
66010
|
// src/components/MetricBar.tsx
|
|
65573
|
-
var
|
|
65574
|
-
var
|
|
66011
|
+
var import_classnames125 = __toESM(require("classnames"), 1);
|
|
66012
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
65575
66013
|
var MetricBar = ({
|
|
65576
66014
|
label,
|
|
65577
66015
|
value,
|
|
@@ -65581,7 +66019,7 @@ var MetricBar = ({
|
|
|
65581
66019
|
size = "sm",
|
|
65582
66020
|
className,
|
|
65583
66021
|
...rest
|
|
65584
|
-
}) => /* @__PURE__ */ (0,
|
|
66022
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
65585
66023
|
Progress_default,
|
|
65586
66024
|
{
|
|
65587
66025
|
...rest,
|
|
@@ -65591,7 +66029,7 @@ var MetricBar = ({
|
|
|
65591
66029
|
formatValue: value !== void 0 ? () => String(value) : void 0,
|
|
65592
66030
|
size,
|
|
65593
66031
|
color: tone ?? color ?? "blue",
|
|
65594
|
-
className: (0,
|
|
66032
|
+
className: (0, import_classnames125.default)("w-full", className)
|
|
65595
66033
|
}
|
|
65596
66034
|
);
|
|
65597
66035
|
MetricBar.displayName = "MetricBar";
|
|
@@ -65671,6 +66109,7 @@ MetricBar.displayName = "MetricBar";
|
|
|
65671
66109
|
DEFAULT_LAYOUT_OPTIONS,
|
|
65672
66110
|
DEFAULT_SERIES_PALETTE,
|
|
65673
66111
|
DEFAULT_SURFACE_CORNER,
|
|
66112
|
+
DEFAULT_SURFACE_GUTTER,
|
|
65674
66113
|
DEFAULT_SURFACE_PADDING,
|
|
65675
66114
|
DEFAULT_SURFACE_TONE,
|
|
65676
66115
|
DEFAULT_TOAST_GAP_PX,
|
|
@@ -65821,6 +66260,7 @@ MetricBar.displayName = "MetricBar";
|
|
|
65821
66260
|
STAT_PAGER_PLACEMENTS,
|
|
65822
66261
|
SURFACE_CORNERS,
|
|
65823
66262
|
SURFACE_GLASS_RIM,
|
|
66263
|
+
SURFACE_GUTTER_AXES,
|
|
65824
66264
|
SURFACE_PADDINGS,
|
|
65825
66265
|
SURFACE_TO_BUTTON_VARIANT,
|
|
65826
66266
|
SURFACE_VARIANTS,
|
|
@@ -65913,6 +66353,10 @@ MetricBar.displayName = "MetricBar";
|
|
|
65913
66353
|
WorkflowRailSkeleton,
|
|
65914
66354
|
WorkflowStatusNode,
|
|
65915
66355
|
WorkflowTracker,
|
|
66356
|
+
WorkflowTrackerDetails,
|
|
66357
|
+
WorkflowTrackerRail,
|
|
66358
|
+
WorkflowTrackerRollups,
|
|
66359
|
+
WorkflowTrackerStepDetails,
|
|
65916
66360
|
areaPathFromPoints,
|
|
65917
66361
|
bandAreaPath,
|
|
65918
66362
|
buildColumns,
|
|
@@ -66050,6 +66494,7 @@ MetricBar.displayName = "MetricBar";
|
|
|
66050
66494
|
getStepperTonePalette,
|
|
66051
66495
|
getSurfaceCornerClass,
|
|
66052
66496
|
getSurfaceCornerRem,
|
|
66497
|
+
getSurfaceGutterClass,
|
|
66053
66498
|
getSurfacePaddingClass,
|
|
66054
66499
|
getSurfacePaddingClasses,
|
|
66055
66500
|
getSurfaceTextTokens,
|