@elevasis/ui 2.17.0 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/charts/index.js +2 -2
  2. package/dist/{chunk-ABUDMATM.js → chunk-66VY5EMV.js} +4 -4
  3. package/dist/{chunk-2TDZBYXI.js → chunk-A2AZY5SF.js} +1 -1
  4. package/dist/{chunk-FNWWVX5N.js → chunk-B6FIIEFO.js} +245 -86
  5. package/dist/{chunk-MJ6YV2B5.js → chunk-DDZMBNTY.js} +1 -1
  6. package/dist/{chunk-R7GKX4HW.js → chunk-EY322HXF.js} +175 -78
  7. package/dist/{chunk-JU6UB4YA.js → chunk-FM6LSZ45.js} +3 -3
  8. package/dist/{chunk-OCCZRPER.js → chunk-I3LQGLUC.js} +1 -1
  9. package/dist/{chunk-MDO4UCEJ.js → chunk-LT33DSMO.js} +45 -80
  10. package/dist/{chunk-TP5NMF6K.js → chunk-P6TC4K7I.js} +3 -3
  11. package/dist/{chunk-TTP62HWW.js → chunk-SQPM2QDH.js} +7 -13
  12. package/dist/{chunk-S6CYH4RI.js → chunk-SS2UVUSG.js} +27 -5
  13. package/dist/{chunk-MUZIYL5Q.js → chunk-UA36WILN.js} +83 -310
  14. package/dist/{chunk-OXWQQCDR.js → chunk-WP3IYOVJ.js} +226 -211
  15. package/dist/components/index.d.ts +9 -4
  16. package/dist/components/index.js +32 -18
  17. package/dist/features/crm/index.js +5 -5
  18. package/dist/features/dashboard/index.js +6 -6
  19. package/dist/features/delivery/index.js +5 -5
  20. package/dist/features/lead-gen/index.d.ts +152 -16
  21. package/dist/features/lead-gen/index.js +9 -9
  22. package/dist/features/monitoring/index.js +7 -7
  23. package/dist/features/monitoring/requests/index.js +4 -4
  24. package/dist/features/operations/index.d.ts +1 -0
  25. package/dist/features/operations/index.js +8 -8
  26. package/dist/features/settings/index.js +5 -5
  27. package/dist/hooks/index.d.ts +359 -46
  28. package/dist/hooks/index.js +4 -4
  29. package/dist/hooks/published.d.ts +359 -46
  30. package/dist/hooks/published.js +4 -4
  31. package/dist/index.d.ts +359 -46
  32. package/dist/index.js +4 -4
  33. package/dist/provider/index.js +3 -3
  34. package/dist/provider/published.js +2 -2
  35. package/dist/types/index.d.ts +12 -6
  36. package/dist/zustand/index.js +2 -2
  37. package/package.json +3 -3
@@ -1,6 +1,6 @@
1
- export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors } from '../chunk-MJ6YV2B5.js';
1
+ export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, HeroStatsRow, getSeriesColor, useCyberColors } from '../chunk-DDZMBNTY.js';
2
2
  import '../chunk-QSTH6T77.js';
3
- import '../chunk-TTP62HWW.js';
3
+ import '../chunk-SQPM2QDH.js';
4
4
  import '../chunk-SZHARWKU.js';
5
5
  import '../chunk-3KMDHCAR.js';
6
6
  import '../chunk-NYBEU5TE.js';
@@ -1,11 +1,11 @@
1
1
  import { ResourceHealthChart } from './chunk-LGKLC5MG.js';
2
- import { useCyberColors, HeroStatsRow } from './chunk-MJ6YV2B5.js';
2
+ import { useCyberColors, HeroStatsRow } from './chunk-DDZMBNTY.js';
3
3
  import { AppShellCenteredContainer, AppShellLoader } from './chunk-M25JL54Z.js';
4
4
  import { STATUS_COLORS, getStatusIcon, formatDuration, getStatusColors, AGENT_CONSTANTS, shouldAnimateEdge, TIMELINE_CONSTANTS, calculateBarPosition, CONTAINER_CONSTANTS, useExecutionPath, useUnifiedWorkflowLayout, WORKFLOW_CONSTANTS, useReactFlowAgent } from './chunk-E4WQGJNS.js';
