@elevasis/ui 2.18.0 → 2.20.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 (93) hide show
  1. package/dist/{CoreAuthKitInner-I32JCNE7.js → CoreAuthKitInner-QC62UHTZ.js} +1 -0
  2. package/dist/api/index.js +3 -2
  3. package/dist/app/index.js +6 -5
  4. package/dist/auth/context.js +1 -0
  5. package/dist/auth/index.js +1 -0
  6. package/dist/charts/index.js +4 -3
  7. package/dist/{chunk-LT33DSMO.js → chunk-2CFOFSSG.js} +4 -4
  8. package/dist/chunk-3JCMO7SD.js +14 -0
  9. package/dist/chunk-7XKCG5CT.js +125 -0
  10. package/dist/{chunk-SQPM2QDH.js → chunk-BHR7IV72.js} +3 -2
  11. package/dist/{chunk-DDZMBNTY.js → chunk-CTTY6FUT.js} +2 -2
  12. package/dist/chunk-DRQPEMJI.js +42 -0
  13. package/dist/{chunk-EY322HXF.js → chunk-FMFX4K6E.js} +19 -6
  14. package/dist/{chunk-UA36WILN.js → chunk-GP3AFJYG.js} +145 -211
  15. package/dist/{chunk-P6TC4K7I.js → chunk-GTYUP7MB.js} +4 -4
  16. package/dist/chunk-HJ4CJIWN.js +38 -0
  17. package/dist/chunk-I2KLQ2HA.js +19 -0
  18. package/dist/{chunk-B6FIIEFO.js → chunk-JR5WNTLA.js} +128 -117
  19. package/dist/{chunk-A2AZY5SF.js → chunk-LR5CRY5A.js} +1 -1
  20. package/dist/{chunk-GRGRBWIO.js → chunk-M7W7CGPL.js} +1 -1
  21. package/dist/{chunk-SS2UVUSG.js → chunk-MZFJWCPH.js} +73 -121
  22. package/dist/{chunk-P3TFNFZS.js → chunk-OUYH2SBS.js} +3 -3
  23. package/dist/{chunk-66VY5EMV.js → chunk-PJVG3ISO.js} +5 -5
  24. package/dist/{chunk-I3LQGLUC.js → chunk-Q4QJOSVS.js} +1 -1
  25. package/dist/{chunk-R73EHHPN.js → chunk-Q5HC6ENG.js} +18 -2
  26. package/dist/{chunk-VDM6DQES.js → chunk-R7OJCNL3.js} +1 -1
  27. package/dist/{chunk-6RWMRQN5.js → chunk-TIIPYB2Z.js} +1 -1
  28. package/dist/{chunk-34NQLV2W.js → chunk-TO7QXDBX.js} +3 -3
  29. package/dist/{chunk-WP3IYOVJ.js → chunk-YP6T426C.js} +107 -56
  30. package/dist/{chunk-FM6LSZ45.js → chunk-ZE2KQSHL.js} +4 -4
  31. package/dist/components/chat/index.js +1 -0
  32. package/dist/components/index.d.ts +218 -2808
  33. package/dist/components/index.js +26 -25
  34. package/dist/components/navigation/index.js +1 -0
  35. package/dist/execution/index.js +1 -0
  36. package/dist/features/auth/index.js +1 -0
  37. package/dist/features/crm/index.d.ts +54 -53
  38. package/dist/features/crm/index.js +12 -11
  39. package/dist/features/dashboard/index.js +13 -12
  40. package/dist/features/delivery/index.d.ts +2642 -2605
  41. package/dist/features/delivery/index.js +12 -11
  42. package/dist/features/lead-gen/index.js +12 -22
  43. package/dist/features/monitoring/index.js +14 -13
  44. package/dist/features/monitoring/requests/index.d.ts +38 -27
  45. package/dist/features/monitoring/requests/index.js +213 -106
  46. package/dist/features/operations/index.d.ts +8 -26
  47. package/dist/features/operations/index.js +16 -15
  48. package/dist/features/seo/index.js +1 -0
  49. package/dist/features/settings/index.d.ts +36 -37
  50. package/dist/features/settings/index.js +13 -12
  51. package/dist/graph/index.js +1 -0
  52. package/dist/hooks/delivery/index.d.ts +2712 -2699
  53. package/dist/hooks/delivery/index.js +3 -2
  54. package/dist/hooks/index.d.ts +1674 -4617
  55. package/dist/hooks/index.js +11 -10
  56. package/dist/hooks/operations/command-view/utils/transformCommandViewData.js +1 -0
  57. package/dist/hooks/published.d.ts +1674 -4617
  58. package/dist/hooks/published.js +11 -10
  59. package/dist/index.d.ts +773 -3635
  60. package/dist/index.js +12 -11
  61. package/dist/initialization/index.js +1 -0
  62. package/dist/layout/index.d.ts +14 -2
  63. package/dist/layout/index.js +2 -1
  64. package/dist/organization/index.js +1 -0
  65. package/dist/profile/index.js +1 -0
  66. package/dist/provider/ElevasisServiceContext.js +1 -0
  67. package/dist/provider/index.d.ts +320 -249
  68. package/dist/provider/index.js +9 -8
  69. package/dist/provider/published.d.ts +320 -249
  70. package/dist/provider/published.js +6 -5
  71. package/dist/router/context.js +1 -0
  72. package/dist/router/index.js +1 -0
  73. package/dist/sse/index.d.ts +1 -6
  74. package/dist/sse/index.js +1 -1
  75. package/dist/supabase/index.js +1 -0
  76. package/dist/test-utils/index.d.ts +117 -0
  77. package/dist/test-utils/index.js +136 -0
  78. package/dist/test-utils/setup-integration.d.ts +2 -0
  79. package/dist/test-utils/setup-integration.js +26 -0
  80. package/dist/test-utils/setup.d.ts +2 -0
  81. package/dist/test-utils/setup.js +47 -0
  82. package/dist/theme/index.js +3 -2
  83. package/dist/typeform/index.js +1 -0
  84. package/dist/typeform/schemas.js +1 -0
  85. package/dist/types/index.d.ts +1604 -2489
  86. package/dist/utils/index.d.ts +32 -1
  87. package/dist/utils/index.js +2 -1
  88. package/dist/zustand/index.d.ts +4 -8
  89. package/dist/zustand/index.js +2 -0
  90. package/package.json +33 -5
  91. package/src/test-utils/README.md +5 -0
  92. package/dist/chunk-ADSSLKKP.js +0 -10
  93. /package/dist/{chunk-GCBWGGI6.js → chunk-OD7GWIZS.js} +0 -0
