@burdenoff/microfe-crewfoundry 2026.608.1 → 2026.625.1
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/crewfoundry/pages/AdminAdminPagePage.js +94 -78
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +112 -96
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +101 -85
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +131 -115
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +116 -100
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +15 -15
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +63 -51
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +16 -16
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +26 -26
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +28 -28
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +10 -10
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +71 -59
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +59 -47
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +77 -61
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +40 -40
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +13 -13
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +102 -86
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +173 -139
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +59 -59
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +113 -97
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +45 -45
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +85 -69
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +23 -23
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +40 -40
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +59 -47
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +52 -48
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +31 -26
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +61 -49
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +54 -42
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +16 -16
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +39 -35
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +24 -24
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +14 -14
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +81 -65
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +73 -57
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +28 -28
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +12 -12
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -59
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +57 -45
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +71 -59
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +48 -48
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +44 -43
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +58 -46
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +16 -16
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +23 -23
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +9 -9
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +43 -39
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +31 -27
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +59 -47
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +13 -13
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +66 -50
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +18 -18
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +74 -62
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +21 -21
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +47 -43
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +20 -20
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +58 -46
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +38 -34
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +14 -14
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +67 -67
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +16 -16
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceProjectDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceProjectDetailsPagePage.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"MarketplaceProjectDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceProjectDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, DollarSign, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceProjectDetailsPagePage() {\n const { projects } = useCrewFoundryStore();\n const project = projects[0];\n if (!project)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Project not found\"\n description=\"This project is no longer available.\"\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{project.name}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{project.description}</p>\n </div>\n <Badge variant={project.status === 'active' ? 'default' : 'secondary'}>\n {project.status}\n </Badge>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">${(project.budget / 1000).toFixed(0)}K</p>\n <p className=\"text-xs text-text-secondary\">Budget</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-status-success-text mb-1\" />\n <p className=\"text-lg font-bold\">${(project.spent / 1000).toFixed(0)}K</p>\n <p className=\"text-xs text-text-secondary\">Spent</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.teamName}</p>\n <p className=\"text-xs text-text-secondary\">Team</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.endDate}</p>\n <p className=\"text-xs text-text-secondary\">Deadline</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Progress</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {project.completedTasks} of {project.tasks} tasks\n </span>\n <span className=\"font-medium\">{project.progress}%</span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-3 bg-action-primary-bg rounded\"\n style={{ width: `${project.progress}%` }}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4 mt-4\">\n <div>\n <p className=\"text-xs text-text-secondary\">Manager</p>\n <p className=\"text-sm font-medium\">{project.managerName}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Priority</p>\n <Badge\n variant={\n project.priority === 'critical'\n ? 'destructive'\n : project.priority === 'high'\n ? 'default'\n : 'secondary'\n }\n >\n {project.priority}\n </Badge>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Start Date</p>\n <p className=\"text-sm\">{project.startDate}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">End Date</p>\n <p className=\"text-sm\">{project.endDate}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { Clock as t, DollarSign as n, MessageSquare as r, Star as i, Users as a } from "lucide-react";
|
|
3
3
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
-
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, GradientText as m, IllustratedEmptyState as h } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/MarketplaceServiceDetailsPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { marketplaceServices:
|
|
8
|
-
return
|
|
6
|
+
function g() {
|
|
7
|
+
let { marketplaceServices: g } = e(), _ = g[0];
|
|
8
|
+
return _ ? /* @__PURE__ */ s("div", {
|
|
9
9
|
className: "space-y-6 p-6 max-w-4xl",
|
|
10
10
|
children: [
|
|
11
11
|
/* @__PURE__ */ s("div", {
|
|
12
12
|
className: "flex items-center justify-between",
|
|
13
13
|
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
14
14
|
className: "text-2xl font-semibold",
|
|
15
|
-
children:
|
|
15
|
+
children: /* @__PURE__ */ o(m, { children: _.title })
|
|
16
16
|
}), /* @__PURE__ */ s("p", {
|
|
17
|
-
className: "text-sm text-
|
|
18
|
-
children: ["by ",
|
|
17
|
+
className: "text-sm text-text-secondary",
|
|
18
|
+
children: ["by ", _.provider]
|
|
19
19
|
})] }), /* @__PURE__ */ s("div", {
|
|
20
20
|
className: "flex gap-2",
|
|
21
21
|
children: [/* @__PURE__ */ s(l, {
|
|
@@ -30,41 +30,41 @@ function m() {
|
|
|
30
30
|
/* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
|
|
31
31
|
className: "p-4 text-center",
|
|
32
32
|
children: [
|
|
33
|
-
/* @__PURE__ */ o(n, { className: "h-5 w-5 mx-auto text-
|
|
33
|
+
/* @__PURE__ */ o(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
34
34
|
/* @__PURE__ */ s("p", {
|
|
35
35
|
className: "text-lg font-bold",
|
|
36
|
-
children: ["$",
|
|
36
|
+
children: ["$", _.price.toLocaleString()]
|
|
37
37
|
}),
|
|
38
38
|
/* @__PURE__ */ s("p", {
|
|
39
|
-
className: "text-xs text-
|
|
40
|
-
children: ["per ",
|
|
39
|
+
className: "text-xs text-text-secondary",
|
|
40
|
+
children: ["per ", _.priceType]
|
|
41
41
|
})
|
|
42
42
|
]
|
|
43
43
|
}) }),
|
|
44
44
|
/* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
|
|
45
45
|
className: "p-4 text-center",
|
|
46
46
|
children: [
|
|
47
|
-
/* @__PURE__ */ o(i, { className: "h-5 w-5 mx-auto text-
|
|
47
|
+
/* @__PURE__ */ o(i, { className: "h-5 w-5 mx-auto text-status-warning-text mb-1" }),
|
|
48
48
|
/* @__PURE__ */ s("p", {
|
|
49
49
|
className: "text-lg font-bold",
|
|
50
|
-
children: [
|
|
50
|
+
children: [_.rating, "/5"]
|
|
51
51
|
}),
|
|
52
52
|
/* @__PURE__ */ s("p", {
|
|
53
|
-
className: "text-xs text-
|
|
54
|
-
children: [
|
|
53
|
+
className: "text-xs text-text-secondary",
|
|
54
|
+
children: [_.reviews, " reviews"]
|
|
55
55
|
})
|
|
56
56
|
]
|
|
57
57
|
}) }),
|
|
58
58
|
/* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
|
|
59
59
|
className: "p-4 text-center",
|
|
60
60
|
children: [
|
|
61
|
-
/* @__PURE__ */ o(t, { className: "h-5 w-5 mx-auto text-
|
|
61
|
+
/* @__PURE__ */ o(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
62
62
|
/* @__PURE__ */ o("p", {
|
|
63
63
|
className: "text-lg font-bold",
|
|
64
|
-
children:
|
|
64
|
+
children: _.deliveryTime
|
|
65
65
|
}),
|
|
66
66
|
/* @__PURE__ */ o("p", {
|
|
67
|
-
className: "text-xs text-
|
|
67
|
+
className: "text-xs text-text-secondary",
|
|
68
68
|
children: "Delivery"
|
|
69
69
|
})
|
|
70
70
|
]
|
|
@@ -72,13 +72,13 @@ function m() {
|
|
|
72
72
|
/* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
|
|
73
73
|
className: "p-4 text-center",
|
|
74
74
|
children: [
|
|
75
|
-
/* @__PURE__ */ o(a, { className: "h-5 w-5 mx-auto text-
|
|
75
|
+
/* @__PURE__ */ o(a, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
76
76
|
/* @__PURE__ */ o("p", {
|
|
77
77
|
className: "text-lg font-bold",
|
|
78
|
-
children:
|
|
78
|
+
children: _.category
|
|
79
79
|
}),
|
|
80
80
|
/* @__PURE__ */ o("p", {
|
|
81
|
-
className: "text-xs text-
|
|
81
|
+
className: "text-xs text-text-secondary",
|
|
82
82
|
children: "Category"
|
|
83
83
|
})
|
|
84
84
|
]
|
|
@@ -86,22 +86,26 @@ function m() {
|
|
|
86
86
|
]
|
|
87
87
|
}),
|
|
88
88
|
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "About this Service" }) }), /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ o("p", {
|
|
89
|
-
className: "text-sm text-
|
|
90
|
-
children:
|
|
89
|
+
className: "text-sm text-text-secondary",
|
|
90
|
+
children: _.description
|
|
91
91
|
}), /* @__PURE__ */ o("div", {
|
|
92
92
|
className: "flex flex-wrap gap-1 mt-3",
|
|
93
|
-
children:
|
|
93
|
+
children: _.skills.map((e) => /* @__PURE__ */ o(c, {
|
|
94
94
|
variant: "outline",
|
|
95
95
|
children: e
|
|
96
96
|
}, e))
|
|
97
97
|
})] })] })
|
|
98
98
|
]
|
|
99
99
|
}) : /* @__PURE__ */ o("div", {
|
|
100
|
-
className: "p-6
|
|
101
|
-
children:
|
|
100
|
+
className: "p-6",
|
|
101
|
+
children: /* @__PURE__ */ o(h, {
|
|
102
|
+
illustration: "empty-search",
|
|
103
|
+
title: "Service not found",
|
|
104
|
+
description: "This service is no longer available."
|
|
105
|
+
})
|
|
102
106
|
});
|
|
103
107
|
}
|
|
104
108
|
//#endregion
|
|
105
|
-
export {
|
|
109
|
+
export { g as MarketplaceServiceDetailsPagePage };
|
|
106
110
|
|
|
107
111
|
//# sourceMappingURL=MarketplaceServiceDetailsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceServiceDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceServiceDetailsPagePage.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"MarketplaceServiceDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceServiceDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Clock, DollarSign, MessageSquare, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceServiceDetailsPagePage() {\n const { marketplaceServices } = useCrewFoundryStore();\n const svc = marketplaceServices[0];\n if (!svc)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Service not found\"\n description=\"This service is no longer available.\"\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{svc.title}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">by {svc.provider}</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\">\n <MessageSquare className=\"h-4 w-4 mr-1\" />\n Contact\n </Button>\n <Button>Hire Now</Button>\n </div>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">${svc.price.toLocaleString()}</p>\n <p className=\"text-xs text-text-secondary\">per {svc.priceType}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Star className=\"h-5 w-5 mx-auto text-status-warning-text mb-1\" />\n <p className=\"text-lg font-bold\">{svc.rating}/5</p>\n <p className=\"text-xs text-text-secondary\">{svc.reviews} reviews</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Clock className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{svc.deliveryTime}</p>\n <p className=\"text-xs text-text-secondary\">Delivery</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{svc.category}</p>\n <p className=\"text-xs text-text-secondary\">Category</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>About this Service</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{svc.description}</p>\n <div className=\"flex flex-wrap gap-1 mt-3\">\n {svc.skills.map((s) => (\n <Badge key={s} variant=\"outline\">\n {s}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;AAaA,SAAgB,IAAoC;CAClD,IAAM,EAAE,2BAAwB,GAAqB,EAC/C,IAAM,EAAoB;AAYhC,QAXK,IAYH,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAe,EAAI,OAAqB,CAAA;KACrC,CAAA,EACL,kBAAC,KAAD;KAAG,WAAU;eAAb,CAA2C,OAAI,EAAI,SAAa;OAC5D,EAAA,CAAA,EACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAQ,SAAQ;gBAAhB,CACE,kBAAC,GAAD,EAAe,WAAU,gBAAiB,CAAA,EAAA,UAEnC;SACT,kBAAC,GAAD,EAAA,UAAQ,YAAiB,CAAA,CACrB;OACF;;GACN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAY,WAAU,4CAA6C,CAAA;OACnE,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAAiC,KAAE,EAAI,MAAM,gBAAgB,CAAK;;OAClE,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAA2C,QAAK,EAAI,UAAc;;OACtD;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAM,WAAU,iDAAkD,CAAA;OAClE,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAAkC,EAAI,QAAO,KAAM;;OACnD,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAA4C,EAAI,SAAQ,WAAY;;OACxD;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAO,WAAU,4CAA6C,CAAA;OAC9D,kBAAC,KAAD;QAAG,WAAU;kBAAqB,EAAI;QAAiB,CAAA;OACvD,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAY,CAAA;OAC3C;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAO,WAAU,4CAA6C,CAAA;OAC9D,kBAAC,KAAD;QAAG,WAAU;kBAAqB,EAAI;QAAa,CAAA;OACnD,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAY,CAAA;OAC3C;SACT,CAAA;KACH;;GACN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,sBAA8B,CAAA,EAC9B,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,KAAD;IAAG,WAAU;cAA+B,EAAI;IAAgB,CAAA,EAChE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAI,OAAO,KAAK,MACf,kBAAC,GAAD;KAAe,SAAQ;eACpB;KACK,EAFI,EAEJ,CACR;IACE,CAAA,CACM,EAAA,CAAA,CACT,EAAA,CAAA;GACH;MAvEJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,cAAa;GACb,OAAM;GACN,aAAY;GACZ,CAAA;EACE,CAAA"}
|
|
@@ -2,11 +2,11 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
3
|
import { DollarSign as n, Lock as r, ShieldCheck as i } from "lucide-react";
|
|
4
4
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d, GlassCard as f, GradientText as p } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/PaymentsEscrowPagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { projects:
|
|
9
|
-
let n =
|
|
7
|
+
function m() {
|
|
8
|
+
let { projects: m, invoices: h, payrollRecords: g } = e(), _ = t(() => m.slice(0, 10).map((e, t) => {
|
|
9
|
+
let n = h[t % Math.max(h.length, 1)], r = g[t % Math.max(g.length, 1)], i = Math.max(e.budget || 0, n?.amount || 0, 1e3), a = Math.min(e.spent || 0, i), o = Math.max(0, Math.round(e.progress / 100 * 5)), s = Math.max(o + 1, 3), c = a >= i ? "completed" : a > 0 ? "active" : r?.status === "approved" ? "funded" : "active";
|
|
10
10
|
return {
|
|
11
11
|
id: e.id,
|
|
12
12
|
project: e.name,
|
|
@@ -18,58 +18,70 @@ function f() {
|
|
|
18
18
|
completedMilestones: Math.min(o, s)
|
|
19
19
|
};
|
|
20
20
|
}), [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
]),
|
|
21
|
+
h,
|
|
22
|
+
g,
|
|
23
|
+
m
|
|
24
|
+
]), v = _.reduce((e, t) => e + t.amount, 0), y = _.reduce((e, t) => e + t.released, 0);
|
|
25
25
|
return /* @__PURE__ */ o("div", {
|
|
26
26
|
className: "space-y-6 p-6",
|
|
27
27
|
children: [
|
|
28
28
|
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
29
29
|
className: "text-2xl font-semibold",
|
|
30
|
-
children: "Escrow"
|
|
30
|
+
children: /* @__PURE__ */ a(p, { children: "Escrow" })
|
|
31
31
|
}), /* @__PURE__ */ a("p", {
|
|
32
|
-
className: "text-sm text-
|
|
32
|
+
className: "text-sm text-text-secondary",
|
|
33
33
|
children: "Secure payment holding for service contracts"
|
|
34
34
|
})] }),
|
|
35
35
|
/* @__PURE__ */ o("div", {
|
|
36
36
|
className: "grid gap-4 md:grid-cols-3",
|
|
37
37
|
children: [
|
|
38
|
-
/* @__PURE__ */ o(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
38
|
+
/* @__PURE__ */ o(f, {
|
|
39
|
+
treatment: "metric",
|
|
40
|
+
className: "border-border-seam",
|
|
41
|
+
children: [/* @__PURE__ */ o(u, {
|
|
42
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
43
|
+
children: [/* @__PURE__ */ a(d, {
|
|
44
|
+
className: "text-sm font-medium",
|
|
45
|
+
children: "Total in Escrow"
|
|
46
|
+
}), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
47
|
+
}), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
|
|
48
|
+
className: "text-2xl font-bold tabular-nums",
|
|
49
|
+
children: ["$", v.toLocaleString()]
|
|
50
|
+
}) })]
|
|
51
|
+
}),
|
|
52
|
+
/* @__PURE__ */ o(f, {
|
|
53
|
+
treatment: "metric",
|
|
54
|
+
className: "border-border-seam",
|
|
55
|
+
children: [/* @__PURE__ */ o(u, {
|
|
56
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
57
|
+
children: [/* @__PURE__ */ a(d, {
|
|
58
|
+
className: "text-sm font-medium",
|
|
59
|
+
children: "Released"
|
|
60
|
+
}), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-status-success-text" })]
|
|
61
|
+
}), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
|
|
62
|
+
className: "text-2xl font-bold tabular-nums",
|
|
63
|
+
children: ["$", y.toLocaleString()]
|
|
64
|
+
}) })]
|
|
65
|
+
}),
|
|
66
|
+
/* @__PURE__ */ o(f, {
|
|
67
|
+
treatment: "metric",
|
|
68
|
+
className: "border-border-seam",
|
|
69
|
+
children: [/* @__PURE__ */ o(u, {
|
|
70
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
71
|
+
children: [/* @__PURE__ */ a(d, {
|
|
72
|
+
className: "text-sm font-medium",
|
|
73
|
+
children: "Held"
|
|
74
|
+
}), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-status-info-text" })]
|
|
75
|
+
}), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
|
|
76
|
+
className: "text-2xl font-bold tabular-nums",
|
|
77
|
+
children: ["$", (v - y).toLocaleString()]
|
|
78
|
+
}) })]
|
|
79
|
+
})
|
|
68
80
|
]
|
|
69
81
|
}),
|
|
70
82
|
/* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Escrow Transactions" }) }), /* @__PURE__ */ a(l, {
|
|
71
83
|
className: "space-y-3",
|
|
72
|
-
children:
|
|
84
|
+
children: _.map((e) => {
|
|
73
85
|
let t = e.amount === 0 ? 0 : Math.round(e.released / e.amount * 100);
|
|
74
86
|
return /* @__PURE__ */ o("div", {
|
|
75
87
|
className: "rounded border p-4",
|
|
@@ -80,7 +92,7 @@ function f() {
|
|
|
80
92
|
className: "text-sm font-medium",
|
|
81
93
|
children: e.project
|
|
82
94
|
}), /* @__PURE__ */ a("p", {
|
|
83
|
-
className: "text-xs text-
|
|
95
|
+
className: "text-xs text-text-secondary",
|
|
84
96
|
children: e.provider
|
|
85
97
|
})] }), /* @__PURE__ */ a(s, {
|
|
86
98
|
variant: e.status === "active" ? "default" : e.status === "completed" ? "secondary" : "outline",
|
|
@@ -93,11 +105,11 @@ function f() {
|
|
|
93
105
|
children: [
|
|
94
106
|
/* @__PURE__ */ o("span", { children: ["Total: $", e.amount.toLocaleString()] }),
|
|
95
107
|
/* @__PURE__ */ o("span", {
|
|
96
|
-
className: "text-
|
|
108
|
+
className: "text-status-success-text",
|
|
97
109
|
children: ["Released: $", e.released.toLocaleString()]
|
|
98
110
|
}),
|
|
99
111
|
/* @__PURE__ */ o("span", {
|
|
100
|
-
className: "text-
|
|
112
|
+
className: "text-text-secondary",
|
|
101
113
|
children: ["Held: $", (e.amount - e.released).toLocaleString()]
|
|
102
114
|
})
|
|
103
115
|
]
|
|
@@ -113,9 +125,9 @@ function f() {
|
|
|
113
125
|
e.milestones
|
|
114
126
|
] }), /* @__PURE__ */ o("span", { children: [t, "%"] })]
|
|
115
127
|
}), /* @__PURE__ */ a("div", {
|
|
116
|
-
className: "h-2 overflow-hidden rounded bg-
|
|
128
|
+
className: "h-2 overflow-hidden rounded bg-bg-sunken",
|
|
117
129
|
children: /* @__PURE__ */ a("div", {
|
|
118
|
-
className: "h-2 rounded bg-
|
|
130
|
+
className: "h-2 rounded bg-status-success-text",
|
|
119
131
|
style: { width: `${t}%` }
|
|
120
132
|
})
|
|
121
133
|
})]
|
|
@@ -128,6 +140,6 @@ function f() {
|
|
|
128
140
|
});
|
|
129
141
|
}
|
|
130
142
|
//#endregion
|
|
131
|
-
export {
|
|
143
|
+
export { m as PaymentsEscrowPagePage };
|
|
132
144
|
|
|
133
145
|
//# sourceMappingURL=PaymentsEscrowPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentsEscrowPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsEscrowPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"PaymentsEscrowPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsEscrowPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { DollarSign, Lock, ShieldCheck } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype EscrowTransaction = {\n id: string;\n project: string;\n provider: string;\n amount: number;\n released: number;\n status: 'active' | 'funded' | 'completed';\n milestones: number;\n completedMilestones: number;\n};\n\nexport function PaymentsEscrowPagePage() {\n const { projects, invoices, payrollRecords } = useCrewFoundryStore();\n\n const escrowTransactions = useMemo<EscrowTransaction[]>(() => {\n return projects.slice(0, 10).map((project, index) => {\n const invoice = invoices[index % Math.max(invoices.length, 1)];\n const payroll = payrollRecords[index % Math.max(payrollRecords.length, 1)];\n const amount = Math.max(project.budget || 0, invoice?.amount || 0, 1000);\n const released = Math.min(project.spent || 0, amount);\n const completedMilestones = Math.max(0, Math.round((project.progress / 100) * 5));\n const milestones = Math.max(completedMilestones + 1, 3);\n const status: EscrowTransaction['status'] =\n released >= amount\n ? 'completed'\n : released > 0\n ? 'active'\n : payroll?.status === 'approved'\n ? 'funded'\n : 'active';\n\n return {\n id: project.id,\n project: project.name,\n provider: payroll?.employeeName || project.managerName,\n amount,\n released,\n status,\n milestones,\n completedMilestones: Math.min(completedMilestones, milestones),\n };\n });\n }, [invoices, payrollRecords, projects]);\n\n const totalEscrow = escrowTransactions.reduce((sum, transaction) => sum + transaction.amount, 0);\n const totalReleased = escrowTransactions.reduce(\n (sum, transaction) => sum + transaction.released,\n 0\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Escrow</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Secure payment holding for service contracts</p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total in Escrow</CardTitle>\n <Lock className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">${totalEscrow.toLocaleString()}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Released</CardTitle>\n <DollarSign className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">${totalReleased.toLocaleString()}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Held</CardTitle>\n <ShieldCheck className=\"h-4 w-4 text-status-info-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n ${(totalEscrow - totalReleased).toLocaleString()}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Escrow Transactions</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {escrowTransactions.map((escrow) => {\n const progress =\n escrow.amount === 0 ? 0 : Math.round((escrow.released / escrow.amount) * 100);\n\n return (\n <div key={escrow.id} className=\"rounded border p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{escrow.project}</p>\n <p className=\"text-xs text-text-secondary\">{escrow.provider}</p>\n </div>\n <Badge\n variant={\n escrow.status === 'active'\n ? 'default'\n : escrow.status === 'completed'\n ? 'secondary'\n : 'outline'\n }\n className=\"text-[10px]\"\n >\n {escrow.status}\n </Badge>\n </div>\n\n <div className=\"flex items-center gap-4 text-sm\">\n <span>Total: ${escrow.amount.toLocaleString()}</span>\n <span className=\"text-status-success-text\">\n Released: ${escrow.released.toLocaleString()}\n </span>\n <span className=\"text-text-secondary\">\n Held: ${(escrow.amount - escrow.released).toLocaleString()}\n </span>\n </div>\n\n <div className=\"mt-2\">\n <div className=\"mb-1 flex justify-between text-xs\">\n <span>\n Milestones: {escrow.completedMilestones}/{escrow.milestones}\n </span>\n <span>{progress}%</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded bg-bg-sunken\">\n <div\n className=\"h-2 rounded bg-status-success-text\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;AAwBA,SAAgB,IAAyB;CACvC,IAAM,EAAE,aAAU,aAAU,sBAAmB,GAAqB,EAE9D,IAAqB,QAClB,EAAS,MAAM,GAAG,GAAG,CAAC,KAAK,GAAS,MAAU;EACnD,IAAM,IAAU,EAAS,IAAQ,KAAK,IAAI,EAAS,QAAQ,EAAE,GACvD,IAAU,EAAe,IAAQ,KAAK,IAAI,EAAe,QAAQ,EAAE,GACnE,IAAS,KAAK,IAAI,EAAQ,UAAU,GAAG,GAAS,UAAU,GAAG,IAAK,EAClE,IAAW,KAAK,IAAI,EAAQ,SAAS,GAAG,EAAO,EAC/C,IAAsB,KAAK,IAAI,GAAG,KAAK,MAAO,EAAQ,WAAW,MAAO,EAAE,CAAC,EAC3E,IAAa,KAAK,IAAI,IAAsB,GAAG,EAAE,EACjD,IACJ,KAAY,IACR,cACA,IAAW,IACT,WACA,GAAS,WAAW,aAClB,WACA;AAEV,SAAO;GACL,IAAI,EAAQ;GACZ,SAAS,EAAQ;GACjB,UAAU,GAAS,gBAAgB,EAAQ;GAC3C;GACA;GACA;GACA;GACA,qBAAqB,KAAK,IAAI,GAAqB,EAAW;GAC/D;GACD,EACD;EAAC;EAAU;EAAgB;EAAS,CAAC,EAElC,IAAc,EAAmB,QAAQ,GAAK,MAAgB,IAAM,EAAY,QAAQ,EAAE,EAC1F,IAAgB,EAAmB,QACtC,GAAK,MAAgB,IAAM,EAAY,UACxC,EACD;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,UAAqB,CAAA;IAChC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAgD,CAAA,CACvF,EAAA,CAAA;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MAAW,WAAU;MAAS,WAAU;gBAAxC,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD;QAAW,WAAU;kBAAsB;QAA2B,CAAA,EACtE,kBAAC,GAAD,EAAM,WAAU,+BAAgC,CAAA,CACrC;UACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CAAiD,KAAE,EAAY,gBAAgB,CAAO;UAC1E,CAAA,CACJ;;KACZ,kBAAC,GAAD;MAAW,WAAU;MAAS,WAAU;gBAAxC,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD;QAAW,WAAU;kBAAsB;QAAoB,CAAA,EAC/D,kBAAC,GAAD,EAAY,WAAU,oCAAqC,CAAA,CAChD;UACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CAAiD,KAAE,EAAc,gBAAgB,CAAO;UAC5E,CAAA,CACJ;;KACZ,kBAAC,GAAD;MAAW,WAAU;MAAS,WAAU;gBAAxC,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD;QAAW,WAAU;kBAAsB;QAAgB,CAAA,EAC3D,kBAAC,GAAD,EAAa,WAAU,iCAAkC,CAAA,CAC9C;UACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CAAiD,MAC5C,IAAc,GAAe,gBAAgB,CAC5C;UACM,CAAA,CACJ;;KACR;;GAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,uBAA+B,CAAA,EAC/B,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAmB,KAAK,MAAW;KAClC,IAAM,IACJ,EAAO,WAAW,IAAI,IAAI,KAAK,MAAO,EAAO,WAAW,EAAO,SAAU,IAAI;AAE/E,YACE,kBAAC,OAAD;MAAqB,WAAU;gBAA/B;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAuB,EAAO;SAAY,CAAA,EACvD,kBAAC,KAAD;SAAG,WAAU;mBAA+B,EAAO;SAAa,CAAA,CAC5D,EAAA,CAAA,EACN,kBAAC,GAAD;SACE,SACE,EAAO,WAAW,WACd,YACA,EAAO,WAAW,cAChB,cACA;SAER,WAAU;mBAET,EAAO;SACF,CAAA,CACJ;;OAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,QAAD,EAAA,UAAA,CAAM,YAAS,EAAO,OAAO,gBAAgB,CAAQ,EAAA,CAAA;SACrD,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CAA2C,eAC7B,EAAO,SAAS,gBAAgB,CACvC;;SACP,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CAAsC,YAC3B,EAAO,SAAS,EAAO,UAAU,gBAAgB,CACrD;;SACH;;OAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD,EAAA,UAAA;UAAM;UACS,EAAO;UAAoB;UAAE,EAAO;UAC5C,EAAA,CAAA,EACP,kBAAC,QAAD,EAAA,UAAA,CAAO,GAAS,IAAQ,EAAA,CAAA,CACpB;YACN,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UACE,WAAU;UACV,OAAO,EAAE,OAAO,GAAG,EAAS,IAAI;UAChC,CAAA;SACE,CAAA,CACF;;OACF;QA5CI,EAAO,GA4CX;MAER;IACU,CAAA,CACT,EAAA,CAAA;GACH"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { Plus as t } from "lucide-react";
|
|
3
3
|
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
-
import { Badge as i, Button as a, Card as o, CardContent as s } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
import { Badge as i, Button as a, Card as o, CardContent as s, GradientText as c } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { invoices:
|
|
6
|
+
function l() {
|
|
7
|
+
let { invoices: l } = e();
|
|
8
8
|
return /* @__PURE__ */ r("div", {
|
|
9
9
|
className: "space-y-6 p-6",
|
|
10
10
|
children: [/* @__PURE__ */ r("div", {
|
|
11
11
|
className: "flex items-center justify-between",
|
|
12
12
|
children: [/* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("h1", {
|
|
13
13
|
className: "text-2xl font-semibold",
|
|
14
|
-
children: "Invoices"
|
|
14
|
+
children: /* @__PURE__ */ n(c, { children: "Invoices" })
|
|
15
15
|
}), /* @__PURE__ */ r("p", {
|
|
16
|
-
className: "text-sm text-
|
|
17
|
-
children: [
|
|
16
|
+
className: "text-sm text-text-secondary",
|
|
17
|
+
children: [l.length, " invoices"]
|
|
18
18
|
})] }), /* @__PURE__ */ r(a, {
|
|
19
19
|
size: "sm",
|
|
20
20
|
children: [/* @__PURE__ */ n(t, { className: "h-4 w-4 mr-1" }), "Create Invoice"]
|
|
@@ -22,7 +22,7 @@ function c() {
|
|
|
22
22
|
}), /* @__PURE__ */ n(o, { children: /* @__PURE__ */ r(s, {
|
|
23
23
|
className: "p-0",
|
|
24
24
|
children: [/* @__PURE__ */ r("div", {
|
|
25
|
-
className: "grid grid-cols-6 gap-2 text-xs font-medium text-
|
|
25
|
+
className: "grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b",
|
|
26
26
|
children: [
|
|
27
27
|
/* @__PURE__ */ n("span", { children: "Invoice #" }),
|
|
28
28
|
/* @__PURE__ */ n("span", { children: "Client" }),
|
|
@@ -37,19 +37,19 @@ function c() {
|
|
|
37
37
|
children: "Status"
|
|
38
38
|
})
|
|
39
39
|
]
|
|
40
|
-
}),
|
|
41
|
-
className: "grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-
|
|
40
|
+
}), l.map((e) => /* @__PURE__ */ r("div", {
|
|
41
|
+
className: "grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50",
|
|
42
42
|
children: [
|
|
43
43
|
/* @__PURE__ */ n("span", {
|
|
44
44
|
className: "font-medium",
|
|
45
45
|
children: e.number
|
|
46
46
|
}),
|
|
47
47
|
/* @__PURE__ */ n("span", {
|
|
48
|
-
className: "text-
|
|
48
|
+
className: "text-text-secondary",
|
|
49
49
|
children: e.clientName
|
|
50
50
|
}),
|
|
51
51
|
/* @__PURE__ */ n("div", {
|
|
52
|
-
className: "text-xs text-
|
|
52
|
+
className: "text-xs text-text-secondary",
|
|
53
53
|
children: e.items.map((e) => e.description).join(", ")
|
|
54
54
|
}),
|
|
55
55
|
/* @__PURE__ */ r("span", {
|
|
@@ -57,7 +57,7 @@ function c() {
|
|
|
57
57
|
children: ["$", e.amount.toLocaleString()]
|
|
58
58
|
}),
|
|
59
59
|
/* @__PURE__ */ n("span", {
|
|
60
|
-
className: "text-
|
|
60
|
+
className: "text-text-secondary",
|
|
61
61
|
children: e.dueDate
|
|
62
62
|
}),
|
|
63
63
|
/* @__PURE__ */ n("div", {
|
|
@@ -74,6 +74,6 @@ function c() {
|
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
76
|
//#endregion
|
|
77
|
-
export {
|
|
77
|
+
export { l as PaymentsInvoicesPagePage };
|
|
78
78
|
|
|
79
79
|
//# sourceMappingURL=PaymentsInvoicesPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentsInvoicesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"PaymentsInvoicesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { FileText, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function PaymentsInvoicesPagePage() {\n const { invoices } = useCrewFoundryStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Invoices</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{invoices.length} invoices</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n Create Invoice\n </Button>\n </div>\n <Card>\n <CardContent className=\"p-0\">\n <div className=\"grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b\">\n <span>Invoice #</span>\n <span>Client</span>\n <span>Items</span>\n <span className=\"text-right\">Amount</span>\n <span>Due Date</span>\n <span className=\"text-center\">Status</span>\n </div>\n {invoices.map((inv) => (\n <div\n key={inv.id}\n className=\"grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50\"\n >\n <span className=\"font-medium\">{inv.number}</span>\n <span className=\"text-text-secondary\">{inv.clientName}</span>\n <div className=\"text-xs text-text-secondary\">\n {inv.items.map((i) => i.description).join(', ')}\n </div>\n <span className=\"text-right font-medium\">${inv.amount.toLocaleString()}</span>\n <span className=\"text-text-secondary\">{inv.dueDate}</span>\n <div className=\"text-center\">\n <Badge\n variant={\n inv.status === 'paid'\n ? 'default'\n : inv.status === 'overdue'\n ? 'destructive'\n : inv.status === 'draft'\n ? 'outline'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {inv.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAgB,IAA2B;CACzC,IAAM,EAAE,gBAAa,GAAqB;AAE1C,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,YAAuB,CAAA;IAClC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA4C,EAAS,QAAO,YAAa;MACrE,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;cAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,iBAE1B;MACL;MACN,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GAAa,WAAU;aAAvB,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD,EAAA,UAAM,aAAgB,CAAA;KACtB,kBAAC,QAAD,EAAA,UAAM,UAAa,CAAA;KACnB,kBAAC,QAAD,EAAA,UAAM,SAAY,CAAA;KAClB,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAa,CAAA;KAC1C,kBAAC,QAAD,EAAA,UAAM,YAAe,CAAA;KACrB,kBAAC,QAAD;MAAM,WAAU;gBAAc;MAAa,CAAA;KACvC;OACL,EAAS,KAAK,MACb,kBAAC,OAAD;IAEE,WAAU;cAFZ;KAIE,kBAAC,QAAD;MAAM,WAAU;gBAAe,EAAI;MAAc,CAAA;KACjD,kBAAC,QAAD;MAAM,WAAU;gBAAuB,EAAI;MAAkB,CAAA;KAC7D,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAI,MAAM,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK;MAC3C,CAAA;KACN,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CAAyC,KAAE,EAAI,OAAO,gBAAgB,CAAQ;;KAC9E,kBAAC,QAAD;MAAM,WAAU;gBAAuB,EAAI;MAAe,CAAA;KAC1D,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACE,SACE,EAAI,WAAW,SACX,YACA,EAAI,WAAW,YACb,gBACA,EAAI,WAAW,UACb,YACA;OAEV,WAAU;iBAET,EAAI;OACC,CAAA;MACJ,CAAA;KACF;MA1BC,EAAI,GA0BL,CACN,CACU;MACT,CAAA,CACH"}
|