@burdenoff/microfe-proserviceworld 2026.709.2 → 2026.709.3

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 (45) hide show
  1. package/dist/node_modules/clsx/dist/clsx.js +1 -1
  2. package/dist/node_modules/clsx/dist/clsx.js.map +1 -1
  3. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +130 -130
  4. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  5. package/dist/proserviceworld/ProServiceWorldRoot.js +4 -2
  6. package/dist/proserviceworld/ProServiceWorldRoot.js.map +1 -1
  7. package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -1
  8. package/dist/proserviceworld/components/DiscussionThread.js.map +1 -1
  9. package/dist/proserviceworld/components/FeatureFlaggedPage.js.map +1 -1
  10. package/dist/proserviceworld/components/LoadMore.js.map +1 -1
  11. package/dist/proserviceworld/components/TagPicker.js.map +1 -1
  12. package/dist/proserviceworld/components/ui.js.map +1 -1
  13. package/dist/proserviceworld/hooks/useAnalytics.js.map +1 -1
  14. package/dist/proserviceworld/hooks/useEntityComments.js.map +1 -1
  15. package/dist/proserviceworld/hooks/useFiles.js.map +1 -1
  16. package/dist/proserviceworld/hooks/usePageViewAnalytics.js.map +1 -1
  17. package/dist/proserviceworld/hooks/useProServiceWorldApi.js.map +1 -1
  18. package/dist/proserviceworld/i18n/index.js.map +1 -1
  19. package/dist/proserviceworld/index.js +5 -4
  20. package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
  21. package/dist/proserviceworld/pages/ClientDetailPage.js.map +1 -1
  22. package/dist/proserviceworld/pages/ClientsPage.d.ts.map +1 -1
  23. package/dist/proserviceworld/pages/ClientsPage.js +1 -1
  24. package/dist/proserviceworld/pages/ClientsPage.js.map +1 -1
  25. package/dist/proserviceworld/pages/CompliancePage.js.map +1 -1
  26. package/dist/proserviceworld/pages/ConflictsPage.js.map +1 -1
  27. package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
  28. package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
  29. package/dist/proserviceworld/pages/EngagementDetailPage.js.map +1 -1
  30. package/dist/proserviceworld/pages/EngagementsPage.js.map +1 -1
  31. package/dist/proserviceworld/pages/InvoicesPage.js.map +1 -1
  32. package/dist/proserviceworld/pages/MattersPage.js.map +1 -1
  33. package/dist/proserviceworld/pages/PracticeAreasPage.js.map +1 -1
  34. package/dist/proserviceworld/pages/TimePage.js.map +1 -1
  35. package/dist/proserviceworld/providers/ProServiceWorldProvider.js.map +1 -1
  36. package/dist/proserviceworld/services/assistantApi.js.map +1 -1
  37. package/dist/proserviceworld/services/createSandboxAssistantTransport.js.map +1 -1
  38. package/dist/proserviceworld/utils/cn.js +1 -1
  39. package/dist/proserviceworld/utils/cn.js.map +1 -1
  40. package/dist/proserviceworld/utils/native.js.map +1 -1
  41. package/dist/proserviceworld/utils/nav.js.map +1 -1
  42. package/dist/proserviceworld/utils/navigation.js.map +1 -1
  43. package/dist/proserviceworld/utils/pageContext.js +14 -16
  44. package/dist/proserviceworld/utils/pageContext.js.map +1 -1
  45. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","names":[],"sources":["../../../src/proserviceworld/utils/native.ts"],"sourcesContent":["/**\n * ProServiceWorld native-bridge helpers.\n *\n * The host app shell owns the Capacitor bridge and exposes it at\n * `window.__burdenoffNativeBridge`. This module provides typed, safe wrappers\n * that no-op gracefully on web or when the bridge is unavailable.\n */\n\nexport type HapticImpactStyle = 'light' | 'medium' | 'heavy';\n\ndeclare global {\n interface Window {\n __burdenoffNativeBridge?: {\n impact?: (style: HapticImpactStyle) => Promise<void>;\n notify?: (type: 'success' | 'warning' | 'error') => Promise<void>;\n toast?: (message: string, duration?: 'short' | 'long') => Promise<boolean>;\n isNativePlatform?: () => boolean;\n };\n }\n}\n\nfunction getBridge() {\n if (typeof window === 'undefined') return undefined;\n return window.__burdenoffNativeBridge;\n}\n\nexport async function impactFeedback(style: HapticImpactStyle = 'light'): Promise<void> {\n const bridge = getBridge();\n if (!bridge?.impact) return;\n try {\n await bridge.impact(style);\n } catch {\n /* no-op on web / unsupported */\n }\n}\n\nexport async function notifyFeedback(type: 'success' | 'warning' | 'error'): Promise<void> {\n const bridge = getBridge();\n if (!bridge?.notify) return;\n try {\n await bridge.notify(type);\n } catch {\n /* no-op */\n }\n}\n\nexport async function nativeToast(\n message: string,\n duration: 'short' | 'long' = 'short'\n): Promise<void> {\n const bridge = getBridge();\n if (!bridge?.toast) return;\n try {\n await bridge.toast(message, duration);\n } catch {\n /* no-op */\n }\n}\n\nexport function isNativePlatform(): boolean {\n const bridge = getBridge();\n return bridge?.isNativePlatform?.() ?? false;\n}\n"],"mappings":";AAqBA,SAAS,IAAY;AACf,cAAO,SAAW,KACtB,QAAO,OAAO;;AAGhB,eAAsB,EAAe,IAA2B,SAAwB;CACtF,IAAM,IAAS,GAAW;AACrB,QAAQ,OACb,KAAI;AACF,QAAM,EAAO,OAAO,EAAM;SACpB"}