@@ -5,16 +5,16 @@ 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-EY322HXF.js';
9
- import { useCreateTask, useCreateMilestone, useProjectMilestones, useUpdateTask, useProjects, useDeleteProject, useProject, useProjectNotes, useUpdateMilestone, useCreateNote, showApiErrorNotification, projectKeys } from './chunk-GRGRBWIO.js';
8
+ import { useProjectRealtime, useTableSort, sortData, usePaginationState, useTableSelection, useProjectActivities } from './chunk-FMFX4K6E.js';
9
+ import { useCreateTask, useCreateMilestone, useProjectMilestones, useUpdateTask, useProjects, useDeleteProject, useProject, useProjectNotes, useUpdateMilestone, useCreateNote, showApiErrorNotification, projectKeys } from './chunk-M7W7CGPL.js';
10
10
  import { SubshellContentContainer } from './chunk-RX4UWZZR.js';
11
- import { StatusBadge, EmptyState, PageTitleCaption, CenteredErrorState, StatCard } from './chunk-SQPM2QDH.js';
11
+ import { StatusBadge, EmptyState, PageTitleCaption, CenteredErrorState, StatCard, CardHeader } from './chunk-BHR7IV72.js';
12
12
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
13
- import { PAGE_SIZE_DEFAULT, formatTimeAgo, formatDate, formatRelativeTime } from './chunk-GCBWGGI6.js';
13
+ import { PAGE_SIZE_DEFAULT, formatTimeAgo, formatDate, formatRelativeTime } from './chunk-OD7GWIZS.js';
14
14
  import { useElevasisServices } from './chunk-IRW7JMQ4.js';
15
15
  import { useState, useMemo, useCallback } from 'react';
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, IconCurrencyDollar, IconBuilding } from '@tabler/icons-react';
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, Space, Tabs, Divider, 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, IconCheck, IconCopy, IconFileDescription, IconArrowLeft, IconCurrencyDollar, IconBuilding } from '@tabler/icons-react';
18
18
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
19
19
  import { useDisclosure } from '@mantine/hooks';
