@burdenoff/microfe-proserviceworld 2026.709.3 → 2026.713.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AA4KtE,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,CAGlF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AA6MtE,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,CAGlF"}
@@ -24,7 +24,36 @@ var e = {
24
24
  "psw.common.showing": "Showing",
25
25
  "psw.common.of": "of",
26
26
  "psw.tags.title": "Tags",
27
- "psw.tags.add": "Add tag"
27
+ "psw.tags.add": "Add tag",
28
+ "psw.engagements.title": "Engagements",
29
+ "psw.engagements.subtitle": "The commercial containers of contracted work — scope, fee arrangement, delivery lifecycle, and billing.",
30
+ "psw.engagements.new": "New engagement",
31
+ "psw.engagements.searchPlaceholder": "Search engagements…",
32
+ "psw.engagements.allStatuses": "All statuses",
33
+ "psw.engagements.allClients": "All clients",
34
+ "psw.engagements.emptyTitle": "No engagements yet",
35
+ "psw.engagements.emptyDescription": "Create your first engagement to scope work, set fees, and track delivery.",
36
+ "psw.engagements.tableEngagement": "Engagement",
37
+ "psw.engagements.tableClient": "Client",
38
+ "psw.engagements.tableFee": "Fee",
39
+ "psw.engagements.tableStatus": "Status",
40
+ "psw.engagements.tableStarted": "Started",
41
+ "psw.engagements.tableTags": "Tags",
42
+ "psw.engagements.newTitle": "New engagement",
43
+ "psw.matters.title": "Matters",
44
+ "psw.matters.subtitle": "The regulated threads of work — legal matters, audits, filings — with their own deadlines and sensitive-document handling.",
45
+ "psw.matters.new": "New matter",
46
+ "psw.matters.searchPlaceholder": "Search matters…",
47
+ "psw.matters.allStatuses": "All statuses",
48
+ "psw.matters.emptyTitle": "No matters yet",
49
+ "psw.matters.emptyDescription": "Create your first matter to track deadlines, privileged documents, and status.",
50
+ "psw.matters.tableMatter": "Matter",
51
+ "psw.matters.tableClient": "Client",
52
+ "psw.matters.tablePriority": "Priority",
53
+ "psw.matters.tableStatus": "Status",
54
+ "psw.matters.tableDue": "Due",
55
+ "psw.matters.tableTags": "Tags",
56
+ "psw.matters.newTitle": "New matter"
28
57
  },