1
+ {"version":3,"file":"native.js","names":[],"sources":["../../../src/proserviceworld/utils/native.ts"],"sourcesContent":["/**\n * ProServiceWorld native-bridge helpers.\n *\n * The host app shell owns the Capacitor bridge and exposes it at\n * `window.__burdenoffNativeBridge`. This module provides typed, safe wrappers\n * that no-op gracefully on web or when the bridge is unavailable.\n */\n\nexport type HapticImpactStyle = 'light' | 'medium' | 'heavy';\n\ndeclare global {\n interface Window {\n __burdenoffNativeBridge?: {\n impact?: (style: HapticImpactStyle) => Promise<void>;\n notify?: (type: 'success' | 'warning' | 'error') => Promise<void>;\n toast?: (message: string, duration?: 'short' | 'long') => Promise<boolean>;\n isNativePlatform?: () => boolean;\n };\n }\n}\n\nfunction getBridge() {\n if (typeof window === 'undefined') return undefined;\n return window.__burdenoffNativeBridge;\n}\n\nexport async function impactFeedback(style: HapticImpactStyle = 'light'): Promise<void> {\n const bridge = getBridge();\n if (!bridge?.impact) return;\n try {\n await bridge.impact(style);\n } catch {\n /* no-op on web / unsupported */\n }\n}\n\nexport async function notifyFeedback(type: 'success' | 'warning' | 'error'): Promise<void> {\n const bridge = getBridge();\n if (!bridge?.notify) return;\n try {\n await bridge.notify(type);\n } catch {\n /* no-op */\n }\n}\n\nexport async function nativeToast(\n message: string,\n duration: 'short' | 'long' = 'short'\n): Promise<void> {\n const bridge = getBridge();\n if (!bridge?.toast) return;\n try {\n await bridge.toast(message, duration);\n } catch {\n /* no-op */\n }\n}\n\nexport function isNativePlatform(): boolean {\n const bridge = getBridge();\n return bridge?.isNativePlatform?.() ?? false;\n}\n"],"mappings":";AAqBA,SAAS,IAAY;CACf,aAAO,SAAW,MACtB,OAAO,OAAO;AAChB;AAEA,eAAsB,EAAe,IAA2B,SAAwB;CACtF,IAAM,IAAS,EAAU;CACpB,OAAQ,QACb,IAAI;EACF,MAAM,EAAO,OAAO,CAAK;CAC3B,QAAQ,CAER;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"nav.js","names":[],"sources":["../../../src/proserviceworld/utils/nav.ts"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { useProServiceWorld } from '../providers/ProServiceWorldProvider';\n\n/**\n * Navigate to a path relative to the MFE's basePath. Works both mounted in a\n * host shell (basePath set, shell BrowserRouter) and standalone (MemoryRouter).\n */\nexport function useNav(): (relative: string) => void {\n const navigate = useNavigate();\n const { basePath = '' } = useProServiceWorld();\n return (relative: string) => navigate(`${basePath}/${relative}`.replace(/\\/{2,}/g, '/'));\n}\n"],"mappings":";;;AAOA,SAAgB,IAAqC;CACnD,IAAM,IAAW,GAAa,EACxB,EAAE,cAAW,OAAO,GAAoB;AAC9C,SAAQ,MAAqB,EAAS,GAAG,EAAS,GAAG,IAAW,QAAQ,WAAW,IAAI,CAAC"}
1
+ {"version":3,"file":"nav.js","names":[],"sources":["../../../src/proserviceworld/utils/nav.ts"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { useProServiceWorld } from '../providers/ProServiceWorldProvider';\n\n/**\n * Navigate to a path relative to the MFE's basePath. Works both mounted in a\n * host shell (basePath set, shell BrowserRouter) and standalone (MemoryRouter).\n */\nexport function useNav(): (relative: string) => void {\n const navigate = useNavigate();\n const { basePath = '' } = useProServiceWorld();\n return (relative: string) => navigate(`${basePath}/${relative}`.replace(/\\/{2,}/g, '/'));\n}\n"],"mappings":";;;AAOA,SAAgB,IAAqC;CACnD,IAAM,IAAW,EAAY,GACvB,EAAE,cAAW,OAAO,EAAmB;CAC7C,QAAQ,MAAqB,EAAS,GAAG,EAAS,GAAG,IAAW,QAAQ,WAAW,GAAG,CAAC;AACzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","names":[],"sources":["../../../src/proserviceworld/utils/navigation.ts"],"sourcesContent":["export function joinPath(basePath: string, relativePath: string): string {\n const cleanBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const cleanPath = relativePath.startsWith('/') ? relativePath : `/${relativePath}`;\n return cleanBase + cleanPath;\n}\n"],"mappings":";AAAA,SAAgB,EAAS,GAAkB,GAA8B;AAGvE,SAFkB,EAAS,SAAS,IAAI,GAAG,EAAS,MAAM,GAAG,GAAG,GAAG,MACjD,EAAa,WAAW,IAAI,GAAG,IAAe,IAAI"}
1
+ {"version":3,"file":"navigation.js","names":[],"sources":["../../../src/proserviceworld/utils/navigation.ts"],"sourcesContent":["export function joinPath(basePath: string, relativePath: string): string {\n const cleanBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const cleanPath = relativePath.startsWith('/') ? relativePath : `/${relativePath}`;\n return cleanBase + cleanPath;\n}\n"],"mappings":";AAAA,SAAgB,EAAS,GAAkB,GAA8B;CAGvE,QAFkB,EAAS,SAAS,GAAG,IAAI,EAAS,MAAM,GAAG,EAAE,IAAI,MACjD,EAAa,WAAW,GAAG,IAAI,IAAe,IAAI;AAEtE"}
@@ -1,25 +1,23 @@
1
- //#region src/proserviceworld/utils/pageContext.ts
2
- var e = "proserviceworld";
3
- function t() {
4
- let t = window.location.href, n = window.location.pathname.split("/").filter(Boolean).slice(0, 3).join("/") || "home", i = r(window.location.pathname, window.location.search);
1
+ function e() {
2
+ let e = window.location.href, t = window.location.pathname.split("/").filter(Boolean).slice(0, 3).join("/") || "home", r = n(window.location.pathname, window.location.search);
5
3
  return {
6
- currentUrl: t,
7
- currentPage: n,
8
- entityType: i.entityType,
9
- entityId: i.entityId,
10
- platform: e,
4
+ currentUrl: e,
5
+ currentPage: t,
6
+ entityType: r.entityType,
7
+ entityId: r.entityId,
8
+ platform: "proserviceworld",
11
9
  version: "2026.709.1",
12
10
  viewportSize: `${window.innerWidth}x${window.innerHeight}`,
13
11
  userAgent: navigator.userAgent,
14
12
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
15
13
  };
16
14
  }
17
- function n(e, t) {
15
+ function t(e, t) {
18
16
  return t.match(e);
19
17
  }
20
- function r(e, t) {
21
- let r = new URLSearchParams(t);
22
- for (let [t, r] of [
18
+ function n(e, n) {
19
+ let r = new URLSearchParams(n);
20
+ for (let [n, r] of [
23
21
  [/^\/proserviceworld\/clients\/([^/]+)$/, "PROSERVICEWORLD_CLIENT"],
24
22
  [/^\/proserviceworld\/engagements\/([^/]+)$/, "PROSERVICEWORLD_ENGAGEMENT"],
25
23
  [/^\/proserviceworld\/matters\/([^/]+)$/, "PROSERVICEWORLD_MATTER"],
@@ -29,11 +27,11 @@ function r(e, t) {
29
27
  [/^\/proserviceworld\/documents\/([^/]+)$/, "PROSERVICEWORLD_DOCUMENT"],
30
28
  [/^\/proserviceworld\/practice-areas\/([^/]+)$/, "PROSERVICEWORLD_PRACTICE_AREA"]
31
29
  ]) {
32
- let i = n(t, e);
30
+ let i = t(n, e);
33
31
  if (i) return {
34
32
  entityType: r,
35
33
  entityId: i[1],
36
- metadata: { routePattern: t.source }
34
+ metadata: { routePattern: n.source }
37
35
  };
38
36
  }
39
37
  let i = {
@@ -69,6 +67,6 @@ function r(e, t) {
69
67
  };
70
68
  }
71
69
  //#endregion
72
- export { t as gatherPageContext };
70
+ export { e as gatherPageContext, n as resolveProServiceWorldConversationContext };
73
71
 
74
72
  //# sourceMappingURL=pageContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pageContext.js","names":[],"sources":["../../../src/proserviceworld/utils/pageContext.ts"],"sourcesContent":["/**\n * Page context gathering for ProServiceWorld.\n *\n * Captures the user's current browser context to be sent alongside every\n * assistant prompt. The exported shape matches the agent's allow-list contract\n * (`currentUrl`, `currentPage`, `entityType`, `entityId`, `platform`, `version`,\n * `viewportSize`).\n */\n\nimport type { PageContext } from '../types';\n\ninterface ConversationContextShape {\n entityType?: string;\n entityId?: string;\n activeTab?: string;\n metadata?: Record<string, unknown>;\n}\n\nconst PRODUCT_ID = 'proserviceworld';\n\nexport function gatherPageContext(): PageContext {\n const url = window.location.href;\n const pathSegments = window.location.pathname.split('/').filter(Boolean);\n const currentPage = pathSegments.slice(0, 3).join('/') || 'home';\n const entity = resolveProServiceWorldConversationContext(\n window.location.pathname,\n window.location.search\n );\n\n return {\n currentUrl: url,\n currentPage,\n entityType: entity.entityType,\n entityId: entity.entityId,\n platform: PRODUCT_ID,\n version: import.meta.env.VITE_APP_VERSION ?? '2026.709.1',\n viewportSize: `${window.innerWidth}x${window.innerHeight}`,\n userAgent: navigator.userAgent,\n timestamp: new Date().toISOString(),\n };\n}\n\nfunction matchPath(pattern: RegExp, pathname: string): RegExpMatchArray | null {\n return pathname.match(pattern);\n}\n\nexport function resolveProServiceWorldConversationContext(\n pathname: string,\n search: string\n): ConversationContextShape {\n const params = new URLSearchParams(search);\n\n const directMatches: Array<[RegExp, string]> = [\n [/^\\/proserviceworld\\/clients\\/([^/]+)$/, 'PROSERVICEWORLD_CLIENT'],\n [/^\\/proserviceworld\\/engagements\\/([^/]+)$/, 'PROSERVICEWORLD_ENGAGEMENT'],\n [/^\\/proserviceworld\\/matters\\/([^/]+)$/, 'PROSERVICEWORLD_MATTER'],\n [/^\\/proserviceworld\\/invoices\\/([^/]+)$/, 'PROSERVICEWORLD_INVOICE'],\n [/^\\/proserviceworld\\/compliance\\/([^/]+)$/, 'PROSERVICEWORLD_COMPLIANCE'],\n [/^\\/proserviceworld\\/conflicts\\/([^/]+)$/, 'PROSERVICEWORLD_CONFLICT'],\n [/^\\/proserviceworld\\/documents\\/([^/]+)$/, 'PROSERVICEWORLD_DOCUMENT'],\n [/^\\/proserviceworld\\/practice-areas\\/([^/]+)$/, 'PROSERVICEWORLD_PRACTICE_AREA'],\n ];\n\n for (const [pattern, entityType] of directMatches) {\n const match = matchPath(pattern, pathname);\n if (match) {\n return {\n entityType,\n entityId: match[1],\n metadata: { routePattern: pattern.source },\n };\n }\n }\n\n const listEntityMap: Record<string, string> = {\n clients: 'PROSERVICEWORLD_CLIENT_LIST',\n engagements: 'PROSERVICEWORLD_ENGAGEMENT_LIST',\n matters: 'PROSERVICEWORLD_MATTER_LIST',\n time: 'PROSERVICEWORLD_TIME',\n invoices: 'PROSERVICEWORLD_INVOICE_LIST',\n compliance: 'PROSERVICEWORLD_COMPLIANCE_LIST',\n conflicts: 'PROSERVICEWORLD_CONFLICT_LIST',\n documents: 'PROSERVICEWORLD_DOCUMENT_LIST',\n 'practice-areas': 'PROSERVICEWORLD_PRACTICE_AREA_LIST',\n analytics: 'PROSERVICEWORLD_ANALYTICS',\n };\n\n const listMatch = pathname.match(/^\\/proserviceworld\\/([^/]+)$/);\n if (listMatch) {\n const entityType = listEntityMap[listMatch[1] ?? ''];\n if (entityType) {\n return { entityType, metadata: { routePattern: listMatch[0] } };\n }\n }\n\n const activeTab =\n params.get('tab') ??\n (() => {\n const segments = pathname.split('/').filter(Boolean);\n return segments.length > 2 ? segments[segments.length - 1] : undefined;\n })();\n\n return {\n activeTab: activeTab ?? undefined,\n metadata: {\n ...(activeTab ? { activeTab } : {}),\n ...(params.get('selectedTargetId')\n ? { selectedTargetId: params.get('selectedTargetId') }\n : {}),\n ...(params.get('actionId') ? { actionId: params.get('actionId') } : {}),\n },\n };\n}\n"],"mappings":";AAkBA,IAAM,IAAa;AAEnB,SAAgB,IAAiC;CAC/C,IAAM,IAAM,OAAO,SAAS,MAEtB,IADe,OAAO,SAAS,SAAS,MAAM,IAAI,CAAC,OAAO,QAAQ,CACvC,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,IAAI,QACpD,IAAS,EACb,OAAO,SAAS,UAChB,OAAO,SAAS,OACjB;AAED,QAAO;EACL,YAAY;EACZ;EACA,YAAY,EAAO;EACnB,UAAU,EAAO;EACjB,UAAU;EACV,SAA6C;EAC7C,cAAc,GAAG,OAAO,WAAW,GAAG,OAAO;EAC7C,WAAW,UAAU;EACrB,4BAAW,IAAI,MAAM,EAAC,aAAa;EACpC;;AAGH,SAAS,EAAU,GAAiB,GAA2C;AAC7E,QAAO,EAAS,MAAM,EAAQ;;AAGhC,SAAgB,EACd,GACA,GAC0B;CAC1B,IAAM,IAAS,IAAI,gBAAgB,EAAO;AAa1C,MAAK,IAAM,CAAC,GAAS,MAX0B;EAC7C,CAAC,yCAAyC,yBAAyB;EACnE,CAAC,6CAA6C,6BAA6B;EAC3E,CAAC,yCAAyC,yBAAyB;EACnE,CAAC,0CAA0C,0BAA0B;EACrE,CAAC,4CAA4C,6BAA6B;EAC1E,CAAC,2CAA2C,2BAA2B;EACvE,CAAC,2CAA2C,2BAA2B;EACvE,CAAC,gDAAgD,gCAAgC;EAClF,EAEkD;EACjD,IAAM,IAAQ,EAAU,GAAS,EAAS;AAC1C,MAAI,EACF,QAAO;GACL;GACA,UAAU,EAAM;GAChB,UAAU,EAAE,cAAc,EAAQ,QAAQ;GAC3C;;CAIL,IAAM,IAAwC;EAC5C,SAAS;EACT,aAAa;EACb,SAAS;EACT,MAAM;EACN,UAAU;EACV,YAAY;EACZ,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,WAAW;EACZ,EAEK,IAAY,EAAS,MAAM,+BAA+B;AAChE,KAAI,GAAW;EACb,IAAM,IAAa,EAAc,EAAU,MAAM;AACjD,MAAI,EACF,QAAO;GAAE;GAAY,UAAU,EAAE,cAAc,EAAU,IAAI;GAAE;;CAInE,IAAM,IACJ,EAAO,IAAI,MAAM,WACV;EACL,IAAM,IAAW,EAAS,MAAM,IAAI,CAAC,OAAO,QAAQ;AACpD,SAAO,EAAS,SAAS,IAAI,EAAS,EAAS,SAAS,KAAK,KAAA;KAC3D;AAEN,QAAO;EACL,WAAW,KAAa,KAAA;EACxB,UAAU;GACR,GAAI,IAAY,EAAE,cAAW,GAAG,EAAE;GAClC,GAAI,EAAO,IAAI,mBAAmB,GAC9B,EAAE,kBAAkB,EAAO,IAAI,mBAAmB,EAAE,GACpD,EAAE;GACN,GAAI,EAAO,IAAI,WAAW,GAAG,EAAE,UAAU,EAAO,IAAI,WAAW,EAAE,GAAG,EAAE;GACvE;EACF"}
1
+ {"version":3,"file":"pageContext.js","names":[],"sources":["../../../src/proserviceworld/utils/pageContext.ts"],"sourcesContent":["/**\n * Page context gathering for ProServiceWorld.\n *\n * Captures the user's current browser context to be sent alongside every\n * assistant prompt. The exported shape matches the agent's allow-list contract\n * (`currentUrl`, `currentPage`, `entityType`, `entityId`, `platform`, `version`,\n * `viewportSize`).\n */\n\nimport type { PageContext } from '../types';\n\ninterface ConversationContextShape {\n entityType?: string;\n entityId?: string;\n activeTab?: string;\n metadata?: Record<string, unknown>;\n}\n\nconst PRODUCT_ID = 'proserviceworld';\n\nexport function gatherPageContext(): PageContext {\n const url = window.location.href;\n const pathSegments = window.location.pathname.split('/').filter(Boolean);\n const currentPage = pathSegments.slice(0, 3).join('/') || 'home';\n const entity = resolveProServiceWorldConversationContext(\n window.location.pathname,\n window.location.search\n );\n\n return {\n currentUrl: url,\n currentPage,\n entityType: entity.entityType,\n entityId: entity.entityId,\n platform: PRODUCT_ID,\n version: import.meta.env.VITE_APP_VERSION ?? '2026.709.1',\n viewportSize: `${window.innerWidth}x${window.innerHeight}`,\n userAgent: navigator.userAgent,\n timestamp: new Date().toISOString(),\n };\n}\n\nfunction matchPath(pattern: RegExp, pathname: string): RegExpMatchArray | null {\n return pathname.match(pattern);\n}\n\nexport function resolveProServiceWorldConversationContext(\n pathname: string,\n search: string\n): ConversationContextShape {\n const params = new URLSearchParams(search);\n\n const directMatches: Array<[RegExp, string]> = [\n [/^\\/proserviceworld\\/clients\\/([^/]+)$/, 'PROSERVICEWORLD_CLIENT'],\n [/^\\/proserviceworld\\/engagements\\/([^/]+)$/, 'PROSERVICEWORLD_ENGAGEMENT'],\n [/^\\/proserviceworld\\/matters\\/([^/]+)$/, 'PROSERVICEWORLD_MATTER'],\n [/^\\/proserviceworld\\/invoices\\/([^/]+)$/, 'PROSERVICEWORLD_INVOICE'],\n [/^\\/proserviceworld\\/compliance\\/([^/]+)$/, 'PROSERVICEWORLD_COMPLIANCE'],\n [/^\\/proserviceworld\\/conflicts\\/([^/]+)$/, 'PROSERVICEWORLD_CONFLICT'],\n [/^\\/proserviceworld\\/documents\\/([^/]+)$/, 'PROSERVICEWORLD_DOCUMENT'],\n [/^\\/proserviceworld\\/practice-areas\\/([^/]+)$/, 'PROSERVICEWORLD_PRACTICE_AREA'],\n ];\n\n for (const [pattern, entityType] of directMatches) {\n const match = matchPath(pattern, pathname);\n if (match) {\n return {\n entityType,\n entityId: match[1],\n metadata: { routePattern: pattern.source },\n };\n }\n }\n\n const listEntityMap: Record<string, string> = {\n clients: 'PROSERVICEWORLD_CLIENT_LIST',\n engagements: 'PROSERVICEWORLD_ENGAGEMENT_LIST',\n matters: 'PROSERVICEWORLD_MATTER_LIST',\n time: 'PROSERVICEWORLD_TIME',\n invoices: 'PROSERVICEWORLD_INVOICE_LIST',\n compliance: 'PROSERVICEWORLD_COMPLIANCE_LIST',\n conflicts: 'PROSERVICEWORLD_CONFLICT_LIST',\n documents: 'PROSERVICEWORLD_DOCUMENT_LIST',\n 'practice-areas': 'PROSERVICEWORLD_PRACTICE_AREA_LIST',\n analytics: 'PROSERVICEWORLD_ANALYTICS',\n };\n\n const listMatch = pathname.match(/^\\/proserviceworld\\/([^/]+)$/);\n if (listMatch) {\n const entityType = listEntityMap[listMatch[1] ?? ''];\n if (entityType) {\n return { entityType, metadata: { routePattern: listMatch[0] } };\n }\n }\n\n const activeTab =\n params.get('tab') ??\n (() => {\n const segments = pathname.split('/').filter(Boolean);\n return segments.length > 2 ? segments[segments.length - 1] : undefined;\n })();\n\n return {\n activeTab: activeTab ?? undefined,\n metadata: {\n ...(activeTab ? { activeTab } : {}),\n ...(params.get('selectedTargetId')\n ? { selectedTargetId: params.get('selectedTargetId') }\n : {}),\n ...(params.get('actionId') ? { actionId: params.get('actionId') } : {}),\n },\n };\n}\n"],"mappings":"AAoBA,SAAgB,IAAiC;CAC/C,IAAM,IAAM,OAAO,SAAS,MAEtB,IADe,OAAO,SAAS,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAC5C,CAAA,CAAa,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,QACpD,IAAS,EACb,OAAO,SAAS,UAChB,OAAO,SAAS,MAClB;CAEA,OAAO;EACL,YAAY;EACZ;EACA,YAAY,EAAO;EACnB,UAAU,EAAO;EACjB,UAAU;EACV,SAA6C;EAC7C,cAAc,GAAG,OAAO,WAAW,GAAG,OAAO;EAC7C,WAAW,UAAU;EACrB,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;CACpC;AACF;AAEA,SAAS,EAAU,GAAiB,GAA2C;CAC7E,OAAO,EAAS,MAAM,CAAO;AAC/B;AAEA,SAAgB,EACd,GACA,GAC0B;CAC1B,IAAM,IAAS,IAAI,gBAAgB,CAAM;CAazC,KAAK,IAAM,CAAC,GAAS,MAAe;EAVlC,CAAC,yCAAyC,wBAAwB;EAClE,CAAC,6CAA6C,4BAA4B;EAC1E,CAAC,yCAAyC,wBAAwB;EAClE,CAAC,0CAA0C,yBAAyB;EACpE,CAAC,4CAA4C,4BAA4B;EACzE,CAAC,2CAA2C,0BAA0B;EACtE,CAAC,2CAA2C,0BAA0B;EACtE,CAAC,gDAAgD,+BAA+B;CAG9C,GAAe;EACjD,IAAM,IAAQ,EAAU,GAAS,CAAQ;EACzC,IAAI,GACF,OAAO;GACL;GACA,UAAU,EAAM;GAChB,UAAU,EAAE,cAAc,EAAQ,OAAO;EAC3C;CAEJ;CAEA,IAAM,IAAwC;EAC5C,SAAS;EACT,aAAa;EACb,SAAS;EACT,MAAM;EACN,UAAU;EACV,YAAY;EACZ,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,WAAW;CACb,GAEM,IAAY,EAAS,MAAM,8BAA8B;CAC/D,IAAI,GAAW;EACb,IAAM,IAAa,EAAc,EAAU,MAAM;EACjD,IAAI,GACF,OAAO;GAAE;GAAY,UAAU,EAAE,cAAc,EAAU,GAAG;EAAE;CAElE;CAEA,IAAM,IACJ,EAAO,IAAI,KAAK,YACT;EACL,IAAM,IAAW,EAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;EACnD,OAAO,EAAS,SAAS,IAAI,EAAS,EAAS,SAAS,KAAK,KAAA;CAC/D,EAAA,CAAG;CAEL,OAAO;EACL,WAAW,KAAa,KAAA;EACxB,UAAU;GACR,GAAI,IAAY,EAAE,aAAU,IAAI,CAAC;GACjC,GAAI,EAAO,IAAI,kBAAkB,IAC7B,EAAE,kBAAkB,EAAO,IAAI,kBAAkB,EAAE,IACnD,CAAC;GACL,GAAI,EAAO,IAAI,UAAU,IAAI,EAAE,UAAU,EAAO,IAAI,UAAU,EAAE,IAAI,CAAC;EACvE;CACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-proserviceworld",
3
- "version": "2026.709.2",
3
+ "version": "2026.709.3",
4
4
  "description": "Burdenoff ProServiceWorld Microfrontend",
5
5
  "type": "module",
6
6
  "files": [
@@ -76,7 +76,7 @@
76
76
  "tailwindcss": "^4.0.0",
77
77
  "typescript": "^5.9.0",
78
78
  "typescript-eslint": "^8.54.0",
79
- "vite": "8.0.8",
79
+ "vite": "8.1.4",
80
80
  "vite-plugin-dts": "3.9.1"
81
81
  },
82
82
  "peerDependencies": {