5
- import { useExecuteResource, useDashboardMetrics, useResources, useTimeRangeDates, useUnresolvedErrors, useRecentExecutionsByResource, useCommandQueue, useScheduledTasks, useResourcesHealth } from './chunk-R7GKX4HW.js';
5
+ import { useExecuteResource, useDashboardMetrics, useResources, useTimeRangeDates, useUnresolvedErrors, useRecentExecutionsByResource, useCommandQueue, useScheduledTasks, useResourcesHealth } from './chunk-EY322HXF.js';
6
6
  import { Graph_module_css_default, useDirectedChainHighlighting, useNodeSelection, useFitViewTrigger } from './chunk-22UVE3RA.js';
7
7
  import { glassBase } from './chunk-R73EHHPN.js';
8
- import { GlowDot, CardHeader, EmptyState, PageTitleCaption, TabCountBadge } from './chunk-TTP62HWW.js';
8
+ import { GlowDot, CardHeader, EmptyState, PageTitleCaption, TabCountBadge } from './chunk-SQPM2QDH.js';
9
9
  import { formatTimeAgo, getTimeRangeDates, formatRelativeTime } from './chunk-GCBWGGI6.js';
10
10
  import { ResourceStatusColors } from './chunk-KRWALB24.js';
11
11
  import { useInitialization } from './chunk-DK2HVHCY.js';
