@ncim/sdk 0.2.9 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,35 +2,30 @@ import { Translation, MenuItem } from 'primeng/api';
2
2
  import * as _angular_forms from '@angular/forms';
3
3
  import { ValidatorFn, AbstractControl, ValidationErrors, FormGroup, ControlValueAccessor, FormControl, Validator, FormRecord } from '@angular/forms';
4
4
  import * as _angular_core from '@angular/core';
5
- import { InjectionToken, EnvironmentProviders, Signal, PipeTransform, ErrorHandler, ElementRef, AfterContentInit, AfterViewInit, OnDestroy, TemplateRef, DestroyRef } from '@angular/core';
5
+ import { InjectionToken, EnvironmentProviders, Signal, PipeTransform, ErrorHandler, AfterViewInit, DestroyRef, ElementRef, AfterContentInit, OnDestroy, TemplateRef } from '@angular/core';
6
6
  import { Observable } from 'rxjs';
7
7
  import { HttpParams, HttpContextToken, HttpResponse, HttpHeaders, HttpEvent, HttpInterceptorFn } from '@angular/common/http';
8
8
  import { CanActivateFn, Route } from '@angular/router';
9
9
  import { TranslateCompiler, InterpolatableTranslation, TranslationObject, InterpolatableTranslationObject, TranslateService } from '@ngx-translate/core';
10
10
  import * as _primeuix_themes_types from '@primeuix/themes/types';
11
11
  import { IconName as IconName$1, InputType as InputType$1, TrendDirection as TrendDirection$1, MarkerStatus as MarkerStatus$1, MapLegendStatus as MapLegendStatus$1, EntityType as EntityType$1, PackageType as PackageType$1 } from './ncim-sdk-core';
12
- import { PopupModalBase as PopupModalBase$1 } from './ncim-sdk-ui';
13
- import { QuickFilterTag as QuickFilterTag$1 } from './ncim-sdk-ui';
14
- import { SelectOption as SelectOption$1 } from './ncim-sdk-ui';
15
- import { InputFilter as InputFilter$1 } from './ncim-sdk-ui';
16
12
  import * as _libs_core from './ncim-sdk-core';
17
13
  import { ExportPdfOptions as ExportPdfOptions$1 } from './ncim-sdk-core';
18
14
  import { ViolationFine as ViolationFine$1, ViolationBusiness as ViolationBusiness$1, ViolationCorrectionPeriod as ViolationCorrectionPeriod$1 } from './ncim-sdk-core';
19
15
  import { EChartsOption } from 'echarts';
20
- import { MapMarkerData as MapMarkerData$1 } from './ncim-sdk-ui';
21
- import { BreadcrumbItem as BreadcrumbItem$1 } from './ncim-sdk-ui';
22
- import { AccordionItem as AccordionItem$1 } from './ncim-sdk-ui';
23
16
  import { ButtonSeverity } from 'primeng/button';
24
17
  import * as _angular_platform_browser from '@angular/platform-browser';
25
- import { Popup as Popup$1 } from './ncim-sdk-ui';
26
18
  import { LoadingService as LoadingService$1 } from './ncim-sdk-core';
27
19
  import * as _ngrx_store from '@ngrx/store';
28
20
  import { ENTITY_TYPE_OPTIONS as ENTITY_TYPE_OPTIONS$1 } from './ncim-sdk-core';
29
21
  import { OptionItem as OptionItem$1 } from './ncim-sdk-ui';
22
+ import { SelectOption as SelectOption$1 } from './ncim-sdk-ui';
30
23
  import { TabItem as TabItem$1 } from './ncim-sdk-ui';
31
24
  import * as regulatoryDashboard_models from './ncim-sdk-core';
25
+ import { BreadcrumbItem as BreadcrumbItem$1 } from './ncim-sdk-ui';
32
26
  import { RelatedCardItem as RelatedCardItem$1 } from './ncim-sdk-ui';
33
27
  import { ResourceItem as ResourceItem$1 } from './ncim-sdk-ui';
28
+ import { AccordionItem as AccordionItem$1 } from './ncim-sdk-ui';
34
29
  import { GridSortEvent as GridSortEvent$1, GridColumn as GridColumn$1 } from './ncim-sdk-ui';
35
30
  import { TimelineData as TimelineData$1 } from './ncim-sdk-ui';
36
31
 
