@burdenoff/microfe-proserviceworld 2026.706.3 → 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/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -1
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts +5 -0
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts +2 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.js +95 -42
- package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -1
- package/dist/proserviceworld/components/DiscussionThread.d.ts +12 -0
- package/dist/proserviceworld/components/DiscussionThread.d.ts.map +1 -0
- 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/components/ui.d.ts +82 -0
- package/dist/proserviceworld/components/ui.d.ts.map +1 -0
- package/dist/proserviceworld/hooks/useAnalytics.d.ts +18 -0
- package/dist/proserviceworld/hooks/useAnalytics.d.ts.map +1 -0
- package/dist/proserviceworld/hooks/useAnalytics.js +21 -0
- package/dist/proserviceworld/hooks/useAnalytics.js.map +1 -0
- package/dist/proserviceworld/hooks/useEntityComments.d.ts +27 -0
- package/dist/proserviceworld/hooks/useEntityComments.d.ts.map +1 -0
- package/dist/proserviceworld/hooks/useFiles.d.ts +23 -0
- package/dist/proserviceworld/hooks/useFiles.d.ts.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.d.ts +351 -0
- package/dist/proserviceworld/hooks/useProServiceWorldApi.d.ts.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 +6 -0
- package/dist/proserviceworld/index.d.ts.map +1 -0
- package/dist/proserviceworld/index.js +2 -0
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts +4 -0
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ClientDetailPage.d.ts +4 -0
- package/dist/proserviceworld/pages/ClientDetailPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ClientsPage.d.ts +9 -0
- package/dist/proserviceworld/pages/ClientsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ClientsPage.js +218 -155
- package/dist/proserviceworld/pages/ClientsPage.js.map +1 -1
- package/dist/proserviceworld/pages/CompliancePage.d.ts +4 -0
- package/dist/proserviceworld/pages/CompliancePage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ConflictsPage.d.ts +4 -0
- package/dist/proserviceworld/pages/ConflictsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/DashboardPage.d.ts +4 -0
- package/dist/proserviceworld/pages/DashboardPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/DocumentsPage.d.ts +4 -0
- package/dist/proserviceworld/pages/DocumentsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/EngagementDetailPage.d.ts +4 -0
- package/dist/proserviceworld/pages/EngagementDetailPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/EngagementDetailPage.js +162 -156
- package/dist/proserviceworld/pages/EngagementDetailPage.js.map +1 -1
- package/dist/proserviceworld/pages/EngagementsPage.d.ts +4 -0
- package/dist/proserviceworld/pages/EngagementsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/EngagementsPage.js +201 -140
- package/dist/proserviceworld/pages/EngagementsPage.js.map +1 -1
- package/dist/proserviceworld/pages/InvoicesPage.d.ts +4 -0
- package/dist/proserviceworld/pages/InvoicesPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/MattersPage.d.ts +4 -0
- package/dist/proserviceworld/pages/MattersPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/MattersPage.js +212 -158
- package/dist/proserviceworld/pages/MattersPage.js.map +1 -1
- package/dist/proserviceworld/pages/PracticeAreasPage.d.ts +4 -0
- package/dist/proserviceworld/pages/PracticeAreasPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/TimePage.d.ts +4 -0
- package/dist/proserviceworld/pages/TimePage.d.ts.map +1 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts +6 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts.map +1 -0
- package/dist/proserviceworld/services/assistantApi.d.ts +74 -0
- package/dist/proserviceworld/services/assistantApi.d.ts.map +1 -0
- package/dist/proserviceworld/services/assistantApi.js +203 -0
- package/dist/proserviceworld/services/assistantApi.js.map +1 -0
- package/dist/proserviceworld/services/createSandboxAssistantTransport.d.ts +28 -0
- package/dist/proserviceworld/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/proserviceworld/services/createSandboxAssistantTransport.js +120 -0
- package/dist/proserviceworld/services/createSandboxAssistantTransport.js.map +1 -0
- package/dist/proserviceworld/types/index.d.ts +57 -0
- package/dist/proserviceworld/types/index.d.ts.map +1 -0
- package/dist/proserviceworld/utils/cn.d.ts +4 -0
- package/dist/proserviceworld/utils/cn.d.ts.map +1 -0
- 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/dist/proserviceworld/utils/nav.d.ts +6 -0
- package/dist/proserviceworld/utils/nav.d.ts.map +1 -0
- package/dist/proserviceworld/utils/navigation.d.ts +2 -0
- package/dist/proserviceworld/utils/navigation.d.ts.map +1 -0
- package/dist/proserviceworld/utils/pageContext.d.ts +12 -0
- package/dist/proserviceworld/utils/pageContext.d.ts.map +1 -0
- package/dist/proserviceworld/utils/pageContext.js +74 -0
- package/dist/proserviceworld/utils/pageContext.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { useProServiceWorld as e } from "./proserviceworld/providers/ProServiceWorldProvider.js";
|
|
2
2
|
import { ProServiceWorldRoot as t } from "./proserviceworld/ProServiceWorldRoot.js";
|
|
3
|
+
import { useSandboxAssistantTransport as n } from "./proserviceworld/services/createSandboxAssistantTransport.js";
|
|
4
|
+
import { t as r } from "./proserviceworld/i18n/index.js";
|
|
3
5
|
import "./proserviceworld/index.js";
|
|
4
|
-
export { t as ProServiceWorldRoot, e as useProServiceWorld };
|
|
6
|
+
export { t as ProServiceWorldRoot, r as t, e as useProServiceWorld, n as useSandboxAssistantTransport };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProServiceWorldRoot.d.ts","sourceRoot":"","sources":["../../src/proserviceworld/ProServiceWorldRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAiBhC,OAAO,KAAK,EAAW,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAwBjE,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CA8B5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
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,12 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Discussion / notes for a Psw entity, backed entirely by wspace-conversations
|
|
5
|
+
* (createEntityComment / getEntityComments) — no product-owned comments table.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DiscussionThread: FC<{
|
|
8
|
+
entityType: string;
|
|
9
|
+
entityId: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=DiscussionThread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiscussionThread.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/components/DiscussionThread.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAQhC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8EzF,CAAC"}
|
|
@@ -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,82 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export declare const humanize: (v: string | null | undefined) => string;
|
|
4
|
+
export declare const fmtDate: (iso: string | null | undefined) => string;
|
|
5
|
+
export declare const fmtMoney: (amount: number | null | undefined, currency?: string) => string;
|
|
6
|
+
export declare const fmtHours: (h: number | null | undefined) => string;
|
|
7
|
+
export declare const fmtMinutesAsHours: (m: number | null | undefined) => string;
|
|
8
|
+
export type Tone = 'neutral' | 'success' | 'warning' | 'danger' | 'info' | 'accent';
|
|
9
|
+
export declare const StatusPill: FC<{
|
|
10
|
+
status: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const PageHeader: FC<{
|
|
14
|
+
title: string;
|
|
15
|
+
subtitle?: string;
|
|
16
|
+
actions?: ReactNode;
|
|
17
|
+
icon?: ReactNode;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const MetricCard: FC<{
|
|
20
|
+
label: string;
|
|
21
|
+
value: ReactNode;
|
|
22
|
+
hint?: string;
|
|
23
|
+
icon?: ReactNode;
|
|
24
|
+
tone?: Tone;
|
|
25
|
+
}>;
|
|
26
|
+
export declare const SectionCard: FC<{
|
|
27
|
+
title?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
action?: ReactNode;
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
className?: string;
|
|
32
|
+
}>;
|
|
33
|
+
export declare const Field: FC<{
|
|
34
|
+
label: string;
|
|
35
|
+
required?: boolean;
|
|
36
|
+
hint?: string;
|
|
37
|
+
children: ReactNode;
|
|
38
|
+
className?: string;
|
|
39
|
+
}>;
|
|
40
|
+
export declare const TextInput: FC<React.InputHTMLAttributes<HTMLInputElement>>;
|
|
41
|
+
export declare const TextArea: FC<React.TextareaHTMLAttributes<HTMLTextAreaElement>>;
|
|
42
|
+
export declare const NativeSelect: FC<React.SelectHTMLAttributes<HTMLSelectElement>>;
|
|
43
|
+
/** Turn an enum-value list into <option>s with humanized labels. */
|
|
44
|
+
export declare const enumOptions: (values: readonly string[]) => ReactNode;
|
|
45
|
+
export declare const Banner: FC<{
|
|
46
|
+
tone?: 'success' | 'danger' | 'info';
|
|
47
|
+
children: ReactNode;
|
|
48
|
+
onClose?: () => void;
|
|
49
|
+
}>;
|
|
50
|
+
export declare const Modal: FC<{
|
|
51
|
+
open: boolean;
|
|
52
|
+
onClose: () => void;
|
|
53
|
+
title: string;
|
|
54
|
+
children: ReactNode;
|
|
55
|
+
footer?: ReactNode;
|
|
56
|
+
wide?: boolean;
|
|
57
|
+
}>;
|
|
58
|
+
export declare const LoadingBlock: FC<{
|
|
59
|
+
label?: string;
|
|
60
|
+
}>;
|
|
61
|
+
export declare const ErrorState: FC<{
|
|
62
|
+
error: unknown;
|
|
63
|
+
onRetry?: () => void;
|
|
64
|
+
}>;
|
|
65
|
+
export declare const Empty: FC<{
|
|
66
|
+
title: string;
|
|
67
|
+
description?: string;
|
|
68
|
+
icon?: ReactNode;
|
|
69
|
+
action?: ReactNode;
|
|
70
|
+
}>;
|
|
71
|
+
export declare const TableWrap: FC<{
|
|
72
|
+
children: ReactNode;
|
|
73
|
+
}>;
|
|
74
|
+
export declare const Th: FC<{
|
|
75
|
+
children?: ReactNode;
|
|
76
|
+
className?: string;
|
|
77
|
+
}>;
|
|
78
|
+
export declare const Td: FC<{
|
|
79
|
+
children?: ReactNode;
|
|
80
|
+
className?: string;
|
|
81
|
+
}>;
|
|
82
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/components/ui.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product-analytics helper for ProServiceWorld.
|
|
3
|
+
*
|
|
4
|
+
* Emits intent/fact event pairs on the shared event bus. New event names are
|
|
5
|
+
* fired via `emitCustom()` until they are added to fe-libs' `BurdenoffEventName`
|
|
6
|
+
* union and the Rybbit allowlist.
|
|
7
|
+
*/
|
|
8
|
+
export type ProServiceWorldEventName = 'psw.client.create_clicked' | 'psw.client.created' | 'psw.client.updated' | 'psw.client.archived' | 'psw.engagement.create_clicked' | 'psw.engagement.created' | 'psw.engagement.transitioned' | 'psw.matter.create_clicked' | 'psw.matter.created' | 'psw.matter.closed' | 'psw.timeentry.create_clicked' | 'psw.timeentry.created' | 'psw.invoice.create_clicked' | 'psw.invoice.created' | 'psw.compliance.create_clicked' | 'psw.compliance.resolved' | 'psw.conflictcheck.run_clicked' | 'psw.conflictcheck.recorded' | 'psw.document.create_clicked' | 'psw.document.created' | 'psw.practicearea.create_clicked' | 'psw.practicearea.created' | 'psw.search.performed' | 'psw.export.requested';
|
|
9
|
+
interface BasePayload {
|
|
10
|
+
workspaceId?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function useAnalytics(): {
|
|
13
|
+
emit: (name: ProServiceWorldEventName, payload?: BasePayload & Record<string, unknown>) => void;
|
|
14
|
+
emitIntent: (name: ProServiceWorldEventName, payload?: BasePayload & Record<string, unknown>) => void;
|
|
15
|
+
emitFact: (name: ProServiceWorldEventName, payload?: BasePayload & Record<string, unknown>) => void;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=useAnalytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/hooks/useAnalytics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,MAAM,wBAAwB,GAChC,2BAA2B,GAC3B,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,+BAA+B,GAC/B,wBAAwB,GACxB,6BAA6B,GAC7B,2BAA2B,GAC3B,oBAAoB,GACpB,mBAAmB,GACnB,8BAA8B,GAC9B,uBAAuB,GACvB,4BAA4B,GAC5B,qBAAqB,GACrB,+BAA+B,GAC/B,yBAAyB,GACzB,+BAA+B,GAC/B,4BAA4B,GAC5B,6BAA6B,GAC7B,sBAAsB,GACtB,iCAAiC,GACjC,0BAA0B,GAC1B,sBAAsB,GACtB,sBAAsB,CAAC;AAE3B,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY;iBAIjB,wBAAwB,YAAW,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;uBAOxE,wBAAwB,YAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAOzE,wBAAwB,YAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAOnF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useCallback as e } from "react";
|
|
2
|
+
import { useEventBus as t } from "@burdenoff/fe-libs/shared/events";
|
|
3
|
+
//#region src/proserviceworld/hooks/useAnalytics.ts
|
|
4
|
+
function n() {
|
|
5
|
+
let n = t(), r = e((e, t = {}) => {
|
|
6
|
+
n.emitCustom(e, t);
|
|
7
|
+
}, [n]);
|
|
8
|
+
return {
|
|
9
|
+
emit: r,
|
|
10
|
+
emitIntent: e((e, t) => {
|
|
11
|
+
r(e, t ?? {});
|
|
12
|
+
}, [r]),
|
|
13
|
+
emitFact: e((e, t) => {
|
|
14
|
+
r(e, t ?? {});
|
|
15
|
+
}, [r])
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { n as useAnalytics };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=useAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAnalytics.js","names":[],"sources":["../../../src/proserviceworld/hooks/useAnalytics.ts"],"sourcesContent":["/**\n * Product-analytics helper for ProServiceWorld.\n *\n * Emits intent/fact event pairs on the shared event bus. New event names are\n * fired via `emitCustom()` until they are added to fe-libs' `BurdenoffEventName`\n * union and the Rybbit allowlist.\n */\n\nimport { useCallback } from 'react';\nimport { useEventBus } from '@burdenoff/fe-libs/shared/events';\n\nexport type ProServiceWorldEventName =\n | 'psw.client.create_clicked'\n | 'psw.client.created'\n | 'psw.client.updated'\n | 'psw.client.archived'\n | 'psw.engagement.create_clicked'\n | 'psw.engagement.created'\n | 'psw.engagement.transitioned'\n | 'psw.matter.create_clicked'\n | 'psw.matter.created'\n | 'psw.matter.closed'\n | 'psw.timeentry.create_clicked'\n | 'psw.timeentry.created'\n | 'psw.invoice.create_clicked'\n | 'psw.invoice.created'\n | 'psw.compliance.create_clicked'\n | 'psw.compliance.resolved'\n | 'psw.conflictcheck.run_clicked'\n | 'psw.conflictcheck.recorded'\n | 'psw.document.create_clicked'\n | 'psw.document.created'\n | 'psw.practicearea.create_clicked'\n | 'psw.practicearea.created'\n | 'psw.search.performed'\n | 'psw.export.requested';\n\ninterface BasePayload {\n workspaceId?: string;\n}\n\nexport function useAnalytics() {\n const bus = useEventBus();\n\n const emit = useCallback(\n (name: ProServiceWorldEventName, payload: BasePayload & Record<string, unknown> = {}) => {\n bus.emitCustom(name, payload);\n },\n [bus]\n );\n\n const emitIntent = useCallback(\n (name: ProServiceWorldEventName, payload?: BasePayload & Record<string, unknown>) => {\n emit(name, payload ?? {});\n },\n [emit]\n );\n\n const emitFact = useCallback(\n (name: ProServiceWorldEventName, payload?: BasePayload & Record<string, unknown>) => {\n emit(name, payload ?? {});\n },\n [emit]\n );\n\n return { emit, emitIntent, emitFact };\n}\n"],"mappings":";;;AAyCA,SAAgB,IAAe;CAC7B,IAAM,IAAM,GAAa,EAEnB,IAAO,GACV,GAAgC,IAAiD,EAAE,KAAK;AACvF,IAAI,WAAW,GAAM,EAAQ;IAE/B,CAAC,EAAI,CACN;AAgBD,QAAO;EAAE;EAAM,YAdI,GAChB,GAAgC,MAAoD;AACnF,KAAK,GAAM,KAAW,EAAE,CAAC;KAE3B,CAAC,EAAK,CACP;EAS0B,UAPV,GACd,GAAgC,MAAoD;AACnF,KAAK,GAAM,KAAW,EAAE,CAAC;KAE3B,CAAC,EAAK,CACP;EAEoC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity discussion via wspace-conversations-svc (NO duplication).
|
|
3
|
+
* @module proserviceworld/hooks
|
|
4
|
+
*
|
|
5
|
+
* ProServiceWorld does NOT own a comments table. Discussion/notes on a client,
|
|
6
|
+
* engagement or matter reuse the shared `wspace-conversations` entity-comment
|
|
7
|
+
* API (createEntityComment / getEntityComments) — the same service that powers
|
|
8
|
+
* comments everywhere on the platform — via the MFE's proven graphqlFetch
|
|
9
|
+
* transport. `entityType` namespaces threads to this product
|
|
10
|
+
* ("proserviceworld-<entity>"); `entityId` is the Psw row id.
|
|
11
|
+
*/
|
|
12
|
+
export interface EntityComment {
|
|
13
|
+
id: string;
|
|
14
|
+
authorId: string;
|
|
15
|
+
content: {
|
|
16
|
+
text: string | null;
|
|
17
|
+
} | null;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
}
|
|
20
|
+
/** List the discussion thread for a Psw entity (most recent first). */
|
|
21
|
+
export declare function useEntityComments(entityType: string, entityId: string | null): import('@tanstack/react-query').UseQueryResult<NoInfer<{
|
|
22
|
+
items: EntityComment[];
|
|
23
|
+
total: number;
|
|
24
|
+
}>, Error>;
|
|
25
|
+
/** Post a plain-text note onto a Psw entity's shared discussion thread. */
|
|
26
|
+
export declare function useAddEntityComment(entityType: string, entityId: string): import('@tanstack/react-query').UseMutationResult<unknown, Error, string, unknown>;
|
|
27
|
+
//# sourceMappingURL=useEntityComments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEntityComments.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/hooks/useEntityComments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;WAMzC,aAAa,EAAE;WAAS,MAAM;WAUjE;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,sFAYvE"}
|