@@ -1682,7 +1682,7 @@ function OperationalOverview({
1682
1682
  const errors = errorData?.errors ?? [];
1683
1683
  const errorCount = errorData?.total ?? 0;
1684
1684
  const { data: allCommands } = useCommandQueue({ status: "pending", limit: 100 });
1685
- const commands = allCommands ?? [];
1685
+ const commands = allCommands?.tasks ?? [];
1686
1686
  const commandCount = commands.length;
1687
1687
  const { data: allTasks, isLoading: tasksLoading } = useScheduledTasks();
1688
1688
  const tasks = allTasks ?? [];
@@ -1,5 +1,5 @@
1
1
  import { SubshellContainer, SubshellSidebar, SubshellRightSideContainer } from './chunk-RX4UWZZR.js';
2
- import { FeatureUnavailableState } from './chunk-TTP62HWW.js';
2
+ import { FeatureUnavailableState } from './chunk-SQPM2QDH.js';
3
3
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
4
4
  import { useInitialization } from './chunk-DK2HVHCY.js';
5
5
  import { useOrganization } from './chunk-DD3CCMCZ.js';
@@ -5,18 +5,18 @@ import { SubshellNavItem } from './chunk-CEWTOKE7.js';
5
5
  import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
6
6
  import { FilterBar } from './chunk-PDHTXPSF.js';
7
7
  import { CustomModal } from './chunk-GBMNCNHX.js';
8
- import { useProjectRealtime, useTableSort, sortData, usePaginationState, useTableSelection, useProjectActivities } from './chunk-R7GKX4HW.js';
8
+ import { useProjectRealtime, useTableSort, sortData, usePaginationState, useTableSelection, useProjectActivities } from './chunk-EY322HXF.js';
9
9
  import { useCreateTask, useCreateMilestone, useProjectMilestones, useUpdateTask, useProjects, useDeleteProject, useProject, useProjectNotes, useUpdateMilestone, useCreateNote, showApiErrorNotification, projectKeys } from './chunk-GRGRBWIO.js';
10
10
  import { SubshellContentContainer } from './chunk-RX4UWZZR.js';
11
- import { StatusBadge, EmptyState, PageTitleCaption, CenteredErrorState, StatCard } from './chunk-TTP62HWW.js';
11
+ import { StatusBadge, EmptyState, PageTitleCaption, CenteredErrorState, StatCard } from './chunk-SQPM2QDH.js';
12
12
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
13
13
  import { PAGE_SIZE_DEFAULT, formatTimeAgo, formatDate, formatRelativeTime } from './chunk-GCBWGGI6.js';
14
14
  import { useElevasisServices } from './chunk-IRW7JMQ4.js';
15
15
  import { useState, useMemo, useCallback } from 'react';
16
16
  import { Stack, Text, Group, Checkbox, ActionIcon, TextInput, Button, Modal, Title, Textarea, Select, SimpleGrid, Card, ThemeIcon, RingProgress, Paper, Timeline, Badge, Collapse, Center, Loader, Table, Pagination, Alert, CopyButton, Tooltip, Divider, Tabs, Anchor, Chip } from '@mantine/core';
17
- import { IconNotes, IconBriefcase, IconChecklist, IconFlag, IconX, IconPlus, IconHeartbeat, IconFileText, IconCalendar, IconInbox, IconLock, IconAlertTriangle, IconCircleCheck, IconClock, IconChevronDown, IconChevronRight, IconDownload, IconListCheck, IconMessageCircle, IconSearch, IconArrowLeft, IconCheck, IconCopy, IconTerminal2, IconCurrencyDollar, IconBuilding } from '@tabler/icons-react';
17
+ import { IconNotes, IconBriefcase, IconChecklist, IconFlag, IconX, IconPlus, IconHeartbeat, IconFileText, IconCalendar, IconInbox, IconLock, IconAlertTriangle, IconCircleCheck, IconClock, IconChevronDown, IconChevronRight, IconDownload, IconListCheck, IconMessageCircle, IconSearch, IconArrowLeft, IconCheck, IconCopy, IconCurrencyDollar, IconBuilding } from '@tabler/icons-react';
18
18
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
19
- import { useDisclosure, useClipboard } from '@mantine/hooks';
19
+ import { useDisclosure } from '@mantine/hooks';
20
20
  import { useQueryClient, useMutation } from '@tanstack/react-query';
21
21
 
22
22
  function Checklist({ items, onToggle, onAdd, onRemove }) {
@@ -809,13 +809,7 @@ function ResumeContextPreview({ tasks }) {
809
809
  }
810
810
  );
811
811
  }
812
- var buildBootstrapCommand = (projectId) => `/project work ${projectId}`;
813
- function QuickActionsRow({
814
- onCreateTask,
815
- onAddMilestone,
816
- onLogBlocker,
817
- onResumeBootstrap
818
- }) {
812
+ function QuickActionsRow({ onCreateTask, onAddMilestone, onLogBlocker }) {
819
813
  return /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "wrap", children: [
820
814
  /* @__PURE__ */ jsx(Button, { variant: "light", size: "compact-sm", leftSection: /* @__PURE__ */ jsx(IconPlus, { size: 14 }), onClick: onCreateTask, children: "Create Task" }),
821
815
  /* @__PURE__ */ jsx(Button, { variant: "light", size: "compact-sm", leftSection: /* @__PURE__ */ jsx(IconFlag, { size: 14 }), onClick: onAddMilestone, children: "Add Milestone" }),
@@ -829,18 +823,7 @@ function QuickActionsRow({
829
823
  onClick: onLogBlocker,
830
824
  children: "Log Blocker"
831
825
  }
832
- ),
833
- /* @__PURE__ */ jsx(Tooltip, { label: "Copies bootstrap command to clipboard", children: /* @__PURE__ */ jsx(
834
- Button,
835
- {
836
- variant: "light",
837
- size: "compact-sm",
838
- color: "grape",
839
- leftSection: /* @__PURE__ */ jsx(IconTerminal2, { size: 14 }),
840
- onClick: onResumeBootstrap,
841
- children: "Resume Bootstrap"
842
- }
843
- ) })
826
+ )
844
827
  ] });
845
828
  }
