@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.
Files changed (119) hide show
  1. package/dist/dev/main.d.ts +2 -0
  2. package/dist/dev/main.d.ts.map +1 -0
  3. package/dist/generated/global-operations.d.ts +2 -0
  4. package/dist/generated/global-operations.d.ts.map +1 -0
  5. package/dist/generated/global-types.d.ts +18199 -0
  6. package/dist/generated/global-types.d.ts.map +1 -0
  7. package/dist/generated/wspace-operations.d.ts +2 -0
  8. package/dist/generated/wspace-operations.d.ts.map +1 -0
  9. package/dist/generated/wspace-types.d.ts +43046 -0
  10. package/dist/generated/wspace-types.d.ts.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +3 -1
  14. package/dist/proserviceworld/ProServiceWorldRoot.d.ts +5 -0
  15. package/dist/proserviceworld/ProServiceWorldRoot.d.ts.map +1 -0
  16. package/dist/proserviceworld/ProServiceWorldRoutes.d.ts +2 -0
  17. package/dist/proserviceworld/ProServiceWorldRoutes.d.ts.map +1 -0
  18. package/dist/proserviceworld/ProServiceWorldRoutes.js +95 -42
  19. package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -1
  20. package/dist/proserviceworld/components/DiscussionThread.d.ts +12 -0
  21. package/dist/proserviceworld/components/DiscussionThread.d.ts.map +1 -0
  22. package/dist/proserviceworld/components/FeatureFlaggedPage.d.ts +8 -0
  23. package/dist/proserviceworld/components/FeatureFlaggedPage.d.ts.map +1 -0
  24. package/dist/proserviceworld/components/FeatureFlaggedPage.js +17 -0
  25. package/dist/proserviceworld/components/FeatureFlaggedPage.js.map +1 -0
  26. package/dist/proserviceworld/components/LoadMore.d.ts +12 -0
  27. package/dist/proserviceworld/components/LoadMore.d.ts.map +1 -0
  28. package/dist/proserviceworld/components/LoadMore.js +30 -0
  29. package/dist/proserviceworld/components/LoadMore.js.map +1 -0
  30. package/dist/proserviceworld/components/TagPicker.d.ts +11 -0
  31. package/dist/proserviceworld/components/TagPicker.d.ts.map +1 -0
  32. package/dist/proserviceworld/components/TagPicker.js +31 -0
  33. package/dist/proserviceworld/components/TagPicker.js.map +1 -0
  34. package/dist/proserviceworld/components/ui.d.ts +82 -0
  35. package/dist/proserviceworld/components/ui.d.ts.map +1 -0
  36. package/dist/proserviceworld/hooks/useAnalytics.d.ts +18 -0
  37. package/dist/proserviceworld/hooks/useAnalytics.d.ts.map +1 -0
  38. package/dist/proserviceworld/hooks/useAnalytics.js +21 -0
  39. package/dist/proserviceworld/hooks/useAnalytics.js.map +1 -0
  40. package/dist/proserviceworld/hooks/useEntityComments.d.ts +27 -0
  41. package/dist/proserviceworld/hooks/useEntityComments.d.ts.map +1 -0
  42. package/dist/proserviceworld/hooks/useFiles.d.ts +23 -0
  43. package/dist/proserviceworld/hooks/useFiles.d.ts.map +1 -0
  44. package/dist/proserviceworld/hooks/usePageViewAnalytics.d.ts +10 -0
  45. package/dist/proserviceworld/hooks/usePageViewAnalytics.d.ts.map +1 -0
  46. package/dist/proserviceworld/hooks/usePageViewAnalytics.js +24 -0
  47. package/dist/proserviceworld/hooks/usePageViewAnalytics.js.map +1 -0
  48. package/dist/proserviceworld/hooks/useProServiceWorldApi.d.ts +351 -0
  49. package/dist/proserviceworld/hooks/useProServiceWorldApi.d.ts.map +1 -0
  50. package/dist/proserviceworld/hooks/useProServiceWorldApi.js +47 -27
  51. package/dist/proserviceworld/hooks/useProServiceWorldApi.js.map +1 -1
  52. package/dist/proserviceworld/i18n/index.d.ts +13 -0
  53. package/dist/proserviceworld/i18n/index.d.ts.map +1 -0
  54. package/dist/proserviceworld/i18n/index.js +171 -0
  55. package/dist/proserviceworld/i18n/index.js.map +1 -0
  56. package/dist/proserviceworld/index.d.ts +6 -0
  57. package/dist/proserviceworld/index.d.ts.map +1 -0
  58. package/dist/proserviceworld/index.js +2 -0
  59. package/dist/proserviceworld/pages/AnalyticsPage.d.ts +4 -0
  60. package/dist/proserviceworld/pages/AnalyticsPage.d.ts.map +1 -0
  61. package/dist/proserviceworld/pages/ClientDetailPage.d.ts +4 -0
  62. package/dist/proserviceworld/pages/ClientDetailPage.d.ts.map +1 -0
  63. package/dist/proserviceworld/pages/ClientsPage.d.ts +9 -0
  64. package/dist/proserviceworld/pages/ClientsPage.d.ts.map +1 -0
  65. package/dist/proserviceworld/pages/ClientsPage.js +218 -155
  66. package/dist/proserviceworld/pages/ClientsPage.js.map +1 -1
  67. package/dist/proserviceworld/pages/CompliancePage.d.ts +4 -0
  68. package/dist/proserviceworld/pages/CompliancePage.d.ts.map +1 -0
  69. package/dist/proserviceworld/pages/ConflictsPage.d.ts +4 -0
  70. package/dist/proserviceworld/pages/ConflictsPage.d.ts.map +1 -0
  71. package/dist/proserviceworld/pages/DashboardPage.d.ts +4 -0
  72. package/dist/proserviceworld/pages/DashboardPage.d.ts.map +1 -0
  73. package/dist/proserviceworld/pages/DocumentsPage.d.ts +4 -0
  74. package/dist/proserviceworld/pages/DocumentsPage.d.ts.map +1 -0
  75. package/dist/proserviceworld/pages/EngagementDetailPage.d.ts +4 -0
  76. package/dist/proserviceworld/pages/EngagementDetailPage.d.ts.map +1 -0
  77. package/dist/proserviceworld/pages/EngagementDetailPage.js +162 -156
  78. package/dist/proserviceworld/pages/EngagementDetailPage.js.map +1 -1
  79. package/dist/proserviceworld/pages/EngagementsPage.d.ts +4 -0
  80. package/dist/proserviceworld/pages/EngagementsPage.d.ts.map +1 -0
  81. package/dist/proserviceworld/pages/EngagementsPage.js +201 -140
  82. package/dist/proserviceworld/pages/EngagementsPage.js.map +1 -1
  83. package/dist/proserviceworld/pages/InvoicesPage.d.ts +4 -0
  84. package/dist/proserviceworld/pages/InvoicesPage.d.ts.map +1 -0
  85. package/dist/proserviceworld/pages/MattersPage.d.ts +4 -0
  86. package/dist/proserviceworld/pages/MattersPage.d.ts.map +1 -0
  87. package/dist/proserviceworld/pages/MattersPage.js +212 -158
  88. package/dist/proserviceworld/pages/MattersPage.js.map +1 -1
  89. package/dist/proserviceworld/pages/PracticeAreasPage.d.ts +4 -0
  90. package/dist/proserviceworld/pages/PracticeAreasPage.d.ts.map +1 -0
  91. package/dist/proserviceworld/pages/TimePage.d.ts +4 -0
  92. package/dist/proserviceworld/pages/TimePage.d.ts.map +1 -0
  93. package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts +6 -0
  94. package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts.map +1 -0
  95. package/dist/proserviceworld/services/assistantApi.d.ts +74 -0
  96. package/dist/proserviceworld/services/assistantApi.d.ts.map +1 -0
  97. package/dist/proserviceworld/services/assistantApi.js +203 -0
  98. package/dist/proserviceworld/services/assistantApi.js.map +1 -0
  99. package/dist/proserviceworld/services/createSandboxAssistantTransport.d.ts +28 -0
  100. package/dist/proserviceworld/services/createSandboxAssistantTransport.d.ts.map +1 -0
  101. package/dist/proserviceworld/services/createSandboxAssistantTransport.js +120 -0
  102. package/dist/proserviceworld/services/createSandboxAssistantTransport.js.map +1 -0
  103. package/dist/proserviceworld/types/index.d.ts +57 -0
  104. package/dist/proserviceworld/types/index.d.ts.map +1 -0
  105. package/dist/proserviceworld/utils/cn.d.ts +4 -0
  106. package/dist/proserviceworld/utils/cn.d.ts.map +1 -0
  107. package/dist/proserviceworld/utils/native.d.ts +23 -0
  108. package/dist/proserviceworld/utils/native.d.ts.map +1 -0
  109. package/dist/proserviceworld/utils/native.js +14 -0
  110. package/dist/proserviceworld/utils/native.js.map +1 -0
  111. package/dist/proserviceworld/utils/nav.d.ts +6 -0
  112. package/dist/proserviceworld/utils/nav.d.ts.map +1 -0
  113. package/dist/proserviceworld/utils/navigation.d.ts +2 -0
  114. package/dist/proserviceworld/utils/navigation.d.ts.map +1 -0
  115. package/dist/proserviceworld/utils/pageContext.d.ts +12 -0
  116. package/dist/proserviceworld/utils/pageContext.d.ts.map +1 -0
  117. package/dist/proserviceworld/utils/pageContext.js +74 -0
  118. package/dist/proserviceworld/utils/pageContext.js.map +1 -0
  119. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ export * from './proserviceworld';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ import { FC } from 'react';