20
20
  import { useQueryClient, useMutation } from '@tanstack/react-query';
@@ -349,7 +349,8 @@ var noteTypeColors = {
349
349
  call_note: "blue",
350
350
  status_update: "green",
351
351
  issue: "yellow",
352
- blocker: "red"
352
+ blocker: "red",
353
+ agent_learning: "grape"
353
354
  };
354
355
  function formatStatusLabel(status) {
355
356
  return status.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
@@ -772,58 +773,92 @@ function ProjectsListPage({ onProjectClick } = {}) {
772
773
  function isResumeContext(val) {
773
774
  return !!val && typeof val === "object" && !Array.isArray(val);
774
775
  }
776
+ function ContextRow({ label, value }) {
777
+ return /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
778
+ /* @__PURE__ */ jsx(
779
+ Text,
780
+ {
781
+ size: "xs",
782
+ ff: "monospace",
783
+ c: "var(--color-text-subtle)",
784
+ style: { textTransform: "uppercase", letterSpacing: "0.06em", opacity: 0.7 },
785
+ children: label
786
+ }
787
+ ),
788
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "var(--color-text)", style: { lineHeight: 1.55 }, children: value })
789
+ ] });
790
+ }
775
791
  function ResumeContextPreview({ tasks }) {
776
792
  const candidate = tasks.filter((t) => isResumeContext(t.resume_context)).sort((a, b) => new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime())[0];
777
793
  if (!candidate) return null;
778
794
  const ctx = candidate.resume_context;
779
- return /* @__PURE__ */ jsx(
795
+ const hasBody = ctx.current_state || ctx.next_steps;
796
+ return /* @__PURE__ */ jsxs(
780
797
  Paper,
781
798
  {
782
- p: "sm",
799
+ p: "md",
783
800
  style: {
784
801
  border: "1px solid var(--color-border)",
785
802
  borderRadius: "var(--mantine-radius-default)",
786
- backgroundColor: "color-mix(in srgb, var(--color-primary) 5%, var(--color-surface))"
803
+ backgroundColor: "color-mix(in srgb, var(--color-primary) 4%, var(--color-surface))",
804
+ position: "relative",
805
+ overflow: "hidden"
787
806
  },
788
- children: /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
789
- /* @__PURE__ */ jsx(Group, { gap: "xs", children: /* @__PURE__ */ jsxs(Text, { size: "xs", c: "dimmed", children: [
790
- "Last worked",
791
- " ",
792
- /* @__PURE__ */ jsx(Text, { component: "span", size: "xs", fw: 500, c: "var(--color-text)", children: formatRelativeTime(candidate.updated_at) }),
793
- " ",
794
- "on",
795
- " ",
796
- /* @__PURE__ */ jsx(Text, { component: "span", size: "xs", fw: 500, c: "var(--color-text)", children: candidate.name })
797
- ] }) }),
798
- ctx.current_state && /* @__PURE__ */ jsxs(Text, { size: "xs", c: "dimmed", children: [
799
- "Current state:",
800
- " ",
801
- /* @__PURE__ */ jsx(Text, { component: "span", size: "xs", c: "var(--color-text-subtle)", children: ctx.current_state })
802
- ] }),
803
- ctx.next_steps && /* @__PURE__ */ jsxs(Text, { size: "xs", c: "dimmed", children: [
804
- "Next:",
805
- " ",
806
- /* @__PURE__ */ jsx(Text, { component: "span", size: "xs", c: "var(--color-text-subtle)", children: ctx.next_steps })
807
+ children: [
808
+ /* @__PURE__ */ jsx(
809
+ "div",
810
+ {
811
+ style: {
812
+ position: "absolute",
813
+ inset: "0 auto 0 0",
814
+ width: 3,
815
+ background: "linear-gradient(180deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 30%, transparent) 100%)"
816
+ }
817
+ }
818
+ ),
819
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", pl: 4, children: [
820
+ /* @__PURE__ */ jsxs(Group, { gap: 6, align: "baseline", wrap: "wrap", children: [
821
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Last worked" }),
822
+ /* @__PURE__ */ jsx(Text, { size: "xs", fw: 600, c: "var(--color-text)", children: formatRelativeTime(candidate.updated_at) }),
823
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "on" }),
824
+ /* @__PURE__ */ jsx(Text, { size: "xs", fw: 600, c: "var(--color-text)", children: candidate.name })
825
+ ] }),
826
+ hasBody && /* @__PURE__ */ jsxs(Fragment, { children: [
827
+ /* @__PURE__ */ jsx(Divider, { opacity: 0.3 }),
828
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
829
+ ctx.current_state && /* @__PURE__ */ jsx(ContextRow, { label: "Current State", value: ctx.current_state }),
830
+ ctx.next_steps && /* @__PURE__ */ jsx(ContextRow, { label: "Next Steps", value: ctx.next_steps })
831
+ ] })
832
+ ] })
807
833
  ] })
