@burdenoff/microfe-assethandler 2026.625.1 → 2026.625.2
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/assethandler/pages/AiPredictionsPage.js +42 -41
- package/dist/assethandler/pages/AiPredictionsPage.js.map +1 -1
- package/dist/assethandler/pages/AnalyticsPage.js +538 -534
- package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +135 -125
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +90 -92
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCreatePage.js +131 -124
- package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.js +214 -185
- package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetEditPage.js +168 -156
- package/dist/assethandler/pages/AssetsAssetEditPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.js +207 -187
- package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js +82 -71
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
- package/dist/assethandler/pages/AuditTrailPage.js +93 -91
- package/dist/assethandler/pages/AuditTrailPage.js.map +1 -1
- package/dist/assethandler/pages/CmdbBrowserPage.js +32 -33
- package/dist/assethandler/pages/CmdbBrowserPage.js.map +1 -1
- package/dist/assethandler/pages/DashboardPage.js +157 -126
- package/dist/assethandler/pages/DashboardPage.js.map +1 -1
- package/dist/assethandler/pages/DigitalTwinPage.js +25 -26
- package/dist/assethandler/pages/DigitalTwinPage.js.map +1 -1
- package/dist/assethandler/pages/DiscoveryJobsPage.js +50 -50
- package/dist/assethandler/pages/DiscoveryJobsPage.js.map +1 -1
- package/dist/assethandler/pages/EsgDashboardPage.js +43 -42
- package/dist/assethandler/pages/EsgDashboardPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js +96 -82
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceFinanceHubPage.js +137 -103
- package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +77 -66
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/IotDevicesPage.js +34 -35
- package/dist/assethandler/pages/IotDevicesPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeDetailPage.js +236 -199
- package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeManagementPage.js +66 -64
- package/dist/assethandler/pages/ItilChangeManagementPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentDetailPage.js +237 -200
- package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentManagementPage.js +99 -97
- package/dist/assethandler/pages/ItilIncidentManagementPage.js.map +1 -1
- package/dist/assethandler/pages/ItilItilhubPage.js +166 -122
- package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemDetailPage.js +193 -156
- package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemManagementPage.js +63 -61
- package/dist/assethandler/pages/ItilProblemManagementPage.js.map +1 -1
- package/dist/assethandler/pages/KnowledgeBasePage.js +45 -43
- package/dist/assethandler/pages/KnowledgeBasePage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +70 -68
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +77 -62
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +162 -151
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +64 -57
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +125 -108
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +67 -61
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +203 -166
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsOperationsHubPage.js +125 -95
- package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +165 -151
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +83 -81
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
- package/dist/assethandler/pages/ProvenancePage.js +56 -53
- package/dist/assethandler/pages/ProvenancePage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportBuilderPage.js +80 -73
- package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js +112 -77
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportsListPage.js +119 -103
- package/dist/assethandler/pages/ReportsReportsListPage.js.map +1 -1
- package/dist/assethandler/pages/SamLicensesPage.js +32 -33
- package/dist/assethandler/pages/SamLicensesPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js +60 -52
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js +134 -117
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js +63 -57
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +131 -117
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityHubPage.js +147 -113
- package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +235 -218
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionListPage.js +118 -116
- package/dist/assethandler/pages/TransactionsTransactionListPage.js.map +1 -1
- package/dist/assethandler/pages/UsersPage.js +108 -99
- package/dist/assethandler/pages/UsersPage.js.map +1 -1
- package/dist/assethandler/pages/UsersUserCreatePage.js +74 -67
- package/dist/assethandler/pages/UsersUserCreatePage.js.map +1 -1
- package/dist/assethandler/pages/UsersUserManagementHubPage.js +128 -93
- package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +211 -193
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +88 -86
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +68 -60
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +71 -68
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowsWorkflowListPage.js","names":[],"sources":["../../../src/assethandler/pages/WorkflowsWorkflowListPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n
|
|
1
|
+
{"version":3,"file":"WorkflowsWorkflowListPage.js","names":[],"sources":["../../../src/assethandler/pages/WorkflowsWorkflowListPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Plus, Play, Pause } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function WorkflowsWorkflowListPage() {\n const navigate = useNavigate();\n const { workflows } = useAssetHandlerStore();\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-bold\">\n <GradientText>Workflows</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{workflows.length} automation workflows</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Workflow\n </Button>\n </div>\n\n <PagePurpose>\n Automate the repetitive parts of asset management — auto-assign incidents, trigger\n maintenance, notify owners — so the system does the busywork. See which automations are\n live, how reliably they run, and pause or resume them as needs change.\n </PagePurpose>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <EmphasisPanel>\n <p className=\"text-sm text-text-secondary\">Active</p>\n <p className=\"text-2xl font-bold tabular-nums text-status-success-text\">\n {workflows.filter((w) => w.status === 'active').length}\n </p>\n </EmphasisPanel>\n <Card>\n <CardContent className=\"pt-4\">\n <p className=\"text-sm text-text-secondary\">Total Runs</p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {workflows.reduce((s, w) => s + w.totalRuns, 0)}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <p className=\"text-sm text-text-secondary\">Avg Success Rate</p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {(\n workflows.reduce((s, w) => s + w.successRate, 0) / Math.max(workflows.length, 1)\n ).toFixed(1)}\n %\n </p>\n </CardContent>\n </Card>\n </div>\n\n {workflows.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"No workflows yet\"\n description=\"Create an automation workflow to handle repetitive asset tasks for you.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/workflows/workflow-builder')}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Workflow\n </Button>\n }\n />\n ) : (\n <Card>\n <CardContent className=\"p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-bg-sunken/50\">\n <th className=\"text-left p-3 font-medium\">Name</th>\n <th className=\"text-left p-3 font-medium\">Category</th>\n <th className=\"text-left p-3 font-medium\">Trigger</th>\n <th className=\"text-left p-3 font-medium\">Status</th>\n <th className=\"text-left p-3 font-medium\">Runs</th>\n <th className=\"text-left p-3 font-medium\">Success Rate</th>\n <th className=\"text-left p-3 font-medium\">Last Run</th>\n <th className=\"p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {workflows.map((wf) => (\n <tr key={wf.id} className=\"border-b hover:bg-bg-sunken/50 cursor-pointer\">\n <td className=\"p-3\">\n <p className=\"font-medium\">{wf.name}</p>\n <p className=\"text-xs text-text-secondary\">{wf.description}</p>\n </td>\n <td className=\"p-3\">\n <Badge variant=\"outline\">{wf.category}</Badge>\n </td>\n <td className=\"p-3 text-xs\">{wf.triggerType}</td>\n <td className=\"p-3\">\n <Badge\n variant={\n wf.status === 'active'\n ? 'default'\n : wf.status === 'paused'\n ? 'secondary'\n : 'outline'\n }\n >\n {wf.status}\n </Badge>\n </td>\n <td className=\"p-3\">{wf.totalRuns}</td>\n <td className=\"p-3\">\n <span\n className={\n wf.successRate >= 95\n ? 'text-status-success-text font-medium'\n : 'text-status-warning-text'\n }\n >\n {wf.successRate}%\n </span>\n </td>\n <td className=\"p-3 text-xs\">\n {wf.lastRun ? new Date(wf.lastRun).toLocaleString() : 'Never'}\n </td>\n <td className=\"p-3\">\n <Button variant=\"ghost\" size=\"sm\">\n {wf.status === 'active' ? (\n <Pause className=\"h-3 w-3\" />\n ) : (\n <Play className=\"h-3 w-3\" />\n )}\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,141 +1,147 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { Download as n, LayoutTemplate as r, Plus as i, Search as a, Star as o, Users as s } from "lucide-react";
|
|
4
|
-
import { Badge as c, Button as l, Card as u, CardContent as d, CardDescription as f, CardFooter as p, CardHeader as m, CardTitle as h, GlassCard as g, GradientText as _,
|
|
5
|
-
import { jsx as
|
|
4
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardDescription as f, CardFooter as p, CardHeader as m, CardTitle as h, GlassCard as g, GradientText as _, IllustratedEmptyState as v, Input as y, PagePurpose as b, Select as x, SelectContent as S, SelectItem as C, SelectTrigger as w, SelectValue as T } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
6
6
|
//#region src/assethandler/pages/WorkflowsWorkflowTemplatesPage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { workflowTemplates:
|
|
9
|
-
return /* @__PURE__ */
|
|
7
|
+
function O() {
|
|
8
|
+
let { workflowTemplates: O } = e(), [k, A] = t(""), [j, M] = t("all"), N = [...new Set(O.map((e) => e.category))], P = O.filter((e) => !(j !== "all" && e.category !== j || k && !e.name.toLowerCase().includes(k.toLowerCase()) && !e.description.toLowerCase().includes(k.toLowerCase()))), F = (e) => Array.from({ length: 5 }, (t, n) => /* @__PURE__ */ E(o, { className: `h-4 w-4 ${n < Math.floor(e) ? "fill-status-warning-bg text-status-warning-text" : "text-text-secondary/30"}` }, n));
|
|
9
|
+
return /* @__PURE__ */ D("div", {
|
|
10
10
|
className: "space-y-6 p-6",
|
|
11
11
|
children: [
|
|
12
|
-
/* @__PURE__ */
|
|
12
|
+
/* @__PURE__ */ D("div", {
|
|
13
13
|
className: "flex items-center justify-between",
|
|
14
|
-
children: [/* @__PURE__ */
|
|
14
|
+
children: [/* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("h1", {
|
|
15
15
|
className: "text-2xl font-semibold",
|
|
16
|
-
children: /* @__PURE__ */
|
|
17
|
-
}), /* @__PURE__ */
|
|
16
|
+
children: /* @__PURE__ */ E(_, { children: "Workflow Templates" })
|
|
17
|
+
}), /* @__PURE__ */ E("p", {
|
|
18
18
|
className: "text-sm text-text-secondary",
|
|
19
19
|
children: "Browse and use pre-built workflow templates to get started quickly."
|
|
20
|
-
})] }), /* @__PURE__ */
|
|
20
|
+
})] }), /* @__PURE__ */ D(l, {
|
|
21
21
|
size: "sm",
|
|
22
|
-
children: [/* @__PURE__ */
|
|
22
|
+
children: [/* @__PURE__ */ E(i, { className: "mr-2 h-4 w-4" }), "Create Template"]
|
|
23
23
|
})]
|
|
24
24
|
}),
|
|
25
|
-
/* @__PURE__ */
|
|
25
|
+
/* @__PURE__ */ E(b, { children: "Skip the blank canvas. Start from a proven, pre-built workflow template — rated and used by others — and adapt it to your needs in minutes. Browse by category, see what is popular, and use a template to stand up an automation fast." }),
|
|
26
|
+
/* @__PURE__ */ D("div", {
|
|
26
27
|
className: "grid gap-4 md:grid-cols-3",
|
|
27
28
|
children: [
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
treatment: "
|
|
29
|
+
/* @__PURE__ */ D(g, {
|
|
30
|
+
treatment: "glass",
|
|
31
|
+
glow: !0,
|
|
30
32
|
className: "border-border-seam",
|
|
31
|
-
children: [/* @__PURE__ */
|
|
33
|
+
children: [/* @__PURE__ */ D(m, {
|
|
32
34
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
33
|
-
children: [/* @__PURE__ */
|
|
35
|
+
children: [/* @__PURE__ */ E(h, {
|
|
34
36
|
className: "text-sm font-medium",
|
|
35
37
|
children: "Total Templates"
|
|
36
|
-
}), /* @__PURE__ */
|
|
37
|
-
}), /* @__PURE__ */
|
|
38
|
+
}), /* @__PURE__ */ E(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
39
|
+
}), /* @__PURE__ */ E(d, { children: /* @__PURE__ */ E("div", {
|
|
38
40
|
className: "text-2xl font-bold tabular-nums",
|
|
39
|
-
children:
|
|
41
|
+
children: O.length
|
|
40
42
|
}) })]
|
|
41
43
|
}),
|
|
42
|
-
/* @__PURE__ */
|
|
44
|
+
/* @__PURE__ */ D(g, {
|
|
43
45
|
treatment: "metric",
|
|
44
46
|
className: "border-border-seam",
|
|
45
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ D(m, {
|
|
46
48
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
47
|
-
children: [/* @__PURE__ */
|
|
49
|
+
children: [/* @__PURE__ */ E(h, {
|
|
48
50
|
className: "text-sm font-medium",
|
|
49
51
|
children: "Most Popular"
|
|
50
|
-
}), /* @__PURE__ */
|
|
51
|
-
}), /* @__PURE__ */
|
|
52
|
+
}), /* @__PURE__ */ E(s, { className: "h-4 w-4 text-text-secondary" })]
|
|
53
|
+
}), /* @__PURE__ */ D(d, { children: [/* @__PURE__ */ E("div", {
|
|
52
54
|
className: "text-2xl font-bold tabular-nums",
|
|
53
|
-
children:
|
|
54
|
-
}), /* @__PURE__ */
|
|
55
|
+
children: O.reduce((e, t) => e + t.usageCount, 0)
|
|
56
|
+
}), /* @__PURE__ */ E("p", {
|
|
55
57
|
className: "text-xs text-text-secondary",
|
|
56
58
|
children: "Total uses across all templates"
|
|
57
59
|
})] })]
|
|
58
60
|
}),
|
|
59
|
-
/* @__PURE__ */
|
|
61
|
+
/* @__PURE__ */ D(g, {
|
|
60
62
|
treatment: "metric",
|
|
61
63
|
className: "border-border-seam",
|
|
62
|
-
children: [/* @__PURE__ */
|
|
64
|
+
children: [/* @__PURE__ */ D(m, {
|
|
63
65
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
64
|
-
children: [/* @__PURE__ */
|
|
66
|
+
children: [/* @__PURE__ */ E(h, {
|
|
65
67
|
className: "text-sm font-medium",
|
|
66
68
|
children: "Average Rating"
|
|
67
|
-
}), /* @__PURE__ */
|
|
68
|
-
}), /* @__PURE__ */
|
|
69
|
+
}), /* @__PURE__ */ E(o, { className: "h-4 w-4 text-status-warning-text" })]
|
|
70
|
+
}), /* @__PURE__ */ E(d, { children: /* @__PURE__ */ E("div", {
|
|
69
71
|
className: "text-2xl font-bold tabular-nums",
|
|
70
|
-
children: (
|
|
72
|
+
children: (O.reduce((e, t) => e + t.rating, 0) / O.length).toFixed(1)
|
|
71
73
|
}) })]
|
|
72
74
|
})
|
|
73
75
|
]
|
|
74
76
|
}),
|
|
75
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ D("div", {
|
|
76
78
|
className: "flex items-center gap-3",
|
|
77
|
-
children: [/* @__PURE__ */
|
|
79
|
+
children: [/* @__PURE__ */ D("div", {
|
|
78
80
|
className: "relative flex-1 max-w-sm",
|
|
79
|
-
children: [/* @__PURE__ */
|
|
81
|
+
children: [/* @__PURE__ */ E(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E(y, {
|
|
80
82
|
placeholder: "Search templates...",
|
|
81
|
-
value:
|
|
82
|
-
onChange: (e) =>
|
|
83
|
+
value: k,
|
|
84
|
+
onChange: (e) => A(e.target.value),
|
|
83
85
|
className: "pl-9"
|
|
84
86
|
})]
|
|
85
|
-
}), /* @__PURE__ */
|
|
86
|
-
value:
|
|
87
|
-
onValueChange:
|
|
88
|
-
children: [/* @__PURE__ */ w
|
|
87
|
+
}), /* @__PURE__ */ D(x, {
|
|
88
|
+
value: j,
|
|
89
|
+
onValueChange: M,
|
|
90
|
+
children: [/* @__PURE__ */ E(w, {
|
|
89
91
|
className: "w-[180px]",
|
|
90
|
-
children: /* @__PURE__ */
|
|
91
|
-
}), /* @__PURE__ */
|
|
92
|
+
children: /* @__PURE__ */ E(T, { placeholder: "Category" })
|
|
93
|
+
}), /* @__PURE__ */ D(S, { children: [/* @__PURE__ */ E(C, {
|
|
92
94
|
value: "all",
|
|
93
95
|
children: "All Categories"
|
|
94
|
-
}),
|
|
96
|
+
}), N.map((e) => /* @__PURE__ */ E(C, {
|
|
95
97
|
value: e,
|
|
96
98
|
children: e
|
|
97
99
|
}, e))] })]
|
|
98
100
|
})]
|
|
99
101
|
}),
|
|
100
|
-
/* @__PURE__ */
|
|
102
|
+
P.length === 0 ? /* @__PURE__ */ E(v, {
|
|
103
|
+
illustration: k || j !== "all" ? "empty-search" : "empty-generic",
|
|
104
|
+
title: "No templates found",
|
|
105
|
+
description: k || j !== "all" ? "No templates match your search or category — try clearing the filters." : "Create a workflow template to share reusable automations with your team."
|
|
106
|
+
}) : /* @__PURE__ */ E("div", {
|
|
101
107
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
102
|
-
children:
|
|
108
|
+
children: P.map((e) => /* @__PURE__ */ D(u, {
|
|
103
109
|
className: "flex flex-col",
|
|
104
110
|
children: [
|
|
105
|
-
/* @__PURE__ */
|
|
106
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ D(m, { children: [
|
|
112
|
+
/* @__PURE__ */ D("div", {
|
|
107
113
|
className: "flex items-start justify-between",
|
|
108
|
-
children: [/* @__PURE__ */
|
|
114
|
+
children: [/* @__PURE__ */ E(c, {
|
|
109
115
|
variant: "outline",
|
|
110
116
|
children: e.category
|
|
111
|
-
}), /* @__PURE__ */
|
|
117
|
+
}), /* @__PURE__ */ E("span", {
|
|
112
118
|
className: "text-xs text-text-secondary",
|
|
113
119
|
children: e.id
|
|
114
120
|
})]
|
|
115
121
|
}),
|
|
116
|
-
/* @__PURE__ */
|
|
122
|
+
/* @__PURE__ */ E(h, {
|
|
117
123
|
className: "text-lg mt-2",
|
|
118
124
|
children: e.name
|
|
119
125
|
}),
|
|
120
|
-
/* @__PURE__ */
|
|
126
|
+
/* @__PURE__ */ E(f, { children: e.description })
|
|
121
127
|
] }),
|
|
122
|
-
/* @__PURE__ */
|
|
128
|
+
/* @__PURE__ */ D(d, {
|
|
123
129
|
className: "flex-1 space-y-3",
|
|
124
130
|
children: [
|
|
125
|
-
/* @__PURE__ */
|
|
131
|
+
/* @__PURE__ */ D("div", {
|
|
126
132
|
className: "flex items-center gap-1",
|
|
127
|
-
children: [
|
|
133
|
+
children: [F(e.rating), /* @__PURE__ */ E("span", {
|
|
128
134
|
className: "ml-2 text-sm text-text-secondary",
|
|
129
135
|
children: e.rating
|
|
130
136
|
})]
|
|
131
137
|
}),
|
|
132
|
-
/* @__PURE__ */
|
|
138
|
+
/* @__PURE__ */ D("div", {
|
|
133
139
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
134
|
-
children: [/* @__PURE__ */
|
|
140
|
+
children: [/* @__PURE__ */ E(s, { className: "h-4 w-4" }), /* @__PURE__ */ D("span", { children: [e.usageCount, " uses"] })]
|
|
135
141
|
}),
|
|
136
|
-
/* @__PURE__ */
|
|
142
|
+
/* @__PURE__ */ E("div", {
|
|
137
143
|
className: "flex flex-wrap gap-1",
|
|
138
|
-
children: e.tags.map((e) => /* @__PURE__ */
|
|
144
|
+
children: e.tags.map((e) => /* @__PURE__ */ E(c, {
|
|
139
145
|
variant: "secondary",
|
|
140
146
|
className: "text-xs",
|
|
141
147
|
children: e
|
|
@@ -143,28 +149,25 @@ function E() {
|
|
|
143
149
|
})
|
|
144
150
|
]
|
|
145
151
|
}),
|
|
146
|
-
/* @__PURE__ */
|
|
152
|
+
/* @__PURE__ */ D(p, {
|
|
147
153
|
className: "gap-2",
|
|
148
|
-
children: [/* @__PURE__ */
|
|
154
|
+
children: [/* @__PURE__ */ E(l, {
|
|
149
155
|
className: "flex-1",
|
|
150
156
|
size: "sm",
|
|
151
157
|
children: "Use Template"
|
|
152
|
-
}), /* @__PURE__ */
|
|
158
|
+
}), /* @__PURE__ */ E(l, {
|
|
153
159
|
variant: "outline",
|
|
154
160
|
size: "sm",
|
|
155
|
-
children: /* @__PURE__ */
|
|
161
|
+
children: /* @__PURE__ */ E(n, { className: "h-4 w-4" })
|
|
156
162
|
})]
|
|
157
163
|
})
|
|
158
164
|
]
|
|
159
|
-
}, e.id))
|
|
160
|
-
className: "col-span-full text-center py-12 text-text-secondary",
|
|
161
|
-
children: "No templates found matching your criteria."
|
|
162
|
-
})]
|
|
165
|
+
}, e.id))
|
|
163
166
|
})
|
|
164
167
|
]
|
|
165
168
|
});
|
|
166
169
|
}
|
|
167
170
|
//#endregion
|
|
168
|
-
export {
|
|
171
|
+
export { O as WorkflowsWorkflowTemplatesPage };
|
|
169
172
|
|
|
170
173
|
//# sourceMappingURL=WorkflowsWorkflowTemplatesPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowsWorkflowTemplatesPage.js","names":[],"sources":["../../../src/assethandler/pages/WorkflowsWorkflowTemplatesPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n GradientText,\n GlassCard,\n} from '@burdenoff/fe-libs/ui';\nimport { Search, Star, Users, Download, Plus, LayoutTemplate } from 'lucide-react';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function WorkflowsWorkflowTemplatesPage() {\n const { workflowTemplates } = useAssetHandlerStore();\n const [search, setSearch] = useState('');\n const [categoryFilter, setCategoryFilter] = useState('all');\n\n const categories = [...new Set(workflowTemplates.map((t) => t.category))];\n\n const filtered = workflowTemplates.filter((t) => {\n if (categoryFilter !== 'all' && t.category !== categoryFilter) return false;\n if (\n search &&\n !t.name.toLowerCase().includes(search.toLowerCase()) &&\n !t.description.toLowerCase().includes(search.toLowerCase())\n )\n return false;\n return true;\n });\n\n const renderStars = (rating: number) => {\n return Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n className={`h-4 w-4 ${i < Math.floor(rating) ? 'fill-yellow-400 text-status-warning-text' : 'text-text-secondary/30'}`}\n />\n ));\n };\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>Workflow Templates</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Browse and use pre-built workflow templates to get started quickly.\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Template\n </Button>\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 Templates</CardTitle>\n <LayoutTemplate className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{workflowTemplates.length}</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\">Most Popular</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {workflowTemplates.reduce((a, t) => a + t.usageCount, 0)}\n </div>\n <p className=\"text-xs text-text-secondary\">Total uses across all templates</p>\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\">Average Rating</CardTitle>\n <Star className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {(\n workflowTemplates.reduce((a, t) => a + t.rating, 0) / workflowTemplates.length\n ).toFixed(1)}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder=\"Search templates...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <Select value={categoryFilter} onValueChange={setCategoryFilter}>\n <SelectTrigger className=\"w-[180px]\">\n <SelectValue placeholder=\"Category\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All Categories</SelectItem>\n {categories.map((c) => (\n <SelectItem key={c} value={c}>\n {c}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((template) => (\n <Card key={template.id} className=\"flex flex-col\">\n <CardHeader>\n <div className=\"flex items-start justify-between\">\n <Badge variant=\"outline\">{template.category}</Badge>\n <span className=\"text-xs text-text-secondary\">{template.id}</span>\n </div>\n <CardTitle className=\"text-lg mt-2\">{template.name}</CardTitle>\n <CardDescription>{template.description}</CardDescription>\n </CardHeader>\n <CardContent className=\"flex-1 space-y-3\">\n <div className=\"flex items-center gap-1\">\n {renderStars(template.rating)}\n <span className=\"ml-2 text-sm text-text-secondary\">{template.rating}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Users className=\"h-4 w-4\" />\n <span>{template.usageCount} uses</span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {template.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </CardContent>\n <CardFooter className=\"gap-2\">\n <Button className=\"flex-1\" size=\"sm\">\n Use Template\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"h-4 w-4\" />\n </Button>\n </CardFooter>\n </Card>\n ))}\n {filtered.length === 0 && (\n <div className=\"col-span-full text-center py-12 text-text-secondary\">\n No templates found matching your criteria.\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkflowsWorkflowTemplatesPage.js","names":[],"sources":["../../../src/assethandler/pages/WorkflowsWorkflowTemplatesPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n GradientText,\n GlassCard,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Search, Star, Users, Download, Plus, LayoutTemplate } from 'lucide-react';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function WorkflowsWorkflowTemplatesPage() {\n const { workflowTemplates } = useAssetHandlerStore();\n const [search, setSearch] = useState('');\n const [categoryFilter, setCategoryFilter] = useState('all');\n\n const categories = [...new Set(workflowTemplates.map((t) => t.category))];\n\n const filtered = workflowTemplates.filter((t) => {\n if (categoryFilter !== 'all' && t.category !== categoryFilter) return false;\n if (\n search &&\n !t.name.toLowerCase().includes(search.toLowerCase()) &&\n !t.description.toLowerCase().includes(search.toLowerCase())\n )\n return false;\n return true;\n });\n\n const renderStars = (rating: number) => {\n return Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n className={`h-4 w-4 ${i < Math.floor(rating) ? 'fill-status-warning-bg text-status-warning-text' : 'text-text-secondary/30'}`}\n />\n ));\n };\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>Workflow Templates</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Browse and use pre-built workflow templates to get started quickly.\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Template\n </Button>\n </div>\n\n <PagePurpose>\n Skip the blank canvas. Start from a proven, pre-built workflow template — rated and used by\n others — and adapt it to your needs in minutes. Browse by category, see what is popular, and\n use a template to stand up an automation fast.\n </PagePurpose>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow 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 Templates</CardTitle>\n <LayoutTemplate className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{workflowTemplates.length}</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\">Most Popular</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {workflowTemplates.reduce((a, t) => a + t.usageCount, 0)}\n </div>\n <p className=\"text-xs text-text-secondary\">Total uses across all templates</p>\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\">Average Rating</CardTitle>\n <Star className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {(\n workflowTemplates.reduce((a, t) => a + t.rating, 0) / workflowTemplates.length\n ).toFixed(1)}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1 max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder=\"Search templates...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <Select value={categoryFilter} onValueChange={setCategoryFilter}>\n <SelectTrigger className=\"w-[180px]\">\n <SelectValue placeholder=\"Category\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All Categories</SelectItem>\n {categories.map((c) => (\n <SelectItem key={c} value={c}>\n {c}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {filtered.length === 0 ? (\n <IllustratedEmptyState\n illustration={search || categoryFilter !== 'all' ? 'empty-search' : 'empty-generic'}\n title=\"No templates found\"\n description={\n search || categoryFilter !== 'all'\n ? 'No templates match your search or category — try clearing the filters.'\n : 'Create a workflow template to share reusable automations with your team.'\n }\n />\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((template) => (\n <Card key={template.id} className=\"flex flex-col\">\n <CardHeader>\n <div className=\"flex items-start justify-between\">\n <Badge variant=\"outline\">{template.category}</Badge>\n <span className=\"text-xs text-text-secondary\">{template.id}</span>\n </div>\n <CardTitle className=\"text-lg mt-2\">{template.name}</CardTitle>\n <CardDescription>{template.description}</CardDescription>\n </CardHeader>\n <CardContent className=\"flex-1 space-y-3\">\n <div className=\"flex items-center gap-1\">\n {renderStars(template.rating)}\n <span className=\"ml-2 text-sm text-text-secondary\">{template.rating}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Users className=\"h-4 w-4\" />\n <span>{template.usageCount} uses</span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {template.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </CardContent>\n <CardFooter className=\"gap-2\">\n <Button className=\"flex-1\" size=\"sm\">\n Use Template\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"h-4 w-4\" />\n </Button>\n </CardFooter>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/microfe-assethandler",
|
|
3
|
-
"version": "2026.625.
|
|
3
|
+
"version": "2026.625.2",
|
|
4
4
|
"description": "Burdenoff AssetHandler Microfrontend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@apollo/client": "^4.0.11",
|
|
43
|
-
"@burdenoff/fe-libs": "2026.625.
|
|
43
|
+
"@burdenoff/fe-libs": "2026.625.5",
|
|
44
44
|
"clsx": "^2.1.1",
|
|
45
45
|
"graphql": "^16.10.0",
|
|
46
46
|
"lucide-react": "^0.468.0",
|