2
+ import { ProServiceWorldRootProps } from './types';
3
+
4
+ export declare const ProServiceWorldRoot: FC<ProServiceWorldRootProps>;
5
+ //# sourceMappingURL=ProServiceWorldRoot.d.ts.map
@@ -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,2 @@
1
+ export declare function ProServiceWorldRoutes(): import("react").JSX.Element;
2
+ //# sourceMappingURL=ProServiceWorldRoutes.d.ts.map
@@ -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 { Suspense as t, lazy as n } from "react";
3
- import { Loader2 as r } from "lucide-react";
4
- import { Navigate as i, Route as a, Routes as o } from "react-router-dom";
5
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
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 l = n(() => import("./pages/ClientsPage.js").then((e) => ({ default: e.ClientsPage }))), u = n(() => import("./pages/ClientDetailPage.js").then((e) => ({ default: e.ClientDetailPage }))), d = n(() => import("./pages/EngagementsPage.js").then((e) => ({ default: e.EngagementsPage }))), f = n(() => import("./pages/EngagementDetailPage.js").then((e) => ({ default: e.EngagementDetailPage }))), p = n(() => import("./pages/MattersPage.js").then((e) => ({ default: e.MattersPage }))), m = n(() => import("./pages/TimePage.js").then((e) => ({ default: e.TimePage }))), h = n(() => import("./pages/InvoicesPage.js").then((e) => ({ default: e.InvoicesPage }))), g = n(() => import("./pages/CompliancePage.js").then((e) => ({ default: e.CompliancePage }))), _ = n(() => import("./pages/ConflictsPage.js").then((e) => ({ default: e.ConflictsPage }))), v = n(() => import("./pages/DocumentsPage.js").then((e) => ({ default: e.DocumentsPage }))), y = n(() => import("./pages/PracticeAreasPage.js").then((e) => ({ default: e.PracticeAreasPage }))), b = n(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage })));
8
- function x() {
9
- return /* @__PURE__ */ s("div", {
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__ */ s(r, { className: "h-8 w-8 animate-spin text-accent" })
13
+ children: /* @__PURE__ */ l(a, { className: "h-8 w-8 animate-spin text-accent" })
12
14
  });
13
15
  }
