@compsych-ui-components/angular 6.0.10 → 6.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../../../../packages/angular/src/lib/sidebar/sidebar.ts","../../../../../../packages/angular/src/lib/sidebar/sidebar.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n model,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { LUCIDE_ICONS } from '@compsych-ui-components/shared/assets/lucide-icons.generated';\n\nexport interface SidebarItem {\n /** Stable identifier used by `activeId` and emitted by `itemClick`. */\n id: string;\n /** Text label displayed next to the icon. */\n label: string;\n /** Lucide icon name (kebab-case), e.g. `'house'` or `'folder'`. */\n icon: string;\n /** Child items — renders this item as an expandable group with a chevron toggle. Child items cannot have their own children. */\n children?: SidebarItem[];\n /** When true, renders a horizontal divider above this item in the list. */\n dividerBefore?: boolean;\n /** When true, the item is non-interactive — it cannot be clicked and receives no hover or active styling. */\n disabled?: boolean;\n /**\n * When true, clicking the item emits `itemClick` but does not highlight it\n * as active or update `activeId`. Use for action items (e.g. logout)\n * that are not navigation destinations.\n */\n nonRoute?: boolean;\n}\n\n/** Default content from the Figma (node 260:4700). */\nconst DEFAULT_ITEMS: SidebarItem[] = [\n { id: 'home', label: 'Home', icon: 'house' },\n { id: 'connect', label: 'Connect Me', icon: 'message-circle', dividerBefore: true },\n { id: 'guide', label: 'Guide Me', icon: 'compass' },\n { id: 'assess', label: 'Assess Me', icon: 'binoculars' },\n {\n id: 'resources',\n label: 'Resource Library',\n icon: 'folder',\n dividerBefore: true,\n children: [\n { id: 'wellness', label: 'Wellness', icon: 'leaf' },\n { id: 'relationships', label: 'Relationships', icon: 'users' },\n { id: 'work', label: 'Work & Education', icon: 'briefcase' },\n { id: 'financial', label: 'Financial', icon: 'landmark' },\n { id: 'legal', label: 'Legal', icon: 'scale' },\n { id: 'lifestyle', label: 'Lifestyle', icon: 'smile' },\n { id: 'home-auto', label: 'Home & Auto', icon: 'car' },\n { id: 'abroad', label: 'Working Abroad', icon: 'plane' },\n ],\n },\n];\n\nconst DEFAULT_FOOTER: SidebarItem[] = [\n { id: 'location', label: 'Location & Language', icon: 'globe' },\n { id: 'logout', label: 'Logout', icon: 'log-out' },\n];\n\n/**\n * Sidebar — vertical app navigation from the ComPsych Design System.\n *\n * Figma: Core Components — base 260:4700, parts 213:1585.\n *\n * Icon + label items with default / hover / selected / focus / disabled states,\n * section dividers, expandable groups (chevron), and a pinned footer\n * (location & language, logout). Data-driven via `items` / `footerItems`,\n * defaulting to the design's content. All values are sys tokens.\n */\n@Component({\n selector: 'compsych-sidebar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n templateUrl: './sidebar.html',\n styleUrl: './sidebar.css',\n host: { role: 'navigation', 'aria-label': 'Sidebar' },\n})\nexport class SidebarComponent {\n /** Navigation items rendered in the scrollable main area. Defaults to the standard ComPsych nav set. */\n readonly items = input<SidebarItem[]>(DEFAULT_ITEMS);\n /** Items pinned to the bottom of the sidebar, outside the scroll region. Intended for utility actions such as language selection and logout. */\n readonly footerItems = input<SidebarItem[]>(DEFAULT_FOOTER);\n /** Currently active item id — supports two-way binding via `[(activeId)]`. Updated on click for route items; unchanged for `nonRoute` items. */\n readonly activeId = model<string>('home');\n /**\n * Emitted with the item's `id` whenever a non-disabled, non-group item is clicked.\n * Fires for both route items and `nonRoute` items.\n * Group items (those with `children`) do not emit — they only toggle their expanded state.\n */\n readonly itemClick = output<string>();\n\n private readonly expanded = signal<Set<string>>(new Set());\n\n constructor(private readonly sanitizer: DomSanitizer) {}\n\n isExpanded(id: string): boolean {\n return this.expanded().has(id);\n }\n\n isActive(id: string): boolean {\n return this.activeId() === id;\n }\n\n onItemClick(item: SidebarItem): void {\n if (item.disabled) return;\n if (item.children?.length) {\n this.expanded.update((s) => {\n const next = new Set(s);\n next.has(item.id) ? next.delete(item.id) : next.add(item.id);\n return next;\n });\n return;\n }\n if (item.nonRoute) {\n this.itemClick.emit(item.id);\n return;\n }\n this.activeId.set(item.id);\n }\n\n /**\n * Looks up a Lucide icon by name and injects explicit width/height attributes\n * so the SVG renders at the correct size when injected via [innerHTML].\n * Angular's CSS encapsulation does not add _ngcontent attributes to dynamically\n * injected content, so explicit SVG attributes are the reliable solution.\n */\n iconSvg(name: string, size = 20, strokeWidth = 1.5): SafeHtml {\n let svg = LUCIDE_ICONS[name] ?? '';\n svg = svg.replace('<svg ', `<svg width=\"${size}\" height=\"${size}\" `);\n if (strokeWidth !== 1.5) {\n svg = svg.replace('stroke-width=\"1.5\"', `stroke-width=\"${strokeWidth}\"`);\n }\n return this.sanitizer.bypassSecurityTrustHtml(svg);\n }\n}\n","<div class=\"cs-sb__scroll\">\n <ul class=\"cs-sb__list\">\n @for (item of items(); track item.id) {\n @if (item.dividerBefore) {\n <li class=\"cs-sb__divider\" aria-hidden=\"true\"></li>\n }\n <li class=\"cs-sb__item\">\n <button\n type=\"button\"\n class=\"cs-sb__row\"\n [class.cs-sb__row--active]=\"!item.nonRoute && isActive(item.id)\"\n [disabled]=\"item.disabled || null\"\n [attr.aria-current]=\"!item.nonRoute && isActive(item.id) ? 'page' : null\"\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item.id) : null\"\n (click)=\"onItemClick(item)\"\n >\n <span\n class=\"cs-sb__icon\"\n [innerHTML]=\"iconSvg(item.icon, 20, !item.nonRoute && isActive(item.id) ? 2 : 1.5)\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"cs-sb__label\">{{ item.label }}</span>\n @if (item.children?.length) {\n <span\n class=\"cs-sb__chevron\"\n [class.cs-sb__chevron--open]=\"isExpanded(item.id)\"\n [innerHTML]=\"iconSvg('chevron-down', 18)\"\n aria-hidden=\"true\"\n ></span>\n }\n </button>\n\n @if (item.children?.length && isExpanded(item.id)) {\n <ul class=\"cs-sb__sublist\">\n @for (child of item.children; track child.id) {\n <li>\n <button\n type=\"button\"\n class=\"cs-sb__row cs-sb__row--sub\"\n [class.cs-sb__row--active]=\"isActive(child.id)\"\n [disabled]=\"child.disabled || null\"\n [attr.aria-current]=\"isActive(child.id) ? 'page' : null\"\n (click)=\"onItemClick(child)\"\n >\n <span\n class=\"cs-sb__icon\"\n [innerHTML]=\"iconSvg(child.icon, 20, isActive(child.id) ? 2 : 1.5)\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"cs-sb__label\">{{ child.label }}</span>\n </button>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n</div>\n\n<div class=\"cs-sb__footer\">\n <ul class=\"cs-sb__list\">\n @for (item of footerItems(); track item.id) {\n <li class=\"cs-sb__item\">\n <button\n type=\"button\"\n class=\"cs-sb__row\"\n [class.cs-sb__row--active]=\"!item.nonRoute && isActive(item.id)\"\n [disabled]=\"item.disabled || null\"\n (click)=\"onItemClick(item)\"\n >\n <span\n class=\"cs-sb__icon\"\n [innerHTML]=\"iconSvg(item.icon, 20, !item.nonRoute && isActive(item.id) ? 2 : 1.5)\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"cs-sb__label\">{{ item.label }}</span>\n </button>\n </li>\n }\n </ul>\n</div>\n"]}
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../../../../packages/angular/src/lib/sidebar/sidebar.ts","../../../../../../packages/angular/src/lib/sidebar/sidebar.html"],"names":[],"mappings":"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","sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n model,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { LUCIDE_ICONS } from '@compsych-ui-components/shared/assets/lucide-icons.generated';\r\n\r\nexport interface SidebarItem {\r\n /** Stable identifier used by `activeId` and emitted by `itemClick`. */\r\n id: string;\r\n /** Text label displayed next to the icon. */\r\n label: string;\r\n /** Lucide icon name (kebab-case), e.g. `'house'` or `'folder'`. */\r\n icon: string;\r\n /** Child items — renders this item as an expandable group with a chevron toggle. Child items cannot have their own children. */\r\n children?: SidebarItem[];\r\n /** When true, renders a horizontal divider above this item in the list. */\r\n dividerBefore?: boolean;\r\n /** When true, the item is non-interactive — it cannot be clicked and receives no hover or active styling. */\r\n disabled?: boolean;\r\n /**\r\n * When true, clicking the item emits `itemClick` but does not highlight it\r\n * as active or update `activeId`. Use for action items (e.g. logout)\r\n * that are not navigation destinations.\r\n */\r\n nonRoute?: boolean;\r\n}\r\n\r\n/** Default content from the Figma (node 260:4700). */\r\nconst DEFAULT_ITEMS: SidebarItem[] = [\r\n { id: 'home', label: 'Home', icon: 'house' },\r\n { id: 'connect', label: 'Connect Me', icon: 'message-circle', dividerBefore: true },\r\n { id: 'guide', label: 'Guide Me', icon: 'compass' },\r\n { id: 'assess', label: 'Assess Me', icon: 'binoculars' },\r\n {\r\n id: 'resources',\r\n label: 'Resource Library',\r\n icon: 'folder',\r\n dividerBefore: true,\r\n children: [\r\n { id: 'wellness', label: 'Wellness', icon: 'leaf' },\r\n { id: 'relationships', label: 'Relationships', icon: 'users' },\r\n { id: 'work', label: 'Work & Education', icon: 'briefcase' },\r\n { id: 'financial', label: 'Financial', icon: 'landmark' },\r\n { id: 'legal', label: 'Legal', icon: 'scale' },\r\n { id: 'lifestyle', label: 'Lifestyle', icon: 'smile' },\r\n { id: 'home-auto', label: 'Home & Auto', icon: 'car' },\r\n { id: 'abroad', label: 'Working Abroad', icon: 'plane' },\r\n ],\r\n },\r\n];\r\n\r\nconst DEFAULT_FOOTER: SidebarItem[] = [\r\n { id: 'location', label: 'Location & Language', icon: 'globe' },\r\n { id: 'logout', label: 'Logout', icon: 'log-out' },\r\n];\r\n\r\n/**\r\n * Sidebar — vertical app navigation from the ComPsych Design System.\r\n *\r\n * Figma: Core Components — base 260:4700, parts 213:1585.\r\n *\r\n * Icon + label items with default / hover / selected / focus / disabled states,\r\n * section dividers, expandable groups (chevron), and a pinned footer\r\n * (location & language, logout). Data-driven via `items` / `footerItems`,\r\n * defaulting to the design's content. All values are sys tokens.\r\n */\r\n@Component({\r\n selector: 'compsych-sidebar',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [],\r\n templateUrl: './sidebar.html',\r\n styleUrl: './sidebar.css',\r\n host: { role: 'navigation', 'aria-label': 'Sidebar' },\r\n})\r\nexport class SidebarComponent {\r\n /** Navigation items rendered in the scrollable main area. Defaults to the standard ComPsych nav set. */\r\n readonly items = input<SidebarItem[]>(DEFAULT_ITEMS);\r\n /** Items pinned to the bottom of the sidebar, outside the scroll region. Intended for utility actions such as language selection and logout. */\r\n readonly footerItems = input<SidebarItem[]>(DEFAULT_FOOTER);\r\n /** Currently active item id — supports two-way binding via `[(activeId)]`. Updated on click for route items; unchanged for `nonRoute` items. */\r\n readonly activeId = model<string>('home');\r\n /**\r\n * Emitted with the item's `id` whenever a non-disabled, non-group item is clicked.\r\n * Fires for both route items and `nonRoute` items.\r\n * Group items (those with `children`) do not emit — they only toggle their expanded state.\r\n */\r\n readonly itemClick = output<string>();\r\n\r\n private readonly expanded = signal<Set<string>>(new Set());\r\n\r\n constructor(private readonly sanitizer: DomSanitizer) {}\r\n\r\n isExpanded(id: string): boolean {\r\n return this.expanded().has(id);\r\n }\r\n\r\n isActive(id: string): boolean {\r\n return this.activeId() === id;\r\n }\r\n\r\n onItemClick(item: SidebarItem): void {\r\n if (item.disabled) return;\r\n if (item.children?.length) {\r\n this.expanded.update((s) => {\r\n const next = new Set(s);\r\n next.has(item.id) ? next.delete(item.id) : next.add(item.id);\r\n return next;\r\n });\r\n return;\r\n }\r\n if (item.nonRoute) {\r\n this.itemClick.emit(item.id);\r\n return;\r\n }\r\n this.activeId.set(item.id);\r\n }\r\n\r\n /**\r\n * Looks up a Lucide icon by name and injects explicit width/height attributes\r\n * so the SVG renders at the correct size when injected via [innerHTML].\r\n * Angular's CSS encapsulation does not add _ngcontent attributes to dynamically\r\n * injected content, so explicit SVG attributes are the reliable solution.\r\n */\r\n iconSvg(name: string, size = 20, strokeWidth = 1.5): SafeHtml {\r\n let svg = LUCIDE_ICONS[name] ?? '';\r\n svg = svg.replace('<svg ', `<svg width=\"${size}\" height=\"${size}\" `);\r\n if (strokeWidth !== 1.5) {\r\n svg = svg.replace('stroke-width=\"1.5\"', `stroke-width=\"${strokeWidth}\"`);\r\n }\r\n return this.sanitizer.bypassSecurityTrustHtml(svg);\r\n }\r\n}\r\n","<div class=\"cs-sb__scroll\">\r\n <ul class=\"cs-sb__list\">\r\n @for (item of items(); track item.id) {\r\n @if (item.dividerBefore) {\r\n <li class=\"cs-sb__divider\" aria-hidden=\"true\"></li>\r\n }\r\n <li class=\"cs-sb__item\">\r\n <button\r\n type=\"button\"\r\n class=\"cs-sb__row\"\r\n [class.cs-sb__row--active]=\"!item.nonRoute && isActive(item.id)\"\r\n [disabled]=\"item.disabled || null\"\r\n [attr.aria-current]=\"!item.nonRoute && isActive(item.id) ? 'page' : null\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item.id) : null\"\r\n (click)=\"onItemClick(item)\"\r\n >\r\n <span\r\n class=\"cs-sb__icon\"\r\n [innerHTML]=\"iconSvg(item.icon, 20, !item.nonRoute && isActive(item.id) ? 2 : 1.5)\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"cs-sb__label\">{{ item.label }}</span>\r\n @if (item.children?.length) {\r\n <span\r\n class=\"cs-sb__chevron\"\r\n [class.cs-sb__chevron--open]=\"isExpanded(item.id)\"\r\n [innerHTML]=\"iconSvg('chevron-down', 18)\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n }\r\n </button>\r\n\r\n @if (item.children?.length && isExpanded(item.id)) {\r\n <ul class=\"cs-sb__sublist\">\r\n @for (child of item.children; track child.id) {\r\n <li>\r\n <button\r\n type=\"button\"\r\n class=\"cs-sb__row cs-sb__row--sub\"\r\n [class.cs-sb__row--active]=\"isActive(child.id)\"\r\n [disabled]=\"child.disabled || null\"\r\n [attr.aria-current]=\"isActive(child.id) ? 'page' : null\"\r\n (click)=\"onItemClick(child)\"\r\n >\r\n <span\r\n class=\"cs-sb__icon\"\r\n [innerHTML]=\"iconSvg(child.icon, 20, isActive(child.id) ? 2 : 1.5)\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"cs-sb__label\">{{ child.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n\r\n<div class=\"cs-sb__footer\">\r\n <ul class=\"cs-sb__list\">\r\n @for (item of footerItems(); track item.id) {\r\n <li class=\"cs-sb__item\">\r\n <button\r\n type=\"button\"\r\n class=\"cs-sb__row\"\r\n [class.cs-sb__row--active]=\"!item.nonRoute && isActive(item.id)\"\r\n [disabled]=\"item.disabled || null\"\r\n (click)=\"onItemClick(item)\"\r\n >\r\n <span\r\n class=\"cs-sb__icon\"\r\n [innerHTML]=\"iconSvg(item.icon, 20, !item.nonRoute && isActive(item.id) ? 2 : 1.5)\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"cs-sb__label\">{{ item.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n"]}
package/index.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as i2 from "./lib/accordion/accordion";
4
4
  import * as i3 from "./lib/header-nav/header-nav";