846
829
  function LinkedRecordChips({ dealId, clientCompanyId }) {
@@ -1033,6 +1016,61 @@ function parseChecklist2(milestone) {
1033
1016
  if (!Array.isArray(raw)) return [];
1034
1017
  return raw;
1035
1018
  }
1019
+ function sortMilestonesForTimeline(milestones) {
1020
+ return [...milestones].sort((a, b) => {
1021
+ if (a.sequence !== b.sequence) return a.sequence - b.sequence;
1022
+ const aCreated = a.created_at ? new Date(a.created_at).getTime() : 0;
1023
+ const bCreated = b.created_at ? new Date(b.created_at).getTime() : 0;
1024
+ if (aCreated !== bCreated) return aCreated - bCreated;
1025
+ return a.name.localeCompare(b.name);
1026
+ });
1027
+ }
1028
+ var bulletSize = 14;
1029
+ function renderMilestoneBullet(status) {
1030
+ const normalizedStatus = status ?? "upcoming";
1031
+ const isCompleted = normalizedStatus === "completed";
1032
+ const isInProgress = normalizedStatus === "in_progress";
1033
+ if (isCompleted) {
1034
+ return /* @__PURE__ */ jsx(
1035
+ "div",
1036
+ {
1037
+ style: {
1038
+ width: bulletSize,
1039
+ height: bulletSize,
1040
+ borderRadius: "50%",
1041
+ backgroundColor: "var(--color-primary)",
1042
+ boxShadow: "0 0 0 4px var(--color-surface)"
1043
+ }
1044
+ }
1045
+ );
1046
+ }
1047
+ const fillColor = isInProgress ? "var(--color-primary)" : "color-mix(in srgb, var(--color-primary) 50%, transparent)";
1048
+ const borderColor = isInProgress ? "var(--color-primary)" : "color-mix(in srgb, var(--color-primary) 20%, transparent)";
1049
+ return /* @__PURE__ */ jsx(
1050
+ "div",
1051
+ {
1052
+ style: {
1053
+ width: bulletSize,
1054
+ height: bulletSize,
1055
+ borderRadius: "50%",
1056
+ backgroundColor: fillColor,
1057
+ border: `2px solid ${borderColor}`,
1058
+ boxSizing: "border-box",
1059
+ zIndex: 2,
1060
+ boxShadow: "0 0 0 4px var(--color-surface)"
1061
+ }
1062
+ }
1063
+ );
1064
+ }
1065
+ function getMilestoneSurfaceStyles(status) {
1066
+ const normalizedStatus = status ?? "upcoming";
1067
+ const accent = normalizedStatus === "completed" ? "var(--color-primary)" : normalizedStatus === "in_progress" ? "color-mix(in srgb, var(--color-primary) 72%, white)" : "color-mix(in srgb, var(--color-primary) 36%, var(--color-border))";
1068
+ const background = normalizedStatus === "completed" ? "var(--color-primary)" : normalizedStatus === "in_progress" ? "linear-gradient(180deg, color-mix(in srgb, var(--color-primary) 7%, var(--color-surface)) 0%, var(--color-surface) 100%)" : "linear-gradient(180deg, color-mix(in srgb, var(--color-primary) 3%, var(--color-surface)) 0%, var(--color-surface) 100%)";
1069
+ return {
1070
+ accent,
1071
+ background
1072
+ };
1073
+ }
1036
1074
  function MilestoneChecklist({ milestone }) {
1037
1075
  const items = parseChecklist2(milestone);
1038
1076
  const { mutate: updateMilestone } = useUpdateMilestone();
@@ -1185,7 +1223,6 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1185
1223
  const [logBlockerOpen, { open: openLogBlocker, close: closeLogBlocker }] = useDisclosure(false);
1186
1224
  const [createTaskOpen, { open: openCreateTask, close: closeCreateTask }] = useDisclosure(false);
1187
1225
  const [addMilestoneOpen, { open: openAddMilestone, close: closeAddMilestone }] = useDisclosure(false);
1188
- const clipboard = useClipboard({ timeout: 2e3 });
1189
1226
  if (isLoading) {
1190
1227
  return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(Center, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(Loader, {}) }) });
1191
1228
  }
@@ -1195,7 +1232,7 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1195
1232
  if (!project) {
1196
1233
  return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(Center, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(Alert, { color: "yellow", children: "Project not found" }) }) });
1197
1234
  }
1198
- const milestones = project.milestones ?? [];
1235
+ const milestones = sortMilestonesForTimeline(project.milestones ?? []);
1199
1236
  const tasks = project.tasks ?? [];
1200
1237
  const totalMilestones = milestones.length;
1201
1238
  const completedMilestones = milestones.filter((milestone) => milestone.status === "completed").length;
@@ -1204,6 +1241,10 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1204
1241
  const milestoneProgress = calculateProgress(completedMilestones, totalMilestones);
1205
1242
  const taskProgress = calculateProgress(approvedTasks, totalTasks);
1206
1243
  const companyName = project.company?.name ?? null;
1244
+ const activeMilestoneIndex = milestones.reduce(
1245
+ (lastIndex, milestone, index) => milestone.status !== "upcoming" ? index : lastIndex,
1246
+ -1
1247
+ );
1207
1248
  const isEmpty = milestones.length === 0 && tasks.length === 0 && !notes?.length;