14
- function S() {
15
- return /* @__PURE__ */ s(t, {
16
- fallback: /* @__PURE__ */ s(x, {}),
17
- children: /* @__PURE__ */ c(o, { children: [
18
- /* @__PURE__ */ s(a, {
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__ */ s(e, {})
34
+ element: /* @__PURE__ */ l(T, {
35
+ pageId: "dashboard",
36
+ children: /* @__PURE__ */ l(e, {})
37
+ })
21
38
  }),
22
- /* @__PURE__ */ s(a, {
39
+ /* @__PURE__ */ l(s, {
23
40
  path: "clients",
24
- element: /* @__PURE__ */ s(l, {})
41
+ element: /* @__PURE__ */ l(T, {
42
+ pageId: "clients",
43
+ children: /* @__PURE__ */ l(d, {})
44
+ })
25
45
  }),
26
- /* @__PURE__ */ s(a, {
46
+ /* @__PURE__ */ l(s, {
27
47
  path: "clients/:id",
28
- element: /* @__PURE__ */ s(u, {})
48
+ element: /* @__PURE__ */ l(T, {
49
+ pageId: "client-detail",
50
+ children: /* @__PURE__ */ l(f, {})
51
+ })
29
52
  }),
30
- /* @__PURE__ */ s(a, {
53
+ /* @__PURE__ */ l(s, {
31
54
  path: "engagements",
32
- element: /* @__PURE__ */ s(d, {})
55
+ element: /* @__PURE__ */ l(T, {
56
+ pageId: "engagements",
57
+ children: /* @__PURE__ */ l(p, {})
58
+ })
33
59
  }),
34
- /* @__PURE__ */ s(a, {
60
+ /* @__PURE__ */ l(s, {
35
61
  path: "engagements/:id",
36
- element: /* @__PURE__ */ s(f, {})
62
+ element: /* @__PURE__ */ l(T, {
63
+ pageId: "engagement-detail",
64
+ children: /* @__PURE__ */ l(m, {})
65
+ })
37
66
  }),
38
- /* @__PURE__ */ s(a, {
67
+ /* @__PURE__ */ l(s, {
39
68
  path: "matters",
40
- element: /* @__PURE__ */ s(p, {})
69
+ element: /* @__PURE__ */ l(T, {
70
+ pageId: "matters",
71
+ children: /* @__PURE__ */ l(h, {})
72
+ })
41
73
  }),
42
- /* @__PURE__ */ s(a, {
74
+ /* @__PURE__ */ l(s, {
43
75
  path: "time",
44
- element: /* @__PURE__ */ s(m, {})
76
+ element: /* @__PURE__ */ l(T, {
77
+ pageId: "time",
78
+ children: /* @__PURE__ */ l(g, {})
79
+ })
45
80
  }),
46
- /* @__PURE__ */ s(a, {
81
+ /* @__PURE__ */ l(s, {
47
82
  path: "invoices",
48
- element: /* @__PURE__ */ s(h, {})
83
+ element: /* @__PURE__ */ l(T, {
84
+ pageId: "invoices",
85
+ children: /* @__PURE__ */ l(_, {})
86
+ })
49
87
  }),
50
- /* @__PURE__ */ s(a, {
88
+ /* @__PURE__ */ l(s, {
51
89
  path: "compliance",
52
- element: /* @__PURE__ */ s(g, {})
90
+ element: /* @__PURE__ */ l(T, {
91
+ pageId: "compliance",
92
+ children: /* @__PURE__ */ l(v, {})
93
+ })
53
94
  }),
54
- /* @__PURE__ */ s(a, {
95
+ /* @__PURE__ */ l(s, {
55
96
  path: "conflicts",
56
- element: /* @__PURE__ */ s(_, {})
97
+ element: /* @__PURE__ */ l(T, {
98
+ pageId: "conflicts",
99
+ children: /* @__PURE__ */ l(y, {})
100
+ })
57
101
  }),
58
- /* @__PURE__ */ s(a, {
102
+ /* @__PURE__ */ l(s, {
59
103
  path: "documents",
60
- element: /* @__PURE__ */ s(v, {})
104
+ element: /* @__PURE__ */ l(T, {
105
+ pageId: "documents",
106
+ children: /* @__PURE__ */ l(b, {})
107
+ })
61
108
  }),
62
- /* @__PURE__ */ s(a, {
109
+ /* @__PURE__ */ l(s, {
63
110
  path: "practice-areas",
64
- element: /* @__PURE__ */ s(y, {})
111
+ element: /* @__PURE__ */ l(T, {
112
+ pageId: "practice-areas",
113
+ children: /* @__PURE__ */ l(x, {})
114
+ })
65
115
  }),
66
- /* @__PURE__ */ s(a, {
116
+ /* @__PURE__ */ l(s, {
67
117
  path: "analytics",
68
- element: /* @__PURE__ */ s(b, {})
118
+ element: /* @__PURE__ */ l(T, {
119
+ pageId: "analytics",
120
+ children: /* @__PURE__ */ l(S, {})
121
+ })
69
122
  }),
70
- /* @__PURE__ */ s(a, {
123
+ /* @__PURE__ */ l(s, {
71
124
  path: "*",
72
- element: /* @__PURE__ */ s(i, {
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 { S as ProServiceWorldRoutes };
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 index element={<DashboardPage />} />\n <Route path=\"clients\" element={<ClientsPage />} />\n <Route path=\"clients/:id\" element={<ClientDetailPage />} />\n <Route path=\"engagements\" element={<EngagementsPage />} />\n <Route path=\"engagements/:id\" element={<EngagementDetailPage />} />\n <Route path=\"matters\" element={<MattersPage />} />\n <Route path=\"time\" element={<TimePage />} />\n <Route path=\"invoices\" element={<InvoicesPage />} />\n <Route path=\"compliance\" element={<CompliancePage />} />\n <Route path=\"conflicts\" element={<ConflictsPage />} />\n <Route path=\"documents\" element={<DocumentsPage />} />\n <Route path=\"practice-areas\" element={<PracticeAreasPage />} />\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
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,8 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ export interface FeatureFlaggedPageProps {
4
+ pageId: string;
5
+ children: ReactNode;
6
+ }
7
+ export declare const FeatureFlaggedPage: FC<FeatureFlaggedPageProps>;
8
+ //# sourceMappingURL=FeatureFlaggedPage.d.ts.map
@@ -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"}