808
- ] })
834
+ ]
809
835
  }
810
836
  );
811
837
  }
812
- function QuickActionsRow({ onCreateTask, onAddMilestone, onLogBlocker }) {
813
- return /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "wrap", children: [
814
- /* @__PURE__ */ jsx(Button, { variant: "light", size: "compact-sm", leftSection: /* @__PURE__ */ jsx(IconPlus, { size: 14 }), onClick: onCreateTask, children: "Create Task" }),
815
- /* @__PURE__ */ jsx(Button, { variant: "light", size: "compact-sm", leftSection: /* @__PURE__ */ jsx(IconFlag, { size: 14 }), onClick: onAddMilestone, children: "Add Milestone" }),
816
- /* @__PURE__ */ jsx(
817
- Button,
818
- {
819
- variant: "light",
820
- size: "compact-sm",
821
- color: "orange",
822
- leftSection: /* @__PURE__ */ jsx(IconAlertTriangle, { size: 14 }),
823
- onClick: onLogBlocker,
824
- children: "Log Blocker"
825
- }
826
- )
838
+ function QuickActionsRow({
839
+ onCreateTask,
840
+ onAddMilestone,
841
+ onLogBlocker,
842
+ onBack,
843
+ backLabel = "Projects"
844
+ }) {
845
+ return /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "wrap", justify: "space-between", children: [
846
+ /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "wrap", children: [
847
+ /* @__PURE__ */ jsx(Button, { variant: "light", size: "compact-sm", leftSection: /* @__PURE__ */ jsx(IconPlus, { size: 14 }), onClick: onCreateTask, children: "Create Task" }),
848
+ /* @__PURE__ */ jsx(Button, { variant: "light", size: "compact-sm", leftSection: /* @__PURE__ */ jsx(IconFlag, { size: 14 }), onClick: onAddMilestone, children: "Add Milestone" }),
849
+ /* @__PURE__ */ jsx(
850
+ Button,
851
+ {
852
+ variant: "light",
853
+ size: "compact-sm",
854
+ color: "orange",
855
+ leftSection: /* @__PURE__ */ jsx(IconAlertTriangle, { size: 14 }),
856
+ onClick: onLogBlocker,
857
+ children: "Log Blocker"
858
+ }
859
+ )
860
+ ] }),
861
+ /* @__PURE__ */ jsx(Button, { variant: "light", size: "compact-sm", leftSection: /* @__PURE__ */ jsx(IconArrowLeft, { size: 14 }), onClick: onBack, children: backLabel })
827
862
  ] });
828
863
  }