1208
1249
  const defaultTab = isEmpty ? "details" : "status";
1209
1250
  return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(PageContainer, { children: /* @__PURE__ */ jsxs(Stack, { children: [
@@ -1218,11 +1259,9 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1218
1259
  /* @__PURE__ */ jsx(
1219
1260
  QuickActionsRow,
1220
1261
  {
1221
- projectId,
1222
1262
  onCreateTask: openCreateTask,
1223
1263
  onAddMilestone: openAddMilestone,
1224
- onLogBlocker: openLogBlocker,
1225
- onResumeBootstrap: () => clipboard.copy(buildBootstrapCommand(projectId))
1264
+ onLogBlocker: openLogBlocker
1226
1265
  }
1227
1266
  ),
1228
1267
  /* @__PURE__ */ jsxs(SimpleGrid, { cols: 4, children: [
@@ -1332,84 +1371,204 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1332
1371
  /* @__PURE__ */ jsx(Tabs.Panel, { value: "status", pt: "md", children: milestones.length === 0 ? /* @__PURE__ */ jsx(Text, { c: "dimmed", size: "sm", children: "No milestones yet." }) : /* @__PURE__ */ jsx(
1333
1372
  Timeline,
1334
1373
  {
1335
- active: completedMilestones,
1374
+ active: activeMilestoneIndex,
1336
1375
  bulletSize: 20,
1376
+ lineWidth: 3,
1337
1377
  color: "var(--color-primary)",
1338
1378
  styles: {
1339
1379
  itemBullet: {
1340
- borderColor: "color-mix(in srgb, var(--color-primary) 40%, transparent)",
1341
- backgroundColor: "var(--color-surface)"
1380
+ borderColor: "transparent",
1381
+ backgroundColor: "transparent",
1382
+ padding: 0,
1383
+ zIndex: 3,
1384
+ overflow: "visible",
1385
+ display: "flex",
1386
+ alignItems: "center",
1387
+ justifyContent: "center"
1342
1388
  },
1343
1389
  item: {
1344
- "--_item-border-color": "color-mix(in srgb, var(--color-primary) 25%, transparent)"
1390
+ "--_item-border-color": "color-mix(in srgb, var(--color-primary) 22%, transparent)",
1391
+ paddingBottom: "var(--mantine-spacing-xl)"
1345
1392
  },
1346
1393
  itemTitle: {
1347
1394
  color: "var(--color-text)"
1395
+ },
1396
+ itemBody: {
1397
+ marginTop: 0
1348
1398
  }
1349
1399
  },
1350
1400
  children: milestones.map((milestone) => {
1351
1401
  const milestoneTasks = tasks.filter((task) => task.milestone_id === milestone.id);
1352
- return /* @__PURE__ */ jsxs(
1402
+ const checklistItems = parseChecklist2(milestone);
1403
+ const completedChecklistItems = checklistItems.filter((item) => item.completed).length;
1404
+ const { accent, background } = getMilestoneSurfaceStyles(milestone.status);
1405
+ return /* @__PURE__ */ jsx(
1353
1406
  Timeline.Item,
1354
1407
  {
1355
- bullet: milestone.status === "completed" ? /* @__PURE__ */ jsx(
1356
- "div",
1408
+ bullet: renderMilestoneBullet(milestone.status),
1409
+ title: /* @__PURE__ */ jsx("div", {}),
1410
+ children: /* @__PURE__ */ jsxs(
1411
+ Paper,
1357
1412
  {
1413
+ p: "lg",
1414
+ radius: "md",
1358
1415
  style: {
1359
- width: 12,
1360
- height: 12,
1361
- borderRadius: "50%",
1362
- backgroundColor: "var(--color-primary)",
1363
- boxShadow: "0 0 8px var(--color-primary), 0 0 16px color-mix(in srgb, var(--color-primary) 50%, transparent)"
1364
- }
1365
- }
1366
- ) : void 0,
1367
- title: /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
1368
- /* @__PURE__ */ jsx(Text, { fw: 500, children: milestone.name }),
1369
- /* @__PURE__ */ jsx(
1370
- Badge,
1371
- {
1372
- variant: "light",
1373
- color: milestoneStatusColors[milestone.status || ""] || "gray",
1374
- size: "sm",
1375
- children: formatStatusLabel(milestone.status || "unknown")
1376
- }
1377
- ),
1378
- milestone.due_date && /* @__PURE__ */ jsxs(Text, { size: "xs", c: "dimmed", children: [
1379
- "Due ",
1380
- formatDate(milestone.due_date)
1381
- ] })
1382
- ] }),
1383
- children: [
1384
- milestone.description && /* @__PURE__ */ jsx(Text, { size: "sm", mt: "xs", children: milestone.description }),
1385
- /* @__PURE__ */ jsx(MilestoneChecklist, { milestone }),
1386
- milestoneTasks.length > 0 && /* @__PURE__ */ jsx(Stack, { gap: "xs", mt: "sm", children: milestoneTasks.map((task) => /* @__PURE__ */ jsx(Card, { withBorder: true, p: "xs", children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
1387
- /* @__PURE__ */ jsxs(Group, { gap: "xs", justify: "space-between", children: [
1388
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: task.name }),
1389
- /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
1390
- /* @__PURE__ */ jsx(
1391
- Badge,
1392
- {
1393
- variant: "light",
1394
- color: taskTypeColors[task.type || ""] || "gray",
1395
- size: "xs",
1396
- children: formatStatusLabel(task.type || "other")
1416
+ background,
1417
+ border: `1px solid color-mix(in srgb, ${accent} 24%, var(--color-border))`,
1418
+ boxShadow: "var(--card-shadow)",
1419
+ position: "relative",
1420
+ overflow: "hidden"
1421
+ },
1422
+ children: [
1423
+ /* @__PURE__ */ jsx(
1424
+ "div",
1425
+ {
1426
+ style: {
1427
+ position: "absolute",
1428
+ inset: "0 auto 0 0",
1429
+ width: 3,
1430
+ background: `linear-gradient(180deg, ${accent} 0%, color-mix(in srgb, ${accent} 30%, transparent) 100%)`
1397
1431
  }
1398
- ),
1399
- /* @__PURE__ */ jsx(
1400
- Badge,
1432
+ }
1433
+ ),
1434
+ /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1435
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-start", wrap: "wrap", children: [
1436
+ /* @__PURE__ */ jsxs(Stack, { gap: 6, style: { flex: 1, minWidth: 260 }, children: [
1437
+ /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "wrap", children: [
1438
+ /* @__PURE__ */ jsx(
1439
+ Text,
1440
+ {
1441
+ fw: 700,
1442
+ size: "lg",
1443
+ c: milestone.status === "completed" ? "var(--color-background)" : "var(--color-text)",
1444
+ children: milestone.name
1445
+ }
1446
+ ),
1447
+ /* @__PURE__ */ jsx(
1448
+ Badge,
1449
+ {
1450
+ variant: "light",
1451
+ color: milestoneStatusColors[milestone.status || ""] || "gray",
1452
+ size: "sm",
1453
+ styles: {
1454
+ root: {
1455
+ letterSpacing: "0.02em"
1456
+ }
1457
+ },
1458
+ children: formatStatusLabel(milestone.status || "unknown")
1459
+ }
1460
+ )
1461
+ ] }),
1462
+ milestone.description && /* @__PURE__ */ jsx(
1463
+ Text,
1464
+ {
1465
+ size: "sm",
1466
+ c: milestone.status === "completed" ? "color-mix(in srgb, var(--color-background) 82%, transparent)" : "var(--color-text-dimmed)",
1467
+ maw: 900,
1468
+ children: milestone.description
1469
+ }
1470
+ )
1471
+ ] }),
1472
+ /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "wrap", children: [
1473
+ milestone.due_date && /* @__PURE__ */ jsxs(
1474
+ Badge,
1475
+ {
1476
+ variant: "outline",
1477
+ size: "md",
1478
+ styles: {
1479
+ root: {
1480
+ borderColor: "color-mix(in srgb, var(--color-primary) 18%, var(--color-border))",
1481
+ backgroundColor: "color-mix(in srgb, var(--color-primary) 5%, var(--color-surface))"
1482
+ }
1483
+ },
1484
+ children: [
1485
+ "Due ",
1486
+ formatDate(milestone.due_date)
1487
+ ]
1488
+ }
1489
+ ),
1490
+ /* @__PURE__ */ jsxs(
1491
+ Badge,
1492
+ {
1493
+ variant: "outline",
1494
+ size: "md",
1495
+ styles: {
1496
+ root: {
1497
+ borderColor: "color-mix(in srgb, var(--color-primary) 16%, var(--color-border))",
1498
+ backgroundColor: "var(--color-surface)"
1499
+ }
1500
+ },
1501
+ children: [
1502
+ completedChecklistItems,
1503
+ "/",
1504
+ checklistItems.length,
1505
+ " complete"
1506
+ ]
1507
+ }
1508
+ ),
1509
+ milestoneTasks.length > 0 && /* @__PURE__ */ jsxs(
1510
+ Badge,
1511
+ {
1512
+ variant: "outline",
1513
+ size: "md",
1514
+ styles: {
1515
+ root: {
1516
+ borderColor: "color-mix(in srgb, var(--color-primary) 16%, var(--color-border))",
1517
+ backgroundColor: "var(--color-surface)"
1518
+ }
1519
+ },
1520
+ children: [
1521
+ milestoneTasks.length,
1522
+ " tasks"
1523
+ ]
1524
+ }
1525
+ )
1526
+ ] })
1527
+ ] }),
1528
+ /* @__PURE__ */ jsx(MilestoneChecklist, { milestone }),
1529
+ milestoneTasks.length > 0 && /* @__PURE__ */ jsx(Stack, { gap: "sm", children: milestoneTasks.map((task) => /* @__PURE__ */ jsx(
1530
+ Card,
1401
1531
  {
1402
- variant: "light",
1403
- color: taskStatusColors[task.status || ""] || "gray",
1404
- size: "xs",
1405
- children: formatStatusLabel(task.status || "pending")
1406
- }
1407
- )
1532
+ p: "sm",
1533
+ radius: "md",
1534
+ style: {
1535
+ border: "1px solid color-mix(in srgb, var(--color-primary) 12%, var(--color-border))",
1536
+ backgroundColor: "color-mix(in srgb, var(--color-surface-hover) 70%, var(--color-surface))",
1537
+ boxShadow: "var(--standard-box-shadow)"
1538
+ },
1539
+ children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
1540
+ /* @__PURE__ */ jsxs(Group, { gap: "xs", justify: "space-between", align: "flex-start", wrap: "wrap", children: [
1541
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, c: "var(--color-text)", children: task.name }),
1542
+ /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "wrap", children: [
1543
+ /* @__PURE__ */ jsx(
1544
+ Badge,
1545
+ {
1546
+ variant: "light",
1547
+ color: taskTypeColors[task.type || ""] || "gray",
1548
+ size: "xs",
1549
+ children: formatStatusLabel(task.type || "other")
1550
+ }
1551
+ ),
1552
+ /* @__PURE__ */ jsx(
1553
+ Badge,
1554
+ {
1555
+ variant: "light",
1556
+ color: taskStatusColors[task.status || ""] || "gray",
1557
+ size: "xs",
1558
+ children: formatStatusLabel(task.status || "pending")
1559
+ }
1560
+ )
1561
+ ] })
1562
+ ] }),
1563
+ /* @__PURE__ */ jsx(InlineResumeContextEditor, { task, projectId })
1564
+ ] })
1565
+ },
1566
+ task.id
1567
+ )) })
1408
1568
  ] })
1409
- ] }),
1410
- /* @__PURE__ */ jsx(InlineResumeContextEditor, { task, projectId })
1411
- ] }) }, task.id)) })
1412
- ]
1569
+ ]
1570
+ }
1571
+ )
1413
1572
  },
1414
1573
  milestone.id
1415
1574
  );
@@ -1,5 +1,5 @@
1
1
  import { useErrorTrends } from './chunk-QSTH6T77.js';
2
- import { CardHeader, CenteredErrorState, TrendIndicator, EmptyState, StatCard } from './chunk-TTP62HWW.js';
2
+ import { CardHeader, CenteredErrorState, TrendIndicator, EmptyState, StatCard } from './chunk-SQPM2QDH.js';
3
3
  import { getTimeRangeLabel, getTimeRangeDates, formatBucketTime } from './chunk-GCBWGGI6.js';
4
4
  import { useRef, useState, useLayoutEffect, useEffect, useMemo, useCallback } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';