@unopsitg/ux 21.0.2 → 21.0.5

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unopsitg/ux",
3
- "version": "21.0.2",
3
+ "version": "21.0.5",
4
4
  "description": "UNOPS Angular 21 layout shell, brand theme (PrimeNG / PrimeUIX), and shared types",
5
5
  "keywords": [
6
6
  "angular",
@@ -1,6 +1,6 @@
1
1
  import * as _primeuix_themes_types from '@primeuix/themes/types';
2
2
  import * as _angular_core from '@angular/core';
3
- import { InjectionToken, OnInit, OnDestroy, ElementRef, AfterViewChecked, AfterViewInit } from '@angular/core';
3
+ import { InjectionToken, OnInit, OnDestroy, ElementRef, AfterViewChecked, AfterViewInit, TemplateRef, QueryList } from '@angular/core';
4
4
  import { QueryParamsHandling, IsActiveMatchOptions, Router } from '@angular/router';
5
5
  import * as _unopsitg_ux from '@unopsitg/ux';
6
6
  import * as rxjs from 'rxjs';
@@ -660,6 +660,93 @@ declare class AiCardBgComponent {
660
660
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiCardBgComponent, "ux-ai-card-bg", never, {}, {}, never, ["*"], true, never>;
661
661
  }
662
662
 
663
+ interface AiInsight {
664
+ id: number;
665
+ title: string;
666
+ description: string;
667
+ actionLabel: string;
668
+ icon: string;
669
+ iconColor: string;
670
+ }
671
+ declare class AiInsightsCardComponent implements OnInit {
672
+ title: _angular_core.InputSignal<string>;
673
+ insights: _angular_core.InputSignal<AiInsight[]>;
674
+ searchPlaceholder: _angular_core.InputSignal<string>;
675
+ actionClick: _angular_core.OutputEmitterRef<AiInsight>;
676
+ expanded: _angular_core.WritableSignal<boolean>;
677
+ searchQuery: _angular_core.WritableSignal<string>;
678
+ filteredInsights: _angular_core.Signal<AiInsight[]>;
679
+ perPage: _angular_core.WritableSignal<number>;
680
+ page: _angular_core.WritableSignal<number>;
681
+ first: _angular_core.Signal<number>;
682
+ paginatedInsights: _angular_core.Signal<AiInsight[]>;
683
+ private destroyRef;
684
+ ngOnInit(): void;
685
+ private calcPerPage;
686
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiInsightsCardComponent, never>;
687
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiInsightsCardComponent, "ux-ai-insights-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "insights": { "alias": "insights"; "required": true; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, never, true, never>;
688
+ }
689
+
690
+ interface DetailTab {
691
+ value: string;
692
+ label: string;
693
+ icon?: string;
694
+ }
695
+ /**
696
+ * Structural directive that marks a template as content for a specific tab
697
+ * inside `<ux-detail-layout>`.
698
+ *
699
+ * Usage: `<ng-template uxDetailTab="overview">...content...</ng-template>`
700
+ */
701
+ declare class DetailTabDirective {
702
+ templateRef: TemplateRef<unknown>;
703
+ readonly uxDetailTab: _angular_core.InputSignal<string>;
704
+ constructor(templateRef: TemplateRef<unknown>);
705
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DetailTabDirective, never>;
706
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DetailTabDirective, "[uxDetailTab]", never, { "uxDetailTab": { "alias": "uxDetailTab"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
707
+ }
708
+ /**
709
+ * Reusable detail-page layout shell: sticky header, tabbed main column,
710
+ * and a persistent right sidebar (typically for AI insights).
711
+ *
712
+ * All styling derives from the active PrimeNG brand preset (BrandSoft / BrandCrisp /
713
+ * BrandContrast) via `--p-*` CSS variables and Tailwind `surface-*` / `primary-*`
714
+ * utilities (resolved by `tailwindcss-primeui`). No hardcoded colors.
715
+ *
716
+ * ```html
717
+ * <ux-detail-layout [tabs]="myTabs" [(activeTab)]="currentTab">
718
+ * <ng-container ux-detail-header>
719
+ * ...sticky header content...
720
+ * </ng-container>
721
+ *
722
+ * <ng-template uxDetailTab="overview">...tab 1...</ng-template>
723
+ * <ng-template uxDetailTab="scope">...tab 2...</ng-template>
724
+ *
725
+ * <ng-container ux-detail-sidebar>
726
+ * ...right sidebar (AI card, documents, etc.)...
727
+ * </ng-container>
728
+ *
729
+ * <ng-container ux-detail-footer>
730
+ * ...audit metadata row...
731
+ * </ng-container>
732
+ * </ux-detail-layout>
733
+ * ```
734
+ */
735
+ declare class DetailLayoutComponent {
736
+ /** Tab definitions for the main content area. */
737
+ readonly tabs: _angular_core.InputSignal<DetailTab[]>;
738
+ /** Currently active tab value (two-way bindable). */
739
+ readonly activeTab: _angular_core.ModelSignal<string>;
740
+ /** True once the scrollable body has been scrolled past the threshold. */
741
+ readonly scrolled: _angular_core.WritableSignal<boolean>;
742
+ /** Tab content templates provided by the consumer. */
743
+ tabTemplates: QueryList<DetailTabDirective>;
744
+ getTabTemplate(value: string): TemplateRef<unknown> | null;
745
+ onScroll(event: Event): void;
746
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DetailLayoutComponent, never>;
747
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DetailLayoutComponent, "ux-detail-layout", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, { "activeTab": "activeTabChange"; }, ["tabTemplates"], ["[ux-detail-header]", "[ux-detail-header-meta]", "[ux-detail-footer]", "[ux-detail-sidebar]"], true, never>;
748
+ }
749
+
663
750
  interface Blog {
664
751
  name?: string;
665
752
  coverImage?: any;
@@ -874,5 +961,5 @@ interface DialogConfig {
874
961
  newTask?: boolean;
875
962
  }
876
963
 
877
- export { AiCardBgComponent, AppBreadcrumb, AppConfigurator, AppFooter, AppLayout, AppMenu, AppMenuitem, AppRightMenu, AppSearch, AppSidebar, AppTopbar, AuthLayout, BrandContrast, BrandCrisp, BrandSoft, LayoutService, MENU_MODEL, SIDEBAR_LOGO, TOPBAR_MOBILE_LOGO, brandPresets, brandPrimitives };
878
- export type { Assignee, Blog, Chat, Comment$1 as Comment, Country, Customer, DialogConfig, File, Folder, Image, KanbanCardType, Comment as KanbanComment, KanbanListType, Task$1 as KanbanTask, LayoutConfig, ListName, Mail, Member$1 as Member, MenuItem, Message, Metric, Partner, Product, Representative, SidebarLogoConfig, Task, TaskList, TopbarMobileLogoConfig };
964
+ export { AiCardBgComponent, AiInsightsCardComponent, AppBreadcrumb, AppConfigurator, AppFooter, AppLayout, AppMenu, AppMenuitem, AppRightMenu, AppSearch, AppSidebar, AppTopbar, AuthLayout, BrandContrast, BrandCrisp, BrandSoft, DetailLayoutComponent, DetailTabDirective, LayoutService, MENU_MODEL, SIDEBAR_LOGO, TOPBAR_MOBILE_LOGO, brandPresets, brandPrimitives };
965
+ export type { AiInsight, Assignee, Blog, Chat, Comment$1 as Comment, Country, Customer, DetailTab, DialogConfig, File, Folder, Image, KanbanCardType, Comment as KanbanComment, KanbanListType, Task$1 as KanbanTask, LayoutConfig, ListName, Mail, Member$1 as Member, MenuItem, Message, Metric, Partner, Product, Representative, SidebarLogoConfig, Task, TaskList, TopbarMobileLogoConfig };