5
5
  import * as i4 from "./lib/sidebar/sidebar";
6
6
  export { ButtonComponent } from './lib/button/button';
7
- export type { ButtonVariant } from './lib/button/button';
7
+ export type { ButtonVariant, ButtonSize, ButtonIconPosition, ButtonType } from './lib/button/button';
8
8
  export { AccordionComponent } from './lib/accordion/accordion';
9
9
  export type { AccordionItem, AccordionButton, AccordionVariant, NestedAccordionItem } from './lib/accordion/accordion-types';
10
10
  export { HeaderNavComponent } from './lib/header-nav/header-nav';
@@ -1,38 +1,52 @@
1
- import { AfterViewInit, OnDestroy } from '@angular/core';
2
- import { FocusOrigin } from '@angular/cdk/a11y';
3
- import { BooleanInput } from '@angular/cdk/coercion';
4
1
  import * as i0 from "@angular/core";
5
- /** Visual style of a `compsych-button`. Controls color, border, and elevation. Icon variants (e.g. `'filled-icon'`) are used by `NavAction` to render icon buttons in the header nav and are not handled by the button component itself. */
6
- export type ButtonVariant = 'filled' | 'tonal' | 'outlined' | 'elevated' | 'text' | 'danger' | 'danger-outlined' | 'filled-icon' | 'tonal-icon' | 'outlined-icon' | 'elevated-icon' | 'text-icon' | 'danger-icon' | 'danger-outlined-icon';
7
- export declare class ButtonComponent implements AfterViewInit, OnDestroy {
8
- private readonly focusMonitor;
9
- private readonly elementRef;
2
+ /** Visual style of a `compsych-button`. Controls color, border, and elevation. */
3
+ export type ButtonVariant = 'filled' | 'tonal' | 'outlined' | 'elevated' | 'text' | 'danger' | 'danger-outlined';
4
+ /** Button dimensions controls height, padding, and font size. */
5
+ export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge';
6
+ /** Placement of `icon` relative to the label. */
7
+ export type ButtonIconPosition = 'leading' | 'trailing';
8
+ /** Native button behaviour. `'submit'`/`'reset'` make the component a real form control. */
9
+ export type ButtonType = 'button' | 'submit' | 'reset';
10
+ /**
11
+ * A themeable button that renders a native `<button>` element, so it is fully
12
+ * form-submittable and keyboard/screen-reader accessible out of the box.
13
+ */
14
+ export declare class ButtonComponent {
10
15
  /** Text label rendered on the button. */
11
16
  label: string;
12
17
  /** Visual style of the button. Defaults to `'filled'`. */
13
18
  variant: ButtonVariant;
14
19
  /** Button dimensions — controls height, padding, and font size. Defaults to `'small'`. */
15
- size: 'small' | 'medium' | 'large' | 'xlarge';
16
- /** Material Symbols icon name shown to the left of the label (e.g. `'search'`, `'add'`). Omit to show label only. */
20
+ size: ButtonSize;
21
+ /** Material Symbols icon name (e.g. `'search'`, `'arrow_forward'`). Omit to show label only. */
17
22
  icon?: string;
18
- /** When true, hides the label and renders a square icon-only button. Requires `icon` to be set. Supports boolean coercion. */
19
- get iconOnly(): boolean;
20
- set iconOnly(value: BooleanInput);
21
- private _iconOnly;
22
- /** When true, the button is non-interactive — `disabled` and `aria-disabled` attributes are set and `tabIndex` is set to `-1`. Supports boolean coercion. */
23
- get disabled(): boolean;
24
- set disabled(value: BooleanInput);
25
- private _disabled;
26
- protected _focused: boolean;
27
- protected _focusOrigin: FocusOrigin;
28
- get hostClass(): string;
29
- get ariaDisabled(): string | null;
30
- get attrDisabled(): '' | null;
31
- onEnterKeydown(event: Event): void;
32
- onSpaceKeydown(event: Event): void;
33
- onSpaceKeyup(): void;
34
- ngAfterViewInit(): void;
35
- ngOnDestroy(): void;
23
+ /** Placement of `icon` relative to the label. Defaults to `'leading'`. */
24
+ iconPosition: ButtonIconPosition;
25
+ /** Native button type. Use `'submit'` inside a `<form>` to submit it. Defaults to `'button'`. */
26
+ type: ButtonType;
27
+ /**
28
+ * Accessible name. Required for icon-only buttons since the icon is decorative
29
+ * (`aria-hidden`). When `iconOnly` is set and this is omitted, `label` is used.
30
+ */
31
+ ariaLabel?: string;
32
+ /** Hides the label and renders a square icon-only button. Requires `icon`. Supports boolean coercion. */
33
+ iconOnly: boolean;
34
+ /** Disables the button — non-interactive and dimmed. Supports boolean coercion. */
35
+ disabled: boolean;
36
+ /**
37
+ * Loading state. Replaces the content with a centered spinner while preserving
38
+ * the button's width, blocks re-clicks, and exposes `aria-busy="true"`. The
39
+ * variant's colours are retained (unlike `disabled`, which dims the button).
40
+ * Supports boolean coercion.
41
+ */
42
+ loading: boolean;
43
+ /** Space-separated class list applied to the inner native button. */
44
+ get buttonClasses(): string;
45
+ /** Resolves the accessible name, guaranteeing icon-only and loading buttons are labelled. */
46
+ get computedAriaLabel(): string | null;
36
47
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "compsych-button", never, { "label": { "alias": "label"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconOnly": { "alias": "iconOnly"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "compsych-button", never, { "label": { "alias": "label"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconPosition": { "alias": "iconPosition"; "required": false; }; "type": { "alias": "type"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "iconOnly": { "alias": "iconOnly"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, {}, never, never, true, never>;
49
+ static ngAcceptInputType_iconOnly: unknown;
50
+ static ngAcceptInputType_disabled: unknown;
51
+ static ngAcceptInputType_loading: unknown;
38
52
  }
@@ -1,46 +1,54 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
3
- import { ButtonVariant } from '../button/button';
3
+ import { ButtonVariant, ButtonIconPosition } from '../button/button';
4
4
  import * as i0 from "@angular/core";
5
5
  export type HeaderNavLevel = 'main' | 'sub-page' | 'not-logged';
6
6
  /**
7
- * A navigation item used for breadcrumbs, labeled buttons, and icon buttons.
8
- * - Breadcrumb: provide `id`, `label`, and any `variant` (variant is unused during breadcrumb rendering).
9
- * - Icon button: provide `id`, an icon `variant` (e.g. `'filled-icon'`), `icon` (Lucide name), and optionally `label` (used as aria-label).
10
- * - Labeled button: provide `id`, a non-icon `variant`, and `label`.
7
+ * A navigation item used for both breadcrumbs and action buttons.
8
+ * - Breadcrumb: provide `id` and `label`.
9
+ * - Action button: provide `id`, `label`, and optionally `variant`.
11
10
  */
12
11
  export interface NavAction {
13
12
  /** Stable identifier emitted by the `action` output when this item is clicked. */
14
13
  id: string;
15
- /** Text displayed in the breadcrumb trail, on the button, or as aria-label for icon buttons. */
16
- label?: string;
17
- /** Lucide icon name. Required when `variant` is an icon variant (e.g. `'filled-icon'`). */
14
+ /** Text displayed in the breadcrumb trail or on the action button. */
15
+ label: string;
16
+ /** Button style for action buttons. Defaults to `'filled'` when omitted. Not used for breadcrumbs. */
17
+ variant?: ButtonVariant;
18
+ /** Material Symbols icon shown on the action button (e.g. `'chevron_right'`). Not used for breadcrumbs. */
18
19
  icon?: string;
19
- /** Button style. Icon variants (e.g. `'filled-icon'`) render an icon button; all others render a labeled button. */
20
- variant: ButtonVariant;
20
+ /** Placement of `icon` relative to the label. Defaults to `'leading'`. */
21
+ iconPosition?: ButtonIconPosition;
22
+ /** Renders the action button disabled. */
23
+ disabled?: boolean;
24
+ /** Renders the action button in a loading state (spinner, interaction blocked). */
25
+ loading?: boolean;
21
26
  }
22
27
  /**
23
28
  * Header Navigation — top app bar from the ComPsych Design System.
24
29
  *
25
30
  * Three layout levels controlled by `level`:
26
- * - `'main'` — menu toggle, brand logo + wordmark, action buttons.
27
- * - `'sub-page'` — menu toggle, logo mark + breadcrumb trail, action buttons.
28
- * - `'not-logged'` — menu toggle, brand, action buttons.
31
+ * - `'main'` — menu toggle, brand logo + wordmark, logged-in action cluster.
32
+ * - `'sub-page'` — menu toggle, logo mark + breadcrumb trail, logged-in action cluster.
33
+ * - `'not-logged'` — menu toggle, brand, public action cluster (language, help, CTA buttons).
29
34
  *
30
- * Icon and labeled buttons in the right action area are configured via `actionButtons`.
31
35
  * All interactive elements emit a string id via the `action` output.
36
+ * For breadcrumbs and action buttons the emitted value is the `NavAction.id`.
37
+ * For built-in icon buttons a fixed string is emitted (see `action` docs).
32
38
  */
33
39
  export declare class HeaderNavComponent {
34
40
  private readonly sanitizer;
35
41
  /**
36
- * Layout of the header left region.
37
- * - `'main'` — logo + brand label.
38
- * - `'sub-page'` — symbol mark + breadcrumb trail.
39
- * - `'not-logged'` — logo + brand label.
42
+ * Layout and feature set of the header.
43
+ * - `'main'` — logo + brand label, logged-in action cluster (search, notifications, documents, language, avatar, logout).
44
+ * - `'sub-page'` — symbol mark + breadcrumb trail, same logged-in action cluster.
45
+ * - `'not-logged'` — logo + brand label, public action cluster (language, help, action buttons).
40
46
  */
41
47
  level: HeaderNavLevel;
42
48
  /** Whether the paired sidebar is open — toggles the menu icon (☰ ↔ ✕). */
43
49
  sidebarOpen: boolean;
50
+ /** Show the hamburger / close menu toggle button. */
51
+ showMenuToggle: boolean;
44
52
  /** Accessible label for the brand area (logo + wordmark) used by screen readers. */
45
53
  brandLabelAria: string;
46
54
  /** Brand wordmark text rendered next to the logo on `main` and `not-logged` levels. */
@@ -60,10 +68,29 @@ export declare class HeaderNavComponent {
60
68
  * via the `action` output when clicked.
61
69
  */
62
70
  breadcrumbs: NavAction[];
71
+ /** Notification badge count. Badge is hidden when 0. */
72
+ notificationCount: number;
73
+ /** Avatar initials for the logged-in user. */
74
+ avatarInitials: string;
75
+ /** Show the search icon button (logged-in levels). */
76
+ showSearch: boolean;
77
+ /** Show the calendar-check icon button (logged-in levels). */
78
+ showCalendarChecked: boolean;
79
+ /** Show the notifications icon button (logged-in levels). */
80
+ showNotifications: boolean;
81
+ /** Show the documents icon button (logged-in levels). */
82
+ showDocuments: boolean;
83
+ /** Show the avatar button (logged-in levels). */
84
+ showAvatar: boolean;
85
+ /** Show the language icon button (main, sub-page, and not-logged levels). */
86
+ showLanguage: boolean;
87
+ /** Show the help icon button (not-logged level). */
88
+ showHelp: boolean;
89
+ /** Show the logout icon button (main and sub-page levels). */
90
+ showLogout: boolean;
63
91
  /**
64
- * Buttons rendered in the right action area.
65
- * - When `variant` ends in `'-icon'`, renders an icon button using `icon` as the Lucide name; `label` is used as aria-label.
66
- * - Otherwise, renders a labeled `<compsych-button>` using `label` and `variant`.
92
+ * Additional configurable buttons rendered in the actions area.
93
+ * Each entry requires `id` and `label`; `variant` defaults to `'filled'`.
67
94
  * Clicking any button emits its `id` via the `action` output.
68
95
  */
69
96
  actionButtons: NavAction[];
@@ -72,18 +99,40 @@ export declare class HeaderNavComponent {
72
99
  * Fixed values for built-in controls:
73
100
  * - `'menu-toggle'` — hamburger / close button
74
101
  * - `'logo'` — brand / logo button
102
+ * - `'search'` — search icon button
103
+ * - `'calendar-checked'` — calendar-check icon button
104
+ * - `'notifications'` — notifications icon button
105
+ * - `'documents'` — documents icon button
106
+ * - `'language'` — language icon button
107
+ * - `'help'` — help icon button
108
+ * - `'avatar'` — avatar button
109
+ * - `'logout'` — logout icon button
75
110
  *
76
111
  * For `breadcrumbs` and `actionButtons` items, the item's `NavAction.id` is emitted.
77
112
  */
78
113
  readonly action: EventEmitter<string>;
114
+ readonly searchIconSvg: SafeHtml;
115
+ readonly calendarCheckedIconSvg: SafeHtml;
116
+ readonly bellIconSvg: SafeHtml;
117
+ readonly fileTextIconSvg: SafeHtml;
118
+ readonly globeIconSvg: SafeHtml;
119
+ readonly helpIconSvg: SafeHtml;
120
+ readonly logOutIconSvg: SafeHtml;
121
+ readonly userIconSvg: SafeHtml;
79
122
  constructor(sanitizer: DomSanitizer);
123
+ get isLoggedOut(): boolean;
80
124
  get isSubPage(): boolean;
81
125
  get menuIconSvg(): SafeHtml;
126
+ get badgeText(): string;
127
+ get notificationAriaLabel(): string;
82
128
  /**
83
- * Returns a trusted SVG for the given Lucide icon name, sized at 20 × 20.
84
- * Used in the template for dynamic icon buttons via `actionButtons`.
129
+ * Looks up a Lucide icon by name and injects explicit width/height attributes
130
+ * (20 × 20) so the SVG renders at the correct size when injected via [innerHTML].
131
+ * Angular's CSS encapsulation does not add _ngcontent attributes to dynamically
132
+ * injected content, so CSS descendant selectors targeting `svg` would not apply —
133
+ * explicit SVG attributes are the reliable solution.
85
134
  */
86
- iconSvg(name: string): SafeHtml;
135
+ private trustedIcon;
87
136
  static ɵfac: i0.ɵɵFactoryDeclaration<HeaderNavComponent, never>;
88
- static ɵcmp: i0.ɵɵComponentDeclaration<HeaderNavComponent, "compsych-header-nav", never, { "level": { "alias": "level"; "required": false; }; "sidebarOpen": { "alias": "sidebarOpen"; "required": false; }; "brandLabelAria": { "alias": "brandLabelAria"; "required": false; }; "brandLabel": { "alias": "brandLabel"; "required": false; }; "brandLabelColor": { "alias": "brandLabelColor"; "required": false; }; "clientLogoUrl": { "alias": "clientLogoUrl"; "required": false; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; }; "actionButtons": { "alias": "actionButtons"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
137
+ static ɵcmp: i0.ɵɵComponentDeclaration<HeaderNavComponent, "compsych-header-nav", never, { "level": { "alias": "level"; "required": false; }; "sidebarOpen": { "alias": "sidebarOpen"; "required": false; }; "showMenuToggle": { "alias": "showMenuToggle"; "required": false; }; "brandLabelAria": { "alias": "brandLabelAria"; "required": false; }; "brandLabel": { "alias": "brandLabel"; "required": false; }; "brandLabelColor": { "alias": "brandLabelColor"; "required": false; }; "clientLogoUrl": { "alias": "clientLogoUrl"; "required": false; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; }; "notificationCount": { "alias": "notificationCount"; "required": false; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; "showCalendarChecked": { "alias": "showCalendarChecked"; "required": false; }; "showNotifications": { "alias": "showNotifications"; "required": false; }; "showDocuments": { "alias": "showDocuments"; "required": false; }; "showAvatar": { "alias": "showAvatar"; "required": false; }; "showLanguage": { "alias": "showLanguage"; "required": false; }; "showHelp": { "alias": "showHelp"; "required": false; }; "showLogout": { "alias": "showLogout"; "required": false; }; "actionButtons": { "alias": "actionButtons"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
89
138
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@compsych-ui-components/angular",
3
- "version": "6.0.10",
3
+ "version": "6.1.1",
4
4
  "description": "Angular UI components for compsych",
5
5
  "publishConfig": {
6
6
  "access": "public",