@@ -2024,7 +2019,56 @@ declare class Sidebar {
2024
2019
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<Sidebar, "ncim-sidebar", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "notificationCount": { "alias": "notificationCount"; "required": false; "isSignal": true; }; "userAvatar": { "alias": "userAvatar"; "required": false; "isSignal": true; }; "showCompleteTraining": { "alias": "showCompleteTraining"; "required": false; "isSignal": true; }; "showAppsMenu": { "alias": "showAppsMenu"; "required": false; "isSignal": true; }; "activeActionId": { "alias": "activeActionId"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "panelOpen": { "alias": "panelOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "panelOpen": "panelOpenChange"; "footerActionClick": "footerActionClick"; "menuToggle": "menuToggle"; }, never, never, true, never>;
2025
2020
  }
2026
2021
 
2027
- declare class LogoutModal extends PopupModalBase$1 {
2022
+ declare class Popup {
2023
+ readonly open: _angular_core.InputSignal<boolean>;
2024
+ readonly title: _angular_core.InputSignal<string>;
2025
+ readonly footerBorder: _angular_core.InputSignal<boolean>;
2026
+ readonly footerStyle: _angular_core.InputSignal<boolean>;
2027
+ readonly showCloseButton: _angular_core.InputSignal<boolean>;
2028
+ readonly showBackButton: _angular_core.InputSignal<boolean>;
2029
+ readonly largeHeader: _angular_core.InputSignal<boolean>;
2030
+ readonly closeOnBackdropClick: _angular_core.InputSignal<boolean>;
2031
+ readonly size: _angular_core.InputSignal<"small" | "medium" | "large" | "extra-large">;
2032
+ readonly width: _angular_core.InputSignal<string>;
2033
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
2034
+ readonly backClicked: _angular_core.OutputEmitterRef<void>;
2035
+ protected readonly titleId: string;
2036
+ protected readonly dialogStyle: _angular_core.Signal<{
2037
+ width: string;
2038
+ maxWidth: string;
2039
+ }>;
2040
+ /**
2041
+ * Guard against double-emission: when the close button is clicked,
2042
+ * `close()` emits `dismissed` directly. PrimeNG then hides the dialog
2043
+ * and fires `onHide` — we skip that second emission.
2044
+ */
2045
+ private _closedByButton;
2046
+ /** Called by the × button in the header. */
2047
+ close(): void;
2048
+ /**
2049
+ * Called by PrimeNG when the dialog hides — covers dismissableMask
2050
+ * (backdrop click) and ESC key. The close-button path is guarded above.
2051
+ */
2052
+ onHide(): void;
2053
+ back(): void;
2054
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Popup, never>;
2055
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Popup, "ncim-popup", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "footerBorder": { "alias": "footerBorder"; "required": false; "isSignal": true; }; "footerStyle": { "alias": "footerStyle"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "largeHeader": { "alias": "largeHeader"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; "backClicked": "backClicked"; }, never, ["[subTitle]", "*", "[popupFooter]"], true, never>;
2056
+ }
2057
+
2058
+ declare abstract class PopupModalBase<T = unknown> implements AfterViewInit {
2059
+ protected readonly destroyRef: DestroyRef;
2060
+ readonly modalData: _angular_core.WritableSignal<T | null>;
2061
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
2062
+ readonly popup: _angular_core.Signal<Popup>;
2063
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
2064
+ openModal(data?: T): void;
2065
+ closeModal(): void;
2066
+ ngAfterViewInit(): void;
2067
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopupModalBase<any>, never>;
2068
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PopupModalBase<any>, "ng-component", never, {}, { "dismissed": "dismissed"; }, never, never, true, never>;
2069
+ }
2070
+
2071
+ declare class LogoutModal extends PopupModalBase {
2028
2072
  readonly confirmed: _angular_core.OutputEmitterRef<void>;
2029
2073
  protected onConfirm(): void;
2030
2074
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LogoutModal, never>;
@@ -2131,7 +2175,7 @@ declare class OtpInput implements ControlValueAccessor {
2131
2175
  }
2132
2176
 
2133
2177
  declare class NcimButton {
2134
- readonly variant: _angular_core.InputSignal<"primary" | "black" | "neutral" | "secondary" | "link" | "transparent" | "outline">;
2178
+ readonly variant: _angular_core.InputSignal<"link" | "primary" | "black" | "neutral" | "secondary" | "transparent" | "outline">;
2135
2179
  readonly type: _angular_core.InputSignal<"button" | "submit">;
2136
2180
  readonly fullWidth: _angular_core.InputSignal<boolean>;
2137
2181
  readonly disabled: _angular_core.InputSignal<boolean>;
@@ -2157,7 +2201,7 @@ interface StepItem {
2157
2201
  }
2158
2202
  declare class Stepper {
2159
2203
  readonly steps: _angular_core.InputSignal<StepItem[]>;
2160
- readonly variant: _angular_core.InputSignal<"progress" | "steps" | "pills">;
2204
+ readonly variant: _angular_core.InputSignal<"steps" | "progress" | "pills">;
2161
2205
  readonly linear: _angular_core.InputSignal<boolean>;
2162
2206
  readonly width: _angular_core.InputSignal<number>;
2163
2207
  readonly stepChange: _angular_core.OutputEmitterRef<string>;
@@ -2172,7 +2216,7 @@ declare class RegisterLayout {
2172
2216
  readonly sidebarDescription: _angular_core.InputSignal<string>;
2173
2217
  readonly sidebarImage: _angular_core.InputSignal<string>;
2174
2218
  readonly steps: _angular_core.InputSignal<StepItem[]>;
2175
- readonly stepperVariant: _angular_core.InputSignal<"progress" | "steps">;
2219
+ readonly stepperVariant: _angular_core.InputSignal<"steps" | "progress">;
2176
2220
  readonly linear: _angular_core.InputSignal<boolean>;
2177
2221
  readonly stepChange: _angular_core.OutputEmitterRef<string>;
2178
2222
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RegisterLayout, never>;
@@ -2330,9 +2374,9 @@ interface TabItem {
2330
2374
  declare class Tabs {
2331
2375
  readonly items: _angular_core.InputSignal<TabItem[]>;
2332
2376
  readonly activeId: _angular_core.InputSignal<string>;
2333
- readonly variant: _angular_core.InputSignal<"default" | "pills" | "underline">;
2377
+ readonly variant: _angular_core.InputSignal<"pills" | "default" | "underline">;
2334
2378
  readonly size: _angular_core.InputSignal<"small" | "medium" | "large">;
2335
- readonly justify: _angular_core.InputSignal<"center" | "start" | "end" | "between">;
2379
+ readonly justify: _angular_core.InputSignal<"start" | "end" | "center" | "between">;
2336
2380
  readonly tabChange: _angular_core.OutputEmitterRef<string>;
2337
2381
  readonly underlineStyle: _angular_core.InputSignal<"text" | "full">;
2338
2382
  protected readonly activeValue: _angular_core.WritableSignal<string | number | undefined>;
@@ -2426,7 +2470,7 @@ declare class FormInput implements ControlValueAccessor {
2426
2470
  readonly inputType: _angular_core.Signal<InputType$1 | "tel" | "datetime-local">;
2427
2471
  readonly inputMode: _angular_core.Signal<"numeric" | "tel" | null>;
2428
2472
  readonly autocomplete: _angular_core.Signal<"off" | "tel">;
2429
- readonly inputFilter: _angular_core.Signal<"phone" | "numeric" | "noComma" | null>;
2473
+ readonly inputFilter: _angular_core.Signal<"numeric" | "phone" | "noComma" | null>;
2430
2474
  private static readonly ERROR_MAP;
2431
2475
  readonly errorKey: _angular_core.Signal<string>;
2432
2476
  readonly showError: _angular_core.Signal<boolean>;
@@ -2475,6 +2519,20 @@ declare class FormMultiSelect {
2475
2519
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormMultiSelect, "ncim-form-multi-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "maxSelectedLabels": { "alias": "maxSelectedLabels"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "focusEvent": "focusEvent"; "blurEvent": "blurEvent"; }, never, never, true, never>;
2476
2520
  }
2477
2521
 
2522
+ /** A single active filter tag (e.g. "الحالة (1): جسيمة") */
2523
+ interface QuickFilterTag {
2524
+ /** Filter label (e.g. "الحالة", "المدينة") */
2525
+ label: string;
2526
+ /** Number of selected items */
2527
+ count: number;
2528
+ /** Display value for single-value tags */
2529
+ value: string;
2530
+ /** Individual display values for multi-value tags — renders separate removable badges */
2531
+ values?: string[];
2532
+ /** Optional key for removal */
2533
+ key?: string;
2534
+ }
2535
+
2478
2536
  type FilterFieldType = 'text' | 'select' | 'multiselect' | 'date' | 'datetime' | 'date-range' | 'number' | 'search' | 'checkbox' | 'radio' | 'checkbox-search' | 'divider';
2479
2537
  interface FilterFieldConfig {
2480
2538
  /** Unique key — maps directly to the signal model property */
@@ -2492,7 +2550,7 @@ interface FilterFieldConfig {
2492
2550
  /** Icon position — defaults to 'end' */
2493
2551
  iconPosition?: 'start' | 'end';
2494
2552
  /** Options list — required when type === 'select' | 'multiselect' | 'checkbox' | 'checkbox-search' | 'radio' */
2495
- options?: SelectOption$1[];
2553
+ options?: SelectOption[];
2496
2554
  /**
2497
2555
  * CSS track size for this field's column.
2498
2556
  * Used only in auto layout (when FilterFormConfig.columns is NOT set).
@@ -2517,7 +2575,7 @@ interface FilterFieldConfig {
2517
2575
  /** Name attribute for radio groups — auto-generated if omitted */
2518
2576
  radioName?: string;
2519
2577
  /** Optional input filter override (e.g. 'noComma' for search fields). */
2520
- inputFilter?: InputFilter$1;
2578
+ inputFilter?: InputFilter;
2521
2579
  }
2522
2580
  interface FilterFormConfig {
2523
2581
  /** All field definitions */
@@ -2564,7 +2622,7 @@ declare class FilterForm implements OnDestroy {
2564
2622
  readonly hasActiveFilters: _angular_core.Signal<boolean>;
2565
2623
  readonly fieldStringValues: _angular_core.Signal<Record<string, string>>;
2566
2624
  readonly fieldMultiValues: _angular_core.Signal<Record<string, string[]>>;
2567
- readonly activeFilterTags: _angular_core.Signal<QuickFilterTag$1[]>;
2625
+ readonly activeFilterTags: _angular_core.Signal<QuickFilterTag[]>;
2568
2626
  private _debounceTimer;
2569
2627
  constructor();
2570
2628
  ngOnDestroy(): void;
@@ -2578,7 +2636,7 @@ declare class FilterForm implements OnDestroy {
2578
2636
  onSubmit(): void;
2579
2637
  onReset(): void;
2580
2638
  onClearAll(): void;
2581
- onFilterTagClick(tag: QuickFilterTag$1): void;
2639
+ onFilterTagClick(tag: QuickFilterTag): void;
2582
2640
  private defaultFor;
2583
2641
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterForm, never>;
2584
2642
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterForm, "ncim-filter-form", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "quickFilterTitle": { "alias": "quickFilterTitle"; "required": false; "isSignal": true; }; "quickFilterCounter": { "alias": "quickFilterCounter"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; "filterSubmit": "filterSubmit"; "filterReset": "filterReset"; "saveFilterClick": "saveFilterClick"; }, never, never, true, never>;
@@ -2739,7 +2797,7 @@ declare class StatsAnalyticsCard {
2739
2797
  readonly chartShowArea: _angular_core.InputSignal<boolean>;
2740
2798
  /** Sparkline ↔ text gap: `sm` 12px (first KPI card), `md` 16px (second). */
2741
2799
  readonly surfaceGap: _angular_core.InputSignal<"sm" | "md">;
2742
- readonly trendIcon: _angular_core.Signal<"trend-down-arrow" | "trend-up-arrow">;
2800
+ readonly trendIcon: _angular_core.Signal<"trend-up-arrow" | "trend-down-arrow">;
2743
2801
  readonly showChart: _angular_core.Signal<boolean>;
2744
2802
  /** Mutable series for `ncim-sparkline` — satisfies template assignability to `number[]`. */
2745
2803
  readonly sparklineData: _angular_core.Signal<number[]>;
@@ -3390,7 +3448,7 @@ declare class CategoryTile {
3390
3448
  readonly label: _angular_core.InputSignal<string>;
3391
3449
  readonly routerLink: _angular_core.InputSignal<string | undefined>;
3392
3450
  readonly description: _angular_core.InputSignal<string | null>;
3393
- readonly variant: _angular_core.InputSignal<"narrow" | "wide">;
3451
+ readonly variant: _angular_core.InputSignal<"wide" | "narrow">;
3394
3452
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CategoryTile, never>;
3395
3453
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CategoryTile, "ncim-category-tile", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3396
3454
  }
@@ -3737,7 +3795,7 @@ declare class StoreLocations {
3737
3795
  readonly zoom: _angular_core.InputSignal<number>;
3738
3796
  readonly centerLat: _angular_core.InputSignal<number>;
3739
3797
  readonly centerLng: _angular_core.InputSignal<number>;
3740
- readonly markers: _angular_core.InputSignal<MapMarkerData$1[]>;
3798
+ readonly markers: _angular_core.InputSignal<MapMarkerData[]>;
3741
3799
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StoreLocations, never>;
3742
3800
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StoreLocations, "ncim-store-locations", never, { "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "centerLat": { "alias": "centerLat"; "required": false; "isSignal": true; }; "centerLng": { "alias": "centerLng"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3743
3801
  }
@@ -3998,7 +4056,7 @@ declare class Breadcrumb {
3998
4056
  declare class PageHeader {
3999
4057
  readonly titleKey: _angular_core.InputSignal<string>;
4000
4058
  readonly title: _angular_core.InputSignal<string>;
4001
- readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem$1[]>;
4059
+ readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem[]>;
4002
4060
  readonly showBreadcrumb: _angular_core.InputSignal<boolean>;
4003
4061
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageHeader, never>;
4004
4062
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageHeader, "ncim-page-header", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": false; "isSignal": true; }; "showBreadcrumb": { "alias": "showBreadcrumb"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -4080,7 +4138,7 @@ declare class ArticleDetail {
4080
4138
  readonly videoSrc: _angular_core.InputSignal<string>;
4081
4139
  readonly titleKey: _angular_core.InputSignal<string>;
4082
4140
  readonly contentKey: _angular_core.InputSignal<string>;
4083
- readonly accordionItems: _angular_core.InputSignal<AccordionItem$1[]>;
4141
+ readonly accordionItems: _angular_core.InputSignal<AccordionItem[]>;
4084
4142
  readonly accordionTitleKey: _angular_core.InputSignal<string>;
4085
4143
  readonly feedback: _angular_core.OutputEmitterRef<"yes" | "no">;
4086
4144
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ArticleDetail, never>;
@@ -4116,7 +4174,7 @@ declare class ArticleSidebar {
4116
4174
 
4117
4175
  declare class CardsListPage {
4118
4176
  readonly titleKey: _angular_core.InputSignal<string>;
4119
- readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem$1[]>;
4177
+ readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem[]>;
4120
4178
  readonly items: _angular_core.InputSignal<NavCardItem[]>;
4121
4179
  readonly getItemRoute: _angular_core.InputSignal<(slug: string) => string[]>;
4122
4180
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardsListPage, never>;
@@ -4125,10 +4183,10 @@ declare class CardsListPage {
4125
4183
 
4126
4184
  declare class ArticlePage {
4127
4185
  readonly titleKey: _angular_core.InputSignal<string>;
4128
- readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem$1[]>;
4186
+ readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem[]>;
4129
4187
  readonly videoSrc: _angular_core.InputSignal<string>;
4130
4188
  readonly contentKey: _angular_core.InputSignal<string>;
4131
- readonly accordionItems: _angular_core.InputSignal<AccordionItem$1[]>;
4189
+ readonly accordionItems: _angular_core.InputSignal<AccordionItem[]>;
4132
4190
  readonly accordionTitleKey: _angular_core.InputSignal<string>;
4133
4191
  readonly resources: _angular_core.InputSignal<ResourceItem[]>;
4134
4192
  readonly relatedItems: _angular_core.InputSignal<RelatedCardItem[]>;
@@ -4515,56 +4573,7 @@ declare class FeedbackSection {
4515
4573
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FeedbackSection, "ncim-feedback-section", never, { "questionKey": { "alias": "questionKey"; "required": false; "isSignal": true; }; "yesKey": { "alias": "yesKey"; "required": false; "isSignal": true; }; "noKey": { "alias": "noKey"; "required": false; "isSignal": true; }; }, { "feedback": "feedback"; }, never, never, true, never>;
4516
4574
  }
4517
4575
 
4518
- declare class Popup {
4519
- readonly open: _angular_core.InputSignal<boolean>;
4520
- readonly title: _angular_core.InputSignal<string>;
4521
- readonly footerBorder: _angular_core.InputSignal<boolean>;
4522
- readonly footerStyle: _angular_core.InputSignal<boolean>;
4523
- readonly showCloseButton: _angular_core.InputSignal<boolean>;
4524
- readonly showBackButton: _angular_core.InputSignal<boolean>;
4525
- readonly largeHeader: _angular_core.InputSignal<boolean>;
4526
- readonly closeOnBackdropClick: _angular_core.InputSignal<boolean>;
4527
- readonly size: _angular_core.InputSignal<"small" | "medium" | "large" | "extra-large">;
4528
- readonly width: _angular_core.InputSignal<string>;
4529
- readonly dismissed: _angular_core.OutputEmitterRef<void>;
4530
- readonly backClicked: _angular_core.OutputEmitterRef<void>;
4531
- protected readonly titleId: string;
4532
- protected readonly dialogStyle: _angular_core.Signal<{
4533
- width: string;
4534
- maxWidth: string;
4535
- }>;
4536
- /**
4537
- * Guard against double-emission: when the close button is clicked,
4538
- * `close()` emits `dismissed` directly. PrimeNG then hides the dialog
4539
- * and fires `onHide` — we skip that second emission.
4540
- */
4541
- private _closedByButton;
4542
- /** Called by the × button in the header. */
4543
- close(): void;
4544
- /**
4545
- * Called by PrimeNG when the dialog hides — covers dismissableMask
4546
- * (backdrop click) and ESC key. The close-button path is guarded above.
4547
- */
4548
- onHide(): void;
4549
- back(): void;
4550
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<Popup, never>;
4551
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Popup, "ncim-popup", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "footerBorder": { "alias": "footerBorder"; "required": false; "isSignal": true; }; "footerStyle": { "alias": "footerStyle"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "largeHeader": { "alias": "largeHeader"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; "backClicked": "backClicked"; }, never, ["[subTitle]", "*", "[popupFooter]"], true, never>;
4552
- }
4553
-
4554
- declare abstract class PopupModalBase<T = unknown> implements AfterViewInit {
4555
- protected readonly destroyRef: DestroyRef;
4556
- readonly modalData: _angular_core.WritableSignal<T | null>;
4557
- readonly isOpen: _angular_core.WritableSignal<boolean>;
4558
- readonly popup: _angular_core.Signal<Popup$1>;
4559
- readonly dismissed: _angular_core.OutputEmitterRef<void>;
4560
- openModal(data?: T): void;
4561
- closeModal(): void;
4562
- ngAfterViewInit(): void;
4563
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopupModalBase<any>, never>;
4564
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PopupModalBase<any>, "ng-component", never, {}, { "dismissed": "dismissed"; }, never, never, true, never>;
4565
- }
4566
-
4567
- declare class SaveFilterPopup extends PopupModalBase$1 {
4576
+ declare class SaveFilterPopup extends PopupModalBase {
4568
4577
  readonly mode: _angular_core.InputSignal<"edit" | "add">;
4569
4578
  readonly initialTitle: _angular_core.InputSignal<string>;
4570
4579
  readonly saveLoading: _angular_core.InputSignal<boolean>;
@@ -4587,20 +4596,6 @@ declare class SaveFilterPopup extends PopupModalBase$1 {
4587
4596
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SaveFilterPopup, "ncim-save-filter-popup", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "initialTitle": { "alias": "initialTitle"; "required": false; "isSignal": true; }; "saveLoading": { "alias": "saveLoading"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "deleted": "deleted"; }, never, never, true, never>;
4588
4597
  }
4589
4598
 
4590
- /** A single active filter tag (e.g. "الحالة (1): جسيمة") */
4591
- interface QuickFilterTag {
4592
- /** Filter label (e.g. "الحالة", "المدينة") */
4593
- label: string;
4594
- /** Number of selected items */
4595
- count: number;
4596
- /** Display value for single-value tags */
4597
- value: string;
4598
- /** Individual display values for multi-value tags — renders separate removable badges */
4599
- values?: string[];
4600
- /** Optional key for removal */
4601
- key?: string;
4602
- }
4603
-
4604
4599
  declare class QuickFilterBar {
4605
4600
  readonly activeFilters: _angular_core.InputSignal<QuickFilterTag[]>;
4606
4601
  readonly showSaveFilter: _angular_core.InputSignal<boolean>;