@acorex/connectivity 21.0.0-next.45 → 21.0.0-next.47

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 (16) hide show
  1. package/fesm2022/{acorex-connectivity-mock-acorex-connectivity-mock-D8bzYltA.mjs → acorex-connectivity-mock-acorex-connectivity-mock-CwWGrnVs.mjs} +1217 -864
  2. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-CwWGrnVs.mjs.map +1 -0
  3. package/fesm2022/{acorex-connectivity-mock-assign-to-manager.activity-Cr4KK7dn.mjs → acorex-connectivity-mock-assign-to-manager.activity-B8bbsEQx.mjs} +2 -2
  4. package/fesm2022/{acorex-connectivity-mock-assign-to-manager.activity-Cr4KK7dn.mjs.map → acorex-connectivity-mock-assign-to-manager.activity-B8bbsEQx.mjs.map} +1 -1
  5. package/fesm2022/{acorex-connectivity-mock-chat-generate-image.command-BqnmiAgI.mjs → acorex-connectivity-mock-chat-generate-image.command-CBlDsPWY.mjs} +2 -2
  6. package/fesm2022/{acorex-connectivity-mock-chat-generate-image.command-BqnmiAgI.mjs.map → acorex-connectivity-mock-chat-generate-image.command-CBlDsPWY.mjs.map} +1 -1
  7. package/fesm2022/{acorex-connectivity-mock-chat-synthesize-speech.command-D3NPqs6A.mjs → acorex-connectivity-mock-chat-synthesize-speech.command-BCSsNdNv.mjs} +2 -2
  8. package/fesm2022/{acorex-connectivity-mock-chat-synthesize-speech.command-D3NPqs6A.mjs.map → acorex-connectivity-mock-chat-synthesize-speech.command-BCSsNdNv.mjs.map} +1 -1
  9. package/fesm2022/{acorex-connectivity-mock-chat-transcribe-speech.command-tQbAVOfm.mjs → acorex-connectivity-mock-chat-transcribe-speech.command-DM6JF63R.mjs} +2 -2
  10. package/fesm2022/{acorex-connectivity-mock-chat-transcribe-speech.command-tQbAVOfm.mjs.map → acorex-connectivity-mock-chat-transcribe-speech.command-DM6JF63R.mjs.map} +1 -1
  11. package/fesm2022/{acorex-connectivity-mock-user-roles-for-list-column.query-BjwkpUBF.mjs → acorex-connectivity-mock-user-roles-for-list-column.query-2PnIbRxO.mjs} +2 -2
  12. package/fesm2022/{acorex-connectivity-mock-user-roles-for-list-column.query-BjwkpUBF.mjs.map → acorex-connectivity-mock-user-roles-for-list-column.query-2PnIbRxO.mjs.map} +1 -1
  13. package/fesm2022/acorex-connectivity-mock.mjs +1 -1
  14. package/package.json +2 -2
  15. package/types/acorex-connectivity-mock.d.ts +26 -10
  16. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-D8bzYltA.mjs.map +0 -1
@@ -22,21 +22,22 @@ import { RootConfig as RootConfig$2, AXMPermissionsKeys, AXMApplicationService,
22
22
  import { AXMAssetManagementFeatureKeys, RootConfig as RootConfig$4, AXMAssetStatus } from '@acorex/modules/asset-management';
23
23
  import { AXMAssessmentManagementFeatureKeys, RootConfig as RootConfig$3, AXMAssessmentManagementPermissionKeys } from '@acorex/modules/assessment-management';
24
24
  import { AXPCommonFeatureKeys, AXPWidgetsList } from '@acorex/modules/common';
25
+ import { AXPReportManagementFeatureKeys, RootConfig as RootConfig$t, AXPReportViewerService } from '@acorex/modules/report-management';
25
26
  import { AXMDataManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$2, RootConfig as RootConfig$d, AXMQueryServiceImpl, ShowMetaDataFormPopupCommand, ShowMetaDataBuilderPopupCommand, AXMQueryService } from '@acorex/modules/data-management';
26
- import { AXPHumanCapitalManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$5, RootConfig as RootConfig$j, AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS } from '@acorex/modules/human-capital-management';
27
+ import { AXPHumanCapitalManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$6, RootConfig as RootConfig$j, AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS } from '@acorex/modules/human-capital-management';
27
28
  import { RootConfig as RootConfig$5 } from '@acorex/modules/locale-management';
28
29
  import { AXMPermissionsKeys as AXMPermissionsKeys$1, AXMSubscriptionManagementSubscriptionEntityService, AXMSubscriptionManagementSubscriptionPlanItemEntityService, RootConfig as RootConfig$w } from '@acorex/modules/subscription-management';
29
30
  import { AXPSecurityManagementPermissionKeys, AXMUserAccessState, resolveAXMUserEffectiveState, RootConfig as RootConfig$6, AXMUsersEntityService, AXMPolicyService } from '@acorex/modules/security-management';
30
31
  import { AXMTenantManagementPermissionsKeys, AXMTenantService, AXMTenantManagementTenantUserEntityService, RootConfig as RootConfig$z } from '@acorex/modules/tenant-management';
31
- import { AXMPermissionsKeys as AXMPermissionsKeys$4, RootConfig as RootConfig$e, AXMDocumentTypeServiceImpl, AXPDocumentManagementService } from '@acorex/modules/document-management';
32
+ import { AXMPermissionsKeys as AXMPermissionsKeys$5, RootConfig as RootConfig$e, AXMDocumentTypeServiceImpl, AXPDocumentManagementService } from '@acorex/modules/document-management';
32
33
  import { AXMSettingsManagementPermissionKeys } from '@acorex/modules/settings-management';
33
- import { AXMPermissionsKeys as AXMPermissionsKeys$3, RootConfig as RootConfig$y, AXPWorkflowTaskProvider } from '@acorex/modules/task-management';
34
+ import { AXMPermissionsKeys as AXMPermissionsKeys$3, RootConfig as RootConfig$y, AXPWorkflowTaskProvider, matchesTaskBoardAssigneeFilter } from '@acorex/modules/task-management';
35
+ import { AXMPermissionsKeys as AXMPermissionsKeys$4, AXMChatConversationApi, AXMChatMessageApi, axmAssistLastTranscriptLine, axmBuildAssistTranscriptLinePayload, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, AXMChatRealtimeApi, AXMChatUserApi, axmIsAssistPeerParticipant, AXMChatManagementService, AXMChatRealtimeService, AXMCommentManagementService, AXMCommentRealtimeService, RootConfig as RootConfig$a } from '@acorex/modules/conversation';
34
36
  import { RootConfig as RootConfig$7 } from '@acorex/modules/business-core';
35
37
  import { RootConfig as RootConfig$8 } from '@acorex/modules/calendar-management';
36
38
  import { AXFileService } from '@acorex/core/file';
37
39
  import { RootConfig as RootConfig$9, resolveTextTemplateLocalizedString, replaceTextTemplatePlaceholders, AXC_TEXT_TEMPLATE_RENDER_COMMAND_KEY } from '@acorex/modules/content-management';
38
40
  import { conversationSharedStorage, axConversationIndexedDbStorage, AXConversationAiResponderService } from '@acorex/components/conversation2';
39
- import { AXMChatConversationApi, AXMChatMessageApi, axmExtractAssistFinalDeliverableFromTranscript, AXMChatRealtimeApi, AXMChatUserApi, axmIsAssistPeerParticipant, AXMChatManagementService, AXMChatRealtimeService, AXMCommentManagementService, AXMCommentRealtimeService, RootConfig as RootConfig$a } from '@acorex/modules/conversation';
40
41
  import { AXMNotificationEntityService, RootConfig as RootConfig$p, AXMNotificationEntityServiceImpl, AXMNotificationRealtimeService, NOTIFICATION_MANAGEMENT_EMAIL_SEND_COMMAND_KEY } from '@acorex/modules/notification-management';
41
42
  import { AXToastService } from '@acorex/components/toast';
42
43
  import { Observable, filter, pairwise, map, merge, take, throttleTime } from 'rxjs';
@@ -72,7 +73,6 @@ import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
72
73
  import { RootConfig as RootConfig$q } from '@acorex/modules/person-core';
73
74
  import { RootConfig as RootConfig$r } from '@acorex/modules/procurement-management';
74
75
  import { RootConfig as RootConfig$s } from '@acorex/modules/product-catalog';
75
- import { RootConfig as RootConfig$t, AXPReportViewerService } from '@acorex/modules/report-management';
76
76
  import { RootConfig as RootConfig$u } from '@acorex/modules/project-management';
77
77
  import { RootConfig as RootConfig$v } from '@acorex/modules/reservation-management';
78
78
  import { AXMSessionStatusTypes, AXMDeviceSessionsServiceImpl, AXMDeviceSessionsService, AXM_AUTH_CONFIG_TOKEN } from '@acorex/modules/auth';
@@ -81,7 +81,7 @@ import { RootConfig as RootConfig$x } from '@acorex/modules/supplier-management'
81
81
  import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
82
82
  import { Router } from '@angular/router';
83
83
  import { AXPWorkflowManager, AXPWorkflowDefinitionService, AXPActivityDefinitionService, AXP_WORKFLOW_PROVIDER, WorkflowExpressionScopeService, AXPWorkflowEngineError, AXP_WORKFLOW_ERROR_CODES, AXP_WORKFLOW_ENGINE } from '@acorex/platform/workflow';
84
- import { RootConfig as RootConfig$A, AXMPermissionsKeys as AXMPermissionsKeys$6 } from '@acorex/modules/workflow-management';
84
+ import { RootConfig as RootConfig$A, AXMPermissionsKeys as AXMPermissionsKeys$7 } from '@acorex/modules/workflow-management';
85
85
  import { AXCalendarService } from '@acorex/core/date-time';
86
86
  import { RootConfig as RootConfig$B } from '@acorex/modules/maintenance-management';
87
87
  import { AXCExternalAuthorizationService } from '@acorex/connectivity/utils';
@@ -13404,7 +13404,7 @@ async function clearEntityDefinitionFirestoreCollections(db) {
13404
13404
 
13405
13405
  //#region ---- Imports ----
13406
13406
  //#endregion
13407
- const M$1a = createMultiLanguageString;
13407
+ const M$1b = createMultiLanguageString;
13408
13408
  //#region ---- Stable IDs ----
13409
13409
  /**
13410
13410
  * Fixed UUIDs for OpenAI endpoint rows (referenced from AI model catalog).
@@ -13430,24 +13430,24 @@ function decodeMockOpenAiApiKeySecret(encoded) {
13430
13430
  const OPEN_AI_ENDPOINT_MOCK = [
13431
13431
  {
13432
13432
  id: AXMAiOpenAiEndpointStableIds.openAiDirect,
13433
- title: M$1a('OpenAI (direct)', 'OpenAI (مستقیم)'),
13434
- description: M$1a('Official OpenAI API; set your API key on this row. Base URL ends at /v1.', 'API رسمی OpenAI؛ کلید API را در این رکورد تنظیم کنید. آدرس پایه با /v1 تمام می‌شود.'),
13433
+ title: M$1b('OpenAI (direct)', 'OpenAI (مستقیم)'),
13434
+ description: M$1b('Official OpenAI API; set your API key on this row. Base URL ends at /v1.', 'API رسمی OpenAI؛ کلید API را در این رکورد تنظیم کنید. آدرس پایه با /v1 تمام می‌شود.'),
13435
13435
  apiBase: 'https://api.openai.com/v1',
13436
13436
  apiKey: decodeMockOpenAiApiKeySecret(OPEN_AI_DIRECT_MOCK_API_KEY_B64),
13437
13437
  stream: true,
13438
13438
  },
13439
13439
  {
13440
13440
  id: AXMAiOpenAiEndpointStableIds.demis,
13441
- title: M$1a('Demis', 'دیمیس'),
13442
- description: M$1a('DemisCo test API; OpenAI-compatible. Base URL ends at /v1.', 'API آزمایشی DemisCo؛ سازگار با OpenAI. آدرس پایه با /v1 تمام می‌شود.'),
13441
+ title: M$1b('Demis', 'دیمیس'),
13442
+ description: M$1b('DemisCo test API; OpenAI-compatible. Base URL ends at /v1.', 'API آزمایشی DemisCo؛ سازگار با OpenAI. آدرس پایه با /v1 تمام می‌شود.'),
13443
13443
  apiBase: 'https://testapi.demisco.ai/v1',
13444
13444
  apiKey: 'sk_live_H8haMWMzT41UqWNlCQHifOw__hWpbwNuXFjIn9tkW8o',
13445
13445
  stream: true,
13446
13446
  },
13447
13447
  {
13448
13448
  id: AXMAiOpenAiEndpointStableIds.lmStudio,
13449
- title: M$1a('LM Studio', 'LM Studio'),
13450
- description: M$1a('Local OpenAI-compatible API (LM Studio). Base URL ends at /v1. Disabled by default; enable when the server is running.', 'API محلی سازگار با OpenAI (LM Studio). آدرس پایه با /v1 تمام می‌شود. به‌طور پیش‌فرض غیرفعال است؛ پس از اجرای سرور فعال کنید.'),
13449
+ title: M$1b('LM Studio', 'LM Studio'),
13450
+ description: M$1b('Local OpenAI-compatible API (LM Studio). Base URL ends at /v1. Disabled by default; enable when the server is running.', 'API محلی سازگار با OpenAI (LM Studio). آدرس پایه با /v1 تمام می‌شود. به‌طور پیش‌فرض غیرفعال است؛ پس از اجرای سرور فعال کنید.'),
13451
13451
  apiBase: 'http://localhost:1234/v1',
13452
13452
  apiKey: '',
13453
13453
  /** Local servers often behave better with one-shot JSON completions while debugging. */
@@ -13456,8 +13456,8 @@ const OPEN_AI_ENDPOINT_MOCK = [
13456
13456
  },
13457
13457
  {
13458
13458
  id: AXMAiOpenAiEndpointStableIds.ollama,
13459
- title: M$1a('Ollama', 'Ollama'),
13460
- description: M$1a('Local OpenAI-compatible API (Ollama). Base URL ends at /v1. Disabled by default; enable when the server is running.', 'API محلی سازگار با OpenAI (Ollama). آدرس پایه با /v1 تمام می‌شود. به‌طور پیش‌فرض غیرفعال است؛ پس از اجرای سرور فعال کنید.'),
13459
+ title: M$1b('Ollama', 'Ollama'),
13460
+ description: M$1b('Local OpenAI-compatible API (Ollama). Base URL ends at /v1. Disabled by default; enable when the server is running.', 'API محلی سازگار با OpenAI (Ollama). آدرس پایه با /v1 تمام می‌شود. به‌طور پیش‌فرض غیرفعال است؛ پس از اجرای سرور فعال کنید.'),
13461
13461
  apiBase: 'http://localhost:11434/v1',
13462
13462
  apiKey: '',
13463
13463
  stream: false,
@@ -13468,7 +13468,7 @@ const OPEN_AI_ENDPOINT_MOCK = [
13468
13468
 
13469
13469
  //#region ---- Imports ----
13470
13470
  //#endregion
13471
- const M$19 = createMultiLanguageString;
13471
+ const M$1a = createMultiLanguageString;
13472
13472
  //#region ---- Stable IDs (seed + assist references) ----
13473
13473
  /**
13474
13474
  * Fixed UUIDs so assists and settings can reference models deterministically across reseeds.
@@ -13497,15 +13497,15 @@ const AXMAiModelStableIds = {
13497
13497
  function mockOpenAiEndpointSnapshot(endpointId) {
13498
13498
  switch (endpointId) {
13499
13499
  case AXMAiOpenAiEndpointStableIds.openAiDirect:
13500
- return { id: endpointId, title: M$19('OpenAI (direct)', 'OpenAI (مستقیم)') };
13500
+ return { id: endpointId, title: M$1a('OpenAI (direct)', 'OpenAI (مستقیم)') };
13501
13501
  case AXMAiOpenAiEndpointStableIds.demis:
13502
- return { id: endpointId, title: M$19('Demis', 'دیمیس') };
13502
+ return { id: endpointId, title: M$1a('Demis', 'دیمیس') };
13503
13503
  case AXMAiOpenAiEndpointStableIds.lmStudio:
13504
- return { id: endpointId, title: M$19('LM Studio', 'LM Studio') };
13504
+ return { id: endpointId, title: M$1a('LM Studio', 'LM Studio') };
13505
13505
  case AXMAiOpenAiEndpointStableIds.ollama:
13506
- return { id: endpointId, title: M$19('Ollama', 'Ollama') };
13506
+ return { id: endpointId, title: M$1a('Ollama', 'Ollama') };
13507
13507
  default:
13508
- return { id: endpointId, title: M$19('Unknown Endpoint', 'نقطه پایان نامشخص') };
13508
+ return { id: endpointId, title: M$1a('Unknown Endpoint', 'نقطه پایان نامشخص') };
13509
13509
  }
13510
13510
  }
13511
13511
  //#endregion
@@ -13514,8 +13514,8 @@ const AI_MODEL_MOCK = [
13514
13514
  {
13515
13515
  id: AXMAiModelStableIds.gemini25Flash,
13516
13516
  name: 'gemini-2.5-flash',
13517
- title: M$19('Gemini 2.5 Flash', 'جمینای ۲٫۵ فلش'),
13518
- description: M$19('Fast and capable', 'سریع و توانا'),
13517
+ title: M$1a('Gemini 2.5 Flash', 'جمینای ۲٫۵ فلش'),
13518
+ description: M$1a('Fast and capable', 'سریع و توانا'),
13519
13519
  chatTransport: 'gemini',
13520
13520
  modelPurposes: ['chat', 'vision', 'speech'],
13521
13521
  maxContextTokens: 1_048_576,
@@ -13528,8 +13528,8 @@ const AI_MODEL_MOCK = [
13528
13528
  {
13529
13529
  id: AXMAiModelStableIds.gpt54,
13530
13530
  name: 'gpt-5.4',
13531
- title: M$19('GPT-5.4', 'GPT-5.4'),
13532
- description: M$19('OpenAI Standard: gpt-5.4 (<272K context) per pricing docs', 'استاندارد OpenAI: gpt-5.4 (زیر ۲۷۲K زمینه) طبق مستندات قیمت‌گذاری'),
13531
+ title: M$1a('GPT-5.4', 'GPT-5.4'),
13532
+ description: M$1a('OpenAI Standard: gpt-5.4 (<272K context) per pricing docs', 'استاندارد OpenAI: gpt-5.4 (زیر ۲۷۲K زمینه) طبق مستندات قیمت‌گذاری'),
13533
13533
  chatTransport: 'openai',
13534
13534
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.openAiDirect,
13535
13535
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.openAiDirect),
@@ -13544,8 +13544,8 @@ const AI_MODEL_MOCK = [
13544
13544
  {
13545
13545
  id: AXMAiModelStableIds.gpt54Mini,
13546
13546
  name: 'gpt-5.4-mini',
13547
- title: M$19('GPT-5.4 Mini', 'GPT-5.4 مینی'),
13548
- description: M$19('OpenAI Standard pricing (flagship table)', 'قیمت‌گذاری استاندارد OpenAI (جدول پرچم‌دار)'),
13547
+ title: M$1a('GPT-5.4 Mini', 'GPT-5.4 مینی'),
13548
+ description: M$1a('OpenAI Standard pricing (flagship table)', 'قیمت‌گذاری استاندارد OpenAI (جدول پرچم‌دار)'),
13549
13549
  chatTransport: 'openai',
13550
13550
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.openAiDirect,
13551
13551
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.openAiDirect),
@@ -13560,8 +13560,8 @@ const AI_MODEL_MOCK = [
13560
13560
  {
13561
13561
  id: AXMAiModelStableIds.gpt54Nano,
13562
13562
  name: 'gpt-5.4-nano',
13563
- title: M$19('GPT-5.4 Nano', 'GPT-5.4 نانو'),
13564
- description: M$19('OpenAI Standard pricing (flagship table)', 'قیمت‌گذاری استاندارد OpenAI (جدول پرچم‌دار)'),
13563
+ title: M$1a('GPT-5.4 Nano', 'GPT-5.4 نانو'),
13564
+ description: M$1a('OpenAI Standard pricing (flagship table)', 'قیمت‌گذاری استاندارد OpenAI (جدول پرچم‌دار)'),
13565
13565
  chatTransport: 'openai',
13566
13566
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.openAiDirect,
13567
13567
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.openAiDirect),
@@ -13576,24 +13576,24 @@ const AI_MODEL_MOCK = [
13576
13576
  {
13577
13577
  id: AXMAiModelStableIds.demisAi,
13578
13578
  name: 'c421bdd1-f3ea-43c0-a1d9-19bc92907304',
13579
- title: M$19('Demis AI Core (central payment)', 'هسته دیمیس AI (پرداخت متمرکز)'),
13580
- description: M$19('Demisco agent chat model (model_uuid). Used with the centralized payment guide agent; transport Demis.', 'مدل چت عامل Demisco (model_uuid). همراه عامل راهنمای پرداخت متمرکز؛ حمل‌ونقل Demis.'),
13579
+ title: M$1a('Demis AI Core (central payment)', 'هسته دیمیس AI (پرداخت متمرکز)'),
13580
+ description: M$1a('Demisco agent chat model (model_uuid). Used with the centralized payment guide agent; transport Demis.', 'مدل چت عامل Demisco (model_uuid). همراه عامل راهنمای پرداخت متمرکز؛ حمل‌ونقل Demis.'),
13581
13581
  chatTransport: 'demis',
13582
13582
  modelPurposes: ['chat'],
13583
13583
  },
13584
13584
  {
13585
13585
  id: AXMAiModelStableIds.imagen4Generate001,
13586
13586
  name: 'imagen-4.0-generate-001',
13587
- title: M$19('Imagen 4 (Gemini API)', 'Imagen 4 (Gemini API)'),
13588
- description: M$19('Text-to-image via Gemini API predict endpoint (paid tier; English prompts per Google docs)', 'متن‌به‌تصویر از طریق endpoint پیش‌بینی Gemini API (لایه پولی؛ پرامپت انگلیسی طبق مستندات گوگل)'),
13587
+ title: M$1a('Imagen 4 (Gemini API)', 'Imagen 4 (Gemini API)'),
13588
+ description: M$1a('Text-to-image via Gemini API predict endpoint (paid tier; English prompts per Google docs)', 'متن‌به‌تصویر از طریق endpoint پیش‌بینی Gemini API (لایه پولی؛ پرامپت انگلیسی طبق مستندات گوگل)'),
13589
13589
  chatTransport: 'gemini',
13590
13590
  modelPurposes: ['image'],
13591
13591
  },
13592
13592
  {
13593
13593
  id: AXMAiModelStableIds.openaiGptImage1,
13594
13594
  name: 'gpt-image-1',
13595
- title: M$19('OpenAI image (gpt-image-1)', 'تصویر OpenAI (gpt-image-1)'),
13596
- description: M$19('Image generation via OpenAI /v1/images/generations', 'تولید تصویر از طریق OpenAI /v1/images/generations'),
13595
+ title: M$1a('OpenAI image (gpt-image-1)', 'تصویر OpenAI (gpt-image-1)'),
13596
+ description: M$1a('Image generation via OpenAI /v1/images/generations', 'تولید تصویر از طریق OpenAI /v1/images/generations'),
13597
13597
  chatTransport: 'openai',
13598
13598
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.openAiDirect,
13599
13599
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.openAiDirect),
@@ -13602,8 +13602,8 @@ const AI_MODEL_MOCK = [
13602
13602
  {
13603
13603
  id: AXMAiModelStableIds.openaiWhisper1,
13604
13604
  name: 'whisper-1',
13605
- title: M$19('OpenAI Whisper (speech-to-text)', 'OpenAI Whisper (گفتار به متن)'),
13606
- description: M$19('Audio transcription via OpenAI /v1/audio/transcriptions', 'رونویسی صوت از طریق OpenAI /v1/audio/transcriptions'),
13605
+ title: M$1a('OpenAI Whisper (speech-to-text)', 'OpenAI Whisper (گفتار به متن)'),
13606
+ description: M$1a('Audio transcription via OpenAI /v1/audio/transcriptions', 'رونویسی صوت از طریق OpenAI /v1/audio/transcriptions'),
13607
13607
  chatTransport: 'openai',
13608
13608
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.openAiDirect,
13609
13609
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.openAiDirect),
@@ -13612,8 +13612,8 @@ const AI_MODEL_MOCK = [
13612
13612
  {
13613
13613
  id: AXMAiModelStableIds.openaiTts1,
13614
13614
  name: 'tts-1',
13615
- title: M$19('OpenAI TTS (tts-1)', 'OpenAI TTS (tts-1)'),
13616
- description: M$19('Text-to-speech via OpenAI /v1/audio/speech', 'متن‌به‌گفتار از طریق OpenAI /v1/audio/speech'),
13615
+ title: M$1a('OpenAI TTS (tts-1)', 'OpenAI TTS (tts-1)'),
13616
+ description: M$1a('Text-to-speech via OpenAI /v1/audio/speech', 'متن‌به‌گفتار از طریق OpenAI /v1/audio/speech'),
13617
13617
  chatTransport: 'openai',
13618
13618
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.openAiDirect,
13619
13619
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.openAiDirect),
@@ -13622,8 +13622,8 @@ const AI_MODEL_MOCK = [
13622
13622
  {
13623
13623
  id: AXMAiModelStableIds.lmStudioQwen35_9b,
13624
13624
  name: 'qwen/qwen3.5-9b',
13625
- title: M$19('Qwen 3.5 9B (LM Studio)', 'Qwen 3.5 9B (LM Studio)'),
13626
- description: M$19('OpenAI-compatible chat; LM Studio endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه LM Studio (seed غیرفعال).'),
13625
+ title: M$1a('Qwen 3.5 9B (LM Studio)', 'Qwen 3.5 9B (LM Studio)'),
13626
+ description: M$1a('OpenAI-compatible chat; LM Studio endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه LM Studio (seed غیرفعال).'),
13627
13627
  chatTransport: 'openai',
13628
13628
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.lmStudio,
13629
13629
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.lmStudio),
@@ -13634,8 +13634,8 @@ const AI_MODEL_MOCK = [
13634
13634
  {
13635
13635
  id: AXMAiModelStableIds.lmStudioQwen3_4b,
13636
13636
  name: 'qwen3-4b-instruct-2507',
13637
- title: M$19('Qwen3 4B Instruct (LM Studio)', 'Qwen3 4B Instruct (LM Studio)'),
13638
- description: M$19('OpenAI-compatible chat; LM Studio endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه LM Studio (seed غیرفعال).'),
13637
+ title: M$1a('Qwen3 4B Instruct (LM Studio)', 'Qwen3 4B Instruct (LM Studio)'),
13638
+ description: M$1a('OpenAI-compatible chat; LM Studio endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه LM Studio (seed غیرفعال).'),
13639
13639
  chatTransport: 'openai',
13640
13640
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.lmStudio,
13641
13641
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.lmStudio),
@@ -13646,8 +13646,8 @@ const AI_MODEL_MOCK = [
13646
13646
  {
13647
13647
  id: AXMAiModelStableIds.lmStudioGemma3_4b,
13648
13648
  name: 'gemma-3-4b-it',
13649
- title: M$19('Gemma 3 4B IT (LM Studio)', 'Gemma 3 4B IT (LM Studio)'),
13650
- description: M$19('OpenAI-compatible chat; LM Studio endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه LM Studio (seed غیرفعال).'),
13649
+ title: M$1a('Gemma 3 4B IT (LM Studio)', 'Gemma 3 4B IT (LM Studio)'),
13650
+ description: M$1a('OpenAI-compatible chat; LM Studio endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه LM Studio (seed غیرفعال).'),
13651
13651
  chatTransport: 'openai',
13652
13652
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.lmStudio,
13653
13653
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.lmStudio),
@@ -13658,8 +13658,8 @@ const AI_MODEL_MOCK = [
13658
13658
  {
13659
13659
  id: AXMAiModelStableIds.ollamaQwen35_9b,
13660
13660
  name: 'qwen/qwen3.5-9b',
13661
- title: M$19('Qwen 3.5 9B (Ollama)', 'Qwen 3.5 9B (Ollama)'),
13662
- description: M$19('OpenAI-compatible chat; Ollama endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه Ollama (seed غیرفعال).'),
13661
+ title: M$1a('Qwen 3.5 9B (Ollama)', 'Qwen 3.5 9B (Ollama)'),
13662
+ description: M$1a('OpenAI-compatible chat; Ollama endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه Ollama (seed غیرفعال).'),
13663
13663
  chatTransport: 'openai',
13664
13664
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.ollama,
13665
13665
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.ollama),
@@ -13670,8 +13670,8 @@ const AI_MODEL_MOCK = [
13670
13670
  {
13671
13671
  id: AXMAiModelStableIds.ollamaQwen3_4b,
13672
13672
  name: 'qwen3-4b-instruct-2507',
13673
- title: M$19('Qwen3 4B Instruct (Ollama)', 'Qwen3 4B Instruct (Ollama)'),
13674
- description: M$19('OpenAI-compatible chat; Ollama endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه Ollama (seed غیرفعال).'),
13673
+ title: M$1a('Qwen3 4B Instruct (Ollama)', 'Qwen3 4B Instruct (Ollama)'),
13674
+ description: M$1a('OpenAI-compatible chat; Ollama endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه Ollama (seed غیرفعال).'),
13675
13675
  chatTransport: 'openai',
13676
13676
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.ollama,
13677
13677
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.ollama),
@@ -13682,8 +13682,8 @@ const AI_MODEL_MOCK = [
13682
13682
  {
13683
13683
  id: AXMAiModelStableIds.ollamaGemma3_4b,
13684
13684
  name: 'gemma-3-4b-it',
13685
- title: M$19('Gemma 3 4B IT (Ollama)', 'Gemma 3 4B IT (Ollama)'),
13686
- description: M$19('OpenAI-compatible chat; Ollama endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه Ollama (seed غیرفعال).'),
13685
+ title: M$1a('Gemma 3 4B IT (Ollama)', 'Gemma 3 4B IT (Ollama)'),
13686
+ description: M$1a('OpenAI-compatible chat; Ollama endpoint (seed disabled).', 'چت سازگار با OpenAI؛ نقطه Ollama (seed غیرفعال).'),
13687
13687
  chatTransport: 'openai',
13688
13688
  openAiEndpointId: AXMAiOpenAiEndpointStableIds.ollama,
13689
13689
  openAiEndpoint: mockOpenAiEndpointSnapshot(AXMAiOpenAiEndpointStableIds.ollama),
@@ -13811,7 +13811,7 @@ const AXM_AI_REGISTRY_QUERY_NAME = {
13811
13811
 
13812
13812
  //#region ---- Imports ----
13813
13813
  //#endregion
13814
- const M$18 = createMultiLanguageString;
13814
+ const M$19 = createMultiLanguageString;
13815
13815
  //#region ---- Helpers ----
13816
13816
  function aiAgentCommandBinding(registryId, options = {}) {
13817
13817
  return {
@@ -13928,8 +13928,8 @@ const AI_AGENT_MOCK = [
13928
13928
  {
13929
13929
  id: AXMAiAgentPlatformHelpId,
13930
13930
  name: 'platform-help',
13931
- title: M$18('Platform Help and Navigation', 'راهنمای پلتفرم و ناوبری'),
13932
- description: M$18('Guides **end users** on how to use ACoreX: where to go in the app (menu discovery via **ListPlatformNavigationForAi**) and which **Module.Entity** backs a screen (via **ListRegisteredEntities**). Answers must sound **human and non-technical** unless the user asks for developer details. Read-only queries only; delegate storage/CRUD to **platform-entity**.', 'راهنمای **کاربر نهایی** برای استفاده از ACoreX: مسیر منو (**ListPlatformNavigationForAi**) و تطبیق موجودیت (**ListRegisteredEntities**). پاسخ‌ها باید **ساده و غیرفنی** باشند مگر کاربر جزئیات توسعه‌دهنده بخواهد. فقط پرس‌وجو؛ برای CRUD سرپرست **platform-entity** را واگذار می‌کند.'),
13931
+ title: M$19('Platform Help and Navigation', 'راهنمای پلتفرم و ناوبری'),
13932
+ description: M$19('Guides **end users** on how to use ACoreX: where to go in the app (menu discovery via **ListPlatformNavigationForAi**) and which **Module.Entity** backs a screen (via **ListRegisteredEntities**). Answers must sound **human and non-technical** unless the user asks for developer details. Read-only queries only; delegate storage/CRUD to **platform-entity**.', 'راهنمای **کاربر نهایی** برای استفاده از ACoreX: مسیر منو (**ListPlatformNavigationForAi**) و تطبیق موجودیت (**ListRegisteredEntities**). پاسخ‌ها باید **ساده و غیرفنی** باشند مگر کاربر جزئیات توسعه‌دهنده بخواهد. فقط پرس‌وجو؛ برای CRUD سرپرست **platform-entity** را واگذار می‌کند.'),
13933
13933
  toolIds: [],
13934
13934
  queryIds: [
13935
13935
  aiAgentQueryBinding(axcResolveQueryRegistrySeedId(AXM_AI_REGISTRY_QUERY_NAME.listPlatformNavigationForAi)),
@@ -13969,8 +13969,8 @@ const AI_AGENT_MOCK = [
13969
13969
  {
13970
13970
  id: AXMAiAgentWidgetFollowUpChipsLayoutId,
13971
13971
  name: 'widget-follow-up-chips-layout',
13972
- title: M$18('Follow-Up Chips Agent', 'دستیار چیسپ‌های پیشنهادی'),
13973
- description: M$18('Builds **follow-up chip** rows (**flex-layout** + **button-action**) for Conversation assist: discover option keys via scoped **Widgets:GetForAI** (`agent: widget-follow-up-chips-layout`), compose triggers that call **`methods.aiAssistFillComposerPrompt`** / **`methods.aiAssistNavigate`**, validate with **ValidateLayoutJsonForAi**. Supervisor wraps as {"type":"node","content":...}.', 'ردیف **چیسپ پیشنهادی** (**flex-layout** + **button-action**) برای دستیار مکالمه؛ کشف پارامتر با **Widgets:GetForAI** با scope چیسپ، trigger با **methods.aiAssist*** و اعتبارسنجی با **ValidateLayoutJsonForAi**؛ سرپرست خروجی را در envelope می‌پیچد.'),
13972
+ title: M$19('Follow-Up Chips Agent', 'دستیار چیسپ‌های پیشنهادی'),
13973
+ description: M$19('Builds **follow-up chip** rows (**flex-layout** + **button-action**) for Conversation assist: discover option keys via scoped **Widgets:GetForAI** (`agent: widget-follow-up-chips-layout`), compose triggers that call **`methods.aiAssistFillComposerPrompt`** / **`methods.aiAssistNavigate`**, validate with **ValidateLayoutJsonForAi**. Supervisor wraps as {"type":"node","content":...}.', 'ردیف **چیسپ پیشنهادی** (**flex-layout** + **button-action**) برای دستیار مکالمه؛ کشف پارامتر با **Widgets:GetForAI** با scope چیسپ، trigger با **methods.aiAssist*** و اعتبارسنجی با **ValidateLayoutJsonForAi**؛ سرپرست خروجی را در envelope می‌پیچد.'),
13974
13974
  toolIds: [
13975
13975
  aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.aiFormbuilderValidateLayoutJsonForAi)),
13976
13976
  ],
@@ -14002,8 +14002,8 @@ const AI_AGENT_MOCK = [
14002
14002
  {
14003
14003
  id: AXMAiAgentPlatformEntityId,
14004
14004
  name: 'platform-entity',
14005
- title: M$18('Platform Entity Agent', 'دستیار موجودیت پلتفرم'),
14006
- description: M$18('End-to-end work with platform entities: discover Module.Entity keys and field definitions, list or search stored rows, and create or update rows through the standard entity commands. Returns factual text/JSON — for tabular or form UI in chat, the supervisor should also call the **widget-form-layout** specialist; for **charts** (bar, line, donut, gauge, funnel, heatmap) **widget-chart-layout**; for clickable follow-up chips in Conversation assist, **widget-follow-up-chips-layout**.', 'کار با موجودیت‌های پلتفرم: کشف کلیدهای Module.Entity و تعاریف فیلدها، فهرست یا جستجوی رکوردها، و ایجاد یا به‌روزرسانی از طریق دستورات استاندارد موجودیت. خروجی متن/JSON واقعی — برای UI جدولی در چت سرپرست **widget-form-layout**، برای **نمودار** (میله، خط، …) **widget-chart-layout**، و برای چیسپ پیشنهادی در مکالمه **widget-follow-up-chips-layout** را فراخوانی کند.'),
14005
+ title: M$19('Platform Entity Agent', 'دستیار موجودیت پلتفرم'),
14006
+ description: M$19('End-to-end work with platform entities: discover Module.Entity keys and field definitions, list or search stored rows, and create or update rows through the standard entity commands. Returns factual text/JSON — for tabular or form UI in chat, the supervisor should also call the **widget-form-layout** specialist; for **charts** (bar, line, donut, gauge, funnel, heatmap) **widget-chart-layout**; for clickable follow-up chips in Conversation assist, **widget-follow-up-chips-layout**.', 'کار با موجودیت‌های پلتفرم: کشف کلیدهای Module.Entity و تعاریف فیلدها، فهرست یا جستجوی رکوردها، و ایجاد یا به‌روزرسانی از طریق دستورات استاندارد موجودیت. خروجی متن/JSON واقعی — برای UI جدولی در چت سرپرست **widget-form-layout**، برای **نمودار** (میله، خط، …) **widget-chart-layout**، و برای چیسپ پیشنهادی در مکالمه **widget-follow-up-chips-layout** را فراخوانی کند.'),
14007
14007
  toolIds: [
14008
14008
  aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.entityCreate)),
14009
14009
  aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.entityUpdate)),
@@ -14028,8 +14028,8 @@ const AI_AGENT_MOCK = [
14028
14028
  {
14029
14029
  id: AXMAiAgentWidgetFormLayoutId,
14030
14030
  name: 'widget-form-layout',
14031
- title: M$18('Form Layout Agent', 'دستیار چیدمان فرم'),
14032
- description: M$18('Builds platform widget trees for forms and chat UI: **repeater-layout**, **select-editor** + **dataSource** (use **ListRegisteredDataSources**), **lookup-editor** + **ListRegisteredEntities**, **`text-editor`** last. Uses scoped **Widgets:GetForAI** (`agent: widget-form-layout`) and **ValidateLayoutJsonForAi**. Supervisor wraps as {"type":"node","content":...}.', 'درخت ویجت پلتفرم برای فرم و UI چت؛ repeater-layout، select-editor با dataSource، lookup-editor با ListRegisteredEntities، و در نهایت text-editor. از Widgets:GetForAI با scope فرم و ValidateLayoutJsonForAi استفاده می‌کند؛ سرپرست خروجی را در {"type":"node","content":...} می‌پیچد.'),
14031
+ title: M$19('Form Layout Agent', 'دستیار چیدمان فرم'),
14032
+ description: M$19('Builds platform widget trees for forms and chat UI: **repeater-layout**, **select-editor** + **dataSource** (use **ListRegisteredDataSources**), **lookup-editor** + **ListRegisteredEntities**, **`text-editor`** last. Uses scoped **Widgets:GetForAI** (`agent: widget-form-layout`) and **ValidateLayoutJsonForAi**. Supervisor wraps as {"type":"node","content":...}.', 'درخت ویجت پلتفرم برای فرم و UI چت؛ repeater-layout، select-editor با dataSource، lookup-editor با ListRegisteredEntities، و در نهایت text-editor. از Widgets:GetForAI با scope فرم و ValidateLayoutJsonForAi استفاده می‌کند؛ سرپرست خروجی را در {"type":"node","content":...} می‌پیچد.'),
14033
14033
  toolIds: [
14034
14034
  aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.aiFormbuilderValidateLayoutJsonForAi)),
14035
14035
  ],
@@ -14192,8 +14192,8 @@ const AI_AGENT_MOCK = [
14192
14192
  {
14193
14193
  id: AXMAiAgentWidgetChartLayoutId,
14194
14194
  name: 'widget-chart-layout',
14195
- title: M$18('Chart Generator Agent', 'دستیار تولید نمودار'),
14196
- description: M$18('Builds **chart visualization** widget trees (bar, line, donut, gauge, funnel, heatmap) as renderable layout JSON for chat or embedded UI — independent chart specialist. Uses scoped **Widgets:GetForAI** (`agent: widget-chart-layout`), **ListRegisteredDataSources**, and **ValidateLayoutJsonForAi**. Supervisor wraps as {"type":"node","content":...}.', 'درخت ویجت **نمودار** (میله، خط، دونات، گیج، قیف، heatmap) به‌صورت JSON چیدمان قابل رندر برای چت؛ دستیار مستقل نمودار. از Widgets:GetForAI با scope نمودار، ListRegisteredDataSources و ValidateLayoutJsonForAi استفاده می‌کند.'),
14195
+ title: M$19('Chart Generator Agent', 'دستیار تولید نمودار'),
14196
+ description: M$19('Builds **chart visualization** widget trees (bar, line, donut, gauge, funnel, heatmap) as renderable layout JSON for chat or embedded UI — independent chart specialist. Uses scoped **Widgets:GetForAI** (`agent: widget-chart-layout`), **ListRegisteredDataSources**, and **ValidateLayoutJsonForAi**. Supervisor wraps as {"type":"node","content":...}.', 'درخت ویجت **نمودار** (میله، خط، دونات، گیج، قیف، heatmap) به‌صورت JSON چیدمان قابل رندر برای چت؛ دستیار مستقل نمودار. از Widgets:GetForAI با scope نمودار، ListRegisteredDataSources و ValidateLayoutJsonForAi استفاده می‌کند.'),
14197
14197
  toolIds: [
14198
14198
  aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.aiFormbuilderValidateLayoutJsonForAi)),
14199
14199
  ],
@@ -14230,8 +14230,8 @@ const AI_AGENT_MOCK = [
14230
14230
  {
14231
14231
  id: AXMAiAgentCommonToolsId,
14232
14232
  name: 'current-time',
14233
- title: M$18('Current Time', 'زمان فعلی'),
14234
- description: M$18('ONLY when the user explicitly asks for the current date/time, clock, timezone, or locale-specific time. Do NOT use for greetings, small talk, connectivity tests, or unrelated tasks. Registry tool: common.get_current_time.', 'فقط وقتی کاربر صریحاً تاریخ/زمان فعلی، ساعت، منطقهٔ زمانی یا زمان محلی را می‌خواهد. برای احوال‌پرسی، تست اتصال یا کارهای نامرتبط استفاده نکنید. ابزار رجیستری: common.get_current_time.'),
14233
+ title: M$19('Current Time', 'زمان فعلی'),
14234
+ description: M$19('ONLY when the user explicitly asks for the current date/time, clock, timezone, or locale-specific time. Do NOT use for greetings, small talk, connectivity tests, or unrelated tasks. Registry tool: common.get_current_time.', 'فقط وقتی کاربر صریحاً تاریخ/زمان فعلی، ساعت، منطقهٔ زمانی یا زمان محلی را می‌خواهد. برای احوال‌پرسی، تست اتصال یا کارهای نامرتبط استفاده نکنید. ابزار رجیستری: common.get_current_time.'),
14235
14235
  toolIds: [aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.commonGetCurrentTime))],
14236
14236
  queryIds: [],
14237
14237
  systemPrompt: [
@@ -14245,8 +14245,8 @@ const AI_AGENT_MOCK = [
14245
14245
  {
14246
14246
  id: AXMAiAgentImageGenerationId,
14247
14247
  name: 'image-generation',
14248
- title: M$18('Image Generation Agent', 'دستیار تولید تصویر'),
14249
- description: M$18('In-chat image generation when AiManagement:ChatGenerateImage is registered in the command catalog. If no image tool is available, explain that image generation is not configured.', 'تولید تصویر در چت وقتی AiManagement:ChatGenerateImage در کاتالوگ فرمان ثبت شده باشد. اگر ابزار تصویر موجود نیست، توضیح دهید که تولید تصویر پیکربندی نشده است.'),
14248
+ title: M$19('Image Generation Agent', 'دستیار تولید تصویر'),
14249
+ description: M$19('In-chat image generation when AiManagement:ChatGenerateImage is registered in the command catalog. If no image tool is available, explain that image generation is not configured.', 'تولید تصویر در چت وقتی AiManagement:ChatGenerateImage در کاتالوگ فرمان ثبت شده باشد. اگر ابزار تصویر موجود نیست، توضیح دهید که تولید تصویر پیکربندی نشده است.'),
14250
14250
  toolIds: [
14251
14251
  aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.imageGeneration), {
14252
14252
  // 'modelId': 'a0000001-0000-4000-8000-000000000031'
@@ -14265,8 +14265,8 @@ const AI_AGENT_MOCK = [
14265
14265
  {
14266
14266
  id: AXMAiAgentSpeechToTextId,
14267
14267
  name: 'speech-to-text',
14268
- title: M$18('Speech-to-Text Agent', 'دستیار گفتار به متن'),
14269
- description: M$18('Transcribes user-attached audio when AiManagement:ChatTranscribeSpeech is registered. Default speech catalog model is set on this assist\u2019s delegated row (options.model).', 'رونویسی صوت پیوست‌شدهٔ کاربر وقتی AiManagement:ChatTranscribeSpeech ثبت شده باشد. مدل پیش‌فرض گفتار روی ردیف delegated این assist (options.model) تنظیم می‌شود.'),
14268
+ title: M$19('Speech-to-Text Agent', 'دستیار گفتار به متن'),
14269
+ description: M$19('Transcribes user-attached audio when AiManagement:ChatTranscribeSpeech is registered. Default speech catalog model is set on this assist\u2019s delegated row (options.model).', 'رونویسی صوت پیوست‌شدهٔ کاربر وقتی AiManagement:ChatTranscribeSpeech ثبت شده باشد. مدل پیش‌فرض گفتار روی ردیف delegated این assist (options.model) تنظیم می‌شود.'),
14270
14270
  toolIds: [aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.chatTranscribeSpeech))],
14271
14271
  queryIds: [],
14272
14272
  systemPrompt: [
@@ -14282,8 +14282,8 @@ const AI_AGENT_MOCK = [
14282
14282
  {
14283
14283
  id: AXMAiAgentTextToSpeechId,
14284
14284
  name: 'text-to-speech',
14285
- title: M$18('Text-to-Speech Agent', 'دستیار متن به گفتار'),
14286
- description: M$18('Spoken audio from text when AiManagement:ChatSynthesizeSpeech is registered. Defaults for model and voice come from this assist\u2019s delegated specialist row (options.model / options.voice).', 'خروجی صوتی از متن وقتی AiManagement:ChatSynthesizeSpeech ثبت شده باشد. پیش‌فرض مدل و صدا از ردیف specialist delegated این assist (options.model / options.voice) می‌آید.'),
14285
+ title: M$19('Text-to-Speech Agent', 'دستیار متن به گفتار'),
14286
+ description: M$19('Spoken audio from text when AiManagement:ChatSynthesizeSpeech is registered. Defaults for model and voice come from this assist\u2019s delegated specialist row (options.model / options.voice).', 'خروجی صوتی از متن وقتی AiManagement:ChatSynthesizeSpeech ثبت شده باشد. پیش‌فرض مدل و صدا از ردیف specialist delegated این assist (options.model / options.voice) می‌آید.'),
14287
14287
  toolIds: [aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.chatSynthesizeSpeech))],
14288
14288
  queryIds: [],
14289
14289
  systemPrompt: [
@@ -14299,8 +14299,8 @@ const AI_AGENT_MOCK = [
14299
14299
  {
14300
14300
  id: AXMAiAgentDocumentOcrId,
14301
14301
  name: 'document-ocr',
14302
- title: M$18('Document Understanding Agent', 'دستیار درک اسناد'),
14303
- description: M$18('Transcribes text from document or photo images (scans, forms, handwriting, medical paperwork). Uses AiManagement:ExtractDocumentText with a stored image fileId. Not a substitute for professional medical interpretation.', 'متن را از تصاویر سند یا عکس (اسکن، فرم، دست‌خط، پروندهٔ پزشکی) استخراج می‌کند؛ با AiManagement:ExtractDocumentText و fileId ذخیره‌شده. جایگزین تفسیر پزشکی حرفه‌ای نیست.'),
14302
+ title: M$19('Document Understanding Agent', 'دستیار درک اسناد'),
14303
+ description: M$19('Transcribes text from document or photo images (scans, forms, handwriting, medical paperwork). Uses AiManagement:ExtractDocumentText with a stored image fileId. Not a substitute for professional medical interpretation.', 'متن را از تصاویر سند یا عکس (اسکن، فرم، دست‌خط، پروندهٔ پزشکی) استخراج می‌کند؛ با AiManagement:ExtractDocumentText و fileId ذخیره‌شده. جایگزین تفسیر پزشکی حرفه‌ای نیست.'),
14304
14304
  toolIds: [aiAgentCommandBinding(axcResolveCommandRegistrySeedId(AXM_AI_REGISTRY_COMMAND_NAME.extractDocumentText))],
14305
14305
  queryIds: [],
14306
14306
  systemPrompt: [
@@ -14316,8 +14316,9 @@ const AI_AGENT_MOCK = [
14316
14316
  {
14317
14317
  id: AXMAiAgentCentralizedPaymentGuideId,
14318
14318
  name: '2a0e1e4d-ddfe-4f04-b7ba-2fd307eb5967',
14319
- title: M$18('Centralized Payment Guide Agent', 'دستیار راهنمای پرداخت متمرکز'),
14320
- description: M$18('Priority guide for the centralized commerce payment system. Assist should prefer delegating here whenever the topic is e-wallet or centralized payments (no platform command or query tools). Typical questions: paying via e-wallet, withdrawing from the wallet, charging or topping up the wallet, reporting and transaction history.', 'راهنمای اولویت‌دار سامانه پرداخت متمرکز تجارت؛ assist برای موضوعات کیف پول الکترونیک و پرداخت متمرکز باید تا حد ممکن این agent را فراخوانی کند (بدون ابزار فرمان یا پرس‌وجوی داخلی پلتفرم). نمونهٔ سوالات: نحوهٔ پرداخت از طریق کیف پول الکترونیک، برداشت از کیف پول، شارژ کیف پول، گزارش‌گیری و تاریخچهٔ تراکنش‌ها.'),
14319
+ title: M$19('Demis', 'دیمیس'),
14320
+ isAssist: true,
14321
+ description: M$19('Priority guide for the centralized commerce payment system. Assist should prefer delegating here whenever the topic is e-wallet or centralized payments (no platform command or query tools). Typical questions: paying via e-wallet, withdrawing from the wallet, charging or topping up the wallet, reporting and transaction history.', 'راهنمای اولویت‌دار سامانه پرداخت متمرکز تجارت؛ assist برای موضوعات کیف پول الکترونیک و پرداخت متمرکز باید تا حد ممکن این agent را فراخوانی کند (بدون ابزار فرمان یا پرس‌وجوی داخلی پلتفرم). نمونهٔ سوالات: نحوهٔ پرداخت از طریق کیف پول الکترونیک، برداشت از کیف پول، شارژ کیف پول، گزارش‌گیری و تاریخچهٔ تراکنش‌ها.'),
14321
14322
  toolIds: [],
14322
14323
  queryIds: [],
14323
14324
  systemPrompt: [
@@ -14333,13 +14334,13 @@ const AI_AGENT_MOCK = [
14333
14334
 
14334
14335
  //#region ---- Imports ----
14335
14336
  //#endregion
14336
- const M$17 = createMultiLanguageString;
14337
+ const M$18 = createMultiLanguageString;
14337
14338
  //#region ---- Helpers ----
14338
14339
  function aiModelRef(catalogId) {
14339
14340
  const row = AI_MODEL_MOCK.find((m) => m.id === catalogId);
14340
14341
  return {
14341
14342
  id: catalogId,
14342
- title: row?.title ?? M$17('Unknown model', 'مدل نامشخص'),
14343
+ title: row?.title ?? M$18('Unknown model', 'مدل نامشخص'),
14343
14344
  name: row?.name ?? '',
14344
14345
  };
14345
14346
  }
@@ -14347,8 +14348,6 @@ function aiModelRef(catalogId) {
14347
14348
  //#region ---- Stable assist id ----
14348
14349
  /** Deterministic id for the platform assistant assist row. */
14349
14350
  const AXMAiPlatformAssistantAssistId = 'b0000001-0000-4000-8000-000000000001';
14350
- /** Deterministic id for the Demis AI assistant assist row (mirror of platform assistant, lighter delegation). */
14351
- const AXMAiDemisAssistantAssistId = 'b0000001-0000-4000-8000-000000000004';
14352
14351
  //#endregion
14353
14352
  //#region ---- Seed text: supervisor assists ----
14354
14353
  /** Supervisor assist: tools are delegated specialists (`agent:<AiAgent catalog id>`), not raw registry tools. */
@@ -14387,26 +14386,14 @@ const SEED_SUPERVISOR_AGENTS_HINT = [
14387
14386
  '- `<AXPWidgetNode>` is the inner widget root from the delegated specialist (a `node` entry in `data.responses` when the specialist returns layout JSON). Use **widget-follow-up-chips-layout** for chip rows (`flex-layout` + `button-action`).',
14388
14387
  '- Never paste bare inner widget JSON without the `{"type":"node","content":...}` wrapper — each wrapper becomes a separate interactive layout segment.',
14389
14388
  ].join('\n');
14390
- /** Demis default assist only: single delegated agent (centralized payment guide)—no other specialist tools are available. */
14391
- const SEED_DEMIS_CENTRALIZED_PAYMENT_GUIDE_ROUTING = [
14392
- 'Your available tools are delegated specialists; each function name is `agent:` plus the AiAgent catalog id from the tool list.',
14393
- '',
14394
- '## Centralized payment guide (priority delegation)',
14395
- '- When the user asks about the **centralized commerce payment system**, **e-wallet**, or **wallet workflows**, **prefer** the **centralized payment guide** delegated agent **first** (pick the matching `agent:` tool from your list) instead of improvising steps from general knowledge.',
14396
- '- Treat these as mandatory delegation signals: paying via the e-wallet, withdrawing from the wallet, charging or topping up the wallet, **transaction history**, and **payment reporting**.',
14397
- '',
14398
- '## Verbatim relay after the centralized payment guide replies',
14399
- '- When that delegated `agent:` tool **succeeds** with user-visible text in a `text` segment inside `data.responses`, your **final assistant message must mirror that text exactly** when policy requires a verbatim relay: same wording, punctuation, line breaks, lists, and the specialist closing disclaimer line. **Do not** shorten, lengthen, paraphrase, translate, summarize, bullet-wrap differently, or add prefixes/suffixes ("Here is what the guide said:", "In short", follow-up questions) unless those words already appear inside the specialist text.',
14400
- '- **Do not** wrap the relay in markdown fences or extra headings unless the specialist output already contains them.',
14401
- ].join('\n');
14402
14389
  //#endregion
14403
14390
  //#region ---- Default Assists ----
14404
14391
  const AI_ASSIST_MOCK = [
14405
14392
  {
14406
14393
  id: AXMAiPlatformAssistantAssistId,
14407
14394
  name: 'platform-assistant',
14408
- title: M$17('Platform Assistant', 'دستیار پلتفرم'),
14409
- description: M$17('Default platform assistant used when no specific assist is selected.', 'دستیار پیش‌فرض پلتفرم وقتی هیچ assist مشخصی انتخاب نشده باشد.'),
14395
+ title: M$18('Platform Assistant', 'دستیار پلتفرم'),
14396
+ description: M$18('Default platform assistant used when no specific assist is selected.', 'دستیار پیش‌فرض پلتفرم وقتی هیچ assist مشخصی انتخاب نشده باشد.'),
14410
14397
  modelId: AXMAiModelStableIds.gpt54,
14411
14398
  aiModel: aiModelRef(AXMAiModelStableIds.gpt54),
14412
14399
  tools: [],
@@ -14476,32 +14463,11 @@ const AI_ASSIST_MOCK = [
14476
14463
  },
14477
14464
  ],
14478
14465
  },
14479
- {
14480
- id: AXMAiDemisAssistantAssistId,
14481
- name: 'demis-assistant',
14482
- title: M$17('Demis Assistant', 'دستیار دیمیس'),
14483
- description: M$17('Default platform assistant used when no specific assist is selected.', 'دستیار پیش‌فرض پلتفرم وقتی هیچ assist مشخصی انتخاب نشده باشد.'),
14484
- modelId: AXMAiModelStableIds.gpt54,
14485
- aiModel: aiModelRef(AXMAiModelStableIds.gpt54),
14486
- tools: [],
14487
- systemPrompt: [
14488
- 'You are a helpful assistant for the ACoreX platform. Be **brief**, accurate, and safe. Skip jargon unless the user asks for technical detail.',
14489
- 'Answer in **this product’s** scope only; for menus, catalog, or stored data, call the matching delegated agent **before** answering — do not guess.',
14490
- '',
14491
- SEED_DEMIS_CENTRALIZED_PAYMENT_GUIDE_ROUTING,
14492
- ].join('\n'),
14493
- initialMessages: '',
14494
- professionImageUrl: '',
14495
- imageModelId: AXMAiModelStableIds.openaiGptImage1,
14496
- // No planning preamble: this assist only delegates to the payment guide; a tool-free planning turn would surface as "thinking" with little benefit.
14497
- planningMode: 'off',
14498
- delegatedAgents: [{ agent: { type: AXMAiAgentCentralizedPaymentGuideId } }],
14499
- },
14500
14466
  {
14501
14467
  id: 'b0000001-0000-4000-8000-000000000002',
14502
14468
  name: 'medical-assistant',
14503
- title: M$17('Medical Assistant', 'دستیار پزشکی'),
14504
- description: M$17('Assists with medical terminology, basic health information, and appointment-related questions.', 'کمک به اصطلاحات پزشکی، اطلاعات عمومی سلامت و پرسش‌های مرتبط با نوبت.'),
14469
+ title: M$18('Medical Assistant', 'دستیار پزشکی'),
14470
+ description: M$18('Assists with medical terminology, basic health information, and appointment-related questions.', 'کمک به اصطلاحات پزشکی، اطلاعات عمومی سلامت و پرسش‌های مرتبط با نوبت.'),
14505
14471
  modelId: AXMAiModelStableIds.gemini25Flash,
14506
14472
  aiModel: aiModelRef(AXMAiModelStableIds.gemini25Flash),
14507
14473
  tools: [],
@@ -14514,8 +14480,8 @@ const AI_ASSIST_MOCK = [
14514
14480
  {
14515
14481
  id: 'b0000001-0000-4000-8000-000000000003',
14516
14482
  name: 'general-assistant',
14517
- title: M$17('General Assistant', 'دستیار عمومی'),
14518
- description: M$17('A general-purpose assistant that routes to platform help/navigation, platform entity tooling, utilities, media, image, and delegated layout specialists.', 'دستیار چندمنظوره که به دستیار راهنمای پلتفرم، موجودیت پلتفرم، ابزارها، رسانه‌ها، تصویر و چیدمان (delegated specialists) متصل می‌شود.'),
14483
+ title: M$18('General Assistant', 'دستیار عمومی'),
14484
+ description: M$18('A general-purpose assistant that routes to platform help/navigation, platform entity tooling, utilities, media, image, and delegated layout specialists.', 'دستیار چندمنظوره که به دستیار راهنمای پلتفرم، موجودیت پلتفرم، ابزارها، رسانه‌ها، تصویر و چیدمان (delegated specialists) متصل می‌شود.'),
14519
14485
  modelId: AXMAiModelStableIds.gemini25Flash,
14520
14486
  aiModel: aiModelRef(AXMAiModelStableIds.gemini25Flash),
14521
14487
  tools: [],
@@ -14585,7 +14551,10 @@ class AXCAiAssistSeeder {
14585
14551
  this.storageService = inject(AXPEntityStorageService);
14586
14552
  }
14587
14553
  async seed() {
14588
- await this.storageService.initial(`${RootConfig.module.name}.${RootConfig.entities.assist.name}`, AI_ASSIST_MOCK);
14554
+ const entityName = `${RootConfig.module.name}.${RootConfig.entities.assist.name}`;
14555
+ for (const assist of AI_ASSIST_MOCK) {
14556
+ await this.storageService.upsertOne(entityName, assist, { merge: true });
14557
+ }
14589
14558
  }
14590
14559
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCAiAssistSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14591
14560
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCAiAssistSeeder }); }
@@ -17778,7 +17747,7 @@ class AXCAiChatDemisProvider {
17778
17747
  }
17779
17748
  const agentUuid = await this.resolveAgentUuid(options);
17780
17749
  if (!agentUuid) {
17781
- throw new Error('Demis chat requires `agent_uuid` (AiAgent catalog `name` slug). Use a direct agent run, delegated agent, Demis options, or set Default agent name in AI settings.');
17750
+ throw new Error('Demis chat requires `agent_uuid` (AiAgent catalog `name` slug). Use a direct agent run, delegated agent, or Demis options.');
17782
17751
  }
17783
17752
  const userMessage = buildDemisTranscriptUserMessage(options.messages);
17784
17753
  const useStream = options.stream !== false;
@@ -17932,8 +17901,7 @@ class AXCAiChatDemisProvider {
17932
17901
  if (ctxName) {
17933
17902
  return ctxName;
17934
17903
  }
17935
- const fromSetting = (await this.settings.get(AXPAiManagementSettings.Providers.Demis.DefaultAgentName)) ?? '';
17936
- return fromSetting.trim();
17904
+ return '';
17937
17905
  }
17938
17906
  async collectLatestUserMediaFiles(messages) {
17939
17907
  let lastUser;
@@ -19382,7 +19350,7 @@ class AXCAiManagementMockModule {
19382
19350
  provideCommandSetups([
19383
19351
  {
19384
19352
  key: 'AiManagement:ChatGenerateImage',
19385
- command: () => import('./acorex-connectivity-mock-chat-generate-image.command-BqnmiAgI.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19353
+ command: () => import('./acorex-connectivity-mock-chat-generate-image.command-CBlDsPWY.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19386
19354
  },
19387
19355
  {
19388
19356
  key: 'AiManagement:ExtractDocumentText',
@@ -19394,11 +19362,11 @@ class AXCAiManagementMockModule {
19394
19362
  },
19395
19363
  {
19396
19364
  key: 'AiManagement:ChatTranscribeSpeech',
19397
- command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-tQbAVOfm.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19365
+ command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-DM6JF63R.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19398
19366
  },
19399
19367
  {
19400
19368
  key: 'AiManagement:ChatSynthesizeSpeech',
19401
- command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-D3NPqs6A.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19369
+ command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-BCSsNdNv.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19402
19370
  },
19403
19371
  ]),
19404
19372
  ] }); }
@@ -19441,7 +19409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19441
19409
  provideCommandSetups([
19442
19410
  {
19443
19411
  key: 'AiManagement:ChatGenerateImage',
19444
- command: () => import('./acorex-connectivity-mock-chat-generate-image.command-BqnmiAgI.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19412
+ command: () => import('./acorex-connectivity-mock-chat-generate-image.command-CBlDsPWY.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19445
19413
  },
19446
19414
  {
19447
19415
  key: 'AiManagement:ExtractDocumentText',
@@ -19453,11 +19421,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19453
19421
  },
19454
19422
  {
19455
19423
  key: 'AiManagement:ChatTranscribeSpeech',
19456
- command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-tQbAVOfm.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19424
+ command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-DM6JF63R.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19457
19425
  },
19458
19426
  {
19459
19427
  key: 'AiManagement:ChatSynthesizeSpeech',
19460
- command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-D3NPqs6A.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19428
+ command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-BCSsNdNv.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19461
19429
  },
19462
19430
  ]),
19463
19431
  ],
@@ -19465,7 +19433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19465
19433
  }] });
19466
19434
 
19467
19435
  //#region ---- Helpers ----
19468
- const M$16 = createMultiLanguageString;
19436
+ const M$17 = createMultiLanguageString;
19469
19437
  //#endregion
19470
19438
  //#region ---- Category IDs (stable seeds for Application rows) ----
19471
19439
  /** Stable UUIDs for ApplicationManagement.ApplicationCategory demo data. */
@@ -19481,56 +19449,56 @@ const APPLICATION_CATEGORY_IDS = {
19481
19449
  const APPLICATION_CATEGORY_MOCKS = [
19482
19450
  {
19483
19451
  id: APPLICATION_CATEGORY_IDS.ecommerce,
19484
- title: M$16('E-Commerce', 'تجارت الکترونیک'),
19485
- description: M$16('Online commerce and storefront applications', 'اپلیکیشن‌های فروشگاه و تجارت آنلاین'),
19452
+ title: M$17('E-Commerce', 'تجارت الکترونیک'),
19453
+ description: M$17('Online commerce and storefront applications', 'اپلیکیشن‌های فروشگاه و تجارت آنلاین'),
19486
19454
  icon: 'fa-light fa-shopping-cart',
19487
19455
  color: '#7b1fa2',
19488
19456
  childrenCount: 0,
19489
19457
  },
19490
19458
  {
19491
19459
  id: APPLICATION_CATEGORY_IDS.finance,
19492
- title: M$16('Finance', 'مالی'),
19493
- description: M$16('Budgeting, invoicing, and financial reporting', 'بودجه‌ریزی، صورتحساب و گزارش‌های مالی'),
19460
+ title: M$17('Finance', 'مالی'),
19461
+ description: M$17('Budgeting, invoicing, and financial reporting', 'بودجه‌ریزی، صورتحساب و گزارش‌های مالی'),
19494
19462
  icon: 'fa-light fa-dollar-sign',
19495
19463
  color: '#c62828',
19496
19464
  childrenCount: 0,
19497
19465
  },
19498
19466
  {
19499
19467
  id: APPLICATION_CATEGORY_IDS.procurement,
19500
- title: M$16('Procurement', 'تدارکات'),
19501
- description: M$16('Ordering and procurement workflows', 'گردش کار سفارش و تدارکات'),
19468
+ title: M$17('Procurement', 'تدارکات'),
19469
+ description: M$17('Ordering and procurement workflows', 'گردش کار سفارش و تدارکات'),
19502
19470
  icon: 'fa-light fa-shopping-bag',
19503
19471
  color: '#009688',
19504
19472
  childrenCount: 0,
19505
19473
  },
19506
19474
  {
19507
19475
  id: APPLICATION_CATEGORY_IDS.platform,
19508
- title: M$16('Platform', 'پلتفرم'),
19509
- description: M$16('Platform administration and operations', 'عملیات و مدیریت پلتفرم'),
19476
+ title: M$17('Platform', 'پلتفرم'),
19477
+ description: M$17('Platform administration and operations', 'عملیات و مدیریت پلتفرم'),
19510
19478
  icon: 'fa-light fa-terminal',
19511
19479
  color: '#424242',
19512
19480
  childrenCount: 0,
19513
19481
  },
19514
19482
  {
19515
19483
  id: APPLICATION_CATEGORY_IDS.safety,
19516
- title: M$16('Safety', 'ایمنی'),
19517
- description: M$16('Safety and compliance management', 'مدیریت ایمنی و انطباق'),
19484
+ title: M$17('Safety', 'ایمنی'),
19485
+ description: M$17('Safety and compliance management', 'مدیریت ایمنی و انطباق'),
19518
19486
  icon: 'fa-light fa-shield-halved',
19519
19487
  color: '#d32f2f',
19520
19488
  childrenCount: 0,
19521
19489
  },
19522
19490
  {
19523
19491
  id: APPLICATION_CATEGORY_IDS.crm,
19524
- title: M$16('CRM', 'مدیریت ارتباط با مشتری'),
19525
- description: M$16('Customer relationship management', 'مدیریت ارتباط با مشتری و فروش'),
19492
+ title: M$17('CRM', 'مدیریت ارتباط با مشتری'),
19493
+ description: M$17('Customer relationship management', 'مدیریت ارتباط با مشتری و فروش'),
19526
19494
  icon: 'fa-light fa-users',
19527
19495
  color: '#1976d2',
19528
19496
  childrenCount: 0,
19529
19497
  },
19530
19498
  {
19531
19499
  id: APPLICATION_CATEGORY_IDS.hr,
19532
- title: M$16('HR', 'منابع انسانی'),
19533
- description: M$16('Human resources and workforce', 'منابع انسانی و نیروی کار'),
19500
+ title: M$17('HR', 'منابع انسانی'),
19501
+ description: M$17('Human resources and workforce', 'منابع انسانی و نیروی کار'),
19534
19502
  icon: 'fa-light fa-briefcase',
19535
19503
  color: '#f57c00',
19536
19504
  childrenCount: 0,
@@ -19852,6 +19820,40 @@ const APPLICATION_TREE = [
19852
19820
  },
19853
19821
  ],
19854
19822
  },
19823
+ {
19824
+ id: '00000000-0000-0000-0000-000000000009',
19825
+ code: 'MAGFA-001',
19826
+ title: 'MAGFA Commerce',
19827
+ description: 'MAGFA commerce application: conversation, AI assist, reports, and notifications for Iranian trade operations.',
19828
+ version: '1.0.0',
19829
+ categoryId: APPLICATION_CATEGORY_IDS.ecommerce,
19830
+ tags: ['magfa', 'commerce', 'trade', 'iran', 'conversation', 'ai', 'reports'],
19831
+ statusId: AXPSystemStatusType.Active,
19832
+ icon: 'fa-light fa-store',
19833
+ color: '#5c6bc0',
19834
+ url: 'https://commerce.magfa.ir',
19835
+ documentationUrl: 'https://docs.magfa.ir/commerce',
19836
+ supportEmail: 'support@magfa.ir',
19837
+ releaseDate: new Date('2025-01-01'),
19838
+ isPublic: true,
19839
+ editions: [
19840
+ {
19841
+ id: '00000000-0000-0000-0000-000000000090',
19842
+ title: 'Standard',
19843
+ description: 'Conversation, AI, reports, and notifications for Iranian trade operations.',
19844
+ featureKeys: [
19845
+ 'Conversation',
19846
+ 'AiManagement',
19847
+ 'ReportManagement',
19848
+ 'NotificationManagement',
19849
+ 'Common',
19850
+ AXPCommonFeatureKeys.GlobalSearch,
19851
+ AXPReportManagementFeatureKeys.ReportBuilder,
19852
+ AXPReportManagementFeatureKeys.SavedReports,
19853
+ ],
19854
+ },
19855
+ ],
19856
+ },
19855
19857
  {
19856
19858
  id: '00000000-0000-0000-0000-000000000008',
19857
19859
  code: 'HRM-001',
@@ -19949,6 +19951,9 @@ const COSTMANAGER_PROFESSIONAL = EDITIONS.find((e) => e.id === '00000000-0000-00
19949
19951
  const COSTMANAGER_ENTERPRISE = EDITIONS.find((e) => e.id === '00000000-0000-0000-0000-000000000062');
19950
19952
  const CRM_ENTERPRISE = EDITIONS.find((e) => e.id === '00000000-0000-0000-0000-000000000072');
19951
19953
  const HR_ENTERPRISE = EDITIONS.find((e) => e.id === '00000000-0000-0000-0000-000000000082');
19954
+ const MAGFA_COMMERCE_STANDARD = EDITIONS.find((e) => e.id === '00000000-0000-0000-0000-000000000090');
19955
+ /** @deprecated Use {@link MAGFA_COMMERCE_STANDARD}. */
19956
+ const COLLABORATION_STANDARD = MAGFA_COMMERCE_STANDARD;
19952
19957
  //#endregion
19953
19958
 
19954
19959
  //#region ---- Application Data Generation ----
@@ -24417,7 +24422,7 @@ const assetManagementMiddleware = {
24417
24422
  //#region ---- Imports ----
24418
24423
  //#endregion
24419
24424
  //#region ---- Helpers ----
24420
- const M$15 = (en, fa) => createMultiLanguageString(en, fa);
24425
+ const M$16 = (en, fa) => createMultiLanguageString(en, fa);
24421
24426
  /** English category label → id (roots and children). */
24422
24427
  const MAINTENANCE_TYPE_CATEGORY_KEY_TO_ID = {};
24423
24428
  //#endregion
@@ -24461,8 +24466,8 @@ function generateMaintenanceTypeCategories() {
24461
24466
  MAINTENANCE_TYPE_CATEGORY_KEY_TO_ID[key] = id;
24462
24467
  categories.push({
24463
24468
  id,
24464
- title: M$15(titleEn, titleFa),
24465
- description: M$15(descEn, descFa),
24469
+ title: M$16(titleEn, titleFa),
24470
+ description: M$16(descEn, descFa),
24466
24471
  childrenCount: 0,
24467
24472
  });
24468
24473
  });
@@ -24554,8 +24559,8 @@ function generateMaintenanceTypeCategories() {
24554
24559
  MAINTENANCE_TYPE_CATEGORY_KEY_TO_ID[key] = id;
24555
24560
  categories.push({
24556
24561
  id,
24557
- title: M$15(titleEn, titleFa),
24558
- description: M$15(descEn, descFa),
24562
+ title: M$16(titleEn, titleFa),
24563
+ description: M$16(descEn, descFa),
24559
24564
  parentId,
24560
24565
  childrenCount: 0,
24561
24566
  });
@@ -24576,7 +24581,7 @@ function createMaintenanceType(input) {
24576
24581
  const categories = [
24577
24582
  {
24578
24583
  id: categoryId,
24579
- title: entity?.title ?? M$15(categoryKey, categoryKey),
24584
+ title: entity?.title ?? M$16(categoryKey, categoryKey),
24580
24585
  },
24581
24586
  ];
24582
24587
  return {
@@ -25500,12 +25505,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
25500
25505
  type: Injectable
25501
25506
  }] });
25502
25507
 
25503
- const M$14 = createMultiLanguageString;
25508
+ const M$15 = createMultiLanguageString;
25504
25509
  const financialCoreCurrencyMocks = [
25505
25510
  {
25506
25511
  id: AXPDataGenerator.uuid(),
25507
25512
  code: 'USD',
25508
- title: M$14('US Dollar', 'دلار آمریکا'),
25513
+ title: M$15('US Dollar', 'دلار آمریکا'),
25509
25514
  symbol: '$',
25510
25515
  isoNumber: '840',
25511
25516
  decimalPlaces: 2,
@@ -25518,7 +25523,7 @@ const financialCoreCurrencyMocks = [
25518
25523
  {
25519
25524
  id: AXPDataGenerator.uuid(),
25520
25525
  code: 'EUR',
25521
- title: M$14('Euro', 'یورو'),
25526
+ title: M$15('Euro', 'یورو'),
25522
25527
  symbol: '€',
25523
25528
  isoNumber: '978',
25524
25529
  decimalPlaces: 2,
@@ -25531,7 +25536,7 @@ const financialCoreCurrencyMocks = [
25531
25536
  {
25532
25537
  id: AXPDataGenerator.uuid(),
25533
25538
  code: 'NZD',
25534
- title: M$14('New Zealand Dollar', 'دلار نیوزیلند'),
25539
+ title: M$15('New Zealand Dollar', 'دلار نیوزیلند'),
25535
25540
  symbol: 'NZ$',
25536
25541
  isoNumber: '554',
25537
25542
  decimalPlaces: 2,
@@ -25544,7 +25549,7 @@ const financialCoreCurrencyMocks = [
25544
25549
  {
25545
25550
  id: AXPDataGenerator.uuid(),
25546
25551
  code: 'AUD',
25547
- title: M$14('Australian Dollar', 'دلار استرالیا'),
25552
+ title: M$15('Australian Dollar', 'دلار استرالیا'),
25548
25553
  symbol: 'A$',
25549
25554
  isoNumber: '036',
25550
25555
  decimalPlaces: 2,
@@ -25557,7 +25562,7 @@ const financialCoreCurrencyMocks = [
25557
25562
  {
25558
25563
  id: AXPDataGenerator.uuid(),
25559
25564
  code: 'IRR',
25560
- title: M$14('Iranian Rial', 'ریال ایران'),
25565
+ title: M$15('Iranian Rial', 'ریال ایران'),
25561
25566
  symbol: '﷼',
25562
25567
  isoNumber: '364',
25563
25568
  decimalPlaces: 0,
@@ -27979,89 +27984,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
27979
27984
  }] });
27980
27985
 
27981
27986
  /** Competency / proficiency tiers for skills — not organizational job grades (see organization-management JobLevel mocks). */
27982
- const M$13 = createMultiLanguageString;
27987
+ const M$14 = createMultiLanguageString;
27983
27988
  const learningManagementSkillLevelMocks = [
27984
27989
  {
27985
27990
  id: AXPDataGenerator.uuid(),
27986
- title: M$13('Foundation', 'پایه'),
27991
+ title: M$14('Foundation', 'پایه'),
27987
27992
  levelNumber: 1,
27988
- description: M$13('Understands core concepts and requires supervision.', 'مفاهیم اصلی را درک می‌کند و نیاز به نظارت دارد.'),
27993
+ description: M$14('Understands core concepts and requires supervision.', 'مفاهیم اصلی را درک می‌کند و نیاز به نظارت دارد.'),
27989
27994
  },
27990
27995
  {
27991
27996
  id: AXPDataGenerator.uuid(),
27992
- title: M$13('Beginner', 'مبتدی'),
27997
+ title: M$14('Beginner', 'مبتدی'),
27993
27998
  levelNumber: 2,
27994
- description: M$13('Can perform basic tasks with guidance and support.', 'با راهنمایی و پشتیبانی می‌تواند وظایف پایه را انجام دهد.'),
27999
+ description: M$14('Can perform basic tasks with guidance and support.', 'با راهنمایی و پشتیبانی می‌تواند وظایف پایه را انجام دهد.'),
27995
28000
  },
27996
28001
  {
27997
28002
  id: AXPDataGenerator.uuid(),
27998
- title: M$13('Practitioner', 'کاربردی'),
28003
+ title: M$14('Practitioner', 'کاربردی'),
27999
28004
  levelNumber: 3,
28000
- description: M$13('Applies the skill independently in day-to-day scenarios.', 'مهارت را در سناریوهای روزمره به‌صورت مستقل به کار می‌گیرد.'),
28005
+ description: M$14('Applies the skill independently in day-to-day scenarios.', 'مهارت را در سناریوهای روزمره به‌صورت مستقل به کار می‌گیرد.'),
28001
28006
  },
28002
28007
  {
28003
28008
  id: AXPDataGenerator.uuid(),
28004
- title: M$13('Intermediate', 'متوسط'),
28009
+ title: M$14('Intermediate', 'متوسط'),
28005
28010
  levelNumber: 4,
28006
- description: M$13('Handles complex scenarios and troubleshoots common issues.', 'سناریوهای پیچیده را مدیریت می‌کند و مسائل رایج را عیب‌یابی می‌کند.'),
28011
+ description: M$14('Handles complex scenarios and troubleshoots common issues.', 'سناریوهای پیچیده را مدیریت می‌کند و مسائل رایج را عیب‌یابی می‌کند.'),
28007
28012
  },
28008
28013
  {
28009
28014
  id: AXPDataGenerator.uuid(),
28010
- title: M$13('Advanced', 'پیشرفته'),
28015
+ title: M$14('Advanced', 'پیشرفته'),
28011
28016
  levelNumber: 5,
28012
- description: M$13('Masters complex techniques and can optimize processes.', 'تکنیک‌های پیچیده را تسلط دارد و می‌تواند فرایندها را بهینه کند.'),
28017
+ description: M$14('Masters complex techniques and can optimize processes.', 'تکنیک‌های پیچیده را تسلط دارد و می‌تواند فرایندها را بهینه کند.'),
28013
28018
  },
28014
28019
  {
28015
28020
  id: AXPDataGenerator.uuid(),
28016
- title: M$13('Expert', 'خبره'),
28021
+ title: M$14('Expert', 'خبره'),
28017
28022
  levelNumber: 6,
28018
- description: M$13('Shapes best practices and mentors others effectively.', 'شیوه‌های برتر را شکل می‌دهد و دیگران را به‌خوبی راهنمایی می‌کند.'),
28023
+ description: M$14('Shapes best practices and mentors others effectively.', 'شیوه‌های برتر را شکل می‌دهد و دیگران را به‌خوبی راهنمایی می‌کند.'),
28019
28024
  },
28020
28025
  {
28021
28026
  id: AXPDataGenerator.uuid(),
28022
- title: M$13('Master', 'استاد'),
28027
+ title: M$14('Master', 'استاد'),
28023
28028
  levelNumber: 7,
28024
- description: M$13('Recognized authority who innovates and leads industry standards.', 'مرجع شناخته‌شده که نوآوری می‌کند و استانداردهای صنعت را رهبری می‌کند.'),
28029
+ description: M$14('Recognized authority who innovates and leads industry standards.', 'مرجع شناخته‌شده که نوآوری می‌کند و استانداردهای صنعت را رهبری می‌کند.'),
28025
28030
  },
28026
28031
  ];
28027
28032
 
28028
28033
  //#region ---- Imports ----
28029
28034
  //#endregion
28030
28035
  //#region ---- Skill category mocks ----
28031
- const M$12 = createMultiLanguageString;
28036
+ const M$13 = createMultiLanguageString;
28032
28037
  const learningManagementSkillCategoryMocks = [
28033
28038
  {
28034
28039
  id: AXPDataGenerator.uuid(),
28035
- title: M$12('Common Skills', 'مهارت‌های عمومی'),
28036
- description: M$12('Essential soft skills and competencies for all employees.', 'مهارت‌های نرم و شایستگی‌های پایه برای همه همکاران.'),
28040
+ title: M$13('Common Skills', 'مهارت‌های عمومی'),
28041
+ description: M$13('Essential soft skills and competencies for all employees.', 'مهارت‌های نرم و شایستگی‌های پایه برای همه همکاران.'),
28037
28042
  parentId: undefined,
28038
28043
  childrenCount: 0,
28039
28044
  },
28040
28045
  {
28041
28046
  id: AXPDataGenerator.uuid(),
28042
- title: M$12('Health & Safety Compliance', 'ایمنی، بهداشت و انطباق'),
28043
- description: M$12('Occupational health and safety compliance, standards, and regulations.', 'انطباق با الزامات ایمنی و بهداشت حرفه‌ای، استانداردها و مقررات.'),
28047
+ title: M$13('Health & Safety Compliance', 'ایمنی، بهداشت و انطباق'),
28048
+ description: M$13('Occupational health and safety compliance, standards, and regulations.', 'انطباق با الزامات ایمنی و بهداشت حرفه‌ای، استانداردها و مقررات.'),
28044
28049
  parentId: undefined,
28045
28050
  childrenCount: 0,
28046
28051
  },
28047
28052
  {
28048
28053
  id: AXPDataGenerator.uuid(),
28049
- title: M$12('Environmental Management', 'مدیریت زیست‌محیطی'),
28050
- description: M$12('Environmental protection, waste management, and sustainability practices.', 'حفاظت از محیط زیست، مدیریت پسماند و رویکردهای پایداری.'),
28054
+ title: M$13('Environmental Management', 'مدیریت زیست‌محیطی'),
28055
+ description: M$13('Environmental protection, waste management, and sustainability practices.', 'حفاظت از محیط زیست، مدیریت پسماند و رویکردهای پایداری.'),
28051
28056
  parentId: undefined,
28052
28057
  childrenCount: 0,
28053
28058
  },
28054
28059
  {
28055
28060
  id: AXPDataGenerator.uuid(),
28056
- title: M$12('Risk Assessment & Management', 'ارزیابی و مدیریت ریسک'),
28057
- description: M$12('Hazard identification, risk assessment, and risk mitigation strategies.', 'شناسایی خطر، ارزیابی ریسک و راهکارهای کاهش ریسک.'),
28061
+ title: M$13('Risk Assessment & Management', 'ارزیابی و مدیریت ریسک'),
28062
+ description: M$13('Hazard identification, risk assessment, and risk mitigation strategies.', 'شناسایی خطر، ارزیابی ریسک و راهکارهای کاهش ریسک.'),
28058
28063
  parentId: undefined,
28059
28064
  childrenCount: 0,
28060
28065
  },
28061
28066
  {
28062
28067
  id: AXPDataGenerator.uuid(),
28063
- title: M$12('Emergency Response & Preparedness', 'پاسخ و آمادگی اضطراری'),
28064
- description: M$12('Emergency procedures, incident response, and crisis management.', 'رویه‌های اضطراری، پاسخ به حادثه و مدیریت بحران.'),
28068
+ title: M$13('Emergency Response & Preparedness', 'پاسخ و آمادگی اضطراری'),
28069
+ description: M$13('Emergency procedures, incident response, and crisis management.', 'رویه‌های اضطراری، پاسخ به حادثه و مدیریت بحران.'),
28065
28070
  parentId: undefined,
28066
28071
  childrenCount: 0,
28067
28072
  },
@@ -28071,7 +28076,7 @@ const learningManagementSkillCategoryMocks = [
28071
28076
  //#region ---- Imports ----
28072
28077
  //#endregion
28073
28078
  //#region ---- Mock seed helpers ----
28074
- const M$11 = createMultiLanguageString;
28079
+ const M$12 = createMultiLanguageString;
28075
28080
  function findCategory$1(enDisplayTitle) {
28076
28081
  const cat = learningManagementSkillCategoryMocks.find((c) => resolveMultiLanguageString(c.title, 'en-US') === enDisplayTitle);
28077
28082
  if (!cat) {
@@ -28084,8 +28089,8 @@ function seedSkill(row) {
28084
28089
  return {
28085
28090
  id: AXPDataGenerator.uuid(),
28086
28091
  name: row.name,
28087
- title: M$11(row.titleEn, row.titleFa),
28088
- description: M$11(row.descEn, row.descFa),
28092
+ title: M$12(row.titleEn, row.titleFa),
28093
+ description: M$12(row.descEn, row.descFa),
28089
28094
  code: row.code,
28090
28095
  categoryIds: [cat.id],
28091
28096
  categories: [{ id: cat.id, title: cat.title }],
@@ -28551,117 +28556,117 @@ const SKILL_SEED = [
28551
28556
  const learningManagementSkillMocks = SKILL_SEED.map((row) => seedSkill(row));
28552
28557
  //#endregion
28553
28558
 
28554
- const M$10 = createMultiLanguageString;
28559
+ const M$11 = createMultiLanguageString;
28555
28560
  const JOB_LEVELS_MOCK = [
28556
28561
  {
28557
28562
  id: AXPDataGenerator.uuid(),
28558
- title: M$10('Employee', 'کارمند'),
28559
- description: M$10('Entry individual-contributor level focused on assigned tasks and daily execution.', 'سطح پایه فردی با تمرکز بر انجام وظایف محوله و اجرای روزانه.'),
28563
+ title: M$11('Employee', 'کارمند'),
28564
+ description: M$11('Entry individual-contributor level focused on assigned tasks and daily execution.', 'سطح پایه فردی با تمرکز بر انجام وظایف محوله و اجرای روزانه.'),
28560
28565
  level: 1,
28561
28566
  },
28562
28567
  {
28563
28568
  id: AXPDataGenerator.uuid(),
28564
- title: M$10('Specialist', 'کارشناس'),
28565
- description: M$10('Professional contributor with solid domain knowledge and reliable delivery.', 'متخصص حرفه‌ای با دانش مناسب حوزه و تحویل قابل اتکا.'),
28569
+ title: M$11('Specialist', 'کارشناس'),
28570
+ description: M$11('Professional contributor with solid domain knowledge and reliable delivery.', 'متخصص حرفه‌ای با دانش مناسب حوزه و تحویل قابل اتکا.'),
28566
28571
  level: 2,
28567
28572
  },
28568
28573
  {
28569
28574
  id: AXPDataGenerator.uuid(),
28570
- title: M$10('Senior Specialist', 'کارشناس ارشد'),
28571
- description: M$10('Experienced contributor who owns complex work and mentors less-experienced peers.', 'متخصص باتجربه که کارهای پیچیده را پیش می‌برد و به همکاران کم‌تجربه‌تر راهنمایی می‌دهد.'),
28575
+ title: M$11('Senior Specialist', 'کارشناس ارشد'),
28576
+ description: M$11('Experienced contributor who owns complex work and mentors less-experienced peers.', 'متخصص باتجربه که کارهای پیچیده را پیش می‌برد و به همکاران کم‌تجربه‌تر راهنمایی می‌دهد.'),
28572
28577
  level: 3,
28573
28578
  },
28574
28579
  {
28575
28580
  id: AXPDataGenerator.uuid(),
28576
- title: M$10('Supervisor', 'سرپرست'),
28577
- description: M$10('First-line operational leadership responsible for a team or shift.', 'رهبری عملیاتی خط اول با مسئولیت یک تیم یا شیفت.'),
28581
+ title: M$11('Supervisor', 'سرپرست'),
28582
+ description: M$11('First-line operational leadership responsible for a team or shift.', 'رهبری عملیاتی خط اول با مسئولیت یک تیم یا شیفت.'),
28578
28583
  level: 4,
28579
28584
  },
28580
28585
  {
28581
28586
  id: AXPDataGenerator.uuid(),
28582
- title: M$10('Deputy Manager', 'معاون مدیر'),
28583
- description: M$10('Supports managerial accountability and leads part of a function or unit.', 'پشتیبان مسئولیت‌های مدیریتی و هدایت بخشی از یک واحد یا عملکرد.'),
28587
+ title: M$11('Deputy Manager', 'معاون مدیر'),
28588
+ description: M$11('Supports managerial accountability and leads part of a function or unit.', 'پشتیبان مسئولیت‌های مدیریتی و هدایت بخشی از یک واحد یا عملکرد.'),
28584
28589
  level: 5,
28585
28590
  },
28586
28591
  {
28587
28592
  id: AXPDataGenerator.uuid(),
28588
- title: M$10('Manager', 'مدیر'),
28589
- description: M$10('Responsible for people, delivery, and performance outcomes of a defined unit.', 'مسئول افراد، تحویل کار و نتایج عملکردی یک واحد مشخص.'),
28593
+ title: M$11('Manager', 'مدیر'),
28594
+ description: M$11('Responsible for people, delivery, and performance outcomes of a defined unit.', 'مسئول افراد، تحویل کار و نتایج عملکردی یک واحد مشخص.'),
28590
28595
  level: 6,
28591
28596
  },
28592
28597
  {
28593
28598
  id: AXPDataGenerator.uuid(),
28594
- title: M$10('Senior Manager', 'مدیر ارشد'),
28595
- description: M$10('Leads multiple teams or sub-functions with broader planning and coordination scope.', 'هدایت چند تیم یا زیروظیفه با دامنه برنامه‌ریزی و هماهنگی گسترده‌تر.'),
28599
+ title: M$11('Senior Manager', 'مدیر ارشد'),
28600
+ description: M$11('Leads multiple teams or sub-functions with broader planning and coordination scope.', 'هدایت چند تیم یا زیروظیفه با دامنه برنامه‌ریزی و هماهنگی گسترده‌تر.'),
28596
28601
  level: 7,
28597
28602
  },
28598
28603
  {
28599
28604
  id: AXPDataGenerator.uuid(),
28600
- title: M$10('Director General', 'مدیرکل'),
28601
- description: M$10('Owns strategic direction and cross-functional alignment for a major domain.', 'مالک جهت‌گیری راهبردی و هم‌راستاسازی بین‌بخشی در یک حوزه اصلی.'),
28605
+ title: M$11('Director General', 'مدیرکل'),
28606
+ description: M$11('Owns strategic direction and cross-functional alignment for a major domain.', 'مالک جهت‌گیری راهبردی و هم‌راستاسازی بین‌بخشی در یک حوزه اصلی.'),
28602
28607
  level: 8,
28603
28608
  },
28604
28609
  {
28605
28610
  id: AXPDataGenerator.uuid(),
28606
- title: M$10('Vice President', 'معاونت سازمان'),
28607
- description: M$10('Executive role accountable for strategic outcomes across several domains.', 'نقش اجرایی مسئول نتایج راهبردی در چندین حوزه سازمانی.'),
28611
+ title: M$11('Vice President', 'معاونت سازمان'),
28612
+ description: M$11('Executive role accountable for strategic outcomes across several domains.', 'نقش اجرایی مسئول نتایج راهبردی در چندین حوزه سازمانی.'),
28608
28613
  level: 9,
28609
28614
  },
28610
28615
  {
28611
28616
  id: AXPDataGenerator.uuid(),
28612
- title: M$10('Chief Executive Officer', 'مدیرعامل'),
28613
- description: M$10('Top executive authority responsible for overall organizational strategy and performance.', 'بالاترین مقام اجرایی مسئول راهبرد کلان و عملکرد کلی سازمان.'),
28617
+ title: M$11('Chief Executive Officer', 'مدیرعامل'),
28618
+ description: M$11('Top executive authority responsible for overall organizational strategy and performance.', 'بالاترین مقام اجرایی مسئول راهبرد کلان و عملکرد کلی سازمان.'),
28614
28619
  level: 10,
28615
28620
  },
28616
28621
  ];
28617
28622
 
28618
- const M$$ = createMultiLanguageString;
28623
+ const M$10 = createMultiLanguageString;
28619
28624
  const organizationManagementResponsibilityLevelMocks = [
28620
28625
  {
28621
28626
  id: AXPDataGenerator.uuid(),
28622
- title: M$$('Not Involved', 'بدون دخالت'),
28627
+ title: M$10('Not Involved', 'بدون دخالت'),
28623
28628
  level: 1,
28624
- description: M$$('No responsibility or involvement in this area.', 'بدون مسئولیت یا مشارکت در این حوزه.'),
28629
+ description: M$10('No responsibility or involvement in this area.', 'بدون مسئولیت یا مشارکت در این حوزه.'),
28625
28630
  },
28626
28631
  {
28627
28632
  id: AXPDataGenerator.uuid(),
28628
- title: M$$('Informed', 'مطلع‌شونده'),
28633
+ title: M$10('Informed', 'مطلع‌شونده'),
28629
28634
  level: 2,
28630
- description: M$$('Kept in the loop and receives updates, but has no active responsibility.', 'در جریان قرار می‌گیرد اما مسئولیت اجرایی ندارد.'),
28635
+ description: M$10('Kept in the loop and receives updates, but has no active responsibility.', 'در جریان قرار می‌گیرد اما مسئولیت اجرایی ندارد.'),
28631
28636
  },
28632
28637
  {
28633
28638
  id: AXPDataGenerator.uuid(),
28634
- title: M$$('Consulted', 'مشاور'),
28639
+ title: M$10('Consulted', 'مشاور'),
28635
28640
  level: 3,
28636
- description: M$$('Provides input and expertise when needed, but does not execute.', 'در صورت نیاز ورودی و تخصص می‌دهد اما اجرا نمی‌کند.'),
28641
+ description: M$10('Provides input and expertise when needed, but does not execute.', 'در صورت نیاز ورودی و تخصص می‌دهد اما اجرا نمی‌کند.'),
28637
28642
  },
28638
28643
  {
28639
28644
  id: AXPDataGenerator.uuid(),
28640
- title: M$$('Responsible', 'مسئول اجرا'),
28645
+ title: M$10('Responsible', 'مسئول اجرا'),
28641
28646
  level: 4,
28642
- description: M$$('Executes the work and has direct responsibility for completion.', 'کار را اجرا می‌کند و مسئولیت مستقیم تکمیل دارد.'),
28647
+ description: M$10('Executes the work and has direct responsibility for completion.', 'کار را اجرا می‌کند و مسئولیت مستقیم تکمیل دارد.'),
28643
28648
  },
28644
28649
  {
28645
28650
  id: AXPDataGenerator.uuid(),
28646
- title: M$$('Accountable', 'پاسخ‌گو'),
28651
+ title: M$10('Accountable', 'پاسخ‌گو'),
28647
28652
  level: 5,
28648
- description: M$$('Owns the outcome and is answerable for the results.', 'مالک نتیجه است و در قبال نتایج پاسخ‌گوست.'),
28653
+ description: M$10('Owns the outcome and is answerable for the results.', 'مالک نتیجه است و در قبال نتایج پاسخ‌گوست.'),
28649
28654
  },
28650
28655
  {
28651
28656
  id: AXPDataGenerator.uuid(),
28652
- title: M$$('Lead Accountable', 'مسئول اصلی'),
28657
+ title: M$10('Lead Accountable', 'مسئول اصلی'),
28653
28658
  level: 6,
28654
- description: M$$('Primary owner with authority to make decisions and delegate work.', 'مالک اصلی با اختیار تصمیم‌گیری و تفویض کار.'),
28659
+ description: M$10('Primary owner with authority to make decisions and delegate work.', 'مالک اصلی با اختیار تصمیم‌گیری و تفویض کار.'),
28655
28660
  },
28656
28661
  {
28657
28662
  id: AXPDataGenerator.uuid(),
28658
- title: M$$('Ultimate Accountable', 'مسئول نهایی'),
28663
+ title: M$10('Ultimate Accountable', 'مسئول نهایی'),
28659
28664
  level: 7,
28660
- description: M$$('Final decision-maker with ultimate authority and full ownership.', 'تصمیم‌گیر نهایی با اختیار کامل و مالکیت مطلق.'),
28665
+ description: M$10('Final decision-maker with ultimate authority and full ownership.', 'تصمیم‌گیر نهایی با اختیار کامل و مالکیت مطلق.'),
28661
28666
  },
28662
28667
  ];
28663
28668
 
28664
- const M$_ = createMultiLanguageString;
28669
+ const M$$ = createMultiLanguageString;
28665
28670
  /** English category keys → id (stable lookup after localized titles). */
28666
28671
  const RESPONSIBILITY_CATEGORY_KEY_TO_ID = {};
28667
28672
  //#region ---- Responsibility category i18n (seed) ----
@@ -28738,8 +28743,8 @@ function generateResponsibilityCategories() {
28738
28743
  const de = descriptionMap[key] ?? '';
28739
28744
  categories.push({
28740
28745
  id,
28741
- title: M$_(key, rootTitleFa[key] ?? key),
28742
- description: M$_(de, RESPONSIBILITY_ROOT_CATEGORY_DESCRIPTION_FA[key] ?? de),
28746
+ title: M$$(key, rootTitleFa[key] ?? key),
28747
+ description: M$$(de, RESPONSIBILITY_ROOT_CATEGORY_DESCRIPTION_FA[key] ?? de),
28743
28748
  childrenCount: 0,
28744
28749
  });
28745
28750
  });
@@ -28781,8 +28786,8 @@ function generateResponsibilityCategories() {
28781
28786
  const de = descriptionMap[key] ?? '';
28782
28787
  categories.push({
28783
28788
  id,
28784
- title: M$_(key, RESPONSIBILITY_CHILD_CATEGORY_TITLE_FA[key] ?? key),
28785
- description: M$_(de, RESPONSIBILITY_CHILD_CATEGORY_DESCRIPTION_FA[key] ?? de),
28789
+ title: M$$(key, RESPONSIBILITY_CHILD_CATEGORY_TITLE_FA[key] ?? key),
28790
+ description: M$$(de, RESPONSIBILITY_CHILD_CATEGORY_DESCRIPTION_FA[key] ?? de),
28786
28791
  parentId,
28787
28792
  childrenCount: 0,
28788
28793
  });
@@ -28800,7 +28805,7 @@ function responsibilityCategoryRef(key) {
28800
28805
  }
28801
28806
  /** Multi-language title + description for a responsibility seed row (en retained for lookups). */
28802
28807
  function responsibilityMl(titleEn, titleFa, descEn, descFa) {
28803
- return { title: M$_(titleEn, titleFa), description: M$_(descEn, descFa) };
28808
+ return { title: M$$(titleEn, titleFa), description: M$$(descEn, descFa) };
28804
28809
  }
28805
28810
  const RESPONSIBILITIES_MOCK = [
28806
28811
  // Manufacturing Responsibilities
@@ -29056,7 +29061,7 @@ const RESPONSIBILITIES_MOCK = [
29056
29061
  },
29057
29062
  ];
29058
29063
 
29059
- const M$Z = createMultiLanguageString;
29064
+ const M$_ = createMultiLanguageString;
29060
29065
  //#region ---- Job definition category i18n (seed) ----
29061
29066
  const JOB_DEFINITION_ROOT_CATEGORY_TITLE_FA = {
29062
29067
  'Manufacturing Leadership': 'رهبری تولید',
@@ -29179,8 +29184,8 @@ function generateJobDefinitionCategories() {
29179
29184
  const de = descriptionMap[key] ?? '';
29180
29185
  categories.push({
29181
29186
  id,
29182
- title: M$Z(key, JOB_DEFINITION_ROOT_CATEGORY_TITLE_FA[key] ?? key),
29183
- description: M$Z(de, JOB_DEFINITION_ROOT_CATEGORY_DESCRIPTION_FA[key] ?? de),
29187
+ title: M$_(key, JOB_DEFINITION_ROOT_CATEGORY_TITLE_FA[key] ?? key),
29188
+ description: M$_(de, JOB_DEFINITION_ROOT_CATEGORY_DESCRIPTION_FA[key] ?? de),
29184
29189
  childrenCount: 0,
29185
29190
  });
29186
29191
  });
@@ -29234,8 +29239,8 @@ function generateJobDefinitionCategories() {
29234
29239
  const de = descriptionMap[key] ?? '';
29235
29240
  categories.push({
29236
29241
  id,
29237
- title: M$Z(key, JOB_DEFINITION_CHILD_CATEGORY_TITLE_FA[key] ?? key),
29238
- description: M$Z(de, JOB_DEFINITION_CHILD_CATEGORY_DESCRIPTION_FA[key] ?? de),
29242
+ title: M$_(key, JOB_DEFINITION_CHILD_CATEGORY_TITLE_FA[key] ?? key),
29243
+ description: M$_(de, JOB_DEFINITION_CHILD_CATEGORY_DESCRIPTION_FA[key] ?? de),
29239
29244
  parentId,
29240
29245
  childrenCount: 0,
29241
29246
  });
@@ -29461,8 +29466,8 @@ function generateJobDefinitions() {
29461
29466
  'Professional job definition with specific responsibilities and requirements.';
29462
29467
  jobDefinitions.push({
29463
29468
  id: AXPDataGenerator.uuid(),
29464
- title: M$Z(title, JOB_DEFINITION_CHILD_CATEGORY_TITLE_FA[title] ?? title),
29465
- description: M$Z(desc, JOB_DEFINITION_ENTITY_DESCRIPTION_FA[title] ?? desc),
29469
+ title: M$_(title, JOB_DEFINITION_CHILD_CATEGORY_TITLE_FA[title] ?? title),
29470
+ description: M$_(desc, JOB_DEFINITION_ENTITY_DESCRIPTION_FA[title] ?? desc),
29466
29471
  categoryIds: [parentObj.id],
29467
29472
  categories: [{ id: parentObj.id, title: parentObj.title }],
29468
29473
  responsibilityLevelIds,
@@ -29817,7 +29822,7 @@ async function axcSyncAllEmployeeDenormalizedOrgFields(storage, orgRoot, hcmRoot
29817
29822
  }
29818
29823
  //#endregion
29819
29824
 
29820
- const M$Y = createMultiLanguageString;
29825
+ const M$Z = createMultiLanguageString;
29821
29826
  const en = (s) => resolveMultiLanguageString(s, 'en-US');
29822
29827
  /** English job title → Persian for {@link createMultiLanguageString}. */
29823
29828
  const POSITION_TITLE_FA = {
@@ -29878,7 +29883,7 @@ const POSITION_TITLE_FA = {
29878
29883
  'HSE Manager': 'مدیر HSE',
29879
29884
  };
29880
29885
  function positionTitleMl(titleEn) {
29881
- return M$Y(titleEn, POSITION_TITLE_FA[titleEn] ?? titleEn);
29886
+ return M$Z(titleEn, POSITION_TITLE_FA[titleEn] ?? titleEn);
29882
29887
  }
29883
29888
  function generatePositionsCategory() {
29884
29889
  const categories = [];
@@ -29924,7 +29929,7 @@ function generatePositionsCategory() {
29924
29929
  roots.forEach(({ en: tEn, fa: tFa, enDesc, faDesc }) => {
29925
29930
  const id = AXPDataGenerator.uuid();
29926
29931
  ids.set(tEn, id);
29927
- categories.push({ id, title: M$Y(tEn, tFa), description: M$Y(enDesc, faDesc), childrenCount: 0 });
29932
+ categories.push({ id, title: M$Z(tEn, tFa), description: M$Z(enDesc, faDesc), childrenCount: 0 });
29928
29933
  });
29929
29934
  const children = [
29930
29935
  {
@@ -30077,8 +30082,8 @@ function generatePositionsCategory() {
30077
30082
  ids.set(tEn, id);
30078
30083
  categories.push({
30079
30084
  id,
30080
- title: M$Y(tEn, tFa),
30081
- description: M$Y(enDesc, faDesc),
30085
+ title: M$Z(tEn, tFa),
30086
+ description: M$Z(enDesc, faDesc),
30082
30087
  parentId,
30083
30088
  childrenCount: 0,
30084
30089
  });
@@ -30091,63 +30096,63 @@ function generatePositionsCategory() {
30091
30096
  }
30092
30097
  const POSITIONS_CATEGORY_MOCK = generatePositionsCategory();
30093
30098
  const POSITION_DESCRIPTIONS = {
30094
- 'Junior Frontend Engineer': M$Y('Entry-level frontend developer responsible for building user interfaces using HTML, CSS, and JavaScript frameworks. Focuses on learning best practices and contributing to team projects.', 'توسعه‌دهنده فرانت‌اند سطح ورودی؛ ساخت رابط کاربری با HTML، CSS و فریم‌ورک‌های جاوااسکریپت و یادگیری بهترین شیوه‌ها.'),
30095
- 'Frontend Engineer': M$Y('Mid-level frontend developer who builds responsive web applications, implements UI/UX designs, and collaborates with design and backend teams.', 'مهندس فرانت‌اند میانی؛ ساخت وب‌اپلیکیشن‌های واکنش‌گرا و همکاری با تیم طراحی و بک‌اند.'),
30096
- 'Senior Frontend Engineer': M$Y('Experienced frontend developer who leads technical decisions, mentors junior developers, and architects scalable frontend solutions.', 'مهندس ارشد فرانت‌اند؛ تصمیمات فنی، منتورینگ و معماری راه‌حل‌های مقیاس‌پذیر.'),
30097
- 'Frontend Architect': M$Y('Senior technical leader responsible for frontend architecture decisions, performance optimization, and setting technical standards for the frontend team.', 'رهبر فنی معماری فرانت‌اند، بهینه‌سازی عملکرد و استانداردهای فنی تیم.'),
30098
- 'Junior Backend Engineer': M$Y('Entry-level backend developer focused on building server-side logic, APIs, and database interactions. Learns backend technologies and best practices.', 'مهندس بک‌اند جونیور؛ منطق سمت سرور، API و پایگاه داده.'),
30099
- 'Backend Engineer': M$Y('Mid-level backend developer who designs and implements server-side applications, APIs, and database schemas.', 'مهندس بک‌اند میانی؛ طراحی و پیاده‌سازی اپلیکیشن سمت سرور و API.'),
30100
- 'Senior Backend Engineer': M$Y('Experienced backend developer who leads technical decisions, optimizes system performance, and mentors junior developers.', 'مهندس ارشد بک‌اند؛ بهینه‌سازی عملکرد و رهبری فنی.'),
30101
- 'Backend Architect': M$Y('Senior technical leader responsible for backend architecture, system design, and technical strategy for server-side systems.', 'معمار بک‌اند؛ طراحی سیستم و استراتژی فنی سمت سرور.'),
30102
- 'Junior Mobile Developer': M$Y('Entry-level mobile developer focused on building native or cross-platform mobile applications. Learns mobile development frameworks and best practices.', 'توسعه‌دهنده موبایل جونیور؛ اپلیکیشن بومی یا کراس‌پلتفرم.'),
30103
- 'Mobile Developer': M$Y('Mid-level mobile developer who creates mobile apps, implements features, and ensures app performance and user experience.', 'توسعه‌دهنده موبایل میانی؛ پیاده‌سازی ویژگی‌ها و تجربه کاربری.'),
30104
- 'Senior Mobile Developer': M$Y('Experienced mobile developer who leads mobile development initiatives, optimizes app performance, and mentors junior developers.', 'توسعه‌دهنده ارشد موبایل؛ رهبری فنی و بهینه‌سازی.'),
30105
- 'Mobile Architect': M$Y('Senior technical leader responsible for mobile architecture decisions, platform strategy, and technical standards for mobile development.', 'معمار موبایل؛ استراتژی پلتفرم و استانداردها.'),
30106
- 'QA Analyst': M$Y('Entry-level quality assurance professional who executes test plans, reports bugs, and ensures software quality through systematic testing.', 'تحلیلگر QA؛ اجرای طرح تست و گزارش باگ.'),
30107
- 'QA Engineer': M$Y('Mid-level QA professional who designs test strategies, automates testing processes, and collaborates with development teams.', 'مهندس QA؛ استراتژی تست و اتوماسیون.'),
30108
- 'Senior QA Engineer': M$Y('Experienced QA professional who leads testing initiatives, implements quality processes, and mentors junior QA team members.', 'مهندس ارشد QA؛ فرآیندهای کیفیت و منتورینگ.'),
30109
- 'QA Manager': M$Y('Senior leader responsible for managing the QA team, establishing quality standards, and ensuring overall software quality.', 'مدیر QA؛ استانداردها و کیفیت نرم‌افزار.'),
30110
- 'Engineering Team Lead': M$Y('Technical leader who manages a small engineering team, provides technical guidance, and ensures project delivery.', 'لید فنی تیم کوچک مهندسی و تحویل پروژه.'),
30111
- 'Engineering Manager': M$Y('People manager responsible for team development, project planning, and technical decision-making for engineering teams.', 'مدیر مهندسی؛ توسعه تیم و برنامه‌ریزی.'),
30112
- 'Director of Engineering': M$Y('Senior leader who manages multiple engineering teams, sets technical strategy, and drives engineering excellence.', 'مدیر ارشد مهندسی؛ چند تیم و استراتژی فنی.'),
30113
- 'VP of Engineering': M$Y('Executive leader responsible for overall engineering strategy, team growth, and technical direction across the organization.', 'معاون مهندسی؛ استراتژی و جهت فنی سازمان.'),
30114
- 'Associate Product Manager': M$Y('Entry-level product professional who supports product development, conducts research, and assists with product strategy.', 'همکار مدیر محصول؛ پشتیبانی از توسعه و تحقیق.'),
30115
- 'Product Manager': M$Y('Mid-level product professional who defines product vision, prioritizes features, and collaborates with cross-functional teams.', 'مدیر محصول؛ چشم‌انداز و اولویت‌بندی ویژگی‌ها.'),
30116
- 'Senior Product Manager': M$Y('Experienced product professional who leads product strategy, mentors junior PMs, and drives product success.', 'مدیر ارشد محصول؛ استراتژی و منتورینگ.'),
30117
- 'Director of Product': M$Y('Senior leader responsible for product portfolio strategy, team leadership, and product vision across multiple products.', 'مدیر ارشد محصول؛ پرتفوی و چشم‌انداز چند محصول.'),
30118
- 'UX Designer': M$Y('Design professional focused on user experience research, user flows, and creating intuitive user interfaces.', 'طراح UX؛ تحقیق کاربر و جریان‌های تعاملی.'),
30119
- 'UI Designer': M$Y('Visual designer who creates user interface designs, design systems, and ensures visual consistency across products.', 'طراح UI؛ سیستم طراحی و یکپارچگی بصری.'),
30120
- 'Senior UX Designer': M$Y('Experienced UX professional who leads design initiatives, mentors junior designers, and drives user experience strategy.', 'طراح ارشد UX؛ رهبری طرح‌های طراحی.'),
30121
- 'UX Design Manager': M$Y('Senior leader responsible for managing the design team, establishing design processes, and ensuring design quality.', 'مدیر طراحی UX؛ فرآیندها و کیفیت طراحی.'),
30122
- 'IT Support Specialist': M$Y('Entry-level IT professional who provides technical support, troubleshoots issues, and maintains IT systems.', 'کارشناس پشتیبانی IT؛ عیب‌یابی و نگهداری.'),
30123
- 'Systems Administrator': M$Y('Mid-level IT professional who manages server infrastructure, implements security measures, and ensures system reliability.', 'مدیر سیستم؛ زیرساخت سرور و امنیت.'),
30124
- 'Sales Associate': M$Y('Entry-level sales professional who supports sales activities, qualifies leads, and assists with customer relationships.', 'همکار فروش؛ سرنخ و ارتباط با مشتری.'),
30125
- 'Account Executive': M$Y('Mid-level sales professional who manages customer accounts, drives sales growth, and builds client relationships.', 'مسئول حساب؛ رشد فروش و روابط مشتری.'),
30126
- 'Sales Manager': M$Y('Senior sales professional who leads sales teams, develops sales strategies, and drives revenue growth.', 'مدیر فروش؛ تیم و استراتژی فروش.'),
30127
- 'VP of Sales': M$Y('Executive leader responsible for overall sales strategy, team leadership, and revenue generation across the organization.', 'معاون فروش؛ استراتژی و درآمد.'),
30128
- CTO: M$Y('Chief Technology Officer responsible for technology strategy, innovation, and technical leadership across the organization.', 'مدیر ارشد فناوری؛ استراتژی و نوآوری فنی.'),
30129
- CEO: M$Y('Chief Executive Officer responsible for overall company strategy, leadership, and business success.', 'مدیرعامل؛ استراتژی و رهبری کسب‌وکار.'),
30130
- CFO: M$Y('Chief Financial Officer responsible for financial strategy, planning, and financial operations.', 'مدیر ارشد مالی؛ برنامه‌ریزی و عملیات مالی.'),
30131
- COO: M$Y('Chief Operating Officer responsible for operational excellence, process optimization, and day-to-day business operations.', 'مدیر ارشد عملیات؛ بهینه‌سازی فرآیندها.'),
30132
- 'DevOps Engineer': M$Y('Mid-level DevOps professional who automates deployment processes, manages infrastructure, and ensures system reliability.', 'مهندس دوآپس؛ اتوماسیون استقرار و زیرساخت.'),
30133
- 'Senior DevOps Engineer': M$Y('Experienced DevOps professional who leads infrastructure initiatives, optimizes deployment processes, and mentors junior team members.', 'مهندس ارشد دوآپس؛ رهبری زیرساخت.'),
30134
- 'DevOps Manager': M$Y('Senior leader responsible for managing DevOps teams, establishing best practices, and driving operational excellence.', 'مدیر دوآپس؛ بهترین شیوه‌ها و عملیات.'),
30135
- 'Director of DevOps': M$Y('Senior leader responsible for DevOps strategy, infrastructure planning, and technical leadership for operations teams.', 'مدیر ارشد دوآپس؛ استراتژی و برنامه زیرساخت.'),
30136
- 'Production Supervisor': M$Y('Leads production lines and teams, manages shift performance, and ensures production targets and quality standards are met.', 'سرپرست خط تولید؛ اهداف تولید و استانداردهای کیفیت.'),
30137
- 'Maintenance Technician': M$Y('Executes routine and corrective maintenance tasks to ensure equipment uptime.', 'تکنسین نگهداری؛ تعمیرات روزمره و اصلاحی.'),
30138
- 'Maintenance Engineer': M$Y('Plans maintenance strategies, analyzes failures, and drives reliability improvements.', 'مهندس نگهداری؛ استراتژی و قابلیت اطمینان.'),
30139
- 'Quality Inspector': M$Y('Performs incoming, in-process, and final inspections to ensure product conformance.', 'بازرس کیفیت؛ بازرسی ورودی، میانی و نهایی.'),
30140
- 'Quality Engineer': M$Y('Develops control plans, handles nonconformances, and leads continuous improvement initiatives.', 'مهندس کیفیت؛ طرح کنترل و بهبود مستمر.'),
30141
- 'Procurement Specialist': M$Y('Sources materials, negotiates contracts, and manages purchase orders.', 'کارشناس تدارکات؛ منبع‌یابی و قرارداد.'),
30142
- 'Warehouse Associate': M$Y('Handles receiving, storage, picking, packing, and shipping operations.', 'همکار انبار؛ دریافت، انبارداری و ارسال.'),
30143
- 'Warehouse Supervisor': M$Y('Oversees warehouse staff and processes, ensuring accuracy and on-time shipments.', 'سرپرست انبار؛ دقت و به‌موقع بودن ارسال.'),
30144
- 'Production Planner': M$Y('Creates production schedules, coordinates materials and capacity, and monitors adherence.', 'برنامه‌ریز تولید؛ زمان‌بندی و ظرفیت.'),
30145
- 'HSE Officer': M$Y('Professional supporting health and safety initiatives, audits, and safety training across operations.', 'مسئول HSE؛ ممیزی و آموزش ایمنی.'),
30146
- 'Safety Officer': M$Y('Specialist enforcing safety standards, conducting inspections, and coordinating incident investigations.', 'مسئول ایمنی؛ استانداردها و بازرسی.'),
30147
- 'Environmental Specialist': M$Y('Professional overseeing environmental compliance, waste management, and sustainability reporting.', 'کارشناس محیط زیست؛ انطباق و گزارش پایداری.'),
30148
- 'HSE Manager': M$Y('Leader managing HSE programs, regulatory compliance, and continuous improvement in safety performance.', 'مدیر HSE؛ برنامه‌ها و انطباق مقررات.'),
30099
+ 'Junior Frontend Engineer': M$Z('Entry-level frontend developer responsible for building user interfaces using HTML, CSS, and JavaScript frameworks. Focuses on learning best practices and contributing to team projects.', 'توسعه‌دهنده فرانت‌اند سطح ورودی؛ ساخت رابط کاربری با HTML، CSS و فریم‌ورک‌های جاوااسکریپت و یادگیری بهترین شیوه‌ها.'),
30100
+ 'Frontend Engineer': M$Z('Mid-level frontend developer who builds responsive web applications, implements UI/UX designs, and collaborates with design and backend teams.', 'مهندس فرانت‌اند میانی؛ ساخت وب‌اپلیکیشن‌های واکنش‌گرا و همکاری با تیم طراحی و بک‌اند.'),
30101
+ 'Senior Frontend Engineer': M$Z('Experienced frontend developer who leads technical decisions, mentors junior developers, and architects scalable frontend solutions.', 'مهندس ارشد فرانت‌اند؛ تصمیمات فنی، منتورینگ و معماری راه‌حل‌های مقیاس‌پذیر.'),
30102
+ 'Frontend Architect': M$Z('Senior technical leader responsible for frontend architecture decisions, performance optimization, and setting technical standards for the frontend team.', 'رهبر فنی معماری فرانت‌اند، بهینه‌سازی عملکرد و استانداردهای فنی تیم.'),
30103
+ 'Junior Backend Engineer': M$Z('Entry-level backend developer focused on building server-side logic, APIs, and database interactions. Learns backend technologies and best practices.', 'مهندس بک‌اند جونیور؛ منطق سمت سرور، API و پایگاه داده.'),
30104
+ 'Backend Engineer': M$Z('Mid-level backend developer who designs and implements server-side applications, APIs, and database schemas.', 'مهندس بک‌اند میانی؛ طراحی و پیاده‌سازی اپلیکیشن سمت سرور و API.'),
30105
+ 'Senior Backend Engineer': M$Z('Experienced backend developer who leads technical decisions, optimizes system performance, and mentors junior developers.', 'مهندس ارشد بک‌اند؛ بهینه‌سازی عملکرد و رهبری فنی.'),
30106
+ 'Backend Architect': M$Z('Senior technical leader responsible for backend architecture, system design, and technical strategy for server-side systems.', 'معمار بک‌اند؛ طراحی سیستم و استراتژی فنی سمت سرور.'),
30107
+ 'Junior Mobile Developer': M$Z('Entry-level mobile developer focused on building native or cross-platform mobile applications. Learns mobile development frameworks and best practices.', 'توسعه‌دهنده موبایل جونیور؛ اپلیکیشن بومی یا کراس‌پلتفرم.'),
30108
+ 'Mobile Developer': M$Z('Mid-level mobile developer who creates mobile apps, implements features, and ensures app performance and user experience.', 'توسعه‌دهنده موبایل میانی؛ پیاده‌سازی ویژگی‌ها و تجربه کاربری.'),
30109
+ 'Senior Mobile Developer': M$Z('Experienced mobile developer who leads mobile development initiatives, optimizes app performance, and mentors junior developers.', 'توسعه‌دهنده ارشد موبایل؛ رهبری فنی و بهینه‌سازی.'),
30110
+ 'Mobile Architect': M$Z('Senior technical leader responsible for mobile architecture decisions, platform strategy, and technical standards for mobile development.', 'معمار موبایل؛ استراتژی پلتفرم و استانداردها.'),
30111
+ 'QA Analyst': M$Z('Entry-level quality assurance professional who executes test plans, reports bugs, and ensures software quality through systematic testing.', 'تحلیلگر QA؛ اجرای طرح تست و گزارش باگ.'),
30112
+ 'QA Engineer': M$Z('Mid-level QA professional who designs test strategies, automates testing processes, and collaborates with development teams.', 'مهندس QA؛ استراتژی تست و اتوماسیون.'),
30113
+ 'Senior QA Engineer': M$Z('Experienced QA professional who leads testing initiatives, implements quality processes, and mentors junior QA team members.', 'مهندس ارشد QA؛ فرآیندهای کیفیت و منتورینگ.'),
30114
+ 'QA Manager': M$Z('Senior leader responsible for managing the QA team, establishing quality standards, and ensuring overall software quality.', 'مدیر QA؛ استانداردها و کیفیت نرم‌افزار.'),
30115
+ 'Engineering Team Lead': M$Z('Technical leader who manages a small engineering team, provides technical guidance, and ensures project delivery.', 'لید فنی تیم کوچک مهندسی و تحویل پروژه.'),
30116
+ 'Engineering Manager': M$Z('People manager responsible for team development, project planning, and technical decision-making for engineering teams.', 'مدیر مهندسی؛ توسعه تیم و برنامه‌ریزی.'),
30117
+ 'Director of Engineering': M$Z('Senior leader who manages multiple engineering teams, sets technical strategy, and drives engineering excellence.', 'مدیر ارشد مهندسی؛ چند تیم و استراتژی فنی.'),
30118
+ 'VP of Engineering': M$Z('Executive leader responsible for overall engineering strategy, team growth, and technical direction across the organization.', 'معاون مهندسی؛ استراتژی و جهت فنی سازمان.'),
30119
+ 'Associate Product Manager': M$Z('Entry-level product professional who supports product development, conducts research, and assists with product strategy.', 'همکار مدیر محصول؛ پشتیبانی از توسعه و تحقیق.'),
30120
+ 'Product Manager': M$Z('Mid-level product professional who defines product vision, prioritizes features, and collaborates with cross-functional teams.', 'مدیر محصول؛ چشم‌انداز و اولویت‌بندی ویژگی‌ها.'),
30121
+ 'Senior Product Manager': M$Z('Experienced product professional who leads product strategy, mentors junior PMs, and drives product success.', 'مدیر ارشد محصول؛ استراتژی و منتورینگ.'),
30122
+ 'Director of Product': M$Z('Senior leader responsible for product portfolio strategy, team leadership, and product vision across multiple products.', 'مدیر ارشد محصول؛ پرتفوی و چشم‌انداز چند محصول.'),
30123
+ 'UX Designer': M$Z('Design professional focused on user experience research, user flows, and creating intuitive user interfaces.', 'طراح UX؛ تحقیق کاربر و جریان‌های تعاملی.'),
30124
+ 'UI Designer': M$Z('Visual designer who creates user interface designs, design systems, and ensures visual consistency across products.', 'طراح UI؛ سیستم طراحی و یکپارچگی بصری.'),
30125
+ 'Senior UX Designer': M$Z('Experienced UX professional who leads design initiatives, mentors junior designers, and drives user experience strategy.', 'طراح ارشد UX؛ رهبری طرح‌های طراحی.'),
30126
+ 'UX Design Manager': M$Z('Senior leader responsible for managing the design team, establishing design processes, and ensuring design quality.', 'مدیر طراحی UX؛ فرآیندها و کیفیت طراحی.'),
30127
+ 'IT Support Specialist': M$Z('Entry-level IT professional who provides technical support, troubleshoots issues, and maintains IT systems.', 'کارشناس پشتیبانی IT؛ عیب‌یابی و نگهداری.'),
30128
+ 'Systems Administrator': M$Z('Mid-level IT professional who manages server infrastructure, implements security measures, and ensures system reliability.', 'مدیر سیستم؛ زیرساخت سرور و امنیت.'),
30129
+ 'Sales Associate': M$Z('Entry-level sales professional who supports sales activities, qualifies leads, and assists with customer relationships.', 'همکار فروش؛ سرنخ و ارتباط با مشتری.'),
30130
+ 'Account Executive': M$Z('Mid-level sales professional who manages customer accounts, drives sales growth, and builds client relationships.', 'مسئول حساب؛ رشد فروش و روابط مشتری.'),
30131
+ 'Sales Manager': M$Z('Senior sales professional who leads sales teams, develops sales strategies, and drives revenue growth.', 'مدیر فروش؛ تیم و استراتژی فروش.'),
30132
+ 'VP of Sales': M$Z('Executive leader responsible for overall sales strategy, team leadership, and revenue generation across the organization.', 'معاون فروش؛ استراتژی و درآمد.'),
30133
+ CTO: M$Z('Chief Technology Officer responsible for technology strategy, innovation, and technical leadership across the organization.', 'مدیر ارشد فناوری؛ استراتژی و نوآوری فنی.'),
30134
+ CEO: M$Z('Chief Executive Officer responsible for overall company strategy, leadership, and business success.', 'مدیرعامل؛ استراتژی و رهبری کسب‌وکار.'),
30135
+ CFO: M$Z('Chief Financial Officer responsible for financial strategy, planning, and financial operations.', 'مدیر ارشد مالی؛ برنامه‌ریزی و عملیات مالی.'),
30136
+ COO: M$Z('Chief Operating Officer responsible for operational excellence, process optimization, and day-to-day business operations.', 'مدیر ارشد عملیات؛ بهینه‌سازی فرآیندها.'),
30137
+ 'DevOps Engineer': M$Z('Mid-level DevOps professional who automates deployment processes, manages infrastructure, and ensures system reliability.', 'مهندس دوآپس؛ اتوماسیون استقرار و زیرساخت.'),
30138
+ 'Senior DevOps Engineer': M$Z('Experienced DevOps professional who leads infrastructure initiatives, optimizes deployment processes, and mentors junior team members.', 'مهندس ارشد دوآپس؛ رهبری زیرساخت.'),
30139
+ 'DevOps Manager': M$Z('Senior leader responsible for managing DevOps teams, establishing best practices, and driving operational excellence.', 'مدیر دوآپس؛ بهترین شیوه‌ها و عملیات.'),
30140
+ 'Director of DevOps': M$Z('Senior leader responsible for DevOps strategy, infrastructure planning, and technical leadership for operations teams.', 'مدیر ارشد دوآپس؛ استراتژی و برنامه زیرساخت.'),
30141
+ 'Production Supervisor': M$Z('Leads production lines and teams, manages shift performance, and ensures production targets and quality standards are met.', 'سرپرست خط تولید؛ اهداف تولید و استانداردهای کیفیت.'),
30142
+ 'Maintenance Technician': M$Z('Executes routine and corrective maintenance tasks to ensure equipment uptime.', 'تکنسین نگهداری؛ تعمیرات روزمره و اصلاحی.'),
30143
+ 'Maintenance Engineer': M$Z('Plans maintenance strategies, analyzes failures, and drives reliability improvements.', 'مهندس نگهداری؛ استراتژی و قابلیت اطمینان.'),
30144
+ 'Quality Inspector': M$Z('Performs incoming, in-process, and final inspections to ensure product conformance.', 'بازرس کیفیت؛ بازرسی ورودی، میانی و نهایی.'),
30145
+ 'Quality Engineer': M$Z('Develops control plans, handles nonconformances, and leads continuous improvement initiatives.', 'مهندس کیفیت؛ طرح کنترل و بهبود مستمر.'),
30146
+ 'Procurement Specialist': M$Z('Sources materials, negotiates contracts, and manages purchase orders.', 'کارشناس تدارکات؛ منبع‌یابی و قرارداد.'),
30147
+ 'Warehouse Associate': M$Z('Handles receiving, storage, picking, packing, and shipping operations.', 'همکار انبار؛ دریافت، انبارداری و ارسال.'),
30148
+ 'Warehouse Supervisor': M$Z('Oversees warehouse staff and processes, ensuring accuracy and on-time shipments.', 'سرپرست انبار؛ دقت و به‌موقع بودن ارسال.'),
30149
+ 'Production Planner': M$Z('Creates production schedules, coordinates materials and capacity, and monitors adherence.', 'برنامه‌ریز تولید؛ زمان‌بندی و ظرفیت.'),
30150
+ 'HSE Officer': M$Z('Professional supporting health and safety initiatives, audits, and safety training across operations.', 'مسئول HSE؛ ممیزی و آموزش ایمنی.'),
30151
+ 'Safety Officer': M$Z('Specialist enforcing safety standards, conducting inspections, and coordinating incident investigations.', 'مسئول ایمنی؛ استانداردها و بازرسی.'),
30152
+ 'Environmental Specialist': M$Z('Professional overseeing environmental compliance, waste management, and sustainability reporting.', 'کارشناس محیط زیست؛ انطباق و گزارش پایداری.'),
30153
+ 'HSE Manager': M$Z('Leader managing HSE programs, regulatory compliance, and continuous improvement in safety performance.', 'مدیر HSE؛ برنامه‌ها و انطباق مقررات.'),
30149
30154
  };
30150
- const DEFAULT_POSITION_DESC = M$Y('Professional position with specific responsibilities and requirements.', 'موقعیت شغلی حرفه‌ای با مسئولیت‌ها و الزامات مشخص.');
30155
+ const DEFAULT_POSITION_DESC = M$Z('Professional position with specific responsibilities and requirements.', 'موقعیت شغلی حرفه‌ای با مسئولیت‌ها و الزامات مشخص.');
30151
30156
  function generatePositions() {
30152
30157
  const positions = [];
30153
30158
  const categories = POSITIONS_CATEGORY_MOCK;
@@ -30253,12 +30258,12 @@ const POSITIONS_MOCK = (() => {
30253
30258
  return positions;
30254
30259
  })();
30255
30260
 
30256
- const M$X = createMultiLanguageString;
30261
+ const M$Y = createMultiLanguageString;
30257
30262
  const uuid$m = AXPDataGenerator.uuid;
30258
30263
  const BUSINESS_UNIT_TYPES_MOCK = [
30259
30264
  {
30260
30265
  id: uuid$m(),
30261
- title: M$X('Division', 'بخش'),
30266
+ title: M$Y('Division', 'بخش'),
30262
30267
  name: 'division',
30263
30268
  isLocationBased: true,
30264
30269
  allowsDirectPositions: true,
@@ -30267,7 +30272,7 @@ const BUSINESS_UNIT_TYPES_MOCK = [
30267
30272
  },
30268
30273
  {
30269
30274
  id: uuid$m(),
30270
- title: M$X('Department', 'دپارتمان'),
30275
+ title: M$Y('Department', 'دپارتمان'),
30271
30276
  name: 'department',
30272
30277
  isLocationBased: false,
30273
30278
  allowsDirectPositions: true,
@@ -30276,7 +30281,7 @@ const BUSINESS_UNIT_TYPES_MOCK = [
30276
30281
  },
30277
30282
  {
30278
30283
  id: uuid$m(),
30279
- title: M$X('Branch', 'شعبه'),
30284
+ title: M$Y('Branch', 'شعبه'),
30280
30285
  name: 'branch',
30281
30286
  isLocationBased: true,
30282
30287
  allowsDirectPositions: false,
@@ -30522,7 +30527,7 @@ const BUSINESS_UNITS_MOCK = (() => {
30522
30527
  return items;
30523
30528
  })();
30524
30529
 
30525
- const M$W = createMultiLanguageString;
30530
+ const M$X = createMultiLanguageString;
30526
30531
  const educationLevelIds = {
30527
30532
  lessThanHighSchool: AXPDataGenerator.uuid(),
30528
30533
  highSchool: AXPDataGenerator.uuid(),
@@ -30535,42 +30540,42 @@ const educationLevelIds = {
30535
30540
  const educationLevelMocks = [
30536
30541
  {
30537
30542
  id: educationLevelIds.lessThanHighSchool,
30538
- title: M$W('Less than high school', 'زیر دیپلم'),
30539
- description: M$W('Education below high school completion', 'تحصیلات زیر پایان دبیرستان'),
30543
+ title: M$X('Less than high school', 'زیر دیپلم'),
30544
+ description: M$X('Education below high school completion', 'تحصیلات زیر پایان دبیرستان'),
30540
30545
  },
30541
30546
  {
30542
30547
  id: educationLevelIds.highSchool,
30543
- title: M$W('High school', 'دبیرستان'),
30544
- description: M$W('High school diploma or equivalent', 'دیپلم دبیرستان یا معادل'),
30548
+ title: M$X('High school', 'دبیرستان'),
30549
+ description: M$X('High school diploma or equivalent', 'دیپلم دبیرستان یا معادل'),
30545
30550
  },
30546
30551
  {
30547
30552
  id: educationLevelIds.bachelors,
30548
- title: M$W("Bachelor's degree", 'کارشناسی'),
30549
- description: M$W('Undergraduate university degree', 'مدرک کارشناسی دانشگاهی'),
30553
+ title: M$X("Bachelor's degree", 'کارشناسی'),
30554
+ description: M$X('Undergraduate university degree', 'مدرک کارشناسی دانشگاهی'),
30550
30555
  },
30551
30556
  {
30552
30557
  id: educationLevelIds.masters,
30553
- title: M$W("Master's degree", 'کارشناسی ارشد'),
30554
- description: M$W('Graduate university degree', 'مدرک تحصیلات تکمیلی'),
30558
+ title: M$X("Master's degree", 'کارشناسی ارشد'),
30559
+ description: M$X('Graduate university degree', 'مدرک تحصیلات تکمیلی'),
30555
30560
  },
30556
30561
  {
30557
30562
  id: educationLevelIds.doctorate,
30558
- title: M$W('Doctorate', 'دکتری'),
30559
- description: M$W('Doctoral or professional doctorate degree', 'دکتری تخصصی یا حرفه‌ای'),
30563
+ title: M$X('Doctorate', 'دکتری'),
30564
+ description: M$X('Doctoral or professional doctorate degree', 'دکتری تخصصی یا حرفه‌ای'),
30560
30565
  },
30561
30566
  {
30562
30567
  id: educationLevelIds.associates,
30563
- title: M$W('Associate degree', 'کاردانی'),
30564
- description: M$W('Two-year college degree', 'مدرک دو ساله دانشگاهی'),
30568
+ title: M$X('Associate degree', 'کاردانی'),
30569
+ description: M$X('Two-year college degree', 'مدرک دو ساله دانشگاهی'),
30565
30570
  },
30566
30571
  {
30567
30572
  id: educationLevelIds.vocational,
30568
- title: M$W('Vocational / Certificate', 'فنی‌حرفه‌ای / گواهینامه'),
30569
- description: M$W('Vocational training or certificate program', 'آموزش فنی یا دوره گواهینامه'),
30573
+ title: M$X('Vocational / Certificate', 'فنی‌حرفه‌ای / گواهینامه'),
30574
+ description: M$X('Vocational training or certificate program', 'آموزش فنی یا دوره گواهینامه'),
30570
30575
  },
30571
30576
  ];
30572
30577
 
30573
- const M$V = createMultiLanguageString;
30578
+ const M$W = createMultiLanguageString;
30574
30579
  const genderIds = {
30575
30580
  male: 'b3000001-0000-4000-8000-000000000001',
30576
30581
  female: 'b3000001-0000-4000-8000-000000000002',
@@ -30581,32 +30586,32 @@ const genderIds = {
30581
30586
  const genderMocks = [
30582
30587
  {
30583
30588
  id: genderIds.male,
30584
- title: M$V('Male', 'مرد'),
30585
- description: M$V('Male gender identity', 'هویت جنسیتی مرد'),
30589
+ title: M$W('Male', 'مرد'),
30590
+ description: M$W('Male gender identity', 'هویت جنسیتی مرد'),
30586
30591
  },
30587
30592
  {
30588
30593
  id: genderIds.female,
30589
- title: M$V('Female', 'زن'),
30590
- description: M$V('Female gender identity', 'هویت جنسیتی زن'),
30594
+ title: M$W('Female', 'زن'),
30595
+ description: M$W('Female gender identity', 'هویت جنسیتی زن'),
30591
30596
  },
30592
30597
  {
30593
30598
  id: genderIds.nonBinary,
30594
- title: M$V('Non-binary', 'غیردودویی'),
30595
- description: M$V('Non-binary gender identity', 'هویت جنسیتی غیردودویی'),
30599
+ title: M$W('Non-binary', 'غیردودویی'),
30600
+ description: M$W('Non-binary gender identity', 'هویت جنسیتی غیردودویی'),
30596
30601
  },
30597
30602
  {
30598
30603
  id: genderIds.other,
30599
- title: M$V('Other', 'سایر'),
30600
- description: M$V('Another gender identity', 'سایر هویت‌های جنسیتی'),
30604
+ title: M$W('Other', 'سایر'),
30605
+ description: M$W('Another gender identity', 'سایر هویت‌های جنسیتی'),
30601
30606
  },
30602
30607
  {
30603
30608
  id: genderIds.preferNotToSay,
30604
- title: M$V('Prefer not to say', 'ترجیح می‌دهم نگویم'),
30605
- description: M$V('Decline to answer', 'عدم تمایل به پاسخ'),
30609
+ title: M$W('Prefer not to say', 'ترجیح می‌دهم نگویم'),
30610
+ description: M$W('Decline to answer', 'عدم تمایل به پاسخ'),
30606
30611
  },
30607
30612
  ];
30608
30613
 
30609
- const M$U = createMultiLanguageString;
30614
+ const M$V = createMultiLanguageString;
30610
30615
  const maritalStatusIds = {
30611
30616
  single: 'b1000001-0000-4000-8000-000000000001',
30612
30617
  married: 'b1000001-0000-4000-8000-000000000002',
@@ -30618,37 +30623,37 @@ const maritalStatusIds = {
30618
30623
  const maritalStatusMocks = [
30619
30624
  {
30620
30625
  id: maritalStatusIds.single,
30621
- title: M$U('Single', 'مجرد'),
30622
- description: M$U('Not married', 'ازدواج نکرده'),
30626
+ title: M$V('Single', 'مجرد'),
30627
+ description: M$V('Not married', 'ازدواج نکرده'),
30623
30628
  },
30624
30629
  {
30625
30630
  id: maritalStatusIds.married,
30626
- title: M$U('Married', 'متأهل'),
30627
- description: M$U('Legally or socially married', 'متأهل به‌صورت رسمی یا عرفی'),
30631
+ title: M$V('Married', 'متأهل'),
30632
+ description: M$V('Legally or socially married', 'متأهل به‌صورت رسمی یا عرفی'),
30628
30633
  },
30629
30634
  {
30630
30635
  id: maritalStatusIds.divorced,
30631
- title: M$U('Divorced', 'مطلقه'),
30632
- description: M$U('Previously married and legally divorced', 'قبلاً ازدواج کرده و به‌طور رسمی جدا شده'),
30636
+ title: M$V('Divorced', 'مطلقه'),
30637
+ description: M$V('Previously married and legally divorced', 'قبلاً ازدواج کرده و به‌طور رسمی جدا شده'),
30633
30638
  },
30634
30639
  {
30635
30640
  id: maritalStatusIds.widowed,
30636
- title: M$U('Widowed', 'همسر فوت شده'),
30637
- description: M$U('Spouse deceased', 'همسر فوت کرده است'),
30641
+ title: M$V('Widowed', 'همسر فوت شده'),
30642
+ description: M$V('Spouse deceased', 'همسر فوت کرده است'),
30638
30643
  },
30639
30644
  {
30640
30645
  id: maritalStatusIds.separated,
30641
- title: M$U('Separated', 'جدا'),
30642
- description: M$U('Separated but not legally divorced', 'جداشده بدون طلاق رسمی'),
30646
+ title: M$V('Separated', 'جدا'),
30647
+ description: M$V('Separated but not legally divorced', 'جداشده بدون طلاق رسمی'),
30643
30648
  },
30644
30649
  {
30645
30650
  id: maritalStatusIds.domesticPartnership,
30646
- title: M$U('Domestic partnership', 'همزیستی مدنی'),
30647
- description: M$U('Registered domestic or civil partnership', 'شراکت مدنی یا هم‌بودی رسمی'),
30651
+ title: M$V('Domestic partnership', 'همزیستی مدنی'),
30652
+ description: M$V('Registered domestic or civil partnership', 'شراکت مدنی یا هم‌بودی رسمی'),
30648
30653
  },
30649
30654
  ];
30650
30655
 
30651
- const M$T = createMultiLanguageString;
30656
+ const M$U = createMultiLanguageString;
30652
30657
  const personTitleIds = {
30653
30658
  mr: 'b2000001-0000-4000-8000-000000000001',
30654
30659
  mrs: 'b2000001-0000-4000-8000-000000000002',
@@ -30662,43 +30667,43 @@ const personTitleIds = {
30662
30667
  const personTitleMocks = [
30663
30668
  {
30664
30669
  id: personTitleIds.mr,
30665
- title: M$T('Mr', 'آقا'),
30666
- description: M$T('Male salutation', 'عنوان رسمی مردان'),
30670
+ title: M$U('Mr', 'آقا'),
30671
+ description: M$U('Male salutation', 'عنوان رسمی مردان'),
30667
30672
  },
30668
30673
  {
30669
30674
  id: personTitleIds.mrs,
30670
- title: M$T('Mrs', 'خانم'),
30671
- description: M$T('Married or widowed woman', 'خانم (متأهل یا بیوه)'),
30675
+ title: M$U('Mrs', 'خانم'),
30676
+ description: M$U('Married or widowed woman', 'خانم (متأهل یا بیوه)'),
30672
30677
  },
30673
30678
  {
30674
30679
  id: personTitleIds.ms,
30675
- title: M$T('Ms', 'بانو'),
30676
- description: M$T('Gender-neutral title for women', 'عنوان بدون اشاره به وضعیت تأهل'),
30680
+ title: M$U('Ms', 'بانو'),
30681
+ description: M$U('Gender-neutral title for women', 'عنوان بدون اشاره به وضعیت تأهل'),
30677
30682
  },
30678
30683
  {
30679
30684
  id: personTitleIds.miss,
30680
- title: M$T('Miss', 'دوشیزه'),
30681
- description: M$T('Traditionally unmarried woman', 'سنتاً خانم مجرد'),
30685
+ title: M$U('Miss', 'دوشیزه'),
30686
+ description: M$U('Traditionally unmarried woman', 'سنتاً خانم مجرد'),
30682
30687
  },
30683
30688
  {
30684
30689
  id: personTitleIds.dr,
30685
- title: M$T('Dr', 'دکتر'),
30686
- description: M$T('Doctor (academic or medical)', 'دکتر (دانشگاهی یا پزشکی)'),
30690
+ title: M$U('Dr', 'دکتر'),
30691
+ description: M$U('Doctor (academic or medical)', 'دکتر (دانشگاهی یا پزشکی)'),
30687
30692
  },
30688
30693
  {
30689
30694
  id: personTitleIds.prof,
30690
- title: M$T('Prof', 'استاد'),
30691
- description: M$T('Professor', 'استاد دانشگاه'),
30695
+ title: M$U('Prof', 'استاد'),
30696
+ description: M$U('Professor', 'استاد دانشگاه'),
30692
30697
  },
30693
30698
  {
30694
30699
  id: personTitleIds.rev,
30695
- title: M$T('Rev', 'روحانی'),
30696
- description: M$T('Reverend or clergy', 'عنوان روحانی'),
30700
+ title: M$U('Rev', 'روحانی'),
30701
+ description: M$U('Reverend or clergy', 'عنوان روحانی'),
30697
30702
  },
30698
30703
  {
30699
30704
  id: personTitleIds.other,
30700
- title: M$T('Other', 'سایر'),
30701
- description: M$T('Other salutation', 'سایر عناوین'),
30705
+ title: M$U('Other', 'سایر'),
30706
+ description: M$U('Other salutation', 'سایر عناوین'),
30702
30707
  },
30703
30708
  ];
30704
30709
 
@@ -30710,6 +30715,10 @@ const personTitleMocks = [
30710
30715
  const PLATFORM_TENANT_ID = AXPDataGenerator.uuid();
30711
30716
  const TIMEPLICITY_TENANT_ID = AXPDataGenerator.uuid();
30712
30717
  const LASER_PLUMBING_TENANT_ID = AXPDataGenerator.uuid();
30718
+ /** MAGFA (مگفا) — Iran commerce tenant for conversation / AI / reports demo. */
30719
+ const MAGFA_TENANT_ID = AXPDataGenerator.uuid();
30720
+ /** @deprecated Use {@link MAGFA_TENANT_ID}. */
30721
+ const COLLABORATION_TENANT_ID = MAGFA_TENANT_ID;
30713
30722
  //#endregion
30714
30723
 
30715
30724
  //#region ---- Imports ----
@@ -30836,7 +30845,9 @@ const mockRoleDefinitions = [
30836
30845
  name: 'user',
30837
30846
  title: 'Regular User',
30838
30847
  description: 'Standard user with basic system access',
30839
- permissions: [],
30848
+ permissions: [
30849
+ AXMPermissionsKeys$4.Conversation.Management,
30850
+ ],
30840
30851
  ownershipInfo: {
30841
30852
  tenantId: TIMEPLICITY_TENANT_ID, // Timeplicity tenant
30842
30853
  },
@@ -30962,9 +30973,9 @@ const mockRoleDefinitions = [
30962
30973
  AXPSecurityManagementPermissionKeys.Role.Edit,
30963
30974
  AXPSecurityManagementPermissionKeys.Role.Delete,
30964
30975
  //
30965
- AXMPermissionsKeys$4.DocumentManagement.Management,
30966
- AXMPermissionsKeys$4.DocumentManagement.Driver.Management,
30967
- AXMPermissionsKeys$4.DocumentManagement.DocumentType.Management,
30976
+ AXMPermissionsKeys$5.DocumentManagement.Management,
30977
+ AXMPermissionsKeys$5.DocumentManagement.Driver.Management,
30978
+ AXMPermissionsKeys$5.DocumentManagement.DocumentType.Management,
30968
30979
  //
30969
30980
  AXMPermissionsKeys$2.DataManagement.MetaDataDefinition.Management,
30970
30981
  AXMPermissionsKeys$2.DataManagement.Tag.Management,
@@ -30972,9 +30983,11 @@ const mockRoleDefinitions = [
30972
30983
  AXMAssessmentManagementPermissionKeys.AssessmentManagement.Questionnaire.Management,
30973
30984
  AXMAssessmentManagementPermissionKeys.AssessmentManagement.QuestionBank,
30974
30985
  //
30975
- AXMPermissionsKeys$5.HumanCapitalManagement.Employee.Management,
30976
- AXMPermissionsKeys$5.HumanCapitalManagement.LeaveType.Management,
30977
- AXMPermissionsKeys$5.HumanCapitalManagement.LeaveRequest.Management,
30986
+ AXMPermissionsKeys$4.Conversation.Management,
30987
+ //
30988
+ AXMPermissionsKeys$6.HumanCapitalManagement.Employee.Management,
30989
+ AXMPermissionsKeys$6.HumanCapitalManagement.LeaveType.Management,
30990
+ AXMPermissionsKeys$6.HumanCapitalManagement.LeaveRequest.Management,
30978
30991
  //
30979
30992
  AXMSettingsManagementPermissionKeys.TenantSettings.Management,
30980
30993
  ],
@@ -30991,6 +31004,26 @@ const mockRoleDefinitions = [
30991
31004
  },
30992
31005
  },
30993
31006
  },
31007
+ {
31008
+ id: 'a0000001-0000-4000-a000-000000000099',
31009
+ name: 'conversation-only',
31010
+ title: 'Conversation Only',
31011
+ description: 'Conversation access only for MAGFA commerce (مگفا — تجارت)',
31012
+ permissions: [
31013
+ AXMPermissionsKeys$4.Conversation.Management,
31014
+ ],
31015
+ ownershipInfo: {
31016
+ tenantId: MAGFA_TENANT_ID,
31017
+ },
31018
+ auditInfo: {
31019
+ created: {
31020
+ at: new Date('2024-01-01T00:00:00Z'),
31021
+ },
31022
+ updated: {
31023
+ at: new Date('2024-01-01T00:00:00Z'),
31024
+ },
31025
+ },
31026
+ },
30994
31027
  ];
30995
31028
  //#endregion
30996
31029
 
@@ -31006,6 +31039,7 @@ const roleIdMap = {
31006
31039
  finance: mockRoleDefinitions.find((r) => r.name === 'finance')?.id || '',
31007
31040
  dev: mockRoleDefinitions.find((r) => r.name === 'dev')?.id || '',
31008
31041
  tenantAdministrator: mockRoleDefinitions.find((r) => r.name === 'tenant-administrator')?.id || '',
31042
+ conversationOnly: mockRoleDefinitions.find((r) => r.name === 'conversation-only')?.id || '',
31009
31043
  };
31010
31044
  // Helper function to get roles by IDs
31011
31045
  const getRolesByIds = (roleIds) => {
@@ -31038,6 +31072,7 @@ const userIds = {
31038
31072
  yukiTanaka: 'f0000001-0000-4000-a000-000000000012',
31039
31073
  rodJensen: 'f0000001-0000-4000-a000-000000000013',
31040
31074
  heidiThonig: 'f0000001-0000-4000-a000-000000000014',
31075
+ mohamadPourGhorban: 'f0000001-0000-4000-a000-000000000015',
31041
31076
  };
31042
31077
  const rawMockUsers = [
31043
31078
  {
@@ -31311,6 +31346,19 @@ const rawMockUsers = [
31311
31346
  tenantId: TIMEPLICITY_TENANT_ID, // Timeplicity tenant (primary tenant based on tenant-user assignment)
31312
31347
  },
31313
31348
  },
31349
+ {
31350
+ id: userIds.mohamadPourGhorban,
31351
+ username: 'mohamad.pour.ghorban',
31352
+ displayName: 'Mohammad Pour Ghorban',
31353
+ roleIds: [roleIdMap.conversationOnly],
31354
+ roles: getRolesByIds([roleIdMap.conversationOnly]),
31355
+ password: '123',
31356
+ accountState: AXPSystemStatusType.Active,
31357
+ accessState: AXMUserAccessState.Allowed,
31358
+ ownershipInfo: {
31359
+ tenantId: MAGFA_TENANT_ID,
31360
+ },
31361
+ },
31314
31362
  ];
31315
31363
  const mockUsers = rawMockUsers.map((u) => ({
31316
31364
  ...u,
@@ -31357,6 +31405,7 @@ const personIds = {
31357
31405
  admin: 'ddd51595-13ab-4580-9db5-3b13b233ddf17',
31358
31406
  rodJensen: 'ddd51595-13ab-4580-9db5-3b13b233ddf18',
31359
31407
  heidiThonig: 'ddd51595-13ab-4580-9db5-3b13b233ddf19',
31408
+ mohamadPourGhorban: 'ddd51595-13ab-4580-9db5-3b13b233ddf20',
31360
31409
  techSolutionsInc: 'c3000001-0000-0000-0000-000000000001',
31361
31410
  acmeCorporation: 'c3000001-0000-0000-0000-000000000002',
31362
31411
  globalSuppliersLtd: 'c3000001-0000-0000-0000-000000000003',
@@ -31393,6 +31442,7 @@ const personNaturalIds = {
31393
31442
  admin: personIds.admin,
31394
31443
  rodJensen: personIds.rodJensen,
31395
31444
  heidiThonig: personIds.heidiThonig,
31445
+ mohamadPourGhorban: personIds.mohamadPourGhorban,
31396
31446
  };
31397
31447
  const personLegalIds = {
31398
31448
  techSolutionsInc: personIds.techSolutionsInc,
@@ -31735,6 +31785,23 @@ const personMock = [
31735
31785
  educationLevelId: educationLevelIds.masters,
31736
31786
  educationLevel: educationLevelRef(educationLevelIds.masters),
31737
31787
  },
31788
+ {
31789
+ id: personIds.mohamadPourGhorban,
31790
+ userId: userIds.mohamadPourGhorban,
31791
+ firstName: 'Mohammad',
31792
+ lastName: 'Pour Ghorban',
31793
+ fullName: 'Mohammad Pour Ghorban',
31794
+ personTitleId: personTitleIds.mr,
31795
+ personTitle: personTitleRef(personTitleIds.mr),
31796
+ birthDate: '1990-06-15',
31797
+ identityNumber: 'SSN-900615020',
31798
+ genderId: genderIds.male,
31799
+ gender: genderRef(genderIds.male),
31800
+ maritalStatusId: maritalStatusIds.single,
31801
+ maritalStatus: maritalStatusRef(maritalStatusIds.single),
31802
+ educationLevelId: educationLevelIds.bachelors,
31803
+ educationLevel: educationLevelRef(educationLevelIds.bachelors),
31804
+ },
31738
31805
  ];
31739
31806
  //#endregion
31740
31807
 
@@ -32637,9 +32704,12 @@ class MockApplicationLoader {
32637
32704
  }
32638
32705
  mapToAXPApplication(item) {
32639
32706
  const firstEdition = item.editions?.[0];
32707
+ const routeName = item.code === 'MAGFA-001'
32708
+ ? 'magfa-commerce'
32709
+ : item.name || item.title?.toLowerCase().replace(/\s+/g, '-') || 'default-name';
32640
32710
  return {
32641
32711
  id: item.id,
32642
- name: item.name || item.title?.toLowerCase().replace(/\s+/g, '-') || 'default-name',
32712
+ name: routeName,
32643
32713
  title: item.title,
32644
32714
  version: item.version || '1.0.0',
32645
32715
  edition: firstEdition
@@ -33305,7 +33375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33305
33375
  }]
33306
33376
  }] });
33307
33377
 
33308
- const M$S = createMultiLanguageString;
33378
+ const M$T = createMultiLanguageString;
33309
33379
  const manufacturerCategoryIds = {
33310
33380
  electronics: AXPDataGenerator.uuid(),
33311
33381
  semiconductors: AXPDataGenerator.uuid(),
@@ -33329,16 +33399,16 @@ const manufacturerCategoryIds = {
33329
33399
  const manufacturerCategoryMocks = [
33330
33400
  {
33331
33401
  id: manufacturerCategoryIds.electronics,
33332
- title: M$S('Electronics Manufacturing', 'تولید الکترونیک'),
33333
- description: M$S('Electronic equipment and component manufacturers', 'تجهیزات و قطعات الکترونیک'),
33402
+ title: M$T('Electronics Manufacturing', 'تولید الکترونیک'),
33403
+ description: M$T('Electronic equipment and component manufacturers', 'تجهیزات و قطعات الکترونیک'),
33334
33404
  icon: 'fa-light fa-microchip',
33335
33405
  color: '#3b82f6',
33336
33406
  childrenCount: 2,
33337
33407
  },
33338
33408
  {
33339
33409
  id: manufacturerCategoryIds.semiconductors,
33340
- title: M$S('Semiconductors', 'نیمه‌هادی'),
33341
- description: M$S('Semiconductor and chip manufacturers', 'سازندگان چیپ و نیمه‌هادی'),
33410
+ title: M$T('Semiconductors', 'نیمه‌هادی'),
33411
+ description: M$T('Semiconductor and chip manufacturers', 'سازندگان چیپ و نیمه‌هادی'),
33342
33412
  parentId: manufacturerCategoryIds.electronics,
33343
33413
  icon: 'fa-light fa-memory',
33344
33414
  color: '#6366f1',
@@ -33346,8 +33416,8 @@ const manufacturerCategoryMocks = [
33346
33416
  },
33347
33417
  {
33348
33418
  id: manufacturerCategoryIds.consumerElectronics,
33349
- title: M$S('Consumer Electronics', 'الکترونیک مصرفی'),
33350
- description: M$S('Consumer electronics manufacturers', 'تولیدکنندگان الکترونیک مصرفی'),
33419
+ title: M$T('Consumer Electronics', 'الکترونیک مصرفی'),
33420
+ description: M$T('Consumer electronics manufacturers', 'تولیدکنندگان الکترونیک مصرفی'),
33351
33421
  parentId: manufacturerCategoryIds.electronics,
33352
33422
  icon: 'fa-light fa-tv',
33353
33423
  color: '#8b5cf6',
@@ -33355,16 +33425,16 @@ const manufacturerCategoryMocks = [
33355
33425
  },
33356
33426
  {
33357
33427
  id: manufacturerCategoryIds.automotive,
33358
- title: M$S('Automotive', 'خودرو'),
33359
- description: M$S('Automotive manufacturers', 'سازندگان خودرو'),
33428
+ title: M$T('Automotive', 'خودرو'),
33429
+ description: M$T('Automotive manufacturers', 'سازندگان خودرو'),
33360
33430
  icon: 'fa-light fa-car',
33361
33431
  color: '#ef4444',
33362
33432
  childrenCount: 2,
33363
33433
  },
33364
33434
  {
33365
33435
  id: manufacturerCategoryIds.vehicleParts,
33366
- title: M$S('Vehicle Parts', 'قطعات خودرو'),
33367
- description: M$S('Auto parts manufacturers', 'سازندگان قطعات خودرو'),
33436
+ title: M$T('Vehicle Parts', 'قطعات خودرو'),
33437
+ description: M$T('Auto parts manufacturers', 'سازندگان قطعات خودرو'),
33368
33438
  parentId: manufacturerCategoryIds.automotive,
33369
33439
  icon: 'fa-light fa-gear',
33370
33440
  color: '#dc2626',
@@ -33372,8 +33442,8 @@ const manufacturerCategoryMocks = [
33372
33442
  },
33373
33443
  {
33374
33444
  id: manufacturerCategoryIds.electricVehicles,
33375
- title: M$S('Electric Vehicles', 'خودروی برقی'),
33376
- description: M$S('EV manufacturers', 'سازندگان خودروی برقی'),
33445
+ title: M$T('Electric Vehicles', 'خودروی برقی'),
33446
+ description: M$T('EV manufacturers', 'سازندگان خودروی برقی'),
33377
33447
  parentId: manufacturerCategoryIds.automotive,
33378
33448
  icon: 'fa-light fa-charging-station',
33379
33449
  color: '#10b981',
@@ -33381,16 +33451,16 @@ const manufacturerCategoryMocks = [
33381
33451
  },
33382
33452
  {
33383
33453
  id: manufacturerCategoryIds.textiles,
33384
- title: M$S('Textiles & Apparel', 'نساجی و پوشاک'),
33385
- description: M$S('Textile and apparel manufacturers', 'تولیدکنندگان نساجی و پوشاک'),
33454
+ title: M$T('Textiles & Apparel', 'نساجی و پوشاک'),
33455
+ description: M$T('Textile and apparel manufacturers', 'تولیدکنندگان نساجی و پوشاک'),
33386
33456
  icon: 'fa-light fa-shirt',
33387
33457
  color: '#ec4899',
33388
33458
  childrenCount: 2,
33389
33459
  },
33390
33460
  {
33391
33461
  id: manufacturerCategoryIds.apparel,
33392
- title: M$S('Apparel', 'پوشاک'),
33393
- description: M$S('Clothing manufacturers', 'تولیدکنندگان پوشاک'),
33462
+ title: M$T('Apparel', 'پوشاک'),
33463
+ description: M$T('Clothing manufacturers', 'تولیدکنندگان پوشاک'),
33394
33464
  parentId: manufacturerCategoryIds.textiles,
33395
33465
  icon: 'fa-light fa-vest',
33396
33466
  color: '#db2777',
@@ -33398,8 +33468,8 @@ const manufacturerCategoryMocks = [
33398
33468
  },
33399
33469
  {
33400
33470
  id: manufacturerCategoryIds.fabrics,
33401
- title: M$S('Fabrics', 'پارچه'),
33402
- description: M$S('Fabric manufacturers', 'تولیدکنندگان پارچه'),
33471
+ title: M$T('Fabrics', 'پارچه'),
33472
+ description: M$T('Fabric manufacturers', 'تولیدکنندگان پارچه'),
33403
33473
  parentId: manufacturerCategoryIds.textiles,
33404
33474
  icon: 'fa-light fa-socks',
33405
33475
  color: '#f472b6',
@@ -33407,16 +33477,16 @@ const manufacturerCategoryMocks = [
33407
33477
  },
33408
33478
  {
33409
33479
  id: manufacturerCategoryIds.foodProcessing,
33410
- title: M$S('Food & Beverage', 'غذا و نوشیدنی'),
33411
- description: M$S('Food and beverage manufacturers', 'تولیدکنندگان غذا و نوشیدنی'),
33480
+ title: M$T('Food & Beverage', 'غذا و نوشیدنی'),
33481
+ description: M$T('Food and beverage manufacturers', 'تولیدکنندگان غذا و نوشیدنی'),
33412
33482
  icon: 'fa-light fa-utensils',
33413
33483
  color: '#f59e0b',
33414
33484
  childrenCount: 2,
33415
33485
  },
33416
33486
  {
33417
33487
  id: manufacturerCategoryIds.beverageProduction,
33418
- title: M$S('Beverage Production', 'تولید نوشیدنی'),
33419
- description: M$S('Beverage manufacturers', 'تولیدکنندگان نوشیدنی'),
33488
+ title: M$T('Beverage Production', 'تولید نوشیدنی'),
33489
+ description: M$T('Beverage manufacturers', 'تولیدکنندگان نوشیدنی'),
33420
33490
  parentId: manufacturerCategoryIds.foodProcessing,
33421
33491
  icon: 'fa-light fa-bottle-droplet',
33422
33492
  color: '#06b6d4',
@@ -33424,8 +33494,8 @@ const manufacturerCategoryMocks = [
33424
33494
  },
33425
33495
  {
33426
33496
  id: manufacturerCategoryIds.dairyProcessing,
33427
- title: M$S('Dairy Processing', 'فرآوری لبنی'),
33428
- description: M$S('Dairy product manufacturers', 'تولیدکنندگان لبنیات'),
33497
+ title: M$T('Dairy Processing', 'فرآوری لبنی'),
33498
+ description: M$T('Dairy product manufacturers', 'تولیدکنندگان لبنیات'),
33429
33499
  parentId: manufacturerCategoryIds.foodProcessing,
33430
33500
  icon: 'fa-light fa-cow',
33431
33501
  color: '#eab308',
@@ -33433,16 +33503,16 @@ const manufacturerCategoryMocks = [
33433
33503
  },
33434
33504
  {
33435
33505
  id: manufacturerCategoryIds.pharmaceuticals,
33436
- title: M$S('Pharmaceuticals', 'دارویی'),
33437
- description: M$S('Pharmaceutical manufacturers', 'تولیدکنندگان دارو'),
33506
+ title: M$T('Pharmaceuticals', 'دارویی'),
33507
+ description: M$T('Pharmaceutical manufacturers', 'تولیدکنندگان دارو'),
33438
33508
  icon: 'fa-light fa-capsules',
33439
33509
  color: '#14b8a6',
33440
33510
  childrenCount: 2,
33441
33511
  },
33442
33512
  {
33443
33513
  id: manufacturerCategoryIds.genericDrugs,
33444
- title: M$S('Generic Drugs', 'داروی ژنریک'),
33445
- description: M$S('Generic drug manufacturers', 'تولیدکنندگان داروی ژنریک'),
33514
+ title: M$T('Generic Drugs', 'داروی ژنریک'),
33515
+ description: M$T('Generic drug manufacturers', 'تولیدکنندگان داروی ژنریک'),
33446
33516
  parentId: manufacturerCategoryIds.pharmaceuticals,
33447
33517
  icon: 'fa-light fa-pills',
33448
33518
  color: '#0d9488',
@@ -33450,8 +33520,8 @@ const manufacturerCategoryMocks = [
33450
33520
  },
33451
33521
  {
33452
33522
  id: manufacturerCategoryIds.medicalDevices,
33453
- title: M$S('Medical Devices', 'تجهیزات پزشکی'),
33454
- description: M$S('Medical device manufacturers', 'سازندگان تجهیزات پزشکی'),
33523
+ title: M$T('Medical Devices', 'تجهیزات پزشکی'),
33524
+ description: M$T('Medical device manufacturers', 'سازندگان تجهیزات پزشکی'),
33455
33525
  parentId: manufacturerCategoryIds.pharmaceuticals,
33456
33526
  icon: 'fa-light fa-stethoscope',
33457
33527
  color: '#2dd4bf',
@@ -33459,16 +33529,16 @@ const manufacturerCategoryMocks = [
33459
33529
  },
33460
33530
  {
33461
33531
  id: manufacturerCategoryIds.chemicals,
33462
- title: M$S('Chemicals', 'مواد شیمیایی'),
33463
- description: M$S('Chemical manufacturers', 'تولیدکنندگان مواد شیمیایی'),
33532
+ title: M$T('Chemicals', 'مواد شیمیایی'),
33533
+ description: M$T('Chemical manufacturers', 'تولیدکنندگان مواد شیمیایی'),
33464
33534
  icon: 'fa-light fa-flask',
33465
33535
  color: '#a855f7',
33466
33536
  childrenCount: 2,
33467
33537
  },
33468
33538
  {
33469
33539
  id: manufacturerCategoryIds.industrialChemicals,
33470
- title: M$S('Industrial Chemicals', 'شیمیایی صنعتی'),
33471
- description: M$S('Industrial chemical manufacturers', 'تولیدکنندگان مواد شیمیایی صنعتی'),
33540
+ title: M$T('Industrial Chemicals', 'شیمیایی صنعتی'),
33541
+ description: M$T('Industrial chemical manufacturers', 'تولیدکنندگان مواد شیمیایی صنعتی'),
33472
33542
  parentId: manufacturerCategoryIds.chemicals,
33473
33543
  icon: 'fa-light fa-industry',
33474
33544
  color: '#9333ea',
@@ -33476,8 +33546,8 @@ const manufacturerCategoryMocks = [
33476
33546
  },
33477
33547
  {
33478
33548
  id: manufacturerCategoryIds.specialty,
33479
- title: M$S('Specialty Chemicals', 'شیمیایی تخصصی'),
33480
- description: M$S('Specialty chemical manufacturers', 'تولیدکنندگان مواد شیمیایی تخصصی'),
33549
+ title: M$T('Specialty Chemicals', 'شیمیایی تخصصی'),
33550
+ description: M$T('Specialty chemical manufacturers', 'تولیدکنندگان مواد شیمیایی تخصصی'),
33481
33551
  parentId: manufacturerCategoryIds.chemicals,
33482
33552
  icon: 'fa-light fa-vial',
33483
33553
  color: '#c084fc',
@@ -33485,7 +33555,7 @@ const manufacturerCategoryMocks = [
33485
33555
  },
33486
33556
  ];
33487
33557
 
33488
- const M$R = createMultiLanguageString;
33558
+ const M$S = createMultiLanguageString;
33489
33559
  const manufacturerIds = {
33490
33560
  techCorp: AXPDataGenerator.uuid(),
33491
33561
  autoWorks: AXPDataGenerator.uuid(),
@@ -33503,8 +33573,8 @@ const manufacturerMocks = [
33503
33573
  {
33504
33574
  id: manufacturerIds.techCorp,
33505
33575
  code: 'MFG-001',
33506
- title: M$R('TechCorp Industries', 'صنایع تک‌کورپ'),
33507
- description: M$R('Leading electronics manufacturer', 'تولیدکننده پیشرو الکترونیک'),
33576
+ title: M$S('TechCorp Industries', 'صنایع تک‌کورپ'),
33577
+ description: M$S('Leading electronics manufacturer', 'تولیدکننده پیشرو الکترونیک'),
33508
33578
  countryOfOrigin: 'USA',
33509
33579
  website: 'https://www.techcorp.com',
33510
33580
  contactEmail: 'info@techcorp.com',
@@ -33519,8 +33589,8 @@ const manufacturerMocks = [
33519
33589
  {
33520
33590
  id: manufacturerIds.autoWorks,
33521
33591
  code: 'MFG-002',
33522
- title: M$R('AutoWorks Manufacturing', 'اتووورکس تولید'),
33523
- description: M$R('Automotive parts and components', 'قطعات و اجزای خودرو'),
33592
+ title: M$S('AutoWorks Manufacturing', 'اتووورکس تولید'),
33593
+ description: M$S('Automotive parts and components', 'قطعات و اجزای خودرو'),
33524
33594
  countryOfOrigin: 'Germany',
33525
33595
  website: 'https://www.autoworks.de',
33526
33596
  contactEmail: 'contact@autoworks.de',
@@ -33535,8 +33605,8 @@ const manufacturerMocks = [
33535
33605
  {
33536
33606
  id: manufacturerIds.texTile,
33537
33607
  code: 'MFG-003',
33538
- title: M$R('TexTile Global', 'نساجی جهانی'),
33539
- description: M$R('Textile and fabric manufacturer', 'تولیدکننده پارچه و نساجی'),
33608
+ title: M$S('TexTile Global', 'نساجی جهانی'),
33609
+ description: M$S('Textile and fabric manufacturer', 'تولیدکننده پارچه و نساجی'),
33540
33610
  countryOfOrigin: 'India',
33541
33611
  website: 'https://www.textileglobal.in',
33542
33612
  contactEmail: 'sales@textileglobal.in',
@@ -33551,8 +33621,8 @@ const manufacturerMocks = [
33551
33621
  {
33552
33622
  id: manufacturerIds.foodMasters,
33553
33623
  code: 'MFG-004',
33554
- title: M$R('FoodMasters Inc', 'فودمسترز'),
33555
- description: M$R('Food processing and packaging', 'فرآوری و بسته‌بندی غذا'),
33624
+ title: M$S('FoodMasters Inc', 'فودمسترز'),
33625
+ description: M$S('Food processing and packaging', 'فرآوری و بسته‌بندی غذا'),
33556
33626
  countryOfOrigin: 'Canada',
33557
33627
  website: 'https://www.foodmasters.ca',
33558
33628
  contactEmail: 'info@foodmasters.ca',
@@ -33566,8 +33636,8 @@ const manufacturerMocks = [
33566
33636
  {
33567
33637
  id: manufacturerIds.pharmaCo,
33568
33638
  code: 'MFG-005',
33569
- title: M$R('PharmaCo Solutions', 'فارماکو سولوشنز'),
33570
- description: M$R('Pharmaceutical manufacturing', 'تولید دارو'),
33639
+ title: M$S('PharmaCo Solutions', 'فارماکو سولوشنز'),
33640
+ description: M$S('Pharmaceutical manufacturing', 'تولید دارو'),
33571
33641
  countryOfOrigin: 'Switzerland',
33572
33642
  website: 'https://www.pharmaco.ch',
33573
33643
  contactEmail: 'contact@pharmaco.ch',
@@ -33585,8 +33655,8 @@ const manufacturerMocks = [
33585
33655
  {
33586
33656
  id: manufacturerIds.chemSolutions,
33587
33657
  code: 'MFG-006',
33588
- title: M$R('ChemSolutions Ltd', 'کم‌سولوشنز'),
33589
- description: M$R('Industrial and specialty chemicals', 'مواد شیمیایی صنعتی و تخصصی'),
33658
+ title: M$S('ChemSolutions Ltd', 'کم‌سولوشنز'),
33659
+ description: M$S('Industrial and specialty chemicals', 'مواد شیمیایی صنعتی و تخصصی'),
33590
33660
  countryOfOrigin: 'UK',
33591
33661
  website: 'https://www.chemsolutions.co.uk',
33592
33662
  contactEmail: 'sales@chemsolutions.co.uk',
@@ -33604,8 +33674,8 @@ const manufacturerMocks = [
33604
33674
  {
33605
33675
  id: manufacturerIds.megaElectronics,
33606
33676
  code: 'MFG-007',
33607
- title: M$R('Mega Electronics', 'مگا الکترونیک'),
33608
- description: M$R('Consumer electronics manufacturing', 'تولید الکترونیک مصرفی'),
33677
+ title: M$S('Mega Electronics', 'مگا الکترونیک'),
33678
+ description: M$S('Consumer electronics manufacturing', 'تولید الکترونیک مصرفی'),
33609
33679
  countryOfOrigin: 'South Korea',
33610
33680
  website: 'https://www.megaelectronics.kr',
33611
33681
  contactEmail: 'info@megaelectronics.kr',
@@ -33622,8 +33692,8 @@ const manufacturerMocks = [
33622
33692
  {
33623
33693
  id: manufacturerIds.greenAuto,
33624
33694
  code: 'MFG-008',
33625
- title: M$R('GreenAuto Technologies', 'گرین‌اتو فناوری'),
33626
- description: M$R('Electric vehicle manufacturer', 'تولیدکننده خودروی برقی'),
33695
+ title: M$S('GreenAuto Technologies', 'گرین‌اتو فناوری'),
33696
+ description: M$S('Electric vehicle manufacturer', 'تولیدکننده خودروی برقی'),
33627
33697
  countryOfOrigin: 'USA',
33628
33698
  website: 'https://www.greenauto.com',
33629
33699
  contactEmail: 'sales@greenauto.com',
@@ -33640,8 +33710,8 @@ const manufacturerMocks = [
33640
33710
  {
33641
33711
  id: manufacturerIds.styleFabrics,
33642
33712
  code: 'MFG-009',
33643
- title: M$R('StyleFabrics International', 'استایل‌فابریکس بین‌الملل'),
33644
- description: M$R('Apparel manufacturing', 'تولید پوشاک'),
33713
+ title: M$S('StyleFabrics International', 'استایل‌فابریکس بین‌الملل'),
33714
+ description: M$S('Apparel manufacturing', 'تولید پوشاک'),
33645
33715
  countryOfOrigin: 'Bangladesh',
33646
33716
  website: 'https://www.stylefabrics.bd',
33647
33717
  contactEmail: 'orders@stylefabrics.bd',
@@ -33653,8 +33723,8 @@ const manufacturerMocks = [
33653
33723
  {
33654
33724
  id: manufacturerIds.pureBeverage,
33655
33725
  code: 'MFG-010',
33656
- title: M$R('PureBeverage Co', 'پیوربیورج'),
33657
- description: M$R('Beverage production and bottling', 'تولید و بطری‌سازی نوشیدنی'),
33726
+ title: M$S('PureBeverage Co', 'پیوربیورج'),
33727
+ description: M$S('Beverage production and bottling', 'تولید و بطری‌سازی نوشیدنی'),
33658
33728
  countryOfOrigin: 'France',
33659
33729
  website: 'https://www.purebeverage.fr',
33660
33730
  contactEmail: 'contact@purebeverage.fr',
@@ -33698,76 +33768,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33698
33768
  type: Injectable
33699
33769
  }] });
33700
33770
 
33701
- const M$Q = createMultiLanguageString;
33771
+ const M$R = createMultiLanguageString;
33702
33772
  const industryMocks = [
33703
33773
  {
33704
33774
  id: AXPDataGenerator.uuid(),
33705
33775
  code: 'MANUF',
33706
- title: M$Q('Manufacturing', 'تولید و ساخت'),
33707
- description: M$Q('Manufacturing and production industries', 'صنایع تولیدی'),
33776
+ title: M$R('Manufacturing', 'تولید و ساخت'),
33777
+ description: M$R('Manufacturing and production industries', 'صنایع تولیدی'),
33708
33778
  isDisabled: false,
33709
33779
  },
33710
33780
  {
33711
33781
  id: AXPDataGenerator.uuid(),
33712
33782
  code: 'TECH',
33713
- title: M$Q('Technology', 'فناوری اطلاعات'),
33714
- description: M$Q('Information technology and software industries', 'نرم‌افزار و فناوری'),
33783
+ title: M$R('Technology', 'فناوری اطلاعات'),
33784
+ description: M$R('Information technology and software industries', 'نرم‌افزار و فناوری'),
33715
33785
  isDisabled: false,
33716
33786
  },
33717
33787
  {
33718
33788
  id: AXPDataGenerator.uuid(),
33719
33789
  code: 'RETAIL',
33720
- title: M$Q('Retail', 'خرده‌فروشی'),
33721
- description: M$Q('Retail and consumer goods industries', 'کالای مصرفی'),
33790
+ title: M$R('Retail', 'خرده‌فروشی'),
33791
+ description: M$R('Retail and consumer goods industries', 'کالای مصرفی'),
33722
33792
  isDisabled: false,
33723
33793
  },
33724
33794
  {
33725
33795
  id: AXPDataGenerator.uuid(),
33726
33796
  code: 'HEALTH',
33727
- title: M$Q('Healthcare', 'بهداشت و درمان'),
33728
- description: M$Q('Healthcare and medical industries', 'پزشکی و درمان'),
33797
+ title: M$R('Healthcare', 'بهداشت و درمان'),
33798
+ description: M$R('Healthcare and medical industries', 'پزشکی و درمان'),
33729
33799
  isDisabled: false,
33730
33800
  },
33731
33801
  {
33732
33802
  id: AXPDataGenerator.uuid(),
33733
33803
  code: 'FINANCE',
33734
- title: M$Q('Financial Services', 'خدمات مالی'),
33735
- description: M$Q('Banking, insurance, and financial services', 'بانک، بیمه و مالی'),
33804
+ title: M$R('Financial Services', 'خدمات مالی'),
33805
+ description: M$R('Banking, insurance, and financial services', 'بانک، بیمه و مالی'),
33736
33806
  isDisabled: false,
33737
33807
  },
33738
33808
  {
33739
33809
  id: AXPDataGenerator.uuid(),
33740
33810
  code: 'CONSTR',
33741
- title: M$Q('Construction', 'ساخت‌وساز'),
33742
- description: M$Q('Construction and real estate industries', 'ساختمان و املاک'),
33811
+ title: M$R('Construction', 'ساخت‌وساز'),
33812
+ description: M$R('Construction and real estate industries', 'ساختمان و املاک'),
33743
33813
  isDisabled: false,
33744
33814
  },
33745
33815
  {
33746
33816
  id: AXPDataGenerator.uuid(),
33747
33817
  code: 'EDUC',
33748
- title: M$Q('Education', 'آموزش'),
33749
- description: M$Q('Educational services and institutions', 'خدمات آموزشی'),
33818
+ title: M$R('Education', 'آموزش'),
33819
+ description: M$R('Educational services and institutions', 'خدمات آموزشی'),
33750
33820
  isDisabled: false,
33751
33821
  },
33752
33822
  {
33753
33823
  id: AXPDataGenerator.uuid(),
33754
33824
  code: 'ENERGY',
33755
- title: M$Q('Energy', 'انرژی'),
33756
- description: M$Q('Energy production and utilities', 'تولید انرژی و تأسیسات'),
33825
+ title: M$R('Energy', 'انرژی'),
33826
+ description: M$R('Energy production and utilities', 'تولید انرژی و تأسیسات'),
33757
33827
  isDisabled: false,
33758
33828
  },
33759
33829
  {
33760
33830
  id: AXPDataGenerator.uuid(),
33761
33831
  code: 'TRANSP',
33762
- title: M$Q('Transportation', 'حمل‌ونقل'),
33763
- description: M$Q('Transportation and logistics industries', 'لجستیک و ترابری'),
33832
+ title: M$R('Transportation', 'حمل‌ونقل'),
33833
+ description: M$R('Transportation and logistics industries', 'لجستیک و ترابری'),
33764
33834
  isDisabled: false,
33765
33835
  },
33766
33836
  {
33767
33837
  id: AXPDataGenerator.uuid(),
33768
33838
  code: 'AGRIC',
33769
- title: M$Q('Agriculture', 'کشاورزی'),
33770
- description: M$Q('Agriculture and farming industries', 'کشاورزی و دامپروری'),
33839
+ title: M$R('Agriculture', 'کشاورزی'),
33840
+ description: M$R('Agriculture and farming industries', 'کشاورزی و دامپروری'),
33771
33841
  isDisabled: false,
33772
33842
  },
33773
33843
  ];
@@ -33786,62 +33856,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33786
33856
  type: Injectable
33787
33857
  }] });
33788
33858
 
33789
- const M$P = createMultiLanguageString;
33859
+ const M$Q = createMultiLanguageString;
33790
33860
  const businessTypeMocks = [
33791
33861
  {
33792
33862
  id: AXPDataGenerator.uuid(),
33793
33863
  code: 'CORP',
33794
- title: M$P('Corporation', 'شرکت سهامی'),
33795
- description: M$P('A corporation is a legal entity separate from its owners', 'شخصیت حقوقی مستقل از مالکان'),
33864
+ title: M$Q('Corporation', 'شرکت سهامی'),
33865
+ description: M$Q('A corporation is a legal entity separate from its owners', 'شخصیت حقوقی مستقل از مالکان'),
33796
33866
  isDisabled: false,
33797
33867
  },
33798
33868
  {
33799
33869
  id: AXPDataGenerator.uuid(),
33800
33870
  code: 'LLC',
33801
- title: M$P('Limited Liability Company', 'با مسئولیت محدود'),
33802
- description: M$P('A hybrid business structure that provides limited liability protection', 'ساختار ترکیبی با مسئولیت محدود'),
33871
+ title: M$Q('Limited Liability Company', 'با مسئولیت محدود'),
33872
+ description: M$Q('A hybrid business structure that provides limited liability protection', 'ساختار ترکیبی با مسئولیت محدود'),
33803
33873
  isDisabled: false,
33804
33874
  },
33805
33875
  {
33806
33876
  id: AXPDataGenerator.uuid(),
33807
33877
  code: 'PART',
33808
- title: M$P('Partnership', 'شراکت'),
33809
- description: M$P('A business owned by two or more persons', 'مالکیت دو یا چند نفره'),
33878
+ title: M$Q('Partnership', 'شراکت'),
33879
+ description: M$Q('A business owned by two or more persons', 'مالکیت دو یا چند نفره'),
33810
33880
  isDisabled: false,
33811
33881
  },
33812
33882
  {
33813
33883
  id: AXPDataGenerator.uuid(),
33814
33884
  code: 'SOLE',
33815
- title: M$P('Sole Proprietorship', 'تک‌مالک'),
33816
- description: M$P('A business owned and operated by a single individual', 'مالک و اپراتور یک نفره'),
33885
+ title: M$Q('Sole Proprietorship', 'تک‌مالک'),
33886
+ description: M$Q('A business owned and operated by a single individual', 'مالک و اپراتور یک نفره'),
33817
33887
  isDisabled: false,
33818
33888
  },
33819
33889
  {
33820
33890
  id: AXPDataGenerator.uuid(),
33821
33891
  code: 'NONPROFIT',
33822
- title: M$P('Non-Profit Organization', 'غیرانتفاعی'),
33823
- description: M$P('An organization that operates for charitable or social purposes', 'اهداف خیریه یا اجتماعی'),
33892
+ title: M$Q('Non-Profit Organization', 'غیرانتفاعی'),
33893
+ description: M$Q('An organization that operates for charitable or social purposes', 'اهداف خیریه یا اجتماعی'),
33824
33894
  isDisabled: false,
33825
33895
  },
33826
33896
  {
33827
33897
  id: AXPDataGenerator.uuid(),
33828
33898
  code: 'PUBLIC',
33829
- title: M$P('Public Company', 'عمومی (بورسی)'),
33830
- description: M$P('A corporation whose shares are traded on a public stock exchange', 'سهام در بورس معامله می‌شود'),
33899
+ title: M$Q('Public Company', 'عمومی (بورسی)'),
33900
+ description: M$Q('A corporation whose shares are traded on a public stock exchange', 'سهام در بورس معامله می‌شود'),
33831
33901
  isDisabled: false,
33832
33902
  },
33833
33903
  {
33834
33904
  id: AXPDataGenerator.uuid(),
33835
33905
  code: 'PRIVATE',
33836
- title: M$P('Private Company', 'خصوصی'),
33837
- description: M$P('A corporation whose shares are not publicly traded', 'سهام غیرعمومی'),
33906
+ title: M$Q('Private Company', 'خصوصی'),
33907
+ description: M$Q('A corporation whose shares are not publicly traded', 'سهام غیرعمومی'),
33838
33908
  isDisabled: false,
33839
33909
  },
33840
33910
  {
33841
33911
  id: AXPDataGenerator.uuid(),
33842
33912
  code: 'COOP',
33843
- title: M$P('Cooperative', 'تعاونی'),
33844
- description: M$P('A business owned and operated by a group of individuals for their mutual benefit', 'مالکیت گروهی برای منفعت مشترک'),
33913
+ title: M$Q('Cooperative', 'تعاونی'),
33914
+ description: M$Q('A business owned and operated by a group of individuals for their mutual benefit', 'مالکیت گروهی برای منفعت مشترک'),
33845
33915
  isDisabled: false,
33846
33916
  },
33847
33917
  ];
@@ -33860,55 +33930,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33860
33930
  type: Injectable
33861
33931
  }] });
33862
33932
 
33863
- const M$O = createMultiLanguageString;
33933
+ const M$P = createMultiLanguageString;
33864
33934
  const businessStatusMocks = [
33865
33935
  {
33866
33936
  id: AXPDataGenerator.uuid(),
33867
33937
  code: 'ACTIVE',
33868
- title: M$O('Active', 'فعال'),
33869
- description: M$O('Business is currently active and operating', 'کسب‌وکار فعال است'),
33938
+ title: M$P('Active', 'فعال'),
33939
+ description: M$P('Business is currently active and operating', 'کسب‌وکار فعال است'),
33870
33940
  isDisabled: false,
33871
33941
  },
33872
33942
  {
33873
33943
  id: AXPDataGenerator.uuid(),
33874
33944
  code: 'INACTIVE',
33875
- title: M$O('Inactive', 'غیرفعال'),
33876
- description: M$O('Business is temporarily inactive', 'موقتاً غیرفعال'),
33945
+ title: M$P('Inactive', 'غیرفعال'),
33946
+ description: M$P('Business is temporarily inactive', 'موقتاً غیرفعال'),
33877
33947
  isDisabled: false,
33878
33948
  },
33879
33949
  {
33880
33950
  id: AXPDataGenerator.uuid(),
33881
33951
  code: 'SUSPENDED',
33882
- title: M$O('Suspended', 'معلق'),
33883
- description: M$O('Business operations are suspended', 'عملیات تعلیق شده'),
33952
+ title: M$P('Suspended', 'معلق'),
33953
+ description: M$P('Business operations are suspended', 'عملیات تعلیق شده'),
33884
33954
  isDisabled: false,
33885
33955
  },
33886
33956
  {
33887
33957
  id: AXPDataGenerator.uuid(),
33888
33958
  code: 'MERGED',
33889
- title: M$O('Merged', 'ادغام‌شده'),
33890
- description: M$O('Business has been merged with another entity', 'با موجودیت دیگر ادغام شده'),
33959
+ title: M$P('Merged', 'ادغام‌شده'),
33960
+ description: M$P('Business has been merged with another entity', 'با موجودیت دیگر ادغام شده'),
33891
33961
  isDisabled: false,
33892
33962
  },
33893
33963
  {
33894
33964
  id: AXPDataGenerator.uuid(),
33895
33965
  code: 'ACQUIRED',
33896
- title: M$O('Acquired', 'خریداری‌شده'),
33897
- description: M$O('Business has been acquired by another entity', 'توسط دیگری تصاحب شده'),
33966
+ title: M$P('Acquired', 'خریداری‌شده'),
33967
+ description: M$P('Business has been acquired by another entity', 'توسط دیگری تصاحب شده'),
33898
33968
  isDisabled: false,
33899
33969
  },
33900
33970
  {
33901
33971
  id: AXPDataGenerator.uuid(),
33902
33972
  code: 'DISSOLVED',
33903
- title: M$O('Dissolved', 'منحل‌شده'),
33904
- description: M$O('Business has been dissolved or liquidated', 'منحل یا تسویه شده'),
33973
+ title: M$P('Dissolved', 'منحل‌شده'),
33974
+ description: M$P('Business has been dissolved or liquidated', 'منحل یا تسویه شده'),
33905
33975
  isDisabled: false,
33906
33976
  },
33907
33977
  {
33908
33978
  id: AXPDataGenerator.uuid(),
33909
33979
  code: 'PENDING',
33910
- title: M$O('Pending Approval', 'در انتظار تأیید'),
33911
- description: M$O('Business registration is pending approval', 'ثبت در انتظار تأیید'),
33980
+ title: M$P('Pending Approval', 'در انتظار تأیید'),
33981
+ description: M$P('Business registration is pending approval', 'ثبت در انتظار تأیید'),
33912
33982
  isDisabled: false,
33913
33983
  },
33914
33984
  ];
@@ -33927,76 +33997,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33927
33997
  type: Injectable
33928
33998
  }] });
33929
33999
 
33930
- const M$N = createMultiLanguageString;
34000
+ const M$O = createMultiLanguageString;
33931
34001
  const partyTypeMocks = [
33932
34002
  {
33933
34003
  id: AXPDataGenerator.uuid(),
33934
34004
  code: 'MANUF',
33935
- title: M$N('Manufacturer', 'تولیدکننده'),
33936
- description: M$N('Direct manufacturer', 'تولیدکننده مستقیم'),
34005
+ title: M$O('Manufacturer', 'تولیدکننده'),
34006
+ description: M$O('Direct manufacturer', 'تولیدکننده مستقیم'),
33937
34007
  isDisabled: false,
33938
34008
  },
33939
34009
  {
33940
34010
  id: AXPDataGenerator.uuid(),
33941
34011
  code: 'DIST',
33942
- title: M$N('Distributor', 'توزیع‌کننده'),
33943
- description: M$N('Product distributor', 'توزیع محصول'),
34012
+ title: M$O('Distributor', 'توزیع‌کننده'),
34013
+ description: M$O('Product distributor', 'توزیع محصول'),
33944
34014
  isDisabled: false,
33945
34015
  },
33946
34016
  {
33947
34017
  id: AXPDataGenerator.uuid(),
33948
34018
  code: 'WHOL',
33949
- title: M$N('Wholesaler', 'عمده‌فروش'),
33950
- description: M$N('Bulk supplier', 'تأمین عمده'),
34019
+ title: M$O('Wholesaler', 'عمده‌فروش'),
34020
+ description: M$O('Bulk supplier', 'تأمین عمده'),
33951
34021
  isDisabled: false,
33952
34022
  },
33953
34023
  {
33954
34024
  id: AXPDataGenerator.uuid(),
33955
34025
  code: 'RETL',
33956
- title: M$N('Retailer', 'خرده‌فروش'),
33957
- description: M$N('Retail supplier', 'تأمین خرده'),
34026
+ title: M$O('Retailer', 'خرده‌فروش'),
34027
+ description: M$O('Retail supplier', 'تأمین خرده'),
33958
34028
  isDisabled: false,
33959
34029
  },
33960
34030
  {
33961
34031
  id: AXPDataGenerator.uuid(),
33962
34032
  code: 'SVC',
33963
- title: M$N('Service Provider', 'ارائه‌دهنده خدمات'),
33964
- description: M$N('Service-based supplier', 'تأمین مبتنی بر خدمات'),
34033
+ title: M$O('Service Provider', 'ارائه‌دهنده خدمات'),
34034
+ description: M$O('Service-based supplier', 'تأمین مبتنی بر خدمات'),
33965
34035
  isDisabled: false,
33966
34036
  },
33967
34037
  {
33968
34038
  id: AXPDataGenerator.uuid(),
33969
34039
  code: 'CUST',
33970
- title: M$N('Customer', 'مشتری'),
33971
- description: M$N('End customer or buyer', 'خریدار نهایی'),
34040
+ title: M$O('Customer', 'مشتری'),
34041
+ description: M$O('End customer or buyer', 'خریدار نهایی'),
33972
34042
  isDisabled: false,
33973
34043
  },
33974
34044
  {
33975
34045
  id: AXPDataGenerator.uuid(),
33976
34046
  code: 'PROS',
33977
- title: M$N('Prospect', 'سرنخ'),
33978
- description: M$N('Potential customer', 'مشتری بالقوه'),
34047
+ title: M$O('Prospect', 'سرنخ'),
34048
+ description: M$O('Potential customer', 'مشتری بالقوه'),
33979
34049
  isDisabled: false,
33980
34050
  },
33981
34051
  {
33982
34052
  id: AXPDataGenerator.uuid(),
33983
34053
  code: 'CLNT',
33984
- title: M$N('Client', 'کارفرما'),
33985
- description: M$N('Standard customer', 'مشتری استاندارد'),
34054
+ title: M$O('Client', 'کارفرما'),
34055
+ description: M$O('Standard customer', 'مشتری استاندارد'),
33986
34056
  isDisabled: false,
33987
34057
  },
33988
34058
  {
33989
34059
  id: AXPDataGenerator.uuid(),
33990
34060
  code: 'ENT',
33991
- title: M$N('Enterprise', 'سازمان بزرگ'),
33992
- description: M$N('Large organization customer', 'مشتری سازمانی بزرگ'),
34061
+ title: M$O('Enterprise', 'سازمان بزرگ'),
34062
+ description: M$O('Large organization customer', 'مشتری سازمانی بزرگ'),
33993
34063
  isDisabled: false,
33994
34064
  },
33995
34065
  {
33996
34066
  id: AXPDataGenerator.uuid(),
33997
34067
  code: 'RSLR',
33998
- title: M$N('Reseller', 'فروشنده مجدد'),
33999
- description: M$N('Partner reseller', 'شریک فروش'),
34068
+ title: M$O('Reseller', 'فروشنده مجدد'),
34069
+ description: M$O('Partner reseller', 'شریک فروش'),
34000
34070
  isDisabled: false,
34001
34071
  },
34002
34072
  ];
@@ -34027,61 +34097,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
34027
34097
  type: Injectable
34028
34098
  }] });
34029
34099
 
34030
- const M$M = createMultiLanguageString;
34100
+ const M$N = createMultiLanguageString;
34031
34101
  const partySegmentMocks = [
34032
34102
  {
34033
34103
  id: AXPDataGenerator.uuid(),
34034
- title: M$M('Strategic', 'استراتژیک'),
34035
- description: M$M('Strategic partners', 'شرکای استراتژیک'),
34104
+ title: M$N('Strategic', 'استراتژیک'),
34105
+ description: M$N('Strategic partners', 'شرکای استراتژیک'),
34036
34106
  color: '#3a3a89',
34037
34107
  isArchived: false,
34038
34108
  },
34039
34109
  {
34040
34110
  id: AXPDataGenerator.uuid(),
34041
- title: M$M('Preferred', 'ترجیحی'),
34042
- description: M$M('Preferred partners', 'شرکای ترجیحی'),
34111
+ title: M$N('Preferred', 'ترجیحی'),
34112
+ description: M$N('Preferred partners', 'شرکای ترجیحی'),
34043
34113
  color: '#2bc4b0',
34044
34114
  isArchived: false,
34045
34115
  },
34046
34116
  {
34047
34117
  id: AXPDataGenerator.uuid(),
34048
- title: M$M('Standard', 'استاندارد'),
34049
- description: M$M('Standard partners', 'شرکای استاندارد'),
34118
+ title: M$N('Standard', 'استاندارد'),
34119
+ description: M$N('Standard partners', 'شرکای استاندارد'),
34050
34120
  color: '#8e1c65',
34051
34121
  isArchived: false,
34052
34122
  },
34053
34123
  {
34054
34124
  id: AXPDataGenerator.uuid(),
34055
- title: M$M('New', 'جدید'),
34056
- description: M$M('New partners', 'شرکای جدید'),
34125
+ title: M$N('New', 'جدید'),
34126
+ description: M$N('New partners', 'شرکای جدید'),
34057
34127
  color: '#f39c12',
34058
34128
  isArchived: false,
34059
34129
  },
34060
34130
  {
34061
34131
  id: AXPDataGenerator.uuid(),
34062
- title: M$M('High-Risk', 'پرریسک'),
34063
- description: M$M('High-risk partners', 'شرکای پرریسک'),
34132
+ title: M$N('High-Risk', 'پرریسک'),
34133
+ description: M$N('High-risk partners', 'شرکای پرریسک'),
34064
34134
  color: '#e74c3c',
34065
34135
  isArchived: false,
34066
34136
  },
34067
34137
  {
34068
34138
  id: AXPDataGenerator.uuid(),
34069
- title: M$M('B2B', 'کسب‌وکار به کسب‌وکار'),
34070
- description: M$M('Business to Business', 'فروش سازمانی'),
34139
+ title: M$N('B2B', 'کسب‌وکار به کسب‌وکار'),
34140
+ description: M$N('Business to Business', 'فروش سازمانی'),
34071
34141
  color: '#3a3a89',
34072
34142
  isArchived: false,
34073
34143
  },
34074
34144
  {
34075
34145
  id: AXPDataGenerator.uuid(),
34076
- title: M$M('B2C', 'کسب‌وکار به مصرف‌کننده'),
34077
- description: M$M('Business to Consumer', 'فروش به مصرف‌کننده'),
34146
+ title: M$N('B2C', 'کسب‌وکار به مصرف‌کننده'),
34147
+ description: M$N('Business to Consumer', 'فروش به مصرف‌کننده'),
34078
34148
  color: '#2bc4b0',
34079
34149
  isArchived: false,
34080
34150
  },
34081
34151
  {
34082
34152
  id: AXPDataGenerator.uuid(),
34083
- title: M$M('SMB', 'کسب‌وکار کوچک و متوسط'),
34084
- description: M$M('Small and Medium Business', 'شرکت‌های کوچک و متوسط'),
34153
+ title: M$N('SMB', 'کسب‌وکار کوچک و متوسط'),
34154
+ description: M$N('Small and Medium Business', 'شرکت‌های کوچک و متوسط'),
34085
34155
  color: '#8e1c65',
34086
34156
  isArchived: false,
34087
34157
  },
@@ -34111,37 +34181,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
34111
34181
  type: Injectable
34112
34182
  }] });
34113
34183
 
34114
- const M$L = createMultiLanguageString;
34184
+ const M$M = createMultiLanguageString;
34115
34185
  const lifecycleStageMocks = [
34116
34186
  {
34117
34187
  id: AXPDataGenerator.uuid(),
34118
- title: M$L('Prospect', 'سرنخ'),
34188
+ title: M$M('Prospect', 'سرنخ'),
34119
34189
  order: 1,
34120
- description: M$L('Potential customer', 'مشتری بالقوه'),
34190
+ description: M$M('Potential customer', 'مشتری بالقوه'),
34121
34191
  },
34122
34192
  {
34123
34193
  id: AXPDataGenerator.uuid(),
34124
- title: M$L('Onboarding', 'ورود و آغاز'),
34194
+ title: M$M('Onboarding', 'ورود و آغاز'),
34125
34195
  order: 2,
34126
- description: M$L('New customer onboarding', 'سوار کردن مشتری جدید'),
34196
+ description: M$M('New customer onboarding', 'سوار کردن مشتری جدید'),
34127
34197
  },
34128
34198
  {
34129
34199
  id: AXPDataGenerator.uuid(),
34130
- title: M$L('Active', 'فعال'),
34200
+ title: M$M('Active', 'فعال'),
34131
34201
  order: 3,
34132
- description: M$L('Active customer', 'مشتری فعال'),
34202
+ description: M$M('Active customer', 'مشتری فعال'),
34133
34203
  },
34134
34204
  {
34135
34205
  id: AXPDataGenerator.uuid(),
34136
- title: M$L('Churn Risk', 'ریسک ریزش'),
34206
+ title: M$M('Churn Risk', 'ریسک ریزش'),
34137
34207
  order: 4,
34138
- description: M$L('At risk of churning', 'در معرض از دست دادن'),
34208
+ description: M$M('At risk of churning', 'در معرض از دست دادن'),
34139
34209
  },
34140
34210
  {
34141
34211
  id: AXPDataGenerator.uuid(),
34142
- title: M$L('Churned', 'ریزش‌یافته'),
34212
+ title: M$M('Churned', 'ریزش‌یافته'),
34143
34213
  order: 5,
34144
- description: M$L('Churned customer', 'مشتری از دست‌رفته'),
34214
+ description: M$M('Churned customer', 'مشتری از دست‌رفته'),
34145
34215
  },
34146
34216
  ];
34147
34217
  const lifecycleStageIds = {
@@ -34166,7 +34236,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
34166
34236
  type: Injectable
34167
34237
  }] });
34168
34238
 
34169
- const M$K = createMultiLanguageString;
34239
+ const M$L = createMultiLanguageString;
34170
34240
  const CUSTOMER_PARTIES = [
34171
34241
  { en: 'Tech Solutions Inc.', fa: 'فناوری راه‌حل (شرکت)' },
34172
34242
  { en: 'European Manufacturing Consortium', fa: 'کنسرسیوم تولید اروپا' },
@@ -34208,7 +34278,7 @@ const SUPPLIER_PARTY_CODES = [
34208
34278
  const customerParties = CUSTOMER_PARTIES.map(({ en, fa }, i) => ({
34209
34279
  id: AXPDataGenerator.uuid(),
34210
34280
  code: CUSTOMER_PARTY_CODES[i],
34211
- title: M$K(en, fa),
34281
+ title: M$L(en, fa),
34212
34282
  phones: [],
34213
34283
  emails: [],
34214
34284
  addresses: [],
@@ -34216,7 +34286,7 @@ const customerParties = CUSTOMER_PARTIES.map(({ en, fa }, i) => ({
34216
34286
  const supplierParties = SUPPLIER_PARTIES.map(({ en, fa }, i) => ({
34217
34287
  id: AXPDataGenerator.uuid(),
34218
34288
  code: SUPPLIER_PARTY_CODES[i],
34219
- title: M$K(en, fa),
34289
+ title: M$L(en, fa),
34220
34290
  phones: [],
34221
34291
  emails: [],
34222
34292
  addresses: [],
@@ -34256,7 +34326,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
34256
34326
  type: Injectable
34257
34327
  }] });
34258
34328
 
34259
- const M$J = createMultiLanguageString;
34329
+ const M$K = createMultiLanguageString;
34260
34330
  // Export contact role IDs for use in other mocks (person, deal-contact-role, etc.)
34261
34331
  const contactRoleIds = {
34262
34332
  customer: AXPDataGenerator.uuid(),
@@ -34303,248 +34373,248 @@ const contactRoleMocks = [
34303
34373
  id: contactRoleIds.customer,
34304
34374
  type: ['person'],
34305
34375
  name: 'customer',
34306
- title: M$J('Customer', 'مشتری'),
34307
- description: M$J('Customer or client relationship', 'رابطه مشتری یا مراجعه‌کننده'),
34376
+ title: M$K('Customer', 'مشتری'),
34377
+ description: M$K('Customer or client relationship', 'رابطه مشتری یا مراجعه‌کننده'),
34308
34378
  },
34309
34379
  {
34310
34380
  id: contactRoleIds.vendor,
34311
34381
  type: ['person'],
34312
34382
  name: 'vendor',
34313
- title: M$J('Vendor', 'فروشنده'),
34314
- description: M$J('Vendor or supplier relationship', 'رابطه فروشنده یا تأمین‌کننده'),
34383
+ title: M$K('Vendor', 'فروشنده'),
34384
+ description: M$K('Vendor or supplier relationship', 'رابطه فروشنده یا تأمین‌کننده'),
34315
34385
  },
34316
34386
  {
34317
34387
  id: contactRoleIds.subcontractor,
34318
34388
  type: ['person'],
34319
34389
  name: 'subcontractor',
34320
- title: M$J('Subcontractor', 'پیمانکار فرعی'),
34321
- description: M$J('Subcontractor relationship', 'رابطه پیمانکار فرعی'),
34390
+ title: M$K('Subcontractor', 'پیمانکار فرعی'),
34391
+ description: M$K('Subcontractor relationship', 'رابطه پیمانکار فرعی'),
34322
34392
  },
34323
34393
  {
34324
34394
  id: contactRoleIds.client,
34325
34395
  type: ['person'],
34326
34396
  name: 'client',
34327
- title: M$J('Client', 'کارفرما'),
34328
- description: M$J('Client relationship', 'رابطه کارفرمایی'),
34397
+ title: M$K('Client', 'کارفرما'),
34398
+ description: M$K('Client relationship', 'رابطه کارفرمایی'),
34329
34399
  },
34330
34400
  {
34331
34401
  id: contactRoleIds.employee,
34332
34402
  type: ['person'],
34333
34403
  name: 'employee',
34334
- title: M$J('Employee', 'کارمند'),
34335
- description: M$J('Employee of the organization', 'کارمند سازمان'),
34404
+ title: M$K('Employee', 'کارمند'),
34405
+ description: M$K('Employee of the organization', 'کارمند سازمان'),
34336
34406
  },
34337
34407
  {
34338
34408
  id: contactRoleIds.partner,
34339
34409
  type: ['person'],
34340
34410
  name: 'partner',
34341
- title: M$J('Partner', 'شریک'),
34342
- description: M$J('Business partner relationship', 'رابطه شریک تجاری'),
34411
+ title: M$K('Partner', 'شریک'),
34412
+ description: M$K('Business partner relationship', 'رابطه شریک تجاری'),
34343
34413
  },
34344
34414
  {
34345
34415
  id: contactRoleIds.supplier,
34346
34416
  type: ['person'],
34347
34417
  name: 'supplier',
34348
- title: M$J('Supplier', 'تأمین‌کننده'),
34349
- description: M$J('Supplier relationship', 'رابطه تأمین‌کننده'),
34418
+ title: M$K('Supplier', 'تأمین‌کننده'),
34419
+ description: M$K('Supplier relationship', 'رابطه تأمین‌کننده'),
34350
34420
  },
34351
34421
  {
34352
34422
  id: contactRoleIds.member,
34353
34423
  type: ['person'],
34354
34424
  name: 'member',
34355
- title: M$J('Member', 'عضو'),
34356
- description: M$J('Organization or community member', 'عضو سازمان یا جامعه'),
34425
+ title: M$K('Member', 'عضو'),
34426
+ description: M$K('Organization or community member', 'عضو سازمان یا جامعه'),
34357
34427
  },
34358
34428
  {
34359
34429
  id: contactRoleIds.other,
34360
34430
  type: ['person', 'opportunity-contact', 'party-contact'],
34361
34431
  name: 'other',
34362
- title: M$J('Other', 'سایر'),
34363
- description: M$J('Other role type', 'نوع نقش دیگر'),
34432
+ title: M$K('Other', 'سایر'),
34433
+ description: M$K('Other role type', 'نوع نقش دیگر'),
34364
34434
  },
34365
34435
  // Location contact roles
34366
34436
  {
34367
34437
  id: contactRoleIds.siteManager,
34368
34438
  type: ['location-contact'],
34369
34439
  name: 'site-manager',
34370
- title: M$J('Site Manager', 'مدیر سایت'),
34371
- description: M$J('Primary contact for the location', 'مخاطب اصلی مکان'),
34440
+ title: M$K('Site Manager', 'مدیر سایت'),
34441
+ description: M$K('Primary contact for the location', 'مخاطب اصلی مکان'),
34372
34442
  },
34373
34443
  {
34374
34444
  id: contactRoleIds.facilityContact,
34375
34445
  type: ['location-contact'],
34376
34446
  name: 'facility-contact',
34377
- title: M$J('Facility Contact', 'مخاطب تاسیسات'),
34378
- description: M$J('General facility contact', 'مخاطب عمومی تاسیسات'),
34447
+ title: M$K('Facility Contact', 'مخاطب تاسیسات'),
34448
+ description: M$K('General facility contact', 'مخاطب عمومی تاسیسات'),
34379
34449
  },
34380
34450
  {
34381
34451
  id: contactRoleIds.emergencyContact,
34382
34452
  type: ['location-contact', 'person-relationship', 'family'],
34383
34453
  name: 'emergency-contact',
34384
- title: M$J('Emergency Contact', 'تماس اضطراری'),
34385
- description: M$J('Contact for emergency situations (location, business, or family)', 'مخاطب برای شرایط اضطراری (مکان، کسب‌وکار یا خانواده)'),
34454
+ title: M$K('Emergency Contact', 'تماس اضطراری'),
34455
+ description: M$K('Contact for emergency situations (location, business, or family)', 'مخاطب برای شرایط اضطراری (مکان، کسب‌وکار یا خانواده)'),
34386
34456
  },
34387
34457
  {
34388
34458
  id: contactRoleIds.maintenanceContact,
34389
34459
  type: ['location-contact'],
34390
34460
  name: 'maintenance-contact',
34391
- title: M$J('Maintenance Contact', 'مخاطب نگهداری'),
34392
- description: M$J('Contact for maintenance and repairs', 'مخاطب تعمیرات و نگهداری'),
34461
+ title: M$K('Maintenance Contact', 'مخاطب نگهداری'),
34462
+ description: M$K('Contact for maintenance and repairs', 'مخاطب تعمیرات و نگهداری'),
34393
34463
  },
34394
34464
  {
34395
34465
  id: contactRoleIds.securityContact,
34396
34466
  type: ['location-contact'],
34397
34467
  name: 'security-contact',
34398
- title: M$J('Security Contact', 'مخاطب امنیتی'),
34399
- description: M$J('Security-related contact', 'مخاطب امور امنیتی'),
34468
+ title: M$K('Security Contact', 'مخاطب امنیتی'),
34469
+ description: M$K('Security-related contact', 'مخاطب امور امنیتی'),
34400
34470
  },
34401
34471
  {
34402
34472
  id: contactRoleIds.receptionist,
34403
34473
  type: ['location-contact'],
34404
34474
  name: 'receptionist',
34405
- title: M$J('Receptionist', 'پذیرش'),
34406
- description: M$J('Front desk or reception contact', 'میز پذیرش'),
34475
+ title: M$K('Receptionist', 'پذیرش'),
34476
+ description: M$K('Front desk or reception contact', 'میز پذیرش'),
34407
34477
  },
34408
34478
  // Opportunity contact roles
34409
34479
  {
34410
34480
  id: contactRoleIds.decisionMaker,
34411
34481
  type: ['opportunity-contact'],
34412
34482
  name: 'decision-maker',
34413
- title: M$J('Decision Maker', 'تصمیم‌گیرنده'),
34414
- description: M$J('Key decision maker for the opportunity', 'تصمیم‌گیرنده کلیدی فرصت'),
34483
+ title: M$K('Decision Maker', 'تصمیم‌گیرنده'),
34484
+ description: M$K('Key decision maker for the opportunity', 'تصمیم‌گیرنده کلیدی فرصت'),
34415
34485
  },
34416
34486
  {
34417
34487
  id: contactRoleIds.influencer,
34418
34488
  type: ['opportunity-contact'],
34419
34489
  name: 'influencer',
34420
- title: M$J('Influencer', 'تأثیرگذار'),
34421
- description: M$J('Influences the decision', 'در تصمیم تأثیر دارد'),
34490
+ title: M$K('Influencer', 'تأثیرگذار'),
34491
+ description: M$K('Influences the decision', 'در تصمیم تأثیر دارد'),
34422
34492
  },
34423
34493
  {
34424
34494
  id: contactRoleIds.economicBuyer,
34425
34495
  type: ['opportunity-contact'],
34426
34496
  name: 'economic-buyer',
34427
- title: M$J('Economic Buyer', 'خریدار اقتصادی'),
34428
- description: M$J('Controls the budget', 'کنترل‌کننده بودجه'),
34497
+ title: M$K('Economic Buyer', 'خریدار اقتصادی'),
34498
+ description: M$K('Controls the budget', 'کنترل‌کننده بودجه'),
34429
34499
  },
34430
34500
  {
34431
34501
  id: contactRoleIds.user,
34432
34502
  type: ['opportunity-contact'],
34433
34503
  name: 'user',
34434
- title: M$J('User', 'کاربر'),
34435
- description: M$J('End user of the solution', 'کاربر نهایی راه‌حل'),
34504
+ title: M$K('User', 'کاربر'),
34505
+ description: M$K('End user of the solution', 'کاربر نهایی راه‌حل'),
34436
34506
  },
34437
34507
  // Party contact roles
34438
34508
  {
34439
34509
  id: contactRoleIds.primaryContact,
34440
34510
  type: ['party-contact'],
34441
34511
  name: 'primary-contact',
34442
- title: M$J('Primary Contact', 'مخاطب اصلی'),
34443
- description: M$J('Main point of contact for the party', 'نقطه تماس اصلی طرف'),
34512
+ title: M$K('Primary Contact', 'مخاطب اصلی'),
34513
+ description: M$K('Main point of contact for the party', 'نقطه تماس اصلی طرف'),
34444
34514
  },
34445
34515
  {
34446
34516
  id: contactRoleIds.accountManager,
34447
34517
  type: ['party-contact'],
34448
34518
  name: 'account-manager',
34449
- title: M$J('Account Manager', 'مدیر حساب'),
34450
- description: M$J('Manages the account relationship', 'مدیریت رابطه حساب'),
34519
+ title: M$K('Account Manager', 'مدیر حساب'),
34520
+ description: M$K('Manages the account relationship', 'مدیریت رابطه حساب'),
34451
34521
  },
34452
34522
  {
34453
34523
  id: contactRoleIds.billingContact,
34454
34524
  type: ['party-contact'],
34455
34525
  name: 'billing-contact',
34456
- title: M$J('Billing Contact', 'مخاطب صورتحساب'),
34457
- description: M$J('Contact for billing and invoicing', 'مخاطب صورتحساب و فاکتور'),
34526
+ title: M$K('Billing Contact', 'مخاطب صورتحساب'),
34527
+ description: M$K('Contact for billing and invoicing', 'مخاطب صورتحساب و فاکتور'),
34458
34528
  },
34459
34529
  {
34460
34530
  id: contactRoleIds.technicalContact,
34461
34531
  type: ['party-contact'],
34462
34532
  name: 'technical-contact',
34463
- title: M$J('Technical Contact', 'مخاطب فنی'),
34464
- description: M$J('Technical contact for the party', 'مخاطب فنی طرف'),
34533
+ title: M$K('Technical Contact', 'مخاطب فنی'),
34534
+ description: M$K('Technical contact for the party', 'مخاطب فنی طرف'),
34465
34535
  },
34466
34536
  {
34467
34537
  id: contactRoleIds.salesContact,
34468
34538
  type: ['party-contact'],
34469
34539
  name: 'sales-contact',
34470
- title: M$J('Sales Contact', 'مخاطب فروش'),
34471
- description: M$J('Sales contact for the party', 'مخاطب فروش طرف'),
34540
+ title: M$K('Sales Contact', 'مخاطب فروش'),
34541
+ description: M$K('Sales contact for the party', 'مخاطب فروش طرف'),
34472
34542
  },
34473
34543
  // Person-relationship roles (links between two people: employs, client-of, vendor-of, partner-of)
34474
34544
  {
34475
34545
  id: contactRoleIds.employs,
34476
34546
  type: ['person-relationship'],
34477
34547
  name: 'employs',
34478
- title: M$J('Employs', 'استخدام‌کننده'),
34479
- description: M$J('One person employs another person', 'یک نفر دیگری را استخدام می‌کند'),
34548
+ title: M$K('Employs', 'استخدام‌کننده'),
34549
+ description: M$K('One person employs another person', 'یک نفر دیگری را استخدام می‌کند'),
34480
34550
  },
34481
34551
  {
34482
34552
  id: contactRoleIds.clientOf,
34483
34553
  type: ['person-relationship'],
34484
34554
  name: 'client-of',
34485
- title: M$J('Client Of', 'کارفرمای'),
34486
- description: M$J('Client relationship from one person to another', 'رابطه کارفرمایی بین دو نفر'),
34555
+ title: M$K('Client Of', 'کارفرمای'),
34556
+ description: M$K('Client relationship from one person to another', 'رابطه کارفرمایی بین دو نفر'),
34487
34557
  },
34488
34558
  {
34489
34559
  id: contactRoleIds.vendorOf,
34490
34560
  type: ['person-relationship'],
34491
34561
  name: 'vendor-of',
34492
- title: M$J('Vendor Of', 'فروشندهٔ'),
34493
- description: M$J('Vendor relationship from one person to another', 'رابطه فروشنده بین دو نفر'),
34562
+ title: M$K('Vendor Of', 'فروشندهٔ'),
34563
+ description: M$K('Vendor relationship from one person to another', 'رابطه فروشنده بین دو نفر'),
34494
34564
  },
34495
34565
  {
34496
34566
  id: contactRoleIds.partnerOf,
34497
34567
  type: ['person-relationship'],
34498
34568
  name: 'partner-of',
34499
- title: M$J('Partner Of', 'شریک'),
34500
- description: M$J('Non-directional partnership between parties', 'شراکت بین طرفین'),
34569
+ title: M$K('Partner Of', 'شریک'),
34570
+ description: M$K('Non-directional partnership between parties', 'شراکت بین طرفین'),
34501
34571
  },
34502
34572
  // Family/kinship roles
34503
34573
  {
34504
34574
  id: contactRoleIds.mother,
34505
34575
  type: ['family'],
34506
34576
  name: 'mother',
34507
- title: M$J('Mother', 'مادر'),
34508
- description: M$J('Mother or maternal parent', 'مادر'),
34577
+ title: M$K('Mother', 'مادر'),
34578
+ description: M$K('Mother or maternal parent', 'مادر'),
34509
34579
  },
34510
34580
  {
34511
34581
  id: contactRoleIds.father,
34512
34582
  type: ['family'],
34513
34583
  name: 'father',
34514
- title: M$J('Father', 'پدر'),
34515
- description: M$J('Father or paternal parent', 'پدر'),
34584
+ title: M$K('Father', 'پدر'),
34585
+ description: M$K('Father or paternal parent', 'پدر'),
34516
34586
  },
34517
34587
  {
34518
34588
  id: contactRoleIds.sibling,
34519
34589
  type: ['family'],
34520
34590
  name: 'sibling',
34521
- title: M$J('Sibling', 'خواهر/برادر'),
34522
- description: M$J('Brother or sister', 'هم‌نژاد'),
34591
+ title: M$K('Sibling', 'خواهر/برادر'),
34592
+ description: M$K('Brother or sister', 'هم‌نژاد'),
34523
34593
  },
34524
34594
  {
34525
34595
  id: contactRoleIds.spouse,
34526
34596
  type: ['family'],
34527
34597
  name: 'spouse',
34528
- title: M$J('Spouse', 'همسر'),
34529
- description: M$J('Husband or wife', 'زوج'),
34598
+ title: M$K('Spouse', 'همسر'),
34599
+ description: M$K('Husband or wife', 'زوج'),
34530
34600
  },
34531
34601
  {
34532
34602
  id: contactRoleIds.child,
34533
34603
  type: ['family'],
34534
34604
  name: 'child',
34535
- title: M$J('Child', 'فرزند'),
34536
- description: M$J('Son or daughter', 'پسر یا دختر'),
34605
+ title: M$K('Child', 'فرزند'),
34606
+ description: M$K('Son or daughter', 'پسر یا دختر'),
34537
34607
  },
34538
34608
  {
34539
34609
  id: contactRoleIds.guardian,
34540
34610
  type: ['family'],
34541
34611
  name: 'guardian',
34542
- title: M$J('Guardian', 'سرپرست'),
34543
- description: M$J('Legal guardian or caregiver', 'سرپرست قانونی یا مراقب'),
34612
+ title: M$K('Guardian', 'سرپرست'),
34613
+ description: M$K('Legal guardian or caregiver', 'سرپرست قانونی یا مراقب'),
34544
34614
  },
34545
34615
  ];
34546
34616
 
34547
- const M$I = createMultiLanguageString;
34617
+ const M$J = createMultiLanguageString;
34548
34618
  const PARTY_CONTACT_ROLES = [
34549
34619
  contactRoleIds.primaryContact,
34550
34620
  contactRoleIds.accountManager,
@@ -34552,7 +34622,7 @@ const PARTY_CONTACT_ROLES = [
34552
34622
  contactRoleIds.technicalContact,
34553
34623
  contactRoleIds.salesContact,
34554
34624
  ];
34555
- const getRoleTitle$1 = (roleId) => contactRoleMocks.find((r) => r.id === roleId)?.title ?? M$I('Other', 'سایر');
34625
+ const getRoleTitle$1 = (roleId) => contactRoleMocks.find((r) => r.id === roleId)?.title ?? M$J('Other', 'سایر');
34556
34626
  const naturalPersonIds = Object.values(personNaturalIds);
34557
34627
  const createPartyContactMock = () => {
34558
34628
  const mock = [];
@@ -37148,7 +37218,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
37148
37218
  }] });
37149
37219
 
37150
37220
  //#region ---- Helpers ----
37151
- const M$H = createMultiLanguageString;
37221
+ const M$I = createMultiLanguageString;
37152
37222
  //#endregion
37153
37223
  //#region ---- Category ids ----
37154
37224
  const textTemplateCategoryIds = {
@@ -37164,48 +37234,48 @@ const textTemplateCategoryIds = {
37164
37234
  const textTemplateCategoryMocks = [
37165
37235
  {
37166
37236
  id: textTemplateCategoryIds.order,
37167
- title: M$H('Order', 'سفارش'),
37168
- description: M$H('Order-related templates (confirmation, shipping, etc.)', 'الگوهای مرتبط با سفارش (تأیید، ارسال و غیره)'),
37237
+ title: M$I('Order', 'سفارش'),
37238
+ description: M$I('Order-related templates (confirmation, shipping, etc.)', 'الگوهای مرتبط با سفارش (تأیید، ارسال و غیره)'),
37169
37239
  icon: 'fa-light fa-shopping-cart',
37170
37240
  color: '#3b82f6',
37171
37241
  childrenCount: 0,
37172
37242
  },
37173
37243
  {
37174
37244
  id: textTemplateCategoryIds.authentication,
37175
- title: M$H('Authentication', 'احراز هویت'),
37176
- description: M$H('Authentication and security templates (welcome, password reset, etc.)', 'الگوهای احراز هویت و امنیت (خوش‌آمدگویی، بازیابی رمز عبور و غیره)'),
37245
+ title: M$I('Authentication', 'احراز هویت'),
37246
+ description: M$I('Authentication and security templates (welcome, password reset, etc.)', 'الگوهای احراز هویت و امنیت (خوش‌آمدگویی، بازیابی رمز عبور و غیره)'),
37177
37247
  icon: 'fa-light fa-key',
37178
37248
  color: '#10b981',
37179
37249
  childrenCount: 0,
37180
37250
  },
37181
37251
  {
37182
37252
  id: textTemplateCategoryIds.marketing,
37183
- title: M$H('Marketing', 'بازاریابی'),
37184
- description: M$H('Marketing and promotion templates', 'الگوهای بازاریابی و تبلیغات'),
37253
+ title: M$I('Marketing', 'بازاریابی'),
37254
+ description: M$I('Marketing and promotion templates', 'الگوهای بازاریابی و تبلیغات'),
37185
37255
  icon: 'fa-light fa-megaphone',
37186
37256
  color: '#f59e0b',
37187
37257
  childrenCount: 0,
37188
37258
  },
37189
37259
  {
37190
37260
  id: textTemplateCategoryIds.broadcast,
37191
- title: M$H('Employee communications', 'ارتباطات کارکنان'),
37192
- description: M$H('Templates for employee-facing messages across email, SMS, push, and other channels (e.g. seasonal greetings, announcements)', 'الگوهای پیام‌های کارکنان در ایمیل، پیامک، اعلان فشاری و سایر کانال‌ها (مثلاً تبریک‌های فصلی، اعلان‌ها)'),
37261
+ title: M$I('Employee communications', 'ارتباطات کارکنان'),
37262
+ description: M$I('Templates for employee-facing messages across email, SMS, push, and other channels (e.g. seasonal greetings, announcements)', 'الگوهای پیام‌های کارکنان در ایمیل، پیامک، اعلان فشاری و سایر کانال‌ها (مثلاً تبریک‌های فصلی، اعلان‌ها)'),
37193
37263
  icon: 'fa-light fa-bullhorn',
37194
37264
  color: '#e11d48',
37195
37265
  childrenCount: 0,
37196
37266
  },
37197
37267
  {
37198
37268
  id: textTemplateCategoryIds.transactional,
37199
- title: M$H('Transactional', 'تراکنشی'),
37200
- description: M$H('Transactional notification templates', 'الگوهای اعلان تراکنشی'),
37269
+ title: M$I('Transactional', 'تراکنشی'),
37270
+ description: M$I('Transactional notification templates', 'الگوهای اعلان تراکنشی'),
37201
37271
  icon: 'fa-light fa-bell',
37202
37272
  color: '#8b5cf6',
37203
37273
  childrenCount: 0,
37204
37274
  },
37205
37275
  {
37206
37276
  id: textTemplateCategoryIds.support,
37207
- title: M$H('Support', 'پشتیبانی'),
37208
- description: M$H('Customer support and help desk templates', 'الگوهای پشتیبانی مشتری و میز راهنما'),
37277
+ title: M$I('Support', 'پشتیبانی'),
37278
+ description: M$I('Customer support and help desk templates', 'الگوهای پشتیبانی مشتری و میز راهنما'),
37209
37279
  icon: 'fa-light fa-headset',
37210
37280
  color: '#ec4899',
37211
37281
  childrenCount: 0,
@@ -37228,30 +37298,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
37228
37298
  }] });
37229
37299
 
37230
37300
  //#region ---- Helpers ----
37231
- const M$G = createMultiLanguageString;
37232
- const getCategoryTitle$4 = (id) => textTemplateCategoryMocks.find((c) => c.id === id)?.title ?? M$G('', '');
37301
+ const M$H = createMultiLanguageString;
37302
+ const getCategoryTitle$4 = (id) => textTemplateCategoryMocks.find((c) => c.id === id)?.title ?? M$H('', '');
37233
37303
  //#endregion
37234
37304
  //#region ---- Seed data ----
37235
37305
  const TEXT_TEMPLATES = [
37236
37306
  {
37237
37307
  id: AXPDataGenerator.uuid(),
37238
37308
  name: 'order-confirmation',
37239
- title: M$G('Order Confirmation', 'تأیید سفارش'),
37309
+ title: M$H('Order Confirmation', 'تأیید سفارش'),
37240
37310
  categoryIds: [textTemplateCategoryIds.order],
37241
37311
  categories: [
37242
37312
  { id: textTemplateCategoryIds.order, title: getCategoryTitle$4(textTemplateCategoryIds.order) },
37243
37313
  ],
37244
37314
  channels: {
37245
37315
  email: {
37246
- subject: M$G('Order {{orderId}} Confirmed', 'سفارش {{orderId}} تأیید شد'),
37247
- body: M$G('Dear {{customerName}},\n\nYour order {{orderId}} has been confirmed. Total: {{totalAmount}}.\n\nThank you for your purchase!', '{{customerName}} گرامی،\n\nسفارش {{orderId}} شما تأیید شد. جمع: {{totalAmount}}.\n\nاز خرید شما سپاسگزاریم!'),
37316
+ subject: M$H('Order {{orderId}} Confirmed', 'سفارش {{orderId}} تأیید شد'),
37317
+ body: M$H('Dear {{customerName}},\n\nYour order {{orderId}} has been confirmed. Total: {{totalAmount}}.\n\nThank you for your purchase!', '{{customerName}} گرامی،\n\nسفارش {{orderId}} شما تأیید شد. جمع: {{totalAmount}}.\n\nاز خرید شما سپاسگزاریم!'),
37248
37318
  },
37249
37319
  },
37250
37320
  },
37251
37321
  {
37252
37322
  id: AXPDataGenerator.uuid(),
37253
37323
  name: 'welcome-sms',
37254
- title: M$G('Welcome SMS', 'پیامک خوش‌آمدگویی'),
37324
+ title: M$H('Welcome SMS', 'پیامک خوش‌آمدگویی'),
37255
37325
  categoryIds: [textTemplateCategoryIds.authentication],
37256
37326
  categories: [
37257
37327
  {
@@ -37261,14 +37331,14 @@ const TEXT_TEMPLATES = [
37261
37331
  ],
37262
37332
  channels: {
37263
37333
  sms: {
37264
- body: M$G('Welcome {{customerName}}! Thank you for signing up. Your code: {{verificationCode}}', '{{customerName}} عزیز، خوش آمدید! از ثبت‌نام شما سپاسگزاریم. کد شما: {{verificationCode}}'),
37334
+ body: M$H('Welcome {{customerName}}! Thank you for signing up. Your code: {{verificationCode}}', '{{customerName}} عزیز، خوش آمدید! از ثبت‌نام شما سپاسگزاریم. کد شما: {{verificationCode}}'),
37265
37335
  },
37266
37336
  },
37267
37337
  },
37268
37338
  {
37269
37339
  id: AXPDataGenerator.uuid(),
37270
37340
  name: 'password-reset',
37271
- title: M$G('Password Reset', 'بازیابی رمز عبور'),
37341
+ title: M$H('Password Reset', 'بازیابی رمز عبور'),
37272
37342
  categoryIds: [textTemplateCategoryIds.authentication],
37273
37343
  categories: [
37274
37344
  {
@@ -37278,33 +37348,33 @@ const TEXT_TEMPLATES = [
37278
37348
  ],
37279
37349
  channels: {
37280
37350
  email: {
37281
- subject: M$G('Reset Your Password', 'بازیابی رمز عبور'),
37282
- body: M$G('<p>Hello {{userName}},</p><p>Click the link below to reset your password:</p><p><a href="{{resetLink}}">Reset Password</a></p><p>This link expires in {{expiryMinutes}} minutes.</p>', '<p>{{userName}} گرامی،</p><p>برای بازنشانی رمز عبور روی پیوند زیر کلیک کنید:</p><p><a href="{{resetLink}}">بازنشانی رمز عبور</a></p><p>این پیوند تا {{expiryMinutes}} دقیقه معتبر است.</p>'),
37351
+ subject: M$H('Reset Your Password', 'بازیابی رمز عبور'),
37352
+ body: M$H('<p>Hello {{userName}},</p><p>Click the link below to reset your password:</p><p><a href="{{resetLink}}">Reset Password</a></p><p>This link expires in {{expiryMinutes}} minutes.</p>', '<p>{{userName}} گرامی،</p><p>برای بازنشانی رمز عبور روی پیوند زیر کلیک کنید:</p><p><a href="{{resetLink}}">بازنشانی رمز عبور</a></p><p>این پیوند تا {{expiryMinutes}} دقیقه معتبر است.</p>'),
37283
37353
  },
37284
37354
  },
37285
37355
  },
37286
37356
  {
37287
37357
  id: AXPDataGenerator.uuid(),
37288
37358
  name: 'shipping-notification',
37289
- title: M$G('Shipping Notification', 'اعلان ارسال'),
37359
+ title: M$H('Shipping Notification', 'اعلان ارسال'),
37290
37360
  categoryIds: [textTemplateCategoryIds.order],
37291
37361
  categories: [
37292
37362
  { id: textTemplateCategoryIds.order, title: getCategoryTitle$4(textTemplateCategoryIds.order) },
37293
37363
  ],
37294
37364
  channels: {
37295
37365
  email: {
37296
- subject: M$G('Your Order {{orderId}} Has Shipped', 'سفارش {{orderId}} شما ارسال شد'),
37297
- body: M$G('<p>Hi {{customerName}},</p><p>Great news! Your order {{orderId}} has shipped.</p><p>Tracking number: {{trackingNumber}}</p><p>Ship to: {{shippingAddress}}</p><p>Thank you for your purchase!</p>', '<p>{{customerName}} عزیز،</p><p>سفارش {{orderId}} شما ارسال شد.</p><p>شماره پیگیری: {{trackingNumber}}</p><p>آدرس ارسال: {{shippingAddress}}</p><p>از خرید شما سپاسگزاریم!</p>'),
37366
+ subject: M$H('Your Order {{orderId}} Has Shipped', 'سفارش {{orderId}} شما ارسال شد'),
37367
+ body: M$H('<p>Hi {{customerName}},</p><p>Great news! Your order {{orderId}} has shipped.</p><p>Tracking number: {{trackingNumber}}</p><p>Ship to: {{shippingAddress}}</p><p>Thank you for your purchase!</p>', '<p>{{customerName}} عزیز،</p><p>سفارش {{orderId}} شما ارسال شد.</p><p>شماره پیگیری: {{trackingNumber}}</p><p>آدرس ارسال: {{shippingAddress}}</p><p>از خرید شما سپاسگزاریم!</p>'),
37298
37368
  },
37299
37369
  sms: {
37300
- body: M$G('Your order {{orderId}} shipped! Track: {{trackingNumber}}', 'سفارش {{orderId}} ارسال شد! پیگیری: {{trackingNumber}}'),
37370
+ body: M$H('Your order {{orderId}} shipped! Track: {{trackingNumber}}', 'سفارش {{orderId}} ارسال شد! پیگیری: {{trackingNumber}}'),
37301
37371
  },
37302
37372
  },
37303
37373
  },
37304
37374
  {
37305
37375
  id: AXPDataGenerator.uuid(),
37306
37376
  name: 'email-verification',
37307
- title: M$G('Email Verification', 'تأیید ایمیل'),
37377
+ title: M$H('Email Verification', 'تأیید ایمیل'),
37308
37378
  categoryIds: [textTemplateCategoryIds.authentication],
37309
37379
  categories: [
37310
37380
  {
@@ -37314,33 +37384,33 @@ const TEXT_TEMPLATES = [
37314
37384
  ],
37315
37385
  channels: {
37316
37386
  email: {
37317
- subject: M$G('Verify Your Email Address', 'تأیید آدرس ایمیل'),
37318
- body: M$G('<p>Hello {{userName}},</p><p>Please verify your email using this code: <strong>{{verificationCode}}</strong></p><p>This code expires in {{expiryMinutes}} minutes.</p>', '<p>{{userName}} گرامی،</p><p>با این کد ایمیل خود را تأیید کنید: <strong>{{verificationCode}}</strong></p><p>این کد تا {{expiryMinutes}} دقیقه معتبر است.</p>'),
37387
+ subject: M$H('Verify Your Email Address', 'تأیید آدرس ایمیل'),
37388
+ body: M$H('<p>Hello {{userName}},</p><p>Please verify your email using this code: <strong>{{verificationCode}}</strong></p><p>This code expires in {{expiryMinutes}} minutes.</p>', '<p>{{userName}} گرامی،</p><p>با این کد ایمیل خود را تأیید کنید: <strong>{{verificationCode}}</strong></p><p>این کد تا {{expiryMinutes}} دقیقه معتبر است.</p>'),
37319
37389
  },
37320
37390
  },
37321
37391
  },
37322
37392
  {
37323
37393
  id: AXPDataGenerator.uuid(),
37324
37394
  name: 'promotional-offer',
37325
- title: M$G('Promotional Offer', 'پیشنهاد تبلیغاتی'),
37395
+ title: M$H('Promotional Offer', 'پیشنهاد تبلیغاتی'),
37326
37396
  categoryIds: [textTemplateCategoryIds.marketing],
37327
37397
  categories: [
37328
37398
  { id: textTemplateCategoryIds.marketing, title: getCategoryTitle$4(textTemplateCategoryIds.marketing) },
37329
37399
  ],
37330
37400
  channels: {
37331
37401
  email: {
37332
- subject: M$G('Special Offer Just for You!', 'یک پیشنهاد ویژه برای شما!'),
37333
- body: M$G('<p>Hi {{customerName}},</p><p>As a valued customer, use code <strong>{{verificationCode}}</strong> for 10% off your next order!</p><p>Offer expires in {{expiryMinutes}} minutes. Shop now!</p>', '<p>{{customerName}} عزیز،</p><p>به‌عنوان مشتری ارزشمند، از کد <strong>{{verificationCode}}</strong> برای ۱۰٪ تخفیف سفارش بعدی استفاده کنید!</p><p>این پیشنهاد تا {{expiryMinutes}} دقیقه دیگر معتبر است. همین حالا خرید کنید!</p>'),
37402
+ subject: M$H('Special Offer Just for You!', 'یک پیشنهاد ویژه برای شما!'),
37403
+ body: M$H('<p>Hi {{customerName}},</p><p>As a valued customer, use code <strong>{{verificationCode}}</strong> for 10% off your next order!</p><p>Offer expires in {{expiryMinutes}} minutes. Shop now!</p>', '<p>{{customerName}} عزیز،</p><p>به‌عنوان مشتری ارزشمند، از کد <strong>{{verificationCode}}</strong> برای ۱۰٪ تخفیف سفارش بعدی استفاده کنید!</p><p>این پیشنهاد تا {{expiryMinutes}} دقیقه دیگر معتبر است. همین حالا خرید کنید!</p>'),
37334
37404
  },
37335
37405
  sms: {
37336
- body: M$G('Hi {{customerName}}! Use {{verificationCode}} for 10% off. Shop now!', '{{customerName}} عزیز! برای ۱۰٪ تخفیف از {{verificationCode}} استفاده کنید.'),
37406
+ body: M$H('Hi {{customerName}}! Use {{verificationCode}} for 10% off. Shop now!', '{{customerName}} عزیز! برای ۱۰٪ تخفیف از {{verificationCode}} استفاده کنید.'),
37337
37407
  },
37338
37408
  },
37339
37409
  },
37340
37410
  {
37341
37411
  id: AXPDataGenerator.uuid(),
37342
37412
  name: 'payment-reminder',
37343
- title: M$G('Payment Reminder', 'یادآوری پرداخت'),
37413
+ title: M$H('Payment Reminder', 'یادآوری پرداخت'),
37344
37414
  categoryIds: [textTemplateCategoryIds.transactional],
37345
37415
  categories: [
37346
37416
  {
@@ -37350,15 +37420,15 @@ const TEXT_TEMPLATES = [
37350
37420
  ],
37351
37421
  channels: {
37352
37422
  email: {
37353
- subject: M$G('Payment Reminder - Invoice {{invoiceNumber}}', 'یادآوری پرداخت — فاکتور {{invoiceNumber}}'),
37354
- body: M$G('<p>Hi {{customerName}},</p><p>This is a friendly reminder that payment of {{totalAmount}} for invoice {{invoiceNumber}} is due soon.</p><p>Thank you for your business.</p>', '<p>{{customerName}} گرامی،</p><p>یادآوری می‌کنیم که پرداخت مبلغ {{totalAmount}} برای فاکتور {{invoiceNumber}} نزدیک است.</p><p>از همکاری شما سپاسگزاریم.</p>'),
37423
+ subject: M$H('Payment Reminder - Invoice {{invoiceNumber}}', 'یادآوری پرداخت — فاکتور {{invoiceNumber}}'),
37424
+ body: M$H('<p>Hi {{customerName}},</p><p>This is a friendly reminder that payment of {{totalAmount}} for invoice {{invoiceNumber}} is due soon.</p><p>Thank you for your business.</p>', '<p>{{customerName}} گرامی،</p><p>یادآوری می‌کنیم که پرداخت مبلغ {{totalAmount}} برای فاکتور {{invoiceNumber}} نزدیک است.</p><p>از همکاری شما سپاسگزاریم.</p>'),
37355
37425
  },
37356
37426
  },
37357
37427
  },
37358
37428
  {
37359
37429
  id: AXPDataGenerator.uuid(),
37360
37430
  name: 'password-changed',
37361
- title: M$G('Password Changed Confirmation', 'تأیید تغییر رمز عبور'),
37431
+ title: M$H('Password Changed Confirmation', 'تأیید تغییر رمز عبور'),
37362
37432
  categoryIds: [textTemplateCategoryIds.authentication],
37363
37433
  categories: [
37364
37434
  {
@@ -37368,110 +37438,110 @@ const TEXT_TEMPLATES = [
37368
37438
  ],
37369
37439
  channels: {
37370
37440
  email: {
37371
- subject: M$G('Your Password Has Been Changed', 'رمز عبور شما تغییر کرد'),
37372
- body: M$G('<p>Hello {{userName}},</p><p>Your password was successfully changed. If you did not make this change, please contact support immediately.</p>', '<p>{{userName}} گرامی،</p><p>رمز عبور شما با موفقیت تغییر کرد. اگر این تغییر را انجام نداده‌اید، فوراً با پشتیبانی تماس بگیرید.</p>'),
37441
+ subject: M$H('Your Password Has Been Changed', 'رمز عبور شما تغییر کرد'),
37442
+ body: M$H('<p>Hello {{userName}},</p><p>Your password was successfully changed. If you did not make this change, please contact support immediately.</p>', '<p>{{userName}} گرامی،</p><p>رمز عبور شما با موفقیت تغییر کرد. اگر این تغییر را انجام نداده‌اید، فوراً با پشتیبانی تماس بگیرید.</p>'),
37373
37443
  },
37374
37444
  },
37375
37445
  },
37376
37446
  {
37377
37447
  id: AXPDataGenerator.uuid(),
37378
37448
  name: 'ticket-received',
37379
- title: M$G('Support Ticket Received', 'دریافت تیکت پشتیبانی'),
37449
+ title: M$H('Support Ticket Received', 'دریافت تیکت پشتیبانی'),
37380
37450
  categoryIds: [textTemplateCategoryIds.support],
37381
37451
  categories: [
37382
37452
  { id: textTemplateCategoryIds.support, title: getCategoryTitle$4(textTemplateCategoryIds.support) },
37383
37453
  ],
37384
37454
  channels: {
37385
37455
  email: {
37386
- subject: M$G('Support Ticket {{supportTicketId}} Received', 'تیکت پشتیبانی {{supportTicketId}} دریافت شد'),
37387
- body: M$G('<p>Hi {{customerName}},</p><p>We have received your support request (Ticket #{{supportTicketId}}).</p><p>Our team will get back to you soon. Your assigned agent is {{agentName}}.</p>', '<p>{{customerName}} گرامی،</p><p>درخواست پشتیبانی شما (تیکت شماره {{supportTicketId}}) دریافت شد.</p><p>تیم ما به‌زودی پاسخ می‌دهد. کارشناس شما: {{agentName}}.</p>'),
37456
+ subject: M$H('Support Ticket {{supportTicketId}} Received', 'تیکت پشتیبانی {{supportTicketId}} دریافت شد'),
37457
+ body: M$H('<p>Hi {{customerName}},</p><p>We have received your support request (Ticket #{{supportTicketId}}).</p><p>Our team will get back to you soon. Your assigned agent is {{agentName}}.</p>', '<p>{{customerName}} گرامی،</p><p>درخواست پشتیبانی شما (تیکت شماره {{supportTicketId}}) دریافت شد.</p><p>تیم ما به‌زودی پاسخ می‌دهد. کارشناس شما: {{agentName}}.</p>'),
37388
37458
  },
37389
37459
  },
37390
37460
  },
37391
37461
  {
37392
37462
  id: AXPDataGenerator.uuid(),
37393
37463
  name: 'ticket-resolved',
37394
- title: M$G('Support Ticket Resolved', 'تیکت پشتیبانی حل شد'),
37464
+ title: M$H('Support Ticket Resolved', 'تیکت پشتیبانی حل شد'),
37395
37465
  categoryIds: [textTemplateCategoryIds.support],
37396
37466
  categories: [
37397
37467
  { id: textTemplateCategoryIds.support, title: getCategoryTitle$4(textTemplateCategoryIds.support) },
37398
37468
  ],
37399
37469
  channels: {
37400
37470
  email: {
37401
- subject: M$G('Ticket {{supportTicketId}} Resolved', 'تیکت {{supportTicketId}} حل شد'),
37402
- body: M$G('<p>Hi {{customerName}},</p><p>Your support ticket {{supportTicketId}} has been resolved by {{agentName}}.</p><p>Thank you for contacting us!</p>', '<p>{{customerName}} گرامی،</p><p>تیکت پشتیبانی {{supportTicketId}} توسط {{agentName}} حل شد.</p><p>از تماس شما سپاسگزاریم!</p>'),
37471
+ subject: M$H('Ticket {{supportTicketId}} Resolved', 'تیکت {{supportTicketId}} حل شد'),
37472
+ body: M$H('<p>Hi {{customerName}},</p><p>Your support ticket {{supportTicketId}} has been resolved by {{agentName}}.</p><p>Thank you for contacting us!</p>', '<p>{{customerName}} گرامی،</p><p>تیکت پشتیبانی {{supportTicketId}} توسط {{agentName}} حل شد.</p><p>از تماس شما سپاسگزاریم!</p>'),
37403
37473
  },
37404
37474
  },
37405
37475
  },
37406
37476
  {
37407
37477
  id: AXPDataGenerator.uuid(),
37408
37478
  name: 'broadcast-valentines-day',
37409
- title: M$G("Valentine's Day — Employee Broadcast", 'روز ولنتاین — پیام سازمانی'),
37479
+ title: M$H("Valentine's Day — Employee Broadcast", 'روز ولنتاین — پیام سازمانی'),
37410
37480
  categoryIds: [textTemplateCategoryIds.broadcast],
37411
37481
  categories: [
37412
37482
  { id: textTemplateCategoryIds.broadcast, title: getCategoryTitle$4(textTemplateCategoryIds.broadcast) },
37413
37483
  ],
37414
37484
  channels: {
37415
37485
  email: {
37416
- subject: M$G("Happy Valentine's Day, {{employeeName}}!", '{{employeeName}} عزیز، روز ولنتاین مبارک!'),
37417
- body: M$G('<p>Dear {{employeeName}},</p><p>We wish you a wonderful Valentine\'s Day filled with kindness and appreciation. Thank you for everything you bring to our team.</p><p>With gratitude,<br/>Your organization</p>', '<p>{{employeeName}} گرامی،</p><p>برای شما روزی پر از مهربانی و قدردانی آرزومندیم. از همهٔ تلاش‌هایتان برای تیم سپاسگزاریم.</p><p>با احترام،<br/>سازمان شما</p>'),
37486
+ subject: M$H("Happy Valentine's Day, {{employeeName}}!", '{{employeeName}} عزیز، روز ولنتاین مبارک!'),
37487
+ body: M$H('<p>Dear {{employeeName}},</p><p>We wish you a wonderful Valentine\'s Day filled with kindness and appreciation. Thank you for everything you bring to our team.</p><p>With gratitude,<br/>Your organization</p>', '<p>{{employeeName}} گرامی،</p><p>برای شما روزی پر از مهربانی و قدردانی آرزومندیم. از همهٔ تلاش‌هایتان برای تیم سپاسگزاریم.</p><p>با احترام،<br/>سازمان شما</p>'),
37418
37488
  },
37419
37489
  sms: {
37420
- body: M$G("Happy Valentine's Day, {{employeeName}}! Thanks for being a valued part of our team.", '{{employeeName}} عزیز، روز ولنتاین مبارک! از حضور ارزشمندتان در تیم سپاسگزاریم.'),
37490
+ body: M$H("Happy Valentine's Day, {{employeeName}}! Thanks for being a valued part of our team.", '{{employeeName}} عزیز، روز ولنتاین مبارک! از حضور ارزشمندتان در تیم سپاسگزاریم.'),
37421
37491
  },
37422
37492
  whatsapp: {
37423
- body: M$G("Hi {{employeeName}}! Happy Valentine's Day from all of us. We appreciate you!", '{{employeeName}} گرامی! روز ولنتاین مبارک؛ از طرف همه دوستتان داریم.'),
37493
+ body: M$H("Hi {{employeeName}}! Happy Valentine's Day from all of us. We appreciate you!", '{{employeeName}} گرامی! روز ولنتاین مبارک؛ از طرف همه دوستتان داریم.'),
37424
37494
  },
37425
37495
  push: {
37426
- body: M$G("Happy Valentine's Day, {{employeeName}}!", '{{employeeName}} عزیز، روز ولنتاین مبارک!'),
37496
+ body: M$H("Happy Valentine's Day, {{employeeName}}!", '{{employeeName}} عزیز، روز ولنتاین مبارک!'),
37427
37497
  },
37428
37498
  },
37429
37499
  },
37430
37500
  {
37431
37501
  id: AXPDataGenerator.uuid(),
37432
37502
  name: 'broadcast-new-year',
37433
- title: M$G('New Year — Employee Broadcast', 'سال نو — پیام سازمانی'),
37503
+ title: M$H('New Year — Employee Broadcast', 'سال نو — پیام سازمانی'),
37434
37504
  categoryIds: [textTemplateCategoryIds.broadcast],
37435
37505
  categories: [
37436
37506
  { id: textTemplateCategoryIds.broadcast, title: getCategoryTitle$4(textTemplateCategoryIds.broadcast) },
37437
37507
  ],
37438
37508
  channels: {
37439
37509
  email: {
37440
- subject: M$G('Happy New Year, {{employeeName}}!', '{{employeeName}} عزیز، سال نو مبارک!'),
37441
- body: M$G('<p>Dear {{employeeName}},</p><p>As the year begins, we wish you health, success, and fresh opportunities. Thank you for your dedication—we look forward to achieving great things together.</p><p>Happy New Year!<br/>Your organization</p>', '<p>{{employeeName}} گرامی،</p><p>با آغاز سال، برای شما تندرستی، موفقیت و فرصت‌های تازه آرزومندیم. از تعهد شما سپاسگزاریم؛ در کنار هم به دستاوردهای خوب امیدواریم.</p><p>سال نو مبارک!<br/>سازمان شما</p>'),
37510
+ subject: M$H('Happy New Year, {{employeeName}}!', '{{employeeName}} عزیز، سال نو مبارک!'),
37511
+ body: M$H('<p>Dear {{employeeName}},</p><p>As the year begins, we wish you health, success, and fresh opportunities. Thank you for your dedication—we look forward to achieving great things together.</p><p>Happy New Year!<br/>Your organization</p>', '<p>{{employeeName}} گرامی،</p><p>با آغاز سال، برای شما تندرستی، موفقیت و فرصت‌های تازه آرزومندیم. از تعهد شما سپاسگزاریم؛ در کنار هم به دستاوردهای خوب امیدواریم.</p><p>سال نو مبارک!<br/>سازمان شما</p>'),
37442
37512
  },
37443
37513
  sms: {
37444
- body: M$G('Happy New Year, {{employeeName}}! Wishing you a successful year ahead from our whole team.', '{{employeeName}} عزیز، سال نو مبارک! آرزوی یک سال موفق از طرف تمام تیم.'),
37514
+ body: M$H('Happy New Year, {{employeeName}}! Wishing you a successful year ahead from our whole team.', '{{employeeName}} عزیز، سال نو مبارک! آرزوی یک سال موفق از طرف تمام تیم.'),
37445
37515
  },
37446
37516
  whatsapp: {
37447
- body: M$G('Hi {{employeeName}}! Happy New Year—wishing you and yours all the best.', '{{employeeName}} گرامی! سال نو مبارک؛ برای شما و خانواده‌تان بهترین‌ها را آرزومندیم.'),
37517
+ body: M$H('Hi {{employeeName}}! Happy New Year—wishing you and yours all the best.', '{{employeeName}} گرامی! سال نو مبارک؛ برای شما و خانواده‌تان بهترین‌ها را آرزومندیم.'),
37448
37518
  },
37449
37519
  push: {
37450
- body: M$G('Happy New Year, {{employeeName}}!', '{{employeeName}} عزیز، سال نو مبارک!'),
37520
+ body: M$H('Happy New Year, {{employeeName}}!', '{{employeeName}} عزیز، سال نو مبارک!'),
37451
37521
  },
37452
37522
  },
37453
37523
  },
37454
37524
  {
37455
37525
  id: AXPDataGenerator.uuid(),
37456
37526
  name: 'broadcast-holiday-season',
37457
- title: M$G('Holiday Season — Employee Broadcast', 'فصل تعطیلات — پیام سازمانی'),
37527
+ title: M$H('Holiday Season — Employee Broadcast', 'فصل تعطیلات — پیام سازمانی'),
37458
37528
  categoryIds: [textTemplateCategoryIds.broadcast],
37459
37529
  categories: [
37460
37530
  { id: textTemplateCategoryIds.broadcast, title: getCategoryTitle$4(textTemplateCategoryIds.broadcast) },
37461
37531
  ],
37462
37532
  channels: {
37463
37533
  email: {
37464
- subject: M$G('Season\'s greetings, {{employeeName}}', 'تبریک فصل، {{employeeName}} گرامی'),
37465
- body: M$G('<p>Dear {{employeeName}},</p><p>During this holiday season, we want to thank you for your hard work and wish you peace, joy, and time with those who matter most.</p><p>Warm regards,<br/>Your organization</p>', '<p>{{employeeName}} گرامی،</p><p>در این فصل تعطیلات از تلاش شما سپاسگزاریم و برایتان آرامش، شادی و اوقات خوب کنار عزیزانتان آرزومندیم.</p><p>با احترام،<br/>سازمان شما</p>'),
37534
+ subject: M$H('Season\'s greetings, {{employeeName}}', 'تبریک فصل، {{employeeName}} گرامی'),
37535
+ body: M$H('<p>Dear {{employeeName}},</p><p>During this holiday season, we want to thank you for your hard work and wish you peace, joy, and time with those who matter most.</p><p>Warm regards,<br/>Your organization</p>', '<p>{{employeeName}} گرامی،</p><p>در این فصل تعطیلات از تلاش شما سپاسگزاریم و برایتان آرامش، شادی و اوقات خوب کنار عزیزانتان آرزومندیم.</p><p>با احترام،<br/>سازمان شما</p>'),
37466
37536
  },
37467
37537
  sms: {
37468
- body: M$G('Season\'s greetings, {{employeeName}}! Thank you for a great year—we appreciate you.', 'تبریک فصل، {{employeeName}} عزیز! از شما بابت سالی پر تلاش سپاسگزاریم.'),
37538
+ body: M$H('Season\'s greetings, {{employeeName}}! Thank you for a great year—we appreciate you.', 'تبریک فصل، {{employeeName}} عزیز! از شما بابت سالی پر تلاش سپاسگزاریم.'),
37469
37539
  },
37470
37540
  whatsapp: {
37471
- body: M$G('Hi {{employeeName}}! Wishing you a joyful holiday season and a restful break.', '{{employeeName}} گرامی! فصل تعطیلات شادی‌بخش و استراحتی دلچسب برایتان آرزومندیم.'),
37541
+ body: M$H('Hi {{employeeName}}! Wishing you a joyful holiday season and a restful break.', '{{employeeName}} گرامی! فصل تعطیلات شادی‌بخش و استراحتی دلچسب برایتان آرزومندیم.'),
37472
37542
  },
37473
37543
  push: {
37474
- body: M$G('Season\'s greetings, {{employeeName}}!', 'تبریک فصل، {{employeeName}} عزیز!'),
37544
+ body: M$H('Season\'s greetings, {{employeeName}}!', 'تبریک فصل، {{employeeName}} عزیز!'),
37475
37545
  },
37476
37546
  },
37477
37547
  },
@@ -37587,6 +37657,30 @@ function axcExtractAssistIdFromMetadata(metadata) {
37587
37657
  }
37588
37658
  return undefined;
37589
37659
  }
37660
+ /**
37661
+ * Resolves direct agent id from conversation metadata (agent-as-assist chat).
37662
+ */
37663
+ function axcExtractDirectAgentIdFromMetadata(metadata) {
37664
+ if (!metadata) {
37665
+ return undefined;
37666
+ }
37667
+ const direct = metadata['directAgentId'];
37668
+ if (typeof direct === 'string' && direct.trim()) {
37669
+ return direct.trim();
37670
+ }
37671
+ const nested = metadata['metadata'];
37672
+ if (nested && typeof nested === 'object' && nested !== null) {
37673
+ const inner = nested['directAgentId'];
37674
+ if (typeof inner === 'string' && inner.trim()) {
37675
+ return inner.trim();
37676
+ }
37677
+ }
37678
+ return undefined;
37679
+ }
37680
+ /** True when the conversation targets an assist catalog row or a direct agent-as-assist chat. */
37681
+ function axcConversationHasAiChat(metadata) {
37682
+ return !!(axcExtractAssistIdFromMetadata(metadata) ?? axcExtractDirectAgentIdFromMetadata(metadata));
37683
+ }
37590
37684
  //#endregion
37591
37685
 
37592
37686
  //#region ---- Imports ----
@@ -37686,10 +37780,14 @@ class AXCConversationMockConversationApi extends AXMChatConversationApi {
37686
37780
  await this.ensureAssistPeerParticipants(data);
37687
37781
  const rawMetadata = (data.metadata ?? {});
37688
37782
  const resolvedAssistId = axcExtractAssistIdFromMetadata(rawMetadata);
37783
+ const resolvedDirectAgentId = axcExtractDirectAgentIdFromMetadata(rawMetadata);
37689
37784
  const storedMetadata = { ...rawMetadata };
37690
37785
  if (resolvedAssistId) {
37691
37786
  storedMetadata['assistId'] = resolvedAssistId;
37692
37787
  }
37788
+ if (resolvedDirectAgentId) {
37789
+ storedMetadata['directAgentId'] = resolvedDirectAgentId;
37790
+ }
37693
37791
  const createPayload = data;
37694
37792
  const conversation = {
37695
37793
  id: `conv-${Date.now()}`,
@@ -37908,14 +38006,16 @@ class AXCConversationMockConversationApi extends AXMChatConversationApi {
37908
38006
  await conversationSharedStorage.loadFromIndexedDB();
37909
38007
  const meta = (data.metadata ?? {});
37910
38008
  const assistId = axcExtractAssistIdFromMetadata(meta);
38009
+ const directAgentId = axcExtractDirectAgentIdFromMetadata(meta);
38010
+ const catalogPeerId = directAgentId ?? assistId;
37911
38011
  for (const participantId of data.participantIds) {
37912
38012
  if (conversationSharedStorage.participants.get(participantId)) {
37913
38013
  continue;
37914
38014
  }
37915
- if ((data.type !== 'private' && data.type !== 'bot') || !assistId) {
38015
+ if ((data.type !== 'private' && data.type !== 'bot') || !catalogPeerId) {
37916
38016
  continue;
37917
38017
  }
37918
- const expectedParticipantId = `assist-${assistId}`;
38018
+ const expectedParticipantId = `assist-${catalogPeerId}`;
37919
38019
  if (participantId !== expectedParticipantId) {
37920
38020
  continue;
37921
38021
  }
@@ -37927,7 +38027,9 @@ class AXCConversationMockConversationApi extends AXMChatConversationApi {
37927
38027
  avatar: typeof avatar === 'string' ? avatar : undefined,
37928
38028
  status: 'online',
37929
38029
  lastSeen: new Date(),
37930
- metadata: { assistId: assistId, kind: 'assist' },
38030
+ metadata: directAgentId
38031
+ ? { directAgentId, kind: 'agent-assist' }
38032
+ : { assistId: catalogPeerId, kind: 'assist' },
37931
38033
  };
37932
38034
  conversationSharedStorage.participants.set(participantId, participant);
37933
38035
  await axConversationIndexedDbStorage.putParticipant(participant);
@@ -37959,6 +38061,9 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
37959
38061
  this.assistRowData = this.entityService
37960
38062
  .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)
37961
38063
  .data();
38064
+ this.agentRowData = this.entityService
38065
+ .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)
38066
+ .data();
37962
38067
  }
37963
38068
  //#endregion
37964
38069
  //#region ---- Message CRUD ----
@@ -37989,9 +38094,9 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
37989
38094
  console.warn('Failed to generate assist conversation title:', error);
37990
38095
  });
37991
38096
  }
37992
- const assistId = this.getAssistId(command.conversationId);
37993
- if (assistId) {
37994
- void this.generateAssistResponse(command.conversationId, assistId).catch((error) => {
38097
+ const aiTarget = this.getAiChatTarget(command.conversationId);
38098
+ if (aiTarget) {
38099
+ void this.generateAiChatResponse(command.conversationId, aiTarget).catch((error) => {
37995
38100
  console.error('Failed to generate assist response:', error);
37996
38101
  this.toastService.show({
37997
38102
  color: 'warning',
@@ -38088,7 +38193,9 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38088
38193
  }
38089
38194
  if (rec['type'] === 'node') {
38090
38195
  try {
38091
- return JSON.stringify(rec['content'] ?? '').toLowerCase().includes(lowerQuery);
38196
+ return JSON.stringify(rec['content'] ?? '')
38197
+ .toLowerCase()
38198
+ .includes(lowerQuery);
38092
38199
  }
38093
38200
  catch {
38094
38201
  return false;
@@ -38505,11 +38612,18 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38505
38612
  //
38506
38613
  // Streaming/final payloads may include Persian or other RTL text; the assist message renderer
38507
38614
  // applies per-segment `dir` from content (no mock-side metadata required).
38508
- getAssistId(conversationId) {
38615
+ getAiChatTarget(conversationId) {
38509
38616
  const conversation = conversationSharedStorage.conversations.get(conversationId);
38510
38617
  const meta = conversation?.metadata;
38511
- const resolved = axcExtractAssistIdFromMetadata(meta);
38512
- return resolved ?? null;
38618
+ const directAgentId = axcExtractDirectAgentIdFromMetadata(meta);
38619
+ if (directAgentId) {
38620
+ return { peerId: directAgentId, directAgentId };
38621
+ }
38622
+ const assistId = axcExtractAssistIdFromMetadata(meta);
38623
+ if (assistId) {
38624
+ return { peerId: assistId, assistId };
38625
+ }
38626
+ return null;
38513
38627
  }
38514
38628
  shouldGenerateAssistConversationTitle(command, message) {
38515
38629
  if (message.senderId !== conversationSharedStorage.currentUserId) {
@@ -38526,8 +38640,8 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38526
38640
  if (!conversation) {
38527
38641
  return false;
38528
38642
  }
38529
- const assistId = this.getAssistId(command.conversationId);
38530
- if (!assistId) {
38643
+ const aiTarget = this.getAiChatTarget(command.conversationId);
38644
+ if (!aiTarget) {
38531
38645
  return false;
38532
38646
  }
38533
38647
  const userMessageCount = (conversationSharedStorage.messagesByConversation.get(command.conversationId) ?? [])
@@ -38544,11 +38658,11 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38544
38658
  if (!conversation) {
38545
38659
  return;
38546
38660
  }
38547
- const assistId = this.getAssistId(conversationId);
38548
- if (!assistId) {
38661
+ const aiTarget = this.getAiChatTarget(conversationId);
38662
+ if (!aiTarget) {
38549
38663
  return;
38550
38664
  }
38551
- const modelEntityId = await this.resolveModelEntityId(conversationId, assistId);
38665
+ const modelEntityId = await this.resolveModelEntityId(conversationId, aiTarget);
38552
38666
  if (!modelEntityId) {
38553
38667
  return;
38554
38668
  }
@@ -38567,7 +38681,9 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38567
38681
  `User message: ${firstUserText}`,
38568
38682
  ].join('\n');
38569
38683
  const runResult = await this.aiEngine.run({
38570
- assistId,
38684
+ ...(aiTarget.directAgentId
38685
+ ? { directAgentId: aiTarget.directAgentId }
38686
+ : { assistId: aiTarget.assistId }),
38571
38687
  modelEntityId,
38572
38688
  maxSteps: 1,
38573
38689
  messages: [axpAiChatTextMessage('user', titlePrompt)],
@@ -38603,35 +38719,35 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38603
38719
  .trim();
38604
38720
  return normalized.slice(0, 90).trim();
38605
38721
  }
38606
- async generateAssistResponse(conversationId, assistId) {
38722
+ async generateAiChatResponse(conversationId, target) {
38607
38723
  const conversation = conversationSharedStorage.conversations.get(conversationId);
38608
38724
  if (!conversation)
38609
38725
  return;
38610
- const assistParticipantId = this.getAssistParticipantId(conversation, assistId);
38726
+ const assistParticipantId = this.getAssistParticipantId(conversation, target.peerId);
38611
38727
  if (!assistParticipantId)
38612
38728
  return;
38613
38729
  this.setConversationTyping(conversationId, assistParticipantId, true);
38614
- const placeholderMsg = this.createPlaceholderMessage(conversationId, assistParticipantId, assistId);
38730
+ const placeholderMsg = this.createPlaceholderMessage(conversationId, assistParticipantId, target);
38615
38731
  this.publishPlaceholderMessage(placeholderMsg, conversationId);
38616
38732
  const runStartedAt = Date.now();
38617
38733
  let lastResolvedModelId;
38618
38734
  try {
38619
- const messages = await this.buildAiMessages(conversationId, assistParticipantId, assistId);
38620
- const modelEntityId = await this.resolveModelEntityId(conversationId, assistId);
38735
+ const messages = await this.buildAiMessages(conversationId, assistParticipantId, target);
38736
+ const modelEntityId = await this.resolveModelEntityId(conversationId, target);
38621
38737
  lastResolvedModelId = modelEntityId;
38622
38738
  if (!modelEntityId) {
38623
- this.finalizeMessage(placeholderMsg, 'No AI model available.', conversationId, [
38624
- axpAiChatTextMessage('assistant', 'No AI model available.'),
38625
- ], { durationMs: Date.now() - runStartedAt });
38739
+ this.finalizeMessage(placeholderMsg, 'No AI model available.', conversationId, [axpAiChatTextMessage('assistant', 'No AI model available.')], { durationMs: Date.now() - runStartedAt });
38626
38740
  return;
38627
38741
  }
38628
- const modelTitle = await this.resolveModelDisplayTitle(modelEntityId, assistId);
38742
+ const modelTitle = await this.resolveModelDisplayTitle(modelEntityId, target);
38629
38743
  let streamTextAccumulator = '';
38630
38744
  let streamThinkAccumulator = '';
38631
38745
  /** Context size sent into the engine; `run` appends only new assistant/tool lines after this. */
38632
38746
  const contextAiMessageCount = messages.length;
38633
38747
  const runResult = await this.aiEngine.run({
38634
- assistId,
38748
+ ...(target.directAgentId
38749
+ ? { directAgentId: target.directAgentId }
38750
+ : { assistId: target.assistId }),
38635
38751
  messages,
38636
38752
  modelEntityId,
38637
38753
  onRunEvent: (event) => {
@@ -38693,9 +38809,7 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38693
38809
  }
38694
38810
  catch (err) {
38695
38811
  const friendlyError = this.buildUserFriendlyError(err);
38696
- this.finalizeMessage(placeholderMsg, friendlyError, conversationId, [
38697
- axpAiChatTextMessage('assistant', friendlyError),
38698
- ], {
38812
+ this.finalizeMessage(placeholderMsg, friendlyError, conversationId, [axpAiChatTextMessage('assistant', friendlyError)], {
38699
38813
  durationMs: Date.now() - runStartedAt,
38700
38814
  modelEntityId: lastResolvedModelId,
38701
38815
  });
@@ -38707,7 +38821,7 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38707
38821
  }
38708
38822
  //#endregion
38709
38823
  //#region ---- Placeholder & Streaming ----
38710
- createPlaceholderMessage(conversationId, senderId, assistId) {
38824
+ createPlaceholderMessage(conversationId, senderId, target) {
38711
38825
  return {
38712
38826
  id: `msg-assist-${Date.now()}-${Math.floor(Math.random() * 10000)}`,
38713
38827
  conversationId,
@@ -38718,13 +38832,13 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38718
38832
  status: 'sent',
38719
38833
  reactions: [],
38720
38834
  metadata: {
38721
- assistId,
38835
+ ...(target.assistId ? { assistId: target.assistId } : {}),
38836
+ ...(target.directAgentId ? { directAgentId: target.directAgentId } : {}),
38722
38837
  isAssistResponse: true,
38723
38838
  isStreaming: true,
38724
38839
  toolCalls: [],
38725
38840
  streamDraftText: '',
38726
38841
  streamDraftThink: '',
38727
- aiTranscriptDraft: [],
38728
38842
  },
38729
38843
  };
38730
38844
  }
@@ -38734,8 +38848,6 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38734
38848
  const meta = next.metadata;
38735
38849
  meta['streamDraftText'] = text;
38736
38850
  meta['streamDraftThink'] = think;
38737
- next.payload = { type: 'text', text };
38738
- this.rebuildAiTranscriptDraft(next);
38739
38851
  this.emitMessageUpdate(next);
38740
38852
  }
38741
38853
  publishPlaceholderMessage(message, conversationId) {
@@ -38796,7 +38908,6 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38796
38908
  }
38797
38909
  entry.nestedStreamText = '';
38798
38910
  meta['toolCalls'] = toolCalls;
38799
- this.rebuildAiTranscriptDraft(next);
38800
38911
  this.emitMessageUpdate(next);
38801
38912
  }
38802
38913
  /** Appends streamed specialist text for a delegated agent run into that tool row (not the main bubble). */
@@ -38815,7 +38926,6 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38815
38926
  }
38816
38927
  entry.nestedStreamText = (entry.nestedStreamText ?? '') + delta;
38817
38928
  meta['toolCalls'] = toolCalls;
38818
- this.rebuildAiTranscriptDraft(next);
38819
38929
  this.emitMessageUpdate(next);
38820
38930
  }
38821
38931
  pushDelegatedNestedTool(message, delegationCallId, call) {
@@ -38834,7 +38944,6 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38834
38944
  const prev = entry.nestedTools ?? [];
38835
38945
  entry.nestedTools = [...prev, { id: call.id, name: call.name, arguments: call.arguments, state: 'running' }];
38836
38946
  meta['toolCalls'] = toolCalls;
38837
- this.rebuildAiTranscriptDraft(next);
38838
38947
  this.emitMessageUpdate(next);
38839
38948
  }
38840
38949
  completeDelegatedNestedTool(message, delegationCallId, call, output) {
@@ -38852,7 +38961,6 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38852
38961
  }
38853
38962
  entry.nestedTools = entry.nestedTools.map((t) => (t.id === call.id ? { ...t, state: 'done', output } : t));
38854
38963
  meta['toolCalls'] = toolCalls;
38855
- this.rebuildAiTranscriptDraft(next);
38856
38964
  this.emitMessageUpdate(next);
38857
38965
  }
38858
38966
  addToolCall(message, call) {
@@ -38862,7 +38970,6 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38862
38970
  const toolCalls = meta['toolCalls'] ?? [];
38863
38971
  toolCalls.push({ id: call.id, name: call.name, arguments: call.arguments, state: 'running' });
38864
38972
  meta['toolCalls'] = toolCalls;
38865
- this.rebuildAiTranscriptDraft(next);
38866
38973
  this.emitMessageUpdate(next);
38867
38974
  }
38868
38975
  completeToolCall(message, call, output) {
@@ -38877,123 +38984,24 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
38877
38984
  // Keep nestedStreamText / nestedTools for conversation UI after the run (same layout as during stream).
38878
38985
  }
38879
38986
  meta['toolCalls'] = toolCalls;
38880
- this.rebuildAiTranscriptDraft(next);
38881
38987
  this.emitMessageUpdate(next);
38882
38988
  }
38883
- /**
38884
- * Builds {@link AXPAiChatMessage} lines for the assist bot renderer while streaming.
38885
- */
38886
- rebuildAiTranscriptDraft(message) {
38887
- const meta = message.metadata;
38888
- const think = String(meta['streamDraftThink'] ?? '');
38889
- const text = String(meta['streamDraftText'] ?? '');
38890
- const toolCalls = meta['toolCalls'] ?? [];
38891
- const lines = [];
38892
- if (think.trim()) {
38893
- lines.push({
38894
- role: 'assistant',
38895
- responses: [{ type: 'think', content: think }],
38896
- });
38897
- }
38898
- for (const tc of toolCalls) {
38899
- const delegated = axpAiParseSupervisorAgentToolName(tc.name) != null;
38900
- lines.push({
38901
- role: 'assistant',
38902
- responses: [
38903
- delegated
38904
- ? {
38905
- type: 'agent',
38906
- callId: tc.id,
38907
- content: { command: tc.name, arguments: tc.arguments },
38908
- }
38909
- : {
38910
- type: 'tool',
38911
- callId: tc.id,
38912
- content: { command: tc.name, arguments: tc.arguments },
38913
- },
38914
- ],
38915
- });
38916
- if (tc.state === 'done' && tc.output != null && tc.output !== '') {
38917
- if (delegated) {
38918
- let body;
38919
- try {
38920
- const parsed = JSON.parse(tc.output);
38921
- if (parsed['success'] === false) {
38922
- body = {
38923
- success: false,
38924
- error: typeof parsed['error'] === 'string' && parsed['error'].trim()
38925
- ? parsed['error'].trim()
38926
- : 'Request failed.',
38927
- };
38928
- }
38929
- else {
38930
- const d = parsed['data'];
38931
- const parsedSegs = axpAiParseDelegatedAgentResultSegmentsFromUnknown(d?.['responses']);
38932
- body =
38933
- parsedSegs.length > 0
38934
- ? {
38935
- success: true,
38936
- data: {
38937
- ...(typeof d?.['agentName'] === 'string' ? { agentName: d['agentName'] } : {}),
38938
- ...(typeof d?.['agentId'] === 'string' ? { agentId: d['agentId'] } : {}),
38939
- responses: parsedSegs,
38940
- },
38941
- }
38942
- : {
38943
- success: true,
38944
- data: {
38945
- responses: [{ type: 'text', content: typeof tc.output === 'string' ? tc.output : '' }],
38946
- },
38947
- };
38948
- }
38949
- }
38950
- catch {
38951
- body = {
38952
- success: true,
38953
- data: { responses: [{ type: 'text', content: tc.output ?? '' }] },
38954
- };
38955
- }
38956
- lines.push(axpAiChatAgentResultMessage(tc.id, body, tc.name));
38957
- }
38958
- else {
38959
- let body;
38960
- try {
38961
- body = JSON.parse(tc.output);
38962
- }
38963
- catch {
38964
- body = { success: true, data: tc.output };
38965
- }
38966
- lines.push(axpAiChatToolResultMessage(tc.id, body, tc.name));
38967
- }
38968
- }
38969
- }
38970
- if (text.trim()) {
38971
- lines.push({
38972
- role: 'assistant',
38973
- responses: [{ type: 'text', content: text }],
38974
- });
38975
- }
38976
- meta['aiTranscriptDraft'] = lines;
38977
- }
38978
38989
  finalizeMessage(message, text, conversationId, transcript, runDebug) {
38979
38990
  const base = this.resolveStreamingAssistMessage(message);
38980
38991
  const next = this.snapshotStreamingAssistMessage(base);
38981
38992
  const transcriptLines = transcript ?? [];
38982
- const delivery = axmExtractAssistFinalDeliverableFromTranscript(transcriptLines, text);
38983
- if (delivery.kind === 'node') {
38984
- next.payload = { type: 'node', content: delivery.content };
38985
- }
38986
- else {
38987
- next.payload = { type: 'text', text: delivery.text };
38993
+ const lastLine = axmAssistLastTranscriptLine(transcriptLines);
38994
+ if (lastLine) {
38995
+ next.payload = axmBuildAssistTranscriptLinePayload(lastLine);
38988
38996
  }
38989
38997
  const meta = next.metadata;
38990
38998
  meta['isStreaming'] = false;
38991
- delete meta['aiTranscriptDraft'];
38999
+ delete meta['transcriptDraft'];
38992
39000
  delete meta['streamDraftText'];
38993
39001
  delete meta['streamDraftThink'];
38994
39002
  if (transcript && transcript.length > 0) {
38995
39003
  // Full turn trace for assist renderer after reload (IndexedDB + in-memory store).
38996
- meta['aiTranscript'] = transcript;
39004
+ meta['transcripts'] = transcript;
38997
39005
  }
38998
39006
  if (runDebug) {
38999
39007
  if (runDebug.usageTotals) {
@@ -39021,8 +39029,7 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
39021
39029
  else {
39022
39030
  delete meta['assistRunLastProviderResult'];
39023
39031
  }
39024
- if (runDebug.delegatedTranscriptsByCallId &&
39025
- Object.keys(runDebug.delegatedTranscriptsByCallId).length > 0) {
39032
+ if (runDebug.delegatedTranscriptsByCallId && Object.keys(runDebug.delegatedTranscriptsByCallId).length > 0) {
39026
39033
  meta['assistRunDelegatedTranscriptsByCallId'] = runDebug.delegatedTranscriptsByCallId;
39027
39034
  }
39028
39035
  else {
@@ -39045,9 +39052,11 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
39045
39052
  * Order: conversation `metadata.modelEntityId` (info bar / overrides), then assist row `modelId`, then first catalog chat model.
39046
39053
  * Empty-assist flow may send before the info bar writes `modelEntityId`, so assist `modelId` must be resolved here.
39047
39054
  */
39048
- async resolveModelDisplayTitle(modelEntityId, assistId) {
39055
+ async resolveModelDisplayTitle(modelEntityId, target) {
39049
39056
  try {
39050
- const models = await this.modelCatalog.listModels({ assistId });
39057
+ const models = await this.modelCatalog.listModels(target.directAgentId
39058
+ ? { directAgentId: target.directAgentId }
39059
+ : { assistId: target.assistId ?? '' });
39051
39060
  const hit = models.find((m) => m.id === modelEntityId);
39052
39061
  if (!hit) {
39053
39062
  return modelEntityId;
@@ -39060,14 +39069,32 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
39060
39069
  return undefined;
39061
39070
  }
39062
39071
  }
39063
- async resolveModelEntityId(conversationId, assistId) {
39072
+ async resolveModelEntityId(conversationId, target) {
39064
39073
  const conversation = conversationSharedStorage.conversations.get(conversationId);
39065
39074
  const fromMetadata = conversation?.metadata?.['modelEntityId'];
39066
39075
  if (typeof fromMetadata === 'string' && fromMetadata.trim()) {
39067
39076
  return fromMetadata.trim();
39068
39077
  }
39078
+ if (target.directAgentId) {
39079
+ try {
39080
+ const agent = await this.agentRowData.byKey(target.directAgentId.trim());
39081
+ const fromAgent = agent?.modelEntityId?.trim();
39082
+ if (fromAgent) {
39083
+ return fromAgent;
39084
+ }
39085
+ }
39086
+ catch {
39087
+ // Fall through to catalog default.
39088
+ }
39089
+ const models = await this.modelCatalog.listModels({ directAgentId: target.directAgentId });
39090
+ return models[0]?.id?.trim() || undefined;
39091
+ }
39092
+ const assistId = target.assistId?.trim();
39093
+ if (!assistId) {
39094
+ return undefined;
39095
+ }
39069
39096
  try {
39070
- const assist = await this.assistRowData.byKey(assistId.trim());
39097
+ const assist = await this.assistRowData.byKey(assistId);
39071
39098
  const fromAssist = assist?.modelId?.trim();
39072
39099
  if (fromAssist) {
39073
39100
  return fromAssist;
@@ -39084,10 +39111,10 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
39084
39111
  /**
39085
39112
  * Build chat lines for the AI engine. Only plain user/assistant text from each message
39086
39113
  * {@link #extractMessageText} is included — never assist message metadata
39087
- * (`toolCalls`, `aiTranscript`, `streamDraft*`, `assistUi`, etc.), so the model does not
39114
+ * (`toolCalls`, `transcripts`, `streamDraft*`, `assistUi`, etc.), so the model does not
39088
39115
  * see internal trace or UI state.
39089
39116
  */
39090
- async buildAiMessages(conversationId, assistParticipantId, assistId) {
39117
+ async buildAiMessages(conversationId, assistParticipantId, target) {
39091
39118
  const ids = conversationSharedStorage.messagesByConversation.get(conversationId) ?? [];
39092
39119
  const list = [];
39093
39120
  for (const id of ids) {
@@ -39100,8 +39127,9 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
39100
39127
  .filter((m) => !this.isStreamingPlaceholder(m))
39101
39128
  .map((m) => axpAiChatTextMessage(m.senderId === assistParticipantId ? 'assistant' : 'user', this.extractMessageText(m)));
39102
39129
  const hasAssistantTurn = mapped.some((m) => m.role === 'assistant');
39103
- if (!hasAssistantTurn && assistId.trim()) {
39104
- const row = await this.assistRowData.byKey(assistId.trim());
39130
+ const assistId = target.assistId?.trim();
39131
+ if (!hasAssistantTurn && assistId) {
39132
+ const row = await this.assistRowData.byKey(assistId);
39105
39133
  const seed = axpAiAssistInitialMessagesToTranscript(row?.initialMessages ?? undefined);
39106
39134
  if (seed.length > 0) {
39107
39135
  return [...seed, ...mapped];
@@ -39139,6 +39167,13 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
39139
39167
  const pl = message.payload;
39140
39168
  if (pl != null && typeof pl === 'object' && !Array.isArray(pl)) {
39141
39169
  const rec = pl;
39170
+ if (rec['type'] === AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE) {
39171
+ const line = rec['line'];
39172
+ if (line != null && typeof line === 'object' && !Array.isArray(line)) {
39173
+ return axpAiChatMessageGetText(line).trim() || '[Assistant response]';
39174
+ }
39175
+ return '[Assistant response]';
39176
+ }
39142
39177
  if (rec['type'] === 'node') {
39143
39178
  return '[Assistant widget]';
39144
39179
  }
@@ -39165,8 +39200,8 @@ class AXCConversationMockMessageApi extends AXMChatMessageApi {
39165
39200
  }
39166
39201
  //#endregion
39167
39202
  //#region ---- Assist Utilities ----
39168
- getAssistParticipantId(conversation, assistId) {
39169
- const expectedId = `assist-${assistId}`;
39203
+ getAssistParticipantId(conversation, peerId) {
39204
+ const expectedId = `assist-${peerId}`;
39170
39205
  const ids = (conversation.participants ?? []).map((p) => p.id);
39171
39206
  if (ids.includes(expectedId))
39172
39207
  return expectedId;
@@ -40997,6 +41032,223 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
40997
41032
  }]
40998
41033
  }] });
40999
41034
 
41035
+ const M$G = createMultiLanguageString;
41036
+ /** Stable ids referenced by {@link DASHBOARDS} `categoryIds`. */
41037
+ const DASHBOARD_CATEGORY_IDS = {
41038
+ tenant: 'dcat-tenant',
41039
+ personal: 'dcat-personal',
41040
+ };
41041
+ const DASHBOARD_CATEGORY_MOCK = [
41042
+ {
41043
+ id: DASHBOARD_CATEGORY_IDS.tenant,
41044
+ title: M$G('Tenant dashboards', 'داشبوردهای سازمانی'),
41045
+ description: M$G('Shared dashboards for the organization', 'داشبوردهای مشترک سازمان'),
41046
+ childrenCount: 0,
41047
+ },
41048
+ {
41049
+ id: DASHBOARD_CATEGORY_IDS.personal,
41050
+ title: M$G('Personal dashboards', 'داشبوردهای شخصی'),
41051
+ description: M$G('User-owned dashboards', 'داشبوردهای متعلق به کاربر'),
41052
+ childrenCount: 0,
41053
+ },
41054
+ ];
41055
+
41056
+ const M$F = createMultiLanguageString;
41057
+ const CONVERSATION_ONLY_ROLE_ID = mockRoleDefinitions.find((role) => role.name === 'conversation-only')?.id;
41058
+ if (!CONVERSATION_ONLY_ROLE_ID) {
41059
+ throw new Error('conversation-only role is required for MAGFA conversation dashboard mock');
41060
+ }
41061
+ /**
41062
+ * Tenant dashboard for MAGFA commerce users with conversation-only role.
41063
+ * Shortcuts: conversations list and Demis assist chat.
41064
+ */
41065
+ const MAGFA_CONVERSATION_DASHBOARD = {
41066
+ id: '35385219-9198-4dd6-9d34-1dece63649b5',
41067
+ title: M$F('Magfa', 'مگفا'),
41068
+ description: M$F('', ''),
41069
+ widgets: [
41070
+ {
41071
+ config: {
41072
+ id: '67f1f968-7ebf-4030-8823-851ce6ebb1ce',
41073
+ lg: {
41074
+ id: '67f1f968-7ebf-4030-8823-851ce6ebb1ce',
41075
+ height: 2,
41076
+ width: 2,
41077
+ minHeight: 1,
41078
+ minWidth: 1,
41079
+ maxHeight: 2,
41080
+ maxWidth: 3,
41081
+ x: 0,
41082
+ y: 0,
41083
+ },
41084
+ md: {
41085
+ id: '67f1f968-7ebf-4030-8823-851ce6ebb1ce',
41086
+ height: 2,
41087
+ width: 2,
41088
+ minHeight: 1,
41089
+ minWidth: 1,
41090
+ maxHeight: 2,
41091
+ maxWidth: 3,
41092
+ },
41093
+ sm: {
41094
+ id: '67f1f968-7ebf-4030-8823-851ce6ebb1ce',
41095
+ width: 1,
41096
+ height: 2,
41097
+ minHeight: 1,
41098
+ maxHeight: 2,
41099
+ },
41100
+ },
41101
+ node: {
41102
+ type: 'DashboardManagement:Widget:Dashboard:Shortcut',
41103
+ options: {
41104
+ color: '#541db9',
41105
+ item: {
41106
+ name: 'menu',
41107
+ title: '@conversation:module.menus.conversations.title',
41108
+ icon: 'fa-light fa-comments',
41109
+ command: {
41110
+ name: 'navigate',
41111
+ options: {
41112
+ type: 'router',
41113
+ options: {
41114
+ path: 'platform-console/chat',
41115
+ },
41116
+ },
41117
+ },
41118
+ },
41119
+ },
41120
+ meta: {
41121
+ dimensions: {
41122
+ lg: {
41123
+ width: 2,
41124
+ height: 2,
41125
+ minWidth: 1,
41126
+ minHeight: 1,
41127
+ maxWidth: 3,
41128
+ maxHeight: 2,
41129
+ },
41130
+ md: {
41131
+ width: 2,
41132
+ height: 2,
41133
+ minWidth: 1,
41134
+ minHeight: 1,
41135
+ maxWidth: 3,
41136
+ maxHeight: 2,
41137
+ },
41138
+ sm: {
41139
+ height: 2,
41140
+ minHeight: 1,
41141
+ maxHeight: 2,
41142
+ },
41143
+ },
41144
+ },
41145
+ name: 'DashboardManagement:Widget:Dashboard:Shortcut-c412f2e0-f3bd-493d-8522-55d1612fb476',
41146
+ path: 'DashboardManagement:Widget:Dashboard:Shortcut-c412f2e0-f3bd-493d-8522-55d1612fb476',
41147
+ },
41148
+ },
41149
+ {
41150
+ config: {
41151
+ id: '0237edf1-ab9f-4434-9a04-9639d3bb8fd3',
41152
+ lg: {
41153
+ id: '0237edf1-ab9f-4434-9a04-9639d3bb8fd3',
41154
+ height: 2,
41155
+ width: 3,
41156
+ minHeight: 1,
41157
+ minWidth: 1,
41158
+ maxHeight: 2,
41159
+ maxWidth: 3,
41160
+ x: 2,
41161
+ y: 0,
41162
+ },
41163
+ md: {
41164
+ id: '0237edf1-ab9f-4434-9a04-9639d3bb8fd3',
41165
+ height: 2,
41166
+ width: 2,
41167
+ minHeight: 1,
41168
+ minWidth: 1,
41169
+ maxHeight: 2,
41170
+ maxWidth: 3,
41171
+ },
41172
+ sm: {
41173
+ id: '0237edf1-ab9f-4434-9a04-9639d3bb8fd3',
41174
+ width: 1,
41175
+ height: 2,
41176
+ minHeight: 1,
41177
+ maxHeight: 2,
41178
+ },
41179
+ },
41180
+ node: {
41181
+ type: 'DashboardManagement:Widget:Dashboard:Shortcut',
41182
+ options: {
41183
+ color: '#2395b8',
41184
+ item: {
41185
+ name: 'conversation-assist',
41186
+ title: M$F('Demis', 'دیمیس'),
41187
+ description: M$F('Priority guide for the centralized commerce payment system. Assist should prefer delegating here whenever the topic is e-wallet or centralized payments (no platform command or query tools). Typical questions: paying via e-wallet, withdrawing from the wallet, charging or topping up the wallet, reporting and transaction history.', 'راهنمای اولویت‌دار سامانه پرداخت متمرکز تجارت؛ assist برای موضوعات کیف پول الکترونیک و پرداخت متمرکز باید تا حد ممکن این agent را فراخوانی کند (بدون ابزار فرمان یا پرس‌وجوی داخلی پلتفرم). نمونهٔ سوالات: نحوهٔ پرداخت از طریق کیف پول الکترونیک، برداشت از کیف پول، شارژ کیف پول، گزارش‌گیری و تاریخچهٔ تراکنش‌ها.'),
41188
+ icon: 'fa-solid fa-robot',
41189
+ command: {
41190
+ name: 'Conversation:StartAssistChat',
41191
+ options: {
41192
+ targetId: 'c0000001-0000-4000-8000-000000000009',
41193
+ targetKind: 'agent',
41194
+ },
41195
+ },
41196
+ },
41197
+ },
41198
+ meta: {
41199
+ dimensions: {
41200
+ lg: {
41201
+ width: 2,
41202
+ height: 2,
41203
+ minWidth: 1,
41204
+ minHeight: 1,
41205
+ maxWidth: 3,
41206
+ maxHeight: 2,
41207
+ },
41208
+ md: {
41209
+ width: 2,
41210
+ height: 2,
41211
+ minWidth: 1,
41212
+ minHeight: 1,
41213
+ maxWidth: 3,
41214
+ maxHeight: 2,
41215
+ },
41216
+ sm: {
41217
+ height: 2,
41218
+ minHeight: 1,
41219
+ maxHeight: 2,
41220
+ },
41221
+ },
41222
+ },
41223
+ name: 'DashboardManagement:Widget:Dashboard:Shortcut-e814c0bf-0d60-4dff-83db-da1a30736d92',
41224
+ path: 'DashboardManagement:Widget:Dashboard:Shortcut-e814c0bf-0d60-4dff-83db-da1a30736d92',
41225
+ },
41226
+ },
41227
+ ],
41228
+ roleIds: [CONVERSATION_ONLY_ROLE_ID],
41229
+ isArchived: false,
41230
+ userId: 'f0000001-0000-4000-a000-000000000003',
41231
+ auditInfo: {
41232
+ created: {
41233
+ at: new Date('2026-05-20T06:33:30.689Z'),
41234
+ by: {
41235
+ id: 'f0000001-0000-4000-a000-000000000003',
41236
+ type: 'user',
41237
+ },
41238
+ },
41239
+ updated: {
41240
+ at: new Date('2026-05-20T07:40:09.104Z'),
41241
+ by: {
41242
+ id: 'f0000001-0000-4000-a000-000000000003',
41243
+ type: 'user',
41244
+ },
41245
+ },
41246
+ },
41247
+ scope: 'T',
41248
+ categoryIds: [DASHBOARD_CATEGORY_IDS.tenant],
41249
+ locked: true,
41250
+ };
41251
+
41000
41252
  /**
41001
41253
  * Kept for compatibility with existing widget generators importing this helper.
41002
41254
  */
@@ -41009,12 +41261,15 @@ function createWidgetLayoutConfig(dimensions) {
41009
41261
  sm: { id, width: 1, ...(dimensions?.['sm'] ?? {}) },
41010
41262
  };
41011
41263
  }
41012
- const ALL_ROLE_IDS = mockRoleDefinitions.map((role) => role.id).filter((id) => typeof id === 'string');
41013
- const M$F = createMultiLanguageString;
41264
+ const ALL_ROLE_IDS = mockRoleDefinitions
41265
+ .filter((role) => role.name !== 'conversation-only')
41266
+ .map((role) => role.id)
41267
+ .filter((id) => typeof id === 'string');
41268
+ const M$E = createMultiLanguageString;
41014
41269
  const OPERATIONS_COCKPIT = {
41015
41270
  id: '13814a7a-2eab-4392-aeee-3b262fee0e7d',
41016
- title: M$F('Utility Dashboard', 'داشبورد ابزارها'),
41017
- description: M$F('Utility dashboard with shortcuts, task tracking and utility widgets for daily execution.', 'داشبورد کاربردی با میانبرها، پیگیری وظایف و ویجت های ابزار برای اجرای روزانه.'),
41271
+ title: M$E('Utility Dashboard', 'داشبورد ابزارها'),
41272
+ description: M$E('Utility dashboard with shortcuts, task tracking and utility widgets for daily execution.', 'داشبورد کاربردی با میانبرها، پیگیری وظایف و ویجت های ابزار برای اجرای روزانه.'),
41018
41273
  widgets: [
41019
41274
  {
41020
41275
  config: {
@@ -41623,8 +41878,8 @@ const OPERATIONS_COCKPIT = {
41623
41878
  };
41624
41879
  const EXECUTIVE_ANALYTICS = {
41625
41880
  id: '5180c813-c076-4c3c-baa3-53cb95748558',
41626
- title: M$F('Executive Analytics', 'تحلیل های مدیریتی'),
41627
- description: M$F('Cross-module analytics dashboard with charts, tasks and notifications from live project modules.', 'داشبورد تحلیلی بین ماژولی با نمودارها، وظایف و اعلان ها از ماژول های عملیاتی.'),
41881
+ title: M$E('Executive Analytics', 'تحلیل های مدیریتی'),
41882
+ description: M$E('Cross-module analytics dashboard with charts, tasks and notifications from live project modules.', 'داشبورد تحلیلی بین ماژولی با نمودارها، وظایف و اعلان ها از ماژول های عملیاتی.'),
41628
41883
  widgets: [
41629
41884
  {
41630
41885
  config: {
@@ -41879,7 +42134,11 @@ const EXECUTIVE_ANALYTICS = {
41879
42134
  categoryIds: ['dcat-tenant'],
41880
42135
  locked: true,
41881
42136
  };
41882
- const DASHBOARDS = [OPERATIONS_COCKPIT, EXECUTIVE_ANALYTICS];
42137
+ const DASHBOARDS = [
42138
+ OPERATIONS_COCKPIT,
42139
+ EXECUTIVE_ANALYTICS,
42140
+ MAGFA_CONVERSATION_DASHBOARD,
42141
+ ];
41883
42142
 
41884
42143
  class AXPDashboardDataSeeder {
41885
42144
  constructor() {
@@ -41895,27 +42154,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
41895
42154
  type: Injectable
41896
42155
  }] });
41897
42156
 
41898
- const M$E = createMultiLanguageString;
41899
- /** Stable ids referenced by {@link DASHBOARDS} `categoryIds`. */
41900
- const DASHBOARD_CATEGORY_IDS = {
41901
- tenant: 'dcat-tenant',
41902
- personal: 'dcat-personal',
41903
- };
41904
- const DASHBOARD_CATEGORY_MOCK = [
41905
- {
41906
- id: DASHBOARD_CATEGORY_IDS.tenant,
41907
- title: M$E('Tenant dashboards', 'داشبوردهای سازمانی'),
41908
- description: M$E('Shared dashboards for the organization', 'داشبوردهای مشترک سازمان'),
41909
- childrenCount: 0,
41910
- },
41911
- {
41912
- id: DASHBOARD_CATEGORY_IDS.personal,
41913
- title: M$E('Personal dashboards', 'داشبوردهای شخصی'),
41914
- description: M$E('User-owned dashboards', 'داشبوردهای متعلق به کاربر'),
41915
- childrenCount: 0,
41916
- },
41917
- ];
41918
-
41919
42157
  class AXMDashboardCategoryDataSeeder {
41920
42158
  constructor() {
41921
42159
  this.storage = inject(AXPEntityStorageService);
@@ -63244,16 +63482,32 @@ class AXPSecurityManagementRoleDataSeeder {
63244
63482
  constructor() {
63245
63483
  this.storageService = inject(AXPEntityStorageService);
63246
63484
  }
63247
- // private permissionService = inject(AXPPermissionDefinitionProviderService);
63248
63485
  async seed() {
63249
- // const permissions = await this.permissionService.permissions();
63250
- // const permissionKeys = permissions.map((p) => p.name);
63251
- // Generate roles with random permissions from the actual permission list
63486
+ const entityName = `${RootConfig$6.module.name}.${RootConfig$6.entities.roles.name}`;
63252
63487
  const roles = mockRoleDefinitions.map((role) => ({
63253
63488
  ...role,
63254
- // permissions: this.getRandomPermissions(permissionKeys, 2, 5), // Get 2-5 random permissions
63255
63489
  }));
63256
- await this.storageService.initial(`${RootConfig$6.module.name}.${RootConfig$6.entities.roles.name}`, roles);
63490
+ await this.storageService.initial(entityName, roles);
63491
+ // Dexie `initial()` skips the whole batch when any role name already exists,
63492
+ // so permission changes in role.mock.ts would never reach IndexedDB without this sync.
63493
+ await this.syncRolePermissionsFromMock(entityName);
63494
+ }
63495
+ /**
63496
+ * Updates permissions (and metadata) on seeded roles when mock definitions change.
63497
+ */
63498
+ async syncRolePermissionsFromMock(entityName) {
63499
+ const storedRoles = await this.storageService.getAll(entityName);
63500
+ for (const mockRole of mockRoleDefinitions) {
63501
+ const existing = storedRoles.find((role) => role.name === mockRole.name);
63502
+ if (!existing?.id) {
63503
+ continue;
63504
+ }
63505
+ await this.storageService.updateOne(entityName, existing.id, {
63506
+ permissions: mockRole.permissions ?? [],
63507
+ description: mockRole.description,
63508
+ title: mockRole.title,
63509
+ });
63510
+ }
63257
63511
  }
63258
63512
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSecurityManagementRoleDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63259
63513
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSecurityManagementRoleDataSeeder }); }
@@ -63277,7 +63531,29 @@ class AXPSecurityManagementUserDataSeeder {
63277
63531
  }
63278
63532
  async seed() {
63279
63533
  const entityName = `${RootConfig$6.module.name}.${RootConfig$6.entities.users.name}`;
63280
- await this.storageService.initial(`${RootConfig$6.module.name}.${RootConfig$6.entities.users.name}`, mockUsers);
63534
+ await this.storageService.initial(entityName, mockUsers);
63535
+ await this.syncCollaborationDemoUserRoles(entityName);
63536
+ }
63537
+ /**
63538
+ * Keeps MAGFA collaboration demo user aligned with the conversation-only role in storage.
63539
+ */
63540
+ async syncCollaborationDemoUserRoles(usersEntityName) {
63541
+ const rolesEntityName = `${RootConfig$6.module.name}.${RootConfig$6.entities.roles.name}`;
63542
+ const storedRoles = await this.storageService.getAll(rolesEntityName);
63543
+ const conversationOnlyRole = storedRoles.find((role) => role.name === 'conversation-only');
63544
+ if (!conversationOnlyRole?.id) {
63545
+ return;
63546
+ }
63547
+ const storedUsers = await this.storageService.getAll(usersEntityName);
63548
+ const demoUser = storedUsers.find((u) => u.username === 'mohamad.pour.ghorban');
63549
+ if (!demoUser?.id) {
63550
+ return;
63551
+ }
63552
+ const roleIds = [conversationOnlyRole.id];
63553
+ await this.storageService.updateOne(usersEntityName, demoUser.id, {
63554
+ roleIds,
63555
+ roles: [{ id: conversationOnlyRole.id, title: conversationOnlyRole.title }],
63556
+ });
63281
63557
  }
63282
63558
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSecurityManagementUserDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63283
63559
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSecurityManagementUserDataSeeder }); }
@@ -63532,7 +63808,7 @@ class AXCSecurityManagementMockModule {
63532
63808
  provideQuerySetups([
63533
63809
  {
63534
63810
  key: 'SecurityManagement:User:RolesForListColumn',
63535
- loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-BjwkpUBF.mjs').then((m) => m.UserRolesForListColumnQuery),
63811
+ loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-2PnIbRxO.mjs').then((m) => m.UserRolesForListColumnQuery),
63536
63812
  },
63537
63813
  ]),
63538
63814
  ] }); }
@@ -63576,7 +63852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
63576
63852
  provideQuerySetups([
63577
63853
  {
63578
63854
  key: 'SecurityManagement:User:RolesForListColumn',
63579
- loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-BjwkpUBF.mjs').then((m) => m.UserRolesForListColumnQuery),
63855
+ loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-2PnIbRxO.mjs').then((m) => m.UserRolesForListColumnQuery),
63580
63856
  },
63581
63857
  ]),
63582
63858
  ],
@@ -64058,6 +64334,35 @@ function generateTenants() {
64058
64334
  maxUsers: 300,
64059
64335
  maxStorage: 3000,
64060
64336
  },
64337
+ {
64338
+ id: MAGFA_TENANT_ID,
64339
+ name: 'magfa-tenant',
64340
+ title: 'مگفا',
64341
+ description: 'MAGFA (مگفا) — tenant ایران برای اپلیکیشن تجارت، گفتگو، هوش مصنوعی و گزارش.',
64342
+ statusId: AXPSystemStatusType.Active,
64343
+ email: 'contact@magfa.ir',
64344
+ phone: '+98-21-1234-5678',
64345
+ website: 'https://magfa.demisco.com',
64346
+ supportEmail: 'support@magfa.ir',
64347
+ countryId: findRegionByCode('IR', 'country')?.id,
64348
+ country: findRegionByCode('IR', 'country'),
64349
+ stateId: findRegionByCode('TEH', 'state')?.id,
64350
+ state: findRegionByCode('TEH', 'state'),
64351
+ cityId: findRegionByCode('TEHRAN', 'city', 'TEH')?.id,
64352
+ city: findRegionByCode('TEHRAN', 'city', 'TEH'),
64353
+ timezone: 'Asia/Tehran',
64354
+ timezoneData: findTimezoneByCode('Asia/Tehran'),
64355
+ language: 'fa-IR',
64356
+ languageData: findLocaleByCode('fa-IR'),
64357
+ domain: 'magfa.ir',
64358
+ subdomain: 'magfa',
64359
+ userId: findUserByUsername('mohamad.pour.ghorban'),
64360
+ color: '#5c6bc0',
64361
+ registrationDate: new Date('2025-01-01'),
64362
+ expiryDate: new Date('2028-12-31'),
64363
+ maxUsers: 50,
64364
+ maxStorage: 500,
64365
+ },
64061
64366
  ];
64062
64367
  return tenants;
64063
64368
  }
@@ -64092,6 +64397,7 @@ function generateSubscriptionPlans() {
64092
64397
  const plan5Id = createPlan('Platform Console Plan', 'PC-001', 'Platform Console subscription plan for platform administration and management', false);
64093
64398
  const plan6Id = createPlan('Safetyminder Basic Plan', 'SM-BASIC-001', 'Basic subscription plan for Safetyminder Application Basic Edition', false);
64094
64399
  const plan7Id = createPlan('Cost Manager Enterprise Plan', 'CM-ENT-001', 'Enterprise subscription plan for Cost Manager Application Enterprise Edition', false);
64400
+ createPlan('MAGFA Commerce', 'MAGFA-001', 'MAGFA commerce application subscription (conversation, AI, reports)', false);
64095
64401
  return plans;
64096
64402
  }
64097
64403
  const SUBSCRIPTION_PLANS_MOCK = generateSubscriptionPlans();
@@ -64135,6 +64441,7 @@ function generateSubscriptions() {
64135
64441
  const platformConsolePlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'PC-001');
64136
64442
  const safetyminderBasicPlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'SM-BASIC-001');
64137
64443
  const costManagerEnterprisePlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'CM-ENT-001');
64444
+ const collaborationPlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'MAGFA-001');
64138
64445
  // Platform tenant subscribes to Platform Console plan (platform administration only)
64139
64446
  if (platformTenant && platformConsolePlan) {
64140
64447
  createSubscription(platformTenant.id, // Subscriber is the tenant
@@ -64161,6 +64468,10 @@ function generateSubscriptions() {
64161
64468
  if (laserPlumbingTenant && orderingStandardPlan) {
64162
64469
  createSubscription(laserPlumbingTenant.id, laserPlumbingTenant.title, orderingStandardPlan.id, orderingStandardPlan.title, 'Tenant', AXPSystemStatusType.Active, new Date('2025-01-15T00:00:00'), new Date('2027-01-15T23:59:59'));
64163
64470
  }
64471
+ const collaborationTenant = tenantMocks.find((t) => t.name === 'magfa-tenant');
64472
+ if (collaborationTenant && collaborationPlan) {
64473
+ createSubscription(collaborationTenant.id, collaborationTenant.title, collaborationPlan.id, collaborationPlan.title, 'Tenant', AXPSystemStatusType.Active, new Date('2025-01-15T00:00:00'), new Date('2027-01-15T23:59:59'));
64474
+ }
64164
64475
  return subscriptions;
64165
64476
  }
64166
64477
  const SUBSCRIPTIONS_MOCK = generateSubscriptions();
@@ -64209,6 +64520,8 @@ function generateSubscriptionPlanItems() {
64209
64520
  const orderingStandardPlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'ORD-STD-001');
64210
64521
  const platformConsolePlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'PC-001');
64211
64522
  const safetyminderBasicPlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'SM-BASIC-001');
64523
+ const collaborationPlan = SUBSCRIPTION_PLANS_MOCK.find((p) => p.code === 'MAGFA-001');
64524
+ const collaborationEdition = MAGFA_COMMERCE_STANDARD;
64212
64525
  // Helper function to create subscription plan item
64213
64526
  const createItem = (planId, subscribableType, edition) => {
64214
64527
  if (!planId || !edition) {
@@ -64258,6 +64571,9 @@ function generateSubscriptionPlanItems() {
64258
64571
  if (safetyminderBasicPlan) {
64259
64572
  createItem(safetyminderBasicPlan.id, 'ApplicationEdition', safetyminderBasicEdition);
64260
64573
  }
64574
+ if (collaborationPlan && collaborationEdition) {
64575
+ createItem(collaborationPlan.id, 'ApplicationEdition', collaborationEdition);
64576
+ }
64261
64577
  return items;
64262
64578
  }
64263
64579
  const SUBSCRIPTION_PLAN_ITEMS_MOCK = generateSubscriptionPlanItems();
@@ -65317,6 +65633,7 @@ function generateTenantUsers() {
65317
65633
  const timeplicityTenant = findTenantById(TIMEPLICITY_TENANT_ID);
65318
65634
  const platformTenant = findTenantById(PLATFORM_TENANT_ID);
65319
65635
  const laserPlumbingTenant = findTenantById(LASER_PLUMBING_TENANT_ID);
65636
+ const collaborationTenant = findTenantById(MAGFA_TENANT_ID);
65320
65637
  if (!timeplicityTenant) {
65321
65638
  throw new Error('Timeplicity tenant not found. Make sure tenant seeder runs before tenant user seeder.');
65322
65639
  }
@@ -65333,6 +65650,26 @@ function generateTenantUsers() {
65333
65650
  roleId = accountHolderRole.id;
65334
65651
  }
65335
65652
  const role = findRoleById(roleId);
65653
+ // Collaboration-only demo user: single tenant with conversation-only role
65654
+ if (user.username === 'mohamad.pour.ghorban') {
65655
+ const conversationOnlyRole = findRoleByName('conversation-only');
65656
+ if (collaborationTenant && conversationOnlyRole) {
65657
+ tenantUsers.push({
65658
+ id: AXPDataGenerator.uuid(),
65659
+ tenantId: collaborationTenant.id,
65660
+ userId: user.id,
65661
+ roleId: conversationOnlyRole.id,
65662
+ tenant: { ...collaborationTenant },
65663
+ user: { ...user },
65664
+ role: { ...conversationOnlyRole },
65665
+ statusId: AXPSystemStatusType.Active,
65666
+ startDate: new Date(),
65667
+ createdAt: new Date(),
65668
+ updatedAt: new Date(),
65669
+ });
65670
+ }
65671
+ return;
65672
+ }
65336
65673
  // Skip root user - root user only has access to Platform Tenant
65337
65674
  if (user.username === 'root' || user.username === 'root2' || user.username === 'super-root') {
65338
65675
  // Root user has access only to platform tenant (console app)
@@ -72388,7 +72725,7 @@ class AXCWorkflowEngine {
72388
72725
  return { success: true };
72389
72726
  }
72390
72727
  canReassignTaskToSelf() {
72391
- return this.sessionService?.authorize(AXMPermissionsKeys$6.WorkflowInstance.ReassignToSelf) ?? false;
72728
+ return this.sessionService?.authorize(AXMPermissionsKeys$7.WorkflowInstance.ReassignToSelf) ?? false;
72392
72729
  }
72393
72730
  validateHumanTaskReassignPayload(payload, uid) {
72394
72731
  const activityType = String(payload['activityType'] ?? '');
@@ -73992,7 +74329,7 @@ class AXCWorkflowManagementMockModule {
73992
74329
  provideCommandSetups([
73993
74330
  {
73994
74331
  key: 'workflow-activity:assign-to-manager',
73995
- command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-Cr4KK7dn.mjs').then((c) => c.AssignToManagerActivity),
74332
+ command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-B8bbsEQx.mjs').then((c) => c.AssignToManagerActivity),
73996
74333
  },
73997
74334
  {
73998
74335
  key: 'workflow-activity:get-current-user-manager',
@@ -74103,7 +74440,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
74103
74440
  provideCommandSetups([
74104
74441
  {
74105
74442
  key: 'workflow-activity:assign-to-manager',
74106
- command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-Cr4KK7dn.mjs').then((c) => c.AssignToManagerActivity),
74443
+ command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-B8bbsEQx.mjs').then((c) => c.AssignToManagerActivity),
74107
74444
  },
74108
74445
  {
74109
74446
  key: 'workflow-activity:get-current-user-manager',
@@ -74318,10 +74655,7 @@ class AXPTaskBoardProjectManagementTaskProvider extends AXPWorkflowTaskProvider
74318
74655
  }
74319
74656
  // 2. Filter by Assignee IDs (if provided)
74320
74657
  if (options?.assigneeIds && options.assigneeIds.length > 0) {
74321
- const assigneeIdSet = new Set(options.assigneeIds);
74322
- filteredList = filteredList.filter((task) =>
74323
- // Check if the task has an assignee and if that assignee's ID is in the filter set.
74324
- task.assignee ? assigneeIdSet.has(task.assignee.id) : false);
74658
+ filteredList = filteredList.filter((task) => matchesTaskBoardAssigneeFilter(task.assignee?.id, options.assigneeIds));
74325
74659
  }
74326
74660
  // 3. Filter by Priority (if provided)
74327
74661
  if (options?.priorities && options.priorities.length > 0) {
@@ -74531,6 +74865,28 @@ class AXPTaskBoardPlatformManagementTaskProvider extends AXPWorkflowTaskProvider
74531
74865
  username: 'lisadavis',
74532
74866
  },
74533
74867
  },
74868
+ {
74869
+ id: 15,
74870
+ title: 'Review orphaned platform alerts',
74871
+ startDate: this.calendarService.create(new Date()).add('day', 3).date,
74872
+ endDate: this.calendarService.create(new Date()).add('day', 4).date,
74873
+ description: 'Triage alerts with no owner assigned.',
74874
+ priority: 'medium',
74875
+ allDay: true,
74876
+ index: 2,
74877
+ status: {
74878
+ id: 'todo',
74879
+ title: 'Todo',
74880
+ },
74881
+ reporter: {
74882
+ id: '0',
74883
+ type: 'user',
74884
+ fullName: 'mojtaba',
74885
+ },
74886
+ data: {
74887
+ recievedDate: new Date(),
74888
+ },
74889
+ },
74534
74890
  ];
74535
74891
  }
74536
74892
  get name() {
@@ -74563,10 +74919,7 @@ class AXPTaskBoardPlatformManagementTaskProvider extends AXPWorkflowTaskProvider
74563
74919
  }
74564
74920
  // 2. Filter by Assignee IDs (if provided)
74565
74921
  if (options?.assigneeIds && options.assigneeIds.length > 0) {
74566
- const assigneeIdSet = new Set(options.assigneeIds);
74567
- filteredList = filteredList.filter((task) =>
74568
- // Check if the task has an assignee and if that assignee's ID is in the filter set.
74569
- task.assignee ? assigneeIdSet.has(task.assignee.id) : false);
74922
+ filteredList = filteredList.filter((task) => matchesTaskBoardAssigneeFilter(task.assignee?.id, options.assigneeIds));
74570
74923
  }
74571
74924
  // 3. Filter by Priorities (if provided)
74572
74925
  if (options?.priorities && options.priorities.length > 0) {
@@ -78289,5 +78642,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
78289
78642
  * Generated bundle index. Do not edit.
78290
78643
  */
78291
78644
 
78292
- export { AXCFinancialCoreMockModule as $, AXCAiChatRouterService as A, AXCCalendarDataSeeder as B, AXCCalendarEventDataSeeder as C, AXCCalendarManagementMockModule as D, AXCCommandRegistryDataSeeder as E, AXCCommonMockModule as F, AXCContactCoreMockModule as G, AXCContentManagementMockModule as H, AXCConversationDataSeeder as I, AXCConversationMockConversationApi as J, AXCConversationMockMessageApi as K, AXCConversationMockModule as L, AXCConversationMockRealtimeApi as M, AXCConversationMockUserApi as N, AXCCustomerManagementMockModule as O, AXCDashboardManagementMockModule as P, AXCDataManagementMockModule as Q, AXCDexieEntityStorageService as R, AXCDocumentManagementMockModule as S, AXCEditionDataSeeder as T, AXCEntityDefinitionSeederService as U, AXCEntityDefinitionsModule as V, AXCEntityStorageInsertCommand as W, AXCEntityStorageModule as X, AXCEntityStorageQueryQuery as Y, AXCFileStorageServiceDexie as Z, AXCFileStorageServiceFirestore as _, AXMAiModelStableIds as a, AXMEmploymentTypeDataSeeder as a$, AXCFirestoreEntityStorageService as a0, AXCFormTemplateManagementMockModule as a1, AXCGoogleStrategyMock as a2, AXCHealthCoreMockModule as a3, AXCHelpDeskMockModule as a4, AXCHumanCapitalManagementMockModule as a5, AXCIdentifierManagementMockModule as a6, AXCImageCaptchaChallengeProviderMock as a7, AXCLearningManagementMockModule as a8, AXCLocaleManagementMockModule as a9, AXCTenantManagementMockModule as aA, AXCTenantSeeder as aB, AXCTextTemplateRenderBackend as aC, AXCTokensDataSeeder as aD, AXCUserPassStrategyMock as aE, AXCVersionDB as aF, AXCVersioningService as aG, AXCWidgetCatalogDataSeeder as aH, AXCWorkflowCategorySeeder as aI, AXCWorkflowDefinitionDataSeeder as aJ, AXCWorkflowEngine as aK, AXCWorkflowExecutionDB as aL, AXCWorkflowExecutionStoreDexie as aM, AXCWorkflowExecutionStoreFirestore as aN, AXCWorkflowInstanceCartableDemoSeeder as aO, AXCWorkflowManagementMockModule as aP, AXC_ENTITY_STORAGE_BACKEND_TYPE as aQ, AXC_FIRESTORE_CONFIG as aR, AXC_FIRESTORE_DB as aS, AXC_WORKFLOW_EXECUTION_STORE as aT, AXMAiDemisAssistantAssistId as aU, AXMAiPlatformAssistantAssistId as aV, AXMAutomationDataSeeder as aW, AXMBusinessUnitDataSeeder as aX, AXMCalendarEventTypeSeeder as aY, AXMDashboardChartDataSourceDefinition as aZ, AXMEmployeeDataSeeder as a_, AXCLocationManagementMockModule as aa, AXCLockService as ab, AXCMeasurementCoreMockModule as ac, AXCMeetingManagementMockModule as ad, AXCMetaDataDefinitionDataSeeder as ae, AXCMetadataCategorySeeder as af, AXCMiddlewaresModule as ag, AXCMockCaptchaChallengeComponent as ah, AXCMockEntityLogListener as ai, AXCMockModule as aj, AXCMockShowMetaDataFormPopupCommand as ak, AXCNotificationManagementMockModule as al, AXCOrderManagementMockModule as am, AXCOrganizationManagementMockModule as an, AXCPersonCoreMockModule as ao, AXCPlatformManagementMockModule as ap, AXCProcurementManagementMockModule as aq, AXCProductCatalogMockModule as ar, AXCProjectManagementMockModule as as, AXCQueryRegistryDataSeeder as at, AXCReportManagementMockModule as au, AXCSecurityManagementMockModule as av, AXCStoredEntityDefinitionLoader as aw, AXCSubscriptionManagementMockModule as ax, AXCSupplierManagementMockModule as ay, AXCTaskManagementMockModule as az, resolveDelegatedAssistOptionString as b, HW as b$, AXMFormDataSourcesProvider as b0, AXMJobDefinitionDataSeeder as b1, AXMJobLevelDataSeeder as b2, AXMLeaveRequestDataSeeder as b3, AXMMeetingDataSeeder as b4, AXMMeetingFilesDataSeeder as b5, AXMMeetingParticipantDataSeeder as b6, AXMMeetingRoleTypeDataSeeder as b7, AXMMeetingSessionDataSeeder as b8, AXMMeetingTypeDataSeeder as b9, AXPMockSequenceProvider as bA, AXPRoomDataSeeder as bB, AXPSecurityManagementRoleDataSeeder as bC, AXPSecurityManagementUserDataSeeder as bD, AXPTaskBoardPlatformManagementTaskProvider as bE, AXPTaskBoardProjectManagementTaskProvider as bF, AXVChangeType as bG, BCC as bH, BOC as bI, BUSINESS_UNITS_MOCK as bJ, CHAT_LAST_MESSAGE_IDS as bK, COSTMANAGER_ENTERPRISE as bL, COSTMANAGER_PROFESSIONAL as bM, COSTMANAGER_STANDARD as bN, CP as bO, CRM_ENTERPRISE as bP, DASHBOARDS as bQ, EDITIONS as bR, EMPLOYEES_MOCK as bS, EMPLOYMENT_TYPES_MOCK as bT, ENTITY_DEFINITION_MAP as bU, ENTITY_REGISTRY as bV, FINANCE_BASIC as bW, FINANCE_ENTERPRISE as bX, FINANCE_PRO as bY, G as bZ, HR_ENTERPRISE as b_, AXMMeetingTypeFileTemplateDataSeeder as ba, AXMPositionAssignmentDataSeeder as bb, AXMPositionDataSeeder as bc, AXMQuestionBankItemCategoryDataSeeder as bd, AXMQuestionBankItemDataSeeder as be, AXMQuestionnaireCalculationDataSeeder as bf, AXMQuestionnaireCategoryDataSeeder as bg, AXMQuestionnaireDataSeeder as bh, AXMResponsibilityDataSeeder as bi, AXMTagDataSeeder as bj, AXMTeamBusinessUnitDataSeeder as bk, AXMTeamDataSeeder as bl, AXMTeamMemberDataSeeder as bm, AXMTeamMemberRoleDataSeeder as bn, AXMWorkflowDashboardChartDataSourceDefinition as bo, AXM_AI_REGISTRY_COMMAND_NAME as bp, AXM_AI_REGISTRY_QUERY_NAME as bq, AXM_CORPORATE_BUSINESS_UNIT_ID as br, AXPDashboardDataSeeder as bs, AXPIdentifierDB as bt, AXPMessageDataSeeder as bu, AXPMockChecksumProvider as bv, AXPMockClockProvider as bw, AXPMockIdentifierService as bx, AXPMockLookupProvider as by, AXPMockPolicyProvider as bz, axcSyncSingleEmployeeDenormalizedOrgFields as c, awaitConversationMockSharedStorage as c$, JOB_DEFINITIONS_CATEGORY_MOCK as c0, JOB_DEFINITIONS_MOCK as c1, JOB_DEFINITION_CATEGORY_KEY_TO_ID as c2, JOB_LEVELS_MOCK as c3, LASER_PLUMBING_TENANT_ID as c4, LEAVE_REQUESTS_MOCK as c5, METADATA_CATEGORY_IDS as c6, METADATA_GENERAL_CATEGORY_REFS as c7, METADATA_SYSTEM_CATEGORY_REFS as c8, MLC as c9, SHOP_BASIC as cA, SHOP_ENTERPRISE as cB, SHOP_PRO as cC, TAGS_MOCK as cD, TASKS as cE, TASK_STATUSES as cF, TASK_TEMPLATES as cG, TASK_TYPES as cH, TEAMS_CATEGORY_MOCK as cI, TEAMS_MOCK as cJ, TEAM_BUSINESS_UNITS_MOCK as cK, TEAM_CATEGORY_KEY_TO_ID as cL, TEAM_MEMBERS_MOCK as cM, TEAM_MEMBER_ROLES_MOCK as cN, TIMEPLICITY_TENANT_ID as cO, TLA as cP, TOKENS as cQ, TPC as cR, VISIBILITY_FILTER_BYPASS as cS, WORKFLOW_CATEGORIES as cT, WS as cU, activityCategoryMocks as cV, activityDefinitionEntityMock as cW, applyEntityDefinitionFirestoreSnapshot as cX, automationCommandMiddleware as cY, automationMock as cZ, avatarInterface as c_, OHR as ca, ORDERING_BASIC as cb, ORDERING_ENTERPRISE as cc, ORDERING_STANDARD as cd, OWNERSHIP_FILTER_BYPASS as ce, PLATFORM_CONSOLE as cf, PLATFORM_TENANT_ID as cg, PM as ch, POSITIONS_CATEGORY_MOCK as ci, POSITIONS_MOCK as cj, POSITION_ASSIGNMENTS_MOCK as ck, QCP as cl, QGEN as cm, QHW as cn, QOHR as co, QPM as cp, QTLE as cq, QUESTIONNAIRE_CATEGORY_MOCK as cr, QUESTION_BANK_ITEM_CATEGORY_MOCK as cs, QWS as ct, RESPONSIBILITIES_CATEGORY_MOCK as cu, RESPONSIBILITIES_MOCK as cv, RESPONSIBILITY_CATEGORY_KEY_TO_ID as cw, SAFETYMINDER_BASIC as cx, SAFETYMINDER_ENTERPRISE as cy, SAFETYMINDER_PROFESSIONAL as cz, ACTIVITY_CATEGORIES as d, mockParticipantIndexForSecurityUserId as d$, axVersionDB as d0, axWorkflowExecutionDB as d1, axcPatchEmployeeActivePrimaryBusinessUnitRefsFromRows as d2, axcPatchEmployeeActivePrimaryPositionRefsFromRows as d3, axcPatchEmployeeManagerRefsFromRows as d4, axcResolveCommandRegistrySeedId as d5, axcResolveQueryRegistrySeedId as d6, axcResolveWidgetCatalogSeedId as d7, bankCategory as d8, buildEntityStorageQuickSearchFilter as d9, fileUploaderInterface as dA, finalizeActivityCategoryItemCounts as dB, findEmployeeById as dC, folderStorageMiddleware as dD, groupOrderItemCalculatorMiddleware as dE, historyMiddleware as dF, identifierCommitMiddleware as dG, imageInterface as dH, inspectionOkXNaInterface as dI, loadMockPropertyDefinitions as dJ, lockGuardMiddleware as dK, longTextAnswerInterface as dL, lookupInterface as dM, lookupResolverMiddleware as dN, mapInterface as dO, meetingFilesMock as dP, meetingIds as dQ, meetingMock as dR, meetingParticipantMock as dS, meetingRoleTypeMock as dT, meetingSessionMock as dU, meetingTimeSlotMock as dV, meetingTypeFileTemplateMock as dW, meetingTypeMock as dX, mergeDetailRelationMiddleware as dY, mergeQuickSearchIntoRequest as dZ, metadataCategoryMocks as d_, buildWorkflowInstanceCartableDemoRows as da, bypassAllFilters as db, bypassOwnershipFilter as dc, bypassVisibilityFilter as dd, calendarEventMock as de, calendarEventTypeMockData as df, calendarMock as dg, chatMessageMock as dh, chatMock as di, checkboxInterface as dj, childCountMiddleware as dk, clearEntityDefinitionFirestoreCollections as dl, colorInterface as dm, computeDiff as dn, contactInterface as dp, conversationDemoSeedUserIds as dq, createFileCastMiddleware as dr, createWidgetLayoutConfig as ds, dateInterface as dt, dateTimeInterface as du, descriptionInterface as dv, documentFolderSyncMiddleware as dw, emailInterface as dx, entityDefDb as dy, entityValidationMiddleware as dz, ACTIVITY_CATEGORY_ID_BY_KEY as e, mockQuestionBankItemByName as e0, mockRoleDefinitions as e1, multipleChoiceInterface as e2, multipleSelectInterface as e3, normalizeAnyFileArrayForView as e4, normalizeSnapshotFileFieldsForView as e5, numberInterface as e6, parseEntityStorageInsertData as e7, parseEntityStorageQueryRequest as e8, participantIds as e9, textInterface as eA, timeDurationInterface as eB, titleInterface as eC, toUiRows as eD, toggleInterface as eE, tokenCategoryIds as eF, tokenCategoryMocks as eG, urlInterface as eH, versionInterface as eI, visibilityFilterMiddleware as eJ, workflowDefinitionEntityMock as eK, workflowDefinitionIds as eL, workflowDefinitionMock as eM, yesNoInterface as eN, participantMock as ea, passwordInterface as eb, personIdentifierTypeMock as ec, personIds as ed, personLegalIds as ee, personMock as ef, personNaturalIds as eg, phoneInterface as eh, primaryMiddleware as ei, provideMockPropertySetups as ej, qrcodeInterface as ek, questionBankItemMock as el, questionnaireCalculationMock as em, questionnaireMock as en, ratingInterface as eo, richTextInterface as ep, scaleInterface as eq, selectInterface as er, selectionListInterface as es, sexAtBirthInterface as et, signatureInterface as eu, signatureLoaderMiddleware as ev, statusDefaultMiddleware as ew, tagInterface as ex, tenantMocks as ey, textAreaInterface as ez, ACTIVITY_DEFINITIONS as f, AI_ASSIST_MOCK as g, AI_MODEL_MOCK as h, APPLICATIONS as i, APPLICATION_CATEGORY_IDS as j, APPLICATION_CATEGORY_MOCKS as k, AXCActivityCategorySeeder as l, mockUsers as m, AXCActivityDefinitionSeeder as n, AXCAiAssistSeeder as o, AXCAiManagementMockModule as p, AXCAiModelSeeder as q, resolveDelegatedAssistOptionModel as r, AXCAppTermDataSeeder as s, AXCAppVersionDataSeeder as t, AXCApplicationCategoryDataSeeder as u, AXCApplicationDataSeeder as v, AXCApplicationManagementMockModule as w, AXCAssessmentManagementMockModule as x, AXCAssetManagementMockModule as y, AXCAuthMockModule as z };
78293
- //# sourceMappingURL=acorex-connectivity-mock-acorex-connectivity-mock-D8bzYltA.mjs.map
78645
+ export { AXCFinancialCoreMockModule as $, AXCAiChatRouterService as A, AXCCalendarDataSeeder as B, AXCCalendarEventDataSeeder as C, AXCCalendarManagementMockModule as D, AXCCommandRegistryDataSeeder as E, AXCCommonMockModule as F, AXCContactCoreMockModule as G, AXCContentManagementMockModule as H, AXCConversationDataSeeder as I, AXCConversationMockConversationApi as J, AXCConversationMockMessageApi as K, AXCConversationMockModule as L, AXCConversationMockRealtimeApi as M, AXCConversationMockUserApi as N, AXCCustomerManagementMockModule as O, AXCDashboardManagementMockModule as P, AXCDataManagementMockModule as Q, AXCDexieEntityStorageService as R, AXCDocumentManagementMockModule as S, AXCEditionDataSeeder as T, AXCEntityDefinitionSeederService as U, AXCEntityDefinitionsModule as V, AXCEntityStorageInsertCommand as W, AXCEntityStorageModule as X, AXCEntityStorageQueryQuery as Y, AXCFileStorageServiceDexie as Z, AXCFileStorageServiceFirestore as _, AXMAiModelStableIds as a, AXMFormDataSourcesProvider as a$, AXCFirestoreEntityStorageService as a0, AXCFormTemplateManagementMockModule as a1, AXCGoogleStrategyMock as a2, AXCHealthCoreMockModule as a3, AXCHelpDeskMockModule as a4, AXCHumanCapitalManagementMockModule as a5, AXCIdentifierManagementMockModule as a6, AXCImageCaptchaChallengeProviderMock as a7, AXCLearningManagementMockModule as a8, AXCLocaleManagementMockModule as a9, AXCTenantManagementMockModule as aA, AXCTenantSeeder as aB, AXCTextTemplateRenderBackend as aC, AXCTokensDataSeeder as aD, AXCUserPassStrategyMock as aE, AXCVersionDB as aF, AXCVersioningService as aG, AXCWidgetCatalogDataSeeder as aH, AXCWorkflowCategorySeeder as aI, AXCWorkflowDefinitionDataSeeder as aJ, AXCWorkflowEngine as aK, AXCWorkflowExecutionDB as aL, AXCWorkflowExecutionStoreDexie as aM, AXCWorkflowExecutionStoreFirestore as aN, AXCWorkflowInstanceCartableDemoSeeder as aO, AXCWorkflowManagementMockModule as aP, AXC_ENTITY_STORAGE_BACKEND_TYPE as aQ, AXC_FIRESTORE_CONFIG as aR, AXC_FIRESTORE_DB as aS, AXC_WORKFLOW_EXECUTION_STORE as aT, AXMAiPlatformAssistantAssistId as aU, AXMAutomationDataSeeder as aV, AXMBusinessUnitDataSeeder as aW, AXMCalendarEventTypeSeeder as aX, AXMDashboardChartDataSourceDefinition as aY, AXMEmployeeDataSeeder as aZ, AXMEmploymentTypeDataSeeder as a_, AXCLocationManagementMockModule as aa, AXCLockService as ab, AXCMeasurementCoreMockModule as ac, AXCMeetingManagementMockModule as ad, AXCMetaDataDefinitionDataSeeder as ae, AXCMetadataCategorySeeder as af, AXCMiddlewaresModule as ag, AXCMockCaptchaChallengeComponent as ah, AXCMockEntityLogListener as ai, AXCMockModule as aj, AXCMockShowMetaDataFormPopupCommand as ak, AXCNotificationManagementMockModule as al, AXCOrderManagementMockModule as am, AXCOrganizationManagementMockModule as an, AXCPersonCoreMockModule as ao, AXCPlatformManagementMockModule as ap, AXCProcurementManagementMockModule as aq, AXCProductCatalogMockModule as ar, AXCProjectManagementMockModule as as, AXCQueryRegistryDataSeeder as at, AXCReportManagementMockModule as au, AXCSecurityManagementMockModule as av, AXCStoredEntityDefinitionLoader as aw, AXCSubscriptionManagementMockModule as ax, AXCSupplierManagementMockModule as ay, AXCTaskManagementMockModule as az, resolveDelegatedAssistOptionString as b, HW as b$, AXMJobDefinitionDataSeeder as b0, AXMJobLevelDataSeeder as b1, AXMLeaveRequestDataSeeder as b2, AXMMeetingDataSeeder as b3, AXMMeetingFilesDataSeeder as b4, AXMMeetingParticipantDataSeeder as b5, AXMMeetingRoleTypeDataSeeder as b6, AXMMeetingSessionDataSeeder as b7, AXMMeetingTypeDataSeeder as b8, AXMMeetingTypeFileTemplateDataSeeder as b9, AXPRoomDataSeeder as bA, AXPSecurityManagementRoleDataSeeder as bB, AXPSecurityManagementUserDataSeeder as bC, AXPTaskBoardPlatformManagementTaskProvider as bD, AXPTaskBoardProjectManagementTaskProvider as bE, AXVChangeType as bF, BCC as bG, BOC as bH, BUSINESS_UNITS_MOCK as bI, CHAT_LAST_MESSAGE_IDS as bJ, COLLABORATION_STANDARD as bK, COSTMANAGER_ENTERPRISE as bL, COSTMANAGER_PROFESSIONAL as bM, COSTMANAGER_STANDARD as bN, CP as bO, CRM_ENTERPRISE as bP, DASHBOARDS as bQ, EDITIONS as bR, EMPLOYEES_MOCK as bS, EMPLOYMENT_TYPES_MOCK as bT, ENTITY_DEFINITION_MAP as bU, ENTITY_REGISTRY as bV, FINANCE_BASIC as bW, FINANCE_ENTERPRISE as bX, FINANCE_PRO as bY, G as bZ, HR_ENTERPRISE as b_, AXMPositionAssignmentDataSeeder as ba, AXMPositionDataSeeder as bb, AXMQuestionBankItemCategoryDataSeeder as bc, AXMQuestionBankItemDataSeeder as bd, AXMQuestionnaireCalculationDataSeeder as be, AXMQuestionnaireCategoryDataSeeder as bf, AXMQuestionnaireDataSeeder as bg, AXMResponsibilityDataSeeder as bh, AXMTagDataSeeder as bi, AXMTeamBusinessUnitDataSeeder as bj, AXMTeamDataSeeder as bk, AXMTeamMemberDataSeeder as bl, AXMTeamMemberRoleDataSeeder as bm, AXMWorkflowDashboardChartDataSourceDefinition as bn, AXM_AI_REGISTRY_COMMAND_NAME as bo, AXM_AI_REGISTRY_QUERY_NAME as bp, AXM_CORPORATE_BUSINESS_UNIT_ID as bq, AXPDashboardDataSeeder as br, AXPIdentifierDB as bs, AXPMessageDataSeeder as bt, AXPMockChecksumProvider as bu, AXPMockClockProvider as bv, AXPMockIdentifierService as bw, AXPMockLookupProvider as bx, AXPMockPolicyProvider as by, AXPMockSequenceProvider as bz, axcSyncSingleEmployeeDenormalizedOrgFields as c, automationCommandMiddleware as c$, JOB_DEFINITIONS_CATEGORY_MOCK as c0, JOB_DEFINITIONS_MOCK as c1, JOB_DEFINITION_CATEGORY_KEY_TO_ID as c2, JOB_LEVELS_MOCK as c3, LASER_PLUMBING_TENANT_ID as c4, LEAVE_REQUESTS_MOCK as c5, MAGFA_COMMERCE_STANDARD as c6, MAGFA_CONVERSATION_DASHBOARD as c7, MAGFA_TENANT_ID as c8, METADATA_CATEGORY_IDS as c9, SAFETYMINDER_BASIC as cA, SAFETYMINDER_ENTERPRISE as cB, SAFETYMINDER_PROFESSIONAL as cC, SHOP_BASIC as cD, SHOP_ENTERPRISE as cE, SHOP_PRO as cF, TAGS_MOCK as cG, TASKS as cH, TASK_STATUSES as cI, TASK_TEMPLATES as cJ, TASK_TYPES as cK, TEAMS_CATEGORY_MOCK as cL, TEAMS_MOCK as cM, TEAM_BUSINESS_UNITS_MOCK as cN, TEAM_CATEGORY_KEY_TO_ID as cO, TEAM_MEMBERS_MOCK as cP, TEAM_MEMBER_ROLES_MOCK as cQ, TIMEPLICITY_TENANT_ID as cR, TLA as cS, TOKENS as cT, TPC as cU, VISIBILITY_FILTER_BYPASS as cV, WORKFLOW_CATEGORIES as cW, WS as cX, activityCategoryMocks as cY, activityDefinitionEntityMock as cZ, applyEntityDefinitionFirestoreSnapshot as c_, METADATA_GENERAL_CATEGORY_REFS as ca, METADATA_SYSTEM_CATEGORY_REFS as cb, MLC as cc, OHR as cd, ORDERING_BASIC as ce, ORDERING_ENTERPRISE as cf, ORDERING_STANDARD as cg, OWNERSHIP_FILTER_BYPASS as ch, PLATFORM_CONSOLE as ci, PLATFORM_TENANT_ID as cj, PM as ck, POSITIONS_CATEGORY_MOCK as cl, POSITIONS_MOCK as cm, POSITION_ASSIGNMENTS_MOCK as cn, QCP as co, QGEN as cp, QHW as cq, QOHR as cr, QPM as cs, QTLE as ct, QUESTIONNAIRE_CATEGORY_MOCK as cu, QUESTION_BANK_ITEM_CATEGORY_MOCK as cv, QWS as cw, RESPONSIBILITIES_CATEGORY_MOCK as cx, RESPONSIBILITIES_MOCK as cy, RESPONSIBILITY_CATEGORY_KEY_TO_ID as cz, ACTIVITY_CATEGORIES as d, mergeDetailRelationMiddleware as d$, automationMock as d0, avatarInterface as d1, awaitConversationMockSharedStorage as d2, axVersionDB as d3, axWorkflowExecutionDB as d4, axcPatchEmployeeActivePrimaryBusinessUnitRefsFromRows as d5, axcPatchEmployeeActivePrimaryPositionRefsFromRows as d6, axcPatchEmployeeManagerRefsFromRows as d7, axcResolveCommandRegistrySeedId as d8, axcResolveQueryRegistrySeedId as d9, emailInterface as dA, entityDefDb as dB, entityValidationMiddleware as dC, fileUploaderInterface as dD, finalizeActivityCategoryItemCounts as dE, findEmployeeById as dF, folderStorageMiddleware as dG, groupOrderItemCalculatorMiddleware as dH, historyMiddleware as dI, identifierCommitMiddleware as dJ, imageInterface as dK, inspectionOkXNaInterface as dL, loadMockPropertyDefinitions as dM, lockGuardMiddleware as dN, longTextAnswerInterface as dO, lookupInterface as dP, lookupResolverMiddleware as dQ, mapInterface as dR, meetingFilesMock as dS, meetingIds as dT, meetingMock as dU, meetingParticipantMock as dV, meetingRoleTypeMock as dW, meetingSessionMock as dX, meetingTimeSlotMock as dY, meetingTypeFileTemplateMock as dZ, meetingTypeMock as d_, axcResolveWidgetCatalogSeedId as da, bankCategory as db, buildEntityStorageQuickSearchFilter as dc, buildWorkflowInstanceCartableDemoRows as dd, bypassAllFilters as de, bypassOwnershipFilter as df, bypassVisibilityFilter as dg, calendarEventMock as dh, calendarEventTypeMockData as di, calendarMock as dj, chatMessageMock as dk, chatMock as dl, checkboxInterface as dm, childCountMiddleware as dn, clearEntityDefinitionFirestoreCollections as dp, colorInterface as dq, computeDiff as dr, contactInterface as ds, conversationDemoSeedUserIds as dt, createFileCastMiddleware as du, createWidgetLayoutConfig as dv, dateInterface as dw, dateTimeInterface as dx, descriptionInterface as dy, documentFolderSyncMiddleware as dz, ACTIVITY_CATEGORY_ID_BY_KEY as e, mergeQuickSearchIntoRequest as e0, metadataCategoryMocks as e1, mockParticipantIndexForSecurityUserId as e2, mockQuestionBankItemByName as e3, mockRoleDefinitions as e4, multipleChoiceInterface as e5, multipleSelectInterface as e6, normalizeAnyFileArrayForView as e7, normalizeSnapshotFileFieldsForView as e8, numberInterface as e9, tagInterface as eA, tenantMocks as eB, textAreaInterface as eC, textInterface as eD, timeDurationInterface as eE, titleInterface as eF, toUiRows as eG, toggleInterface as eH, tokenCategoryIds as eI, tokenCategoryMocks as eJ, urlInterface as eK, versionInterface as eL, visibilityFilterMiddleware as eM, workflowDefinitionEntityMock as eN, workflowDefinitionIds as eO, workflowDefinitionMock as eP, yesNoInterface as eQ, parseEntityStorageInsertData as ea, parseEntityStorageQueryRequest as eb, participantIds as ec, participantMock as ed, passwordInterface as ee, personIdentifierTypeMock as ef, personIds as eg, personLegalIds as eh, personMock as ei, personNaturalIds as ej, phoneInterface as ek, primaryMiddleware as el, provideMockPropertySetups as em, qrcodeInterface as en, questionBankItemMock as eo, questionnaireCalculationMock as ep, questionnaireMock as eq, ratingInterface as er, richTextInterface as es, scaleInterface as et, selectInterface as eu, selectionListInterface as ev, sexAtBirthInterface as ew, signatureInterface as ex, signatureLoaderMiddleware as ey, statusDefaultMiddleware as ez, ACTIVITY_DEFINITIONS as f, AI_ASSIST_MOCK as g, AI_MODEL_MOCK as h, APPLICATIONS as i, APPLICATION_CATEGORY_IDS as j, APPLICATION_CATEGORY_MOCKS as k, AXCActivityCategorySeeder as l, mockUsers as m, AXCActivityDefinitionSeeder as n, AXCAiAssistSeeder as o, AXCAiManagementMockModule as p, AXCAiModelSeeder as q, resolveDelegatedAssistOptionModel as r, AXCAppTermDataSeeder as s, AXCAppVersionDataSeeder as t, AXCApplicationCategoryDataSeeder as u, AXCApplicationDataSeeder as v, AXCApplicationManagementMockModule as w, AXCAssessmentManagementMockModule as x, AXCAssetManagementMockModule as y, AXCAuthMockModule as z };
78646
+ //# sourceMappingURL=acorex-connectivity-mock-acorex-connectivity-mock-CwWGrnVs.mjs.map