@ncim/sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,1738 @@
1
- export * from '@libs/core';
1
+ import { Translation } from 'primeng/api';
2
+ import { ValidatorFn, AbstractControl, ValidationErrors, FormGroup } from '@angular/forms';
3
+ import * as i0 from '@angular/core';
4
+ import { InjectionToken, EnvironmentProviders, Signal, PipeTransform, ErrorHandler } from '@angular/core';
5
+ import { Observable } from 'rxjs';
6
+ import { HttpParams, HttpContextToken, HttpResponse, HttpHeaders, HttpEvent, HttpInterceptorFn } from '@angular/common/http';
7
+ import { CanActivateFn } from '@angular/router';
8
+ import { TranslateCompiler, InterpolatableTranslation, TranslationObject, InterpolatableTranslationObject } from '@ngx-translate/core';
9
+ import * as _primeuix_themes_types from '@primeuix/themes/types';
10
+
11
+ declare enum EntityType {
12
+ GOVERNMENT = "GOVERNMENT",
13
+ INSPECTION = "INSPECTION",
14
+ BUSINESS = "BUSINESS"
15
+ }
16
+
17
+ declare enum PackageType {
18
+ BASIC = "BASIC",
19
+ VIOLATIONS = "VIOLATIONS",
20
+ ENTERPRISE = "ENTERPRISE",
21
+ CUSTOM = "CUSTOM"
22
+ }
23
+
24
+ declare enum ButtonVariant {
25
+ PRIMARY = "primary",
26
+ BLACK = "black",
27
+ NEUTRAL = "neutral",
28
+ SECONDARY = "secondary"
29
+ }
30
+ declare enum ButtonType {
31
+ BUTTON = "button",
32
+ SUBMIT = "submit"
33
+ }
34
+ declare enum ButtonSize {
35
+ SMALL = "small",
36
+ MEDIUM = "medium",
37
+ LARGE = "large"
38
+ }
39
+
40
+ type InputType = 'text' | 'password' | 'number' | 'email' | 'date' | 'datetime' | 'select' | 'multiselect' | 'phone' | 'textarea' | 'checkbox' | 'radio' | 'checkbox-search' | 'search';
41
+ declare const INPUT_TYPES: {
42
+ readonly TEXT: "text";
43
+ readonly PASSWORD: "password";
44
+ readonly EMAIL: "email";
45
+ readonly NUMBER: "number";
46
+ readonly PHONE: "phone";
47
+ readonly SELECT: "select";
48
+ readonly MULTISELECT: "multiselect";
49
+ readonly TEXTAREA: "textarea";
50
+ readonly DATE: "date";
51
+ readonly DATETIME: "datetime";
52
+ readonly CHECKBOX: "checkbox";
53
+ readonly RADIO: "radio";
54
+ readonly CHECKBOX_SEARCH: "checkbox-search";
55
+ };
56
+
57
+ declare enum LayoutWidth {
58
+ SMALL = "small",
59
+ FULL = "full"
60
+ }
61
+
62
+ declare enum Language {
63
+ AR = "ar",
64
+ EN = "en"
65
+ }
66
+
67
+ declare enum TrendDirection {
68
+ UP = "up",
69
+ DOWN = "down"
70
+ }
71
+
72
+ declare enum MarkerStatus {
73
+ WARNING = "warning",
74
+ INFO = "info",
75
+ ERROR = "error",
76
+ SUCCESS = "success"
77
+ }
78
+
79
+ /** Map legend and card badge status types. Matches legend icons and card status badges. */
80
+ declare enum MapLegendStatus {
81
+ UNCORRECTED_VIOLATION = "alert-01",
82
+ UPCOMING_VISIT = "briefcase-06",
83
+ CORRECTION_PERIOD = "loading",
84
+ LICENSE_EXPIRING = "time-quarter-02"
85
+ }
86
+
87
+ type IconName = 'home' | 'list' | 'clipboard' | 'levels' | 'document' | 'edit' | 'fees' | 'workflow' | 'help' | 'chevronDown' | 'chevronLeft' | 'chevronRight' | 'chat' | 'settings' | 'logout' | 'logo' | 'warning' | 'clock' | 'briefcase' | 'check' | 'eye' | 'eyeOff' | 'refresh' | 'building' | 'building-logo' | 'incognito' | 'muslim' | 'user' | 'package' | 'calendar' | 'arrowUp' | 'wallet' | 'menu' | 'dashboard' | 'shield' | 'gavel' | 'scale' | 'brain' | 'book' | 'support' | 'layers' | 'honour-star' | 'close' | 'nafath-icon' | 'play' | 'empty-module';
88
+
89
+ /** Typed i18n keys for HTTP error toasts. Matches `HTTP_ERRORS.*` in ar.json / en.json. */
90
+ declare enum HttpErrorKey {
91
+ NETWORK = "HTTP_ERRORS.NETWORK",
92
+ OFFLINE = "HTTP_ERRORS.OFFLINE",
93
+ BACK_ONLINE = "HTTP_ERRORS.BACK_ONLINE",
94
+ CORS = "HTTP_ERRORS.CORS",
95
+ TIMEOUT = "HTTP_ERRORS.TIMEOUT",
96
+ BAD_REQUEST = "HTTP_ERRORS.BAD_REQUEST",
97
+ SESSION_EXPIRED = "HTTP_ERRORS.SESSION_EXPIRED",
98
+ SESSION_EXPIRED_SSO = "HTTP_ERRORS.SESSION_EXPIRED_SSO",
99
+ PAYMENT_REQUIRED = "HTTP_ERRORS.PAYMENT_REQUIRED",
100
+ FORBIDDEN = "HTTP_ERRORS.FORBIDDEN",
101
+ NOT_FOUND = "HTTP_ERRORS.NOT_FOUND",
102
+ METHOD_NOT_ALLOWED = "HTTP_ERRORS.METHOD_NOT_ALLOWED",
103
+ NOT_ACCEPTABLE = "HTTP_ERRORS.NOT_ACCEPTABLE",
104
+ CONFLICT = "HTTP_ERRORS.CONFLICT",
105
+ GONE = "HTTP_ERRORS.GONE",
106
+ VALIDATION = "HTTP_ERRORS.VALIDATION",
107
+ PAYLOAD_TOO_LARGE = "HTTP_ERRORS.PAYLOAD_TOO_LARGE",
108
+ URI_TOO_LONG = "HTTP_ERRORS.URI_TOO_LONG",
109
+ UNSUPPORTED_MEDIA_TYPE = "HTTP_ERRORS.UNSUPPORTED_MEDIA_TYPE",
110
+ LOCKED = "HTTP_ERRORS.LOCKED",
111
+ TOO_MANY_REQUESTS = "HTTP_ERRORS.TOO_MANY_REQUESTS",
112
+ RATE_LIMIT_RETRY = "HTTP_ERRORS.RATE_LIMIT_RETRY",
113
+ SERVER = "HTTP_ERRORS.SERVER",
114
+ NOT_IMPLEMENTED = "HTTP_ERRORS.NOT_IMPLEMENTED",
115
+ BAD_GATEWAY = "HTTP_ERRORS.BAD_GATEWAY",
116
+ SERVICE_UNAVAILABLE = "HTTP_ERRORS.SERVICE_UNAVAILABLE",
117
+ GATEWAY_TIMEOUT = "HTTP_ERRORS.GATEWAY_TIMEOUT",
118
+ MAINTENANCE = "HTTP_ERRORS.MAINTENANCE",
119
+ UNKNOWN = "HTTP_ERRORS.UNKNOWN",
120
+ CHUNK_LOAD = "HTTP_ERRORS.CHUNK_LOAD",
121
+ RUNTIME = "HTTP_ERRORS.RUNTIME"
122
+ }
123
+
124
+ /**
125
+ * All REST API endpoint paths for the Compliance Dashboard.
126
+ *
127
+ * This is the single place to update paths when the real API is integrated.
128
+ * Static paths use `as const`. Dynamic (by-ID) builders are plain functions.
129
+ *
130
+ * Usage:
131
+ * import { API_ENDPOINTS } from './ncim-sdk-core';
132
+ * this.api.get(API_ENDPOINTS.VIOLATIONS.LIST)
133
+ * this.api.get(API_ENDPOINTS.VIOLATIONS.DETAIL(id))
134
+ */
135
+ declare const API_ENDPOINTS: {
136
+ AUTH: {
137
+ LOGIN: string;
138
+ FORGOT_PASSWORD: string;
139
+ VERIFY_OTP: string;
140
+ RESEND_OTP: string;
141
+ RESET_PASSWORD: string;
142
+ REGISTER: string;
143
+ REFRESH_TOKEN: string;
144
+ PROFILE_UPDATE: string;
145
+ PROFILE_VERIFY_OTP: string;
146
+ PROFILE_RESEND_OTP: string;
147
+ SSO_CALLBACK: string;
148
+ };
149
+ VIOLATIONS: {
150
+ LIST: string;
151
+ EXPORT: string;
152
+ DETAIL: (id: number | string) => string;
153
+ };
154
+ /** Objections (known as "appeals" on the backend). */
155
+ OBJECTIONS: {
156
+ LIST: string;
157
+ DETAIL: (id: number | string) => string;
158
+ };
159
+ /** Appeals flow — full appeal lifecycle. */
160
+ APPEALS: {
161
+ INITIALIZE: (violationId: string) => string;
162
+ SUBMIT: string;
163
+ BY_ID: (appealId: string) => string;
164
+ DETAILS: (appealId: string) => string;
165
+ ATTACHMENT_UPLOAD: string;
166
+ ATTACHMENT_DOWNLOAD: (fileReference: string) => string;
167
+ LIST: string;
168
+ /** GET — returns ObjectionType[] */
169
+ OBJECTION_TYPES: string;
170
+ };
171
+ USERS: {
172
+ LIST: string;
173
+ CREATE: string;
174
+ DETAIL: (id: string) => string;
175
+ };
176
+ ROLES: {
177
+ LIST: string;
178
+ CREATE: string;
179
+ DETAIL: (id: string) => string;
180
+ };
181
+ SUPPORT: {
182
+ TICKETS: string;
183
+ TICKET: (id: string) => string;
184
+ };
185
+ REPORTS: {
186
+ LIST: string;
187
+ DETAIL: (id: string) => string;
188
+ };
189
+ COMMERCIAL_REGISTERS: {
190
+ LIST: string;
191
+ };
192
+ VIEW_LICENSES: {
193
+ GET: (ownerIdentityNo: string, ownerIdentityType: number) => string;
194
+ };
195
+ };
196
+
197
+ declare const ROUTE_PATHS: {
198
+ readonly HOME: "/";
199
+ readonly AUTH: "/auth";
200
+ readonly AUTH_LOGIN: "/auth/login";
201
+ readonly AUTH_FORGOT_PASSWORD: "/auth/forgot-password";
202
+ readonly AUTH_OTP_VERIFICATION: "/auth/otp-verification";
203
+ readonly AUTH_RESET_PASSWORD: "/auth/reset-password";
204
+ readonly REGISTER: "/register";
205
+ readonly REGISTER_SUCCESS: "/register/success";
206
+ readonly DASHBOARD: "/dashboard";
207
+ readonly DASHBOARD_HOME: "/dashboard/home";
208
+ readonly MY_FACILITIES: "/dashboard/my-facilities";
209
+ readonly COMPANY_PROFILE: "/dashboard/company-profile";
210
+ readonly REGULATORY_DASHBOARD: "/dashboard/regulatory-dashboard";
211
+ readonly VIOLATIONS: "/dashboard/violations";
212
+ readonly OBJECTIONS: "/dashboard/objections";
213
+ readonly COMPLIANCE_PROGRAM: "/dashboard/compliance-program";
214
+ readonly SMART_ADVISOR: "/dashboard/smart-advisor";
215
+ readonly KNOWLEDGE_CENTER: "/dashboard/knowledge-center";
216
+ readonly KNOWLEDGE_TOPIC: "/dashboard/knowledge-center/topic";
217
+ readonly SUPPORTER: "/dashboard/supporter";
218
+ readonly SETTINGS: "/dashboard/user-management";
219
+ readonly SETTINGS_PROFILE: "/dashboard/profile";
220
+ readonly SETTINGS_USERS_AND_ROLES: "/dashboard/user-management/users-and-roles";
221
+ readonly SETTINGS_SYSTEM: "/dashboard/user-management/system-settings";
222
+ readonly SSO_CALLBACK: "/sso-callback";
223
+ readonly SSO_ERROR: "/sso-error";
224
+ readonly FORBIDDEN: "/forbidden";
225
+ readonly NOT_FOUND: "/not-found";
226
+ readonly SERVER_ERROR: "/server-error";
227
+ readonly SERVICE_UNAVAILABLE: "/service-unavailable";
228
+ readonly MAINTENANCE: "/maintenance";
229
+ readonly TIMEOUT: "/timeout";
230
+ readonly NO_ROLE: "/no-role";
231
+ readonly ADD_USER_DETAILS: "/add-user-details";
232
+ readonly EDIT_USER_DETAILS: "/edit-user-details";
233
+ readonly EDIT_CONTACT_INFO: "/dashboard/company-profile/edit-contact-info";
234
+ readonly LOGIN_BY_NAFATH_VERIFICATION: "/auth/login-by-nafath-verification";
235
+ };
236
+
237
+ declare const ROUTE_SEGMENTS: {
238
+ readonly AUTH: "auth";
239
+ readonly LOGIN: "login";
240
+ readonly FORGOT_PASSWORD: "forgot-password";
241
+ readonly OTP_VERIFICATION: "otp-verification";
242
+ readonly RESET_PASSWORD: "reset-password";
243
+ readonly REGISTER: "register";
244
+ readonly SUCCESS: "success";
245
+ readonly DASHBOARD: "dashboard";
246
+ readonly HOME: "home";
247
+ readonly REGULATORY_DASHBOARD: "regulatory-dashboard";
248
+ readonly ENTITY_SECTOR_DETAILS: "entity-sector-details";
249
+ readonly VIEW_LICENSES: "view-licenses";
250
+ readonly VIOLATIONS: "violations";
251
+ readonly OBJECTIONS: "objections";
252
+ readonly COMPLIANCE_PROGRAM: "compliance-program";
253
+ readonly SMART_ADVISOR: "smart-advisor";
254
+ readonly KNOWLEDGE_CENTER: "knowledge-center";
255
+ readonly KNOWLEDGE_CATEGORY: "category";
256
+ readonly KNOWLEDGE_TOPIC: "topic";
257
+ readonly SUPPORTER: "supporter";
258
+ readonly GRID_DEMO: "grid-demo";
259
+ readonly DESIGN_SYSTEM: "components-design-system";
260
+ readonly UI_COMPONENTS_SHOWCASE: "ui-components";
261
+ readonly ICONS_DOCUMENT: "icons-document";
262
+ readonly PROFILE: "profile";
263
+ readonly USERS_AND_ROLES: "users-and-roles";
264
+ readonly SETTINGS: "user-management";
265
+ readonly VIOLATION_DETAILS: "violation-details";
266
+ readonly OBJECTION_DETAILS: "objection-details";
267
+ readonly SPECIFIC_REPORT_DETAILS: "report-details";
268
+ readonly LICENSES: "licenses";
269
+ readonly CHECK_LICENSE: "check-license";
270
+ readonly SYSTEM_SETTINGS: "system-settings";
271
+ readonly SSO_CALLBACK: "sso-callback";
272
+ readonly SSO_ERROR: "sso-error";
273
+ readonly FORBIDDEN: "forbidden";
274
+ readonly NOT_FOUND: "not-found";
275
+ readonly SERVER_ERROR: "server-error";
276
+ readonly SERVICE_UNAVAILABLE: "service-unavailable";
277
+ readonly MAINTENANCE: "maintenance";
278
+ readonly TIMEOUT: "timeout";
279
+ readonly NO_ROLE: "no-role";
280
+ readonly MY_FACILITIES: "my-facilities";
281
+ readonly COMPANY_PROFILE: "company-profile";
282
+ readonly COMPANY_ONBOARDING: "company-onboarding";
283
+ readonly ADD_USER_DETAILS: "add-user-details";
284
+ readonly EDIT_USER_DETAILS: "edit-user-details";
285
+ readonly EDIT_CONTACT_INFO: "edit-contact-info";
286
+ readonly LOGIN_BY_NAFATH: "login-by-nafath";
287
+ readonly LOGIN_BY_NAFATH_VERIFICATION: "login-by-nafath-verification";
288
+ };
289
+
290
+ /**
291
+ * Centralized regex patterns for validation and directives.
292
+ * Use REGEX for validators/directives; VALIDATION_PATTERNS is the legacy subset for backward compatibility.
293
+ */
294
+ /** All shared regex patterns. */
295
+ declare const REGEX: {
296
+ /** Saudi identity: starts with 1 or 2, 10 digits. */
297
+ readonly IDENTITY_NUMBER: RegExp;
298
+ /** Saudi mobile: starts with 5, 9 digits. */
299
+ readonly MOBILE_SAUDI: RegExp;
300
+ /** Saudi mobile national format: `05` + 8 digits (10 characters). */
301
+ readonly MOBILE_SAUDI_05: RegExp;
302
+ /** Generic 10-digit ID. */
303
+ readonly ID_NUMBER: RegExp;
304
+ /** CR number: 10 digits. */
305
+ readonly CR_NUMBER: RegExp;
306
+ /** Email address. */
307
+ readonly EMAIL: RegExp;
308
+ /** International phone: optional +, 7–15 digits. */
309
+ readonly PHONE: RegExp;
310
+ /** HTTP/HTTPS URL. */
311
+ readonly URL: RegExp;
312
+ /** One or more digits. */
313
+ readonly NUMBERS_ONLY: RegExp;
314
+ /** Letters (English + Arabic) and spaces. */
315
+ readonly LETTERS_ONLY: RegExp;
316
+ /** Saudi IBAN: SA + 22 digits. */
317
+ readonly SAUDI_IBAN: RegExp;
318
+ /** English letters and spaces. */
319
+ readonly ENGLISH_ONLY: RegExp;
320
+ /** Arabic letters and spaces. */
321
+ readonly ARABIC_ONLY: RegExp;
322
+ /** English, Arabic, digits, spaces. */
323
+ readonly ALPHANUMERIC: RegExp;
324
+ readonly PASSWORD_UPPERCASE: RegExp;
325
+ readonly PASSWORD_LOWERCASE: RegExp;
326
+ readonly PASSWORD_NUMBER: RegExp;
327
+ readonly PASSWORD_SPECIAL: RegExp;
328
+ /** Strip all whitespace. */
329
+ readonly WHITESPACE_GLOBAL: RegExp;
330
+ /** Strip non-digits (for phone). */
331
+ readonly NON_DIGITS: RegExp;
332
+ /** Strip non–0-9. */
333
+ readonly NON_NUMBERS: RegExp;
334
+ /** Strip non–English letters/spaces. */
335
+ readonly NON_ENGLISH: RegExp;
336
+ /** Strip non–email-allowed chars. */
337
+ readonly NON_EMAIL_CHARS: RegExp;
338
+ /** Strip non–Arabic/symbols (Arabic + spaces + Arabic digits). */
339
+ readonly NON_ARABIC: RegExp;
340
+ /** Strip non–alphanumeric (English, Arabic, digits, space). */
341
+ readonly NON_ALPHANUMERIC: RegExp;
342
+ /** For escaping HTML in attributes/text. */
343
+ readonly HTML_ESCAPE: RegExp;
344
+ };
345
+ /** Legacy subset used by validators (identity, Saudi mobile, ID number). */
346
+ declare const VALIDATION_PATTERNS: {
347
+ readonly IDENTITY_NUMBER: RegExp;
348
+ readonly MOBILE_SAUDI: RegExp;
349
+ readonly MOBILE_SAUDI_05: RegExp;
350
+ readonly ID_NUMBER: RegExp;
351
+ };
352
+
353
+ /** Re-export for backward compatibility. */
354
+
355
+ declare const VALIDATION_LENGTHS: {
356
+ readonly IDENTITY_NUMBER: 10;
357
+ readonly PASSWORD_MIN: 8;
358
+ /** Max digits in national mobile field (with `+966` prefix in UI). `05` + 8 = 10; legacy `5` + 8 = 9 still fits. */
359
+ readonly MOBILE: 10;
360
+ readonly OTP: 4;
361
+ readonly MIN_LENGTH: 3;
362
+ readonly MAX_LENGTH: 255;
363
+ readonly MAX_LENGTH_10: 10;
364
+ readonly MAX_LENGTH_20: 20;
365
+ readonly MAX_LENGTH_30: 30;
366
+ readonly MAX_LENGTH_50: 50;
367
+ readonly MAX_LENGTH_100: 100;
368
+ readonly MAX_LENGTH_255: 255;
369
+ readonly MAX_LENGTH_500: 500;
370
+ };
371
+
372
+ declare const REGISTRATION_STEPS: {
373
+ readonly FIRST: 1;
374
+ };
375
+ interface SidebarContent {
376
+ titleKey: string;
377
+ descriptionKey: string;
378
+ }
379
+ declare const SIDEBAR_CONFIG: Record<number, SidebarContent>;
380
+ declare const SIDEBAR_DEFAULT_STEP = 2;
381
+ declare const REGISTRATION_DEFAULTS: {
382
+ readonly REPRESENTATIVE_NAME: "خالد محمد";
383
+ readonly PACKAGE_NAME: "الاساسية";
384
+ readonly PACKAGE_PRICE: "23.000";
385
+ readonly MOCK_SESSION_DATE: "الأثنين، 27 يوليو 2025 - 2:30 مساءً";
386
+ };
387
+ interface RegistrationStepDefinition {
388
+ id: string;
389
+ labelKey: string;
390
+ titleKey: string;
391
+ subtitleKey: string;
392
+ }
393
+ declare const GOVERNMENT_STEPS: readonly RegistrationStepDefinition[];
394
+ declare const BUSINESS_STEPS: readonly RegistrationStepDefinition[];
395
+ declare const INSPECTION_STEPS: readonly RegistrationStepDefinition[];
396
+ declare const ENTITY_TYPE_OPTIONS: readonly [{
397
+ readonly id: EntityType.GOVERNMENT;
398
+ readonly title: "AUTH.REGISTER.ENTITY_GOV";
399
+ readonly description: "AUTH.REGISTER.ENTITY_GOV_DESC";
400
+ readonly icon: "building";
401
+ }, {
402
+ readonly id: EntityType.INSPECTION;
403
+ readonly title: "AUTH.REGISTER.ENTITY_INSP";
404
+ readonly description: "AUTH.REGISTER.ENTITY_INSP_DESC";
405
+ readonly icon: "incognito";
406
+ readonly disabled: true;
407
+ }, {
408
+ readonly id: EntityType.BUSINESS;
409
+ readonly title: "AUTH.REGISTER.ENTITY_BUSINESS";
410
+ readonly description: "AUTH.REGISTER.ENTITY_BUSINESS_DESC";
411
+ readonly icon: "muslim";
412
+ }];
413
+
414
+ declare const PACKAGE_FEATURES: readonly [{
415
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURE_AI_ADVISOR";
416
+ readonly included: true;
417
+ }, {
418
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURE_SELF_ASSESSMENT";
419
+ readonly included: true;
420
+ }, {
421
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURE_EDU_MATERIALS";
422
+ readonly included: true;
423
+ }, {
424
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURE_ONSITE_VISITS";
425
+ readonly included: true;
426
+ }, {
427
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURE_COMMERCIAL_LICENSE";
428
+ readonly included: true;
429
+ }];
430
+ declare const PACKAGES: readonly [{
431
+ readonly id: PackageType.BASIC;
432
+ readonly name: "AUTH.REGISTER.BASIC_PACKAGE";
433
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURES_TITLE";
434
+ readonly description: "AUTH.REGISTER.PACKAGE_FEATURES_DESCRIPTION";
435
+ readonly price: "23.000";
436
+ readonly features: ("AUTH.REGISTER.PACKAGE_FEATURE_AI_ADVISOR" | "AUTH.REGISTER.PACKAGE_FEATURE_SELF_ASSESSMENT" | "AUTH.REGISTER.PACKAGE_FEATURE_EDU_MATERIALS" | "AUTH.REGISTER.PACKAGE_FEATURE_ONSITE_VISITS" | "AUTH.REGISTER.PACKAGE_FEATURE_COMMERCIAL_LICENSE")[];
437
+ readonly popular: true;
438
+ readonly special: false;
439
+ }, {
440
+ readonly id: PackageType.VIOLATIONS;
441
+ readonly name: "AUTH.REGISTER.VIOLATION_DATA";
442
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURES_TITLE";
443
+ readonly description: "AUTH.REGISTER.PACKAGE_FEATURES_DESCRIPTION";
444
+ readonly price: "45.000";
445
+ readonly features: ("AUTH.REGISTER.PACKAGE_FEATURE_AI_ADVISOR" | "AUTH.REGISTER.PACKAGE_FEATURE_SELF_ASSESSMENT" | "AUTH.REGISTER.PACKAGE_FEATURE_EDU_MATERIALS" | "AUTH.REGISTER.PACKAGE_FEATURE_ONSITE_VISITS" | "AUTH.REGISTER.PACKAGE_FEATURE_COMMERCIAL_LICENSE")[];
446
+ readonly popular: false;
447
+ readonly special: false;
448
+ }, {
449
+ readonly id: PackageType.ENTERPRISE;
450
+ readonly name: "AUTH.REGISTER.ENTERPRISE_PACKAGE";
451
+ readonly title: "AUTH.REGISTER.PACKAGE_FEATURES_TITLE";
452
+ readonly description: "AUTH.REGISTER.PACKAGE_FEATURES_DESCRIPTION";
453
+ readonly price: "80.000";
454
+ readonly features: ("AUTH.REGISTER.PACKAGE_FEATURE_AI_ADVISOR" | "AUTH.REGISTER.PACKAGE_FEATURE_SELF_ASSESSMENT" | "AUTH.REGISTER.PACKAGE_FEATURE_EDU_MATERIALS" | "AUTH.REGISTER.PACKAGE_FEATURE_ONSITE_VISITS" | "AUTH.REGISTER.PACKAGE_FEATURE_COMMERCIAL_LICENSE")[];
455
+ readonly popular: false;
456
+ readonly special: false;
457
+ }, {
458
+ readonly id: PackageType.CUSTOM;
459
+ readonly name: "AUTH.REGISTER.CUSTOM_PACKAGE";
460
+ readonly title: "AUTH.REGISTER.PACKAGE_CUSTOM_FEATURES_TITLE";
461
+ readonly description: "AUTH.REGISTER.PACKAGE_FEATURES_DESCRIPTION";
462
+ readonly features: ("AUTH.REGISTER.PACKAGE_FEATURE_AI_ADVISOR" | "AUTH.REGISTER.PACKAGE_FEATURE_SELF_ASSESSMENT" | "AUTH.REGISTER.PACKAGE_FEATURE_EDU_MATERIALS" | "AUTH.REGISTER.PACKAGE_FEATURE_ONSITE_VISITS" | "AUTH.REGISTER.PACKAGE_FEATURE_COMMERCIAL_LICENSE")[];
463
+ readonly price: "100.000";
464
+ readonly popular: false;
465
+ readonly special: true;
466
+ }];
467
+ declare const TIME: readonly ["0-2", "2-4", "4-6", "6-8", "8-10", "10-12", "12-14", "14-16", "16-18", "18-20", "20-22", "22-24"];
468
+
469
+ declare const ENTITY_DETAILS_OPTIONS: {
470
+ readonly BRANCHES: readonly ["أكثر من 25", "25-11", "6-10", "5-1"];
471
+ readonly EMPLOYEES: readonly ["أكثر من 1000", "1000-500", "250-100", "أقل من 100"];
472
+ readonly ENTITY_NAMES: readonly [{
473
+ readonly value: "saudi-water-authority";
474
+ readonly label: "الهيئة السعودية للمياه";
475
+ }, {
476
+ readonly value: "ministry-of-commerce";
477
+ readonly label: "وزارة التجارة";
478
+ }, {
479
+ readonly value: "ministry-of-municipal";
480
+ readonly label: "وزارة الشؤون البلدية والقروية والإسكان";
481
+ }, {
482
+ readonly value: "ministry-of-environment";
483
+ readonly label: "وزارة البيئة والمياه والزراعة";
484
+ }, {
485
+ readonly value: "ministry-of-health";
486
+ readonly label: "وزارة الصحة";
487
+ }, {
488
+ readonly value: "ministry-of-industry";
489
+ readonly label: "وزارة الصناعة والثروة المعدنية";
490
+ }, {
491
+ readonly value: "food-drug-authority";
492
+ readonly label: "الهيئة العامة للغذاء والدواء";
493
+ }, {
494
+ readonly value: "civil-defense";
495
+ readonly label: "المديرية العامة للدفاع المدني";
496
+ }, {
497
+ readonly value: "standards-authority";
498
+ readonly label: "الهيئة السعودية للمواصفات والمقاييس";
499
+ }, {
500
+ readonly value: "energy-authority";
501
+ readonly label: "هيئة تنظيم المياه والكهرباء";
502
+ }];
503
+ readonly REGULATORY_SECTORS: readonly [{
504
+ readonly value: "environment";
505
+ readonly label: "البيئة";
506
+ }, {
507
+ readonly value: "health";
508
+ readonly label: "الصحة";
509
+ }, {
510
+ readonly value: "commerce";
511
+ readonly label: "التجارة";
512
+ }, {
513
+ readonly value: "industry";
514
+ readonly label: "الصناعة";
515
+ }, {
516
+ readonly value: "food-safety";
517
+ readonly label: "سلامة الغذاء";
518
+ }, {
519
+ readonly value: "fire-safety";
520
+ readonly label: "السلامة والحماية من الحريق";
521
+ }, {
522
+ readonly value: "construction";
523
+ readonly label: "البناء والتشييد";
524
+ }, {
525
+ readonly value: "energy";
526
+ readonly label: "الطاقة";
527
+ }, {
528
+ readonly value: "water";
529
+ readonly label: "المياه والصرف الصحي";
530
+ }, {
531
+ readonly value: "labor";
532
+ readonly label: "العمل والتوظيف";
533
+ }];
534
+ };
535
+ declare const ENTITY_DETAILS_DEFAULTS: {
536
+ readonly BRANCHES_COUNT: "6-10";
537
+ readonly EMPLOYEES_COUNT: "100-250";
538
+ };
539
+
540
+ declare const ERROR_KEYS: {
541
+ readonly REQUIRED: "ERRORS.REQUIRED";
542
+ readonly PASSWORD_MIN_LENGTH: "ERRORS.PASSWORD_MIN_LENGTH";
543
+ readonly IDENTITY_MIN_LENGTH: "ERRORS.IDENTITY_MIN_LENGTH";
544
+ readonly IDENTITY_MAX_LENGTH: "ERRORS.IDENTITY_MAX_LENGTH";
545
+ readonly IDENTITY_INVALID: "ERRORS.IDENTITY_INVALID";
546
+ readonly IDENTITY_NUMBERS_ONLY: "ERRORS.IDENTITY_NUMBERS_ONLY";
547
+ readonly MIN_LENGTH: "ERRORS.MIN_LENGTH";
548
+ readonly MAX_LENGTH: "ERRORS.MAX_LENGTH";
549
+ readonly MAX_LENGTH_100: "ERRORS.MAX_LENGTH_100";
550
+ readonly MAX_LENGTH_10: "ERRORS.MAX_LENGTH_10";
551
+ readonly INVALID_FORMAT: "ERRORS.INVALID_FORMAT";
552
+ readonly INVALID_EMAIL: "ERRORS.INVALID_EMAIL";
553
+ readonly MIN_VALUE: "ERRORS.MIN_VALUE";
554
+ readonly MAX_VALUE: "ERRORS.MAX_VALUE";
555
+ readonly PASSWORD_MISMATCH: "ERRORS.PASSWORD_MISMATCH";
556
+ readonly NUMBERS_ONLY: "ERRORS.NUMBERS_ONLY";
557
+ readonly LETTERS_ONLY: "ERRORS.LETTERS_ONLY";
558
+ readonly ARABIC_ONLY: "ERRORS.ARABIC_ONLY";
559
+ readonly ENGLISH_ONLY: "ERRORS.ENGLISH_ONLY";
560
+ readonly ALPHANUMERIC_ONLY: "ERRORS.ALPHANUMERIC_ONLY";
561
+ readonly INVALID_PHONE: "ERRORS.INVALID_PHONE";
562
+ /** Saudi mobile: must start with 05 and be 10 digits. */
563
+ readonly INVALID_PHONE_SA_05: "ERRORS.INVALID_PHONE_SA_05";
564
+ readonly INVALID_URL: "ERRORS.INVALID_URL";
565
+ readonly INVALID_IBAN: "ERRORS.INVALID_IBAN";
566
+ readonly INVALID_CR_NUMBER: "ERRORS.INVALID_CR_NUMBER";
567
+ readonly WEAK_PASSWORD: "ERRORS.WEAK_PASSWORD";
568
+ readonly WHITESPACE_ONLY: "ERRORS.WHITESPACE_ONLY";
569
+ readonly DATE_BEFORE_MIN: "ERRORS.DATE_BEFORE_MIN";
570
+ readonly DATE_AFTER_MAX: "ERRORS.DATE_AFTER_MAX";
571
+ readonly CONFIRMATION_MISMATCH: "ERRORS.CONFIRMATION_MISMATCH";
572
+ readonly AT_LEAST_ONE_OPTION_REQUIRED: "ERRORS.AT_LEAST_ONE_OPTION_REQUIRED";
573
+ readonly PERCENTAGE_EXCEEDS_TOTAL: "ERRORS.PERCENTAGE_EXCEEDS_TOTAL";
574
+ readonly STAGE_TAKES_100: "ERRORS.STAGE_TAKES_100";
575
+ readonly TOTAL_LESS_THAN_100: "ERRORS.TOTAL_LESS_THAN_100";
576
+ readonly INVALID_SHORT_ADDRESS: "ERRORS.INVALID_SHORT_ADDRESS";
577
+ };
578
+
579
+ /** i18n paths and default language for @ngx-translate. */
580
+ declare const I18N_CONFIG: {
581
+ readonly DEFAULT_LANGUAGE: Language.AR;
582
+ readonly TRANSLATION_PREFIX: "./assets/i18n/";
583
+ readonly TRANSLATION_SUFFIX: ".json";
584
+ };
585
+
586
+ declare const PRIMENG_LOCALE: Record<string, Translation>;
587
+
588
+ declare const ASSET_PATHS: {
589
+ readonly NCIM_LOGO: "assets/images/ncim-logo.svg";
590
+ readonly NAFATH_ICON: "assets/images/nafath-icon.svg";
591
+ readonly REGISTER_SIDEBAR: "assets/images/register.png";
592
+ readonly SIDEBAR_BG: "assets/images/bg-side.png";
593
+ readonly SUCCESS: "assets/images/Success.png";
594
+ readonly SAUDI_FLAG: "assets/images/saudi-flag.svg";
595
+ readonly CAPTCHA_IMAGE: "assets/images/ver.png";
596
+ };
597
+
598
+ declare const ICONS: {
599
+ readonly PAGES_ICONS: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M19.002 1.25977C20.5198 1.26086 21.7498 2.49192 21.75 4.00977V19.999C21.7497 21.5176 20.5186 22.749 19 22.749H5C3.48137 22.749 2.25025 21.5176 2.25 19.999V4C2.25 2.48045 3.48241 1.24892 5.00195 1.25L19.002 1.25977ZM5.00098 2.75C4.31027 2.7495 3.75 3.30929 3.75 4V19.999C3.75025 20.6892 4.3098 21.249 5 21.249H19C19.6902 21.249 20.2497 20.6892 20.25 19.999V4.00977C20.2498 3.31995 19.6908 2.7603 19.001 2.75977L5.00098 2.75ZM10.5557 13.75C10.9698 13.7501 11.3057 14.0858 11.3057 14.5C11.3057 14.9142 10.9698 15.2499 10.5557 15.25H7C6.58579 15.25 6.25 14.9142 6.25 14.5C6.25 14.0858 6.58579 13.75 7 13.75H10.5557ZM15 8.75C15.4142 8.75 15.75 9.08579 15.75 9.5C15.75 9.91421 15.4142 10.25 15 10.25H7C6.58579 10.25 6.25 9.91421 6.25 9.5C6.25 9.08579 6.58579 8.75 7 8.75H15Z\" fill=\"currentColor\"/></svg>";
600
+ readonly PRINT_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\"><path d=\"M14.25 0C15.4926 0 16.5 1.00736 16.5 2.25V6H17.75C19.8211 6 21.5 7.67893 21.5 9.75V15.75C21.5 16.7165 20.7165 17.5 19.75 17.5H16.5V18.75C16.5 20.2688 15.2688 21.5 13.75 21.5H7.75C6.23122 21.5 5 20.2688 5 18.75V17.5H1.75C0.783502 17.5 0 16.7165 0 15.75V9.75C0 7.67893 1.67893 6 3.75 6H5V2.25C5 1.00736 6.00736 0 7.25 0H14.25ZM6.5 18.75C6.5 19.4404 7.05964 20 7.75 20H13.75C14.4404 20 15 19.4404 15 18.75V15.5H6.5V18.75ZM3.75 7.5C2.50736 7.5 1.5 8.50736 1.5 9.75V15.75C1.5 15.8881 1.61193 16 1.75 16H5V14.75C5 14.3358 5.33579 14 5.75 14H15.75C16.1642 14 16.5 14.3358 16.5 14.75V16H19.75C19.8881 16 20 15.8881 20 15.75V9.75C20 8.50736 18.9926 7.5 17.75 7.5H3.75ZM17.2588 9.25C17.8111 9.25 18.2588 9.69771 18.2588 10.25C18.2588 10.8023 17.8111 11.25 17.2588 11.25H17.25C16.6977 11.25 16.25 10.8023 16.25 10.25C16.25 9.69771 16.6977 9.25 17.25 9.25H17.2588ZM7.25 1.5C6.83579 1.5 6.5 1.83579 6.5 2.25V6H15V2.25C15 1.83579 14.6642 1.5 14.25 1.5H7.25Z\" fill=\"currentColor\"/></svg>";
601
+ readonly DELETE_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"22\" viewBox=\"0 0 20 22\" fill=\"none\"><path d=\"M11.5908 0C12.2908 8.59975e-05 12.9235 0.41719 13.1992 1.06055L14.2441 3.5H18.75C19.1642 3.5 19.5 3.83579 19.5 4.25C19.5 4.66421 19.1642 5 18.75 5H17.9561L17.1123 18.916C17.0243 20.3675 15.8214 21.5 14.3672 21.5H5.13281C3.67864 21.5 2.47567 20.3675 2.3877 18.916L1.54395 5H0.75C0.335786 5 0 4.66421 0 4.25C0 3.83579 0.335786 3.5 0.75 3.5H5.25586L6.30078 1.06055C6.57652 0.41719 7.20923 8.59974e-05 7.90918 0H11.5908ZM3.88477 18.8252C3.92475 19.485 4.47182 20 5.13281 20H14.3672C15.0282 20 15.5752 19.485 15.6152 18.8252L16.4531 5H3.04688L3.88477 18.8252ZM11.25 13.5C11.6642 13.5 12 13.8358 12 14.25C12 14.6642 11.6642 15 11.25 15H8.25C7.83579 15 7.5 14.6642 7.5 14.25C7.5 13.8358 7.83579 13.5 8.25 13.5H11.25ZM12.75 9.5C13.1642 9.5 13.5 9.83579 13.5 10.25C13.5 10.6642 13.1642 11 12.75 11H6.75C6.33579 11 6 10.6642 6 10.25C6 9.83579 6.33579 9.5 6.75 9.5H12.75ZM7.90918 1.5C7.80932 1.50009 7.71909 1.5596 7.67969 1.65137L6.8877 3.5H12.6123L11.8203 1.65137C11.7809 1.5596 11.6907 1.50009 11.5908 1.5H7.90918Z\" fill=\"currentColor\"/></svg>";
602
+ readonly COPY_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><g clip-path=\"url(#clip0_5613_101839)\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M13.335 0.841797C14.3468 0.842691 15.1669 1.66294 15.167 2.67481V9.33496C15.167 10.3475 14.3455 11.1689 13.333 11.1689H12.5V13.334C12.5 14.3464 11.6794 15.1678 10.667 15.168H2.66699C1.65447 15.168 0.833008 14.3465 0.833008 13.334V6.00293C0.833008 4.9895 1.65556 4.16866 2.66895 4.16992L3.5 4.1709V2.66992C3.5 1.65692 4.32196 0.835265 5.33496 0.835938L13.335 0.841797ZM2.66797 5.16992C2.20727 5.16927 1.83301 5.54223 1.83301 6.00293V13.334C1.83301 13.7942 2.20675 14.168 2.66699 14.168H10.667C11.1271 14.1678 11.5 13.7941 11.5 13.334V11.1689H5.33301C4.32064 11.1688 3.5 10.3474 3.5 9.33496V5.1709L2.66797 5.16992ZM5.33398 1.83594C4.87353 1.83563 4.5 2.20947 4.5 2.66992V9.33496C4.5 9.79509 4.87292 10.1688 5.33301 10.1689H13.333C13.7932 10.1689 14.167 9.7952 14.167 9.33496V2.67481C14.1669 2.21487 13.7939 1.84216 13.334 1.8418L5.33398 1.83594Z\" fill=\"#384250\"/></g><defs><clipPath id=\"clip0_5613_101839\"><rect width=\"16\" height=\"16\" fill=\"white\"/></clipPath></defs></svg>";
603
+ readonly MESSAGE_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"96\" height=\"94\" fill=\"none\" viewBox=\"0 0 96 94\"><g filter=\"url(#a)\"><path fill=\"url(#b)\" d=\"M23.47 44.623c2.974 2.337 6.679 3.59 10.415 4.204q.49.085.983.147 1.134.158 2.275.255a3.85 3.85 0 0 1 3.519 3.836v5.255c0 .794.984 1.184 1.51.588 1.878-2.134 4.901-3.994 8.069-5.517.925-.451 1.867-.868 2.801-1.253 5.212-2.18 10.038-3.409 10.038-3.409q1.206-.28 2.377-.673c.048-.016.09-.024.13-.04q.331-.111.647-.22l.09-.034v-.008c3.287-1.205 6.31-3.073 8.547-5.736 3.147-3.753 4.474-8.71 4.974-13.577.64-6.294-.05-13.103-3.531-18.527C72.78 4.4 66.882 1.416 60.524.474c-5.425-.811-10.939-.36-16.43-.246C37.4.376 30.207.146 24.61 3.833c-3.195 2.106-5.548 5.352-6.973 8.908-1.434 3.556-1.983 7.408-2.065 11.242-.171 7.637 1.877 15.92 7.9 20.64\"/><path fill=\"url(#c)\" d=\"M62.292 37.959c-1.77 1.389-3.974 2.135-6.196 2.501a13 13 0 0 1-.62.092c-1.94.27-3.413 1.872-3.413 3.83v.863c0 .754-.9 1.16-1.452.647-1.112-1.035-2.65-1.948-4.248-2.717-.55-.268-1.11-.517-1.667-.745-3.1-1.297-5.972-2.029-5.972-2.029q-.72-.166-1.415-.4c-.029-.01-.053-.015-.077-.024l-.44-.152v-.004c-1.954-.717-3.754-1.829-5.084-3.414-1.873-2.232-2.662-5.181-2.96-8.078-.38-3.744.03-7.797 2.1-11.024 2.102-3.281 5.613-5.056 9.397-5.616 3.227-.483 6.509-.215 9.775-.147 3.983.088 8.264-.049 11.594 2.145 1.901 1.253 3.301 3.185 4.15 5.3.853 2.117 1.18 4.407 1.228 6.69.102 4.544-1.116 9.473-4.7 12.282\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#d)\" d=\"m44.799 49.56 5.44 3.828a50 50 0 0 1 2.802-1.253c5.212-2.18 10.038-3.408 10.038-3.408s-5.162 1.35-18.28.833\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"#fff\" d=\"M62.292 35.817c-1.77 1.39-3.974 2.136-6.196 2.501q-.294.052-.586.088l-.034.005c-1.94.27-3.413 1.872-3.413 3.83v.863c0 .754-.9 1.16-1.452.647-1.112-1.035-2.65-1.948-4.248-2.716-.55-.269-1.11-.517-1.667-.747-3.1-1.297-5.972-2.028-5.972-2.028q-.72-.167-1.415-.4c-.029-.01-.053-.015-.077-.024l-.44-.151v-.005c-1.954-.716-3.754-1.828-5.084-3.413-1.873-2.233-2.662-5.183-2.96-8.079-.38-3.745.03-7.796 2.1-11.023 2.102-3.282 5.613-5.056 9.397-5.617 3.227-.483 6.509-.215 9.775-.147 3.983.088 8.264-.048 11.594 2.146 1.901 1.253 3.301 3.183 4.15 5.3.853 2.116 1.18 4.407 1.228 6.688.102 4.544-1.116 9.474-4.7 12.282\"/><path fill=\"url(#e)\" d=\"m49.6 38.754-3.237 2.278c-.55-.268-1.11-.517-1.667-.747-3.101-1.297-5.972-2.027-5.972-2.027s3.07.803 10.877.496\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#f)\" d=\"M54.255 24.653a3.707 3.707 0 1 0 7.414 0 3.707 3.707 0 0 0-7.414 0\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#g)\" d=\"M44.103 24.653a3.707 3.707 0 1 0 7.414 0 3.707 3.707 0 0 0-7.414 0\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#h)\" d=\"M33.95 24.653a3.707 3.707 0 1 0 7.415 0 3.707 3.707 0 0 0-7.415 0\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/></g><defs><linearGradient id=\"b\" x1=\"108.145\" x2=\"75.64\" y1=\"95.649\" y2=\"1.916\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#19004d\"/><stop offset=\"1\" stop-color=\"#54c08a\"/></linearGradient><linearGradient id=\"c\" x1=\"31.993\" x2=\"31.312\" y1=\"17.063\" y2=\"50.677\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".606\" stop-color=\"#19004d\" stop-opacity=\".91\"/><stop offset=\".746\" stop-color=\"#a58cf4\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"d\" x1=\"54.82\" x2=\"50.338\" y1=\"44.667\" y2=\"56.993\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".512\" stop-color=\"#19004d\" stop-opacity=\".91\"/><stop offset=\".76\" stop-color=\"#a58cf4\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"e\" x1=\"43.638\" x2=\"46.304\" y1=\"35.842\" y2=\"43.176\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".512\" stop-color=\"#1b8354\"/><stop offset=\".76\" stop-color=\"#1b8354\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"f\" x1=\"66.672\" x2=\"56.235\" y1=\"32.49\" y2=\"8.404\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".267\" stop-color=\"#1b8354\"/><stop offset=\".63\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"g\" x1=\"56.52\" x2=\"46.083\" y1=\"32.49\" y2=\"8.404\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".267\" stop-color=\"#1b8354\"/><stop offset=\".63\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"h\" x1=\"46.368\" x2=\"35.931\" y1=\"32.49\" y2=\"8.404\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".267\" stop-color=\"#1b8354\"/><stop offset=\".63\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><filter id=\"a\" width=\"95.62\" height=\"93.256\" x=\"0\" y=\"0\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/><feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/><feMorphology in=\"SourceAlpha\" radius=\"14.439\" result=\"effect1_dropShadow_6167_40545\"/><feOffset dy=\"18.5\"/><feGaussianBlur stdDeviation=\"15\"/><feComposite in2=\"hardAlpha\" operator=\"out\"/><feColorMatrix values=\"0 0 0 0 0.105882 0 0 0 0 0.513726 0 0 0 0 0.329412 0 0 0 0.24 0\"/><feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_6167_40545\"/><feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_6167_40545\" result=\"shape\"/></filter></defs></svg>";
604
+ readonly SAR_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" fill=\"none\" viewBox=\"0 0 16 17\"><path fill=\"#161616\" d=\"M15.213 13.022a6.7 6.7 0 0 0 .558-2.084l-4.807 1.022V9.995l4.249-.903a6.7 6.7 0 0 0 .558-2.084l-4.807 1.021V.961A6.8 6.8 0 0 0 9.04 2.575v5.863l-1.922.409V0a6.8 6.8 0 0 0-1.923 1.613v7.642l-4.301.914a6.7 6.7 0 0 0-.559 2.084l4.86-1.032v2.475l-5.208 1.106a6.7 6.7 0 0 0-.558 2.085l5.452-1.159a1.73 1.73 0 0 0 1.073-.716l1-1.482a.96.96 0 0 0 .164-.538v-2.18l1.922-.409v3.931z\"/></svg>";
605
+ readonly LAYERS_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"18\" fill=\"none\" viewBox=\"0 0 17 18\"><path fill=\"#1f2a37\" d=\"M14.296 11.785c.28-.36.79-.42 1.142-.133.435.356.812.846.812 1.529 0 .862-.593 1.408-1.173 1.79-.583.385-1.426.779-2.44 1.253l-1.447.675-.156.074c-1.19.557-2.016.943-2.909.943s-1.718-.386-2.91-.943l-.154-.074-1.448-.675c-1.014-.474-1.857-.868-2.44-1.252C.593 14.589 0 14.042 0 13.18c0-.683.377-1.173.813-1.529a.8.8 0 0 1 1.141.133c.28.36.222.884-.129 1.171a.8.8 0 0 0-.19.197c-.01.019-.01.024-.01.027l.001.008a.2.2 0 0 0 .03.05c.053.07.165.18.396.331.472.311 1.206.657 2.298 1.167l1.384.647c1.41.659 1.895.866 2.391.866s.981-.207 2.39-.866l1.385-.647c1.092-.51 1.826-.856 2.298-1.167.23-.152.343-.261.396-.33a.2.2 0 0 0 .03-.05l.001-.008v-.001c0-.003 0-.008-.01-.027a.8.8 0 0 0-.19-.197.85.85 0 0 1-.13-1.17m0-4.27c.28-.36.79-.42 1.142-.133.435.356.812.846.812 1.528 0 .862-.593 1.408-1.173 1.79-.583.384-1.426.78-2.44 1.253l-1.447.676-.156.073c-1.19.557-2.016.944-2.909.944s-1.718-.387-2.91-.944l-.154-.073-1.448-.676c-1.014-.474-1.857-.869-2.44-1.253C.593 10.318 0 9.772 0 8.91c0-.682.377-1.172.813-1.528a.8.8 0 0 1 1.141.133c.28.36.222.884-.129 1.17a.8.8 0 0 0-.19.198c-.01.018-.01.022-.01.025v.002l.001.008c.001.003.008.02.03.05.053.07.165.18.396.33.472.312 1.206.657 2.298 1.167l1.384.647c1.41.659 1.895.867 2.391.867s.981-.208 2.39-.867l1.385-.647c1.092-.51 1.826-.855 2.298-1.166.23-.152.343-.262.396-.331a.2.2 0 0 0 .03-.05l.001-.008v-.002c0-.003 0-.007-.01-.025a.8.8 0 0 0-.19-.197.85.85 0 0 1-.13-1.171M8.125 0c.871 0 1.68.374 2.928.951l.132.06 1.47.68c1.052.486 1.905.882 2.49 1.263.586.382 1.105.879 1.105 1.629s-.519 1.247-1.104 1.629-1.44.777-2.49 1.263l-1.471.68-.132.06c-1.249.577-2.057.951-2.928.951s-1.68-.374-2.928-.951l-.132-.06-1.47-.68c-1.052-.486-1.905-.882-2.49-1.263C.518 5.83 0 5.334 0 4.583c0-.75.519-1.247 1.104-1.629s1.44-.777 2.49-1.263l1.471-.68.132-.06C6.446.374 7.254 0 8.125 0\"/></svg>";
606
+ readonly FILE_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"17\" fill=\"none\" viewBox=\"0 0 18 17\"><path fill=\"#1b8354\" d=\"M6.904 0a1.63 1.63 0 0 1 1.348.705l1.14 1.67h4.428c1.342 0 2.43 1.063 2.43 2.375v1.917h.184c.97 0 1.715.922 1.419 1.882l-2.059 6.667a1.48 1.48 0 0 1-1.418 1.034H2.855c-.694 0-1.311-.477-1.454-1.169L.031 8.414c-.19-.925.537-1.747 1.452-1.747h.183V1.583C1.666.709 2.392 0 3.286 0zM3.286 6.667H14.63V4.75a.8.8 0 0 0-.81-.792H8.96a.82.82 0 0 1-.676-.353L6.904 1.583H3.286z\"/></svg>";
607
+ readonly INFO_CIRCLE: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>";
608
+ readonly SAND_GLASS: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 22h14\"/><path d=\"M5 2h14\"/><path d=\"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22\"/><path d=\"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2\"/></svg>";
609
+ };
610
+
611
+ /**
612
+ * AUTO-GENERATED FILE - DO NOT EDIT MANUALLY.
613
+ * Run "npm run icons:sync" to regenerate.
614
+ */
615
+ declare const GENERATED_ICON_NAMES: readonly ["active-group", "activity", "activity-background", "activity-regular", "add-user", "ai-magic", "aiIcon", "alarm", "alarm-clock-background", "album-02", "alert", "alert-01", "alert-background", "analytics-down", "analytics-down-background", "analyticsBackground", "arrow-left", "arrow-left-01", "arrow-up-left", "arrowUp", "arrowUpWarning", "Avatar-details", "Ball", "bell", "block", "book", "bookmark", "brain", "briefcase", "briefcase-06", "bubble-chat-add", "building", "building-section", "building-settings", "buildingBackground", "cakender-plus", "calendar", "calendar-04", "calendar-icon", "calendar-minus", "calendar-plus", "camera", "change-screen-mode", "chart-bar", "chart-line", "chat", "chatPlus", "check", "check-circle", "checked", "chevron-down", "chevronDown", "chevronLeft", "chevronRight", "circle-check", "clipboard", "clock", "close", "close-popup", "close-side", "cog", "colored-file", "columns", "commercial-section", "compare", "confirm-add", "copy", "credit-card", "customer-service", "dashboard", "datepicker", "datepicker-arrow", "datepicker-chevron-down", "decreaseArrow", "delete", "dislike", "distribute-horizontal-center", "docs-validation", "document", "download", "download-small", "download2", "edit", "edit-02", "ellipsis", "empty-companies", "empty-module", "entertainment-section", "entity-building", "eye", "eyeOff", "feedback", "Feedback-Icon", "fees", "ferrisWheelBackground", "fileUpload", "fill-worring", "filter", "finalSeccess", "fire", "folder", "full-page", "gavel", "grean-file", "hand", "hand-raised", "help", "help-circle", "hold", "hold-background", "home", "home-01", "honour-star", "hourglass", "incognito", "increaseArrow", "info", "information-circle", "layers", "layers-01", "layers-2", "layers-background", "levels", "like", "link", "list", "loading", "logo", "logout", "logout-popup", "mail", "map", "massage", "menu", "modelIcon", "muslim", "nafath-icon", "new-office", "new-office-background", "not-active-group", "note-stack", "notifcation", "objection", "open-book", "opened-folder", "outOfWallet", "package", "pdf", "pencil", "period", "person", "phone", "play", "plus", "preference-vertical", "print", "pulse", "punishment", "Rank", "record", "red-alert", "refresh", "regularArrowLeft", "remove", "sandClock", "sar", "sar-icon", "saudi-flag", "scale", "search", "search-black", "search-list", "search2", "settings", "settings-background", "settings2", "shape", "shape-square", "shield", "sort", "sort-direction", "sort-down", "sort-up", "sort2", "stack", "start-chat", "status", "store", "success-company", "support", "TagSimple", "time-quarter-02", "total-group", "total-requests", "total-workingdays", "traingles", "trash", "trash-bin", "trash-icon-fill", "trend-down-arrow", "trend-up-arrow", "up-arrow-green", "Up-arrrow", "user", "user-placeholder", "user-plus", "wallet", "wallet-02", "wallet-background", "wallet2", "warning", "widget", "workflow"];
616
+ type GeneratedIconName = (typeof GENERATED_ICON_NAMES)[number];
617
+
618
+ declare const PHONE_CONFIG: {
619
+ readonly COUNTRY_CODE: "+966";
620
+ readonly FLAG_ICON: "saudi-flag";
621
+ };
622
+ /** i18n keys for form placeholders. Values live in ar.json / en.json only. */
623
+ declare const PLACEHOLDER_KEYS: {
624
+ readonly EMAIL: "AUTH.REGISTER.EMAIL_PLACEHOLDER";
625
+ readonly MOBILE: "AUTH.REGISTER.MOBILE_PLACEHOLDER";
626
+ };
627
+
628
+ declare const STORAGE_KEYS: {
629
+ readonly AUTH_TOKEN: "ncim_auth_token";
630
+ readonly REFRESH_TOKEN: "ncim_refresh_token";
631
+ readonly USER_PROFILE: "ncim_user_profile";
632
+ readonly LANGUAGE: "ncim_language";
633
+ readonly REGISTRATION_DRAFT: "ncim_registration_draft";
634
+ readonly PERMISSIONS: "ncim_permissions";
635
+ readonly NAFATH_IDENTITY: "ncim_nafath_identity";
636
+ };
637
+
638
+ declare const CHART_COLORS: {
639
+ readonly green: "#66BB9B";
640
+ readonly greenLight: "#A8D5BA";
641
+ readonly greenLeaf: "#C8E6C9";
642
+ readonly greenTeal: "#B8E0D0";
643
+ readonly red: "#E57373";
644
+ readonly redLight: "#F4A0A0";
645
+ readonly redSoft: "#FFCDD2";
646
+ readonly orange: "#F5A623";
647
+ readonly yellow: "#F5E6B8";
648
+ readonly purple: "#C4B5E0";
649
+ readonly blue: "#B3E5FC";
650
+ readonly trendUp: "#10B981";
651
+ readonly trendDown: "#EF4444";
652
+ /** Matches `--color-report-rate-green` (license / KPI sparklines). */
653
+ readonly reportRateGreen: "#88D8AD";
654
+ };
655
+ /** Saudi Arabia center (Riyadh) and zoom to fit country on open */
656
+ declare const MAP_CONFIG: {
657
+ readonly tileUrl: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";
658
+ readonly maxZoom: 19;
659
+ readonly defaultCenter: {
660
+ readonly lat: 24.7136;
661
+ readonly lng: 46.6753;
662
+ };
663
+ readonly defaultZoom: 6;
664
+ readonly markerSize: [number, number];
665
+ readonly markerAnchor: [number, number];
666
+ readonly scoreThreshold: 50;
667
+ };
668
+
669
+ /** Single map legend/card badge config: icon, background, color. */
670
+ interface MapLegendItemConfig {
671
+ icon: string;
672
+ bg: string;
673
+ color: string;
674
+ labelKey: string;
675
+ }
676
+ /** Map legend and card badge config. Used by legend popup and map cards. */
677
+ declare const MAP_LEGEND_CONFIG: Record<MapLegendStatus, MapLegendItemConfig>;
678
+ /** Map card action icons (briefcase, time) with background and color. */
679
+ declare const MAP_ACTION_ICONS: {
680
+ readonly briefcase: {
681
+ readonly icon: "briefcase-06";
682
+ readonly bg: "#F1EAF4";
683
+ readonly color: "#80519F";
684
+ };
685
+ readonly time: {
686
+ readonly icon: "time-quarter-02";
687
+ readonly bg: "#FFFAEB";
688
+ readonly color: "#D97706";
689
+ };
690
+ };
691
+
692
+ /** Delay (ms) before showing skeleton after loading ends — used by ncim-grid-table, ncim-cards-statistics, etc. */
693
+ declare const LOADING_DELAY_MS = 300;
694
+
695
+ /** API paths that never carry a bearer token. */
696
+ declare const PUBLIC_API_PATHS: readonly ["/auth/login", "/auth/register", "/auth/forgot-password", "/auth/verify-otp", "/auth/reset-password", "/auth/refresh-token", "ssoappdev.momra.gov.sa", "sso.momra.gov.sa"];
697
+ /** Custom HTTP header names injected by interceptors. */
698
+ declare const HTTP_HEADERS: {
699
+ readonly CORRELATION_ID: "X-Correlation-Id";
700
+ readonly ACCEPT_LANGUAGE: "Accept-Language";
701
+ readonly AUTHORIZATION: "Authorization";
702
+ readonly RETRY_AFTER: "Retry-After";
703
+ readonly MAINTENANCE: "X-Maintenance";
704
+ };
705
+ /** Toast auto-dismiss durations (ms). */
706
+ declare const TOAST_DURATION: {
707
+ readonly DEFAULT: 5000;
708
+ readonly ERROR: 8000;
709
+ };
710
+ /** Deduplication window (ms) — identical toasts within this window are suppressed. */
711
+ declare const TOAST_DEDUP_MS = 2000;
712
+ /** Maximum dedup map entries before garbage-collecting stale keys. */
713
+ declare const TOAST_DEDUP_MAX_SIZE = 50;
714
+ /** Debounce period (ms) to prevent 401 flood from parallel requests. */
715
+ declare const LOGOUT_DEBOUNCE_MS = 3000;
716
+ /** LRU HTTP response cache defaults. */
717
+ declare const CACHE_DEFAULTS: {
718
+ readonly MAX_SIZE: 100;
719
+ readonly TTL_MS: number;
720
+ };
721
+ /** Retry interceptor defaults. */
722
+ declare const RETRY_DEFAULTS: {
723
+ readonly MAX_COUNT: 2;
724
+ readonly BACKOFF_BASE_MS: 1000;
725
+ };
726
+ /** HTTP status codes eligible for automatic retry. */
727
+ declare const RETRYABLE_STATUS_CODES: ReadonlySet<number>;
728
+ /** HTTP methods safe to retry (idempotent). */
729
+ declare const IDEMPOTENT_METHODS: ReadonlySet<string>;
730
+ /** Max segments used when extracting a cache invalidation base-path from a mutation URL. */
731
+ declare const CACHE_PATH_DEPTH = 3;
732
+ /** Maximum characters to show for an API error message before truncating. */
733
+ declare const ERROR_MESSAGE_MAX_LENGTH = 300;
734
+ /** Maximum field-level errors displayed in a single toast. */
735
+ declare const MAX_FIELD_ERRORS_SHOWN = 5;
736
+ /** Fallback language when TranslateService has no current/default lang. */
737
+ declare const FALLBACK_LANGUAGE = Language.AR;
738
+
739
+ /** Validates Saudi identity number format (starts with 1 or 2, 10 digits). */
740
+ declare function identityNumberValidator(): ValidatorFn;
741
+
742
+ declare function idNumberValidator(): ValidatorFn;
743
+
744
+ declare function saudiMobileValidator(): ValidatorFn;
745
+
746
+ /** Saudi mobile: `05` + 8 digits (10 characters total). */
747
+ declare function saudiMobile05Validator(): ValidatorFn;
748
+
749
+ /** Form-level validator: confirm field must match password field. Default keys: newPassword, confirmPassword. */
750
+ declare function passwordMatchValidator(passwordKey?: string, confirmKey?: string): (control: AbstractControl) => ValidationErrors | null;
751
+
752
+ /** Validates password has upper, lower, number, and special character. */
753
+ declare function passwordStrengthValidator(): ValidatorFn;
754
+
755
+ declare function arabicOnlyValidator(): ValidatorFn;
756
+
757
+ declare function englishOnlyValidator(): ValidatorFn;
758
+
759
+ declare function numbersOnlyValidator(): ValidatorFn;
760
+
761
+ declare function lettersOnlyValidator(): ValidatorFn;
762
+
763
+ declare function alphanumericValidator(): ValidatorFn;
764
+
765
+ declare function phoneValidator(): ValidatorFn;
766
+
767
+ declare function urlValidator(): ValidatorFn;
768
+
769
+ declare function ibanValidator(): ValidatorFn;
770
+
771
+ /** Validates control date is >= minDate. Expects DD/MM/YYYY or Date. */
772
+ declare function dateMinValidator(minDate: string | Date): ValidatorFn;
773
+
774
+ /** Validates control date is <= maxDate. Expects DD/MM/YYYY or Date. */
775
+ declare function dateMaxValidator(maxDate: string | Date): ValidatorFn;
776
+
777
+ /** Fails when value is only whitespace (after trim). */
778
+ declare function noWhitespaceValidator(): ValidatorFn;
779
+
780
+ declare function crNumberValidator(): ValidatorFn;
781
+
782
+ /** Form-level validator: confirm field must match source field. */
783
+ declare function confirmedValidator(sourceKey: string, confirmKey: string): (control: AbstractControl) => ValidationErrors | null;
784
+
785
+ /** Validates control value as an email address. */
786
+ declare function emailValidator(): ValidatorFn;
787
+
788
+ /** Returns a validator that fails when the control value does not match the given regex. */
789
+ declare function patternValidator(pattern: RegExp, errorKey: string): ValidatorFn;
790
+
791
+ declare function minSelectedValidator(min: number): (control: AbstractControl) => ValidationErrors | null;
792
+
793
+ /**
794
+ * OIDC / SSO configuration per environment.
795
+ * Endpoints are configured explicitly to avoid CORS issues with the discovery document.
796
+ */
797
+ interface SsoConfig {
798
+ /** Set to false in local dev to skip OIDC startup and discovery fetch. */
799
+ enabled: boolean;
800
+ issuer: string;
801
+ /** Authorization endpoint — e.g. https://ssoappdev.momra.gov.sa/connect/authorize */
802
+ loginUrl: string;
803
+ /** Token endpoint — e.g. https://ssoappdev.momra.gov.sa/connect/token */
804
+ tokenEndpoint: string;
805
+ /** UserInfo endpoint — e.g. https://ssoappdev.momra.gov.sa/connect/userinfo */
806
+ userinfoEndpoint: string;
807
+ /** End-session endpoint — e.g. https://ssoappdev.momra.gov.sa/connect/endsession */
808
+ logoutUrl: string;
809
+ /** JWKS endpoint — e.g. https://ssoappdev.momra.gov.sa/.well-known/openid-configuration/jwks */
810
+ jwksUri: string;
811
+ clientId: string;
812
+ /**
813
+ * Post-login callback URI. When omitted, defaults to `window.location.origin + '/sso-callback'`
814
+ * so the app works on any host without per-environment configuration.
815
+ */
816
+ redirectUri?: string;
817
+ /**
818
+ * Post-logout redirect URI. When omitted, defaults to `window.location.origin + '/auth/login'`.
819
+ */
820
+ postLogoutRedirectUri?: string;
821
+ /**
822
+ * Space-separated OIDC scopes. Defaults to 'openid profile email'.
823
+ * MOMRAH-specific scopes (e.g. 'basic contact') can be added here
824
+ * once confirmed by the MOMRAH SSO team in the client document.
825
+ */
826
+ scope?: string;
827
+ /**
828
+ * Enable silent refresh via iframe. Default false — MOMRAH SSO may not support it.
829
+ * Set to true when the SSO server supports the refresh_token grant in iframe.
830
+ */
831
+ silentRefreshEnabled?: boolean;
832
+ /**
833
+ * Optional custom query params for the authorization request.
834
+ * e.g. { prompt: 'login', acr_values: '...' } for re-authentication.
835
+ */
836
+ customQueryParams?: Record<string, string>;
837
+ }
838
+ /** App environment (apiUrl, flags, sso). Injected via provideEnvironment. */
839
+ interface Environment {
840
+ production: boolean;
841
+ staging: boolean;
842
+ apiUrl: string;
843
+ sso: SsoConfig;
844
+ hasUnderDevelopmentFeatures?: boolean;
845
+ /**
846
+ * Secret used to derive the AES-GCM key for localStorage encryption (CryptoService).
847
+ * Set a strong, environment-specific value in production; never commit the prod value.
848
+ * Falls back to a default if omitted — acceptable for dev but NOT for production.
849
+ */
850
+ storageEncryptionKey?: string;
851
+ }
852
+ /** Injection token for Environment. Prefer reading from `environments` after bootstrap. */
853
+ declare const ENVIRONMENT: InjectionToken<Environment>;
854
+
855
+ declare const environments: Environment;
856
+
857
+ declare function provideEnvironment(environment: Environment): EnvironmentProviders;
858
+
859
+ /**
860
+ * Syncs a form's disabled state with a loading signal.
861
+ * Disables the form when loading is true, enables when false.
862
+ * Must be called in an injection context (constructor or field initializer).
863
+ */
864
+ declare function syncFormWithLoading(form: FormGroup, loading: Signal<boolean>): void;
865
+ /**
866
+ * Sets up an effect to patch form values when initialData changes.
867
+ * Call from constructor in an injection context.
868
+ */
869
+ declare function useFormInitData(form: FormGroup, initialData: Signal<Record<string, unknown>>): void;
870
+ /**
871
+ * Patches form values from partial data. No-op when data is empty.
872
+ * Safe to call with initialData from route or parent.
873
+ */
874
+ declare function initFormData(form: FormGroup, data: Record<string, unknown>): void;
875
+ /**
876
+ * Marks form as submitted and touched. Returns true if valid, false otherwise.
877
+ */
878
+ declare function markSubmittedAndValidate(form: FormGroup): boolean;
879
+
880
+ /**
881
+ * Parses a date string in DD/MM/YYYY format.
882
+ * @returns Parsed Date or null if invalid.
883
+ */
884
+ declare function parseDate(value: string): Date | null;
885
+
886
+ /** Updates document title and meta tags from route data and current language. */
887
+ declare class SeoService {
888
+ private readonly titleService;
889
+ private readonly metaService;
890
+ private readonly router;
891
+ private readonly activatedRoute;
892
+ private readonly translate;
893
+ private readonly destroyRef;
894
+ private readonly doc;
895
+ /** Subscribes to navigation and language changes to keep SEO tags in sync. */
896
+ init(): void;
897
+ private updateSeo;
898
+ private createLinkForCanonicalURL;
899
+ static ɵfac: i0.ɵɵFactoryDeclaration<SeoService, never>;
900
+ static ɵprov: i0.ɵɵInjectableDeclaration<SeoService>;
901
+ }
902
+
903
+ /**
904
+ * Auth domain models.
905
+ * SsoUser — OIDC identity claims from the MOMRAH SSO ID token.
906
+ * JwtPayload — decoded payload from the backend-issued JWT.
907
+ */
908
+ /** User claims returned from the MOMRAH SSO ID token. */
909
+ interface SsoUser {
910
+ readonly sub: string;
911
+ readonly preferred_username: string;
912
+ readonly given_name: string;
913
+ readonly family_name: string;
914
+ readonly email: string;
915
+ readonly ar_name?: string;
916
+ readonly en_name?: string;
917
+ readonly id_no?: string;
918
+ readonly nid?: string;
919
+ readonly id_type?: string;
920
+ readonly sex?: string;
921
+ readonly dob?: string;
922
+ readonly phone?: string;
923
+ }
924
+ /**
925
+ * Decoded payload from the backend-issued JWT.
926
+ * Fields mirror standard OIDC/JWT claims; app-specific claims vary by backend.
927
+ */
928
+ interface JwtPayload {
929
+ readonly sub?: string;
930
+ readonly email?: string;
931
+ readonly name?: string;
932
+ readonly given_name?: string;
933
+ readonly family_name?: string;
934
+ readonly preferred_username?: string;
935
+ readonly phone?: string;
936
+ readonly roles?: string[];
937
+ readonly permissions?: string[];
938
+ readonly exp?: number;
939
+ readonly iat?: number;
940
+ }
941
+
942
+ /**
943
+ * localStorage key for the raw SSO callback params snapshot.
944
+ * Saved before angular-oauth2-oidc's tryLogin() strips them from the URL.
945
+ */
946
+ declare const SSO_CALLBACK_PARAMS_KEY = "ncim_sso_callback_params";
947
+ /**
948
+ * localStorage key for the intended destination URL before SSO login.
949
+ * Written by loginWithSso(), read and cleared by getAndClearRedirectUrl().
950
+ */
951
+ declare const SSO_REDIRECT_URL_KEY = "ncim_sso_redirect_url";
952
+ /**
953
+ * Wraps angular-oauth2-oidc for MOMRAH SSO (OIDC Authorization Code + PKCE).
954
+ *
955
+ * All OIDC endpoints are configured explicitly — no discovery document fetch —
956
+ * to avoid CORS issues with the SSO server. strictDiscoveryDocumentValidation
957
+ * is disabled so the library works without a discovery document fetch.
958
+ *
959
+ * Call initialize() once at app startup via APP_INITIALIZER (via provideSso()).
960
+ */
961
+ declare class OidcAuthService {
962
+ private readonly oauthService;
963
+ private readonly env;
964
+ private readonly appBaseHref;
965
+ readonly isAuthenticated: i0.WritableSignal<boolean>;
966
+ readonly currentUser: i0.WritableSignal<SsoUser | null>;
967
+ /** True when SSO is enabled in the current environment. */
968
+ get isSsoEnabled(): boolean;
969
+ /**
970
+ * Configure OIDC, process a redirect callback if present, and start
971
+ * automatic silent token refresh for session continuity.
972
+ * No-op when sso.enabled=false (local dev without MOMRAH network access).
973
+ */
974
+ initialize(): Promise<boolean>;
975
+ /**
976
+ * Redirect the browser to the MOMRAH SSO login page.
977
+ * Pass `redirectUrl` to restore the user to a specific page after login.
978
+ * Only relative app paths are accepted — external URLs are silently ignored
979
+ * to prevent open redirect attacks.
980
+ */
981
+ loginWithSso(redirectUrl?: string): void;
982
+ /**
983
+ * Build the OIDC RP-initiated logout URL (end-session endpoint) including
984
+ * id_token_hint and post_logout_redirect_uri pointing to /auth/login.
985
+ *
986
+ * Must be called BEFORE logout() because logout() clears the stored id_token.
987
+ * Returns null when SSO is disabled, not authenticated, or the id_token is gone.
988
+ *
989
+ * The returned URL should be assigned to window.location.href so the SSO
990
+ * server can terminate the server-side session and redirect back to the app.
991
+ */
992
+ buildEndSessionUrl(): string | null;
993
+ /**
994
+ * Clear all local SSO tokens and state without redirecting to the SSO
995
+ * end-session endpoint. The caller handles navigation (see buildEndSessionUrl).
996
+ */
997
+ logout(): void;
998
+ /** Returns the current OIDC access token, or null if not authenticated via SSO. */
999
+ getAccessToken(): string | null;
1000
+ /**
1001
+ * Returns the saved post-login redirect URL and removes it from localStorage.
1002
+ * Returns null if no redirect URL was stored.
1003
+ */
1004
+ getAndClearRedirectUrl(): string | null;
1005
+ /**
1006
+ * Fetch fresh user attributes from the UserInfo endpoint and sync local state.
1007
+ * Call this after the user updates their profile on the MOMRAH SSO server,
1008
+ * as per spec: "the outcome of the update profile scenario is a renewed JWT
1009
+ * Token via the User Info Endpoint."
1010
+ */
1011
+ refreshUserInfo(): Promise<void>;
1012
+ private configure;
1013
+ /**
1014
+ * Save all OIDC callback query params to localStorage before the library
1015
+ * strips them from the URL via history.replaceState. The SsoCallback component
1016
+ * reads this snapshot to restore the query string.
1017
+ */
1018
+ private snapshotCallbackParams;
1019
+ /**
1020
+ * Subscribe to angular-oauth2-oidc lifecycle events.
1021
+ * Handles token refresh failures and session termination by clearing local auth state.
1022
+ * On silent refresh success, re-syncs the state signal.
1023
+ */
1024
+ private listenToTokenEvents;
1025
+ private syncState;
1026
+ static ɵfac: i0.ɵɵFactoryDeclaration<OidcAuthService, never>;
1027
+ static ɵprov: i0.ɵɵInjectableDeclaration<OidcAuthService>;
1028
+ }
1029
+
1030
+ /** Facade that unifies OIDC (MOMRAH SSO) and standard JWT authentication. */
1031
+ declare class AuthService {
1032
+ private readonly oidc;
1033
+ private readonly api;
1034
+ /** True when a standard JWT is stored locally (non-SSO login). */
1035
+ private readonly _jwtAuthenticated;
1036
+ /** Decoded payload from the stored backend JWT — populated by login(), cleared by logout(). */
1037
+ private readonly _jwtUser;
1038
+ /** True if the user is authenticated via SSO or standard JWT. */
1039
+ readonly isAuthenticated: i0.Signal<boolean>;
1040
+ readonly identityNumber: i0.WritableSignal<string>;
1041
+ /** True when SSO is enabled in the current environment. */
1042
+ get isSsoEnabled(): boolean;
1043
+ /** SSO user claims from the OIDC identity token. Null for standard JWT logins. */
1044
+ readonly currentUser: i0.Signal<SsoUser | null>;
1045
+ /** Decoded JWT payload for standard (non-SSO) logins. Null for SSO logins. */
1046
+ readonly jwtUser: i0.Signal<JwtPayload | null>;
1047
+ /**
1048
+ * Redirect to the MOMRAH SSO login page.
1049
+ * Pass `redirectUrl` to restore the user to a specific page after login.
1050
+ */
1051
+ loginWithSso(redirectUrl?: string): void;
1052
+ /**
1053
+ * Returns the saved post-login redirect URL and removes it from localStorage.
1054
+ * Call this in the SSO callback component after successful login.
1055
+ */
1056
+ getAndClearRedirectUrl(): string | null;
1057
+ /**
1058
+ * Exchange the OIDC access token for a backend JWT and mark the session as authenticated.
1059
+ * Call this from the SSO callback component after OIDC has processed the authorization code.
1060
+ * Emits once on success; errors if the OIDC token is missing or the backend rejects it.
1061
+ */
1062
+ completeSsoCallback(): Observable<void>;
1063
+ /**
1064
+ * Build the OIDC RP-initiated logout URL for SSO end-session.
1065
+ * Must be called BEFORE logout() because logout() clears the stored id_token.
1066
+ * Returns null when SSO is disabled, not authenticated via SSO, or id_token is missing.
1067
+ */
1068
+ buildEndSessionUrl(): string | null;
1069
+ /**
1070
+ * Fetch fresh user attributes from the MOMRAH SSO UserInfo endpoint and
1071
+ * sync the `currentUser` signal with updated claims.
1072
+ *
1073
+ * Per spec: "the outcome of the update profile scenario is a renewed JWT
1074
+ * Token via the User Info Endpoint."
1075
+ *
1076
+ * Call this after redirecting the user back from the SSO profile update page.
1077
+ */
1078
+ refreshUserInfo(): Promise<void>;
1079
+ /**
1080
+ * Store a backend JWT, decode its payload, and mark the session as authenticated.
1081
+ * Decoded user data is saved to USER_PROFILE for synchronous reads on page reload.
1082
+ * Real permissions/roles from the token replace any previously stored values.
1083
+ */
1084
+ login(token: string): void;
1085
+ /**
1086
+ * Initiate login via Nafath using the user's ID number.
1087
+ * Backend endpoint: /user/api/usersmanagement/Auth/LoginViaNafath
1088
+ */
1089
+ loginViaNafath(idNumber: string): Observable<void>;
1090
+ /** Clear all session data (SSO and JWT). Navigation is handled by the caller. */
1091
+ logout(): void;
1092
+ /** Returns the active access token (OIDC takes precedence over JWT). */
1093
+ getAccessToken(): string | null;
1094
+ /** Returns true if the user has all of the given permission(s). */
1095
+ hasPermission(permission: string | string[]): boolean;
1096
+ private checkJwt;
1097
+ /** Read and decode the stored JWT on service init to hydrate the jwtUser signal. */
1098
+ private readJwtUser;
1099
+ /** Store the national identity number from Nafath login. */
1100
+ setIdentityNumber(id: string): void;
1101
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthService, never>;
1102
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthService>;
1103
+ }
1104
+
1105
+ type Primitive = string | number | boolean;
1106
+ type ParamValue = Primitive | Primitive[] | Date | null | undefined;
1107
+ /**
1108
+ * Converts a flat or nested object into `HttpParams`.
1109
+ *
1110
+ * - `null` / `undefined` values are skipped.
1111
+ * - `Date` values are serialized to ISO-8601 strings.
1112
+ * - Arrays produce repeated keys: `{ ids: [1,2] }` → `ids=1&ids=2`.
1113
+ * - Nested objects are flattened with bracket notation: `{ filter: { name: 'x' } }` → `filter[name]=x`.
1114
+ */
1115
+ declare function toHttpParams(obj: Record<string, ParamValue | Record<string, ParamValue>>): HttpParams;
1116
+ /**
1117
+ * Converts a flat or nested object into a `FormData` instance.
1118
+ *
1119
+ * - `null` / `undefined` values are skipped.
1120
+ * - `File` and `Blob` values are appended as-is.
1121
+ * - `Date` values are serialized to ISO-8601 strings.
1122
+ * - Arrays produce repeated keys: `{ tags: ['a','b'] }` → two `tags` entries.
1123
+ * - Nested objects are flattened with bracket notation: `{ address: { city: 'x' } }` → `address[city]=x`.
1124
+ */
1125
+ declare function toFormData(obj: Record<string, unknown>): FormData;
1126
+
1127
+ type ToastSeverity = 'success' | 'info' | 'warn' | 'error';
1128
+ interface ToastOptions {
1129
+ life?: number;
1130
+ sticky?: boolean;
1131
+ closable?: boolean;
1132
+ key?: string;
1133
+ }
1134
+ declare class ToastService {
1135
+ private readonly messageService;
1136
+ private readonly translate;
1137
+ private readonly recentToasts;
1138
+ success(detail: string, summary?: string, options?: ToastOptions): void;
1139
+ error(detail: string, summary?: string, options?: ToastOptions): void;
1140
+ warn(detail: string, summary?: string, options?: ToastOptions): void;
1141
+ info(detail: string, summary?: string, options?: ToastOptions): void;
1142
+ translateAndShow(severity: ToastSeverity, detailKey: string, summaryKey?: string, interpolateParams?: Record<string, string>, options?: ToastOptions): void;
1143
+ clear(key?: string): void;
1144
+ private show;
1145
+ private isDuplicate;
1146
+ private pruneStaleEntries;
1147
+ private resolveDefaultSummary;
1148
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToastService, never>;
1149
+ static ɵprov: i0.ɵɵInjectableDeclaration<ToastService>;
1150
+ }
1151
+
1152
+ /**
1153
+ * Shows a toast for an API error.
1154
+ * Skips when error interceptor already showed a toast (avoids duplicates).
1155
+ * Use in subscribe error callbacks for all API calls.
1156
+ */
1157
+ declare function showApiErrorToast(toast: ToastService, error?: unknown): void;
1158
+ /**
1159
+ * Creates an error handler for API subscribe callbacks.
1160
+ * Shows toast on error and optionally runs a callback (e.g. reset loading state).
1161
+ */
1162
+ declare function createApiErrorHandler(toast: ToastService, onError?: () => void): (error?: unknown) => void;
1163
+
1164
+ type DateInput = Date | string | number | null | undefined;
1165
+ declare const PRESET_FORMATS: Record<string, Intl.DateTimeFormatOptions>;
1166
+ /**
1167
+ * Formats a date according to the current app language.
1168
+ *
1169
+ * Usage:
1170
+ * {{ date | localizedDate }} → "12 أبريل 2025" (ar) / "12 April 2025" (en)
1171
+ * {{ date | localizedDate:'short' }} → "12/4/2025"
1172
+ * {{ date | localizedDate:'full' }} → "السبت، 12 أبريل 2025"
1173
+ * {{ date | localizedDate:'time' }} → "03:30 م"
1174
+ * {{ date | localizedDate:'datetime' }} → "12 أبريل 2025، 03:30 م"
1175
+ * {{ date | localizedDate:'dateTimeFull' }} → "12 أبريل 2025 3:30 م"
1176
+ * {{ date | localizedDate:'recordDateTime' }} → "18 يوليو 2024 - ص 9:22" (ar) / "18 July 2024 - 9:22 AM" (en)
1177
+ */
1178
+ declare class LocalizedDatePipe implements PipeTransform {
1179
+ private readonly translate;
1180
+ transform(value: DateInput, format?: keyof typeof PRESET_FORMATS): string;
1181
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizedDatePipe, never>;
1182
+ static ɵpipe: i0.ɵɵPipeDeclaration<LocalizedDatePipe, "localizedDate", true>;
1183
+ }
1184
+
1185
+ /**
1186
+ * Converts numbers and strings to English numerals only (0–9).
1187
+ * Use when displaying counts, IDs, etc. in a bilingual context.
1188
+ *
1189
+ * Usage:
1190
+ * {{ count | englishNumber }} → "123" (always 0–9)
1191
+ * {{ "١٢٣" | englishNumber }} → "123"
1192
+ */
1193
+ declare class EnglishNumberPipe implements PipeTransform {
1194
+ transform(value: number | string | null | undefined): string;
1195
+ static ɵfac: i0.ɵɵFactoryDeclaration<EnglishNumberPipe, never>;
1196
+ static ɵpipe: i0.ɵɵPipeDeclaration<EnglishNumberPipe, "englishNumber", true>;
1197
+ }
1198
+
1199
+ /**
1200
+ * A pipe that replaces a substring within a string.
1201
+ *
1202
+ * Usage:
1203
+ * {{ value | replace: 'oldValue' : 'newValue' }}
1204
+ * {{ 'Hello World' | replace: 'World' : 'Angular' }} → 'Hello Angular'
1205
+ */
1206
+ declare class ReplacePipe implements PipeTransform {
1207
+ transform(value: string | null | undefined, searchValue: string, replaceValue?: string): string;
1208
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReplacePipe, never>;
1209
+ static ɵpipe: i0.ɵɵPipeDeclaration<ReplacePipe, "replace", true>;
1210
+ }
1211
+
1212
+ declare class LanguageService {
1213
+ private readonly translate;
1214
+ private readonly primeNG;
1215
+ private readonly doc;
1216
+ private readonly destroyRef;
1217
+ private readonly platformId;
1218
+ private readonly currentLang;
1219
+ readonly language: i0.Signal<string>;
1220
+ readonly isRtl: i0.Signal<boolean>;
1221
+ init(): void;
1222
+ setLanguage(lang: Language): void;
1223
+ toggle(): void;
1224
+ private getSavedLanguage;
1225
+ private persist;
1226
+ private apply;
1227
+ static ɵfac: i0.ɵɵFactoryDeclaration<LanguageService, never>;
1228
+ static ɵprov: i0.ɵɵInjectableDeclaration<LanguageService>;
1229
+ }
1230
+
1231
+ declare class LoadingService {
1232
+ private readonly globalCounter;
1233
+ private readonly operations;
1234
+ readonly isLoading: i0.Signal<boolean>;
1235
+ readonly count: i0.Signal<number>;
1236
+ readonly activeOperations: i0.Signal<ReadonlySet<string>>;
1237
+ show(): void;
1238
+ hide(): void;
1239
+ reset(): void;
1240
+ start(key: string): void;
1241
+ stop(key: string): void;
1242
+ isActive(key: string): boolean;
1243
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoadingService, never>;
1244
+ static ɵprov: i0.ɵɵInjectableDeclaration<LoadingService>;
1245
+ }
1246
+
1247
+ declare const CACHE_ENABLED: HttpContextToken<boolean>;
1248
+ declare const CACHE_TTL: HttpContextToken<number>;
1249
+ declare class HttpCacheService {
1250
+ private readonly store;
1251
+ readonly size: i0.WritableSignal<number>;
1252
+ get(url: string, ttl?: number): HttpResponse<unknown> | null;
1253
+ set(url: string, response: HttpResponse<unknown>): void;
1254
+ clear(url?: string): void;
1255
+ clearPattern(pattern: RegExp): void;
1256
+ private syncSize;
1257
+ static ɵfac: i0.ɵɵFactoryDeclaration<HttpCacheService, never>;
1258
+ static ɵprov: i0.ɵɵInjectableDeclaration<HttpCacheService>;
1259
+ }
1260
+
1261
+ type HttpParamsArg = HttpParams | Record<string, string | string[]>;
1262
+ type HttpHeadersArg = HttpHeaders | Record<string, string | string[]>;
1263
+ interface ApiRequestOptions {
1264
+ params?: HttpParamsArg;
1265
+ headers?: HttpHeadersArg;
1266
+ skipLoading?: boolean;
1267
+ skipCache?: boolean;
1268
+ cacheTTL?: number;
1269
+ skipRetry?: boolean;
1270
+ skipErrorHandling?: boolean;
1271
+ skipAuth?: boolean;
1272
+ fullUrl?: boolean;
1273
+ responseType?: 'json' | 'blob' | 'text' | 'arraybuffer';
1274
+ observe?: 'body' | 'response' | 'events';
1275
+ }
1276
+ declare class ApiService {
1277
+ private readonly http;
1278
+ private readonly env;
1279
+ get<T>(path: string, options: ApiRequestOptions & {
1280
+ observe: 'response';
1281
+ }): Observable<HttpResponse<T>>;
1282
+ get<T>(path: string, options: ApiRequestOptions & {
1283
+ observe: 'events';
1284
+ }): Observable<HttpEvent<T>>;
1285
+ get<T>(path: string, options?: ApiRequestOptions): Observable<T>;
1286
+ post<T>(path: string, body: unknown, options: ApiRequestOptions & {
1287
+ observe: 'response';
1288
+ }): Observable<HttpResponse<T>>;
1289
+ post<T>(path: string, body: unknown, options: ApiRequestOptions & {
1290
+ observe: 'events';
1291
+ }): Observable<HttpEvent<T>>;
1292
+ post<T>(path: string, body: unknown, options?: ApiRequestOptions): Observable<T>;
1293
+ put<T>(path: string, body: unknown, options: ApiRequestOptions & {
1294
+ observe: 'response';
1295
+ }): Observable<HttpResponse<T>>;
1296
+ put<T>(path: string, body: unknown, options: ApiRequestOptions & {
1297
+ observe: 'events';
1298
+ }): Observable<HttpEvent<T>>;
1299
+ put<T>(path: string, body: unknown, options?: ApiRequestOptions): Observable<T>;
1300
+ patch<T>(path: string, body: unknown, options: ApiRequestOptions & {
1301
+ observe: 'response';
1302
+ }): Observable<HttpResponse<T>>;
1303
+ patch<T>(path: string, body: unknown, options: ApiRequestOptions & {
1304
+ observe: 'events';
1305
+ }): Observable<HttpEvent<T>>;
1306
+ patch<T>(path: string, body: unknown, options?: ApiRequestOptions): Observable<T>;
1307
+ delete<T>(path: string, options: ApiRequestOptions & {
1308
+ observe: 'response';
1309
+ }): Observable<HttpResponse<T>>;
1310
+ delete<T>(path: string, options: ApiRequestOptions & {
1311
+ observe: 'events';
1312
+ }): Observable<HttpEvent<T>>;
1313
+ delete<T>(path: string, options?: ApiRequestOptions): Observable<T>;
1314
+ upload(path: string, formData: FormData, options?: ApiRequestOptions): Observable<HttpEvent<unknown>>;
1315
+ download(path: string, options?: ApiRequestOptions): Observable<Blob>;
1316
+ private resolveUrl;
1317
+ private buildHttpOptions;
1318
+ static ɵfac: i0.ɵɵFactoryDeclaration<ApiService, never>;
1319
+ static ɵprov: i0.ɵɵInjectableDeclaration<ApiService>;
1320
+ }
1321
+
1322
+ declare class GlobalErrorHandler implements ErrorHandler {
1323
+ private toast;
1324
+ private readonly env;
1325
+ private readonly injector;
1326
+ private readonly zone;
1327
+ handleError(error: unknown): void;
1328
+ private resolveToast;
1329
+ private runInZone;
1330
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlobalErrorHandler, never>;
1331
+ static ɵprov: i0.ɵɵInjectableDeclaration<GlobalErrorHandler>;
1332
+ }
1333
+
1334
+ declare const baseUrlInterceptor: HttpInterceptorFn;
1335
+
1336
+ /** Set to true to skip attaching the Authorization header on a request. */
1337
+ declare const SKIP_AUTH: HttpContextToken<boolean>;
1338
+
1339
+ declare const authInterceptor: HttpInterceptorFn;
1340
+
1341
+ declare const SKIP_LOADING: HttpContextToken<boolean>;
1342
+ declare const loadingInterceptor: HttpInterceptorFn;
1343
+
1344
+ declare const SKIP_RETRY: HttpContextToken<boolean>;
1345
+ declare const MAX_RETRY_COUNT: HttpContextToken<number>;
1346
+ declare const retryInterceptor: HttpInterceptorFn;
1347
+
1348
+ declare const cacheInterceptor: HttpInterceptorFn;
1349
+
1350
+ /** Set to true to skip the global error interceptor toast handling for a request. */
1351
+ declare const SKIP_ERROR_HANDLING: HttpContextToken<boolean>;
1352
+
1353
+ declare const errorInterceptor: HttpInterceptorFn;
1354
+
1355
+ /** Set to true to skip offline check for a specific request (e.g. ping/health-check). */
1356
+ declare const SKIP_CONNECTIVITY: HttpContextToken<boolean>;
1357
+ /**
1358
+ * Short-circuits outgoing HTTP requests when the browser is offline.
1359
+ * Throws an HttpErrorResponse with status 0 so the existing errorInterceptor
1360
+ * picks it up and shows the OFFLINE toast — without the browser queuing the
1361
+ * request and waiting for a timeout.
1362
+ *
1363
+ * Skips asset requests (i18n JSON, SVG icons, etc.) so the app shell can
1364
+ * still load even when the service worker serves those from cache.
1365
+ */
1366
+ declare const connectivityInterceptor: HttpInterceptorFn;
1367
+
1368
+ type ViolationStatus = 'CONFIRMED_VIOLATION' | 'AWAITING_PAYMENT' | 'PAID';
1369
+ interface ViolationFine {
1370
+ amount: number;
1371
+ currency: 'SAR';
1372
+ violationsCount: number;
1373
+ label: string;
1374
+ }
1375
+ interface ViolationBusiness {
1376
+ name: string;
1377
+ licenseNumber: string;
1378
+ city: string;
1379
+ }
1380
+ interface ViolationCorrectionPeriod {
1381
+ totalDays: number;
1382
+ remainingDays: number;
1383
+ /** 0–100 */
1384
+ progressPercent: number;
1385
+ }
1386
+ interface Violation {
1387
+ id: number;
1388
+ entity: string;
1389
+ fine: ViolationFine;
1390
+ business: ViolationBusiness;
1391
+ correctionPeriod: ViolationCorrectionPeriod;
1392
+ /** ISO date string e.g. '2025-11-03' */
1393
+ date: string;
1394
+ status: ViolationStatus;
1395
+ }
1396
+ interface ViolationDetailsRequest {
1397
+ violationId: string;
1398
+ identityNumber: string;
1399
+ }
1400
+ interface Violator {
1401
+ violatorID: string;
1402
+ violatorIDType: string;
1403
+ }
1404
+ interface ViolationsListRequest {
1405
+ violatorList: Violator[];
1406
+ pageNumber: number;
1407
+ pageSize?: number;
1408
+ keywords?: string;
1409
+ statusId?: number;
1410
+ actionTypeId?: number;
1411
+ correctionDuration?: number;
1412
+ violationDateFrom?: string;
1413
+ violationDateTo?: string;
1414
+ sortColumn?: number;
1415
+ sortByDescending?: boolean;
1416
+ }
1417
+ interface ViolationListItem {
1418
+ violationNumber: string;
1419
+ authority: string;
1420
+ actionType: string;
1421
+ actionTypeId: number;
1422
+ recurrenceCount: number;
1423
+ financialPenaltyAmount: number;
1424
+ municipalityName: string;
1425
+ municipalityId: string;
1426
+ subMunicipalityId: string;
1427
+ subMunicipalityName: string;
1428
+ license: string;
1429
+ establishmentName: string;
1430
+ violationDate: string;
1431
+ statusId: number;
1432
+ statusName: string;
1433
+ identityNumber: string;
1434
+ violatorIdentityTypeId: string;
1435
+ violatorIdentityTypeName: string;
1436
+ totalCorrectionDays: number;
1437
+ remainingCorrectionDays: number;
1438
+ lastCorrectionDate: string | null;
1439
+ isAppealsAllowed: boolean;
1440
+ }
1441
+ interface ViolationsListResponse {
1442
+ items: ViolationListItem[];
1443
+ meta: {
1444
+ totalCount: number;
1445
+ pageNumber: number;
1446
+ pageSize: number;
1447
+ totalPages: number;
1448
+ hasPreviousPage: boolean;
1449
+ hasNextPage: boolean;
1450
+ };
1451
+ stats: {
1452
+ totalViolations: number;
1453
+ unpaidFinesCount: number;
1454
+ unresolvedCount: number;
1455
+ correctedCount: number;
1456
+ approvedCount: number;
1457
+ cancelledCount: number;
1458
+ };
1459
+ }
1460
+ interface ViolationDetailResponse {
1461
+ metaData: {
1462
+ violationNumber: string;
1463
+ issuanceDate: string;
1464
+ establishmentOwner: string;
1465
+ establishmentName: string;
1466
+ licenseNumber: string;
1467
+ licenseType: string;
1468
+ licenseTypeName: string;
1469
+ activity: string;
1470
+ issuingAuthority: string;
1471
+ violationStatusId: number;
1472
+ violationStatusName: string;
1473
+ recurrenceCount: number;
1474
+ severity: string;
1475
+ noOfUnits: number;
1476
+ lastCorrectionDate: string;
1477
+ remainingCorrectionDays: number;
1478
+ totalCorrectionDays: number;
1479
+ municipalityId: string;
1480
+ municipalityName: string;
1481
+ subMunicipalityId: string;
1482
+ subMunicipalityName: string;
1483
+ sadadNumber: string;
1484
+ violatorId: string;
1485
+ violatorName: string;
1486
+ violatorIdentityTypeId: string;
1487
+ violatorIdentityTypeName: string;
1488
+ isAppealsAllowed: boolean;
1489
+ actionType: string;
1490
+ actionTypeId: number;
1491
+ };
1492
+ penalty: {
1493
+ closureDuration: number;
1494
+ financialPenaltyAmount: number;
1495
+ appealDeadline: string;
1496
+ appealNumber: string;
1497
+ paymentReference: string;
1498
+ };
1499
+ verificationCriteria: {
1500
+ criterionTitle: string;
1501
+ criterionDescription: string;
1502
+ criterionNumber: string;
1503
+ };
1504
+ additionalCriteria: {
1505
+ criterionTitle: string;
1506
+ criterionDescription: string;
1507
+ };
1508
+ inspectorNotes: string;
1509
+ inspectorConclusion: string;
1510
+ violationClause: string;
1511
+ visitDetails: {
1512
+ visitNumber: string;
1513
+ visitStartDate: string;
1514
+ visitEndDate: string;
1515
+ inspectionType: string;
1516
+ inspectionTypeId: string;
1517
+ licenseStatusAtVisit: string;
1518
+ permits: {
1519
+ permitName: string;
1520
+ permitNumber: string;
1521
+ validFrom: string;
1522
+ validTo: string;
1523
+ status: string;
1524
+ }[];
1525
+ };
1526
+ updateHistories: {
1527
+ updateDate: string;
1528
+ updatedBy: string;
1529
+ message: string;
1530
+ }[];
1531
+ nonComplianceClauses: {
1532
+ clauseId: number;
1533
+ regulationClauseId: string;
1534
+ clauseName: string;
1535
+ nonComplianceSubClauses: {
1536
+ subClauseId: number;
1537
+ subClauseName: string;
1538
+ notes: string;
1539
+ attachments: {
1540
+ contentLocation: string;
1541
+ fileName: string;
1542
+ }[];
1543
+ }[];
1544
+ }[];
1545
+ }
1546
+
1547
+ /** Redirects unauthenticated users to /auth/login. */
1548
+ declare const authGuard: CanActivateFn;
1549
+ /** Redirects authenticated users away from auth/register pages. */
1550
+ declare const guestGuard: CanActivateFn;
1551
+
1552
+ interface RouteDataWithPermissions {
1553
+ permissions?: string[];
1554
+ }
1555
+ /** Allows access only when the user has all permissions listed in route data. */
1556
+ declare const permissionGuard: CanActivateFn;
1557
+
1558
+ declare class ArabicOnlyDirective {
1559
+ private readonly el;
1560
+ onInputChange(event: Event): void;
1561
+ static ɵfac: i0.ɵɵFactoryDeclaration<ArabicOnlyDirective, never>;
1562
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ArabicOnlyDirective, "[ncimArabicOnly]", never, {}, {}, never, never, true, never>;
1563
+ }
1564
+
1565
+ declare class EnglishOnlyDirective {
1566
+ private readonly el;
1567
+ onInputChange(event: Event): void;
1568
+ static ɵfac: i0.ɵɵFactoryDeclaration<EnglishOnlyDirective, never>;
1569
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EnglishOnlyDirective, "[ncimEnglishOnly]", never, {}, {}, never, never, true, never>;
1570
+ }
1571
+
1572
+ declare class NumbersOnlyDirective {
1573
+ private readonly el;
1574
+ onInputChange(event: Event): void;
1575
+ static ɵfac: i0.ɵɵFactoryDeclaration<NumbersOnlyDirective, never>;
1576
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NumbersOnlyDirective, "[ncimNumbersOnly]", never, {}, {}, never, never, true, never>;
1577
+ }
1578
+
1579
+ declare class PhoneOnlyDirective {
1580
+ private readonly el;
1581
+ onInputChange(): void;
1582
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhoneOnlyDirective, never>;
1583
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PhoneOnlyDirective, "input[ncimPhoneOnly]", never, {}, {}, never, never, true, never>;
1584
+ }
1585
+
1586
+ declare class AlphaNumericDirective {
1587
+ private readonly el;
1588
+ onInputChange(event: Event): void;
1589
+ static ɵfac: i0.ɵɵFactoryDeclaration<AlphaNumericDirective, never>;
1590
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AlphaNumericDirective, "[ncimAlphaNumeric]", never, {}, {}, never, never, true, never>;
1591
+ }
1592
+
1593
+ /** Trims whitespace on blur. */
1594
+ declare class TrimInputDirective {
1595
+ private readonly el;
1596
+ private readonly ngControl;
1597
+ onBlur(): void;
1598
+ static ɵfac: i0.ɵɵFactoryDeclaration<TrimInputDirective, never>;
1599
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TrimInputDirective, "[ncimTrimInput]", never, {}, {}, never, never, true, never>;
1600
+ }
1601
+
1602
+ /** Prevents paste on the host element. */
1603
+ declare class PreventPasteDirective {
1604
+ onPaste(event: ClipboardEvent): void;
1605
+ static ɵfac: i0.ɵɵFactoryDeclaration<PreventPasteDirective, never>;
1606
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PreventPasteDirective, "[ncimPreventPaste]", never, {}, {}, never, never, true, never>;
1607
+ }
1608
+
1609
+ declare class ToUppercaseDirective {
1610
+ private readonly el;
1611
+ private readonly ngControl;
1612
+ onInput(event: Event): void;
1613
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToUppercaseDirective, never>;
1614
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ToUppercaseDirective, "[ncimToUppercase]", never, {}, {}, never, never, true, never>;
1615
+ }
1616
+
1617
+ /** Focuses the host element after the first render. */
1618
+ declare class AutofocusDirective {
1619
+ private readonly el;
1620
+ constructor();
1621
+ static ɵfac: i0.ɵɵFactoryDeclaration<AutofocusDirective, never>;
1622
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AutofocusDirective, "[ncimAutofocus]", never, {}, {}, never, never, true, never>;
1623
+ }
1624
+
1625
+ /** Selects all text on click/focus. */
1626
+ declare class SelectOnClickDirective {
1627
+ private readonly el;
1628
+ onClick(): void;
1629
+ onFocus(): void;
1630
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectOnClickDirective, never>;
1631
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SelectOnClickDirective, "[ncimSelectOnClick]", never, {}, {}, never, never, true, never>;
1632
+ }
1633
+
1634
+ declare class NoWhitespaceDirective {
1635
+ private readonly el;
1636
+ onInputChange(event: Event): void;
1637
+ static ɵfac: i0.ɵɵFactoryDeclaration<NoWhitespaceDirective, never>;
1638
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NoWhitespaceDirective, "[ncimNoWhitespace]", never, {}, {}, never, never, true, never>;
1639
+ }
1640
+
1641
+ declare class EmailCharsDirective {
1642
+ private readonly el;
1643
+ onInputChange(event: Event): void;
1644
+ static ɵfac: i0.ɵɵFactoryDeclaration<EmailCharsDirective, never>;
1645
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EmailCharsDirective, "[ncimEmailChars]", never, {}, {}, never, never, true, never>;
1646
+ }
1647
+
1648
+ /** Shows content only when user has all required permissions. */
1649
+ declare class HasPermissionDirective {
1650
+ private readonly templateRef;
1651
+ private readonly viewContainer;
1652
+ private readonly authService;
1653
+ readonly permissions: i0.InputSignal<string | string[]>;
1654
+ private readonly requiredPermissions;
1655
+ constructor();
1656
+ private updateView;
1657
+ static ɵfac: i0.ɵɵFactoryDeclaration<HasPermissionDirective, never>;
1658
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HasPermissionDirective, "[ncimHasPermission]", never, { "permissions": { "alias": "ncimHasPermission"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1659
+ }
1660
+
1661
+ declare class ImgFallbackDirective {
1662
+ private readonly translateService;
1663
+ private readonly el;
1664
+ private readonly renderer;
1665
+ readonly fallbackUrl: i0.InputSignal<string | undefined>;
1666
+ readonly fallbackTitle: i0.InputSignal<string | undefined>;
1667
+ onError(): void;
1668
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImgFallbackDirective, never>;
1669
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ImgFallbackDirective, "img[ncimImgFallback]", never, { "fallbackUrl": { "alias": "ncimImgFallback"; "required": false; "isSignal": true; }; "fallbackTitle": { "alias": "fallbackTitle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1670
+ }
1671
+
1672
+ declare class PluralTranslateCompiler extends TranslateCompiler {
1673
+ private readonly pluralRules;
1674
+ compile(value: string, lang: string): InterpolatableTranslation;
1675
+ compileTranslations(translations: TranslationObject, lang: string): InterpolatableTranslationObject;
1676
+ private isPlural;
1677
+ private compilePlural;
1678
+ }
1679
+
1680
+ declare const NcimPreset: _primeuix_themes_types.Preset;
1681
+
1682
+ interface Adapter<TRaw, TModel> {
1683
+ adapt(raw: TRaw): TModel;
1684
+ }
1685
+
1686
+ /** Options for PDF generation. */
1687
+ interface ExportPdfOptions {
1688
+ /** Device pixel ratio for capture quality. Defaults to 2 (retina). */
1689
+ scale?: number;
1690
+ /** Page orientation. Defaults to 'portrait'. */
1691
+ orientation?: 'portrait' | 'landscape';
1692
+ /** Show page numbers in the footer. Defaults to true. */
1693
+ pageNumbers?: boolean;
1694
+ /** JPEG quality 0–1 (smaller file). Defaults to PNG (lossless). */
1695
+ jpegQuality?: number;
1696
+ }
1697
+ declare class ExportPdfService {
1698
+ /**
1699
+ * Captures an HTML element as a pixel-perfect PDF and triggers a browser download.
1700
+ *
1701
+ * Fidelity improvements applied automatically:
1702
+ * - Waits for all web fonts (Arabic + Latin) to finish loading
1703
+ * - Resets scroll position so the full content is captured, not a mid-scroll slice
1704
+ * - Clones the DOM before capture and:
1705
+ * - Removes all elements marked `.no-pdf` (export buttons, toolbars, etc.)
1706
+ * - Converts sticky/fixed elements to relative so they don't repeat across pages
1707
+ * - Captures at the element's full scrollWidth so responsive breakpoints match screen
1708
+ *
1709
+ * @param element - The DOM element to capture
1710
+ * @param filename - Download filename without extension
1711
+ * @param options - Quality and layout overrides
1712
+ */
1713
+ generate(element: HTMLElement, filename: string, options?: ExportPdfOptions): Promise<void>;
1714
+ /**
1715
+ * Measures the natural content height of the element by temporarily applying
1716
+ * the same DOM transformations that prepareClone will apply to the captured
1717
+ * clone. This ensures the canvas height matches the clone's rendered height
1718
+ * exactly — preventing both whitespace (too tall) and cut content (too short).
1719
+ *
1720
+ * Transformations mirrored:
1721
+ * - Collapse min-height / height / max-height on root
1722
+ * - Collapse min-height on all children
1723
+ * - Expand overflow:auto/scroll containers to their scrollHeight
1724
+ */
1725
+ private measureNaturalHeight;
1726
+ /** Walk the cloned DOM and neutralise elements that break full-height capture. */
1727
+ private prepareClone;
1728
+ /**
1729
+ * Resolve the effective background color of the element.
1730
+ * Falls back to white if transparent (avoids black PDF background).
1731
+ */
1732
+ private resolveBackground;
1733
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExportPdfService, never>;
1734
+ static ɵprov: i0.ɵɵInjectableDeclaration<ExportPdfService>;
1735
+ }
1736
+
1737
+ export { API_ENDPOINTS, ASSET_PATHS, AlphaNumericDirective, ApiService, ArabicOnlyDirective, AuthService, AutofocusDirective, BUSINESS_STEPS, ButtonSize, ButtonType, ButtonVariant, CACHE_DEFAULTS, CACHE_ENABLED, CACHE_PATH_DEPTH, CACHE_TTL, CHART_COLORS, ENTITY_DETAILS_DEFAULTS, ENTITY_DETAILS_OPTIONS, ENTITY_TYPE_OPTIONS, ENVIRONMENT, ERROR_KEYS, ERROR_MESSAGE_MAX_LENGTH, EmailCharsDirective, EnglishNumberPipe, EnglishOnlyDirective, EntityType, ExportPdfService, FALLBACK_LANGUAGE, GENERATED_ICON_NAMES, GOVERNMENT_STEPS, GlobalErrorHandler, HTTP_HEADERS, HasPermissionDirective, HttpCacheService, HttpErrorKey, I18N_CONFIG, ICONS, IDEMPOTENT_METHODS, INPUT_TYPES, INSPECTION_STEPS, ImgFallbackDirective, LOADING_DELAY_MS, LOGOUT_DEBOUNCE_MS, Language, LanguageService, LayoutWidth, LoadingService, LocalizedDatePipe, MAP_ACTION_ICONS, MAP_CONFIG, MAP_LEGEND_CONFIG, MAX_FIELD_ERRORS_SHOWN, MAX_RETRY_COUNT, MapLegendStatus, MarkerStatus, NcimPreset, NoWhitespaceDirective, NumbersOnlyDirective, OidcAuthService, PACKAGES, PACKAGE_FEATURES, PHONE_CONFIG, PLACEHOLDER_KEYS, PRIMENG_LOCALE, PUBLIC_API_PATHS, PackageType, PhoneOnlyDirective, PluralTranslateCompiler, PreventPasteDirective, REGEX, REGISTRATION_DEFAULTS, REGISTRATION_STEPS, RETRYABLE_STATUS_CODES, RETRY_DEFAULTS, ROUTE_PATHS, ROUTE_SEGMENTS, ReplacePipe, SIDEBAR_CONFIG, SIDEBAR_DEFAULT_STEP, SKIP_AUTH, SKIP_CONNECTIVITY, SKIP_ERROR_HANDLING, SKIP_LOADING, SKIP_RETRY, SSO_CALLBACK_PARAMS_KEY, SSO_REDIRECT_URL_KEY, STORAGE_KEYS, SelectOnClickDirective, SeoService, TIME, TOAST_DEDUP_MAX_SIZE, TOAST_DEDUP_MS, TOAST_DURATION, ToUppercaseDirective, ToastService, TrendDirection, TrimInputDirective, VALIDATION_LENGTHS, VALIDATION_PATTERNS, alphanumericValidator, arabicOnlyValidator, authGuard, authInterceptor, baseUrlInterceptor, cacheInterceptor, confirmedValidator, connectivityInterceptor, crNumberValidator, createApiErrorHandler, dateMaxValidator, dateMinValidator, emailValidator, englishOnlyValidator, environments, errorInterceptor, guestGuard, ibanValidator, idNumberValidator, identityNumberValidator, initFormData, lettersOnlyValidator, loadingInterceptor, markSubmittedAndValidate, minSelectedValidator, noWhitespaceValidator, numbersOnlyValidator, parseDate, passwordMatchValidator, passwordStrengthValidator, patternValidator, permissionGuard, phoneValidator, provideEnvironment, retryInterceptor, saudiMobile05Validator, saudiMobileValidator, showApiErrorToast, syncFormWithLoading, toFormData, toHttpParams, urlValidator, useFormInitData };
1738
+ export type { Adapter, ApiRequestOptions, Environment, ExportPdfOptions, GeneratedIconName, IconName, InputType, JwtPayload, MapLegendItemConfig, RegistrationStepDefinition, RouteDataWithPermissions, SidebarContent, SsoConfig, SsoUser, ToastOptions, ToastSeverity, Violation, ViolationBusiness, ViolationCorrectionPeriod, ViolationDetailResponse, ViolationDetailsRequest, ViolationFine, ViolationListItem, ViolationStatus, ViolationsListRequest, ViolationsListResponse, Violator };