@burdenoff/microfe-timecampus 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/timecampus/components/ErrorBoundary.js +4 -4
- package/dist/timecampus/components/ErrorBoundary.js.map +1 -1
- package/dist/timecampus/components/LoadingSkeleton.js +8 -8
- package/dist/timecampus/components/LoadingSkeleton.js.map +1 -1
- package/dist/timecampus/components/PageLayout.js +17 -13
- package/dist/timecampus/components/PageLayout.js.map +1 -1
- package/dist/timecampus/components/StatCard.js +22 -19
- package/dist/timecampus/components/StatCard.js.map +1 -1
- package/dist/timecampus/pages/HomePage.js +183 -163
- package/dist/timecampus/pages/HomePage.js.map +1 -1
- package/dist/timecampus/pages/applets/AppletStorePage.js +17 -17
- package/dist/timecampus/pages/applets/AppletStorePage.js.map +1 -1
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js +18 -18
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js.map +1 -1
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +28 -28
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js.map +1 -1
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js +19 -19
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/channels/ChannelsPage.js +15 -15
- package/dist/timecampus/pages/channels/ChannelsPage.js.map +1 -1
- package/dist/timecampus/pages/client-portal/ClientPortalPage.js +22 -22
- package/dist/timecampus/pages/client-portal/ClientPortalPage.js.map +1 -1
- package/dist/timecampus/pages/dashboard/AnalyticsPage.js +20 -20
- package/dist/timecampus/pages/dashboard/AnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/dashboard/ReportsPage.js +20 -20
- package/dist/timecampus/pages/dashboard/ReportsPage.js.map +1 -1
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js +18 -18
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js +22 -22
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js +14 -14
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +22 -22
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/focus-score/FocusScorePage.js +27 -27
- package/dist/timecampus/pages/focus-score/FocusScorePage.js.map +1 -1
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js +19 -19
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/geofencing/GeofencingPage.js +16 -16
- package/dist/timecampus/pages/geofencing/GeofencingPage.js.map +1 -1
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js +18 -18
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js +16 -16
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js.map +1 -1
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js +21 -21
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js.map +1 -1
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +22 -22
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js +18 -18
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingCreatePage.js +16 -16
- package/dist/timecampus/pages/meetings/MeetingCreatePage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingDetailPage.js +29 -29
- package/dist/timecampus/pages/meetings/MeetingDetailPage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingsPage.js +20 -20
- package/dist/timecampus/pages/meetings/MeetingsPage.js.map +1 -1
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js +23 -23
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/pomodoro/PomodoroPage.js +23 -23
- package/dist/timecampus/pages/pomodoro/PomodoroPage.js.map +1 -1
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js +30 -30
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/projects/ProjectCreatePage.js +19 -19
- package/dist/timecampus/pages/projects/ProjectCreatePage.js.map +1 -1
- package/dist/timecampus/pages/projects/ProjectDetailPage.js +23 -23
- package/dist/timecampus/pages/projects/ProjectDetailPage.js.map +1 -1
- package/dist/timecampus/pages/projects/ProjectsPage.js +20 -20
- package/dist/timecampus/pages/projects/ProjectsPage.js.map +1 -1
- package/dist/timecampus/pages/projects/TasksPage.js +15 -15
- package/dist/timecampus/pages/projects/TasksPage.js.map +1 -1
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +25 -25
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -1
- package/dist/timecampus/pages/team/TeamAnalyticsPage.js +19 -19
- package/dist/timecampus/pages/team/TeamAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/team/TeamMembersPage.js +21 -21
- package/dist/timecampus/pages/team/TeamMembersPage.js.map +1 -1
- package/dist/timecampus/pages/team/TeamPage.js +19 -19
- package/dist/timecampus/pages/team/TeamPage.js.map +1 -1
- package/dist/timecampus/pages/team-activity/TeamActivityPage.js +21 -21
- package/dist/timecampus/pages/team-activity/TeamActivityPage.js.map +1 -1
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js +20 -20
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js.map +1 -1
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js +16 -16
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js.map +1 -1
- package/dist/timecampus/pages/templates/TemplateDetailPage.js +21 -21
- package/dist/timecampus/pages/templates/TemplateDetailPage.js.map +1 -1
- package/dist/timecampus/pages/templates/TemplatesPage.js +16 -16
- package/dist/timecampus/pages/templates/TemplatesPage.js.map +1 -1
- package/dist/timecampus/pages/time/TimeEntriesPage.js +25 -25
- package/dist/timecampus/pages/time/TimeEntriesPage.js.map +1 -1
- package/dist/timecampus/pages/time/TimeTrackingPage.js +24 -24
- package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/time/TimerPage.js +20 -20
- package/dist/timecampus/pages/time/TimerPage.js.map +1 -1
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +27 -27
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.js.map +1 -1
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js +20 -20
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js.map +1 -1
- package/dist/timecampus/pages/widgets/WidgetsPage.js +18 -18
- package/dist/timecampus/pages/widgets/WidgetsPage.js.map +1 -1
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +23 -23
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -1
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js +19 -19
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/workflows/WorkflowsPage.js +17 -17
- package/dist/timecampus/pages/workflows/WorkflowsPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -26,15 +26,15 @@ var a = class extends e {
|
|
|
26
26
|
};
|
|
27
27
|
render() {
|
|
28
28
|
return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ i("div", {
|
|
29
|
-
className: "flex flex-col items-center justify-center rounded-lg border border-dashed border-
|
|
29
|
+
className: "flex flex-col items-center justify-center rounded-lg border border-dashed border-status-error-bg/50 bg-status-error-bg p-12 text-center",
|
|
30
30
|
children: [
|
|
31
|
-
/* @__PURE__ */ r(t, { className: "mb-4 h-12 w-12 text-
|
|
31
|
+
/* @__PURE__ */ r(t, { className: "mb-4 h-12 w-12 text-status-error-text" }),
|
|
32
32
|
/* @__PURE__ */ r("h3", {
|
|
33
|
-
className: "text-lg font-medium text-
|
|
33
|
+
className: "text-lg font-medium text-text-primary",
|
|
34
34
|
children: "Something went wrong"
|
|
35
35
|
}),
|
|
36
36
|
/* @__PURE__ */ r("p", {
|
|
37
|
-
className: "mt-1 max-w-md text-sm text-
|
|
37
|
+
className: "mt-1 max-w-md text-sm text-text-secondary",
|
|
38
38
|
children: this.state.error?.message ?? "An unexpected error occurred while rendering this section."
|
|
39
39
|
}),
|
|
40
40
|
/* @__PURE__ */ i("button", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorBoundary.js","names":[],"sources":["../../../src/timecampus/components/ErrorBoundary.tsx"],"sourcesContent":["import { Component, type ReactNode, type ErrorInfo } from \"react\";\nimport { AlertTriangle, RefreshCw } from \"lucide-react\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\"[TimeCampus ErrorBoundary]\", error, errorInfo);\n }\n\n handleReset = () => {\n this.setState({ hasError: false, error: null });\n };\n\n render() {\n if (this.state.hasError) {\n if (this.props.fallback) return this.props.fallback;\n\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed border-
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","names":[],"sources":["../../../src/timecampus/components/ErrorBoundary.tsx"],"sourcesContent":["import { Component, type ReactNode, type ErrorInfo } from \"react\";\nimport { AlertTriangle, RefreshCw } from \"lucide-react\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\"[TimeCampus ErrorBoundary]\", error, errorInfo);\n }\n\n handleReset = () => {\n this.setState({ hasError: false, error: null });\n };\n\n render() {\n if (this.state.hasError) {\n if (this.props.fallback) return this.props.fallback;\n\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed border-status-error-bg/50 bg-status-error-bg p-12 text-center\">\n <AlertTriangle className=\"mb-4 h-12 w-12 text-status-error-text\" />\n <h3 className=\"text-lg font-medium text-text-primary\">\n Something went wrong\n </h3>\n <p className=\"mt-1 max-w-md text-sm text-text-secondary\">\n {this.state.error?.message ??\n \"An unexpected error occurred while rendering this section.\"}\n </p>\n <button\n onClick={this.handleReset}\n className=\"mt-4 flex items-center gap-1.5 rounded-md bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90\"\n >\n <RefreshCw className=\"h-4 w-4\" /> Try Again\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n"],"mappings":";;;;AAaA,IAAa,IAAb,cAAmC,EAGjC;CACA,YAAY,GAA2B;AAErC,EADA,MAAM,EAAM,EACZ,KAAK,QAAQ;GAAE,UAAU;GAAO,OAAO;GAAM;;CAG/C,OAAO,yBAAyB,GAAkC;AAChE,SAAO;GAAE,UAAU;GAAM;GAAO;;CAGlC,kBAAkB,GAAc,GAAsB;AACpD,UAAQ,MAAM,8BAA8B,GAAO,EAAU;;CAG/D,oBAAoB;AAClB,OAAK,SAAS;GAAE,UAAU;GAAO,OAAO;GAAM,CAAC;;CAGjD,SAAS;AAwBP,SAvBI,KAAK,MAAM,WACT,KAAK,MAAM,WAAiB,KAAK,MAAM,WAGzC,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD,EAAe,WAAU,yCAA0C,CAAA;IACnE,kBAAC,MAAD;KAAI,WAAU;eAAwC;KAEjD,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eACV,KAAK,MAAM,OAAO,WACjB;KACA,CAAA;IACJ,kBAAC,UAAD;KACE,SAAS,KAAK;KACd,WAAU;eAFZ,CAIE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,aAC1B;;IACL;OAIH,KAAK,MAAM"}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { cn as e } from "../utils/helpers.js";
|
|
2
2
|
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
3
|
//#region src/timecampus/components/LoadingSkeleton.tsx
|
|
4
|
-
var r = ({ className: n }) => /* @__PURE__ */ t("div", { className: e("
|
|
4
|
+
var r = ({ className: n }) => /* @__PURE__ */ t("div", { className: e("relative overflow-hidden rounded-md bg-bg-sunken", "after:absolute after:inset-0 after:-translate-x-full after:bg-gradient-to-r after:from-transparent after:via-bg-surface/60 after:to-transparent motion-safe:after:animate-vc-shimmer", n) }), i = ({ variant: i = "card", count: a = 3, className: o }) => i === "table" ? /* @__PURE__ */ t("div", {
|
|
5
5
|
className: e("space-y-3", o),
|
|
6
6
|
children: /* @__PURE__ */ n("div", {
|
|
7
|
-
className: "overflow-hidden rounded-lg border border-border",
|
|
7
|
+
className: "overflow-hidden rounded-lg border border-border-subtle",
|
|
8
8
|
children: [/* @__PURE__ */ t("div", {
|
|
9
|
-
className: "border-b border-border bg-
|
|
9
|
+
className: "border-b border-border-subtle bg-bg-sunken/50 px-4 py-3",
|
|
10
10
|
children: /* @__PURE__ */ t("div", {
|
|
11
11
|
className: "flex gap-4",
|
|
12
12
|
children: Array.from({ length: 5 }).map((e, n) => /* @__PURE__ */ t(r, { className: "h-4 w-20" }, n))
|
|
13
13
|
})
|
|
14
14
|
}), Array.from({ length: a }).map((e, n) => /* @__PURE__ */ t("div", {
|
|
15
|
-
className: "flex gap-4 border-b border-border px-4 py-3 last:border-b-0",
|
|
15
|
+
className: "flex gap-4 border-b border-border-subtle px-4 py-3 last:border-b-0",
|
|
16
16
|
children: Array.from({ length: 5 }).map((e, n) => /* @__PURE__ */ t(r, { className: "h-4 w-20" }, n))
|
|
17
17
|
}, n))]
|
|
18
18
|
})
|
|
19
19
|
}) : i === "list" ? /* @__PURE__ */ t("div", {
|
|
20
20
|
className: e("space-y-2", o),
|
|
21
21
|
children: Array.from({ length: a }).map((e, i) => /* @__PURE__ */ n("div", {
|
|
22
|
-
className: "flex items-center gap-3 rounded-lg border border-border p-4",
|
|
22
|
+
className: "flex items-center gap-3 rounded-lg border border-border-subtle p-4",
|
|
23
23
|
children: [
|
|
24
24
|
/* @__PURE__ */ t(r, { className: "h-10 w-10 rounded-full" }),
|
|
25
25
|
/* @__PURE__ */ n("div", {
|
|
@@ -39,12 +39,12 @@ var r = ({ className: n }) => /* @__PURE__ */ t("div", { className: e("animate-p
|
|
|
39
39
|
/* @__PURE__ */ t("div", {
|
|
40
40
|
className: "grid gap-4 sm:grid-cols-3",
|
|
41
41
|
children: Array.from({ length: 3 }).map((e, i) => /* @__PURE__ */ n("div", {
|
|
42
|
-
className: "rounded-lg border border-border p-4",
|
|
42
|
+
className: "rounded-lg border border-border-subtle p-4",
|
|
43
43
|
children: [/* @__PURE__ */ t(r, { className: "h-3 w-20" }), /* @__PURE__ */ t(r, { className: "mt-2 h-7 w-16" })]
|
|
44
44
|
}, i))
|
|
45
45
|
}),
|
|
46
46
|
/* @__PURE__ */ n("div", {
|
|
47
|
-
className: "rounded-lg border border-border p-6",
|
|
47
|
+
className: "rounded-lg border border-border-subtle p-6",
|
|
48
48
|
children: [/* @__PURE__ */ t(r, { className: "h-5 w-1/4" }), /* @__PURE__ */ n("div", {
|
|
49
49
|
className: "mt-4 space-y-3",
|
|
50
50
|
children: [
|
|
@@ -58,7 +58,7 @@ var r = ({ className: n }) => /* @__PURE__ */ t("div", { className: e("animate-p
|
|
|
58
58
|
}) : /* @__PURE__ */ t("div", {
|
|
59
59
|
className: e("grid gap-4 sm:grid-cols-2 lg:grid-cols-3", o),
|
|
60
60
|
children: Array.from({ length: a }).map((e, i) => /* @__PURE__ */ n("div", {
|
|
61
|
-
className: "rounded-lg border border-border p-4",
|
|
61
|
+
className: "rounded-lg border border-border-subtle p-4",
|
|
62
62
|
children: [
|
|
63
63
|
/* @__PURE__ */ t(r, { className: "h-4 w-2/3" }),
|
|
64
64
|
/* @__PURE__ */ t(r, { className: "mt-2 h-3 w-1/2" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingSkeleton.js","names":[],"sources":["../../../src/timecampus/components/LoadingSkeleton.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { cn } from \"../utils/helpers\";\n\ninterface SkeletonProps {\n className?: string;\n}\n\nconst Skeleton: FC<SkeletonProps> = ({ className }) => (\n <div
|
|
1
|
+
{"version":3,"file":"LoadingSkeleton.js","names":[],"sources":["../../../src/timecampus/components/LoadingSkeleton.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { cn } from \"../utils/helpers\";\n\ninterface SkeletonProps {\n className?: string;\n}\n\nconst Skeleton: FC<SkeletonProps> = ({ className }) => (\n <div\n className={cn(\n \"relative overflow-hidden rounded-md bg-bg-sunken\",\n \"after:absolute after:inset-0 after:-translate-x-full after:bg-gradient-to-r after:from-transparent after:via-bg-surface/60 after:to-transparent motion-safe:after:animate-vc-shimmer\",\n className,\n )}\n />\n);\n\ninterface LoadingSkeletonProps {\n variant?: \"card\" | \"table\" | \"list\" | \"detail\";\n count?: number;\n className?: string;\n}\n\nexport const LoadingSkeleton: FC<LoadingSkeletonProps> = ({\n variant = \"card\",\n count = 3,\n className,\n}) => {\n if (variant === \"table\") {\n return (\n <div className={cn(\"space-y-3\", className)}>\n <div className=\"overflow-hidden rounded-lg border border-border-subtle\">\n <div className=\"border-b border-border-subtle bg-bg-sunken/50 px-4 py-3\">\n <div className=\"flex gap-4\">\n {Array.from({ length: 5 }).map((_, i) => (\n <Skeleton key={i} className=\"h-4 w-20\" />\n ))}\n </div>\n </div>\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n className=\"flex gap-4 border-b border-border-subtle px-4 py-3 last:border-b-0\"\n >\n {Array.from({ length: 5 }).map((_, j) => (\n <Skeleton key={j} className=\"h-4 w-20\" />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n if (variant === \"list\") {\n return (\n <div className={cn(\"space-y-2\", className)}>\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle p-4\"\n >\n <Skeleton className=\"h-10 w-10 rounded-full\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"h-3 w-2/3\" />\n </div>\n <Skeleton className=\"h-6 w-16 rounded-full\" />\n </div>\n ))}\n </div>\n );\n }\n\n if (variant === \"detail\") {\n return (\n <div className={cn(\"space-y-6\", className)}>\n <div className=\"space-y-2\">\n <Skeleton className=\"h-8 w-1/3\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n <div className=\"grid gap-4 sm:grid-cols-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"rounded-lg border border-border-subtle p-4\">\n <Skeleton className=\"h-3 w-20\" />\n <Skeleton className=\"mt-2 h-7 w-16\" />\n </div>\n ))}\n </div>\n <div className=\"rounded-lg border border-border-subtle p-6\">\n <Skeleton className=\"h-5 w-1/4\" />\n <div className=\"mt-4 space-y-3\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-5/6\" />\n <Skeleton className=\"h-4 w-4/6\" />\n </div>\n </div>\n </div>\n );\n }\n\n // Default: card grid\n return (\n <div className={cn(\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\", className)}>\n {Array.from({ length: count }).map((_, i) => (\n <div key={i} className=\"rounded-lg border border-border-subtle p-4\">\n <Skeleton className=\"h-4 w-2/3\" />\n <Skeleton className=\"mt-2 h-3 w-1/2\" />\n <Skeleton className=\"mt-4 h-8 w-24\" />\n <div className=\"mt-3 flex justify-between\">\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n <Skeleton className=\"h-7 w-14 rounded-md\" />\n </div>\n </div>\n ))}\n </div>\n );\n};\n"],"mappings":";;;AAOA,IAAM,KAA+B,EAAE,mBACrC,kBAAC,OAAD,EACE,WAAW,EACT,oDACA,wLACA,EACD,EACD,CAAA,EASS,KAA6C,EACxD,aAAU,QACV,WAAQ,GACR,mBAEI,MAAY,UAEZ,kBAAC,OAAD;CAAK,WAAW,EAAG,aAAa,EAAU;WACxC,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,GAAD,EAAkB,WAAU,YAAa,EAA1B,EAA0B,CACzC;IACE,CAAA;GACF,CAAA,EACL,MAAM,KAAK,EAAE,QAAQ,GAAO,CAAC,CAAC,KAAK,GAAG,MACrC,kBAAC,OAAD;GAEE,WAAU;aAET,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,GAAD,EAAkB,WAAU,YAAa,EAA1B,EAA0B,CACzC;GACE,EANC,EAMD,CACN,CACE;;CACF,CAAA,GAIN,MAAY,SAEZ,kBAAC,OAAD;CAAK,WAAW,EAAG,aAAa,EAAU;WACvC,MAAM,KAAK,EAAE,QAAQ,GAAO,CAAC,CAAC,KAAK,GAAG,MACrC,kBAAC,OAAD;EAEE,WAAU;YAFZ;GAIE,kBAAC,GAAD,EAAU,WAAU,0BAA2B,CAAA;GAC/C,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA,EAClC,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA,CAC9B;;GACN,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA;GAC1C;IATC,EASD,CACN;CACE,CAAA,GAIN,MAAY,WAEZ,kBAAC,OAAD;CAAK,WAAW,EAAG,aAAa,EAAU;WAA1C;EACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA,EAClC,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA,CAC9B;;EACN,kBAAC,OAAD;GAAK,WAAU;aACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,OAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,GAAD,EAAU,WAAU,YAAa,CAAA,EACjC,kBAAC,GAAD,EAAU,WAAU,iBAAkB,CAAA,CAClC;MAHI,EAGJ,CACN;GACE,CAAA;EACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA,EAClC,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAU,WAAU,cAAe,CAAA;KACnC,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA;KAClC,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA;KAC9B;MACF;;EACF;KAMR,kBAAC,OAAD;CAAK,WAAW,EAAG,4CAA4C,EAAU;WACtE,MAAM,KAAK,EAAE,QAAQ,GAAO,CAAC,CAAC,KAAK,GAAG,MACrC,kBAAC,OAAD;EAAa,WAAU;YAAvB;GACE,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA;GAClC,kBAAC,GAAD,EAAU,WAAU,kBAAmB,CAAA;GACvC,kBAAC,GAAD,EAAU,WAAU,iBAAkB,CAAA;GACtC,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA,EAC9C,kBAAC,GAAD,EAAU,WAAU,uBAAwB,CAAA,CACxC;;GACF;IARI,EAQJ,CACN;CACE,CAAA"}
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import { cn as e } from "../utils/helpers.js";
|
|
2
2
|
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
import { GradientText as r } from "@burdenoff/fe-libs/ui";
|
|
3
4
|
//#region src/timecampus/components/PageLayout.tsx
|
|
4
|
-
var
|
|
5
|
-
className: e("min-h-full p-4 sm:p-6",
|
|
5
|
+
var i = ({ title: i, description: a, actions: o, children: s, className: c }) => /* @__PURE__ */ n("div", {
|
|
6
|
+
className: e("min-h-full p-4 sm:p-6", c),
|
|
6
7
|
children: [/* @__PURE__ */ n("div", {
|
|
7
8
|
className: "mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
8
|
-
children: [/* @__PURE__ */ n("div", {
|
|
9
|
-
className: "
|
|
10
|
-
children:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
children: [/* @__PURE__ */ n("div", {
|
|
10
|
+
className: "min-w-0",
|
|
11
|
+
children: [/* @__PURE__ */ t("h1", {
|
|
12
|
+
className: "text-2xl font-bold text-text-primary",
|
|
13
|
+
children: /* @__PURE__ */ t(r, { children: i })
|
|
14
|
+
}), a && /* @__PURE__ */ t("p", {
|
|
15
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
16
|
+
children: a
|
|
17
|
+
})]
|
|
18
|
+
}), o && /* @__PURE__ */ t("div", {
|
|
19
|
+
className: "flex flex-wrap items-center gap-2",
|
|
20
|
+
children: o
|
|
17
21
|
})]
|
|
18
|
-
}),
|
|
22
|
+
}), s]
|
|
19
23
|
});
|
|
20
24
|
//#endregion
|
|
21
|
-
export {
|
|
25
|
+
export { i as PageLayout };
|
|
22
26
|
|
|
23
27
|
//# sourceMappingURL=PageLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/timecampus/components/PageLayout.tsx"],"sourcesContent":["import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../utils/helpers\";\n\ninterface PageLayoutProps {\n title: string;\n description?: string;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport const PageLayout: FC<PageLayoutProps> = ({\n title,\n description,\n actions,\n children,\n className,\n}) => {\n return (\n <div className={cn(\"min-h-full p-4 sm:p-6\", className)}>\n <div className=\"mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold text-
|
|
1
|
+
{"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/timecampus/components/PageLayout.tsx"],"sourcesContent":["import type { FC, ReactNode } from \"react\";\nimport { GradientText } from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"../utils/helpers\";\n\ninterface PageLayoutProps {\n title: string;\n description?: string;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport const PageLayout: FC<PageLayoutProps> = ({\n title,\n description,\n actions,\n children,\n className,\n}) => {\n return (\n <div className={cn(\"min-h-full p-4 sm:p-6\", className)}>\n <div className=\"mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{title}</GradientText>\n </h1>\n {description && (\n <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>\n )}\n </div>\n {actions && (\n <div className=\"flex flex-wrap items-center gap-2\">{actions}</div>\n )}\n </div>\n {children}\n </div>\n );\n};\n"],"mappings":";;;;AAYA,IAAa,KAAmC,EAC9C,UACA,gBACA,YACA,aACA,mBAGE,kBAAC,OAAD;CAAK,WAAW,EAAG,yBAAyB,EAAU;WAAtD,CACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAe,GAAqB,CAAA;IACjC,CAAA,EACJ,KACC,kBAAC,KAAD;IAAG,WAAU;cAAoC;IAAgB,CAAA,CAE/D;MACL,KACC,kBAAC,OAAD;GAAK,WAAU;aAAqC;GAAc,CAAA,CAEhE;KACL,EACG"}
|
|
@@ -1,48 +1,51 @@
|
|
|
1
1
|
import { cn as e } from "../utils/helpers.js";
|
|
2
2
|
import { ArrowDown as t, ArrowUp as n } from "lucide-react";
|
|
3
3
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
import { GlassCard as a } from "@burdenoff/fe-libs/ui";
|
|
4
5
|
//#region src/timecampus/components/StatCard.tsx
|
|
5
|
-
var
|
|
6
|
-
|
|
6
|
+
var o = ({ title: o, value: s, icon: c, trend: l, description: u, className: d, iconBgColor: f, featured: p = !1 }) => /* @__PURE__ */ r(a, {
|
|
7
|
+
treatment: p ? "glass" : "metric",
|
|
8
|
+
glow: p,
|
|
9
|
+
className: e("p-4 sm:p-6", d),
|
|
7
10
|
children: /* @__PURE__ */ i("div", {
|
|
8
11
|
className: "flex items-start justify-between",
|
|
9
12
|
children: [/* @__PURE__ */ i("div", {
|
|
10
13
|
className: "flex-1 min-w-0",
|
|
11
14
|
children: [
|
|
12
15
|
/* @__PURE__ */ r("p", {
|
|
13
|
-
className: "text-sm font-medium text-
|
|
14
|
-
children:
|
|
16
|
+
className: "text-sm font-medium text-text-secondary truncate",
|
|
17
|
+
children: o
|
|
15
18
|
}),
|
|
16
19
|
/* @__PURE__ */ r("p", {
|
|
17
|
-
className: "mt-2 text-2xl font-bold text-
|
|
18
|
-
children:
|
|
20
|
+
className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
|
|
21
|
+
children: s
|
|
19
22
|
}),
|
|
20
|
-
|
|
23
|
+
l && /* @__PURE__ */ i("div", {
|
|
21
24
|
className: "mt-2 flex items-center gap-1",
|
|
22
25
|
children: [
|
|
23
|
-
|
|
26
|
+
l.value >= 0 ? /* @__PURE__ */ r(n, { className: "h-3 w-3 text-status-success-text" }) : /* @__PURE__ */ r(t, { className: "h-3 w-3 text-status-error-text" }),
|
|
24
27
|
/* @__PURE__ */ i("span", {
|
|
25
|
-
className: e("text-xs font-medium",
|
|
26
|
-
children: [Math.abs(
|
|
28
|
+
className: e("text-xs font-medium tabular-nums", l.value >= 0 ? "text-status-success-text" : "text-status-error-text"),
|
|
29
|
+
children: [Math.abs(l.value), "%"]
|
|
27
30
|
}),
|
|
28
31
|
/* @__PURE__ */ r("span", {
|
|
29
|
-
className: "text-xs text-
|
|
30
|
-
children:
|
|
32
|
+
className: "text-xs text-text-secondary",
|
|
33
|
+
children: l.label
|
|
31
34
|
})
|
|
32
35
|
]
|
|
33
36
|
}),
|
|
34
|
-
|
|
35
|
-
className: "mt-1 text-xs text-
|
|
36
|
-
children:
|
|
37
|
+
u && /* @__PURE__ */ r("p", {
|
|
38
|
+
className: "mt-1 text-xs text-text-secondary",
|
|
39
|
+
children: u
|
|
37
40
|
})
|
|
38
41
|
]
|
|
39
|
-
}),
|
|
40
|
-
className: e("flex h-10 w-10 shrink-0 items-center justify-center rounded-lg",
|
|
41
|
-
children:
|
|
42
|
+
}), c && /* @__PURE__ */ r("div", {
|
|
43
|
+
className: e("flex h-10 w-10 shrink-0 items-center justify-center rounded-lg", f || "bg-action-primary-bg/10 text-primary"),
|
|
44
|
+
children: c
|
|
42
45
|
})]
|
|
43
46
|
})
|
|
44
47
|
});
|
|
45
48
|
//#endregion
|
|
46
|
-
export {
|
|
49
|
+
export { o as StatCard };
|
|
47
50
|
|
|
48
51
|
//# sourceMappingURL=StatCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatCard.js","names":[],"sources":["../../../src/timecampus/components/StatCard.tsx"],"sourcesContent":["import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../utils/helpers\";\nimport { ArrowUp, ArrowDown } from \"lucide-react\";\n\ninterface StatCardProps {\n title: string;\n value: string | number;\n icon?: ReactNode;\n trend?: { value: number; label: string };\n description?: string;\n className?: string;\n iconBgColor?: string;\n}\n\nexport const StatCard: FC<StatCardProps> = ({\n title,\n value,\n icon,\n trend,\n description,\n className,\n iconBgColor,\n}) => {\n return (\n <
|
|
1
|
+
{"version":3,"file":"StatCard.js","names":[],"sources":["../../../src/timecampus/components/StatCard.tsx"],"sourcesContent":["import type { FC, ReactNode } from \"react\";\nimport { GlassCard } from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"../utils/helpers\";\nimport { ArrowUp, ArrowDown } from \"lucide-react\";\n\ninterface StatCardProps {\n title: string;\n value: string | number;\n icon?: ReactNode;\n trend?: { value: number; label: string };\n description?: string;\n className?: string;\n iconBgColor?: string;\n /** Render the featured/hero metric with a richer glass + glow treatment. */\n featured?: boolean;\n}\n\nexport const StatCard: FC<StatCardProps> = ({\n title,\n value,\n icon,\n trend,\n description,\n className,\n iconBgColor,\n featured = false,\n}) => {\n return (\n <GlassCard\n treatment={featured ? \"glass\" : \"metric\"}\n glow={featured}\n className={cn(\"p-4 sm:p-6\", className)}\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-secondary truncate\">\n {title}\n </p>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {value}\n </p>\n {trend && (\n <div className=\"mt-2 flex items-center gap-1\">\n {trend.value >= 0 ? (\n <ArrowUp className=\"h-3 w-3 text-status-success-text\" />\n ) : (\n <ArrowDown className=\"h-3 w-3 text-status-error-text\" />\n )}\n <span\n className={cn(\n \"text-xs font-medium tabular-nums\",\n trend.value >= 0\n ? \"text-status-success-text\"\n : \"text-status-error-text\",\n )}\n >\n {Math.abs(trend.value)}%\n </span>\n <span className=\"text-xs text-text-secondary\">{trend.label}</span>\n </div>\n )}\n {description && (\n <p className=\"mt-1 text-xs text-text-secondary\">{description}</p>\n )}\n </div>\n {icon && (\n <div\n className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg\",\n iconBgColor || \"bg-action-primary-bg/10 text-primary\",\n )}\n >\n {icon}\n </div>\n )}\n </div>\n </GlassCard>\n );\n};\n"],"mappings":";;;;;AAiBA,IAAa,KAA+B,EAC1C,UACA,UACA,SACA,UACA,gBACA,cACA,gBACA,cAAW,SAGT,kBAAC,GAAD;CACE,WAAW,IAAW,UAAU;CAChC,MAAM;CACN,WAAW,EAAG,cAAc,EAAU;WAEtC,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,KAAD;KAAG,WAAU;eACV;KACC,CAAA;IACJ,kBAAC,KAAD;KAAG,WAAU;eACV;KACC,CAAA;IACH,KACC,kBAAC,OAAD;KAAK,WAAU;eAAf;MACG,EAAM,SAAS,IACd,kBAAC,GAAD,EAAS,WAAU,oCAAqC,CAAA,GAExD,kBAAC,GAAD,EAAW,WAAU,kCAAmC,CAAA;MAE1D,kBAAC,QAAD;OACE,WAAW,EACT,oCACA,EAAM,SAAS,IACX,6BACA,yBACL;iBANH,CAQG,KAAK,IAAI,EAAM,MAAM,EAAC,IAClB;;MACP,kBAAC,QAAD;OAAM,WAAU;iBAA+B,EAAM;OAAa,CAAA;MAC9D;;IAEP,KACC,kBAAC,KAAD;KAAG,WAAU;eAAoC;KAAgB,CAAA;IAE/D;MACL,KACC,kBAAC,OAAD;GACE,WAAW,EACT,kEACA,KAAe,uCAChB;aAEA;GACG,CAAA,CAEJ;;CACI,CAAA"}
|