829
864
  function LinkedRecordChips({ dealId, clientCompanyId }) {
@@ -869,7 +904,8 @@ var NOTE_FILTER_OPTIONS = [
869
904
  { value: "call_note", label: "Call Notes" },
870
905
  { value: "status_update", label: "Status Updates" },
871
906
  { value: "issue", label: "Issues" },
872
- { value: "blocker", label: "Blockers" }
907
+ { value: "blocker", label: "Blockers" },
908
+ { value: "agent_learning", label: "Agent Learning" }
873
909
  ];
874
910
  function isWithinLastWeek(dateStr) {
875
911
  if (!dateStr) return false;
@@ -1009,7 +1045,8 @@ var noteTypeOptions = [
1009
1045
  { value: "call_note", label: "Call Note" },
1010
1046
  { value: "status_update", label: "Status Update" },
1011
1047
  { value: "issue", label: "Issue" },
1012
- { value: "blocker", label: "Blocker" }
1048
+ { value: "blocker", label: "Blocker" },
1049
+ { value: "agent_learning", label: "Agent Learning" }
1013
1050
  ];
1014
1051
  function parseChecklist2(milestone) {
1015
1052
  const raw = milestone.checklist;
@@ -1065,7 +1102,7 @@ function renderMilestoneBullet(status) {
1065
1102
  function getMilestoneSurfaceStyles(status) {
1066
1103
  const normalizedStatus = status ?? "upcoming";
1067
1104
  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%)";
1105
+ const background = normalizedStatus === "completed" ? "var(--color-primary)" : normalizedStatus === "in_progress" ? "linear-gradient(180deg, color-mix(in srgb, var(--color-primary) 3%, transparent) 0%, transparent 100%)" : "linear-gradient(180deg, color-mix(in srgb, var(--color-primary) 1.5%, transparent) 0%, transparent 100%)";
1069
1106
  return {
1070
1107
  accent,
1071
1108
  background
@@ -1245,15 +1282,12 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1245
1282
  (lastIndex, milestone, index) => milestone.status !== "upcoming" ? index : lastIndex,
1246
1283
  -1
1247
1284
  );
1248
- const isEmpty = milestones.length === 0 && tasks.length === 0 && !notes?.length;
1249
- const defaultTab = isEmpty ? "details" : "status";
1250
1285
  return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(PageContainer, { children: /* @__PURE__ */ jsxs(Stack, { children: [
1251
1286
  /* @__PURE__ */ jsx(
1252
1287
  PageTitleCaption,
1253
1288
  {
1254
1289
  title: project.name,
1255
- caption: [companyName, formatStatusLabel(project.status || "unknown")].filter(Boolean).join(" - "),
1256
- rightSection: /* @__PURE__ */ jsx(Group, { children: /* @__PURE__ */ jsx(Button, { variant: "light", size: "sm", leftSection: /* @__PURE__ */ jsx(IconArrowLeft, { size: 16 }), onClick: onBack, children: backLabel }) })
1290
+ caption: [companyName, formatStatusLabel(project.status || "unknown")].filter(Boolean).join(" - ")
1257
1291
  }
1258
1292
  ),
1259
1293
  /* @__PURE__ */ jsx(
@@ -1261,7 +1295,9 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1261
1295
  {
1262
1296
  onCreateTask: openCreateTask,
1263
1297
  onAddMilestone: openAddMilestone,
1264
- onLogBlocker: openLogBlocker
1298
+ onLogBlocker: openLogBlocker,
1299
+ onBack,
1300
+ backLabel
1265
1301
  }
1266
1302
  ),
1267
1303
  /* @__PURE__ */ jsxs(SimpleGrid, { cols: 4, children: [
@@ -1306,7 +1342,6 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1306
1342
  }
1307
1343
  )
1308
1344
  ] }),
1309
- /* @__PURE__ */ jsx(ResumeContextPreview, { tasks }),
1310
1345
  /* @__PURE__ */ jsxs(
1311
1346
  Paper,
1312
1347
  {
@@ -1316,13 +1351,13 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1316
1351
  borderRadius: "var(--mantine-radius-default)"
1317
1352
  },
1318
1353
  children: [
1319
- /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1320
- /* @__PURE__ */ jsxs(Group, { justify: "space-between", wrap: "wrap", children: [
1321
- /* @__PURE__ */ jsxs(Group, { gap: "sm", children: [
1322
- /* @__PURE__ */ jsx(Title, { order: 3, children: "Project Details" }),
1323
- /* @__PURE__ */ jsx(Badge, { variant: "light", color: projectStatusColors[project.status || ""] || "gray", children: formatStatusLabel(project.status || "unknown") })
1324
- ] }),
1325
- /* @__PURE__ */ jsxs(Group, { gap: 4, children: [
1354
+ /* @__PURE__ */ jsx(Stack, { gap: "md", children: /* @__PURE__ */ jsx(
1355
+ CardHeader,
1356
+ {
1357
+ icon: /* @__PURE__ */ jsx(IconFileDescription, { size: 18 }),
1358
+ title: "Project Details",
1359
+ rightSection: /* @__PURE__ */ jsxs(Group, { gap: 4, wrap: "wrap", justify: "flex-end", children: [
1360
+ /* @__PURE__ */ jsx(Badge, { variant: "light", color: projectStatusColors[project.status || ""] || "gray", children: formatStatusLabel(project.status || "unknown") }),
1326
1361
  /* @__PURE__ */ jsx(LinkedRecordChips, { dealId: project.deal_id, clientCompanyId: project.client_company_id }),
1327
1362
  /* @__PURE__ */ jsx(Text, { size: "sm", ff: "monospace", c: "var(--color-text-subtle)", children: project.id }),
1328
1363
  /* @__PURE__ */ jsx(CopyButton, { value: `/project work ${project.id}`, children: ({ copied, copy }) => /* @__PURE__ */ jsx(Tooltip, { label: copied ? "Copied!" : "Copy ID", withArrow: true, children: /* @__PURE__ */ jsx(
@@ -1336,35 +1371,44 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1336
1371
  }
1337
1372
  ) }) })
1338
1373
  ] })
1374
+ }
1375
+ ) }),
1376
+ /* @__PURE__ */ jsx(Space, { my: "xs" }),
1377
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1378
+ project.description && /* @__PURE__ */ jsxs("div", { children: [
1379
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Description" }),
1380
+ /* @__PURE__ */ jsx(Text, { size: "sm", children: project.description })
1339
1381
  ] }),
1340
- /* @__PURE__ */ jsxs(Group, { gap: "lg", children: [
1341
- project.start_date && /* @__PURE__ */ jsxs(Group, { gap: 4, children: [
1342
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: "Started:" }),
1382
+ /* @__PURE__ */ jsxs(SimpleGrid, { cols: 4, children: [
1383
+ /* @__PURE__ */ jsxs("div", { children: [
1384
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Start Date" }),
1343
1385
  /* @__PURE__ */ jsx(Text, { size: "sm", children: formatDate(project.start_date) })
1344
1386
  ] }),
1345
- project.target_end_date && /* @__PURE__ */ jsxs(Group, { gap: 4, children: [
1346
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: "Target:" }),
1387
+ /* @__PURE__ */ jsxs("div", { children: [
1388
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Target End Date" }),
1347
1389
  /* @__PURE__ */ jsx(Text, { size: "sm", children: formatDate(project.target_end_date) })
1348
1390
  ] }),
1349
- project.contract_value != null && /* @__PURE__ */ jsxs(Group, { gap: 4, children: [
1350
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: "Contract:" }),
1351
- /* @__PURE__ */ jsxs(Text, { size: "sm", children: [
1352
- "$",
1353
- project.contract_value.toLocaleString(),
1354
- project.metadata && project.metadata.rate_type === "hourly" ? "/hr" : ""
1355
- ] })
1391
+ /* @__PURE__ */ jsxs("div", { children: [
1392
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Actual End Date" }),
1393
+ /* @__PURE__ */ jsx(Text, { size: "sm", children: formatDate(project.actual_end_date) })
1356
1394
  ] }),
1357
- project.company && /* @__PURE__ */ jsxs(Group, { gap: 4, children: [
1358
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: "Company:" }),
1359
- /* @__PURE__ */ jsx(Text, { size: "sm", children: project.company.name })
1395
+ /* @__PURE__ */ jsxs("div", { children: [
1396
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Contract Value" }),
1397
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: project.contract_value != null ? `$${project.contract_value.toLocaleString()}${project.metadata && project.metadata.rate_type === "hourly" ? "/hr" : ""}` : "-" })
1360
1398
  ] })
1399
+ ] }),
1400
+ project.company && /* @__PURE__ */ jsxs("div", { children: [
1401
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Company" }),
1402
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: project.company.name }),
1403
+ project.company.domain && /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: project.company.domain })
1361
1404
  ] })
1362
1405
  ] }),
1363
- /* @__PURE__ */ jsx(Divider, { my: "md" }),
1364
- /* @__PURE__ */ jsxs(Tabs, { defaultValue: defaultTab, children: [
1406
+ /* @__PURE__ */ jsx(Space, { my: "xs" }),
1407
+ /* @__PURE__ */ jsx(ResumeContextPreview, { tasks }),
1408
+ /* @__PURE__ */ jsx(Space, { my: "md" }),
1409
+ /* @__PURE__ */ jsxs(Tabs, { defaultValue: "status", children: [
1365
1410
  /* @__PURE__ */ jsxs(Tabs.List, { children: [
1366
1411
  /* @__PURE__ */ jsx(Tabs.Tab, { value: "status", children: "Status" }),
1367
- /* @__PURE__ */ jsx(Tabs.Tab, { value: "details", children: "Details" }),
1368
1412
  /* @__PURE__ */ jsx(Tabs.Tab, { value: "notes", children: "Notes" }),
1369
1413
  /* @__PURE__ */ jsx(Tabs.Tab, { value: "activity", children: "Activity" })
1370
1414
  ] }),
@@ -1414,8 +1458,11 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1414
1458
  radius: "md",
1415
1459
  style: {
1416
1460
  background,
1417
- border: `1px solid color-mix(in srgb, ${accent} 24%, var(--color-border))`,
1418
- boxShadow: "var(--card-shadow)",
1461
+ border: "none",
1462
+ borderTop: "1px solid var(--color-border)",
1463
+ borderRight: "1px solid var(--color-border)",
1464
+ borderBottom: "1px solid var(--color-border)",
1465
+ boxShadow: "none",
1419
1466
  position: "relative",
1420
1467
  overflow: "hidden"
1421
1468
  },
@@ -1575,42 +1622,6 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1575
1622
  })
1576
1623
  }
1577
1624
  ) }),
1578
- /* @__PURE__ */ jsx(Tabs.Panel, { value: "details", pt: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1579
- isEmpty && /* @__PURE__ */ jsx(Alert, { color: "blue", title: "Get started", children: "This project has no milestones, tasks, or notes yet. Add a milestone or create a task to begin tracking progress." }),
1580
- /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1581
- /* @__PURE__ */ jsx(Title, { order: 3, children: "Project Details" }),
1582
- project.description && /* @__PURE__ */ jsxs("div", { children: [
1583
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Description" }),
1584
- /* @__PURE__ */ jsx(Text, { size: "sm", children: project.description })
1585
- ] }),
1586
- project.contract_value != null && /* @__PURE__ */ jsxs("div", { children: [
1587
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Contract Value" }),
1588
- /* @__PURE__ */ jsxs(Text, { size: "sm", fw: 500, children: [
1589
- "$",
1590
- project.contract_value.toLocaleString()
1591
- ] })
1592
- ] }),
1593
- /* @__PURE__ */ jsxs(SimpleGrid, { cols: 3, children: [
1594
- /* @__PURE__ */ jsxs("div", { children: [
1595
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Start Date" }),
1596
- /* @__PURE__ */ jsx(Text, { size: "sm", children: formatDate(project.start_date) })
1597
- ] }),
1598
- /* @__PURE__ */ jsxs("div", { children: [
1599
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Target End Date" }),
1600
- /* @__PURE__ */ jsx(Text, { size: "sm", children: formatDate(project.target_end_date) })
1601
- ] }),
1602
- /* @__PURE__ */ jsxs("div", { children: [
1603
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Actual End Date" }),
1604
- /* @__PURE__ */ jsx(Text, { size: "sm", children: formatDate(project.actual_end_date) })
1605
- ] })
1606
- ] })
1607
- ] }) }),
1608
- project.company && /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1609
- /* @__PURE__ */ jsx(Title, { order: 3, children: "Company" }),
1610
- /* @__PURE__ */ jsx(Text, { fw: 500, children: project.company.name }),
1611
- project.company.domain && /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: project.company.domain })
1612
- ] }) })
1613
- ] }) }),
1614
1625
  /* @__PURE__ */ jsx(Tabs.Panel, { value: "notes", pt: "md", children: /* @__PURE__ */ jsx(NotesTabContent, { notes, onAddNote: () => setAddNoteOpen(true) }) }),
1615
1626
  /* @__PURE__ */ jsx(Tabs.Panel, { value: "activity", pt: "md", children: /* @__PURE__ */ jsx(ProjectActivityTimeline, { projectId }) })
1616
1627
  ] })
@@ -1,5 +1,5 @@
1
1
  import { SubshellContainer, SubshellSidebar, SubshellRightSideContainer } from './chunk-RX4UWZZR.js';
2
- import { FeatureUnavailableState } from './chunk-SQPM2QDH.js';
2
+ import { FeatureUnavailableState } from './chunk-BHR7IV72.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';
@@ -1,4 +1,4 @@
1
- import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-GCBWGGI6.js';
1
+ import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-OD7GWIZS.js';
2
2
  import { useElevasisServices } from './chunk-IRW7JMQ4.js';
3
3
  import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
4
4
  import { notifications } from '@mantine/notifications';