29
58
  es: {
30
59
  "psw.clients.title": "Clientes",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/proserviceworld/i18n/index.ts"],"sourcesContent":["/**\n * ProServiceWorld MFE local i18n.\n *\n * The host app shell owns the global I18nProvider and product translations.\n * This lightweight module provides fallback translations for MFE-owned UI\n * strings (page titles, empty states, form labels) so the MFE can be mounted\n * standalone (dev harness, tests) and still render in all supported locales.\n * When running inside the shell, the shell's `useI18n` translations take\n * precedence via the `t` helper below.\n */\n\nexport type SupportedLocale = 'en' | 'es' | 'hi' | 'ta' | 'zh' | 'ar';\n\nconst translations: Record<SupportedLocale, Record<string, string>> = {\n en: {\n 'psw.clients.title': 'Clients',\n 'psw.clients.subtitle': 'Every person or organization your firm serves.',\n 'psw.clients.emptyTitle': 'No clients yet',\n 'psw.clients.emptyDescription':\n 'Add your first client to start scoping engagements and matters.',\n 'psw.clients.new': 'New client',\n 'psw.clients.searchPlaceholder': 'Search clients…',\n 'psw.clients.allStatuses': 'All statuses',\n 'psw.common.loading': 'Loading…',\n 'psw.common.retry': 'Retry',\n 'psw.common.cancel': 'Cancel',\n 'psw.common.save': 'Save',\n 'psw.common.create': 'Create',\n 'psw.common.edit': 'Edit',\n 'psw.common.archive': 'Archive',\n 'psw.common.actions': 'Actions',\n 'psw.common.name': 'Name',\n 'psw.common.status': 'Status',\n 'psw.common.type': 'Type',\n 'psw.common.added': 'Added',\n 'psw.common.loadMore': 'Load more',\n 'psw.common.showing': 'Showing',\n 'psw.common.of': 'of',\n 'psw.tags.title': 'Tags',\n 'psw.tags.add': 'Add tag',\n },\n es: {\n 'psw.clients.title': 'Clientes',\n 'psw.clients.subtitle': 'Toda persona u organización que atiende su firma.',\n 'psw.clients.emptyTitle': 'Aún no hay clientes',\n 'psw.clients.emptyDescription':\n 'Agregue su primer cliente para comenzar a definir compromisos y asuntos.',\n 'psw.clients.new': 'Nuevo cliente',\n 'psw.clients.searchPlaceholder': 'Buscar clientes…',\n 'psw.clients.allStatuses': 'Todos los estados',\n 'psw.common.loading': 'Cargando…',\n 'psw.common.retry': 'Reintentar',\n 'psw.common.cancel': 'Cancelar',\n 'psw.common.save': 'Guardar',\n 'psw.common.create': 'Crear',\n 'psw.common.edit': 'Editar',\n 'psw.common.archive': 'Archivar',\n 'psw.common.actions': 'Acciones',\n 'psw.common.name': 'Nombre',\n 'psw.common.status': 'Estado',\n 'psw.common.type': 'Tipo',\n 'psw.common.added': 'Añadido',\n 'psw.common.loadMore': 'Cargar más',\n 'psw.common.showing': 'Mostrando',\n 'psw.common.of': 'de',\n 'psw.tags.title': 'Etiquetas',\n 'psw.tags.add': 'Agregar etiqueta',\n },\n hi: {\n 'psw.clients.title': 'ग्राहक',\n 'psw.clients.subtitle': 'हर व्यक्ति या संगठन जिसे आपकी फर्म सेवा देती है।',\n 'psw.clients.emptyTitle': 'अभी तक कोई ग्राहक नहीं',\n 'psw.clients.emptyDescription':\n 'समझौते और मामलों का दायरा तय करना शुरू करने के लिए अपना पहला ग्राहक जोड़ें।',\n 'psw.clients.new': 'नया ग्राहक',\n 'psw.clients.searchPlaceholder': 'ग्राहक खोजें…',\n 'psw.clients.allStatuses': 'सभी स्थिति',\n 'psw.common.loading': 'लोड हो रहा है…',\n 'psw.common.retry': 'पुनः प्रयास करें',\n 'psw.common.cancel': 'रद्द करें',\n 'psw.common.save': 'सहेजें',\n 'psw.common.create': 'बनाएं',\n 'psw.common.edit': 'संपादित करें',\n 'psw.common.archive': 'संग्रहीत करें',\n 'psw.common.actions': 'कार्रवाइयाँ',\n 'psw.common.name': 'नाम',\n 'psw.common.status': 'स्थिति',\n 'psw.common.type': 'प्रकार',\n 'psw.common.added': 'जोड़ा गया',\n 'psw.common.loadMore': 'और लोड करें',\n 'psw.common.showing': 'दिखा रहा है',\n 'psw.common.of': 'में से',\n 'psw.tags.title': 'टैग',\n 'psw.tags.add': 'टैग जोड़ें',\n },\n ta: {\n 'psw.clients.title': 'வாடிக்கையாளர்கள்',\n 'psw.clients.subtitle': 'உங்கள் நிறுவனம் சேவை செய்யும் ஒவ்வொரு நபரும் அல்லது நிறுவனமும்.',\n 'psw.clients.emptyTitle': 'இன்னும் வாடிக்கையாளர்கள் இல்லை',\n 'psw.clients.emptyDescription':\n 'உறுதிமொழிகள் மற்றும் விவகாரங்களை வரையறுக்க முதல் வாடிக்கையாளரைச் சேர்க்கவும்.',\n 'psw.clients.new': 'புதிய வாடிக்கையாளர்',\n 'psw.clients.searchPlaceholder': 'வாடிக்கையாளர்களைத் தேடு…',\n 'psw.clients.allStatuses': 'அனைத்து நிலைகள்',\n 'psw.common.loading': 'ஏற்றுகிறது…',\n 'psw.common.retry': 'மீண்டும் முயற்சி',\n 'psw.common.cancel': 'ரத்து',\n 'psw.common.save': 'சேமி',\n 'psw.common.create': 'உருவாக்கு',\n 'psw.common.edit': 'திருத்து',\n 'psw.common.archive': 'காப்பகம்',\n 'psw.common.actions': 'செயல்கள்',\n 'psw.common.name': 'பெயர்',\n 'psw.common.status': 'நிலை',\n 'psw.common.type': 'வகை',\n 'psw.common.added': 'சேர்க்கப்பட்டது',\n 'psw.common.loadMore': 'மேலும் ஏற்று',\n 'psw.common.showing': 'காட்டுகிறது',\n 'psw.common.of': 'இல்',\n 'psw.tags.title': 'குறிச்சொற்கள்',\n 'psw.tags.add': 'குறிச்சொல் சேர்',\n },\n zh: {\n 'psw.clients.title': '客户',\n 'psw.clients.subtitle': '贵公司服务的每一个人或组织。',\n 'psw.clients.emptyTitle': '暂无客户',\n 'psw.clients.emptyDescription': '添加您的第一个客户,开始确定业务和事项范围。',\n 'psw.clients.new': '新建客户',\n 'psw.clients.searchPlaceholder': '搜索客户…',\n 'psw.clients.allStatuses': '全部状态',\n 'psw.common.loading': '加载中…',\n 'psw.common.retry': '重试',\n 'psw.common.cancel': '取消',\n 'psw.common.save': '保存',\n 'psw.common.create': '创建',\n 'psw.common.edit': '编辑',\n 'psw.common.archive': '归档',\n 'psw.common.actions': '操作',\n 'psw.common.name': '名称',\n 'psw.common.status': '状态',\n 'psw.common.type': '类型',\n 'psw.common.added': '添加时间',\n 'psw.common.loadMore': '加载更多',\n 'psw.common.showing': '显示',\n 'psw.common.of': '共',\n 'psw.tags.title': '标签',\n 'psw.tags.add': '添加标签',\n },\n ar: {\n 'psw.clients.title': 'العملاء',\n 'psw.clients.subtitle': 'كل شخص أو مؤسسة تخدمها شركتك.',\n 'psw.clients.emptyTitle': 'لا يوجد عملاء بعد',\n 'psw.clients.emptyDescription': 'أضف عميلك الأول لبدء تحديد نطاق الالتزامات والقضايا.',\n 'psw.clients.new': 'عميل جديد',\n 'psw.clients.searchPlaceholder': 'البحث في العملاء…',\n 'psw.clients.allStatuses': 'جميع الحالات',\n 'psw.common.loading': 'جارٍ التحميل…',\n 'psw.common.retry': 'إعادة المحاولة',\n 'psw.common.cancel': 'إلغاء',\n 'psw.common.save': 'حفظ',\n 'psw.common.create': 'إنشاء',\n 'psw.common.edit': 'تعديل',\n 'psw.common.archive': 'أرشفة',\n 'psw.common.actions': 'إجراءات',\n 'psw.common.name': 'الاسم',\n 'psw.common.status': 'الحالة',\n 'psw.common.type': 'النوع',\n 'psw.common.added': 'تاريخ الإضافة',\n 'psw.common.loadMore': 'تحميل المزيد',\n 'psw.common.showing': 'عرض',\n 'psw.common.of': 'من',\n 'psw.tags.title': 'الوسوم',\n 'psw.tags.add': 'إضافة وسم',\n },\n};\n\nfunction detectLocale(): SupportedLocale {\n if (typeof navigator === 'undefined') return 'en';\n const code = (navigator.language ?? 'en').split('-')[0].toLowerCase();\n if (code in translations) return code as SupportedLocale;\n return 'en';\n}\n\nexport function t(key: string, fallback?: string, locale?: SupportedLocale): string {\n const loc = locale ?? detectLocale();\n return translations[loc]?.[key] ?? translations.en[key] ?? fallback ?? key;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/proserviceworld/i18n/index.ts"],"sourcesContent":["/**\n * ProServiceWorld MFE local i18n.\n *\n * The host app shell owns the global I18nProvider and product translations.\n * This lightweight module provides fallback translations for MFE-owned UI\n * strings (page titles, empty states, form labels) so the MFE can be mounted\n * standalone (dev harness, tests) and still render in all supported locales.\n * When running inside the shell, the shell's `useI18n` translations take\n * precedence via the `t` helper below.\n */\n\nexport type SupportedLocale = 'en' | 'es' | 'hi' | 'ta' | 'zh' | 'ar';\n\nconst translations: Record<SupportedLocale, Record<string, string>> = {\n en: {\n 'psw.clients.title': 'Clients',\n 'psw.clients.subtitle': 'Every person or organization your firm serves.',\n 'psw.clients.emptyTitle': 'No clients yet',\n 'psw.clients.emptyDescription':\n 'Add your first client to start scoping engagements and matters.',\n 'psw.clients.new': 'New client',\n 'psw.clients.searchPlaceholder': 'Search clients…',\n 'psw.clients.allStatuses': 'All statuses',\n 'psw.common.loading': 'Loading…',\n 'psw.common.retry': 'Retry',\n 'psw.common.cancel': 'Cancel',\n 'psw.common.save': 'Save',\n 'psw.common.create': 'Create',\n 'psw.common.edit': 'Edit',\n 'psw.common.archive': 'Archive',\n 'psw.common.actions': 'Actions',\n 'psw.common.name': 'Name',\n 'psw.common.status': 'Status',\n 'psw.common.type': 'Type',\n 'psw.common.added': 'Added',\n 'psw.common.loadMore': 'Load more',\n 'psw.common.showing': 'Showing',\n 'psw.common.of': 'of',\n 'psw.tags.title': 'Tags',\n 'psw.tags.add': 'Add tag',\n 'psw.engagements.title': 'Engagements',\n 'psw.engagements.subtitle':\n 'The commercial containers of contracted work — scope, fee arrangement, delivery lifecycle, and billing.',\n 'psw.engagements.new': 'New engagement',\n 'psw.engagements.searchPlaceholder': 'Search engagements…',\n 'psw.engagements.allStatuses': 'All statuses',\n 'psw.engagements.allClients': 'All clients',\n 'psw.engagements.emptyTitle': 'No engagements yet',\n 'psw.engagements.emptyDescription':\n 'Create your first engagement to scope work, set fees, and track delivery.',\n 'psw.engagements.tableEngagement': 'Engagement',\n 'psw.engagements.tableClient': 'Client',\n 'psw.engagements.tableFee': 'Fee',\n 'psw.engagements.tableStatus': 'Status',\n 'psw.engagements.tableStarted': 'Started',\n 'psw.engagements.tableTags': 'Tags',\n 'psw.engagements.newTitle': 'New engagement',\n 'psw.matters.title': 'Matters',\n 'psw.matters.subtitle':\n 'The regulated threads of work — legal matters, audits, filings — with their own deadlines and sensitive-document handling.',\n 'psw.matters.new': 'New matter',\n 'psw.matters.searchPlaceholder': 'Search matters…',\n 'psw.matters.allStatuses': 'All statuses',\n 'psw.matters.emptyTitle': 'No matters yet',\n 'psw.matters.emptyDescription':\n 'Create your first matter to track deadlines, privileged documents, and status.',\n 'psw.matters.tableMatter': 'Matter',\n 'psw.matters.tableClient': 'Client',\n 'psw.matters.tablePriority': 'Priority',\n 'psw.matters.tableStatus': 'Status',\n 'psw.matters.tableDue': 'Due',\n 'psw.matters.tableTags': 'Tags',\n 'psw.matters.newTitle': 'New matter',\n },\n es: {\n 'psw.clients.title': 'Clientes',\n 'psw.clients.subtitle': 'Toda persona u organización que atiende su firma.',\n 'psw.clients.emptyTitle': 'Aún no hay clientes',\n 'psw.clients.emptyDescription':\n 'Agregue su primer cliente para comenzar a definir compromisos y asuntos.',\n 'psw.clients.new': 'Nuevo cliente',\n 'psw.clients.searchPlaceholder': 'Buscar clientes…',\n 'psw.clients.allStatuses': 'Todos los estados',\n 'psw.common.loading': 'Cargando…',\n 'psw.common.retry': 'Reintentar',\n 'psw.common.cancel': 'Cancelar',\n 'psw.common.save': 'Guardar',\n 'psw.common.create': 'Crear',\n 'psw.common.edit': 'Editar',\n 'psw.common.archive': 'Archivar',\n 'psw.common.actions': 'Acciones',\n 'psw.common.name': 'Nombre',\n 'psw.common.status': 'Estado',\n 'psw.common.type': 'Tipo',\n 'psw.common.added': 'Añadido',\n 'psw.common.loadMore': 'Cargar más',\n 'psw.common.showing': 'Mostrando',\n 'psw.common.of': 'de',\n 'psw.tags.title': 'Etiquetas',\n 'psw.tags.add': 'Agregar etiqueta',\n },\n hi: {\n 'psw.clients.title': 'ग्राहक',\n 'psw.clients.subtitle': 'हर व्यक्ति या संगठन जिसे आपकी फर्म सेवा देती है।',\n 'psw.clients.emptyTitle': 'अभी तक कोई ग्राहक नहीं',\n 'psw.clients.emptyDescription':\n 'समझौते और मामलों का दायरा तय करना शुरू करने के लिए अपना पहला ग्राहक जोड़ें।',\n 'psw.clients.new': 'नया ग्राहक',\n 'psw.clients.searchPlaceholder': 'ग्राहक खोजें…',\n 'psw.clients.allStatuses': 'सभी स्थिति',\n 'psw.common.loading': 'लोड हो रहा है…',\n 'psw.common.retry': 'पुनः प्रयास करें',\n 'psw.common.cancel': 'रद्द करें',\n 'psw.common.save': 'सहेजें',\n 'psw.common.create': 'बनाएं',\n 'psw.common.edit': 'संपादित करें',\n 'psw.common.archive': 'संग्रहीत करें',\n 'psw.common.actions': 'कार्रवाइयाँ',\n 'psw.common.name': 'नाम',\n 'psw.common.status': 'स्थिति',\n 'psw.common.type': 'प्रकार',\n 'psw.common.added': 'जोड़ा गया',\n 'psw.common.loadMore': 'और लोड करें',\n 'psw.common.showing': 'दिखा रहा है',\n 'psw.common.of': 'में से',\n 'psw.tags.title': 'टैग',\n 'psw.tags.add': 'टैग जोड़ें',\n },\n ta: {\n 'psw.clients.title': 'வாடிக்கையாளர்கள்',\n 'psw.clients.subtitle': 'உங்கள் நிறுவனம் சேவை செய்யும் ஒவ்வொரு நபரும் அல்லது நிறுவனமும்.',\n 'psw.clients.emptyTitle': 'இன்னும் வாடிக்கையாளர்கள் இல்லை',\n 'psw.clients.emptyDescription':\n 'உறுதிமொழிகள் மற்றும் விவகாரங்களை வரையறுக்க முதல் வாடிக்கையாளரைச் சேர்க்கவும்.',\n 'psw.clients.new': 'புதிய வாடிக்கையாளர்',\n 'psw.clients.searchPlaceholder': 'வாடிக்கையாளர்களைத் தேடு…',\n 'psw.clients.allStatuses': 'அனைத்து நிலைகள்',\n 'psw.common.loading': 'ஏற்றுகிறது…',\n 'psw.common.retry': 'மீண்டும் முயற்சி',\n 'psw.common.cancel': 'ரத்து',\n 'psw.common.save': 'சேமி',\n 'psw.common.create': 'உருவாக்கு',\n 'psw.common.edit': 'திருத்து',\n 'psw.common.archive': 'காப்பகம்',\n 'psw.common.actions': 'செயல்கள்',\n 'psw.common.name': 'பெயர்',\n 'psw.common.status': 'நிலை',\n 'psw.common.type': 'வகை',\n 'psw.common.added': 'சேர்க்கப்பட்டது',\n 'psw.common.loadMore': 'மேலும் ஏற்று',\n 'psw.common.showing': 'காட்டுகிறது',\n 'psw.common.of': 'இல்',\n 'psw.tags.title': 'குறிச்சொற்கள்',\n 'psw.tags.add': 'குறிச்சொல் சேர்',\n },\n zh: {\n 'psw.clients.title': '客户',\n 'psw.clients.subtitle': '贵公司服务的每一个人或组织。',\n 'psw.clients.emptyTitle': '暂无客户',\n 'psw.clients.emptyDescription': '添加您的第一个客户,开始确定业务和事项范围。',\n 'psw.clients.new': '新建客户',\n 'psw.clients.searchPlaceholder': '搜索客户…',\n 'psw.clients.allStatuses': '全部状态',\n 'psw.common.loading': '加载中…',\n 'psw.common.retry': '重试',\n 'psw.common.cancel': '取消',\n 'psw.common.save': '保存',\n 'psw.common.create': '创建',\n 'psw.common.edit': '编辑',\n 'psw.common.archive': '归档',\n 'psw.common.actions': '操作',\n 'psw.common.name': '名称',\n 'psw.common.status': '状态',\n 'psw.common.type': '类型',\n 'psw.common.added': '添加时间',\n 'psw.common.loadMore': '加载更多',\n 'psw.common.showing': '显示',\n 'psw.common.of': '共',\n 'psw.tags.title': '标签',\n 'psw.tags.add': '添加标签',\n },\n ar: {\n 'psw.clients.title': 'العملاء',\n 'psw.clients.subtitle': 'كل شخص أو مؤسسة تخدمها شركتك.',\n 'psw.clients.emptyTitle': 'لا يوجد عملاء بعد',\n 'psw.clients.emptyDescription': 'أضف عميلك الأول لبدء تحديد نطاق الالتزامات والقضايا.',\n 'psw.clients.new': 'عميل جديد',\n 'psw.clients.searchPlaceholder': 'البحث في العملاء…',\n 'psw.clients.allStatuses': 'جميع الحالات',\n 'psw.common.loading': 'جارٍ التحميل…',\n 'psw.common.retry': 'إعادة المحاولة',\n 'psw.common.cancel': 'إلغاء',\n 'psw.common.save': 'حفظ',\n 'psw.common.create': 'إنشاء',\n 'psw.common.edit': 'تعديل',\n 'psw.common.archive': 'أرشفة',\n 'psw.common.actions': 'إجراءات',\n 'psw.common.name': 'الاسم',\n 'psw.common.status': 'الحالة',\n 'psw.common.type': 'النوع',\n 'psw.common.added': 'تاريخ الإضافة',\n 'psw.common.loadMore': 'تحميل المزيد',\n 'psw.common.showing': 'عرض',\n 'psw.common.of': 'من',\n 'psw.tags.title': 'الوسوم',\n 'psw.tags.add': 'إضافة وسم',\n },\n};\n\nfunction detectLocale(): SupportedLocale {\n if (typeof navigator === 'undefined') return 'en';\n const code = (navigator.language ?? 'en').split('-')[0].toLowerCase();\n if (code in translations) return code as SupportedLocale;\n return 'en';\n}\n\nexport function t(key: string, fallback?: string, locale?: SupportedLocale): string {\n const loc = locale ?? detectLocale();\n return translations[loc]?.[key] ?? translations.en[key] ?? fallback ?? key;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EngagementsPage.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/pages/EngagementsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAuEhC,eAAO,MAAM,eAAe,EAAE,EAsM7B,CAAC"}
1
+ {"version":3,"file":"EngagementsPage.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/pages/EngagementsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAwEhC,eAAO,MAAM,eAAe,EAAE,EAsM7B,CAAC"}
@@ -1,16 +1,17 @@
1
1
  import { useClients as e, useCreateEngagement as t, useEngagements as n, usePracticeAreas as r, useUpdateEngagement as i } from "../hooks/useProServiceWorldApi.js";
2
2
  import { useNav as a } from "../utils/nav.js";
3
- import { Banner as o, Empty as s, ErrorState as c, Field as l, LoadingBlock as u, Modal as d, NativeSelect as f, PageHeader as p, SectionCard as m, StatusPill as h, TableWrap as g, Td as _, TextArea as v, TextInput as y, Th as b, enumOptions as x, fmtDate as S, fmtMoney as ee, humanize as C } from "../components/ui.js";
4
- import { useAnalytics as w } from "../hooks/useAnalytics.js";
5
- import { impactFeedback as T } from "../utils/native.js";
6
- import { TagPicker as E } from "../components/TagPicker.js";
3
+ import { Banner as o, Empty as s, ErrorState as c, Field as l, LoadingBlock as u, Modal as d, NativeSelect as f, PageHeader as p, SectionCard as m, StatusPill as h, TableWrap as g, Td as _, TextArea as v, TextInput as y, Th as b, enumOptions as x, fmtDate as S, fmtMoney as C, humanize as ee } from "../components/ui.js";
4
+ import { t as w } from "../i18n/index.js";
5
+ import { useAnalytics as T } from "../hooks/useAnalytics.js";
6
+ import { impactFeedback as E } from "../utils/native.js";
7
+ import { TagPicker as D } from "../components/TagPicker.js";
7
8
  import { LoadMore as te } from "../components/LoadMore.js";
8
- import { useMemo as ne, useState as D } from "react";
9
- import { Briefcase as O, ChevronRight as k, Plus as A, Search as re } from "lucide-react";
10
- import { Fragment as j, jsx as M, jsxs as N } from "react/jsx-runtime";
11
- import { Button as P } from "@burdenoff/fe-libs/ui";
9
+ import { useMemo as O, useState as k } from "react";
10
+ import { Briefcase as A, ChevronRight as j, Plus as M, Search as ne } from "lucide-react";
11
+ import { Fragment as N, jsx as P, jsxs as F } from "react/jsx-runtime";
12
+ import { Button as I } from "@burdenoff/fe-libs/ui";
12
13
  //#region src/proserviceworld/pages/EngagementsPage.tsx
13
- var F = [
14
+ var re = [
14
15
  "PROPOSAL",
15
16
  "ACCEPTED",
16
17
  "IN_PROGRESS",
@@ -19,55 +20,55 @@ var F = [
19
20
  "INVOICED",
20
21
  "CLOSED",
21
22
  "CANCELLED"
22
- ], I = [
23
+ ], L = [
23
24
  "FIXED",
24
25
  "HOURLY",
25
26
  "RETAINER",
26
27
  "VALUE_BASED"
27
- ], L = (e) => e.split(/\s+/).filter(Boolean).slice(0, 2).map((e) => e[0]?.toUpperCase() ?? "").join("") || "?", ie = ({ name: e }) => /* @__PURE__ */ M("span", {
28
+ ], R = (e) => e.split(/\s+/).filter(Boolean).slice(0, 2).map((e) => e[0]?.toUpperCase() ?? "").join("") || "?", ie = ({ name: e }) => /* @__PURE__ */ P("span", {
28
29
  className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-accent/10 text-[10px] font-semibold text-accent ring-1 ring-inset ring-accent/15",
29
30
  "aria-hidden": !0,
30
- children: L(e)
31
- }), R = 25, z = () => {
32
- let t = a(), { emitIntent: r, emitFact: l } = w(), [d, v] = D(""), [j, I] = D(""), [L, z] = D(""), [V, H] = D(!1), [U, W] = D(null), [G, K] = D({
33
- limit: R,
31
+ children: R(e)
32
+ }), z = 25, B = () => {
33
+ let t = a(), { emitIntent: r, emitFact: l } = T(), [d, v] = k(""), [N, L] = k(""), [R, B] = k(""), [H, U] = k(!1), [W, G] = k(null), [K, q] = k({
34
+ limit: z,
34
35
  offset: 0
35
- }), q = e({ pagination: { limit: 100 } }), J = i(), { data: Y, isLoading: X, error: Z, refetch: Q } = n({
36
+ }), J = e({ pagination: { limit: 100 } }), ae = i(), { data: Y, isLoading: X, error: Z, refetch: Q } = n({
36
37
  search: d.trim() || void 0,
37
- status: j || void 0,
38
- clientId: L || void 0,
39
- pagination: G
40
- }), $ = ne(() => Y?.items ?? [], [Y]);
41
- return /* @__PURE__ */ N("div", {
38
+ status: N || void 0,
39
+ clientId: R || void 0,
40
+ pagination: K
41
+ }), $ = O(() => Y?.items ?? [], [Y]);
42
+ return /* @__PURE__ */ F("div", {
42
43
  className: "space-y-6",
43
44
  children: [
44
- /* @__PURE__ */ M(p, {
45
- title: "Engagements",
46
- subtitle: "The commercial containers of contracted work — scope, fee arrangement, delivery lifecycle, and billing.",
47
- icon: /* @__PURE__ */ M(O, { className: "h-6 w-6" }),
48
- actions: /* @__PURE__ */ N(P, {
45
+ /* @__PURE__ */ P(p, {
46
+ title: w("psw.engagements.title"),
47
+ subtitle: w("psw.engagements.subtitle"),
48
+ icon: /* @__PURE__ */ P(A, { className: "h-6 w-6" }),
49
+ actions: /* @__PURE__ */ F(I, {
49
50
  onClick: () => {
50
- T("light"), r("psw.engagement.create_clicked"), H(!0);
51
+ E("light"), r("psw.engagement.create_clicked"), U(!0);
51
52
  },
52
- children: [/* @__PURE__ */ M(A, { className: "mr-1.5 h-4 w-4" }), "New engagement"]
53
+ children: [/* @__PURE__ */ P(M, { className: "mr-1.5 h-4 w-4" }), w("psw.engagements.new")]
53
54
  })
54
55
  }),
55
- U && /* @__PURE__ */ M(o, {
56
+ W && /* @__PURE__ */ P(o, {
56
57
  tone: "success",
57
- onClose: () => W(null),
58
- children: U
58
+ onClose: () => G(null),
59
+ children: W
59
60
  }),
60
- /* @__PURE__ */ N("div", {
61
+ /* @__PURE__ */ F("div", {
61
62
  className: "flex flex-col gap-2 sm:flex-row sm:items-center",
62
63
  children: [
63
- /* @__PURE__ */ N("div", {
64
+ /* @__PURE__ */ F("div", {
64
65
  className: "relative flex-1",
65
- children: [/* @__PURE__ */ M(re, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-tertiary" }), /* @__PURE__ */ M(y, {
66
- placeholder: "Search engagements…",
66
+ children: [/* @__PURE__ */ P(ne, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-tertiary" }), /* @__PURE__ */ P(y, {
67
+ placeholder: w("psw.engagements.searchPlaceholder"),
67
68
  value: d,
68
69
  onChange: (e) => {
69
- v(e.target.value), K({
70
- limit: R,
70
+ v(e.target.value), q({
71
+ limit: z,
71
72
  offset: 0
72
73
  });
73
74
  },
@@ -80,105 +81,105 @@ var F = [
80
81
  className: "pl-9"
81
82
  })]
82
83
  }),
83
- /* @__PURE__ */ N(f, {
84
- value: j,
84
+ /* @__PURE__ */ F(f, {
85
+ value: N,
85
86
  onChange: (e) => {
86
- I(e.target.value), K({
87
- limit: R,
87
+ L(e.target.value), q({
88
+ limit: z,
88
89
  offset: 0
89
90
  });
90
91
  },
91
92
  className: "sm:w-44",
92
- children: [/* @__PURE__ */ M("option", {
93
+ children: [/* @__PURE__ */ P("option", {
93
94
  value: "",
94
- children: "All statuses"
95
- }), x(F)]
95
+ children: w("psw.engagements.allStatuses")
96
+ }), x(re)]
96
97
  }),
97
- /* @__PURE__ */ N(f, {
98
- value: L,
98
+ /* @__PURE__ */ F(f, {
99
+ value: R,
99
100
  onChange: (e) => {
100
- z(e.target.value), K({
101
- limit: R,
101
+ B(e.target.value), q({
102
+ limit: z,
102
103
  offset: 0
103
104
  });
104
105
  },
105
106
  className: "sm:w-48",
106
- children: [/* @__PURE__ */ M("option", {
107
+ children: [/* @__PURE__ */ P("option", {
107
108
  value: "",
108
- children: "All clients"
109
- }), q.data?.items.map((e) => /* @__PURE__ */ M("option", {
109
+ children: w("psw.engagements.allClients")
110
+ }), J.data?.items.map((e) => /* @__PURE__ */ P("option", {
110
111
  value: e.id,
111
112
  children: e.name
112
113
  }, e.id))]
113
114
  })
114
115
  ]
115
116
  }),
116
- X ? /* @__PURE__ */ M(u, {}) : Z ? /* @__PURE__ */ M(c, {
117
+ X ? /* @__PURE__ */ P(u, {}) : Z ? /* @__PURE__ */ P(c, {
117
118
  error: Z,
118
119
  onRetry: () => void Q()
119
- }) : !Y || Y.items.length === 0 ? /* @__PURE__ */ M(s, {
120
- title: "No engagements yet",
121
- description: "Scope your first engagement against a client to begin delivery and billing.",
122
- icon: /* @__PURE__ */ M(O, { className: "h-8 w-8" }),
123
- action: /* @__PURE__ */ N(P, {
124
- onClick: () => H(!0),
125
- children: [/* @__PURE__ */ M(A, { className: "mr-1.5 h-4 w-4" }), "New engagement"]
120
+ }) : !Y || Y.items.length === 0 ? /* @__PURE__ */ P(s, {
121
+ title: w("psw.engagements.emptyTitle"),
122
+ description: w("psw.engagements.emptyDescription"),
123
+ icon: /* @__PURE__ */ P(A, { className: "h-8 w-8" }),
124
+ action: /* @__PURE__ */ F(I, {
125
+ onClick: () => U(!0),
126
+ children: [/* @__PURE__ */ P(M, { className: "mr-1.5 h-4 w-4" }), w("psw.engagements.new")]
126
127
  })
127
- }) : /* @__PURE__ */ N(m, {
128
+ }) : /* @__PURE__ */ F(m, {
128
129
  title: `${Y.totalCount} engagement${Y.totalCount === 1 ? "" : "s"}`,
129
- children: [/* @__PURE__ */ N(g, { children: [/* @__PURE__ */ M("thead", { children: /* @__PURE__ */ N("tr", { children: [
130
- /* @__PURE__ */ M(b, { children: "Engagement" }),
131
- /* @__PURE__ */ M(b, { children: "Client" }),
132
- /* @__PURE__ */ M(b, { children: "Fee" }),
133
- /* @__PURE__ */ M(b, { children: "Status" }),
134
- /* @__PURE__ */ M(b, { children: "Started" }),
135
- /* @__PURE__ */ M(b, { children: "Tags" })
136
- ] }) }), /* @__PURE__ */ M("tbody", { children: Y.items.map((e) => /* @__PURE__ */ N("tr", {
130
+ children: [/* @__PURE__ */ F(g, { children: [/* @__PURE__ */ P("thead", { children: /* @__PURE__ */ F("tr", { children: [
131
+ /* @__PURE__ */ P(b, { children: w("psw.engagements.tableEngagement") }),
132
+ /* @__PURE__ */ P(b, { children: w("psw.engagements.tableClient") }),
133
+ /* @__PURE__ */ P(b, { children: w("psw.engagements.tableFee") }),
134
+ /* @__PURE__ */ P(b, { children: w("psw.engagements.tableStatus") }),
135
+ /* @__PURE__ */ P(b, { children: w("psw.engagements.tableStarted") }),
136
+ /* @__PURE__ */ P(b, { children: w("psw.engagements.tableTags") })
137
+ ] }) }), /* @__PURE__ */ P("tbody", { children: Y.items.map((e) => /* @__PURE__ */ F("tr", {
137
138
  className: "group cursor-pointer transition-colors hover:bg-bg-sunken/60",
138
139
  onClick: () => t(`engagements/${e.id}`),
139
140
  children: [
140
- /* @__PURE__ */ N(_, { children: [/* @__PURE__ */ N("div", {
141
+ /* @__PURE__ */ F(_, { children: [/* @__PURE__ */ F("div", {
141
142
  className: "flex items-center gap-1 font-medium text-text-primary transition-colors group-hover:text-accent",
142
- children: [/* @__PURE__ */ M("span", { children: e.name }), /* @__PURE__ */ M(k, { className: "h-3.5 w-3.5 shrink-0 text-text-tertiary opacity-0 transition-opacity group-hover:opacity-100" })]
143
- }), e.description ? /* @__PURE__ */ M("div", {
143
+ children: [/* @__PURE__ */ P("span", { children: e.name }), /* @__PURE__ */ P(j, { className: "h-3.5 w-3.5 shrink-0 text-text-tertiary opacity-0 transition-opacity group-hover:opacity-100" })]
144
+ }), e.description ? /* @__PURE__ */ P("div", {
144
145
  className: "mt-0.5 max-w-md truncate text-xs text-text-tertiary",
145
146
  children: e.description
146
147
  }) : null] }),
147
- /* @__PURE__ */ M(_, { children: /* @__PURE__ */ N("span", {
148
+ /* @__PURE__ */ P(_, { children: /* @__PURE__ */ F("span", {
148
149
  className: "inline-flex items-center gap-2.5",
149
- children: [/* @__PURE__ */ M(ie, { name: e.client?.name ?? "—" }), /* @__PURE__ */ M("span", {
150
+ children: [/* @__PURE__ */ P(ie, { name: e.client?.name ?? "—" }), /* @__PURE__ */ P("span", {
150
151
  className: "text-text-secondary",
151
152
  children: e.client?.name ?? "—"
152
153
  })]
153
154
  }) }),
154
- /* @__PURE__ */ N(_, {
155
+ /* @__PURE__ */ F(_, {
155
156
  className: "whitespace-nowrap",
156
157
  children: [
157
- /* @__PURE__ */ M("span", {
158
+ /* @__PURE__ */ P("span", {
158
159
  className: "font-medium text-text-primary",
159
- children: ee(e.feeAmount, e.currency)
160
+ children: C(e.feeAmount, e.currency)
160
161
  }),
161
162
  " ",
162
- /* @__PURE__ */ N("span", {
163
+ /* @__PURE__ */ F("span", {
163
164
  className: "text-xs text-text-tertiary",
164
- children: ["/ ", C(e.feeArrangement)]
165
+ children: ["/ ", ee(e.feeArrangement)]
165
166
  })
166
167
  ]
167
168
  }),
168
- /* @__PURE__ */ M(_, { children: /* @__PURE__ */ M(h, { status: e.status }) }),
169
- /* @__PURE__ */ M(_, {
169
+ /* @__PURE__ */ P(_, { children: /* @__PURE__ */ P(h, { status: e.status }) }),
170
+ /* @__PURE__ */ P(_, {
170
171
  className: "whitespace-nowrap",
171
172
  children: S(e.startDate)
172
173
  }),
173
- /* @__PURE__ */ M(_, { children: /* @__PURE__ */ M("div", {
174
+ /* @__PURE__ */ P(_, { children: /* @__PURE__ */ P("div", {
174
175
  onClick: (e) => e.stopPropagation(),
175
176
  role: "presentation",
176
- children: /* @__PURE__ */ M(E, {
177
+ children: /* @__PURE__ */ P(D, {
177
178
  entityType: "PswEngagement",
178
179
  entityId: e.id,
179
180
  tags: e.tags ?? [],
180
181
  onChange: async (t) => {
181
- await J.mutateAsync({
182
+ await ae.mutateAsync({
182
183
  id: e.id,
183
184
  input: { tags: t }
184
185
  }), Q();
@@ -187,25 +188,25 @@ var F = [
187
188
  })
188
189
  }) })
189
190
  ]
190
- }, e.id)) })] }), /* @__PURE__ */ M(te, {
191
+ }, e.id)) })] }), /* @__PURE__ */ P(te, {
191
192
  hasMore: Y?.pageInfo?.hasMore ?? !1,
192
193
  loading: X,
193
194
  loadedCount: $.length,
194
195
  totalCount: Y?.totalCount ?? $.length,
195
- onLoadMore: () => K((e) => ({
196
- limit: R,
197
- offset: e.offset + R
196
+ onLoadMore: () => q((e) => ({
197
+ limit: z,
198
+ offset: e.offset + z
198
199
  }))
199
200
  })]
200
201
  }),
201
- V && /* @__PURE__ */ M(B, {
202
- onClose: () => H(!1),
203
- onSaved: (e) => W(`${e} created.`)
202
+ H && /* @__PURE__ */ P(V, {
203
+ onClose: () => U(!1),
204
+ onSaved: (e) => G(`${e} created.`)
204
205
  })
205
206
  ]
206
207
  });
207
- }, B = ({ onClose: n, onSaved: i }) => {
208
- let a = t(), { emitFact: s } = w(), c = e({ pagination: { limit: 100 } }), u = r(), [p, m] = D({
208
+ }, V = ({ onClose: n, onSaved: i }) => {
209
+ let a = t(), { emitFact: s } = T(), c = e({ pagination: { limit: 100 } }), u = r(), [p, m] = k({
209
210
  clientId: "",
210
211
  practiceAreaId: "",
211
212
  name: "",
@@ -214,20 +215,20 @@ var F = [
214
215
  feeAmount: "",
215
216
  currency: "USD",
216
217
  startDate: ""
217
- }), [h, g] = D(null), _ = (e) => (t) => m((n) => ({
218
+ }), [h, g] = k(null), _ = (e) => (t) => m((n) => ({
218
219
  ...n,
219
220
  [e]: t.target.value
220
221
  }));
221
- return /* @__PURE__ */ M(d, {
222
+ return /* @__PURE__ */ P(d, {
222
223
  open: !0,
223
224
  onClose: n,
224
- title: "New engagement",
225
- footer: /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M(P, {
225
+ title: w("psw.engagements.newTitle"),
226
+ footer: /* @__PURE__ */ F(N, { children: [/* @__PURE__ */ P(I, {
226
227
  variant: "outline",
227
228
  onClick: n,
228
229
  disabled: a.isPending,
229
230
  children: "Cancel"
230
- }), /* @__PURE__ */ M(P, {
231
+ }), /* @__PURE__ */ P(I, {
231
232
  onClick: () => {
232
233
  if (g(null), !p.clientId) return g("Select a client.");
233
234
  if (!p.name.trim()) return g("Engagement name is required.");
@@ -254,65 +255,65 @@ var F = [
254
255
  disabled: a.isPending,
255
256
  children: a.isPending ? "Creating…" : "Create engagement"
256
257
  })] }),
257
- children: /* @__PURE__ */ N("div", {
258
+ children: /* @__PURE__ */ F("div", {
258
259
  className: "space-y-3",
259
260
  children: [
260
- h && /* @__PURE__ */ M(o, {
261
+ h && /* @__PURE__ */ P(o, {
261
262
  tone: "danger",
262
263
  children: h
263
264
  }),
264
- /* @__PURE__ */ M(l, {
265
+ /* @__PURE__ */ P(l, {
265
266
  label: "Client",
266
267
  required: !0,
267
- children: /* @__PURE__ */ N(f, {
268
+ children: /* @__PURE__ */ F(f, {
268
269
  value: p.clientId,
269
270
  onChange: _("clientId"),
270
- children: [/* @__PURE__ */ M("option", {
271
+ children: [/* @__PURE__ */ P("option", {
271
272
  value: "",
272
273
  children: "Select a client…"
273
- }), c.data?.items.map((e) => /* @__PURE__ */ M("option", {
274
+ }), c.data?.items.map((e) => /* @__PURE__ */ P("option", {
274
275
  value: e.id,
275
276
  children: e.name
276
277
  }, e.id))]
277
278
  })
278
279
  }),
279
- /* @__PURE__ */ M(l, {
280
+ /* @__PURE__ */ P(l, {
280
281
  label: "Name",
281
282
  required: !0,
282
- children: /* @__PURE__ */ M(y, {
283
+ children: /* @__PURE__ */ P(y, {
283
284
  value: p.name,
284
285
  onChange: _("name"),
285
286
  placeholder: "FY26 Statutory Audit"
286
287
  })
287
288
  }),
288
- /* @__PURE__ */ M(l, {
289
+ /* @__PURE__ */ P(l, {
289
290
  label: "Practice area",
290
- children: /* @__PURE__ */ N(f, {
291
+ children: /* @__PURE__ */ F(f, {
291
292
  value: p.practiceAreaId,
292
293
  onChange: _("practiceAreaId"),
293
- children: [/* @__PURE__ */ M("option", {
294
+ children: [/* @__PURE__ */ P("option", {
294
295
  value: "",
295
296
  children: "Unassigned"
296
- }), u.data?.map((e) => /* @__PURE__ */ M("option", {
297
+ }), u.data?.map((e) => /* @__PURE__ */ P("option", {
297
298
  value: e.id,
298
299
  children: e.name
299
300
  }, e.id))]
300
301
  })
301
302
  }),
302
- /* @__PURE__ */ N("div", {
303
+ /* @__PURE__ */ F("div", {
303
304
  className: "grid grid-cols-3 gap-3",
304
305
  children: [
305
- /* @__PURE__ */ M(l, {
306
+ /* @__PURE__ */ P(l, {
306
307
  label: "Fee type",
307
- children: /* @__PURE__ */ M(f, {
308
+ children: /* @__PURE__ */ P(f, {
308
309
  value: p.feeArrangement,
309
310
  onChange: _("feeArrangement"),
310
- children: x(I)
311
+ children: x(L)
311
312
  })
312
313
  }),
313
- /* @__PURE__ */ M(l, {
314
+ /* @__PURE__ */ P(l, {
314
315
  label: "Fee amount",
315
- children: /* @__PURE__ */ M(y, {
316
+ children: /* @__PURE__ */ P(y, {
316
317
  type: "number",
317
318
  min: "0",
318
319
  value: p.feeAmount,
@@ -320,9 +321,9 @@ var F = [
320
321
  placeholder: "50000"
321
322
  })
322
323
  }),
323
- /* @__PURE__ */ M(l, {
324
+ /* @__PURE__ */ P(l, {
324
325
  label: "Currency",
325
- children: /* @__PURE__ */ M(y, {
326
+ children: /* @__PURE__ */ P(y, {
326
327
  value: p.currency,
327
328
  onChange: _("currency"),
328
329
  maxLength: 3
@@ -330,17 +331,17 @@ var F = [
330
331
  })
331
332
  ]
332
333
  }),
333
- /* @__PURE__ */ M(l, {
334
+ /* @__PURE__ */ P(l, {
334
335
  label: "Start date",
335
- children: /* @__PURE__ */ M(y, {
336
+ children: /* @__PURE__ */ P(y, {
336
337
  type: "date",
337
338
  value: p.startDate,
338
339
  onChange: _("startDate")
339
340
  })
340
341
  }),
341
- /* @__PURE__ */ M(l, {
342
+ /* @__PURE__ */ P(l, {
342
343
  label: "Description",
343
- children: /* @__PURE__ */ M(v, {
344
+ children: /* @__PURE__ */ P(v, {
344
345
  value: p.description,
345
346
  onChange: _("description")
346
347
  })
@@ -350,6 +351,6 @@ var F = [
350
351
  });
351
352
  };
352
353
  //#endregion
353
- export { z as EngagementsPage };
354
+ export { B as EngagementsPage };
354
355
 
355
356
  //# sourceMappingURL=EngagementsPage.js.map