@burdenoff/microfe-proserviceworld 2026.709.1 → 2026.709.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/index.js +2 -1
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts.map +1 -1
- package/dist/proserviceworld/ProServiceWorldRoutes.js +95 -42
- package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -1
- package/dist/proserviceworld/components/FeatureFlaggedPage.d.ts +8 -0
- package/dist/proserviceworld/components/FeatureFlaggedPage.d.ts.map +1 -0
- package/dist/proserviceworld/components/FeatureFlaggedPage.js +17 -0
- package/dist/proserviceworld/components/FeatureFlaggedPage.js.map +1 -0
- package/dist/proserviceworld/components/LoadMore.d.ts +12 -0
- package/dist/proserviceworld/components/LoadMore.d.ts.map +1 -0
- package/dist/proserviceworld/components/LoadMore.js +30 -0
- package/dist/proserviceworld/components/LoadMore.js.map +1 -0
- package/dist/proserviceworld/components/TagPicker.d.ts +11 -0
- package/dist/proserviceworld/components/TagPicker.d.ts.map +1 -0
- package/dist/proserviceworld/components/TagPicker.js +31 -0
- package/dist/proserviceworld/components/TagPicker.js.map +1 -0
- package/dist/proserviceworld/hooks/usePageViewAnalytics.d.ts +10 -0
- package/dist/proserviceworld/hooks/usePageViewAnalytics.d.ts.map +1 -0
- package/dist/proserviceworld/hooks/usePageViewAnalytics.js +24 -0
- package/dist/proserviceworld/hooks/usePageViewAnalytics.js.map +1 -0
- package/dist/proserviceworld/hooks/useProServiceWorldApi.js +47 -27
- package/dist/proserviceworld/hooks/useProServiceWorldApi.js.map +1 -1
- package/dist/proserviceworld/i18n/index.d.ts +13 -0
- package/dist/proserviceworld/i18n/index.d.ts.map +1 -0
- package/dist/proserviceworld/i18n/index.js +171 -0
- package/dist/proserviceworld/i18n/index.js.map +1 -0
- package/dist/proserviceworld/index.d.ts +1 -0
- package/dist/proserviceworld/index.d.ts.map +1 -1
- package/dist/proserviceworld/index.js +1 -0
- package/dist/proserviceworld/pages/ClientsPage.d.ts.map +1 -1
- package/dist/proserviceworld/pages/ClientsPage.js +173 -121
- package/dist/proserviceworld/pages/ClientsPage.js.map +1 -1
- package/dist/proserviceworld/pages/EngagementsPage.d.ts.map +1 -1
- package/dist/proserviceworld/pages/EngagementsPage.js +168 -120
- package/dist/proserviceworld/pages/EngagementsPage.js.map +1 -1
- package/dist/proserviceworld/pages/MattersPage.d.ts.map +1 -1
- package/dist/proserviceworld/pages/MattersPage.js +183 -144
- package/dist/proserviceworld/pages/MattersPage.js.map +1 -1
- package/dist/proserviceworld/utils/native.d.ts +23 -0
- package/dist/proserviceworld/utils/native.d.ts.map +1 -0
- package/dist/proserviceworld/utils/native.js +14 -0
- package/dist/proserviceworld/utils/native.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useProServiceWorld as e } from "./proserviceworld/providers/ProServiceWorldProvider.js";
|
|
2
2
|
import { ProServiceWorldRoot as t } from "./proserviceworld/ProServiceWorldRoot.js";
|
|
3
3
|
import { useSandboxAssistantTransport as n } from "./proserviceworld/services/createSandboxAssistantTransport.js";
|
|
4
|
+
import { t as r } from "./proserviceworld/i18n/index.js";
|
|
4
5
|
import "./proserviceworld/index.js";
|
|
5
|
-
export { t as ProServiceWorldRoot, e as useProServiceWorld, n as useSandboxAssistantTransport };
|
|
6
|
+
export { t as ProServiceWorldRoot, r as t, e as useProServiceWorld, n as useSandboxAssistantTransport };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProServiceWorldRoutes.d.ts","sourceRoot":"","sources":["../../src/proserviceworld/ProServiceWorldRoutes.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProServiceWorldRoutes.d.ts","sourceRoot":"","sources":["../../src/proserviceworld/ProServiceWorldRoutes.tsx"],"names":[],"mappings":"AA+DA,wBAAgB,qBAAqB,gCAiHpC"}
|
|
@@ -1,83 +1,136 @@
|
|
|
1
1
|
import { DashboardPage as e } from "./pages/DashboardPage.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { usePageViewAnalytics as t } from "./hooks/usePageViewAnalytics.js";
|
|
3
|
+
import { FeatureFlaggedPage as n } from "./components/FeatureFlaggedPage.js";
|
|
4
|
+
import { Suspense as r, lazy as i } from "react";
|
|
5
|
+
import { Loader2 as a } from "lucide-react";
|
|
6
|
+
import { Navigate as o, Route as s, Routes as c } from "react-router-dom";
|
|
7
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
6
8
|
//#region src/proserviceworld/ProServiceWorldRoutes.tsx
|
|
7
|
-
var
|
|
8
|
-
function
|
|
9
|
-
return /* @__PURE__ */
|
|
9
|
+
var d = i(() => import("./pages/ClientsPage.js").then((e) => ({ default: e.ClientsPage }))), f = i(() => import("./pages/ClientDetailPage.js").then((e) => ({ default: e.ClientDetailPage }))), p = i(() => import("./pages/EngagementsPage.js").then((e) => ({ default: e.EngagementsPage }))), m = i(() => import("./pages/EngagementDetailPage.js").then((e) => ({ default: e.EngagementDetailPage }))), h = i(() => import("./pages/MattersPage.js").then((e) => ({ default: e.MattersPage }))), g = i(() => import("./pages/TimePage.js").then((e) => ({ default: e.TimePage }))), _ = i(() => import("./pages/InvoicesPage.js").then((e) => ({ default: e.InvoicesPage }))), v = i(() => import("./pages/CompliancePage.js").then((e) => ({ default: e.CompliancePage }))), y = i(() => import("./pages/ConflictsPage.js").then((e) => ({ default: e.ConflictsPage }))), b = i(() => import("./pages/DocumentsPage.js").then((e) => ({ default: e.DocumentsPage }))), x = i(() => import("./pages/PracticeAreasPage.js").then((e) => ({ default: e.PracticeAreasPage }))), S = i(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage })));
|
|
10
|
+
function C() {
|
|
11
|
+
return /* @__PURE__ */ l("div", {
|
|
10
12
|
className: "flex min-h-[320px] items-center justify-center",
|
|
11
|
-
children: /* @__PURE__ */
|
|
13
|
+
children: /* @__PURE__ */ l(a, { className: "h-8 w-8 animate-spin text-accent" })
|
|
12
14
|
});
|
|
13
15
|
}
|
|
14
|
-
function
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
function w() {
|
|
17
|
+
return t(), null;
|
|
18
|
+
}
|
|
19
|
+
function T({ pageId: e, children: t }) {
|
|
20
|
+
return /* @__PURE__ */ l(n, {
|
|
21
|
+
pageId: e,
|
|
22
|
+
children: /* @__PURE__ */ l(r, {
|
|
23
|
+
fallback: /* @__PURE__ */ l(C, {}),
|
|
24
|
+
children: t
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function E() {
|
|
29
|
+
return /* @__PURE__ */ u(r, {
|
|
30
|
+
fallback: /* @__PURE__ */ l(C, {}),
|
|
31
|
+
children: [/* @__PURE__ */ l(w, {}), /* @__PURE__ */ u(c, { children: [
|
|
32
|
+
/* @__PURE__ */ l(s, {
|
|
19
33
|
index: !0,
|
|
20
|
-
element: /* @__PURE__ */
|
|
34
|
+
element: /* @__PURE__ */ l(T, {
|
|
35
|
+
pageId: "dashboard",
|
|
36
|
+
children: /* @__PURE__ */ l(e, {})
|
|
37
|
+
})
|
|
21
38
|
}),
|
|
22
|
-
/* @__PURE__ */ s
|
|
39
|
+
/* @__PURE__ */ l(s, {
|
|
23
40
|
path: "clients",
|
|
24
|
-
element: /* @__PURE__ */
|
|
41
|
+
element: /* @__PURE__ */ l(T, {
|
|
42
|
+
pageId: "clients",
|
|
43
|
+
children: /* @__PURE__ */ l(d, {})
|
|
44
|
+
})
|
|
25
45
|
}),
|
|
26
|
-
/* @__PURE__ */ s
|
|
46
|
+
/* @__PURE__ */ l(s, {
|
|
27
47
|
path: "clients/:id",
|
|
28
|
-
element: /* @__PURE__ */
|
|
48
|
+
element: /* @__PURE__ */ l(T, {
|
|
49
|
+
pageId: "client-detail",
|
|
50
|
+
children: /* @__PURE__ */ l(f, {})
|
|
51
|
+
})
|
|
29
52
|
}),
|
|
30
|
-
/* @__PURE__ */ s
|
|
53
|
+
/* @__PURE__ */ l(s, {
|
|
31
54
|
path: "engagements",
|
|
32
|
-
element: /* @__PURE__ */
|
|
55
|
+
element: /* @__PURE__ */ l(T, {
|
|
56
|
+
pageId: "engagements",
|
|
57
|
+
children: /* @__PURE__ */ l(p, {})
|
|
58
|
+
})
|
|
33
59
|
}),
|
|
34
|
-
/* @__PURE__ */ s
|
|
60
|
+
/* @__PURE__ */ l(s, {
|
|
35
61
|
path: "engagements/:id",
|
|
36
|
-
element: /* @__PURE__ */
|
|
62
|
+
element: /* @__PURE__ */ l(T, {
|
|
63
|
+
pageId: "engagement-detail",
|
|
64
|
+
children: /* @__PURE__ */ l(m, {})
|
|
65
|
+
})
|
|
37
66
|
}),
|
|
38
|
-
/* @__PURE__ */ s
|
|
67
|
+
/* @__PURE__ */ l(s, {
|
|
39
68
|
path: "matters",
|
|
40
|
-
element: /* @__PURE__ */
|
|
69
|
+
element: /* @__PURE__ */ l(T, {
|
|
70
|
+
pageId: "matters",
|
|
71
|
+
children: /* @__PURE__ */ l(h, {})
|
|
72
|
+
})
|
|
41
73
|
}),
|
|
42
|
-
/* @__PURE__ */ s
|
|
74
|
+
/* @__PURE__ */ l(s, {
|
|
43
75
|
path: "time",
|
|
44
|
-
element: /* @__PURE__ */
|
|
76
|
+
element: /* @__PURE__ */ l(T, {
|
|
77
|
+
pageId: "time",
|
|
78
|
+
children: /* @__PURE__ */ l(g, {})
|
|
79
|
+
})
|
|
45
80
|
}),
|
|
46
|
-
/* @__PURE__ */ s
|
|
81
|
+
/* @__PURE__ */ l(s, {
|
|
47
82
|
path: "invoices",
|
|
48
|
-
element: /* @__PURE__ */
|
|
83
|
+
element: /* @__PURE__ */ l(T, {
|
|
84
|
+
pageId: "invoices",
|
|
85
|
+
children: /* @__PURE__ */ l(_, {})
|
|
86
|
+
})
|
|
49
87
|
}),
|
|
50
|
-
/* @__PURE__ */ s
|
|
88
|
+
/* @__PURE__ */ l(s, {
|
|
51
89
|
path: "compliance",
|
|
52
|
-
element: /* @__PURE__ */
|
|
90
|
+
element: /* @__PURE__ */ l(T, {
|
|
91
|
+
pageId: "compliance",
|
|
92
|
+
children: /* @__PURE__ */ l(v, {})
|
|
93
|
+
})
|
|
53
94
|
}),
|
|
54
|
-
/* @__PURE__ */ s
|
|
95
|
+
/* @__PURE__ */ l(s, {
|
|
55
96
|
path: "conflicts",
|
|
56
|
-
element: /* @__PURE__ */
|
|
97
|
+
element: /* @__PURE__ */ l(T, {
|
|
98
|
+
pageId: "conflicts",
|
|
99
|
+
children: /* @__PURE__ */ l(y, {})
|
|
100
|
+
})
|
|
57
101
|
}),
|
|
58
|
-
/* @__PURE__ */ s
|
|
102
|
+
/* @__PURE__ */ l(s, {
|
|
59
103
|
path: "documents",
|
|
60
|
-
element: /* @__PURE__ */
|
|
104
|
+
element: /* @__PURE__ */ l(T, {
|
|
105
|
+
pageId: "documents",
|
|
106
|
+
children: /* @__PURE__ */ l(b, {})
|
|
107
|
+
})
|
|
61
108
|
}),
|
|
62
|
-
/* @__PURE__ */ s
|
|
109
|
+
/* @__PURE__ */ l(s, {
|
|
63
110
|
path: "practice-areas",
|
|
64
|
-
element: /* @__PURE__ */
|
|
111
|
+
element: /* @__PURE__ */ l(T, {
|
|
112
|
+
pageId: "practice-areas",
|
|
113
|
+
children: /* @__PURE__ */ l(x, {})
|
|
114
|
+
})
|
|
65
115
|
}),
|
|
66
|
-
/* @__PURE__ */ s
|
|
116
|
+
/* @__PURE__ */ l(s, {
|
|
67
117
|
path: "analytics",
|
|
68
|
-
element: /* @__PURE__ */
|
|
118
|
+
element: /* @__PURE__ */ l(T, {
|
|
119
|
+
pageId: "analytics",
|
|
120
|
+
children: /* @__PURE__ */ l(S, {})
|
|
121
|
+
})
|
|
69
122
|
}),
|
|
70
|
-
/* @__PURE__ */ s
|
|
123
|
+
/* @__PURE__ */ l(s, {
|
|
71
124
|
path: "*",
|
|
72
|
-
element: /* @__PURE__ */
|
|
125
|
+
element: /* @__PURE__ */ l(o, {
|
|
73
126
|
to: "",
|
|
74
127
|
replace: !0
|
|
75
128
|
})
|
|
76
129
|
})
|
|
77
|
-
] })
|
|
130
|
+
] })]
|
|
78
131
|
});
|
|
79
132
|
}
|
|
80
133
|
//#endregion
|
|
81
|
-
export {
|
|
134
|
+
export { E as ProServiceWorldRoutes };
|
|
82
135
|
|
|
83
136
|
//# sourceMappingURL=ProServiceWorldRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProServiceWorldRoutes.js","names":[],"sources":["../../src/proserviceworld/ProServiceWorldRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\nimport { Loader2 } from 'lucide-react';\nimport { DashboardPage } from './pages/DashboardPage';\n\nconst ClientsPage = lazy(() =>\n import('./pages/ClientsPage').then((m) => ({ default: m.ClientsPage }))\n);\nconst ClientDetailPage = lazy(() =>\n import('./pages/ClientDetailPage').then((m) => ({ default: m.ClientDetailPage }))\n);\nconst EngagementsPage = lazy(() =>\n import('./pages/EngagementsPage').then((m) => ({ default: m.EngagementsPage }))\n);\nconst EngagementDetailPage = lazy(() =>\n import('./pages/EngagementDetailPage').then((m) => ({ default: m.EngagementDetailPage }))\n);\nconst MattersPage = lazy(() =>\n import('./pages/MattersPage').then((m) => ({ default: m.MattersPage }))\n);\nconst TimePage = lazy(() => import('./pages/TimePage').then((m) => ({ default: m.TimePage })));\nconst InvoicesPage = lazy(() =>\n import('./pages/InvoicesPage').then((m) => ({ default: m.InvoicesPage }))\n);\nconst CompliancePage = lazy(() =>\n import('./pages/CompliancePage').then((m) => ({ default: m.CompliancePage }))\n);\nconst ConflictsPage = lazy(() =>\n import('./pages/ConflictsPage').then((m) => ({ default: m.ConflictsPage }))\n);\nconst DocumentsPage = lazy(() =>\n import('./pages/DocumentsPage').then((m) => ({ default: m.DocumentsPage }))\n);\nconst PracticeAreasPage = lazy(() =>\n import('./pages/PracticeAreasPage').then((m) => ({ default: m.PracticeAreasPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-accent\" />\n </div>\n );\n}\n\nexport function ProServiceWorldRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route
|
|
1
|
+
{"version":3,"file":"ProServiceWorldRoutes.js","names":[],"sources":["../../src/proserviceworld/ProServiceWorldRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type ReactNode } from 'react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\nimport { Loader2 } from 'lucide-react';\nimport { DashboardPage } from './pages/DashboardPage';\nimport { usePageViewAnalytics } from './hooks/usePageViewAnalytics';\nimport { FeatureFlaggedPage } from './components/FeatureFlaggedPage';\n\nconst ClientsPage = lazy(() =>\n import('./pages/ClientsPage').then((m) => ({ default: m.ClientsPage }))\n);\nconst ClientDetailPage = lazy(() =>\n import('./pages/ClientDetailPage').then((m) => ({ default: m.ClientDetailPage }))\n);\nconst EngagementsPage = lazy(() =>\n import('./pages/EngagementsPage').then((m) => ({ default: m.EngagementsPage }))\n);\nconst EngagementDetailPage = lazy(() =>\n import('./pages/EngagementDetailPage').then((m) => ({ default: m.EngagementDetailPage }))\n);\nconst MattersPage = lazy(() =>\n import('./pages/MattersPage').then((m) => ({ default: m.MattersPage }))\n);\nconst TimePage = lazy(() => import('./pages/TimePage').then((m) => ({ default: m.TimePage })));\nconst InvoicesPage = lazy(() =>\n import('./pages/InvoicesPage').then((m) => ({ default: m.InvoicesPage }))\n);\nconst CompliancePage = lazy(() =>\n import('./pages/CompliancePage').then((m) => ({ default: m.CompliancePage }))\n);\nconst ConflictsPage = lazy(() =>\n import('./pages/ConflictsPage').then((m) => ({ default: m.ConflictsPage }))\n);\nconst DocumentsPage = lazy(() =>\n import('./pages/DocumentsPage').then((m) => ({ default: m.DocumentsPage }))\n);\nconst PracticeAreasPage = lazy(() =>\n import('./pages/PracticeAreasPage').then((m) => ({ default: m.PracticeAreasPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-accent\" />\n </div>\n );\n}\n\nfunction PageViewTracker() {\n usePageViewAnalytics();\n return null;\n}\n\nfunction Gate({ pageId, children }: { pageId: string; children: ReactNode }) {\n return (\n <FeatureFlaggedPage pageId={pageId}>\n <Suspense fallback={<PageLoader />}>{children}</Suspense>\n </FeatureFlaggedPage>\n );\n}\n\nexport function ProServiceWorldRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <PageViewTracker />\n <Routes>\n <Route\n index\n element={\n <Gate pageId=\"dashboard\">\n <DashboardPage />\n </Gate>\n }\n />\n <Route\n path=\"clients\"\n element={\n <Gate pageId=\"clients\">\n <ClientsPage />\n </Gate>\n }\n />\n <Route\n path=\"clients/:id\"\n element={\n <Gate pageId=\"client-detail\">\n <ClientDetailPage />\n </Gate>\n }\n />\n <Route\n path=\"engagements\"\n element={\n <Gate pageId=\"engagements\">\n <EngagementsPage />\n </Gate>\n }\n />\n <Route\n path=\"engagements/:id\"\n element={\n <Gate pageId=\"engagement-detail\">\n <EngagementDetailPage />\n </Gate>\n }\n />\n <Route\n path=\"matters\"\n element={\n <Gate pageId=\"matters\">\n <MattersPage />\n </Gate>\n }\n />\n <Route\n path=\"time\"\n element={\n <Gate pageId=\"time\">\n <TimePage />\n </Gate>\n }\n />\n <Route\n path=\"invoices\"\n element={\n <Gate pageId=\"invoices\">\n <InvoicesPage />\n </Gate>\n }\n />\n <Route\n path=\"compliance\"\n element={\n <Gate pageId=\"compliance\">\n <CompliancePage />\n </Gate>\n }\n />\n <Route\n path=\"conflicts\"\n element={\n <Gate pageId=\"conflicts\">\n <ConflictsPage />\n </Gate>\n }\n />\n <Route\n path=\"documents\"\n element={\n <Gate pageId=\"documents\">\n <DocumentsPage />\n </Gate>\n }\n />\n <Route\n path=\"practice-areas\"\n element={\n <Gate pageId=\"practice-areas\">\n <PracticeAreasPage />\n </Gate>\n }\n />\n <Route\n path=\"analytics\"\n element={\n <Gate pageId=\"analytics\">\n <AnalyticsPage />\n </Gate>\n }\n />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureFlaggedPage.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/components/FeatureFlaggedPage.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAU1D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Empty as e } from "./ui.js";
|
|
2
|
+
import { FeatureGate as t } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
3
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
4
|
+
//#region src/proserviceworld/components/FeatureFlaggedPage.tsx
|
|
5
|
+
var r = ({ pageId: r, children: i }) => /* @__PURE__ */ n(t, {
|
|
6
|
+
flag: `proserviceworld.page.${r}`,
|
|
7
|
+
defaultValue: !0,
|
|
8
|
+
fallback: /* @__PURE__ */ n(e, {
|
|
9
|
+
title: "Feature disabled",
|
|
10
|
+
description: "This page is not enabled for your workspace."
|
|
11
|
+
}),
|
|
12
|
+
children: i
|
|
13
|
+
});
|
|
14
|
+
//#endregion
|
|
15
|
+
export { r as FeatureFlaggedPage };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=FeatureFlaggedPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureFlaggedPage.js","names":[],"sources":["../../../src/proserviceworld/components/FeatureFlaggedPage.tsx"],"sourcesContent":["/**\n * Per-page feature-flag gate.\n *\n * Every ProServiceWorld page is behind a flag (default-allow). The flag key\n * convention is `proserviceworld.page.{pageId}`. When a flag is explicitly\n * disabled the page renders a compact disabled state instead of the content.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { Empty } from './ui';\n\nexport interface FeatureFlaggedPageProps {\n pageId: string;\n children: ReactNode;\n}\n\nexport const FeatureFlaggedPage: FC<FeatureFlaggedPageProps> = ({ pageId, children }) => (\n <FeatureGate\n flag={`proserviceworld.page.${pageId}`}\n defaultValue={true}\n fallback={\n <Empty title=\"Feature disabled\" description=\"This page is not enabled for your workspace.\" />\n }\n >\n {children}\n </FeatureGate>\n);\n"],"mappings":";;;;AAiBA,IAAa,KAAmD,EAAE,WAAQ,kBACxE,kBAAC,GAAD;CACE,MAAM,wBAAwB;CAC9B,cAAc;CACd,UACE,kBAAC,GAAD;EAAO,OAAM;EAAmB,aAAY;EAAiD,CAAA;CAG9F;CACW,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface LoadMoreProps {
|
|
4
|
+
hasMore: boolean;
|
|
5
|
+
loading: boolean;
|
|
6
|
+
onLoadMore: () => void;
|
|
7
|
+
loadedCount: number;
|
|
8
|
+
totalCount: number;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const LoadMore: FC<LoadMoreProps>;
|
|
12
|
+
//# sourceMappingURL=LoadMore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadMore.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/components/LoadMore.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAMhC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAuBtC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { t } from "../i18n/index.js";
|
|
3
|
+
import { Loader2 as n } from "lucide-react";
|
|
4
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
+
import { Button as a } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/proserviceworld/components/LoadMore.tsx
|
|
7
|
+
var o = ({ hasMore: o, loading: s, onLoadMore: c, loadedCount: l, totalCount: u, className: d }) => !o && u === 0 ? null : /* @__PURE__ */ i("div", {
|
|
8
|
+
className: e("flex items-center justify-between gap-4 py-4", d),
|
|
9
|
+
children: [/* @__PURE__ */ i("span", {
|
|
10
|
+
className: "text-sm text-text-tertiary",
|
|
11
|
+
children: [
|
|
12
|
+
t("psw.common.showing"),
|
|
13
|
+
" ",
|
|
14
|
+
l,
|
|
15
|
+
" ",
|
|
16
|
+
t("psw.common.of"),
|
|
17
|
+
" ",
|
|
18
|
+
u
|
|
19
|
+
]
|
|
20
|
+
}), o && /* @__PURE__ */ i(a, {
|
|
21
|
+
variant: "secondary",
|
|
22
|
+
onClick: c,
|
|
23
|
+
disabled: s,
|
|
24
|
+
children: [s ? /* @__PURE__ */ r(n, { className: "mr-1.5 h-4 w-4 animate-spin" }) : null, t("psw.common.loadMore")]
|
|
25
|
+
})]
|
|
26
|
+
});
|
|
27
|
+
//#endregion
|
|
28
|
+
export { o as LoadMore };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=LoadMore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadMore.js","names":[],"sources":["../../../src/proserviceworld/components/LoadMore.tsx"],"sourcesContent":["/**\n * Simple pagination \"Load more\" control for ProServiceWorld list pages.\n */\n\nimport type { FC } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\nimport { t } from '../i18n';\n\nexport interface LoadMoreProps {\n hasMore: boolean;\n loading: boolean;\n onLoadMore: () => void;\n loadedCount: number;\n totalCount: number;\n className?: string;\n}\n\nexport const LoadMore: FC<LoadMoreProps> = ({\n hasMore,\n loading,\n onLoadMore,\n loadedCount,\n totalCount,\n className,\n}) => {\n if (!hasMore && totalCount === 0) return null;\n\n return (\n <div className={cn('flex items-center justify-between gap-4 py-4', className)}>\n <span className=\"text-sm text-text-tertiary\">\n {t('psw.common.showing')} {loadedCount} {t('psw.common.of')} {totalCount}\n </span>\n {hasMore && (\n <Button variant=\"secondary\" onClick={onLoadMore} disabled={loading}>\n {loading ? <Loader2 className=\"mr-1.5 h-4 w-4 animate-spin\" /> : null}\n {t('psw.common.loadMore')}\n </Button>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;AAmBA,IAAa,KAA+B,EAC1C,YACA,YACA,eACA,gBACA,eACA,mBAEI,CAAC,KAAW,MAAe,IAAU,OAGvC,kBAAC,OAAD;CAAK,WAAW,EAAG,gDAAgD,EAAU;WAA7E,CACE,kBAAC,QAAD;EAAM,WAAU;YAAhB;GACG,EAAE,qBAAqB;GAAC;GAAE;GAAY;GAAE,EAAE,gBAAgB;GAAC;GAAE;GACzD;KACN,KACC,kBAAC,GAAD;EAAQ,SAAQ;EAAY,SAAS;EAAY,UAAU;YAA3D,CACG,IAAU,kBAAC,GAAD,EAAS,WAAU,+BAAgC,CAAA,GAAG,MAChE,EAAE,sBAAsB,CAClB;IAEP"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface TagPickerProps {
|
|
4
|
+
entityType: string;
|
|
5
|
+
entityId: string;
|
|
6
|
+
tags: string[];
|
|
7
|
+
onChange: (tags: string[]) => void | Promise<void>;
|
|
8
|
+
maxTags?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const TagPicker: FC<TagPickerProps>;
|
|
11
|
+
//# sourceMappingURL=TagPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagPicker.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/components/TagPicker.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAkCxC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useProServiceWorld as e } from "../providers/ProServiceWorldProvider.js";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { TagsWidget as n } from "@burdenoff/fe-libs/tag";
|
|
4
|
+
//#region src/proserviceworld/components/TagPicker.tsx
|
|
5
|
+
var r = ({ entityType: r, entityId: i, tags: a, onChange: o, maxTags: s }) => {
|
|
6
|
+
let { workspaceId: c } = e();
|
|
7
|
+
return /* @__PURE__ */ t(n, {
|
|
8
|
+
entityType: r,
|
|
9
|
+
entityId: i,
|
|
10
|
+
workspaceId: c,
|
|
11
|
+
tags: a.map((e) => ({
|
|
12
|
+
id: e,
|
|
13
|
+
key: e,
|
|
14
|
+
label: e,
|
|
15
|
+
value: e
|
|
16
|
+
})),
|
|
17
|
+
onAdd: async (e) => {
|
|
18
|
+
a.includes(e.id) || await o([...a, e.id]);
|
|
19
|
+
},
|
|
20
|
+
onRemove: async (e) => {
|
|
21
|
+
await o(a.filter((t) => t !== e));
|
|
22
|
+
},
|
|
23
|
+
allowCreate: !0,
|
|
24
|
+
maxTags: s,
|
|
25
|
+
syncGraphNotifications: !1
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { r as TagPicker };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=TagPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagPicker.js","names":[],"sources":["../../../src/proserviceworld/components/TagPicker.tsx"],"sourcesContent":["/**\n * ProServiceWorld tag picker.\n *\n * Wraps the shared fe-libs `TagsWidget` so entity pages can assign/remove\n * string tags on clients, engagements, matters, and documents. The backend\n * stores tags as `string[]` IDs/keys; we map them to the minimal `TagItem`\n * shape the widget expects.\n */\n\nimport type { FC } from 'react';\nimport { TagsWidget } from '@burdenoff/fe-libs/tag';\nimport { useProServiceWorld } from '../providers/ProServiceWorldProvider';\n\nexport interface TagPickerProps {\n entityType: string;\n entityId: string;\n tags: string[];\n onChange: (tags: string[]) => void | Promise<void>;\n maxTags?: number;\n}\n\nexport const TagPicker: FC<TagPickerProps> = ({\n entityType,\n entityId,\n tags,\n onChange,\n maxTags,\n}) => {\n const { workspaceId } = useProServiceWorld();\n\n const tagItems = tags.map((tag) => ({\n id: tag,\n key: tag,\n label: tag,\n value: tag,\n }));\n\n return (\n <TagsWidget\n entityType={entityType}\n entityId={entityId}\n workspaceId={workspaceId}\n tags={tagItems}\n onAdd={async (tag) => {\n if (tags.includes(tag.id)) return;\n await onChange([...tags, tag.id]);\n }}\n onRemove={async (tagId) => {\n await onChange(tags.filter((t) => t !== tagId));\n }}\n allowCreate\n maxTags={maxTags}\n syncGraphNotifications={false}\n />\n );\n};\n"],"mappings":";;;;AAqBA,IAAa,KAAiC,EAC5C,eACA,aACA,SACA,aACA,iBACI;CACJ,IAAM,EAAE,mBAAgB,GAAoB;AAS5C,QACE,kBAAC,GAAD;EACc;EACF;EACG;EACb,MAZa,EAAK,KAAK,OAAS;GAClC,IAAI;GACJ,KAAK;GACL,OAAO;GACP,OAAO;GACR,EAAE;EAQC,OAAO,OAAO,MAAQ;AAChB,KAAK,SAAS,EAAI,GAAG,IACzB,MAAM,EAAS,CAAC,GAAG,GAAM,EAAI,GAAG,CAAC;;EAEnC,UAAU,OAAO,MAAU;AACzB,SAAM,EAAS,EAAK,QAAQ,MAAM,MAAM,EAAM,CAAC;;EAEjD,aAAA;EACS;EACT,wBAAwB;EACxB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-view analytics for ProServiceWorld routes.
|
|
3
|
+
*
|
|
4
|
+
* Emits a `psw.page.viewed` event on the shared event bus whenever the
|
|
5
|
+
* location pathname changes. This lets Rybbit / analytics backends track
|
|
6
|
+
* which product surfaces are visited without relying on noisy generic
|
|
7
|
+
* router instrumentation.
|
|
8
|
+
*/
|
|
9
|
+
export declare function usePageViewAnalytics(): void;
|
|
10
|
+
//# sourceMappingURL=usePageViewAnalytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePageViewAnalytics.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/hooks/usePageViewAnalytics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,wBAAgB,oBAAoB,SAgBnC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useEffect as e, useRef as t } from "react";
|
|
2
|
+
import { useLocation as n } from "react-router-dom";
|
|
3
|
+
import { useEventBus as r } from "@burdenoff/fe-libs/shared/events";
|
|
4
|
+
//#region src/proserviceworld/hooks/usePageViewAnalytics.ts
|
|
5
|
+
function i() {
|
|
6
|
+
let i = n(), a = r(), o = t(null);
|
|
7
|
+
e(() => {
|
|
8
|
+
o.current !== i.pathname && (o.current = i.pathname, a.emitCustom("psw.page.viewed", {
|
|
9
|
+
path: i.pathname,
|
|
10
|
+
search: i.search,
|
|
11
|
+
hash: i.hash,
|
|
12
|
+
product: "proserviceworld"
|
|
13
|
+
}));
|
|
14
|
+
}, [
|
|
15
|
+
a,
|
|
16
|
+
i.hash,
|
|
17
|
+
i.pathname,
|
|
18
|
+
i.search
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { i as usePageViewAnalytics };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=usePageViewAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePageViewAnalytics.js","names":[],"sources":["../../../src/proserviceworld/hooks/usePageViewAnalytics.ts"],"sourcesContent":["/**\n * Page-view analytics for ProServiceWorld routes.\n *\n * Emits a `psw.page.viewed` event on the shared event bus whenever the\n * location pathname changes. This lets Rybbit / analytics backends track\n * which product surfaces are visited without relying on noisy generic\n * router instrumentation.\n */\n\nimport { useEffect, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useEventBus } from '@burdenoff/fe-libs/shared/events';\n\nexport function usePageViewAnalytics() {\n const location = useLocation();\n const bus = useEventBus();\n const lastPathRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (lastPathRef.current === location.pathname) return;\n lastPathRef.current = location.pathname;\n\n bus.emitCustom('psw.page.viewed', {\n path: location.pathname,\n search: location.search,\n hash: location.hash,\n product: 'proserviceworld',\n });\n }, [bus, location.hash, location.pathname, location.search]);\n}\n"],"mappings":";;;;AAaA,SAAgB,IAAuB;CACrC,IAAM,IAAW,GAAa,EACxB,IAAM,GAAa,EACnB,IAAc,EAAsB,KAAK;AAE/C,SAAgB;AACV,IAAY,YAAY,EAAS,aACrC,EAAY,UAAU,EAAS,UAE/B,EAAI,WAAW,mBAAmB;GAChC,MAAM,EAAS;GACf,QAAQ,EAAS;GACjB,MAAM,EAAS;GACf,SAAS;GACV,CAAC;IACD;EAAC;EAAK,EAAS;EAAM,EAAS;EAAU,EAAS;EAAO,CAAC"}
|